"Autonome Agenten" oder Code in der offenen Kryptoplattform Obyte ausführen



Obyte ist eine offene Krypto-Plattform, die anstelle einer Blockchain ein gerichtetes azyklisches Diagramm (DAG, gerichtetes Diagramm ohne Zyklen) als Transaktionsregistrierung verwendet und allen Teilnehmern freien und gleichberechtigten Zugriff auf die Registrierung bietet. Im Gegensatz zur üblichen Blockchain für alle ermöglicht die DAG das direkte Senden von Daten an eine verteilte Registrierung ohne Beteiligung von Bergleuten aufgrund der Ablehnung von Blöcken und der strikten Reihenfolge von Transaktionen. Im Vergleich zu Blockchains benötigt die DAG-Architektur keine privilegierten Benutzerklassen wie Miner, Fälscher oder Blockproduzenten. Daher gibt es keine Vermittler zwischen dem Benutzer und der Registrierung im Netzwerk, und jeder hat den gleichen und direkten Zugriff, um Transaktionen zur Registrierung hinzuzufügen.

In diesem Artikel möchte ich über Obyte, Autonome Agenten, sprechen und all dies mit Ethereum vergleichen.

Was sind autonome Agenten?


Dies ist ein Programm, dessen Quellcode in der Registrierung (DAG) gespeichert ist und eine eigene Adresse hat, ähnlich den Adressen anderer Netzwerkteilnehmer. Das Programm beschreibt die Aktionen, die als Reaktion auf das Senden von Münzen und Daten an diese Adresse ausgeführt werden. Wenn Sie mit intelligenten Verträgen von Ethereum vertraut sind, haben autonome Agenten eine sehr enge Bedeutung für sie.

Ein Beispiel aus dem Leben ist ein Verkaufsautomat. In Reaktion auf die auf der Tastatur eingegebene Produktnummer und die Eingabe des Betrags gibt das Gerät dem Benutzer das Produkt selbst. Es gibt einen wichtigen Unterschied zwischen AA- und Verkaufsautomaten: Verkaufsautomaten werden von ihren Besitzern gesteuert, und Benutzer hoffen nur, dass die Aktionen des Geräts den Erwartungen des Benutzers entsprechen. Autonome Agenten sind wirklich autonom: Das gesamte Programm wird in der DAG gespeichert, sein Quellcode ist für alle Netzwerkteilnehmer sichtbar, er kann nicht geändert, deaktiviert oder gelöscht werden.

Sie können beispielsweise AA so programmieren, dass Token ausgetauscht werden. Für die Programmierung ist die für diese Aufgaben entwickelte Sprache Oscript.
Obyte hat auch das Konzept von intelligenten Verträgen, aber sie sind nicht dasselbe wie intelligente Verträge von AA oder Ethereum. Der Hauptunterschied zwischen intelligenten Verträgen von AA und Obyte besteht darin, dass intelligente Verträge wie reguläre Verträge in der realen Welt zwischen zwei Teilnehmern bestehen und angeben, unter welchen Bedingungen ein Vertrag ausgeführt werden kann. Einfach ausgedrückt, eine Reihe von Bedingungen, die eine Transaktion erlauben oder verbieten. Gleichzeitig ist ein autonomer Agent ein unabhängiger programmierter Teilnehmer, mit dem wir seine Antwort einleiten (neue Transaktionen usw.).

Die Ausführung des AA-Codes beginnt, nachdem sich die Auslösetransaktion stabilisiert hat (dh es bestand Konsens über die Transaktion und es fehlen definitiv doppelte Ausgaben). Jeder Vollknoten führt AA-Code auf seiner Kopie der Registrierung aus und zeichnet das Ergebnis der Ausführung nur in seiner Datenbank auf. Es ist nicht erforderlich, das Ergebnis der Ausführung an andere Knoten weiterzuleiten, da Der Zustand aller Teilnehmer im Netzwerk ist der gleiche und das Ergebnis der Ausführung ist ebenfalls deterministisch und für alle gleich. Der endgültige Status des Registers wird nur durch die Regeln der AA-Ausführung bestimmt und weder von Bergleuten noch von Wählern oder von anderen kontrolliert.

Warum werden sie gebraucht?


AA ermöglicht im dezentralen Modus das Erstellen von Dingen wie

  • Optionen
  • Terminkontrakte
  • algorithmisch stabile Münzen
  • synthetische Vermögenswerte
  • andere Derivate
  • Sicherheitskredite
  • Margin-Handel
  • dezentraler Austausch
  • dezentrale Orakel
  • Zahlungskanäle
  • Wirtschaftsspiele
  • Market Maker
  • Automatisches Management des Anlageportfolios

Und vieles mehr…

Benutzertransparenz


