Smart Contracts dla Ludzi

This page is machine-translated.
Alex Chepurnoy

19 października 2018

Wiele wiadomości związanych z blockchainem w dzisiejszych czasach mówi nam, że bank X lub korporacja Y
zamierza użyć "blockchainu" do "redukcji kosztów". W zasadzie oznacza to, że kolejny modny termin jest
postrzegany przez wielkich bankierów jako kolejny sposób na wydobycie wartości z wszędzie w bardziej efektywny sposób,
a także na oszczędności związane z redukcją miejsc pracy.

Chociaż staram się unikać mówienia czegokolwiek o "wizji Satoshiego" (nic poza spekulacjami nie można tam znaleźć po
jego exodusie), szeroki pogląd, który zaobserwowałem w pierwszych latach na forach internetowych, jest taki, że kryptowaluta
powinna dostarczać narzędzi, aby wzbogacić zwykłych ludzi prowadzących małe firmy, które ledwo wiążą koniec z końcem, a nie bezosobowy wielki kapitał finansowy. Narzędzia
kryptowaluty w oczach oryginalnej wizji szerokiej społeczności powinny pozwalać ludziom na prowadzenie działalności gospodarczej niezależnie od wielkości firmy, lokalizacji geograficznej, stóp procentowych ustalanych przez wielkich graczy itd.
Narzędzia powinny pozwalać ludziom na zawieranie umów (nie papierowych umów, ale cyfrowych, samowykonawczych i rozsądnie inteligentnych umów) niezależnie od różnic w jurysdykcjach, tradycjach, stosowanych praktykach biznesowych itd.

Mam nadzieję, że Ergo będzie tutaj przydatne. Tysiące małych spółdzielni i indywidualnych przedsiębiorców są ważniejsze dla zdrowego i zrównoważonego wzrostu bogactwa na całym świecie niż kilka korporacji ukrywających zyski w offshore'owych rajach.

Na przykład, rozważmy federację spółdzielni (taką jak Radical Routes), która chce zapewnić pomoc finansową przedsiębiorcy oddalonemu o tysiące kilometrów (powiedzmy, w Rojavie).

Musimy teraz założyć pewne szczegóły. Po pierwsze, załóżmy, że w sieci są cztery spółdzielnie. Łącznie blokują 10,000 Ergs (w równych częściach, więc 2,500 Ergs każda) w umowie, która mówi co następuje:

  1. Spółdzielnie są powiązane z kluczami publicznymi pubkeyA, pubkeyB, pubkeyC, pubkeyD. Przedsiębiorca jest powiązany z kluczem publicznym businessKey.
  2. Spółdzielnie blokują pieniądze w monetach chronionych umową finansową, następnie przeprowadzają należyta staranność i głosują, czy sfinansować przedsiębiorcę, czy nie. Cały fundusz umowy (10,000 Ergs) trafia do przedsiębiorcy, jeśli 3 głosy z 4 są za tym. Technicznie, głosowanie odbywa się za pomocą podpisu progowego 3 z 4. Jeśli głosowanie nie powiedzie się (3 z 4 podpisów nie zostanie zebranych) przed numerem bloku 1,000, każda spółdzielnia (właściwie, każdy) może złożyć transakcję wypłaty, która zwraca 2,500 Ergs (przynajmniej) każdej spółdzielni. Ponadto, umowa finansowa będzie również nazywana umową głosowania.
  3. Inwestycje mogą być wydawane na trzy cele, z pewnymi ścisłymi ograniczeniami. Mianowicie, przedsiębiorca musi wydać co najmniej 5,000 Ergs na sprzęt, co najmniej 2,000 Ergs na budowę potrzebnego budynku, inne fundusze przedsiębiorca może wydawać dowolnie.
  4. Aby upewnić się, że pieniądze na sprzęt zostaną wydane na sprzęt, federacja spółdzielni korzysta z kluczy publicznych znanych sprzedawców sprzętu w okolicy przedsiębiorcy. Na przykład, załóżmy, że w okolicy są sprzedawcy sprzętu z kluczami publicznymi pubkeyTool1, pubkeyTool2, pubkeyTool3, pubkeyTool4. Technicznie, transfer jest organizowany jako zbiorowy podpis jednego ze sprzedawców sprzętu (tak więc podpis pierścieniowy od sprzedawców sprzętu ORAZ podpis przedsiębiorcy)
  5. Podobnie, załóżmy, że w federacji spółdzielni są 3 budowniczych, których federacja uznaje, powiązanych z kluczami publicznymi pubkeyConstr1, pubkeyConstr2 i pubkeyConstr3.
  6. Podobnie jak w umowie głosowania, jeśli umowy na sprzęt i budowę nie zostaną współpodpisane przed numerem bloku 5000, spółdzielnie federacji mogą wycofać fundusze.

Istnieją różne sposoby definiowania umów w Ergo. Skrypt w niskopoziomowym języku, ErgoTree, opisuje (pojedynczy) warunek logiczny, czy moneta może być wydana zgodnie z nim, a także dowód wydania dostarczony przez transakcję wydania. Wewnątrz warunek jest reprezentowany jako typowy drzewo składniowe, stąd nazwa. Struktura pozwala nam na przeprowadzenie analizy kosztów z wyprzedzeniem itd. Wyższy poziom języka, nazywanego ErgoScript, pozwala na bardziej tradycyjne i czytelne opisy, używanie zmiennych i dzielenie logiki na podprogramy.

