Ergo y crowdfunding
6 de septiembre de 2019

¿Qué es el Crowdfunding?
El crowdfunding es una forma de recaudar capital a través de los esfuerzos colectivos de individuos. Las campañas se inician principalmente a través de la web y permiten que proyectos y negocios sean financiados al recaudar pequeñas cantidades de dinero de un gran número de personas.
Uno de los ejemplos más conocidos de startups de crowdfunding exitosas es Oculus Rift, un visor de realidad virtual. La empresa Oculus VR inició su campaña en 2012 y fue adquirida por Facebook dos años después por un total de 2 mil millones de dólares. Además de las startups habituales, también hay muchos proyectos de blockchain que han seguido el camino del crowdfunding, por ejemplo, Ethereum, Tron y EOS. Hoy en día, existen numerosas plataformas que te permiten publicar tu campaña. Algunas de las más grandes son Indiegogo, Kickstarter y Gofundme, solo por nombrar algunas.
El crowdfunding tiene muchos beneficios: un amplio alcance, eficiencia y aspectos de marketing son los más convincentes... ¡Pero por ahora, pasemos a lo que realmente importa!
Introduciendo el Crowdfunding en Ergo
Hace unos días, el 28 de agosto, el desarrollador principal Kushti declaró en el (foro de Ergo)[www.ergoforum.org] que logró escribir e implementar con éxito un código que permite a los usuarios iniciar una campaña de crowdfunding sobre la blockchain de Ergo (como se menciona en la página 6 del libro blanco. Este código incluso funciona con la API de billetera actual. Aquí hay una guía rápida sobre cómo configurar la billetera.
En este artículo, aprenderás cómo hacer exactamente eso: crowdfunding sobre Ergo. También te llevará a través de la propuesta de la primera campaña de la historia, que es financiar el desarrollo del script de crowdfunding post-EIP1.
Si deseas entrar en todos los detalles, por favor lee la siguiente sección, “El Script”. De lo contrario, puedes simplemente saltar a leer las secciones “Cómo Donar”, “Cómo Recoger Donaciones” y “Propuesta de Proyecto de Crowdfunding” a continuación.
El Script
El script de crowdfunding más simple, según el Libro Blanco de ErgoScript (página 6), es “un script para la siguiente situación de crowdfunding: un patrocinador de proyecto (con la clave backerPubKey) desea dar dinero a un proyecto (con la clave projectPubKey), pero solo si el proyecto recauda suficiente dinero (al menos minToRaise) de otras fuentes antes de una fecha límite (expresada en términos de HEIGHT).
Para dar dinero al proyecto, el patrocinador creará una caja de salida protegida por el siguiente script. El script contiene dos condiciones: una para el caso de que la fecha límite haya pasado (permitiendo al patrocinador recuperar el dinero) y una para el caso de que haya tenido éxito (permitiendo al proyecto gastar el dinero si la cantidad es al menos minToRaise antes de la fecha límite).
Para asegurar que se ha recaudado suficiente dinero, el script buscará en la colección de salidas una caja con un valor suficiente que vaya a projectPubKey. Para verificar a dónde va el valor de la caja de salida, el script leerá el script que protege la caja de salida y lo comparará con el script correspondiente a proveDlog(projectPubKey); este script se puede obtener mediante projectPubKey.propBytes.
Como actualmente la API no soporta la inclusión de variables de entorno personalizadas (solo las predefinidas como HEIGHT), la única forma de compilar el script es reemplazar tales variables en el script del libro blanco con valores concretos. Por ejemplo, considera que una campaña de crowdfunding es exitosa si está recaudando 500 Ergs antes del número de bloque 50,000. Para backerPubKey y projectPubKey podemos usar la función PK() que acepta solo claves serializadas P2PK en este momento. Entonces, el script modificado del Libro Blanco se convierte en el siguiente:
{
val backerPubKey = PK("9h7DHKSDgE4uvP8313GVGdsEg3AvdAWSSTG7XZsLwBfeth4aePG")
val projectPubKey = PK("9gBSqNT9LH9WjvWbyqEvFirMbYp4nfGHnoWdceKGu45AKiya3Fq")
val deadline = 50000
val minToRaise = 500L * 1000000000
val fundraisingFailure = HEIGHT >= deadline && backerPubKey
val enoughRaised = {(outBox: Box) =>outBox.value >= minToRaise
&& outBox.propositionBytes == projectPubKey.propBytes
}
val fundraisingSuccess = HEIGHT < deadline && projectPubKey && OUTPUTS.exists(enoughRaised)
fundraisingFailure || fundraisingSuccess
}
Cómo Donar
Primero que nada, JSON no soporta cadenas de múltiples líneas, así que necesitas reemplazar los saltos de línea con \n.
Además, las comillas deben ser escapadas, así que usa " en lugar de ". El JSON resultante se enviará a /script/p2sAddress.
Para donar a un proyecto, primero obtén tu dirección de /wallet/addresses, toma por ejemplo la primera de ellas. Pon la dirección en backerPubKey, así que una solicitud a /script/p2sAddress se verá como la siguiente después de este paso:
{
"source": "{
val backerPubKey = PK(\"9...\")
val projectPubKey = PK(\"9gBSqNT9LH9WjvWbyqEvFirMbYp4nfGHnoWdceKGu45AKiya3Fq\")
val deadline = 50000
val minToRaise = 500L * 1000000000
val fundraisingFailure = HEIGHT >= deadline && backerPubKey
val enoughRaised = {
(outBox: Box) =>
outBox.value >= minToRaise && outBox.propositionBytes == projectPubKey.propBytes
}
val fundraisingSuccess = HEIGHT < deadline && projectPubKey && OUTPUTS.exists(enoughRaised)
fundraisingFailure || fundraisingSuccess
}"
}
con tu dirección en lugar de “9…”.
Envía la cadena a /script/p2sAddress para obtener una respuesta como:
{
"address": "GB3kh2izpWKvyZfMboQwsEscjPaZcz9WrzGqZB4ZrkzRreiFMV6HZYWXGMK3rqCjDCoPgWGNzfnYSUhivW4a1VRYPE7uZXwKnBcqWcRkiuTx6QW55EcPcWeELUsumwdtKoFtWY583nWnKZff"
}
Copia la cadena de dirección (GB3… en nuestro ejemplo) y envía el dinero a ella a través de /wallet/payment/send. Una solicitud al método API para enviar 10 Ergs (10 mil millones de nanoErgs) será como sigue:
[
{
"address": "GB3kh2izpWKvyZfMboQwsEscjPaZcz9WrzGqZB4ZrkzRreiFMV6HZYWXGMK3rqCjDCoPgWGNzfnYSUhivW4a1VRYPE7uZXwKnBcqWcRkiuTx6QW55EcPcWeELUsumwdtKoFtWY583nWnKZff",
"value": 10000000000
}
]
¡Eso es todo!
Ahora la billetera encontrará automáticamente la caja en la blockchain, ya que contiene la clave pública que pertenece a la billetera en la condición de reembolso. La billetera luego verifica periódicamente si la caja es gastable construyendo una transacción más simple con la caja como entrada y solo una salida (a la misma dirección). Después de la altura de reembolso (50,000 en nuestro ejemplo), la billetera podrá gastar la caja y así el valor de la caja se añadirá a /wallet/balances.
Ten en cuenta que esto no será el caso después de la implementación de EIP-1 3, ya que la billetera utilizará patrones de reconocimiento más estrechos para entonces.
Cómo Recoger Donaciones
La billetera que está asociada con la clave pública del proyecto encontrará cajas entrantes en la blockchain. Sin embargo, no podrá asegurarse de que las cajas sean gastables, ya que la billetera actualmente está utilizando una transacción más simple para eso, y el script falla para tal transacción de gasto.
Antes de que se implemente el método /wallet/boxes/uncertain, la única forma para que un proyecto encuentre cajas entrantes. Luego, /wallet/transaction/send con cajas serializadas proporcionadas manualmente (en “inputsRaw”) (usa /utxo/byIdBinary para obtener la caja serializada por su identificador).
Kushti hizo eso por sí mismo y obtuvo la siguiente transacción.
Ten en cuenta que EIP-1 romperá este flujo de trabajo también.
Kushti propone recaudar 500 Ergs antes del bloque 50,000 para desarrollar scripts de línea de comandos (en Python) para organizar y participar en campañas de crowdfunding después de la implementación de EIP-1. Los scripts de línea de comandos son más adecuados que hacer solicitudes manualmente y también podrían ser utilizados para construir interfaces gráficas sobre ellos.
El tesoro proporcionó la mitad de los fondos, así que otros necesitan contribuir con los 250 Erg restantes colectivamente. En caso de un fracaso de la campaña, los reembolsos se darán automáticamente. Como recoger promesas no es trivial en este momento, Kushti liderará el rol del proyecto, así que por favor usa la siguiente clave, que está controlada por él:
9gBSqNT9LH9WjvWbyqEvFirMbYp4nfGHnoWdceKGu45AKiya3Fq
Para donar cualquier cantidad de dinero, por favor sigue la sección “Cómo Donar” arriba reemplazando backerPubKey con tu clave pública, y la cantidad prometida con un valor adecuado (ten en cuenta que está en nanoErgs, 1 Erg = 1.000.000.000 nanoErgs).
Como siempre, si tienes más preguntas, sugerencias o quieres participar en el movimiento, por favor únete a nuestros canales de redes sociales o foro.
Share post
13 de agosto de 2025
12 de agosto de 2025
9 de julio de 2025
12 de mayo de 2025

9 de febrero de 2022

8 de febrero de 2022

5 de febrero de 2022

1 de febrero de 2022

27 de enero de 2022

20 de enero de 2022

18 de enero de 2022

6 de enero de 2022

4 de enero de 2022

30 de diciembre de 2021

28 de diciembre de 2021

23 de diciembre de 2021