Obyte vom ersten Tag seines Bestehens an bietet die Möglichkeit, einen intelligenten Vertrag zwischen Menschen in einer für Menschen verständlichen Form abzuschließen. Transparenz und einfache Wahrnehmung durch die Benutzer waren und sind eines der Hauptprinzipien bei der Erstellung der Plattform.

Trotz der Tatsache, dass Oscript eine Programmiersprache ist und für die Wahrnehmung durch die Maschine und die Programmierer und nicht für gewöhnliche Menschen entwickelt wurde, haben wir versucht, nicht von unseren Prinzipien abzuweichen. Für Personen, die mit der Programmierung nicht vertraut sind, versucht eine GUI-Brieftasche daher, den AA-Code vor einer Transaktion zu interpretieren und der Person das Ergebnis auf eine Weise anzuzeigen, die sie versteht:



Oscript - eigenständige Agentensprache


Entwickler, die mit einer C-ähnlichen Sprache vertraut sind, werden keine Schwierigkeiten haben, mit AA zu arbeiten.

Zunächst möchte ich die Funktionen erkennen.

AA löst nur Transaktionen aus. Dies kann entweder nur eine Zahlung oder eine AA-Datenübertragung sein. Sie übergeben beispielsweise die Daten {foo: 'bar', Wert: 100} und sie werden von AA als Eingabe empfangen. Auf dieser Grundlage werden die Aktionen ausgeführt.

Worauf AA Zugriff hat


  • auf alle Variablen, die den aktuellen Status der DAG beschreiben
  • In der Auslösetransaktion erhaltene Beträge
  • Daten vom Transaktionsauslöser
  • Wer hat die Trigger-Transaktion gesendet?
  • Zustandsvariablen unserer und anderer AA
  • Zugriff auf verschiedene öffentliche Daten aus der DAG, z. B. data_feed von Orakeln, Bescheinigungen über echte Namen usw.
  • Guthaben unserer und anderer AA
  • Asset- Informationen

Oscript-Funktionen


Oscript - NICHT Um die gesamte Sprache zu erfassen, gibt es in seinem Arsenal jedoch:

  • arithmetische Operationen
  • logische Operationen (und, oder usw.)
  • Vergleiche
  • String-Verkettung
  • einige mathematische Funktionen
  • kryptografische Funktionen (Hash-Erstellung, Signaturüberprüfung)
  • Verzweigung (wenn / sonst)
  • Keine Schleifen und Funktionen (um unendliche Rekursionen zu verhindern). Weitere Informationen finden Sie im Handbuch unter diesem Link

Um die Verwendung von Ressourcen zu kontrollieren und böswillige Szenarien zu verhindern, sind AAs auf maximal 100 arbeitsintensive Vorgänge beschränkt, z. B. Kryptofunktionen oder Datenbankzugriffe. Die Überprüfung erfolgt zum Zeitpunkt der Bereitstellung des Agentencodes.

Es gibt jedoch keine komplizierten Formeln zur Berechnung der Kosten der AA-Leistung. Es gibt überhaupt keine solchen Formeln, die Codeausführung ist kostenlos, Benutzer wie AA selbst zahlen wie alle anderen Netzwerkmitglieder nur für das Hinzufügen von Daten zur DAG-Registrierung - 1 Byte in Obyte-Währung für jedes der DAG hinzugefügte Datenbyte. AA muss jedoch sein Gleichgewicht in Bytes beibehalten, das nicht kleiner ist als die Größe aller von ihm gespeicherten Statusvariablen.

Wenn AA bei der Ausführung die Ausführung eines anderen AA auslöst, wird zuerst die resultierende Transaktion des ersten AA in der Registrierung aufgezeichnet, und erst dann beginnt der nächste AA mit der Ausführung.

Autonome Agenten in Aktion


Jetzt schreiben wir das einfachste Ping-Pong-Skript. Wir schicken AA-Geld, er überlässt sich etwas und schickt den Rest zurück. Wir werden das gleiche Problem auf zwei Plattformen lösen - Obyte und Ethereum - und vergleichen. In Ethereum werden ähnliche AA-Einheiten üblicherweise als intelligente Verträge bezeichnet (obwohl das Whitepaper von Ethereum sie einmal als autonome Agenten bezeichnet).

Ethereum


Ich werde alles durch Geth machen. Führen Sie den Knoten im Lichtmodus aus und warten Sie auf die Synchronisation.

geth --testnet --ws --wsapi "admin,db,eth,net,web3,personal" --syncmode "light" --allow-insecure-unlock 

Jetzt haben wir zwei Möglichkeiten für die Entwicklung von Ereignissen:

  1. Warten Sie, bis Peers erkannt werden und die Synchronisierung beginnt
  2. Peers manuell hinzufügen