Zacznijmy od głównej umowy zdefiniowanej w (1-3) powyżej:

{
 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
}

Ten skrypt w ErgoScript ma być skompilowany do drzewa składniowego (które ma być zapisane w blockchainie w zserializowanej formie) poprzez powiązanie go z konkretnymi wartościami dla zmiennych (pubkeyA, pubkeyB, pubkeyC, pubkeyD, spendingContract1Hash, spendingContract2Hash). spendingContract1Hash to hash (zserializowanego) skryptu wydania sprzętu, który zostanie podany poniżej, spendingContract2Hash to hash skryptu wydania budowy.

Skrypt wydania sprzętu jest poniżej:

{
 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
}

A skrypt budowy to:

{
 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
}

Teraz załóżmy, że federacja spółdzielni stworzyła monetę chronioną umową głosowania. Poniżej przedstawiono, jak przedsiębiorca może prowadzić swoją działalność:

  1. Utworzyć transakcję, która konsumuje monetę i tworzy co najmniej trzy monety, jedną z umową wydania sprzętu, drugą z umową wydania budowy, trzecią tworząc monetę chronioną przez klucz publiczny przedsiębiorcy.
  2. Wysłać transakcję do spółdzielni, czekać na transakcję z podpisanym progiem, która zostanie opublikowana w blockchainie.
  3. Rozważyć umowę z sprzedawcą sprzętu, współpodpisać transakcję wydania.
  4. Rozważyć umowę z budowniczym, współpodpisać transakcję wydania.

Przedsiębiorca może łatwo uciec, nie prowadząc żadnej działalności, ale nie więcej niż 3,000 Ergs. Można to naprawić, np. te pieniądze mogłyby być wydawane dopiero po numerze bloku 5,000, a przed tym czasem mogłyby być wycofane przez spółdzielnie. W przypadku wydatków na sprzęt i budowę przedsiębiorca współpracuje z niektórymi, przypuszczalnie już renomowanymi, firmami. W ten sposób inwestor zmniejsza swoje ryzyko.

Możesz znaleźć kod i przykładowe transakcje online. Proszę zauważyć, że mamy więcej przykładów złożonych schematów podpisów, umów wieloetapowych (z ujawnianiem ścieżek wykonania w trakcie, jak MAST w Bitcoinie, ale z dozwolonymi cyklami), wyroczni, crowdfunding itp. Proszę sprawdzić nasz repozytorium przykładów.

Share post

Ergo Infrastructure DAO: Decentralizacja Kręgosłupa Ekosystemu Ergo

Ergo Infrastructure DAO: Decentralizacja Kręgosłupa Ekosystemu Ergo

Misja Ergo zawsze była zakorzeniona w decentralizacji, nie tylko na warstwie konsensusu, ale w całym stosie.

Ergo Platform

13 sierpnia 2025

Mew Finance: Zabawne narzędzie DeFi dla ekosystemu Ergo

Mew Finance: Zabawne narzędzie DeFi dla ekosystemu Ergo

Mew Finance to zestaw aplikacji zdecentralizowanych na blockchainie Ergo.

Ergo Platform

12 sierpnia 2025

Lithos: Decentralizacja wydobycia z użyciem pul on-chain

Lithos: Decentralizacja wydobycia z użyciem pul on-chain

Lithos to nowy protokół zaprojektowany w celu przekształcenia sposobu działania pul wydobywczych poprzez przeniesienie ich na łańc.

Ergo Platform

24 lipca 2025

Sigma 6.0: Mądrzejszy, bardziej elastyczny Ergo

Sigma 6.0: Mądrzejszy, bardziej elastyczny Ergo

Sigma 6.0 to główna proponowana aktualizacja blockchaina Ergo.

Ergo Platform

23 lipca 2025

Kształtowanie przyszłości Rosen: Wezwanie społeczności w sprawie pięciu kluczowych propozycji skarbowych

Kształtowanie przyszłości Rosen: Wezwanie społeczności w sprawie pięciu kluczowych propozycji skarbowych

Współzałożyciel Rosen, Armeanio, złożył pięć nowych propozycji do Skarbu Rosen.

Ergo Platform

9 lipca 2025

Rozszerzony UTXO Ergo i Wzrost Sztucznej Inteligencji Ekonomicznej

Rozszerzony UTXO Ergo i Wzrost Sztucznej Inteligencji Ekonomicznej

Praktyczna Wizja dla Autonomicznych Agentów Ekonomicznych Autonomiczne agenty ekonomiczne na blockchainie Ergo wykonują użyteczną.

Ergo Platform

12 maja 2025

ErgoHACK X: Sztuczna Inteligencja na Blockchainie Ergo

ErgoHACK X: Sztuczna Inteligencja na Blockchainie Ergo

Świętowanie Dekady Zdecentralizowanej Innowacji Dołącz do 10.

Ergo Platform

10 kwietnia 2025