"Agents autonomes" ou exécutez du code dans la cryptoplateforme ouverte Obyte



Obyte est une plate-forme de cryptographie ouverte qui utilise le graphique acyclique dirigé (DAG, graphique dirigé sans cycles) comme registre de transactions au lieu d'une chaîne de blocs, avec un accès gratuit et égal au registre pour tous les participants. DAG, contrairement à la blockchain habituelle pour tout le monde, permet d'envoyer des données directement à un registre distribué sans la participation des mineurs en raison du rejet des blocs et du strict ordonnancement des transactions. Par rapport aux chaînes de blocs, l'architecture DAG n'a pas besoin de classes d'utilisateurs privilégiées, telles que les mineurs, les faussaires ou les producteurs de blocs, il n'y a donc pas d'intermédiaires entre l'utilisateur et le registre sur le réseau, et tout le monde a un accès égal et direct pour ajouter des transactions au registre.

Dans cet article, je voudrais parler d'Obyte, Agents autonomes et comparer tout cela avec Ethereum.

Que sont les agents autonomes?


Il s'agit d'un programme dont le code source est stocké dans le registre (DAG) et possède sa propre adresse, similaire aux adresses de tout autre participant au réseau. Le programme décrit les actions qui seront effectuées en réponse à l'envoi de pièces et de données à cette adresse. Si vous connaissez les contrats intelligents Ethereum, les agents autonomes sont très proches d'eux.

Un exemple de la vie est un distributeur automatique. En réponse au numéro de produit tapé sur le clavier et saisissant le montant, l'appareil donne à l'utilisateur le produit lui-même. Il existe une différence importante entre les AA et les distributeurs automatiques: les distributeurs automatiques sont contrôlés par leurs propriétaires, et les utilisateurs espèrent seulement que les actions de l'appareil correspondront aux attentes de l'utilisateur. Les agents autonomes sont vraiment autonomes: tout le programme est stocké dans le DAG, son code source est visible par tous les participants du réseau, il ne peut pas être modifié, désactivé ou supprimé.

Par exemple, vous pouvez programmer AA pour échanger des jetons. Pour la programmation, le langage développé pour ces tâches est Oscript.
Obyte a également le concept de contrats intelligents, mais ils ne sont pas les mêmes que les contrats intelligents AA ou Ethereum. La principale différence entre les contrats intelligents AA et Obyte est que les contrats intelligents, comme les contrats réguliers dans le monde réel, fonctionnent entre deux participants et indiquent dans quelles conditions un contrat peut être exécuté. Autrement dit, un ensemble de conditions qui autorisent ou interdisent une transaction. Dans le même temps, un agent autonome est un participant programmé indépendant, en interaction avec lequel nous initions sa réponse (nouvelles transactions, etc.).

L'exécution du code AA commence une fois la transaction déclenchée stabilisée (c'est-à-dire qu'il y a eu consensus sur la transaction et que la double dépense est définitivement absente). Chaque nœud complet exécutera du code AA sur sa copie du registre et n'enregistrera le résultat de l'exécution que dans sa base de données. Il n'est pas nécessaire de relayer le résultat de l'exécution à d'autres nœuds, car l'état de tous les participants au réseau est le même et le résultat de l'exécution est également déterministe et le même pour tout le monde. L'état final du registre n'est déterminé que par les règles d'exécution des AA et n'est contrôlé ni par les mineurs, ni par les électeurs, ni par personne d'autre.

Pourquoi sont-ils nécessaires?


AA permet en mode décentralisé de créer des choses comme

  • les options
  • contrats à terme
  • pièces stables algorithmiquement
  • actifs synthétiques
  • autres dérivés
  • prêts de sécurité
  • trading sur marge
  • échanges décentralisés
  • oracles décentralisés
  • canaux de paiement
  • jeux économiques
  • teneurs de marché
  • gestion automatique de portefeuille d'investissement

Et bien plus encore ...

Transparence utilisateur


Obyte dès le premier jour de l'existence offre la possibilité de conclure un contrat intelligent entre les personnes sous une forme compréhensible pour l'homme. La transparence et la facilité de perception par les utilisateurs ont été et restent l'un des principaux principes de création de la plateforme.

Malgré le fait qu'Oscript est un langage de programmation, et a été créé pour être perçu par la machine et les programmeurs, et non par les gens ordinaires, nous avons essayé de ne pas nous écarter de nos principes. Par conséquent, pour les personnes qui ne sont pas familiarisées avec la programmation, un portefeuille GUI essaiera d'interpréter le code AA avant d'effectuer une transaction et montrera le résultat à la personne d'une manière qu'il comprend:



