Opérations créées par une chaîne d'appels à contrat intelligente Allez dans le même bloc?
1 réponses
- votes
Réponse courte: Toute la chaîne d'appel doit être adaptée à unbloc.
Lestransactions émisespar le contratintelligent sont appelées "opérationsinternes"et sontexécutées successivementjusqu'à ce qu'iln'y aitplus aucunetransactioninterneni une destransactions échoue (que ce soiten raison d'un appel à échouer dans un contrat,à unmanque degaz.,ou à unetransactioninvalide). Et si l'une destransactions échoue,toute la chaîne d'appels (ettous leseffets secondaires)est roulé.
Vous êtes doncgaranti qu'ils serontexécutés atomiquement dans lebloc:ilsne serontmêmepasentrelacés avec d'autrestransactions dumêmebloc.
Ceciest documenté dans la documentation Michelson,sous Sémantiqueinter-transaction .
Vouspouvez égalementtrouver lapièce de codepertinente dans lefichier src/proto_alpha/lib_protocol/apply.ml
dans la définition de Apply_internal_manager_operations
Short answer: all the call chain has to fit in one block.
Transactions issued by the smart contract are called "internal operations" and are successively executed until there are no more internal transactions or one of the transactions fails (be it due to a call to Fail in a contract, to a lack of gas, or to an invalid transaction). And if one of the transactions fails, the whole call chain (and any side-effects) are rolled back.
So you are guaranteed that they will be executed atomically in the block: they will not even be interleaved with other transactions from the same block.
This is documented in the Michelson documentation, under inter-transaction semantics.
You can also find the relevant piece of code in the file src/proto_alpha/lib_protocol/apply.ml
in the definition of apply_internal_manager_operations
Imagine Ilexiste un contratintelligent qui appelle d'autres contratsintelligents à l'aide de
TRANSFER_TOKENS
et dans lafin denombreuses opérations sont créées.Ces opérations sont-elles cuits dans unbloc atomique?Je veux dire,est-ce que c'était assuré quetous sontenregistrés dans lemêmebloc ou échouententièrement?Ouilspeuvent être séparés dansplus d'unblocs (par conséquent,certainspeuvent échouerplustard)?
S'ilest atomique,si un contrat crée une liste d'opérationstrop énormepour unbloc,l'appel du contratne réussirajamais.Est-ce correct?
Y a-t-il une spécificationexplique la sémantique de cette chaîne d'appel?