Méthode d'appel au point d'entrée de l'instance de contrat (?) Créée par contrat.create
1 réponses
- votes
-
- 2019-03-31
Vousne pouvezpas créer de contratet l'appelerimmédiatement.
Cela va comme ça,chronologiquement:
- Votre scriptesten cours d'exécution.Vousinvoquez Create_Contract ou Create_Account.Une adresse et
et
- Vousessayezmaintenantimmédiatement de
contratp
sur l'adresse,pour obtenir uncontratp
afin que vouspuissiez appelertransfert_tokens
.Cela échoue,car le contratn'existepas.
Travailler autour de cela,vouspouvez élever lafonctionnalitéen deux opérations deniveau supérieur ou avoir letransfert de script à lui-même (renvoyer l'opération Créer un compte,puis letransfert) afin d'exécuterplus de code unefois le comptecréé.
You cannot create a contract and call it immediately.
It goes like this, chronologically:
- Your script is running. You invoke CREATE_CONTRACT or CREATE_ACCOUNT. An
operation
andaddress
are returned and your script continues on. Theoperation
will create the account after your script returns it. Right now, the account does not exist. - You now immediately try to
CONTRACT p
on the address, to get acontract p
so that you can callTRANSFER_TOKENS
. This fails, because the contract doesn't exist.
To work around this, you could either break the functionality into two top-level operations, or have the script transfer to itself (returning the create account operation, and then the transfer) in order to run more code after the account is created.
-
Oh.Désolé ... Leproblèmeest que vousne retournezpas l'opération dans le contrat A: vous avez `[],stockage` au lieu de` [op],stockage`.Oh. Sorry... The problem is that you are not returning the operation in contract A: you have `[], storage` instead of `[op], storage`.
- 1
- 2019-04-01
- Tom
-
Merci d'avoir souligné leserreurs.Éditéet semble que l'appelfonctionne commeprévumaintenant. J'ai une autre question: comment lamiseen œuvre/la définition du contrat Best-elle décidéeen fonction de sa signaturementionnée dans le contrat A?Est-ce le cas que le dernier recours déployé correspondant à la signatureestprispour l'instanciation?Thanks for pointing out the mistakes. Edited and seems like call is working as expected now. I have one more question: How the implementation/Definition of contract B is decided based on its signature mentioned in contract A? Is it the case that last deployed contract matching the signature is taken for instantiation?
- 0
- 2019-04-01
- user_184
-
C'est le «contrat de contrat)` qui définit le contrat créé.Lorsque vousexécutez `CONTRACT.CREATE`/` CREATE_CONTRACT`,vous obtenez une opération qui créera le contratet l'adresse du contrat _Will_ a,unefois créé.Parce que vousmettez l'adresse de stockage,dans laprochaine opération,l'adressefait référence à l'instance (maintenant) créée de B,qui a letype correctet le code attendu.It is the `(contract ContractB)` which defines the created contract. When you run `Contract.create`/`CREATE_CONTRACT`, you get an operation which will create the contract, and the address the contract _will_ have, once created. Because you put the address in storage, in the next operation, the address refers to the (now) created instance of B, which has the correct type and expected code.
- 0
- 2019-04-01
- Tom
-
Oui c'est correct.Enfait,la question queje voulais demander était de savoir commentinstancier un contrat déjà déployé?Parexemple,Best déjà déployéet nous avonsbesoin d'uneinstance de B dans le contrat A ayant une signature du contrat B. Commentfaire cela?Jepense que l'adresse du contrat déployé B sera utiliséeici.Yes, That's correct. Actually, the question I wanted to ask was how to instantiate an already deployed contract? For example, Let's B is already deployed and we need an instance of B in contract A which have a signature of contract B. How to do that? I think the address of deployed contract B will be used here.
- 0
- 2019-04-01
- user_184
-
Oui,vous devez obtenir l'adresse du contrat déployé ... HARDCODE IT dans le code comme une adresse littérale,mettez-laen stockage (comme vous l'avezfait),outransmettez-la sousforme deparamètre.Ensuite,écrivez `(contrat.at AddR: contractum.Instance)` Tout comme vous l'avezfait.Pas sûr où vous êtes coincé.Yes, you need to get the address of the deployed contract... Hardcode it in the code as a literal address, put it in storage (like you did), or pass it as a parameter. Then write `(Contract.at addr : ContractB.instance option)` just like you did. Not sure where you are stuck.
- 0
- 2019-04-01
- Tom
-
Créeret appelerfonctionne commeprévupour queje ne suispas coincénullepart.Je voulaisjuste comprendre la différenceentre lefonctionnementinterne de l'instanciation des contratsentre le contrat déployémanuellementet le contrat déployépar contrat.create.Semble comme les deux œuvres de lamêmemanière.Donc,merci depréciser.Create and call is working as expected so I am not stuck anywhere. Just wanted to understand the difference between internal working of contract instantiation between contract deployed manually and contract deployed by contract.create. Seems like both works same way. So thanks for clarification.
- 0
- 2019-04-02
- user_184
Le contrat An'estpasen mesure detrouver l'adresse du contrat créépar contrat.create. Essayé d'ajouter la signature de B ainsi que sa définition complète dans le contrat Amaistoujours,celane résoutpas leproblème.
Le contrat Aesttel que décrit ci-dessous:
contratb est comme ci-dessous:
D'abord,j'ai déployé le contratb,puis aeffectué un appel à unpoint d'entrée "Créer_and_call_instanceb" d'Amais obtenu l'erreur suivante:
Sije n'effectuepas l'appel du contratet essayez d'obtenir l'adresse du contrat crééet essayez d'effectuer un appel à l'un de sespoints d'entrée,je reçois l'erreur suivante:
semble être quelque chose detrèsbasiquemanquantici dupoint de vue conceptuel. S'il vousplaîtexpliquer ce qui suit:
a)est-ilnécessaire que le contrat B soit déployé d'abord,puis c'est uneinstancepeut être crééepar contrat.create? Sitelest le cas,quelprototype de contrat B serapris aumoment de l'instanciation du contrat B du contrat.create?
B) Si cen'estpas labonnefaçon,lamanière de créeret de déployer un contrat d'un autre contrat,puiseffectuez un appel à unpoint d'entrée d'un contratnouvellement créé?
c) Comment créer uneinstance de contrat déjà déployéet effectuer un appel à unpoint d'entrée de cetteinstance?