Come recuperare i dati da smart-contract usando javascript?
2 risposta
- voti
-
- 2020-01-25
Apartire dall'attualeprotocollo Babylone dall'imminente Cartagine,l'RPCti offre solo lapossibilità di recuperareil valoreper una chiavenota chefornisci all'RPC. Ma anchein questo scenario ènecessariofornirenon la chiave leggibilememorizzata,ma un hash di quella chiavepoiché è così che viene rappresentatainternamente. Questa risposta descrive come chiamare l'RPC
L'RPCnonfornisce unmezzoper "otteneretutte le chiavi" oper "otteneretuttii valori". Per ottenere ciò ènecessarioeseguire una quantità di analisipocopratica,quindi si consiglia di utilizzare unindicizzatore o una libreriapereseguire lamaggiorparte del lavoroperte.
Per la ricerca a chiave singola,la libreria Taquitoti consente dieseguire le seguenti operazioni:
const contract = await Tezos.contract.at("KT1...") const storage = await contract.storage() const bigMapDetail = await storage.namedbigmap.get("readable lookup key")
Ulterioriinformazioni su Taquitoe mappe digrandi dimensioni su https://medium.com/tezoscommons/new-taquito-release-now-with-bigmaps-7d7352351af4
Per otteneretuttii valori,l'indicizzatoretzStatsfornisce un'APIfacile da usare (presto èprobabile che anche altriindicizzatori lo aggiungano). Esempio di chiamata TzStatsper otteneretuttii valori da un contratto con unagrandemappa:
curl "https://api.tzstats.com/explorer/bigmap/17/values"
Per ulterioriinformazioni sul supporto dellemappegranditzStats,visitare https://tzstats.com/blog/tezos-smart-contract-api/
Puoi anche usare PyTezos "big_map_get"perfare unpo 'del lavoropesanteperte senon vuoifare affidamento su unindicizzatore. 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/
-
Grazieper questo.L'utilizzo ditzstats si adatta almio casomagenera unerrore CORS quandoprovo a recuperareiljson.C'è unmodoperimplementare lafunzione `$ .getJSON (https://api.babylonnet.tzstats.com/explorer/contract/{kt}/storage..`? L'aggiunta di`? Callback=? `Non sembrafallofunzionare.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
-
se lo chiamerai da uno scriptbasato subrowser,dovraiinserireiltuo dominio chiamantenella whitelistper CORS dalprovider dell'endpoint del server che stai utilizzando.Invia unmessaggio ad 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
-
Credo che Alex abbiafornito la seconda risposta,speriamo che rispondapresto.Stoinviando richieste diproxy con [cors-ovunque] (https://github.com/Rob--W/cors-anywhere/)per completareilprototipo.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
-
Non abbiamoin programma diimplementare JSONP.Puoieseguire latua copia delnostroindicizzatore che supporta leintestazioni CORSimmediatamente oinviarmi una richiestaperessereinseritonella whitelist dellanostra APIpubblica.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
Manteniamo unindice dituttii dati storici dibigmap su TzStats.Per recuperaretutte le chiavie i valori correntiin una chiamatabigmap
https://api.tzstats.com/explorer/bigmap/:id/values
Se latuabigmap èmoltograndepuoi sfogliareil risultato coni parametri
limit
eoffset
(il valorepredefinito è 100 voci,ilmassimo è 500).Consultail ilnostro documentobigmap per ulteriori dettagliedesempi.Sepreferisci utilizzare Tezos RPC leggi questa risposta .In questomomento l'RPC recupera una singola chiavebigmapper chiamatae devi conoscere l'hash dell'espressione dello script dellatua chiave.
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.
-
Ciao Alex,desidero restituiretuttii valoribigmapin una singola richiesta.Dopo la distribuzione del contratto,labigmap completa vienemostrata usando "../explorer/contract/{hash}/storage"ma dopo un aggiornamentomostra solo l'idbigmap.Hoprovato "../explorer/bigmap/{id}/values"ma questoproduce 20 voci.Comeposso recuperare **tutte ** le chiavi/valori (solo 32)?Graziemolto.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
-
Ho aggiuntoilparametro `limit` al valorepredefinito (20 voci).I appended the `limit` parameter to up from default (20 entries).
- 0
- 2020-01-30
- macourtney7
-
L'haitrovatotu stesso,bene.L'endpoint `../explorer/bigmap/{id}/values` cometuttigli altriendpoint dell'elencoin` ../explorer` supportanoilpaging usando `offset`e` limit`.Il limitemassimo è 100. Unproblemaimportante è chetra due chiamatepaginate la catenapuò avanzare o riorganizzarsi.Per unapaginazione stabile (noninfluenzata danuoviblocchi) usa unparametro aggiuntivo `block={hash| height}` chebloccaefficacemente latua chiamata a unpunto specificonella storia.Il vantaggio è che se la catena si rifàtra le chiamate si ottiene unerrore 409,quindi sai chetutte lepagineprecedenti sono obsolete.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
Ho archiviatoi dati che vorrei recuperare da uno smart contract distribuito.
La struttura di archiviazione è stata definita utilizzando SmartPy:
La risposta a questo post sembraessere d'accordo le righegiustemanon èpiù valido. Sepossibile,una soluzione dovrebbe restituire anche un oggetto JSONpoiché sarebbe desiderabile.
Vorrei recuperarei datimemorizzatinei contenitori
sp.big_map
e tresp.address
.Ci sono 32elementifissiin
bmap
ed è accessibiletramite unesploratore come better- call.devQualsiasi aiuto èmolto apprezzato!