Smart Contracts per il Popolo
19 ottobre 2018
Molte notizie legate alla blockchain in questi giorni ci dicono che una banca X o una corporazione Y
utilizzerà una "blockchain" per "ridurre i costi". Fondamentalmente significa che solo un altro termine alla moda è
considerato dai grandi banchieri come solo un altro strumento per estrarre valore da ovunque in modo più efficiente,
e anche per risparmiare sui posti di lavoro.
Mentre evito di dire qualsiasi cosa sulla "visione di Satoshi" (nulla che non siano speculazioni potrebbe essere scavato lì dopo
la sua uscita), una visione ampia che ho testimoniato nei primi anni nei forum online è che una criptovaluta
dovrebbe fornire strumenti per arricchire le persone comuni dietro le loro piccole imprese che forniscono poco più che il necessario per sbarcare il lunario, non un grande capitale finanziario depersonalizzato. Gli strumenti di
una criptovaluta, agli occhi della visione originale della comunità, dovrebbero consentire alle persone di svolgere attività economiche indipendentemente dalla dimensione dell'azienda, dalla posizione geografica, dai tassi di interesse stabiliti dai grandi attori, e così via.
Gli strumenti dovrebbero consentire alle persone di stipulare contratti (non contratti cartacei, ma contratti digitali, auto-esecutivi e ragionevolmente intelligenti) indipendentemente dalle differenze nelle giurisdizioni, tradizioni, pratiche commerciali seguite, ecc.
Spero che Ergo possa essere utile qui. Migliaia di piccole cooperative e imprenditori individuali sono più importanti per una crescita della ricchezza sana e sostenibile in tutto il mondo rispetto a un paio di corporazioni che nascondono profitti in paradisi fiscali offshore.
Come esempio, consideriamo una federazione cooperativa (come Radical Routes) disposta a fornire aiuto finanziario a un imprenditore a migliaia di chilometri di distanza (diciamo, in Rojava).
Dobbiamo assumere alcuni dettagli ora. In primo luogo, assumiamo che ci siano quattro cooperative nella rete. Esse bloccano collettivamente 10.000 Ergs (in parti uguali, quindi 2.500 Ergs ciascuna) in un contratto, che dice quanto segue:
- Le cooperative sono associate a chiavi pubbliche pubkeyA, pubkeyB, pubkeyC, pubkeyD. L'imprenditore è associato a una chiave pubblica businessKey.
- Le cooperative bloccano denaro in una moneta protetta da un contratto di finanziamento, quindi effettuano la dovuta diligenza e votano se finanziare l'imprenditore o meno. Tutto il fondo del contratto (10.000 Ergs) andrà all'imprenditore se 3 voti su 4 sono favorevoli. Tecnologicamente, il voto avviene tramite una firma a soglia di 3 su 4. Se il voto non ha successo (3 su 4 firme non vengono raccolte) prima del numero di blocco 1.000, qualsiasi cooperativa (in realtà, chiunque) può presentare una transazione di prelievo, che restituisce 2.500 Ergs (almeno) a ogni cooperativa. Inoltre, il contratto di finanziamento sarà anche chiamato contratto di voto.
- Gli investimenti potrebbero essere spesi per tre obiettivi, con alcuni limiti rigorosi. In particolare, l'imprenditore deve spendere almeno 5.000 Ergs per attrezzature, almeno 2.000 Ergs per la costruzione di un edificio necessario, altri fondi l'imprenditore può spendere arbitrariamente.
- Per essere sicuri che il denaro per le attrezzature venga speso per le attrezzature, la federazione cooperativa utilizza le chiavi pubbliche di venditori di attrezzature noti nell'area dell'imprenditore. Ad esempio, considera che ci sono venditori di attrezzature con chiavi pubbliche pubkeyTool1, pubkeyTool2, pubkeyTool3, pubkeyTool4 nell'area. Tecnologicamente, il trasferimento è organizzato come una firma collettiva di uno dei venditori di attrezzature (quindi firma ad anello dai venditori di attrezzature E firma dell'imprenditore)
- Allo stesso modo, assumiamo che ci siano 3 costruttori nella federazione cooperativa che viene riconosciuta, associati a chiavi pubbliche pubkeyConstr1, pubkeyConstr2, e pubkeyConstr3.
- Analogamente al contratto di voto, se i contratti per attrezzature e costruzione non sono co-firmati prima del numero di blocco 5000, le cooperative della federazione potrebbero ritirare fondi.
Ci sono diversi modi per definire contratti in Ergo. Uno script nel linguaggio a basso livello, ErgoTree, descrive una (singola) condizione logica su se una moneta possa essere spesa secondo essa, e anche una prova di spesa fornita da una transazione di spesa. Internamente, la condizione è rappresentata come un albero di sintassi tipizzato, da cui il nome. La struttura ci consente di fare analisi dei costi in anticipo, ecc. Un linguaggio di livello superiore chiamato ErgoScript consente di avere una descrizione più tradizionale e leggibile, utilizzare variabili e suddividere la logica in sottoprogrammi.
Iniziamo con il contratto principale definito in (1-3) sopra:
{
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
}
Questo script in ErgoScript deve essere compilato in un albero di sintassi (che deve essere scritto nella blockchain in una forma serializzata) legandolo a valori concreti per le variabili (pubkeyA, pubkeyB, pubkeyC, pubkeyD, spendingContract1Hash, spendingContract2Hash). spendingContract1Hash è un hash dello script di spesa per attrezzature (serializzato) che sarà fornito di seguito, spendingContract2Hash è un hash dello script di spesa per la costruzione.
Lo script di spesa per attrezzature è il seguente:
{
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
}
E lo script di costruzione è:
{
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
}
Ora assumiamo che la federazione cooperativa abbia creato una moneta protetta dal contratto di voto. Di seguito è riportato come l'imprenditore può svolgere la sua attività:
- Creare una transazione che consuma la moneta e crea almeno tre monete, una con il contratto di spesa per attrezzature, un'altra con il contratto di spesa per la costruzione, la terza crea una moneta protetta dalla chiave pubblica dell'imprenditore.
- Inviare la transazione alle cooperative, attendere che la transazione con l'input firmato a soglia venga pubblicata sulla blockchain.
- Considerare un contratto con un venditore di attrezzature, co-firmare una transazione di spesa.
- Considerare un contratto con un costruttore, co-firmare una transazione di spesa.
L'imprenditore può facilmente scappare senza fare alcun affare, ma con non più di 3.000 Ergs. Questo può essere corretto, ad esempio, questo denaro potrebbe essere reso spendibile solo dopo il numero di blocco 5.000, e prima di quel momento il denaro potrebbe essere ritirato dalle cooperative. Per le spese per attrezzature e costruzione, l'imprenditore sta lavorando insieme a qualche azienda, presumibilmente già rispettabile. Così l'investitore sta riducendo i suoi rischi.
Puoi trovare codice e transazioni di esempio online. Si prega di notare che abbiamo più esempi di schemi di firma complessi, contratti multi-step (con percorsi di esecuzione in corso che rivelano, come MAST in Bitcoin, ma con cicli consentiti), oracoli, crowdfunding e così via. Si prega di controllare il nostro repository di esempi.
Share post
13 agosto 2025
9 luglio 2025
12 maggio 2025
7 agosto 2022




















