Obtenez une valeur retournée lorsque vous appelez un contrat Michelson
2 réponses
- votes
-
-
Comment un contrat serait-ilenvoyé un rappel?Pouvez-vous s'il vousplaîtfournir unexemple?(en supposant qu'ilestpossible actuellement à Michelson)How would a contract send a callback? Can you please provide an example? (assuming it's possible currently in Michelson)
- 2
- 2019-02-06
- Matej maht0rz Šima
-
-
- 2019-02-06
Dansma compréhension,vouspouvez appeler un contraten envoyant unetransactionparamétrichée ,quiestinjectée comme une opération sous
. ./injection/opération
Vouspouveztracer leflux ci-dessus dans La source d'Eztz .js .
/Injection/Opération
ne revientpasbeaucoupplus,mais un hachage de l'opération que vous venez d'injecter. (il y a unemention d'un$ déminage
Bien queje ne saispas ce qu'il représenteen cemoment)Je suppose que le contratintelligentest égalementexécuté,à l'heure où une opérationestinjectée dans unnouveaubloc. (neme prenezpaspour acquisici,je n'aipasputrouver de ressources à ce sujetpour Tezos,mais c'est comme ça que çafonctionne avec Ethereum)
Vouspouvez donctoujours obtenir le stockage du contraten utilisant
.../contrat/& lt; contract_id >/stockage
- cela représenterait unepartie de la valeur de retour de votre contrat. Mais seulement après que votre opération a ététraitée.Etje pense qu'il devrait y avoir unmoyen d'extraire les opérationsexécutéespar votre contratintelligent,si vous regardez assezprofondément dans les réponses RPC,je rechercherais des opérationsprovenant de l'adresse de votre contrat.
Enfait,vouspouvez voir un Exemple de contratintelligent sur TZScan ,tout ce qu'il semblefaireest Définissez le stockage actuel sur une valeur reçue sousforme deparamètre. Vouspouvezexplorer le creux destransactionset des opérationspour voir commentil a étémis àjour aufil dutemps - cela devrait vous donner uneidée de la recherche desinformations requises via RPC.
In my understanding, you can call a contract by sending a
parametrised transaction
, that's injected as an operation under/injection/operation
.You can trace the flow above in the source of eztz.js.
/injection/operation
doesn't return much more, but a hash of the operation you've just injected. (there is a mention of a$unistring
although i'm not sure what it represents right now)My guess is also that smart contract gets executed, around the time when an operation is injected into a new block. (Don't take me for granted here, i was unable to find resources on this for Tezos, but that's how it works with ethereum)
So you can always get the contract's storage using
.../contract/<contract_id>/storage
- this'd represent one part of your contract's return value. But only after your operation has been processed.And i think there should be a way to extract the operations executed by your smart contract, if you look deep enough into the RPC responses, i'd look for operations coming from your contract's address.
In fact, you can see an example smart contract on TzScan, all it seems to do is set the current storage to a value received as a parameter. You can drill down trough the transactions and operations to see how it was updated over time - this should give you an idea of where to find the required information via RPC.
Un appel à un contrat Michelsonentraîne unemise àjour de stockageet l'émission d'opérations.Existe-t-il unmoyen simple/standardpour le contrat appelépour renvoyer une valeur à l'appelant?