Okos szerződések az emberekért
2018. október 19.
Manapság sok blockchain-nal kapcsolatos hír azt mondja nekünk, hogy egy X bank vagy egy Y vállalat "blockchain-t" fog használni a "költségek csökkentésére". Alapvetően ez azt jelenti, hogy egy újabb buzzword-öt tekintenek a nagy bankárok csak egy eszköznek, hogy hatékonyabban vonjanak ki értéket mindenhol, és hogy megtakarítsanak a munkahelyek megszüntetésével.
Míg elkerülöm, hogy bármit is mondjak "Satoshi víziójáról" (ott csak spekulációk ásására van lehetőség a távozása után), egy széleskörű nézet, amit a korai években tapasztaltam az online fórumok felhasználói körében, az az, hogy egy kriptovalutának eszközöket kell biztosítania az átlagemberek számára, akik a kisvállalkozásaik mögött állnak, anélkül, hogy sokkal többet tennének, mint a megélhetés biztosítása, nem pedig a depersonalizált nagy pénzügyi tőke. A kriptovaluta eszközeinek az eredeti széles közösségi vízió szemében lehetővé kell tenniük az emberek számára, hogy gazdasági tevékenységet folytassanak, függetlenül a vállalkozás méretétől, földrajzi elhelyezkedésétől, a nagy szereplők által meghatározott kamatlábaktól stb. Az eszközöknek lehetővé kell tenniük az emberek számára, hogy szerződéseket kössenek (nem papíralapú szerződéseket, hanem digitális, önérvényesítő és ésszerűen okos szerződéseket) függetlenül a joghatóságok, hagyományok, követett üzleti gyakorlatok stb. közötti különbségektől.
Remélem, hogy az Ergo hasznos lesz itt. Ezrek kis szövetkezetei és egyéni vállalkozói fontosabbak az egészséges és fenntartható gazdagság növekedéséhez világszerte, mint néhány vállalat, amely offshore paradicsomokban rejti el a profitját.
Példaként vegyünk egy szövetkezeti szövetséget (például a Radical Routes), amely pénzügyi segítséget kíván nyújtani egy vállalkozónak, aki több ezer kilométerre van (mondjuk, Rojavában).
Most néhány részletet feltételeznünk kell. Először is, tegyük fel, hogy négy szövetkezet van a hálózatban. Ezek összesen 10,000 Ergot (egyenlő részekben, tehát 2,500 Ergot mindegyik) zárnak le egy szerződésben, amely a következőket mondja:
- A szövetkezetek a pubkeyA, pubkeyB, pubkeyC, pubkeyD nyilvános kulcsokkal vannak társítva. A vállalkozó egy businessKey nyilvános kulccsal van társítva.
- A szövetkezetek pénzt zárnak le egy, a finanszírozási szerződés által védett érme formájában, majd elvégzik a megfelelő ellenőrzést és szavaznak arról, hogy finanszírozzák-e a vállalkozót vagy sem. Az összes szerződéses alap (10,000 Ergot) a vállalkozóhoz kerül, ha 3 szavazat 4-ből mellette szól. Technikai szempontból a szavazás 3-ból 4 küszöb aláírás útján történik. Ha a szavazás nem sikeres (3 a 4-ből aláírás nem gyűlik össze) az 1,000-es blokk szám előtt, bármely szövetkezet (valójában bárki) benyújthatja a visszavonási tranzakciót, amely 2,500 Ergot (legalább) visszatérít minden szövetkezetnek. Továbbá, a finanszírozási szerződést szavazási szerződésnek is nevezik.
- A befektetéseket három célra lehet költeni, szigorú határok mellett. Nevezetesen, a vállalkozónak legalább 5,000 Ergot kell költenie felszerelésre, legalább 2,000 Ergotot egy szükséges épület építésére, a többi alapot a vállalkozó tetszés szerint költheti el.
- Annak érdekében, hogy biztosak legyünk abban, hogy a felszerelésre szánt pénzt valóban felszerelésre költik, a szövetkezeti szövetség a vállalkozó területén ismert felszereléseladók nyilvános kulcsait használja. Például vegyük figyelembe, hogy a területen vannak felszereléseladók pubkeyTool1, pubkeyTool2, pubkeyTool3, pubkeyTool4 nyilvános kulcsokkal. Technikai szempontból az átutalás egy felszereléseladó kollektív aláírásaként van megszervezve (így gyűrűs aláírás a felszereléseladók gyűrűjéből ÉS a vállalkozó aláírása)
- Hasonlóan, tegyük fel, hogy 3 építőt ismer el a szövetkezeti szövetség, akik pubkeyConstr1, pubkeyConstr2 és pubkeyConstr3 nyilvános kulcsokkal vannak társítva.
- Hasonlóan a szavazási szerződéshez, ha a felszerelési és építési szerződéseket nem közösen írják alá az 5000-es blokk szám előtt, a szövetkezeti szövetkezetek visszavonhatják a pénzeszközöket.
Különböző módok vannak a szerződések definiálására az Ergóban. Egy alacsony szintű nyelvben, ErgoTree, egy (egyes) logikai feltételt ír le arról, hogy egy érme költhető-e ennek megfelelően, és egy költési bizonyítékot, amelyet egy költési tranzakció biztosít. Belsőleg a feltétel egy típusos szintaxisfaként van ábrázolva, így a neve. A struktúra lehetővé teszi számunkra, hogy előre költségelemzést végezzünk stb. A ErgoScript nevű magasabb szintű nyelv lehetővé teszi a hagyományosabb és olvashatóbb leírást, változók használatát és a logika alprogramokra bontását.
Kezdjük a fő szerződéssel, amelyet a fenti (1-3) pontokban definiáltunk:
{
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
}
Ez a ErgoScript-ben írt szkript egy szintaxisfává lesz fordítva (amelyet a blokkláncra egy sorosított formában kell írni) azáltal, hogy konkrét értékekkel kötik össze a változókat (pubkeyA, pubkeyB, pubkeyC, pubkeyD, spendingContract1Hash, spendingContract2Hash). Az spendingContract1Hash egy (sorosított) felszerelési költési szkript hash-e, amelyet alább fogunk bemutatni, az spendingContract2Hash pedig egy építési költési szkript hash-e.
A felszerelési költési szkript a következő:
{
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
}
És az építési szkript a következő:
{
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
}
Most tegyük fel, hogy a szövetkezeti szövetség létrehozott egy érmét, amelyet a szavazási szerződés véd. Az alábbiakban bemutatjuk, hogyan végezheti el a vállalkozó az üzletét:
- Hozzon létre egy tranzakciót, amely felhasználja az érmét, és legalább három érmét hoz létre, egyet a felszerelési költési szerződéssel, egy másikat az építési költési szerződéssel, a harmadik pedig egy érmét, amelyet a vállalkozó nyilvános kulcsa véd.
- Küldje el a tranzakciót a szövetkezeteknek, várjon a tranzakcióra, amelynek a küszöb aláírásos bemenete közzétételre kerül a blokkláncon.
- Vegyen figyelembe egy szerződést egy felszereléseladóval, közösen írja alá a költési tranzakciót.
- Vegyen figyelembe egy szerződést egy építővel, közösen írja alá a költési tranzakciót.
A vállalkozó könnyen elmenekülhet anélkül, hogy bármilyen üzletet folytatna, de legfeljebb 3,000 Ergot. Ezt meg lehet oldani, például ezt a pénzt csak az 5,000-es blokk szám után lehetne költeni, és addig a pénzt a szövetkezetek visszavonhatják. A felszerelési és építési költések esetén a vállalkozó együtt dolgozik néhány, feltehetően már elismert üzlettel. Így a befektető csökkenti a kockázatait.
A kódot és példa tranzakciókat online találhat. Kérjük, vegye figyelembe, hogy több példánk van összetett aláírási sémákról, többlépéses szerződésekről (folyamatban lévő végrehajtási utakkal, mint a MAST a Bitcoinban, de ciklusok engedélyezésével), oracle-okról, közösségi finanszírozásról stb. Kérjük, ellenőrizze a példák tárolónkat.
Share post
2025. augusztus 13.
2025. augusztus 12.
2025. július 9.
2025. május 12.






