자바 스크립트를 사용하여 스마트 계약에서 데이터를 검색하는 방법은 무엇입니까?
2 대답
- 투표
-
- 2020-01-25
현재 Babylon 프로토콜과 곧 출시 될 Carthage에서 RPC는 RPC에 제공하는 알려진 키의 값을 검색하는 기능 만 제공합니다. 그러나이 시나리오에서도 저장 한 읽을 수있는 키가 아니라 내부적으로 표현되는 방식이므로 해당 키의 해시를 제공해야합니다. 이 답변은 RPC를 호출하는 방법을 설명합니다.
RPC는 "모든 키 가져 오기"또는 "모든 값 가져 오기"수단을 제공하지 않습니다. 이를 수행하려면 비실용적 인 양의 구문 분석을 수행해야하므로 인덱서 나 라이브러리를 사용하여 대부분의 작업을 수행하는 것이 좋습니다.
단일 키 조회의 경우 Taquito 라이브러리를 사용하여 다음을 수행 할 수 있습니다.
const contract = await Tezos.contract.at("KT1...") const storage = await contract.storage() const bigMapDetail = await storage.namedbigmap.get("readable lookup key")
모든 값을 얻기 위해tzStats 인덱서는 사용하기 쉬운 API를 제공합니다 (곧 다른 인덱서도이 API를 추가 할 것입니다). 큰지도가있는 계약에서 모든 값을 가져 오는 TzStats 호출의 예 :
curl "https://api.tzstats.com/explorer/bigmap/17/values"
https://tzstats.com/에서tzStats 큰지도 지원에 대해 자세히 알아보세요. 블로그/tezos-smart-contract-apis/
인덱서에 의존하고 싶지 않은 경우 PyTezos "big_map_get"을 사용하여 무거운 작업을 수행 할 수도 있습니다. 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/
-
감사합니다.tzstats를 사용하면 내 경우에 적합하지만json을 검색하려고 할 때 CORS 오류가 발생합니다.`$ .getJSON (https://api.babylonnet.tzstats.com/explorer/contract/{kt}/storage..` 함수를 구현하는 방법이 있습니까?`? callback=?`을 추가하면작동 시키십시오.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
-
브라우저 기반 스크립트에서 호출하려는 경우 사용중인 서버 엔드 포인트의 공급자가 CORS에 대해 호출 도메인을 허용 목록에 추가해야합니다[email protected]에서 Alex에게 메시지 보내기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
-
Alex가 두 번째 답변을 제공했다고 믿습니다. 곧 답변을 드릴 것입니다.프로토 타입을 완성하기 위해 [cors-anywhere] (https://github.com/Rob--W/cors-anywhere/)에 요청을 프록시하고 있습니다.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
-
JSONP를 구현할 계획이 없습니다.즉시 CORS 헤더를 지원하는 인덱서의 자체 복사본을 실행하거나 공개 API에서 화이트리스트에 등록되도록 요청을 보낼 수 있습니다.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
우리는 TzStats에서 모든 과거 빅맵 데이터의 색인을 유지합니다.빅맵 호출에서 모든 현재 키와 값을 가져 오려면
https://api.tzstats.com/explorer/bigmap/:id/values
빅맵이 매우 큰 경우
limit
및offset
매개 변수를 사용하여 결과를 페이징 할 수 있습니다 (기본값은 100 개 항목,최대 값은 500 개).자세한 내용과 예는 빅맵 문서 를 참조하세요.Tezos RPC 사용을 선호하는 경우 이 답변 을 읽어보세요.현재 RPC는 호출 당 단일 빅맵 키만 가져 오며 키의 스크립트 표현식 해시를 알아야합니다.
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.
-
안녕하세요 Alex,단일 요청으로 모든 빅맵 값을 반환하고 싶습니다.계약 배포 후에는 전체 빅맵이`../explorer/contract/{hash}/storage`를 사용하여 표시되지만 업데이트 후에는 빅맵 ID 만 표시됩니다.`../explorer/bigmap/{id}/values`를 시도했지만 20 개의 항목이 생성됩니다.** 모든 ** 키/값 (32 개만)을 가져 오려면 어떻게해야하나요?감사합니다.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
-
'limit'매개 변수를 기본값에서 up (20 개 항목)에 추가했습니다.I appended the `limit` parameter to up from default (20 entries).
- 0
- 2020-01-30
- macourtney7
-
당신은 그것을 직접 찾았습니다.`../explorer/bigmap/{id}/values` 엔드 포인트는`../explorer` 아래의 다른 모든 목록 엔드 포인트와 마찬가지로`offset` 및`limit`를 사용한 페이징을 지원합니다.최대 제한은 100입니다. 한 가지 중요한 문제는 두 개의 호출 된 호출 사이에서 체인이 진행되거나 재구성 될 수 있다는 것입니다.안정적인 페이징 (새 블록의 영향을받지 않음)을 위해 추가 매개 변수`block={hash| height}`를 사용하여 기록의 특정 지점에 대한 호출을 효과적으로 잠급니다.이점은 호출 사이에 체인이 재구성되면 409 오류가 발생하므로 이전 페이지가 모두 부실하다는 것을 알 수 있습니다.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
배포 된 스마트 계약에서 검색하려는 데이터를 저장했습니다.
저장 구조는 SmartPy를 사용하여 정의되었습니다.
이 게시물 의 답변은 함께있는 것 같습니다. 올바른 줄이지 만 더 이상 유효하지 않습니다. 가능하다면 솔루션은 바람직하기 때문에 JSON 객체도 반환해야합니다.
sp.big_map
과 세 개의sp.address
컨테이너에 저장된 데이터를 검색하고 싶습니다.bmap
에는 고정 된 32 개의 항목이 있으며 더 나은- call.dev어떤 도움이라도 대단히 감사합니다!