Obtenga un valor devuelto al llamar a un contrato de Michelson
2 respuestas
- votos
-
-
¿Cómoenviaría un contrato una devolución de llamada?¿Puede darnos unejemplo?(suponiendo que seaposible actualmenteen 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
Segúntengoentendido,puede llamar a un contratoenviando una
parametrised transaction
,que seinyecta como una operaciónen/injection/operation
.Puede rastrearelflujo anterioren lafuente deeztz .js .
/injection/operation
no devuelvemuchomás,pero un hash de la operación que acaba deinyectar. (semenciona un$unistring
aunquenoestoy seguro de lo que representaen estemomento)Supongo quetambién seejecutael contratointeligente,en elmomentoen que seinyecta una operaciónen unnuevobloque. (Nome dépor sentado aquí,nopudeencontrar recursos sobreestopara Tezos,pero asíes comofunciona conethereum)
Para que siemprepueda obtenerel almacenamiento del contrato utilizando
.../contract/<contract_id>/storage
:esto representaría unaparte del valor de devolución de su contrato. Pero solo después de que su operación haya sidoprocesada.Y creo que debería haber unamanera deextraer las operacionesejecutadaspor su contratointeligente,simiras lo suficientementeprofundoen las respuestas de RPC,buscaría operaciones queprovengan de la dirección detu contrato.
De hecho,puede ver un ejemplo de contratointeligenteen TzScan ,todo lo queparece haceresestableceel almacenamiento actualen un valor recibido comoparámetro. Puede desglosar lastransacciones y operacionespara ver cómo se actualizó coneltiempo;esto debería darle unaidea de dóndeencontrar lainformación requerida através de 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 llamada a un contrato de Michelson resultaen una actualización de almacenamiento y laemisión de operaciones.¿Existe unaforma simple/estándarpara queel contrato llamado devuelva un valor a lapersona que llama?