Oscript - langage d'agent autonome


Les développeurs familiers avec n'importe quel langage de type C n'auront aucune difficulté à travailler avec AA.

Tout d'abord, je voudrais distinguer les fonctionnalités.

AA ne fonctionne que pour déclencher des transactions. Il peut s'agir d'un simple paiement ou d'un transfert de données AA. Par exemple, vous passez les données {foo: 'bar', valeur: 100} et elles seront reçues par AA en entrée , et sur cette base, les actions sont effectuées.

À quoi AA a accès


  • à toutes les variables décrivant l'état actuel du DAG
  • Montants reçus dans la transaction de déclenchement
  • données du déclencheur de transaction
  • qui a envoyé la transaction de déclenchement
  • variables d'état de notre et d'autres AA
  • accès à diverses données publiques du DAG, telles que data_feed depuis oracles, attestations de nom réel, etc.
  • soldes de nos et autres AA
  • informations sur les actifs

Caractéristiques d'Oscript


Oscript - PAS Turing le langage complet, cependant, dans son arsenal il y a:

  • opérations arithmétiques
  • opérations logiques (et, ou, etc.)
  • comparaisons
  • concaténation de chaînes
  • quelques fonctions mathématiques
  • fonctions cryptographiques (création de hachage, vérification de signature)
  • ramification (si / sinon)
  • pas de boucles et de fonctions (pour éviter les récursions infinies). Vous pouvez en savoir plus dans le manuel sur ce lien

Pour contrôler l'utilisation des ressources et éviter les scénarios malveillants, les AA sont limités à un maximum de 100 opérations à forte intensité de main-d'œuvre, telles que les fonctions de chiffrement ou les accès aux bases de données. La vérification a lieu au moment du déploiement du code d'agent.

Mais il n'y a pas de formules compliquées pour calculer le coût de la performance AA. Il n'existe aucune formule de ce type, l'exécution du code est gratuite, les utilisateurs, comme AA lui-même, ne paient que pour l'ajout de données au registre DAG, comme tous les autres membres du réseau - 1 octet en devise Obyte pour chaque octet de données ajouté au DAG. Cependant, AA doit maintenir son équilibre en octets pas moins que la taille de toutes les variables d'état qu'il stocke.

Si, lors de l'exécution, AA déclenche l'exécution d'un autre AA, la transaction résultante du premier AA sera d'abord écrite dans le registre et ce n'est qu'alors que le prochain AA commencera son exécution.

Agents autonomes en action


Nous allons maintenant écrire le script de ping-pong le plus simple. Nous envoyons de l'argent AA, il se laisse un peu d'argent et renvoie le reste. Nous allons résoudre le même problème sur deux plateformes - Obyte et Ethereum, et comparer. Dans Ethereum, des entités AA similaires sont communément appelées contrats intelligents (bien que le livre blanc Ethereum les appelle une fois agents autonomes).

Ethereum


Je ferai tout à travers geth. Exécutez le nœud en mode léger et attendez la synchronisation.

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

Maintenant, nous avons deux options pour le développement d'événements:

  1. attendez que les pairs soient détectés et que la synchronisation commence
  2. ajouter des pairs manuellement

J'ai choisi la deuxième option. Et rfikki et sa liste de commandes prêtes à l'emploi viennent à la rescousse . Nous sommes connectés au nœud et ajoutons des pairs:

 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"); 

Après cela, le processus de synchronisation commencera et afin de ne pas perdre de temps, créez un compte. Pour ce faire, nous allons écrire les commandes suivantes dans notre connexion et définir le mot de passe:

 personal.newAccount(); 

Dans la console, nous verrons l'adresse, la copier et aller au robinet . Collez le champ et cliquez sur envoyer.
Vérifiez maintenant la synchronisation:

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

Et vérifiez le solde:

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

La préparation est terminée et nous pouvons maintenant passer à la rédaction et à la publication du contrat.

Créez un fichier, par exemple pingPong.sol et écrivez-y notre contrat:

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

Dans ce contrat, nous créons deux fonctions publiques:
dépôt - appel par réapprovisionnement et retour moins 20 000.
getBalance - nous montre simplement le solde de l'adresse du contrat.

Ensuite, nous devons le compiler, pour cela j'utilise le module npm solc :

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

Maintenant, préparez les fichiers compilés pour un téléchargement rapide dans le client geth . Changer le fichier abi pour regarder
 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"}]); 

Et bin pour voir

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

Accédez au client geth et connectez ces scripts

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

