Ergo und Crowdfunding
6. September 2019

Was ist Crowdfunding?
Crowdfunding ist eine Möglichkeit, Kapital durch die kollektiven Bemühungen von Einzelpersonen zu beschaffen. Die Kampagnen werden meist über das World Wide Web gestartet und ermöglichen es Projekten und Unternehmen, durch das Sammeln kleiner Geldbeträge von einer großen Anzahl von Menschen finanziert zu werden.
Eines der bekanntesten Beispiele für erfolgreiche Crowdfunding-Startups ist Oculus Rift, ein Virtual-Reality-Headset. Das Unternehmen Oculus VR startete seine Kampagne im Jahr 2012 und wurde nur zwei Jahre später von Facebook für insgesamt 2 Milliarden Dollar übernommen. Neben den üblichen Startups gibt es auch viele Blockchain-Projekte, die den Weg des Crowdfundings gegangen sind, zum Beispiel Ethereum, Tron und EOS. Heute gibt es zahlreiche Plattformen, die es Ihnen ermöglichen, Ihre Kampagne zu veröffentlichen. Einige der größeren sind Indiegogo, Kickstarter und Gofundme, um nur einige zu nennen.
Crowdfunding hat viele Vorteile: eine große Reichweite, Effizienz und Marketingaspekte sind die überzeugendsten... Aber jetzt kommen wir zu dem, was wirklich wichtig ist!
Einführung in Crowdfunding auf Ergo
Vor ein paar Tagen, am 28. August, erklärte der Hauptentwickler Kushti im (Ergo-Forum)[www.ergoforum.org], dass es ihm gelungen ist, erfolgreich Code zu schreiben und zu implementieren, der es Benutzern ermöglicht, eine Crowdfunding-Kampagne auf der Ergo-Blockchain zu starten (wie im Whitepaper Seite 6 erwähnt). Dieser Code funktioniert sogar mit der aktuellen Wallet-API. Hier finden Sie eine kurze Anleitung, wie Sie die Wallet einrichten.
In diesem Artikel erfahren Sie, wie Sie genau das tun: Crowdfunding auf Ergo! Es führt Sie auch durch den Vorschlag der ersten Kampagne überhaupt, die die Entwicklung des post-EIP1 Crowdfunding-Skripts finanzieren soll.
Wenn Sie in alle Details eintauchen möchten, lesen Sie bitte den folgenden Abschnitt „Das Skript“. Andernfalls können Sie einfach zu den Abschnitten „Wie man spendet“, „Wie man Spenden sammelt“ und „Vorschlag für ein Crowdfunding-Projekt“ unten springen.
Das Skript
Das einfachste Crowdfunding-Skript, laut dem ErgoScript White Paper (Seite 6), ist „ein Skript für die folgende Crowdfunding-Situation: ein Projektunterstützer (mit Schlüssel backerPubKey) möchte Geld an ein Projekt (mit Schlüssel projectPubKey) geben, aber nur, wenn das Projekt genug Geld (mindestens minToRaise) von anderen Quellen bis zu einer Frist (ausgedrückt in Bezug auf HEIGHT) sammelt.
Um Geld an das Projekt zu geben, wird der Unterstützer eine Ausgabebox erstellen, die durch das folgende Skript geschützt ist. Das Skript enthält zwei Bedingungen: eine für den Fall, dass die Frist abgelaufen ist (die es dem Unterstützer ermöglicht, das Geld zurückzubekommen) und eine für den Fall, dass es erfolgreich war (die es dem Projekt ermöglicht, das Geld auszugeben, wenn der Betrag mindestens minToRaise vor der Frist beträgt).
Um sicherzustellen, dass genug Geld gesammelt wurde, wird das Skript die Ausgabesammlung nach einer Box mit einem ausreichenden Wert suchen, die an projectPubKey geht. Um zu überprüfen, wohin der Wert der Ausgabebox geht, wird das Skript das Skript lesen, das die Ausgabebox schützt, und es mit dem Skript vergleichen, das zu proveDlog(projectPubKey) gehört; dieses Skript kann durch projectPubKey.propBytes erhalten werden.
Da die API derzeit keine Einbettung benutzerdefinierter Umgebungsvariablen unterstützt (nur vordefinierte wie HEIGHT), besteht die einzige Möglichkeit, das Skript zu kompilieren, darin, solche Variablen im Skript aus dem Whitepaper durch konkrete Werte zu ersetzen. Zum Beispiel, nehmen wir an, dass eine Crowdfunding-Kampagne erfolgreich ist, wenn sie 500 Ergs vor Blocknummer 50.000 sammelt. Für backerPubKey und projectPubKey können wir die PK()-Funktion verwenden, die derzeit nur P2PK-serialisierte Schlüssel akzeptiert. Dann wird das modifizierte Skript aus dem WhitePaper wie folgt:
{
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
}
Wie man spendet
Zunächst einmal unterstützt JSON keine mehrzeiligen Strings, daher müssen Sie Zeilenumbrüche durch \n ersetzen.
Außerdem müssen Anführungszeichen escaped werden, verwenden Sie also " anstelle von ". Das resultierende JSON wird an /script/p2sAddress gesendet.
Um einem Projekt zu spenden, holen Sie sich zuerst Ihre Adresse von /wallet/addresses, nehmen Sie z.B. die erste davon. Setzen Sie die Adresse in den backerPubKey, sodass eine Anfrage an /script/p2sAddress nach diesem Schritt wie folgt aussieht:
{
"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
}"
}
mit Ihrer Adresse anstelle von „9…“.
Senden Sie den String an /script/p2sAddress, um eine Antwort wie folgt zu erhalten:
{
"address": "GB3kh2izpWKvyZfMboQwsEscjPaZcz9WrzGqZB4ZrkzRreiFMV6HZYWXGMK3rqCjDCoPgWGNzfnYSUhivW4a1VRYPE7uZXwKnBcqWcRkiuTx6QW55EcPcWeELUsumwdtKoFtWY583nWnKZff"
}
Kopieren Sie die Adresszeichenfolge (GB3… in unserem Beispiel) und senden Sie das Geld an sie über /wallet/payment/send. Eine Anfrage an die API-Methode, um 10 Ergs (10 Milliarden nanoErgs) zu senden, wird wie folgt aussehen:
[
{
"address": "GB3kh2izpWKvyZfMboQwsEscjPaZcz9WrzGqZB4ZrkzRreiFMV6HZYWXGMK3rqCjDCoPgWGNzfnYSUhivW4a1VRYPE7uZXwKnBcqWcRkiuTx6QW55EcPcWeELUsumwdtKoFtWY583nWnKZff",
"value": 10000000000
}
]
Das ist alles!
Jetzt wird die Wallet automatisch die Box auf der Blockchain finden, da sie den öffentlichen Schlüssel enthält, der zur Wallet in der Rückerstattungsbedingung gehört. Die Wallet überprüft dann regelmäßig, ob die Box ausgebbar ist, indem sie eine einfachste Transaktion mit der Box als Eingabe und nur einem Ausgang (zur gleichen Adresse) konstruiert. Nach der Rückerstattungshöhe (50.000 in unserem Beispiel) wird die Wallet in der Lage sein, die Box auszugeben, und der Boxwert wird zu /wallet/balances hinzugefügt.
Bitte beachten Sie, dass dies nach der Implementierung von EIP-1 3 nicht der Fall sein wird, da die Wallet dann enge Erkennungsmuster verwenden wird.
Wie man Spenden sammelt
Die Wallet, die mit dem öffentlichen Schlüssel des Projekts verbunden ist, wird eingehende Boxen auf der Blockchain finden. Sie wird jedoch nicht in der Lage sein, sicherzustellen, dass die Boxen ausgebbar sind, da die Wallet derzeit eine einfachste Transaktion dafür verwendet, und das Skript bei einer solchen Ausgabetransaktion fehlschlägt.
Vor der Implementierung der Methode /wallet/boxes/uncertain war der einzige Weg für ein Projekt, eingehende Boxen zu finden. Dann /wallet/transaction/send mit manuell bereitgestellten (in „inputsRaw“) serialisierten Boxen (verwenden Sie /utxo/byIdBinary, um die serialisierte Box anhand ihrer Kennung zu erhalten).
Kushti hat das selbst gemacht und die folgende Transaktion erhalten.
Bitte beachten Sie, dass EIP-1 diesen Workflow ebenfalls unterbrechen wird.
Kushti schlägt vor, 500 Ergs vor Block 50.000 zu sammeln, um Befehlszeilenskripte (in Python) zur Organisation und Teilnahme an Crowdfunding-Kampagnen nach der Implementierung von EIP-1 zu entwickeln. Befehlszeilenskripte sind geeigneter als manuelle Anfragen und könnten auch zum Erstellen grafischer Schnittstellen verwendet werden.
Die Schatzkammer hat die Hälfte der Mittel bereitgestellt, sodass andere die fehlenden 250 Erg kollektiv beisteuern müssen. Im Falle eines Kampagnenfehlers werden Rückerstattungen automatisch gegeben. Da das Sammeln von Zusagen im Moment nicht trivial ist, wird Kushti die Projektrolle übernehmen, also verwenden Sie bitte den folgenden Schlüssel, der von ihm kontrolliert wird:
9gBSqNT9LH9WjvWbyqEvFirMbYp4nfGHnoWdceKGu45AKiya3Fq
Um einen beliebigen Geldbetrag zu spenden, folgen Sie bitte dem Abschnitt „Wie man spendet“ oben, indem Sie backerPubKey durch Ihren öffentlichen Schlüssel ersetzen und den Zusagebetrag mit einem entsprechenden Wert (bitte beachten Sie, dass es in nanoErgs ist, 1 Erg = 1.000.000.000 nanoErgs) ersetzen.
Wie immer, wenn Sie weitere Fragen, Vorschläge haben oder an der Bewegung teilnehmen möchten, treten Sie bitte unseren sozialen Medienkanälen oder dem Forum bei.
Share post
13. August 2025
12. August 2025
9. Juli 2025
12. Mai 2025
9. Dezember 2024
19. August 2024
