Comment récupérer des données de Smart-contrat à l'aide de JavaScript?
2 réponses
- votes
-
- 2020-01-25
Àpartir du Protocole Babylone actuelet de laprochaine carthage,le RPCne vouspermet que de récupérer la valeur d'une clé connue que vousfournissez au RPC. Maismême dans ce scénario,vous devezne pasfournir la clé lisible que vous avez stockée,mais un hachage de cette clé,car c'est ce qu'ilest représentéen interne. Cette réponseexplique comment appeler le RPC
Le RPCne fournitpas demoyen de "Obtenirtoutes les clés" ou "Obtenirtoutes les valeurs". Pour accomplir cela,vous devezeffectuer une quantitéirréalisable d'analyse,ilest donc recommandé d'utiliser unindexeur ou unebibliothèquepourfaire lamajeurepartie dutravailpour vous.
Pour une recherche clé unique,labibliothèque Taquito vouspermet deprocéder comme suit:
const contract = await Tezos.contract.at("KT1...") const storage = await contract.storage() const bigMapDetail = await storage.namedbigmap.get("readable lookup key")
En savoirplus sur Taquitoet Big Maps à https://medium.com/tezoscommons/new-taquito-release-now-with-bigmaps-7d7352351af4
Pour obtenirtoutes les valeurs,l'indexer Tzstatsfournit une APIfacile à utiliser (bientôt d'autresindexeurs sont susceptibles d'ajouter cela aussi). Exemple Tzstats Appelezpour obtenirtoutes les valeurs d'un contrat avec unegrande carte:
curl "https://api.tzstats.com/explorer/bigmap/17/values"
En savoirplus sur Tzstats Big Map Support à https://tzstats.com/Blog/Tezos-Smart-Contract-APIS/
Vouspouvez également utiliser PyTezos "BIG_MAP_GET"poureffectuer unepartie de laforte levéepour vous si vousne voulezpas compter sur unindexeur. https://baking-bad.github.io/pytezos/
As of the current Babylon protocol and the upcoming Carthage, the RPC only provides you the ability to retrieve the value for a known key that you provide to the RPC. But even in this scenario you need to provide not the readable key you stored, but a hash of that key as that is how it is represented internally. This answer describes how to call the RPC
The RPC does not provide a means to "get all keys" or to "get all values". To accomplish this you must do an impractical amount of parsing so it is recommended that you use either an indexer or a library to do most of the work for you.
For single key lookup, Taquito library allows you to do the following:
const contract = await Tezos.contract.at("KT1...") const storage = await contract.storage() const bigMapDetail = await storage.namedbigmap.get("readable lookup key")
Read more on Taquito and big maps at https://medium.com/tezoscommons/new-taquito-release-now-with-bigmaps-7d7352351af4
To get all the values, the tzStats indexer provides an easy to use API (soon other indexers are likely to add this as well). Example TzStats call to get all the values out of a contract with a big map:
curl "https://api.tzstats.com/explorer/bigmap/17/values"
Read more on tzStats big map support at https://tzstats.com/blog/tezos-smart-contract-apis/
You can also use PyTezos "big_map_get" to do some of the heavy lifting for you if you don't want to rely on an indexer. https://baking-bad.github.io/pytezos/
-
Mercipour cela.Utiliser destzstats convient àmon cas,maisil lance uneerreur de Cors lorsquej'essaie de récupérer le JSON.Est-il unmoyen demettreen œuvre le `$ .getjson (https://api.babylonnet.tzststats.com/explorer/contract/{kt}/stockage..`fonction? Ajout`? Rappel=? `Ne semblepasObtenez cecipourtravailler.Thanks for this. Using tzstats suits my case but it is throwing a CORS error when I try to retrieve the json. Is there a way to implement the `$.getJSON(https://api.babylonnet.tzstats.com/explorer/contract/{kt}/storage..` function? Appending `?callback=?` doesn't seem to get this to work.
- 0
- 2020-01-28
- macourtney7
-
Si vous allez appeler àpartir d'un scriptbasé sur lenavigateur,vous devrez obtenir votre domaine d'appel Whitelistedpour CORSpar lefournisseur dunoeudfinal du serveur que vous utilisez.Message Alex à[email protected]if you are going to call it from a browser based script you will need to get your calling domain whitelisted for CORS by the provider of the server endpoint you are using. Message Alex at [email protected]
- 0
- 2020-01-28
- cousinit
-
Je crois que Alex afourni la deuxième réponse,j'espère qu'il répondrabientôt.Je suis des demandes deproxyts avec [Cors-Anywhere] (https://github.com/rob--w/cors-antawywhere/)pour compléter leprototype.I believe Alex provided the second answer, hopefully he will respond soon. I am proxying requests with [cors-anywhere](https://github.com/Rob--W/cors-anywhere/) to complete the prototype.
- 0
- 2020-01-28
- macourtney7
-
Nousn'avons aucuneintention demettreen œuvre JSONP.Vouspouvezexécuter votrepropre copie denotreindexeur quiprenden charge lesen-têtes Cors de laboîte ouenvoyez-moi une demande d'obtention de lablancheur surnotre APIpublique.We have no plans to implement JSONP. You can run your own copy of our indexer which supports CORS headers out of the box or send me a request to get whitelisted on our public API.
- 0
- 2020-01-29
- Alexander Eichhorn
-
- 2020-01-25
Nousmaintenons unindex detoutes les données historiques BigMap chez Tzstats.Pour récupérertoutes les cléset valeurs actuelles dans un appel BIGMAP
https://api.tzstats.com/explorer/bigmap/:id/values
Si votre BIGMAPesttrès volumineuse,vouspouvez utiliser unepage via le résultat avec
limit
etoffset
Paramètres (par défautest 100entrées,maxest de 500).Voir Notre BigMap Docu Pourplus de détailset desexemples.Si vouspréférez utiliser le Tezos RPC Lire cette réponse .À l'heure actuelle,le RPC récupère une seule clé BIGMAPpar appel uniquementet vous devez connaître l'expression de script de votre clé.
We maintain an index of all historic bigmap data at TzStats. To fetch all current keys and values in a bigmap call
https://api.tzstats.com/explorer/bigmap/:id/values
If your bigmap is very large you can page through the result with
limit
andoffset
parameters (default is 100 entries, max is 500). See our bigmap docu for more details and examples.If you prefer using the Tezos RPC read this answer. Right now the RPC fetches a single bigmap key per call only and you need to know the script expression hash of your key.
-
Bonjour Alex,je souhaite retournertoutes les valeurs BigMap dans une seule demande.Après le déploiement du contrat,legrand BigMapest affiché à l'aide de `../Explorer/contrat/{hachage}/Stockage`mais après unemise àjour,celane montre que l'identifiant BigMap.J'aiessayé `../Explorer/BigMap/{id}/valeurs` Mais celaproduit 20entrées.Commentferais-je chercher **toutes les clés/valeurs (seulement 32)?Mercibeaucoup.Hi Alex, I wish to return all bigmap values in a single request. After contract deployment the full bigmap is shown using `../explorer/contract/{hash}/storage` but after an update it shows only the bigmap id. I tried `../explorer/bigmap/{id}/values` but this produces 20 entries. How would I fetch **all** key/values (only 32)? Many thanks.
- 0
- 2020-01-30
- macourtney7
-
J'ai ajouté leparamètre `limite` àpartir de défaut (20entrées).I appended the `limit` parameter to up from default (20 entries).
- 0
- 2020-01-30
- macourtney7
-
Vous l'aveztrouvé vous-même,bon.Lepoint `../Explorer/BigMap/{ID}/Valeurs` Endpoint commetous les autrespoints d'extrémité de la liste sous` ../Explorer` Supporte lapagination à l'aide de `offset`et` limite`.Max Limitest 100. Unproblèmeimportantest qu'entre deux appels àpages,la chaînepeut avancer ou se réorganiser.Pour unepagination stable (noninfluencéepar denouveauxblocs),utilisez unparamètre supplémentaire `block={hachage| hauteur}} qui verrouilleefficacement votre appel à unpoint spécifique de l'histoire.Laprestationest que si la chaîne réorganiseentre les appels,vous obtenez uneerreur 409,vous savez quetoutes lespagesprécédentes sont rassisées.You found it yourself, good. The `../explorer/bigmap/{id}/values` endpoint like all other listing endpoints under `../explorer` support paging using `offset` and `limit`. Max limit is 100. One important issue is that between two paged calls the chain can advance or reorganize. For stable paging (not-influenced by new blocks) use an additional parameter `block={hash|height}` which effectively locks your call to a specific point in history. Benefit is that if the chain reorged between calls you get a 409 error, so you know all previous pages are stale.
- 1
- 2020-02-02
- Alexander Eichhorn
J'ai stocké des données queje souhaiteraisextraire d'un contratintelligent déployé.
La structure de stockage a été définie à l'aide de SmartPy:
La réponse de cette Post semble être le long lesbonnes lignesmaisn'estplus valide. Sipossible,une solution devrait également renvoyer un objet JSON car cela serait souhaitable.
Je voudrais récupérer les données stockées dans le
sp.big_map
et troissp.address
conteneurs.Ilexiste un 32 élémentsfixes dans
bmap
et ilest accessible via unexplorateurtel que mieux- Call.Dev