Apprendre à rédiger des contrats intelligents Waves sur RIDE et RIDE4DAPPS. Partie 1 (portefeuille multi-utilisateurs)

Apprendre à rédiger des contrats intelligents Waves sur RIDE et RIDE4DAPPS. Partie 1 (portefeuille multi-utilisateurs)

Bonjour à tous!

Plus récemment, Waves Labs annoncé concours pour les développeurs dédié à la sortie de l'extension de langage de contrat intelligent RIDE pour les applications décentralisées Ride4Dapps dans le réseau de test !

Nous avons choisi le cas DAO car Ventuaire envisage de développer des dApps avec des fonctions sociales : vote, collecte de fonds, gestion de la confiance, etc.
Nous avons commencé avec un exemple simple dans Séances de questions-réponses et RIDE IDE - exemple avec portefeuille partagé.

Regardons cet exemple, testons des hypothèses et examinons quelques bizarreries :

Laissez-nous Alice - Propriétaire de dApp
Boob et Cooper sont partenaires d'Alice, co-fondateurs d'Alice-BC DAO
Neli est une propriétaire d'entreprise qui a besoin de financement
Banque - une banque qui distribue des jetons

Étape 1. Initialisation des soldes

Afin de recevoir des tokens sur le réseau de test des vagues, vous devez contacter robinet et indiquez l'adresse à laquelle envoyer les jetons.
Vous pouvez trouver l'adresse dans l'IDE en ouvrant les détails de votre compte.
Nous mettons en avant la Banque 10 WAVES. Ensuite, nous vérifions qu'ils sont arrivés via le navigateur de blocs et de transactions : navigateur navigateur

Distribuons maintenant les jetons de la banque au reste des participants. (Remarques : toutes les transactions sur le réseau Waves ne sont pas gratuites, un solde minimum positif est donc requis pour que tous les participants puissent effectuer des transactions).

1 VAGUES = 100000000 unités (ondelettes), puisque les montants ne peuvent être que des nombres entiers
0.01 VAGUES (Frais de transaction) = 1000000 XNUMX XNUMX

Banque -> [3 VAGUES] -> Alice, via TransferTransaction (Type : 4).

Nous vérifions que l'env.SEED à partir duquel les transactions sont signées correspond à notre Banque :
Apprendre à rédiger des contrats intelligents Waves sur RIDE et RIDE4DAPPS. Partie 1 (portefeuille multi-utilisateurs)

Si vous n'avez pas de phrase de départ correspondante, accédez-y simplement dans l'onglet Comptes et vérifiez à nouveau.
Après cela, nous créons, annonçons et signons une transaction pour le transfert de 3 WAVES Alice.
Vous pouvez également connaître les données d'Alice via la variable env.accounts. La numérotation commence à 0, donc Alice est env.accounts[1].
Apprendre à rédiger des contrats intelligents Waves sur RIDE et RIDE4DAPPS. Partie 1 (portefeuille multi-utilisateurs)

broadcast(transfer({recipient:address(env.accounts[1]), amount: 300000000, fee: 1000000}))

Le résultat peut également être observé dans le navigateur, un lien vers celui-ci nous sera renvoyé immédiatement après l'exécution transactions.

Nous veillons à ce que le solde d'Alice soit reconstitué par 3 VAGUES et que le solde bancaire reste à 10 - 3 - 0.01 = 0.699.
Apprendre à rédiger des contrats intelligents Waves sur RIDE et RIDE4DAPPS. Partie 1 (portefeuille multi-utilisateurs)

Apprendre à rédiger des contrats intelligents Waves sur RIDE et RIDE4DAPPS. Partie 1 (portefeuille multi-utilisateurs)