sol2 est le chemin d'accès à votre dossier de script. Après avoir exécuté le deuxième script, il vous demandera de déverrouiller votre compte. C'est fait.

Ensuite, écrivez «pingPong». Si, par conséquent, vous voyez que l'adresse n'est pas vide - le contrat a été publié, sinon - vous devez attendre un peu et réessayer.

Après cela, nous exécuterons la fonction de dépôt , enverrons l'argent et vérifierons comment tout s'est passé.

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

À la sortie, nous pouvons voir l'ID de transaction. Copiez-le, nous en aurons besoin plus tard. Avant cela, nous appelons la fonction getBalance et nous y voyons 20 000, que nous soustrayons.

 pingPong.getBalance() 

Passons maintenant à etherscan. Là, vous verrez dans «Transactions internes» un paiement de retour de 48 000. Il s'est avéré comme ceci - https://ropsten.etherscan.io/tx/0xc3fab9f39f2ec32eadffc54608a61c3c77c4ac0f3630037b5c312d3b66ee85f8#internal

Obbyte


Pour la publication, nous utiliserons l' éditeur Oscript

Nettoyez le modèle qu'il nous propose. Nous écrirons à partir de zéro. AA minimum est un objet avec un tableau de messages.

 { messages: [] } 

Puisque nous enverrons le paiement, nous devons ajouter un objet avec les propriétés l'indiquant aux messages:

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

Ici, nous voyons les métadonnées standard pour le paiement. Ils sont modifiés en utilisant "{}" dans les lignes. L'objet déclencheur est utilisé pour transférer des valeurs; il stocke des informations sur le paiement reçu. Vous pouvez en savoir plus sur la syntaxe dans la documentation .

Nous collons ce code dans l'éditeur, puis cliquez sur Déployer. C’est tout!
AA publié et ci-dessous, nous voyons l'adresse. Maintenant, nous avons besoin d'un portefeuille GUI testnet , installez-le et exécutez-le. Ensuite, pour obtenir des pièces de test, allez dans le "chat", sélectionnez "Bot Store" et ajoutez "Faucet Bot". Notre chat s'ouvrira, cliquez sur le menu à gauche et sélectionnez "Insérer mon adresse"


Ensuite, nous envoyons et attendons le message que l'argent nous est parvenu: "Paiement: ...". Ensuite, nous devons aller à la principale et attendre que l'inscription "Y compris la confirmation en attente" disparaisse (quelques minutes), cela signifie que les pièces reçues sont confirmées et peuvent être utilisées.

Il ne nous reste plus qu'à aller «recevoir», insérer l'adresse AA, saisir le montant «500000» et appuyer sur «envoyer». Maintenant, nous devons attendre que la transaction se stabilise (vérification de l'historique). Cela est nécessaire pour déclencher. Nous vérifierons si l'argent nous est retourné:



C'est tout, ça marche. En allant à l'explorateur chez AA, nous pouvons voir que son solde a augmenté de 20 000 moins les frais pour nous payer. Chez Obyte, les agents autonomes paient eux-mêmes une commission pour les actions qu'ils effectuent.

Conclusions


Comme nous pouvons le voir dans la comparaison ci-dessus, Obyte est beaucoup plus facile à publier, à écrire et à contrôler ce qui se passe. Par exemple, dans Ethereum, il est loin d'être toujours possible de sélectionner correctement le gaz d'une transaction sortante, ce qui permet de le confirmer très longtemps. Parmi les avantages d'Ethereum, on peut distinguer sa publication et sa confirmation rapides (environ une minute, selon le gaz fourni). Pendant que dans Obyte, la publication a lieu immédiatement, et le temps de confirmation dépend de la charge du réseau, avec une charge légère - environ 10-15 minutes, avec une charge importante - moins de trois minutes.

Dans les articles suivants, nous analyserons quelques exemples intéressants et vivants, par exemple, comment implémenter un DAO simple en utilisant AA et répondre à vos questions.

Compétition


Dans le cadre de l'innovation, nous invitons les développeurs à se joindre à la compétition pour l'application la plus intéressante et impressionnante d'agents autonomes. Le concours est déjà en cours et durera jusqu'à la mi-octobre. À titre d'exemples de demandes déjà reçues, il existe plusieurs AA de financement participatif, deux échanges, divers «registres» et trackers de réputation, loteries, jeux, etc. Toutes les deux semaines, un jury de l'équipe Obyte annonce les meilleures candidatures.

Le budget total du concours est de 38 000 $ (au taux de Go au moment du lancement).

Vous pouvez en savoir plus sur le concours dans cet article .

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


All Articles