Ergo e crowdfunding
6 settembre 2019

Cos'è il Crowdfunding?
Il crowdfunding è un modo per raccogliere capitali attraverso gli sforzi collettivi di individui. Le campagne sono per lo più avviate tramite il web e consentono a progetti e aziende di essere finanziati raccogliendo piccole somme di denaro da un gran numero di persone.
Uno dei più noti esempi di startup di crowdfunding di successo è Oculus Rift, un visore per la realtà virtuale. L'azienda Oculus VR ha avviato la sua campagna nel 2012 ed è stata acquisita da Facebook due anni dopo per un totale di 2 miliardi di dollari. Oltre alle solite startup, ci sono anche molti progetti blockchain che hanno seguito la strada del crowdfunding, ad esempio, Ethereum, Tron ed EOS. Oggi esistono numerose piattaforme che ti permettono di pubblicare la tua campagna. Alcune delle più grandi sono Indiegogo, Kickstarter e Gofundme, solo per citarne alcune.
Il crowdfunding ha molti vantaggi: una vasta portata, efficienza e aspetti di marketing sono i più convincenti... Ma per ora, passiamo a ciò che è davvero importante!
Introduzione al Crowdfunding su Ergo
Qualche giorno fa, il 28 agosto, il sviluppatore principale Kushti ha dichiarato sul (forum di Ergo)[www.ergoforum.org] di essere riuscito a scrivere e implementare con successo un codice che consente agli utenti di avviare una campagna di crowdfunding sulla blockchain di Ergo (come menzionato nella whitepaper pagina 6. Questo codice funziona anche con l'attuale API del wallet. Qui c'è una guida rapida su come impostare il wallet.
In questo articolo, imparerai come fare esattamente questo: crowdfunding sulla blockchain di Ergo! Ti guiderà anche attraverso la proposta della prima campagna di sempre, che è quella di finanziare lo sviluppo dello script di crowdfunding post-EIP1.
Se desideri entrare nei dettagli, ti preghiamo di leggere la sezione seguente, "Lo Script". Altrimenti, puoi semplicemente saltare alla lettura delle sezioni "Come Donare", "Come Raccogliere Donazioni" e "Proposta di Progetto di Crowdfunding" qui sotto.
Lo Script
Il più semplice script di crowdfunding, secondo il White Paper di ErgoScript (pagina 6), è "uno script per la seguente situazione di crowdfunding: un sostenitore del progetto (con chiave backerPubKey) desidera dare denaro a un progetto (con chiave projectPubKey), ma solo se il progetto raccoglie abbastanza denaro (almeno minToRaise) da altre fonti entro una scadenza (espressa in termini di HEIGHT).
Per dare denaro al progetto, il sostenitore creerà un'uscita protetta dal seguente script. Lo script contiene due condizioni: una per il caso in cui la scadenza è scaduta (permette al sostenitore di riavere indietro il denaro) e una per il caso in cui ha avuto successo (permette al progetto di spendere il denaro se l'importo è almeno minToRaise prima della scadenza).
Per garantire che sia stato raccolto abbastanza denaro, lo script cercherà nella collezione di uscite un box con un valore sufficiente destinato al projectPubKey. Per controllare dove va il valore del box di uscita, lo script leggerà lo script che protegge il box di uscita e lo confronterà con lo script corrispondente a proveDlog(projectPubKey); questo script può essere ottenuto da projectPubKey.propBytes.
Poiché attualmente l'API non supporta l'incorporamento di variabili ambientali personalizzate (solo quelle predefinite come HEIGHT), l'unico modo per compilare lo script è sostituire tali variabili nello script del white-paper con valori concreti. Ad esempio, considera che una campagna di crowdfunding ha successo se raccoglie 500 Ergs prima del numero di blocco 50.000. Per backerPubKey e projectPubKey possiamo usare la funzione PK() che accetta solo chiavi serializzate P2PK al momento. Quindi lo script modificato dal WhitePaper diventa il seguente:
{
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
}
Come Donare
Prima di tutto, JSON non supporta stringhe su più righe, quindi devi sostituire i ritorni a capo con \n.
Inoltre, le virgolette devono essere scappate, quindi usa " invece di ". Il JSON risultante sarà inviato a /script/p2sAddress.
Per donare a un progetto, prima ottieni il tuo indirizzo da /wallet/addresses, prendi ad esempio il primo di essi. Metti l'indirizzo nel backerPubKey, quindi una richiesta a /script/p2sAddress apparirà come segue dopo questo passaggio:
{
"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 il tuo indirizzo al posto di “9…”.
Invia la stringa a /script/p2sAddress per ricevere una risposta simile a:
{
"address": "GB3kh2izpWKvyZfMboQwsEscjPaZcz9WrzGqZB4ZrkzRreiFMV6HZYWXGMK3rqCjDCoPgWGNzfnYSUhivW4a1VRYPE7uZXwKnBcqWcRkiuTx6QW55EcPcWeELUsumwdtKoFtWY583nWnKZff"
}
Copia la stringa dell'indirizzo (GB3… nel nostro esempio) e invia il denaro a esso tramite /wallet/payment/send. Una richiesta al metodo API per inviare 10 Ergs (10 miliardi di nanoErgs) sarà simile alla seguente:
[
{
"address": "GB3kh2izpWKvyZfMboQwsEscjPaZcz9WrzGqZB4ZrkzRreiFMV6HZYWXGMK3rqCjDCoPgWGNzfnYSUhivW4a1VRYPE7uZXwKnBcqWcRkiuTx6QW55EcPcWeELUsumwdtKoFtWY583nWnKZff",
"value": 10000000000
}
]
Questo è tutto!
Ora il wallet troverà automaticamente il box sulla blockchain, poiché contiene la chiave pubblica che appartiene al wallet nella condizione di rimborso. Il wallet controlla periodicamente se il box è spendibile costruendo una transazione più semplice con il box come input e solo un output (allo stesso indirizzo). Dopo l'altezza di rimborso (50.000 nel nostro esempio) il wallet sarà in grado di spendere il box e quindi il valore del box sarà aggiunto a /wallet/balances.
Si prega di notare che questo non sarà il caso dopo l'implementazione di EIP-1 3 poiché il wallet utilizzerà modelli di riconoscimento ristretti da allora.
Come Raccogliere Donazioni
Il wallet associato alla chiave pubblica del progetto troverà i box in arrivo sulla blockchain. Tuttavia, non sarà in grado di assicurarsi che i box siano spendibili, poiché il wallet attualmente utilizza una transazione più semplice per questo, e lo script fallisce per tale transazione di spesa.
Prima che il metodo /wallet/boxes/uncertain venga implementato, l'unico modo per un progetto di trovare box in arrivo. Poi /wallet/transaction/send con box serializzati forniti manualmente (in "inputsRaw") (usa /utxo/byIdBinary per ottenere il box serializzato tramite il suo identificatore).
Kushti ha fatto questo da solo e ha ottenuto la seguente transazione.
Si prega di notare che EIP-1 romperà anche questo flusso di lavoro.
Kushti propone di raccogliere 500 Ergs prima del blocco 50.000 per sviluppare script da riga di comando (in Python) per organizzare e partecipare a campagne di crowdfunding dopo l'implementazione di EIP-1. Gli script da riga di comando sono più adatti rispetto a fare richieste manualmente e possono anche essere utilizzati per costruire interfacce grafiche sopra di essi.
Il tesoro ha fornito metà dei fondi, quindi gli altri devono contribuire collettivamente ai 250 Erg mancanti. In caso di fallimento della campagna, i rimborsi saranno dati automaticamente. Poiché raccogliere le promesse non è banale al momento, Kushti guiderà il ruolo del progetto, quindi si prega di utilizzare la seguente chiave, che è controllata da lui:
9gBSqNT9LH9WjvWbyqEvFirMbYp4nfGHnoWdceKGu45AKiya3Fq
Per donare qualsiasi importo di denaro, si prega di seguire la sezione “Come Donare” sopra sostituendo backerPubKey con la propria chiave pubblica e l'importo della promessa con un valore appropriato (si prega di notare che è in nanoErgs, 1 Erg = 1.000.000.000 nanoErgs).
Come sempre, se hai ulteriori domande, suggerimenti o vuoi partecipare al movimento, ti preghiamo di unirti ai nostri canali social o forum.
Share post
13 agosto 2025
9 luglio 2025
12 maggio 2025
7 agosto 2022




















