Contratos Inteligentes para el Pueblo
19 de octubre de 2018
Muchos de los noticias relacionadas con blockchain en estos días nos dicen que un banco X o una corporación Y
ván a usar una "blockchain" para "reducir costos". Básicamente significa que solo otra palabra de moda es
considerada por los grandes banqueros como solo otra herramienta para extraer valor de todas partes de una manera más eficiente,
y también para ahorrar en la reducción de puestos de trabajo.
Mientras evito decir algo sobre "la visión de Satoshi" (nada más que especulaciones se podrían encontrar allí después de
su éxodo), una visión amplia que presencié en los primeros años alrededor de los foros en línea es que una criptomoneda
debe proporcionar herramientas para enriquecer a las personas comunes detrás de sus pequeños negocios que apenas logran llegar a fin de mes, no a un gran capital financiero despersonalizado. Las herramientas de
a una criptomoneda, a los ojos de la visión original de la comunidad, deberían permitir a las personas realizar actividades económicas sin depender del tamaño del negocio, la ubicación geográfica, las tasas de interés establecidas por los grandes jugadores, etc.
Las herramientas deberían permitir a las personas hacer contratos (no contratos en papel, sino contratos digitales, autoejecutables y razonablemente inteligentes) sin depender de diferencias en jurisdicciones, tradiciones, prácticas comerciales seguidas, etc.
Espero que Ergo sea útil aquí. Miles de pequeñas cooperativas y emprendedores individuales son más importantes para un crecimiento de riqueza saludable y sostenible en todo el mundo que un par de corporaciones que ocultan ganancias en paraísos fiscales.
Como ejemplo, consideremos una federación cooperativa (como Radical Routes) dispuesta a proporcionar ayuda financiera a un emprendedor a miles de kilómetros de distancia (digamos, en Rojava).
Necesitamos asumir algunos detalles ahora. En primer lugar, supongamos que hay cuatro cooperativas en la red. Ellas bloquean colectivamente 10,000 Ergs (en partes iguales, así que 2,500 Ergs cada una) en un contrato, que dice lo siguiente:
- Las cooperativas están asociadas con claves públicas pubkeyA, pubkeyB, pubkeyC, pubkeyD. El emprendedor está asociado con una clave pública businessKey.
- Las cooperativas están bloqueando dinero en una moneda protegida por un contrato de financiamiento, luego realizan la debida diligencia y votan sobre si financiar al emprendedor o no. Todo el fondo del contrato (10,000 Ergs) irá al emprendedor si 3 votos de 4 son a favor. Técnicamente, la votación se realiza a través de una firma de umbral de 3 de 4. Si la votación no tiene éxito (3 de 4 firmas no se recogen) antes del número de bloque 1,000, cualquier cooperativa (de hecho, cualquier persona) puede enviar una transacción de retiro, que devuelve 2,500 Ergs (como mínimo) a cada cooperativa. Además, el contrato de financiamiento también se llamará el contrato de votación.
- Las inversiones podrían gastarse en tres objetivos, con algunos límites estrictos. Es decir, el emprendedor debe gastar al menos 5,000 Ergs en equipos, al menos 2,000 Ergs en la construcción de un edificio necesario, otros fondos que el emprendedor puede gastar arbitrariamente.
- Para asegurarse de que el dinero para equipos se gastará en equipos, la federación cooperativa está utilizando claves públicas de vendedores de equipos conocidos en el área del emprendedor. Por ejemplo, considere que hay vendedores de equipos con claves públicas pubkeyTool1, pubkeyTool2, pubkeyTool3, pubkeyTool4 en el área. Técnicamente, la transferencia se organiza como una firma colectiva de uno de los vendedores de equipos (así que firma en anillo de los vendedores de equipos Y la firma del emprendedor)
- De manera similar, suponga que hay 3 constructores en la federación cooperativa que se está reconociendo, asociados con claves públicas pubkeyConstr1, pubkeyConstr2, y pubkeyConstr3.
- De manera similar al contrato de votación, si los contratos de equipos y construcción no son co-firmados antes del número de bloque 5000, las cooperativas de la federación podrían retirar fondos.
Hay diferentes formas de definir contratos en Ergo. Un script en el lenguaje de bajo nivel, ErgoTree, describe una (única) condición lógica sobre si una moneda podría gastarse de acuerdo a ello, y también una prueba de gasto proporcionada por una transacción de gasto. Internamente, la condición se representa como un árbol de sintaxis tipado, de ahí el nombre. La estructura nos permite realizar análisis de costos anticipados, etc. Un lenguaje de nivel superior llamado ErgoScript permite tener una descripción más tradicional y legible, usar variables y dividir la lógica en subrutinas.
Comencemos con el contrato principal definido en (1-3) arriba:
{
val votingSuccess = atLeast(3, Array(pubkeyA, pubkeyB, pubkeyC, pubkeyD))
val properSpending = OUTPUTS(0).value >= 5000L &&
blake2b256(OUTPUTS(0).propositionBytes) == spendingContract1Hash &&
OUTPUTS(1).value >= 2000L &&
blake2b256(OUTPUTS(1).propositionBytes) == spendingContract2Hash
val withdrawCondition = HEIGHT >= 1000L &&
OUTPUTS(0).value >= 2500L && OUTPUTS(0).propositionBytes == pubkeyA.propBytes &&
OUTPUTS(1).value >= 2500L && OUTPUTS(1).propositionBytes == pubkeyB.propBytes &&
OUTPUTS(2).value >= 2500L && OUTPUTS(2).propositionBytes == pubkeyC.propBytes &&
OUTPUTS(3).value >= 2500L && OUTPUTS(3).propositionBytes == pubkeyD.propBytes
(votingSuccess && properSpending) || withdrawCondition
}
Este script en ErgoScript se compilará en un árbol de sintaxis (que se escribirá en la blockchain en una forma serializada) al vincularlo con valores concretos para las variables (pubkeyA, pubkeyB, pubkeyC, pubkeyD, spendingContract1Hash, spendingContract2Hash). spendingContract1Hash es un hash del script de gasto de equipos (serializado) que se proporcionará a continuación, spendingContract2Hash es un hash del script de gasto de construcción.
El script de gasto de equipos es el siguiente:
{
val spendingSuccess = (pubkeyTool1 || pubkeyTool2 || pubkeyTool3 || pubkeyTool4) && businessKey
val withdrawCondition = HEIGHT > 5000L &&
OUTPUTS(0).value >= 1250L && OUTPUTS(0).propositionBytes == pubkeyA.propBytes &&
OUTPUTS(1).value >= 1250L && OUTPUTS(1).propositionBytes == pubkeyB.propBytes &&
OUTPUTS(2).value >= 1250L && OUTPUTS(2).propositionBytes == pubkeyC.propBytes &&
OUTPUTS(3).value >= 1250L && OUTPUTS(3).propositionBytes == pubkeyD.propBytes
spendingSuccess || withdrawCondition
}
Y el script de construcción es:
{
val spendingSuccess = (pubkeyConstr1 || pubkeyConstr2 || pubkeyConstr3) && businessKey
val withdrawCondition = HEIGHT > 5000L &&
OUTPUTS(0).value >= 500L && OUTPUTS(0).propositionBytes == pubkeyA.propBytes &&
OUTPUTS(1).value >= 500L && OUTPUTS(1).propositionBytes == pubkeyB.propBytes &&
OUTPUTS(2).value >= 500L && OUTPUTS(2).propositionBytes == pubkeyC.propBytes &&
OUTPUTS(3).value >= 500L && OUTPUTS(3).propositionBytes == pubkeyD.propBytes
spendingSuccess || withdrawCondition
}
Ahora suponga que la federación cooperativa ha creado una moneda protegida por el contrato de votación. A continuación se muestra cómo el emprendedor puede hacer su negocio:
- Crear una transacción que consuma la moneda y cree al menos tres monedas, una con el contrato de gasto de equipos, otra con el contrato de gasto de construcción, la tercera crea una moneda protegida por la clave pública del emprendedor.
- Enviar la transacción a las cooperativas, esperar a que la transacción con la entrada firmada por umbral se publique en la blockchain.
- Considerar un contrato con un vendedor de equipos, co-firmar una transacción de gasto.
- Considerar un contrato con un constructor, co-firmar una transacción de gasto.
El emprendedor puede fácilmente escapar sin hacer ningún negocio, pero con no más de 3,000 Ergs. Esto se puede solucionar, por ejemplo, este dinero podría hacerse gastable solo después del número de bloque 5,000, y antes de eso el dinero podría ser retirado por las cooperativas. Para los gastos de equipos y construcción, el emprendedor está trabajando junto con algunos, presumiblemente ya reputados, negocios. Así, el inversor está reduciendo sus riesgos.
Puedes encontrar código y ejemplos de transacciones en línea. Por favor, ten en cuenta que tenemos más ejemplos de esquemas de firma complejos, contratos de múltiples pasos (con rutas de ejecución en curso reveladas, como MAST en Bitcoin, pero con ciclos permitidos), oráculos, crowdfunding, etc. Por favor, revisa nuestro repositorio de ejemplos.
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








