Smart Contracts für die Menschen
19. Oktober 2018
Viele blockchainbezogene Nachrichten heutzutage sagen uns, dass eine Bank X oder ein Unternehmen Y eine "Blockchain" verwenden wird, um "Kosten zu senken". Im Grunde bedeutet das, dass ein weiteres Schlagwort von großen Bankern als ein weiteres Werkzeug betrachtet wird, um Wert effizienter aus überall zu extrahieren und auch, um Stellen abzubauen.
Während ich es vermeide, etwas über "Satoshis Vision" zu sagen (nichts als Spekulationen könnte man dort nach seinem Exodus finden), ist eine breite Sicht, die ich in den frühen Jahren in Online-Foren beobachtet habe, dass eine Kryptowährung Werkzeuge bereitstellen sollte, um die gewöhnlichen Menschen hinter ihren kleinen Unternehmen zu bereichern, die nicht viel mehr als das Überleben ermöglichen, nicht entpersonalisiertes großes Finanzkapital. Die Werkzeuge einer Kryptowährung sollten es den Menschen ermöglichen, wirtschaftliche Aktivitäten unabhängig von Unternehmensgröße, geografischem Standort, von großen Akteuren festgelegten Zinssätzen usw. durchzuführen. Die Werkzeuge sollten es den Menschen ermöglichen, Verträge (keine Papierverträge, sondern digitale, selbstdurchsetzende und vernünftig intelligente Verträge) unabhängig von Unterschieden in Rechtsordnungen, Traditionen, gefolgten Geschäftspraktiken usw. abzuschließen.
Ich hoffe, Ergo wäre hier nützlich. Tausende von kleinen Genossenschaften und einzelnen Unternehmern sind für ein gesundes und nachhaltiges Wohlstandswachstum weltweit wichtiger als ein paar Unternehmen, die Gewinne in Offshore-Himmeln verstecken.
Als Beispiel betrachten wir eine Genossenschaftsvereinigung (wie Radical Routes), die bereit ist, einem Unternehmer, der tausende Kilometer entfernt ist (sagen wir, in Rojava), finanzielle Hilfe zu leisten.
Wir müssen jetzt einige Details annehmen. Zunächst nehmen wir an, dass es vier Genossenschaften im Netzwerk gibt. Sie sperren gemeinsam 10.000 Ergs (in gleichen Teilen, also 2.500 Ergs jeweils) in einem Vertrag, der Folgendes besagt:
- Die Genossenschaften sind mit den öffentlichen Schlüsseln pubkeyA, pubkeyB, pubkeyC, pubkeyD verbunden. Der Unternehmer ist mit einem öffentlichen Schlüssel businessKey verbunden.
- Die Genossenschaften sperren Geld in einer Münze, die durch einen Finanzierungsvertrag geschützt ist, und führen dann eine Due Diligence durch und stimmen darüber ab, ob sie den Unternehmer finanzieren oder nicht. Alle Vertragsmittel (10.000 Ergs) gehen an den Unternehmer, wenn 3 von 4 Stimmen dafür sind. Technisch wird die Abstimmung über eine 3-aus-4-Schwellenunterschrift durchgeführt. Wenn die Abstimmung nicht erfolgreich ist (3 von 4 Unterschriften werden nicht gesammelt) bevor die Blocknummer 1.000 erreicht ist, kann jede Genossenschaft (tatsächlich kann jeder) eine Abhebungs-Transaktion einreichen, die 2.500 Ergs (mindestens) an jede Genossenschaft zurückgibt. Darüber hinaus wird der Finanzierungsvertrag auch als Abstimmungsvertrag bezeichnet.
- Die Investitionen könnten für drei Ziele ausgegeben werden, mit einigen strengen Grenzen. Nämlich muss der Unternehmer mindestens 5.000 Ergs für Ausrüstung ausgeben, mindestens 2.000 Ergs für den Bau eines benötigten Gebäudes, andere Mittel kann der Unternehmer beliebig ausgeben.
- Um sicherzustellen, dass das Geld für die Ausrüstung auch für die Ausrüstung ausgegeben wird, verwendet die Genossenschaftsvereinigung öffentliche Schlüssel von bekannten Ausrüstungsverkäufern im Gebiet des Unternehmers. Zum Beispiel nehmen wir an, dass es Ausrüstungsverkäufer mit den öffentlichen Schlüsseln pubkeyTool1, pubkeyTool2, pubkeyTool3, pubkeyTool4 in der Gegend gibt. Technisch wird die Übertragung als kollektive Unterschrift eines Ausrüstungsverkäufers organisiert (also Ringunterschrift aus dem Ring der Ausrüstungsverkäufer UND Unterschrift des Unternehmers)
- Ebenso nehmen wir an, dass es 3 Bauunternehmer in der Genossenschaftsvereinigung gibt, die mit den öffentlichen Schlüsseln pubkeyConstr1, pubkeyConstr2 und pubkeyConstr3 verbunden sind.
- Ähnlich wie beim Abstimmungsvertrag, wenn die Ausrüstungs- und Bauverträge nicht vor der Blocknummer 5000 mitunterzeichnet werden, könnten die Genossenschaften der Vereinigung Mittel abheben.
Es gibt verschiedene Möglichkeiten, Verträge in Ergo zu definieren. Ein Skript in der Low-Level-Sprache, ErgoTree, beschreibt eine (einzige) logische Bedingung, ob eine Münze entsprechend ausgegeben werden kann, und auch einen Ausgabebeweis, der durch eine Ausgabetransaktion bereitgestellt wird. Intern wird die Bedingung als typisierter Syntaxbaum dargestellt, daher der Name. Die Struktur ermöglicht es uns, eine Kostenanalyse im Voraus durchzuführen usw. Die höherstufige Sprache namens ErgoScript ermöglicht eine traditionellere und lesbarere Beschreibung, die Verwendung von Variablen und die Aufteilung der Logik in Unterprogramme.
Lassen Sie uns mit dem Hauptvertrag beginnen, der in (1-3) oben definiert ist:
{
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
}
Dieses Skript in ErgoScript wird in einen Syntaxbaum (der in serialisierter Form in die Blockchain geschrieben werden soll) kompiliert, indem es mit konkreten Werten für Variablen (pubkeyA, pubkeyB, pubkeyC, pubkeyD, spendingContract1Hash, spendingContract2Hash) gebunden wird. spendingContract1Hash ist ein Hash des (serialisierten) Ausgabeskripts für Ausrüstung, das weiter unten bereitgestellt wird, spendingContract2Hash ist ein Hash des Ausgabeskripts für den Bau.
Das Ausgabeskript für die Ausrüstung ist unten:
{
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
}
Und das Bau-Skript ist:
{
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
}
Nehmen wir nun an, dass die Genossenschaftsvereinigung eine Münze geschaffen hat, die durch den Abstimmungsvertrag geschützt ist. Unten ist, wie der Unternehmer sein Geschäft betreiben kann:
- Erstellen Sie eine Transaktion, die die Münze verbraucht und mindestens drei Münzen erstellt, eine mit dem Ausgabevertrag für Ausrüstung, eine andere mit dem Ausgabevertrag für den Bau, die dritte erstellt eine Münze, die durch den öffentlichen Schlüssel des Unternehmers geschützt ist.
- Senden Sie die Transaktion an die Genossenschaften, warten Sie auf die Transaktion mit dem schwellenunterschriebenen Input, die auf der Blockchain veröffentlicht wird.
- Betrachten Sie einen Vertrag mit einem Ausrüstungsverkäufer, unterzeichnen Sie eine Ausgabetransaktion.
- Betrachten Sie einen Vertrag mit einem Bauunternehmer, unterzeichnen Sie eine Ausgabetransaktion.
Der Unternehmer kann leicht weglaufen, ohne Geschäfte zu machen, aber mit nicht mehr als 3.000 Ergs. Dies kann behoben werden, z.B. könnte dieses Geld erst nach Blocknummer 5.000 ausgegeben werden, und davor könnte das Geld von den Genossenschaften abgehoben werden. Für Ausgaben für Ausrüstung und Bau arbeitet der Unternehmer mit einigen, vermutlich bereits renommierten, Unternehmen zusammen. Somit reduziert der Investor seine Risiken.
Sie können Code und Beispieltransaktionen online finden. Bitte beachten Sie, dass wir weitere Beispiele für komplexe Signaturschemata, mehrstufige Verträge (mit Ausführungswegen, die wie MAST in Bitcoin offenbart werden, aber mit erlaubten Zyklen), Orakel, Crowdfunding usw. haben. Bitte überprüfen Sie unser Beispiel-Repository.
Share post
13. August 2025
12. August 2025
9. Juli 2025
12. Mai 2025
9. Dezember 2024
19. August 2024
