Bonjour à tous!
Plus récemment, Waves Labs
Nous avons choisi le cas DAO car
Nous avons commencé avec un exemple simple dans
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
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 :
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 :

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].
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
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.
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 :
É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().
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
Ride4Dapps inclut désormais 2 nouveaux types d'annotations :
- @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.
- @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.
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 (
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.
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 }]}))
Il reste à Bob 1.99 VAGUES. Autrement dit, Bob a payé une commission WAVES de 0.01
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.
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.
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
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.
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.
Cependant, le contrat intelligent permettait de remédier à cette situation.
Xena est une escroc, elle a essayé de retirer 1 WAVES du compte total.
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