Ich habe die zweite Option gewählt. Und rfikki und seine vorgefertigte Befehlsliste kommen zur Rettung . Wir sind mit dem Knoten verbunden und fügen Peers hinzu:

 geth attach ws://127.0.0.1:8546 admin.addPeer("enode://bc827e035cf3a42c249374be7ddc9c2fb819765c440116cf01aa6a8d70d03043d29ccd42b32a283f5ab08294467eb3b92fc40111e9af1770c84bc116edae89c0@104.248.199.52:30303"); admin.addPeer("enode://2d86877fbb2fcc3c27a4fa14fa8c5041ba711ce9682c38a95786c4c948f8e0420c7676316a18fc742154aa1df79cfaf6c59536bd61a9e63c6cc4b0e0b7ef7ec4@13.83.92.81:30303"); admin.addPeer("enode://053d2f57829e5785d10697fa6c5333e4d98cc564dbadd87805fd4fedeb09cbcb642306e3a73bd4191b27f821fb442fcf964317d6a520b29651e7dd09d1beb0ec@79.98.29.154:30303"); admin.addPeer("enode://690c93ac2f6e6f711a175cc6a73a3cf3b649eea83c458ce34364c69d1b557bb408693f06bdf6fc31538a744d5c231fdd904cce5665d04ce165032c0fc009a208@104.248.199.160:30303"); 

Danach beginnt der Synchronisierungsprozess. Um keine Zeit zu verlieren, erstellen Sie ein Konto. Dazu schreiben wir die folgenden Befehle in unsere Verbindung und legen das Passwort fest:

 personal.newAccount(); 

In der Konsole sehen wir die Adresse, kopieren sie und gehen zum Wasserhahn . Fügen Sie das Feld ein und klicken Sie auf Senden.
Überprüfen Sie nun die Synchronisation:

 eth.syncing #   false eth.blockNumber #        https://ropsten.etherscan.io/ 

Und überprüfen Sie die Balance:

 eth.getBalance(eth.accounts[0]) #   1000000000000000000 

Die Vorbereitung ist abgeschlossen und wir können nun mit dem Schreiben und Veröffentlichen des Vertrags fortfahren.

Erstellen Sie eine Datei, zum Beispiel pingPong.sol, und schreiben Sie unseren Vertrag hinein:

 pragma solidity ^0.5.10; contract PingPong{    function deposit() payable public {        msg.sender.transfer(msg.value - 20000);    }       function getBalance() public view returns(uint256){        return address(this).balance;    } } 

In diesem Vertrag erstellen wir zwei öffentliche Funktionen:
Anzahlung - Anruf durch Nachschub und Rückgabe minus 20.000.
getBalance - zeigt uns nur den Saldo der Vertragsadresse.

Als nächstes müssen wir es kompilieren, dafür benutze ich das npm Modul solc :

 solcjs -o . --bin --abi pingPong.sol 

