Comment correctement implémenter une interface avec un contrat FA1.2, d'un langage de programmation?
2 réponses
- votes
-
- 2020-06-16
Vous êtes correct.Iln'y apas demoyen d'obtenir la valeur directement.Vous devriez créer un contrat comme celui-ci.Appelons çagetnat.tz.Nous allons l'utiliserpour créer unmessage d'erreur après un appel à sec.
paramètre (NAT); unité de stockage; code {voiture;Échecwith};
Maintenant,nouspouvons l'appeler du client.
Tezos-Client Transfert 0 de Alice à Token \ --Entrypoint 'getbalance' \ --Arg 'paire "& lt;token-propriétaire-adresse >""& lt;getnat-adresse >" '\ - Soiver
Ceciproduira unmessage d'erreur avec la valeur.Vous devrez l'analyser.Si vous ajoutez l'indicateur
-l
Vouspouvez voir lesitinéraires RPC queTezos-Client
Appelspour la recréer dans votre application.You are correct. There is not a way to get the value directly. You would have to originate a contract like this. Let's call it getnat.tz. We will use it to create an error message after a dry run call.
parameter (nat); storage unit; code { CAR; FAILWITH };
Now we can call it from the client.
tezos-client transfer 0 from alice to token \ --entrypoint 'getBalance' \ --arg 'Pair "<token-owner-address>" "<getnat-address>"' \ --dry-run
This will produce an error message with the value. You will have to parse it. If you add the
-l
flag you can see the RPC routes thattezos-client
calls to recreate it in your application.-
Celane causera-t-ilpas deproblème d'espace dans Tezos Blockchaintôt outard?Je veux dire,chaque appel à un contrat d'entrée construira unnouveau contratpour recevoir une réponse?Celame semble étrange.Won't this cause a space issue in Tezos blockchain sooner or later? I mean, each call to a contract entrypoint will build a new contract to receive an answer? Seems odd to me.
- 0
- 2020-06-16
- Luiz Milfont
-
Ilestpossible avec un contrat,maisilfaut un outil quigénère un code Lambdapour vous.Jetez un coup d'œil à cette https://github.com/tqtezos/lorentz-contract-viewIt is possible with one contract but it requires a tool that generates some lambda code for you. Take a look at this https://github.com/tqtezos/lorentz-contract-view
- 1
- 2020-06-16
- MCH
-
Leparamètre - Side-Run éviter le déploiement réel du contrat sur leblockchain,non?Y a-t-il unparallèle avec un appel RPC?The --dry-run parameter avoid actual contract deployment to the blockchain, right? Is there a parallel using an RPC call?
- 0
- 2020-06-16
- Luiz Milfont
-
Droit.Nousn'avons réellementbesoin que de contrat de contrat déployépour que chacun soit utilisé.Ilest détaillé dans ce repogithub.Ensuite,les appels de course à sec sont libres.Oui,le client Tezosinteragit avec leblockchain via le RPC.Utilisez le drapeau -Lpour voir ce qu'on appelleet vouspouvez l'imiter.Right. We actually only need on contract deployed for everyone to use. It is detailed in that github repo. Then the dry run calls to it are free. Yes, the tezos-client interacts with the blockchain via the RPC. Use the -l flag to see what is being called and you can imitate it.
- 1
- 2020-06-17
- MCH
-
- 2020-06-16
Après avoirparlé à denombreuxmembres actifs de la communauté Tezos,j'aienfin trouvé une solution:
public interface FA12 { public void transfer(String from, String to, Integer value) throws Exception; public void approve(String spender, Integer value) throws Exception; }
Ce qui signifie queje n'aibesoin que demettreen œuvre les appels contractuels quieffectuent réellement une action (commetransfertet approuver).Tous les autrespoints d'entréenécessitant untype de "vue",commegetbalance,montailleur ougetTotalSuply sont despoints d'entrée à appelerentre contrats.Dansmon cas,je peux vérifiertoutes lesinformations dontj'aibesoinen analysant le stockage du contrat afin queje puisse éviter les obstacles associés à des contratsfactices crééspour servir de rappelpour les réponses.
After talking to many active Tezos community members, I have finally found a solution:
public interface FA12 { public void transfer(String from, String to, Integer value) throws Exception; public void approve(String spender, Integer value) throws Exception; }
Which means that I only need to implement the contract calls that actually do an action (like transfer and approve). All other entrypoints that require a "VIEW" type, like getBalance, getAllowance or getTotalSupply are entrypoints to be called between contracts. In my case I can check all information I need by parsing the contract STORAGE, so I can avoid the hurdles associated with dummy contracts created to serve as a callback for responses.
-
Si vous connaissez le stockage d'un contrat de FA1.2particulier,vouspouvezessayer de le lire,mais lanormene mentionne aucuneexigence de stockage d'uneformeparticulière afin que vousne puissiezpasfaire confiance au stockage de la FA1.2 aléatoire.La raisonest que l'auteur d'un contrat FA1.2peut décider que l'offretotale augmente/diminue aufil dutemps ou au changementpour une autre condition.Un contratne semet pas àjourmaisgetbalance devrait calculer la valeur aumoment de son appel.If you know the storage of a particular FA1.2 contract, then you can try to read it, but the standard does not mention any requirement of having storage of a particular shape so you cannot trust the storage for any random FA1.2. The reason is the author of an FA1.2 contract may decide that the total supply increases/decreases over time or change for some other condition. A contract does not update itself but getBalance should calculate the value at the time it is called.
- 0
- 2020-06-16
- MCH
-
Hmmm.Je vois.Celam'envoie unpasen arrière ... alors lamiseen œuvre de labéquille semble êtrenécessaire.Et ainsi cette supercherie avec un contrat de rappelfactice ...Hmmm. I see. That sends me a step backwards... So getBalance implementation seems to be needed. And so does that trickery with a dummy callback contract...
- 0
- 2020-06-16
- Luiz Milfont
-
À courtterme c'est la solution.À longterme,vouspourriezparler auxmembres de la communautéet aux développeurs debase afin de collecter desintérêtspour changer de Tezos afin que cetravail autourn'estpasnécessaire.In the short term that is the solution. In the long term you could talk to community members and core developers to gather interest in changing Tezos so that this work around is not necessary.
- 1
- 2020-06-17
- MCH
J'essaie demettreen œuvre uneinterface Javapourpouvoir appeler Pro FA1.2 Entraînements de contratintelligents Programmatiquement. C'est ce quej'aimaintenant:
Mais onm'a dit que ces opérations devraientne pas renvoyer une valeur. Au lieu de cela,je devrais utiliser des rappelspour obtenir les résultats: Apparemment,je devrais appeler unpoint d'entrée de vueet fournir à la vue une adresseet un contrat de rappel. Cen'estpas quelque chose detrivial,mêmepour un développeurexpérimenté queje suis. Quelle adresse du contrat de rappel dois-je utiliser? Celui quej'ai déployé lemien? Tous les contrats ont sapropre adresse contractuelle de rappel?
J'ai de la difficultétouten essayant de comprendre labonnefaçon de lefaire.
Mon objectificiestjuste d'appelergetbalance ()pour vérifier lenombre dejetons une adresse dans un contrat déployé Mainnet.
S'il vousplaît,toute aide sera appréciée. Merci d'avance.