Como recuperar dados do contrato inteligente usando JavaScript?
2 respostas
- votos
-
- 2020-01-25
Apartir do atualprotocolo da Babylone dopróximo Cartago,o RPCfornece apenas a capacidade de recuperar o valorpara uma chave conhecida que vocêfornece ao RPC. Masmesmonesse cenário,vocêprecisafornecernão a chave legível que você armazenou,mas um hash dessatecla é assim que é representadointernamente. Esta resposta descreve como ligarpara o RPC
O RPCnãofornece ummeiopara "obtertodas as chaves" ou "obtertodos os valores". Para conseguirisso,você devefazer uma quantidadeimpraticável de análisepara que seja recomendado que você use umindexador ou umabibliotecaparafazer amaiorparte dotrabalhopara você.
para apesquisa única,abiblioteca Taquitopermite que vocêfaça o seguinte:
const contract = await Tezos.contract.at("KT1...") const storage = await contract.storage() const bigMapDetail = await storage.namedbigmap.get("readable lookup key")
Leiamais sobre Taquitoe mapasgrandesem https://medium.com/tezoscommons/new-taquito-release-now-with-bigmaps-7d7352351af4
Para obtertodos os valores,oindexador do TZSTATSfornece uma APIfácil de usar (embreve outrosindexadorespara adicionarissotambém). Exemplo TZSTATS Liguepara obtertodos os valores de um contrato com ummapamaior:
curl "https://api.tzstats.com/explorer/bigmap/17/values"
Leiamais sobre o suporte demapa TZSTATSem https://tzstats.com/blog/tezos-smart-contratação-apis/
Vocêtambémpode usarpytezos "big_map_get"parafazerparte do levantamentopesadopara você se vocênão quiser confiarem umindexador. 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/
-
Obrigadoporisso.Usandotzstats se adapte aomeu caso,masestájogando umerropelo COR quandotento recuperar o JSON.Existe umamaneira deimplementar o `$ .getjson (https://api.babylonnet.tzstats.com/explorer/contract/{kt}/armazenamento.. 'função? Apping`? Callback=? `NãoparecePegueissopara otrabalho.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 vocêfor chamado de um scriptbaseadononavegador,precisará obter o seu Domínio de chamadas Whitelistedfor CORSpeloprovedor do servidor deextremidade do servidor que vocêestá usando.Mensagem Alexem [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
-
Acredito que Alexforneceu a segunda resposta,espero queele respondaem breve.Euestouproxiando solicitações com [CORS-ANDYERWER] (https://github.com/rob--w/cors-Anilywewe/para completar oprotótipo.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
-
Nãotemosplanosparaimplementar o JSONP.Vocêpodeexecutar suaprópria cópia donossoindexador que suporta os cabeçalhos da CORSparafora da caixa oume envie uma solicitaçãopara obter a Whitelistedem nossa APIpública.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
Mantemos um índice detodos os dados históricos do Bigmapem Tzstats.Parabuscartodas as chavese valores atuaisem uma chamadabigmap
https://api.tzstats.com/explorer/bigmap/:id/values
Se o seubigmapformuitogrande,vocêpodepagarpelo resultado com o limite
limit
eoffset
(opadrão é 100entradas,omáximo é de 500).Ver Nosso Bigmap Docu Paramais detalhese exemplos.Se vocêpreferir usar o Tezos RPC ler esta resposta .Agora,o RPCbusca uma única chave Bigmappor chamada apenase vocêprecisa saber o hash deexpressão de script da sua chave.
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.
-
Oi Alex,desejo devolvertodos os valoresbigmapem uma única solicitação.Após aimplantação do contrato,o Bigmap completo émostrado usando `../EXPLORER/CONTRATO/{HASH}/Armazenamento,mas depois de uma atualização,elemostra apenas o ID Bigmap.Eutentei "../explorer/bigmap/{id}/valores",masissoproduz 20entradas.Comoeufingiria **tudo ** chave/valores (apenas 32)?Muito Obrigado.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
-
Eu anexi oparâmetro `Limit`para cima apartir depadrão (20entradas).I appended the `limit` parameter to up from default (20 entries).
- 0
- 2020-01-30
- macourtney7
-
Vocêencontrou vocêmesmo,bom.Opontofinal do `..//plorer/bigmap/{id}/valores comotodos os outrosendpoints da listagemem` ..//EXPLORER` suportapaginação usando `deslocamento`e` limite`.O limitemáximo é 100. Uma questãoimportante é queentre duas chamadaspaginadas a cadeiapode avançar ou reorganizar.Parapaginaçãoestável (nãoinfluenciadapornovosblocos),use umparâmetro adicional `block={hash| altura}` queefetivamentebloqueia sua chamadapara umpontoespecíficono histórico.Benefício é que se a cadeia reorientre chamadas você recebe umerro 409,então você sabe quetodas aspáginas anteriores são obsoletas.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
Eutenho armazenado dados quegostaria de recuperar de um contratointeligenteimplantado.
Aestrutura de armazenamentofoi definida usando smartpy:
a resposta deste post parece serjunto as linhas certas,masnão émais válida. Sepossível,uma soluçãotambém deve retornar um objeto JSON,poisisso seria desejável.
Eugostaria de recuperar os dados armazenadosno
sp.big_map
e trêssp.address
contêineres.Existem 32itensfixosem
BMap
e é acessível através de umexplorador,como melhor Call.devqualquer ajuda émuito apreciada!