Bereiten Sie nun die kompilierten Dateien für den schnellen Download im Geth- Client vor. Ändern Sie die abi- Datei so, dass sie aussieht
 var pingPongContract = eth.contract([{"constant":true,"inputs":[],"name":"getBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"deposit","outputs":[],"payable":true,"stateMutability":"payable","type":"function"}]); 

Und bin zu sehen

 personal.unlockAccount(eth.accounts[0]) var pingPong = pingPongContract.new( { from: eth.accounts[0], data: "", gas: 500000}); 

Gehen Sie zum Geth- Client und verbinden Sie diese Skripte

 loadScript('sol2/pingPong_sol_PingPong.abi') loadScript('sol2/pingPong_sol_PingPong.bin') 

Wobei sol2 der Pfad zu Ihrem Skriptordner ist. Nach dem Ausführen des zweiten Skripts werden Sie aufgefordert, Ihr Konto zu entsperren. Fertig.

Als nächstes schreiben Sie "pingPong". Wenn Sie als Ergebnis feststellen, dass die Adresse nicht leer ist - der Vertrag wurde veröffentlicht, wenn nicht - müssen Sie etwas warten und es erneut versuchen.

Danach führen wir die Einzahlungsfunktion aus, senden das Geld und überprüfen, wie alles gelaufen ist.

 personal.unlockAccount(eth.accounts[0]) pingPong.deposit({from: eth.accounts[0], value: 500000}); 

Am Ausgang sehen wir die Transaktions-ID. Kopieren Sie es, wir werden es später brauchen. Vorher rufen wir die Funktion getBalance auf und sehen dort 20.000, die wir subtrahieren.

 pingPong.getBalance() 

Wechseln wir jetzt zu Etherscan. Dort sehen Sie unter „Interne Transaktionen“ eine Rückzahlung von 48.000. Es stellte sich so heraus - https://ropsten.etherscan.io/tx/0xc3fab9f39f2ec32eadffc54608a61c3c77c4ac0f3630037b5c312d3b66ee85f8#internal

Obbyte


Zur Veröffentlichung verwenden wir den Oscript-Editor

Bereinigen Sie die Vorlage, die es uns bietet. Wir werden von Grund auf neu schreiben. Minimum AA ist ein Objekt mit einem Array von Nachrichten.

 { messages: [] } 

Da wir die Zahlung senden, müssen wir den Nachrichten ein Objekt mit den Eigenschaften hinzufügen, die dies anzeigen:

 { messages: [        {            app: 'payment',            payload: {                asset: 'base',                outputs: [                    {address: "{trigger.address}", amount: "{trigger.output[[asset=base]] - 20000}"}                ]            }        }    ] } 

Hier sehen wir die Standard-Metadaten für die Zahlung. Sie werden mit "{}" in den Zeilen geändert. Das Triggerobjekt wird zum Übertragen von Werten verwendet und speichert Informationen über die empfangene Zahlung. Weitere Informationen zur Syntax finden Sie in der Dokumentation .

Wir fügen diesen Code in den Editor ein und klicken dann auf Bereitstellen. Das ist alles!
AA veröffentlicht und unten sehen wir die Adresse. Jetzt brauchen wir eine Testnet-GUI-Brieftasche , installieren sie und führen sie aus. Um einige Testmünzen zu erhalten, gehen Sie zum "Chat", wählen Sie "Bot Store" und fügen Sie dort "Faucet Bot" hinzu. Unser Chat wird geöffnet, klicken Sie auf das Menü links und wählen Sie "Meine Adresse einfügen".


Dann senden wir und warten auf die Nachricht, dass das Geld zu uns gekommen ist: "Zahlung: ...". Als nächstes müssen wir zum Hauptbild gehen und warten, bis die Aufschrift „Einschließlich ausstehender Bestätigung“ verschwindet (einige Minuten). Dies bedeutet, dass die empfangenen Münzen bestätigt wurden und verwendet werden können.

Wir müssen nur noch auf "Empfangen" gehen, die Adresse AA eingeben, den Betrag "500000" eingeben und "Senden" drücken. Jetzt müssen wir warten, bis sich die Transaktion stabilisiert hat (Überprüfung des Verlaufs). Dies ist zum Auslösen erforderlich. Wir werden prüfen, ob das Geld an uns zurückgegeben wurde:



Das ist alles, es funktioniert. Wenn wir zum Entdecker bei AA gehen, können wir sehen, dass sein Kontostand um 20.000 abzüglich der Gebühr für die Zahlung an uns gestiegen ist. Bei Obyte zahlen autonome Agenten selbst eine Provision für die von ihnen durchgeführten Aktionen.

Schlussfolgerungen


Wie wir aus dem obigen Vergleich sehen können, ist es viel einfacher, Obyte zu veröffentlichen, zu schreiben und zu steuern, was passiert. Zum Beispiel ist es in Ethereum bei weitem nicht immer so, dass wir das Gas einer ausgehenden Transaktion korrekt auswählen können, wodurch es für eine sehr lange Zeit bestätigt werden kann. Zu den Vorteilen von Ethereum gehört die schnelle Veröffentlichung und Bestätigung (ca. eine Minute, abhängig vom zugeführten Gas). In Obyte erfolgt die Veröffentlichung sofort und die Bestätigungszeit hängt von der Netzwerklast ab, bei einer geringen Last - etwa 10 bis 15 Minuten, bei einer großen Last - weniger als drei Minuten.

In den folgenden Artikeln werden wir einige interessante und lebendige Beispiele analysieren, zum Beispiel, wie Sie einfaches DAO mit AA implementieren und Ihre Fragen beantworten.

Wettbewerb


Im Zusammenhang mit der Innovation laden wir Entwickler ein, sich dem Wettbewerb um die interessanteste und beeindruckendste Anwendung autonomer Agenten anzuschließen. Der Wettbewerb läuft bereits und dauert bis Mitte Oktober. Als Beispiele für bereits eingegangene Bewerbungen gibt es mehrere Crowdfunding-AAs, zwei Börsen, verschiedene „Register“ und Reputations-Tracker, Lotterien, Spiele usw. Alle zwei Wochen gibt eine Jury des Obyte-Teams die besten Beiträge bekannt.

Das Gesamtbudget des Wettbewerbs beträgt 38.000 US-Dollar (zum GB- Preis zum Zeitpunkt des Starts).

Weitere Informationen zum Wettbewerb finden Sie in diesem Artikel .

Source: https://habr.com/ru/post/de467209/


All Articles