Nous envoyons à Boob et Cooper 3 VAGUES chacun, et à Neli, Xena et Mark 0.2 VAGUES chacun de la même manière.
(Remarques : nous avons commis une erreur d'un caractère et envoyé à Neli 0.02 WAVES. Soyez prudent !)

broadcast(transfer({recipient:address(env.accounts[4]), amount: 20000000, fee: 1000000}))

Après avoir reconstitué les soldes de tous les participants, nous voyons :
Apprendre à rédiger des contrats intelligents Waves sur RIDE et RIDE4DAPPS. Partie 1 (portefeuille multi-utilisateurs)

Étape 2. Créer un compte dApp

Nous avons convenu qu'Alice serait la créatrice et propriétaire de l'application décentralisée.
Accédez à Comptes, définissez-le sur SEED et vérifiez que env.SEED correspond à Alice.

Essayons d'installer le script (contrat) le plus simple possible sur le compte d'Alice.
Les contacts intelligents dans Waves sont des prédicats qui interdisent ou autorisent tout type de transaction sortante sous certaines conditions. Dans ce cas, cette condition est TOUJOURS. Le code du contrat est vrai. Appelez déployer().

Apprendre à rédiger des contrats intelligents Waves sur RIDE et RIDE4DAPPS. Partie 1 (portefeuille multi-utilisateurs)

Frais par transaction setScript 1400000/100000000 = 0.014 WAVES. Alice a encore 2.986 XNUMX VAGUES sur son solde.

Essayons maintenant d'installer une logique de contrat intelligent plus complexe sur le compte Alice, décrite dans exemple

Ride4Dapps inclut désormais 2 nouveaux types d'annotations :

  1. @Appelable(i) — prend comme paramètre i, des données sur le compte qui a appelé/signé la transaction. C'est le résultat de cette fonction qui détermine le changement d'état du compte dApp. D'autres comptes peuvent créer des transactions et exécuter des fonctions avec cette annotation et modifier l'état du compte dApp.
  2. @Vérificateur (tx) — Vérificateur de transaction avec le paramètre transaction tx. Correspond à la logique des prédicats de RIDE. C'est dans cette expression que vous pouvez autoriser ou interdire d'autres modifications de la logique des contrats intelligents sur le compte dApp.

Faisons dApp compte comme portefeuille commun à tous les participants.
Apprendre à rédiger des contrats intelligents Waves sur RIDE et RIDE4DAPPS. Partie 1 (portefeuille multi-utilisateurs)

Pour vérifier quel contrat est actuellement actif sur votre compte, vous pouvez copier le code base64 du smart contract dans l'explorateur de blocs et le reconnaître à l'aide d'un décompilateur (par exemple)
Apprendre à rédiger des contrats intelligents Waves sur RIDE et RIDE4DAPPS. Partie 1 (portefeuille multi-utilisateurs)
Apprendre à rédiger des contrats intelligents Waves sur RIDE et RIDE4DAPPS. Partie 1 (portefeuille multi-utilisateurs)
Apprendre à rédiger des contrats intelligents Waves sur RIDE et RIDE4DAPPS. Partie 1 (portefeuille multi-utilisateurs)

Nous nous assurons que la logique du contrat intelligent correspond à ce que nous attendons.
Alice a encore 2.972 VAGUES sur sa balance.

Cette dApp garde une trace de la contribution de chaque participant au fonds commun via un mécanisme transaction de données — DataEntry (currentKey, newAmount), où currentKey est le compte qui appelle la fonction de dépôt et newAmount est la valeur du solde reconstitué.

Boob et Cooper effectuent leurs dépôts sur le compte dApp avec 1 WAVES.
Apprendre à rédiger des contrats intelligents Waves sur RIDE et RIDE4DAPPS. Partie 1 (portefeuille multi-utilisateurs)

Nous faisons une erreur et la transaction n’aboutit pas. Car, malgré le fait que nous étions convaincus que nous effectuions une transaction au nom de Bob, nous avons commis une erreur dans l'index et indiqué un compte bancaire qui n'a pas de contrat intelligent. Il convient de noter ici un point important : des frais sont facturés pour les tentatives infructueuses d'initier des transactions. ne peut pas être supprimé ! Alice a encore 2.972 VAGUES sur sa balance. Bob a 3 VAGUES.

Bob a envoyé 1 WAVES au compte dApp.

broadcast(invokeScript({dappAddress: address(env.accounts[1]), call:{function:"deposit",args:[]}, payment: [{amount: 100000000, asset:null }]}))

Apprendre à rédiger des contrats intelligents Waves sur RIDE et RIDE4DAPPS. Partie 1 (portefeuille multi-utilisateurs)

Il reste à Bob 1.99 VAGUES. Autrement dit, Bob a payé une commission WAVES de 0.01

Apprendre à rédiger des contrats intelligents Waves sur RIDE et RIDE4DAPPS. Partie 1 (portefeuille multi-utilisateurs)

Alice avait 2.972 VAGUES sur sa balance, maintenant elle est à 3.972. Une transaction a également été enregistrée sur le compte Alice, mais aucune commission n'a été prélevée sur le compte dApp (Alice).
Après que Cooper ait également réapprovisionné le compte, le solde d'Alice est devenu 4.972 WAVES.

Apprendre à rédiger des contrats intelligents Waves sur RIDE et RIDE4DAPPS. Partie 1 (portefeuille multi-utilisateurs)

Vous pouvez savoir à qui appartient combien de WAVES dans le portefeuille commun dans l'explorateur de blocs dans l'onglet Données.

Cooper a changé d'avis et a décidé de laisser le montant de 1 WAVES sur le portefeuille général et a décidé de retirer la moitié de l'affinité. Pour ce faire, il doit appeler la fonction de retrait.

Apprendre à rédiger des contrats intelligents Waves sur RIDE et RIDE4DAPPS. Partie 1 (portefeuille multi-utilisateurs)

Cependant, nous nous sommes encore trompés, puisque la fonction de retrait a des paramètres complètement différents et une signature différente. Lorsque vous concevez des contrats intelligents sur RIDE4DAPPS, vous devez faire attention à ce point

Apprendre à rédiger des contrats intelligents Waves sur RIDE et RIDE4DAPPS. Partie 1 (portefeuille multi-utilisateurs)

Cooper compte désormais 2.48 VAGUES à son bilan. En conséquence, 3 VAGUES - 1 - 0.01, puis + 0.5 - 0.01. En conséquence, chaque appel pour déposer et retirer coûte 0.01 WAVES. En conséquence, les entrées du tableau des propriétaires de dApps ont changé comme suit.

Apprendre à rédiger des contrats intelligents Waves sur RIDE et RIDE4DAPPS. Partie 1 (portefeuille multi-utilisateurs)

Bob a également décidé de retirer de l'argent du portefeuille partagé, mais a commis une erreur et a tenté de retirer 1.5 WAVES.

Apprendre à rédiger des contrats intelligents Waves sur RIDE et RIDE4DAPPS. Partie 1 (portefeuille multi-utilisateurs)

Cependant, le contrat intelligent permettait de remédier à cette situation.

Xena est une escroc, elle a essayé de retirer 1 WAVES du compte total.

Apprendre à rédiger des contrats intelligents Waves sur RIDE et RIDE4DAPPS. Partie 1 (portefeuille multi-utilisateurs)

Cela n'a pas fonctionné pour elle non plus.

Dans la partie suivante, nous examinerons des problèmes plus complexes liés à l'imperfection du compte Alice dApp.

Source: habr.com

Ajouter un commentaire