Je consulte la documentation sur Sophia ( https://aeternity-sophia.readthedocs.io/en/latest/contracts/#calling-other-contracts ) mais je ne comprends pas comment je peux effectuer des appels inter-contrats d'un contrat Sophia à un autre contrat Sophia (appeler les fonctions d'un autre contrat à partir d'un contrat Sophia). Est-ce que je dois créer une interface ou quelque chose de similaire ?
Réponses
Trop de publicités?Pour passer un appel contractuel à partir d'un autre contrat, vous devez.. :
- Créez une interface sur le contrat de l'appelant avec les points d'entrée qui vous intéressent dans le contrat à appeler (c'est-à-dire MyRemoteContract) :
contract MyRemoteContract = entrypoint my_remote_entrypoint : (int) => bool entrypoint another_remote_entrypoint : (address, int) => bool
- Gérer l'autre contrat à l'intérieur du contrat de l'appelant (c'est-à-dire le garder dans votre état)
contract MyCallerContract = record state = { some_field : address, remote_contract_instance : MyRemoteContract }
- Enfin, lorsque vous effectuez votre init, vous pouvez envoyer en paramètre l'adresse du contrat distant à instancier sur le contrat de l'appelant.
stateful entrypoint init( remote_contract_instance_param : MyRemoteContract) : state = { remote_contract_instance = remote_contract_instance_param }
-
Lorsque vous faites appel à ce contrat (appelant), vous devez lui indiquer l'adresse (ct_....) de l'instance du contrat déployé.
-
Désormais, votre contrat pourra appeler n'importe quel point d'entrée distant que vous avez obtenu sur l'interface.
stateful entrypoint try_remote_call(value: int) = state.token.my_remote_entrypoint(value)
Attention, lorsque votre contrat à distance n'est pas respecté, vous devez vous assurer qu'il n'y a pas de problème. Call.caller utilise car il ne s'agira pas de l'adresse réelle mais de l'adresse contractuelle de l'appelant.