Ergo i crowdfunding
6 września 2019

Czym jest crowdfunding?
Crowdfunding to sposób pozyskiwania kapitału poprzez zbiorowe wysiłki osób. Kampanie są zazwyczaj rozpoczynane za pośrednictwem sieci internetowej i pozwalają na finansowanie projektów i firm poprzez zbieranie małych kwot pieniędzy od dużej liczby ludzi.
Jednym z najlepiej znanych przykładów udanych startupów crowdfundingowych jest Oculus Rift, zestaw słuchawkowy do wirtualnej rzeczywistości. Firma Oculus VR rozpoczęła swoją kampanię w 2012 roku, a zaledwie dwa lata później została przejęta przez Facebook za 2 miliardy dolarów. Oprócz zwykłych startupów, istnieje również wiele projektów blockchainowych, które poszły drogą crowdfundingu, na przykład Ethereum, Tron i EOS. Dziś istnieje wiele platform, które pozwalają na publikację kampanii. Niektóre z większych to Indiegogo, Kickstarter i Gofundme, żeby wymienić tylko kilka.
Crowdfunding ma wiele zalet: szeroki zasięg, efektywność i aspekty marketingowe są najbardziej przekonujące... Ale na razie przejdźmy do tego, co naprawdę ważne!
Wprowadzenie do crowdfundingu na Ergo
Kilka dni temu, 28 sierpnia, główny deweloper Kushti stwierdził na (forum Ergo)[www.ergoforum.org], że udało mu się pomyślnie napisać i wdrożyć kod, który pozwala użytkownikom rozpocząć kampanię crowdfundingową na blockchainie Ergo (jak wspomniano w białej księdze strona 6. Ten kod działa nawet z aktualnym API portfela. Tutaj znajduje się szybki przewodnik, jak skonfigurować portfel.
W tym artykule dowiesz się, jak dokładnie to zrobić: crowdfunding na Ergo! Przeprowadzi cię również przez propozycję pierwszej kampanii w historii, która ma na celu sfinansowanie rozwoju skryptu crowdfundingowego post-EIP1.
Jeśli chcesz poznać wszystkie szczegóły, przeczytaj następującą sekcję „Skrypt”. W przeciwnym razie możesz po prostu przejść do sekcji „Jak przekazać darowiznę”, „Jak zbierać darowizny” i „Propozycja projektu crowdfundingowego” poniżej.
Skrypt
Najprostszy skrypt crowdfundingowy, według Białej Księgi Ergo (strona 6), to „skrypt dla następującej sytuacji crowdfundingowej: sponsor projektu (z kluczem backerPubKey) chce przekazać pieniądze na projekt (z kluczem projectPubKey), ale tylko jeśli projekt zbierze wystarczającą ilość pieniędzy (przynajmniej minToRaise) z innych źródeł przed upływem terminu (wyrażonego w wysokości HEIGHT).
Aby przekazać pieniądze na projekt, sponsor stworzy skrzynkę wyjściową chronioną przez następujący skrypt. Skrypt zawiera dwa warunki: jeden na wypadek, gdy termin minął (umożliwiający sponsorowi odzyskanie pieniędzy) i jeden na wypadek, gdy się powiódł (umożliwiający projektowi wydanie pieniędzy, jeśli kwota wynosi co najmniej minToRaise przed upływem terminu).
Aby upewnić się, że wystarczająca ilość pieniędzy została zebrana, skrypt przeszuka kolekcję wyjść w poszukiwaniu skrzynki o wystarczającej wartości idącej do projectPubKey. Aby sprawdzić, dokąd idzie wartość skrzynki wyjściowej, skrypt odczyta skrypt chroniący skrzynkę wyjściową i porówna go ze skryptem odpowiadającym proveDlog(projectPubKey); ten skrypt można uzyskać przez projectPubKey.propBytes.
Ponieważ obecnie API nie obsługuje osadzania niestandardowych zmiennych środowiskowych (tylko zdefiniowanych, takich jak HEIGHT), jedynym sposobem na skompilowanie skryptu jest zastąpienie takich zmiennych w skrypcie z białej księgi konkretnymi wartościami. Na przykład, uznajmy, że kampania crowdfundingowa jest udana, jeśli zbiera 500 Ergs przed numerem bloku 50 000. Dla backerPubKey i projectPubKey możemy użyć funkcji PK(), która w tej chwili akceptuje tylko zserializowane klucze P2PK. Następnie zmodyfikowany skrypt z Białej Księgi staje się następujący:
{
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
}
Jak przekazać darowiznę
Przede wszystkim JSON nie obsługuje wieloliniowych ciągów, więc musisz zastąpić znaki nowej linii \n.
Ponadto, cudzysłowy muszą być escape'owane, więc użyj " zamiast ". Ostateczny JSON zostanie wysłany do /script/p2sAddress.
Aby przekazać darowiznę na projekt, najpierw uzyskaj swój adres z /wallet/addresses, weź np. pierwszy z nich. Wstaw adres do backerPubKey, więc żądanie do /script/p2sAddress będzie wyglądać następująco po tym kroku:
{
"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
}"
}
z twoim adresem zamiast „9…”.
Wyślij ciąg do /script/p2sAddress, aby uzyskać odpowiedź jak:
{
"address": "GB3kh2izpWKvyZfMboQwsEscjPaZcz9WrzGqZB4ZrkzRreiFMV6HZYWXGMK3rqCjDCoPgWGNzfnYSUhivW4a1VRYPE7uZXwKnBcqWcRkiuTx6QW55EcPcWeELUsumwdtKoFtWY583nWnKZff"
}
Skopiuj ciąg adresu (GB3… w naszym przykładzie) i wyślij pieniądze na niego za pośrednictwem /wallet/payment/send. Żądanie do metody API, aby wysłać 10 Ergs (10 miliardów nanoErgs) będzie wyglądać następująco:
[
{
"address": "GB3kh2izpWKvyZfMboQwsEscjPaZcz9WrzGqZB4ZrkzRreiFMV6HZYWXGMK3rqCjDCoPgWGNzfnYSUhivW4a1VRYPE7uZXwKnBcqWcRkiuTx6QW55EcPcWeELUsumwdtKoFtWY583nWnKZff",
"value": 10000000000
}
]
To wszystko!
Teraz portfel automatycznie znajdzie skrzynkę na blockchainie, ponieważ zawiera klucz publiczny, który należy do portfela w warunku zwrotu. Portfel następnie okresowo sprawdza, czy skrzynka jest wydawalna, konstruując najprostsza transakcję z skrzynką jako wejściem i tylko jednym wyjściem (do tego samego adresu). Po wysokości zwrotu (50 000 w naszym przykładzie) portfel będzie mógł wydać skrzynkę, a wartość skrzynki zostanie dodana do /wallet/balances.
Proszę pamiętać, że po wdrożeniu EIP-1 3 nie będzie to miało miejsca, ponieważ portfel będzie wtedy używał wąskich wzorców rozpoznawania.
Jak zbierać darowizny
Portfel, który jest powiązany z kluczem publicznym projektu, znajdzie przychodzące skrzynki na blockchainie. Jednak nie będzie w stanie upewnić się, że skrzynki są wydawalne, ponieważ portfel obecnie używa najprostszej transakcji do tego, a skrypt nie działa w przypadku takiej transakcji wydania.
Przed wdrożeniem metody /wallet/boxes/uncertain, jedynym sposobem dla projektu na znalezienie przychodzących skrzynek. Następnie /wallet/transaction/send z ręcznie podanymi (w „inputsRaw”) zserializowanymi skrzynkami (użyj /utxo/byIdBinary, aby uzyskać zserializowaną skrzynkę według jej identyfikatora).
Kushti zrobił to samodzielnie i uzyskał następującą transakcję.
Proszę pamiętać, że EIP-1 również przerwie ten proces.
Kushti proponuje zebranie 500 Ergs przed blokiem 50 000 na rozwój skryptów wiersza poleceń (w Pythonie) do organizowania i uczestniczenia w kampaniach crowdfundingowych po wdrożeniu EIP-1. Skrypty wiersza poleceń są bardziej odpowiednie niż ręczne wykonywanie żądań i mogą być również używane do budowania graficznych interfejsów na ich podstawie.
Skarb zapewnił połowę funduszy, więc inni muszą wspólnie wnieść brakujące 250 Erg. W przypadku niepowodzenia kampanii zwroty będą przyznawane automatycznie. Ponieważ zbieranie zobowiązań nie jest obecnie trywialne, Kushti będzie pełnił rolę lidera projektu, więc proszę użyć następującego klucza, który jest przez niego kontrolowany:
9gBSqNT9LH9WjvWbyqEvFirMbYp4nfGHnoWdceKGu45AKiya3Fq
Aby przekazać dowolną kwotę pieniędzy, proszę postępować zgodnie z sekcją „Jak przekazać darowiznę” powyżej, zastępując backerPubKey swoim kluczem publicznym, a kwotę zobowiązania odpowiednią wartością (proszę pamiętać, że jest to w nanoErgs, 1 Erg = 1.000.000.000 nanoErgs).
Jak zawsze, jeśli masz dalsze pytania, sugestie lub chcesz wziąć udział w ruchu, dołącz do naszych kanałów w mediach społecznościowych lub forum.
Share post
13 sierpnia 2025
12 maja 2025






