Comment écrire un contrat intelligent avec Python sur l'ontologie? Partie 4: API native

image

Plus tôt, j'ai présenté le contrat ontologique intelligent dans
Partie 1: Blockchain & Block API et
Partie 2: API de stockage
Partie 3: API d'exécution
Aujourd'hui, parlons de la façon d'invoquer un contrat intelligent natif Ontology via l' API native . L'une des fonctions les plus courantes de l'invocation d'un contrat natif est le transfert d'actifs.

Présentation


L'API native n'a qu'une seule API. Lorsque vous utilisez la fonction Invoke, vous devez utiliser la fonction d'état intégrée pour vous aider à encapsuler les paramètres. Voir ci-dessous pour savoir comment utiliser les fonctions.

image

Voyons maintenant plus en détail comment utiliser ces 2 API. Avant cela, vous pouvez créer un nouveau contrat dans l'outil de développement de contrat intelligent Ontology SmartX et suivre les instructions ci-dessous. Comme d'habitude, à la fin de l'article, je fournirai un lien vers le code source.

Comment utiliser l'API native


Comme d'habitude, vous devez importer les 2 fonctions comme suit avant de les utiliser.

from ontology.interop.Ontology.Native import Invoke from ontology.builtins import state 

Liste des contrats natifs d'ontologie


Il existe actuellement 6 contrats natifs Ontology disponibles pour les développeurs. Vous trouverez ci-dessous la liste des 6 contrats natifs pouvant être invoqués par l'API native.

image

Dans le contrat, il vous suffit de convertir l'adresse du contrat au format bytearray et de l'invoquer.

Par exemple , lorsque vous devez appeler un contrat de jeton ONT, vous pouvez d'abord convertir l'adresse du contrat de jeton ONT au format bytearray, puis appeler la fonction Invoke. Lors de l'appel de la fonction Invoke, les paramètres importés sont le numéro de version, l'adresse du contrat, la méthode du contrat invoquée et les paramètres liés au transfert encapsulés par la fonction d'état.

Un point particulier à noter ici est que lors d'un transfert de contrat pour ONG, la quantité remplie est 10⁹ fois la quantité réelle. Autrement dit, si vous devez transférer 10 ONG, la quantité à remplir est de 10¹⁰. Lorsque vous utilisez un portefeuille, comme ONTO ou Cyano pour transférer, la quantité que vous entrez est le montant du transfert.

 contract_address_ONT = bytearray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01') param = state(from_acct, to_acct, ont_amount) res = Invoke(1, contract_address_ONT, 'transfer', [param]) 

Code de contrat de transfert


Ci-dessous, nous donnons un exemple détaillé de la façon d'utiliser Python pour transférer ONT et ONG . Dans le code ci-dessous, le type de paramètre du compte d'envoi et de l'adresse de réception importés est une chaîne. En outre, il peut également être livré avec un type d'adresse de paramètre de compte, économisant ainsi les frais de gaz pour invoquer le contrat. Le processus est le suivant:

  1. Définissez les variables d'adresse de contrat contract_address_ONT et contract_address_ONG;
  2. Convertir l'adresse d'envoi et de réception du format base58 au format bytearray;
  3. Vérifiez la signature et confirmez que l'adresse d'envoi est la même que l'adresse d'appel du contrat;
  4. La fonction d'état encapsule les paramètres liés au transfert;
  5. La fonction Invoke appelle le contrat natif Token ONT et ONG Token pour le transfert;
  6. Déterminez si le transfert a réussi en renvoyant res. Si la valeur de retour est b '\ x01', le transfert est réussi et l'événement "transfert réussi" sera repoussé.

 from ontology.interop.System.Runtime import Notify, CheckWitness from ontology.interop.Ontology.Runtime import Base58ToAddress from ontology.interop.Ontology.Native import Invoke from ontology.builtins import state # contract address contract_address_ONT = bytearray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01') contract_address_ONG = bytearray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02') def Main(operation, args): if operation == 'transfer': from_acct = args[0] to_acct = args[1] ont_amount = args[2] ong_amount = args[3] return transfer(from_acct,to_acct,ont_amount,ong_amount) return False def transfer(from_acct, to_acct, ont_amount, ong_amount): # convert base58 address to address in the form of byte array from_acct=Base58ToAddress(from_acct) to_acct=Base58ToAddress(to_acct) # check whether the sender is the payer if CheckWitness(from_acct): # transfer ONT if ont_amount > 0: param = state(from_acct, to_acct, ont_amount) res = Invoke(1, contract_address_ONT, 'transfer', [param]) if res and res == b'\x01': Notify('transfer succeeded') else: Notify('transfer failed') # transfer ONG if ong_amount > 0: param = state(from_acct, to_acct, ong_amount) res = Invoke(1, contract_address_ONG, 'transfer', [param]) if res and res == b'\x01': Notify('transfer succeeded') else: Notify('transfer failed') else: Notify('CheckWitness failed') 

Entraînez-vous sur SmartX


Vous pouvez également compiler et exécuter l'exemple de code ci-dessus sur SmarX en suivant les étapes ci-dessous:

  • Compilez le contrat. Tout d'abord, créez un projet sur SmartX et compilez le code dans ce projet.

image
  • Déployez le contrat. Si vous avez besoin d'un jeton de test pour déployer le contrat, postulez ici . Le résultat du déploiement est le suivant:

image

  • Exécutez la fonction de transfert. Avant d'exécuter la fonction de transfert, vous devez configurer les paramètres selon vos besoins. Dans l'exemple ci-dessous, vous devez saisir l'adresse d'envoi, l'adresse de réception et le montant ONT et ONG transféré:

image

  • Le transfert a réussi. Une fois que vous avez correctement configuré les paramètres, le transfert réussit lors de l'exécution de la fonction de transfert. Le jeton transféré sera affiché à l'adresse de réception ci-dessus:

image

Résumé


Dans cet article, nous avons présenté l' API native de la blockchain d'Ontology. Les développeurs peuvent utiliser cette API pour appeler des contrats natifs d'Ontology. Dans le prochain article, nous présenterons l' API de mise à niveau pour explorer comment mettre à niveau le contrat dans les contrats intelligents d'Ontology.

Trouvez le tutoriel sur GitHub ici .



Ceci est un tutoriel officiel publié plus tôt sur le blog d' Ontology Medium
Êtes-vous développeur? Assurez-vous que vous avez rejoint notre communauté technologique sur Discord . Jetez également un œil au Developer Center sur notre site Web, où vous pouvez trouver des outils de développement, de la documentation et plus encore.

Trouvez l'ontologie ailleurs


Site Web d'ontologie
Github / discorde
Télégramme anglais / russe
Twitter / Reddit

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


All Articles