
In dem Artikel werde ich darüber sprechen, was der Versicherungsvertrag ist, der auch als Mechanismus zur Erbringung öffentlicher und Gruppenvorteile bekannt ist, und wir werden gemeinsam eine eigene Crowdfunding-Implementierung auf der Basis von Autonomous Agents auf der Obyte-Plattform schreiben.
Assurance Contract ist ein organisierter Fundraising-Mechanismus zur Schaffung eines neuen öffentlichen Gutes. Ein typisches Beispiel für die Verwendung solcher Verträge ist die folgende Situation: Die Teilnehmer einer Sommergenossenschaft haben beschlossen, eine Straße für den bequemen Zugang zu ihren Ferienhäusern zu bauen. Sammeln Sie dazu den Betrag N und überweisen Sie ihn dem Auftragnehmer für den Bau der Straße. Es stellen sich viele Fragen: Wo findet man eine Person, der jeder vertrauen und die Sammlung in Rechnung stellen würde, wie kann man alle potenziellen Nutzer der Straße dazu bringen, in ihren Bau zu investieren, was passiert, wenn nicht genug Geld gesammelt wird usw.
Assurance-Verträge haben eine ähnliche Bedeutung wie Crowdfunding. Nur Anleger sind keinem Risiko ausgesetzt, wie dies bei Anlegern der Fall ist, die in riskante Unternehmen investieren. Solche Verträge sowie Crowdfunding können auch zwei Ergebnisse haben - erfolgreich und erfolglos, abhängig von der Erreichung des Ziels für den gesammelten Betrag. Das Ergebnis einer erfolgreichen Sammlung ist der Empfang eines neuen öffentlichen Gutes bei den Anlegern, manchmal jedoch nicht nur bei ihnen. Im Falle eines Misserfolgs wird das Geld einfach an die Einzahler zurückgegeben.
Für den Anfang wiederholen wir also die Grundbedingungen. Die Essenz des Crowdfunding besteht darin, „in einer Menschenmenge“ Spenden für ein vorbestimmtes Ziel mit einem bestimmten Endbetrag (nicht unbedingt festgelegt, kann dynamisch sein) und einem Enddatum (auch nicht immer, aber normalerweise) zu sammeln. Wenn dieser Betrag erreicht ist, wird die Finanzierungsrunde als erfolgreich gewertet, und der Einzug wird eingestellt. Alle Mittel werden zur Erreichung des Ziels zugewiesen. Im Falle eines Misserfolgs, dh bei Erreichen der Frist und unzureichender Mittelbeschaffung, werden alle Mittel an die Spender zurückerstattet.
Welche Probleme löst Cryptocurrency Crowdfunding? Zum einen müssen Anleger nicht mehr vertrauen und überprüfen, an wen sie ihr Geld senden. Der Code des autonomen Agenten für Fundraising ist offen und jeder Anleger kann sicherstellen, dass er seinen Beitrag jederzeit bis zum Erreichen des endgültigen Betrags abheben kann und dass alle Gelder an eine vorab ausgewählte Adresse gesendet werden, um die Ware zu erstellen. Zweitens trägt eine transparente Bilanzierung aller eingeworbenen Mittel dazu bei, den künftigen Nutzen aus der Erreichung des Ziels proportional zum geleisteten Beitrag zu verteilen.
Ein weiteres Problem, das mit dem Versicherungsvertrag gelöst werden kann, ist das Koordinierungsproblem. Heute werden wir unseren letzten Artikel über das
Spiel "Attack 51%" ergänzen und dieses Problem lösen. Ohne die Verwendung von AA besteht für die Teilnehmer des Spiels das Risiko, dass der gesammelte Betrag aufgrund mangelnder Koordination "fehlt". Dann verlieren diejenigen, die es bereits geschafft haben, eine Investition zu tätigen, einfach ihr Geld, weil andere Teilnehmer kein Interesse gezeigt haben oder einfach keine Zeit dazu hatten (denken Sie daran, dass die gegnerischen Teams genau 24 Stunden Zeit haben, um den aktuellen Anführer herauszufordern). Durch das Sammeln von Geld durch einen Versicherungsvertrag können die Spieler ihr Geld jederzeit abheben, bis der erforderliche Betrag gesammelt ist.
In unserem Fall nicht anwendbar, aber ein weiteres nützliches Merkmal solcher Verträge besteht darin, die Auswirkungen des „Trittbrettfahrer-Effekts“ oder des „Trittbrettfahrer-Problems“ zu verringern. Da das Gemeinwohl unveräußerlich oder schwer zu kontrollieren ist, ist das Problem des Trittbrettfahrers das Hauptproblem bei der Organisation öffentlicher Güter. Die Menschen wollen nicht in etwas investieren, das andere kostenlos nutzen können, oder der Investor selbst, der sich an ein absolut rationales wirtschaftliches Verhalten hält und bei einer erfolgreichen Sammlung eine „Nichtinvestitionsstrategie“ wählt, wird wahrscheinlich in der Lage sein, das geschaffene Gut zu nutzen.
Ich werde auch über die Option eines optimierten Versicherungsvertrags sprechen, der die Erfolgschancen bei der Mittelbeschaffung erhöht Das rationale Verhalten der Teilnehmer wird bereits die Wahl der Anlagestrategien sein, anstatt zu ignorieren.
Wir spielen das Spiel gemeinsam
In unserem Beispiel nehmen wir das im
letzten Artikel bereits bekannte
Spiel „Attack 51%“.In der aktuellen Implementierung senden die Spielteilnehmer Geld an die AA-Adresse des Spiels. Der Algorithmus kann jedoch verbessert werden, und die Wahrscheinlichkeit, dass Teilnehmer bei einem Verlust ihres Teams Geld verlieren, kann verringert werden.
Zu diesem Zweck kann jedes Teammitglied Crowdfunding mit einem dynamischen Ziel organisieren, das mindestens 51% des gesamten Pools des Spiels entspricht. Wenn der Pool wächst, verschiebt sich auch das endgültige Crowdfunding-Ziel. Und nur wenn dies erfolgreich ist, wird das Geld an die AA-Adresse des Spiels geschickt und das Team wird sofort zum aktuellen Anführer. Wenn ein solches Ereignis niemals eintritt, verlieren die Teilnehmer ihr Geld nicht und verschwenden den Pool des Spiels vergebens, sondern nehmen einfach das Geld aus dem Crowdfunding AA.
Die Originale der beiden eigenständigen Agenten sind im
Online-Oscript-Code-Editor immer in Form von Vorlagen
verfügbar. Wählen Sie sie einfach aus dem Dropdown-Menü aus: "51% Angriffsspiel" und "Fundraising-Proxy".
Bevor Sie mit dem Schreiben von AA in Oscript beginnen, sollten Sie unbedingt die Kurzanleitung in unserer Dokumentation lesen, um sich schnell mit den Grundprinzipien des Schreibens von AA vertraut zu machen.
Einen Code schreiben
Zuerst schreiben wir den Algorithmus: Der Spender sendet Bytes an die AA-Adresse und erhält als Gegenleistung ein Crowdfunding-Token im Verhältnis 1 zu 1. Er kann diese Token jederzeit gegen Bytes zurücktauschen. Nachdem AA die Bytes erhalten hat, prüft sie, ob wir das Ziel der Geldbeschaffung erreicht haben, und sendet in diesem Fall alle Bytes an die Adresse der AA des Spiels und erhält im Gegenzug Spielmarken (Teammarken). Der Spender kann nun seine Crowdfunding-Token gegen Spiel-Token eintauschen, die in Zukunft, falls das Team gewinnt, bereits durch AA-Spiele gegen Bytes ausgetauscht werden können und bis zu 2 Bytes von den ursprünglichen erhalten.
Also fangen wir an.
Die Startverarbeitungseinheit der neuen Fundraising-Periode. Nach Erhalt des Felds "Start" in der eingehenden Datennachricht an die Adresse unserer AA stellen wir unseren Crowdfunding-Token aus und schreiben ihn in den Status "State". Außerdem senden wir ihn als Antwort an den Anrufer zurück.
{
Bearbeitung von Einzahlungen von Spendern. Zunächst filtern wir Junk-Transaktionen mit sehr geringen Beträgen heraus, die selbst für eine Provision nicht ausreichen. Überprüfen Sie als nächstes die Grundbedingungen, dass das Spiel nicht abgeschlossen ist und das Sammeln möglich ist. Vollständige Blockauflistung:
{
Unmittelbar nach den ersten Überprüfungen lautet die Hauptlogik unserer AA:
$total_raised = var['total_raised'] + $amount;
- hier fassen wir den soeben erhaltenen Betrag zum Gesamtbetrag der Mittel auf dem Agenten zusammen.
$missing_amount = ceil((balance[$destination_aa][base] + $total_raised)*0.51) - var[$destination_aa]['team_' || $team || '_amount'];
- Überprüfen Sie, ob der neue Betrag ausreicht, um das Spiel zu gewinnen. Beachten Sie den Verweis auf den Saldo und den Zustand der Variablen eines anderen AA:
balance[$destination_aa][base]
und
var[$destination_aa]['team_' || $team || '_amount']
var[$destination_aa]['team_' || $team || '_amount']
var[$destination_aa]['team_' || $team || '_amount']
.
All dies tun wir im
init
Block, der jedes Mal aufgerufen wird, bevor Transaktionsnachrichten verarbeitet werden. Die Antwort auf die eingehende Transaktion besteht offensichtlich darin, AA-Token in einem Eins-zu-Eins-Verhältnis relativ zu den empfangenen Bytes (dem ersten Block des
Nachrichtenarrays ) zu
senden . Der zweite und dritte Block werden nur ausgeführt, wenn die lokale Variable
$ bDone auf
true gesetzt ist (sie wird im
Init- Block gesetzt). In ihnen senden wir alle Gelder von der Adresse dieses AA an die Adresse des AA-Spiels und erhalten im Gegenzug Spielmarken. Im letzten Nachrichtenblock aktualisieren wir einfach den Status, setzen die erforderlichen Status und den gesammelten Betrag.
Verarbeitet man erhaltene Token aus dem AA-Spiel, so liegen diese bereits auf dem Kontostand unseres AA, wir müssen lediglich den Status des Agenten ändern:
{
Refand von Investitionen von Spielern. Sie können jederzeit die Teilnahme verweigern und Ihre Bytes zurücknehmen. Dazu sendet der Spieler die Token dieses AA und wir senden ihm im Gegenzug dieselben Bytes:
{
Tausch unserer AA-Token gegen Spielmarken. Wir senden einfach Spielmarken, die sich auf dem Kontostand unserer AA befinden (im Falle des Passierens des if-Blocks), in einer Höhe, die der Anzahl „unserer“ erhaltenen Marken entspricht.
{
Der Agent-Code ist fertig, hier ist eine vollständige Auflistung:
Vollständiger Agent-Code { init: `{ $asset = var['asset']; $destination_aa = 'WWHEN5NDHBI2UF4CLJ7LQ7VAW2QELMD7'; $team = 'VF5UVKDSOXPMITMDGYXEIGUJSQBRAMMN'; }`, messages: { cases: [ {
Wir haben den einfachsten Algorithmus nicht implementiert, weil unser ziel ist dynamisch, was für einen typischen versicherungsvertrag nicht typisch ist. In ihnen ist meist der Zielbetrag sowie die Frist festgelegt. Dies erfordert keine wesentlichen Änderungen im Code. Lassen Sie uns dies als Übung für den Leser belassen.
Die beste Strategie ist zu investieren!
Und jetzt zurück zum Trittbrettfahrerproblem. Im Falle des Spiels haben wir kein solches Problem, weil Nur Crowdfunding-Token-Inhaber können gewinnen. Aber das Lösen des Trittbrettfahrerproblems hilft im Fall des Spiels. Wir können Menschen zu Investitionen "anregen". Zu diesem Zweck kann der Spendenveranstalter, der auch der Gründer von AA ist, eine kleine Entschädigung festlegen, die er aus eigener Tasche auszahlt, wenn der Zweck der Sammlung nicht erreicht wird. Im Falle einer erfolgreichen Abholung nimmt der Veranstalter einen kleinen Prozentsatz. Das heißt, wir stellen einen Dritten vor, der das Risiko eines erfolglosen Inkasso abdeckt, um Leistungen zu erhalten.
Bei Anwendung eines solchen „optimierten Crowdfunding“ kann das bisher vernünftige Verhalten des „Nicht-Investierens“ (im Allgemeinen ist es für öffentliche Güter immer die wirtschaftlich rentabelste Strategie, Trittbrettfahrer zu sein) weniger vernünftig sein als das Investieren. Dies kann insbesondere dann relevant sein, wenn Gruppengüter angelegt werden, an denen ein bestimmter Personenkreis beteiligt ist. Dies beseitigt das Problem der blinden Mitwirkung nicht vollständig, sondern macht die Teilnahme zu einem rationalen Verhalten.
Der Code, der den „optimierten Versicherungsvertrag“ implementiert, bleibt auch für diejenigen, die dies wünschen, eine interessante Übung.