Obtenha um valor retornado ao chamar um contrato de Michelson
2 respostas
- votos
-
-
Como um contratoenviaria um retorno de chamada?Vocêpodeporfavorfornecer umexemplo?(Supondo que sejapossível atualmenteem 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
Nomeuentendimento,vocêpode chamar um contratoenviando um
transaçãoparametrizada
,que éinjetado como uma operaçãoem/Injeção/Operação
.Vocêpode rastrear ofluxo acimaem afonte de EZTZ .js .
/injeção/operação
Não retornamuitomais,mas um hash da operação que você acabou deinjetar. (há umamenção de um$ unisting
emboraeunãotenho certeza do que representa agora)Meupalpite étambém que o contratointeligente éexecutado,nomomentoem que uma operação éinjetadaem umnovobloco. (Nãome leve como certo aqui,não conseguiencontrar recursos sobreissopara Tezos,mas é assim quefunciona comethereum)
para que você semprepossa obter o armazenamento do contrato usando
.../Contract/& Lt; Contract_ID & GT;/Armazenamento - Isso representará umaparte do valor de retorno do seu contrato. Mas somente após a sua operaçãofoiprocessada.e acho que deve haver umamaneira deextrair as operaçõesexecutadaspelo seu contratointeligente,se vocêparecerprofundo suficientenas respostas RPC,euprocuraria que as operações vindos doendereço do seu contrato.
Na verdade,vocêpode ver um Exemplo de contratointeligenteem Tzscan ,tudoparece ser Defina o armazenamento atualpara um valor recebido como umparâmetro. Vocêpode detalhar astransaçõese operaçõespara ver comofoi atualizado ao longo dotempo -isso deve dar umaideia de ondeencontrar asinformaçõesnecessárias 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.
Uma chamadapara um contrato de Michelson resultaem uma atualização de armazenamentoe naemissão de operações.Existe umamaneira simples/padrãopara o contrato chamado de retornar um valor ao chamador?