¿Cómo recuperar datos de un contrato inteligente usando javascript?
2 respuestas
- votos
-
- 2020-01-25
Apartir delprotocolo actual de Babylon yelpróximo Carthage,el RPC solo lebrinda la capacidad de recuperarel valor de una clave conocida que ustedproporciona al RPC. Peroinclusoen esteescenario,debeproporcionarno la clave legible que almacenó,sino un hash deesa clave,ya que asíes como se representainternamente. Esta respuesta describe cómo llamar al RPC
El RPCnoproporciona unmediopara "obtenertodas las claves" opara "obtenertodos los valores". Para lograresto,debe realizar una cantidad de análisispocopráctica,por lo que se recomienda que use unindexador o unabibliotecapara hacer lamayorparte deltrabajopor usted.
Para labúsqueda de una sola clave,labiblioteca Taquito lepermite hacer lo siguiente:
const contract = await Tezos.contract.at("KT1...") const storage = await contract.storage() const bigMapDetail = await storage.namedbigmap.get("readable lookup key")
Leamás sobre Taquito ymapasgrandesen https://medium.com/tezoscommons/new-taquito-release-now-with-bigmaps-7d7352351af4
Para obtenertodos los valores,elindexadortzStatsproporciona una APIfácil de usar (pronto,esprobable que otrosindexadores agreguenestotambién). Ejemplo de llamada de TzStatspara obtenertodos los valores de un contrato con unmapagrande:
curl "https://api.tzstats.com/explorer/bigmap/17/values"
Leamás sobre la compatibilidad conmapasgrandes detzStatsen https://tzstats.com/blog/tezos-smart-contract-apis/
Tambiénpuede utilizar PyTezos "big_map_get"para hacerparte deltrabajopesadopor usted sino quiere depender de unindexador. 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/
-
Graciasporesto.El uso detzstats se adapta ami caso,pero arroja unerror CORS cuandointento recuperareljson.¿Hay algunamanera deimplementar lafunción `$ .getJSON (https://api.babylonnet.tzstats.com/explorer/contract/{kt}/storage..`? Agregar`? Callback=? `Noparecehaz queestofuncione.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 va a llamarlo desde un scriptbasadoen navegador,deberá obtener su dominio de llamadaen la listablancapara CORSporparte delproveedor delpuntofinal del servidor queestá utilizando.Envía unmensaje a Alexen [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
-
Creo que Alex dio la segunda respuesta,espero que respondapronto.Estoyenviando solicitudes a [cors-anywhere] (https://github.com/Rob--W/cors-anywhere/)para completarelprototipo.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
-
Notenemosplanes deimplementar JSONP.Puedeejecutar supropia copia denuestroindexador que admiteencabezados CORS defábrica oenviarme una solicitudpara serincluidoen la listablancaen nuestra 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
Mantenemos un índice detodos los datos históricos debigmapen TzStats.Para recuperartodas las claves y valores actualesen una llamada abigmap
https://api.tzstats.com/explorer/bigmap/:id/values
Si sumapagrandeesmuygrande,puede recorrerel resultado con losparámetros
limit
yoffset
(el valorpredeterminadoes 100entradas,elmáximoes 500).Consulte nuestro documento debigmap para obtenermás detalles yejemplos.Siprefiere utilizar Tezos RPC,lea esta respuesta .Enestemomento,el RPC obtiene una única clave debigmap solopor llamada ynecesita conocerel hash deexpresión de script de su clave.
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.
-
Hola Alex,deseo devolvertodos los valores debigmapen una sola solicitud.Después de laimplementación del contrato,elbigmap completo semuestra usando `../explorer/contract/{hash}/storage`,pero después de una actualización solomuestra laidentificación debigmap.Intenté `../explorer/bigmap/{id}/values`peroestoproduce 20entradas.¿Cómopuedo obtener **todos ** clave/valores (solo 32)?Muchasgracias.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
-
Agreguéelparámetro `limit` al valorpredeterminado (20entradas).I appended the `limit` parameter to up from default (20 entries).
- 0
- 2020-01-30
- macourtney7
-
Loencontró ustedmismo,bueno.Elpuntofinal `../explorer/bigmap/{id}/values` comotodos los demáspuntosfinales de la listaen` ../explorer` admitepaginación usando `offset` y` limit`.El límitemáximoes 100. Unproblemaimportantees queentre dos llamadaspaginadas,la cadenapuede avanzar o reorganizarse.Para unapaginaciónestable (noinfluenciadapornuevosbloques) use unparámetro adicional `block={hash| height}` queefectivamentebloquea su llamada a unpuntoespecíficoen el historial.Elbeneficioes que si la cadena se reorganizaentre llamadas,obtiene unerror 409,por lo que sabe quetodas laspáginas anterioresestán 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
He almacenado datos queme gustaría recuperar de un contratointeligenteimplementado.
Laestructura de almacenamiento se definiómediante SmartPy:
La respuesta deesta publicación pareceestarbien las líneas correctaspero yanoes válido. Siesposible,una solucióntambién debería devolver un objeto JSON,ya que sería deseable.
Megustaría recuperar los datos almacenadosen el
sp.big_map
ytres contenedores desp.address
.Hay 32elementosfijosen
bmap
yes accesible através de unexplorador como better- call.dev¡Se agradecemucho cualquier ayuda!