Ottieni un valore restituito quando chiami un contratto Michelson
2 risposta
- voti
-
-
In chemodo un contrattoinvierà una richiamata?Puoifornire unesempio?(supponendo che siapossibile attualmentein 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
A quantomi risulta,puoi chiamare un contrattoinviando una
parametrised transaction
,che vieneiniettata come operazionein/injection/operation
.Puoitracciareilflusso sopranella lafonte dieztz .js .
/injection/operation
non restituiscemolto dipiù,ma un hash dell'operazione che hai appenainiettato. (c'è unamenzione di un$unistring
anche senon sono sicuro di cosa rappresentiin questomomento)Lamiaipotesi è anche che lo smart contract vengaeseguito,nelmomentoin cui un'operazione vieneiniettatain unnuovoblocco. (Non darmiper scontato qui,non sono riuscito atrovare risorse su questoper Tezos,ma è così chefunziona conethereum)
Quindipuoi sempre ottenere lo spazio di archiviazione del contratto utilizzando
.../contract/<contract_id>/storage
: questo rappresenterebbe unaparte del valore di restituzione del contratto. Ma solo dopo che latua operazione è stataelaborata.Epenso che dovrebbeesserci unmodoperestrarre le operazionieseguite daltuo contrattointelligente,seguardi abbastanzain profonditànelle risposte RPC,cercherò le operazioniprovenienti dall'indirizzo deltuo contratto.
Ineffetti,puoi vedere un esempio di contrattointelligente su TzScan ,tutto ciò che sembrafare èimposta lamemoria corrente su un valore ricevuto comeparametro. Puoieseguireil drill-down delletransazionie delle operazioniper vedere come è stato aggiornatoneltempo: questo dovrebbe darti un'idea di dovetrovare leinformazioni richiestetramite 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.
Una chiamata a un contratto Michelson sitraducein un aggiornamento dello storagee nell'emissione delle operazioni.Esiste unmodo semplice/standardperil contratto chiamato di restituire un valore al chiamante?