본문으로 건너뛰기

열거(Enumeration)

이전 튜토리얼에서는 발행 함수를 스마트 컨트랙트 뼈대에 통합하는 방법을 살펴보았습니다. NFT를 지갑에 표시하려면 열거 메서드 중 하나를 구현하는 패치 수정 사항도 배포해야 했습니다. In this tutorial, you'll expand on and finish the rest of the enumeration methods as per the standard.

Now you'll extend the NFT smart contract and add a couple of enumeration methods that can be used to return the contract's state.


소개

As mentioned in the Upgrade a Contract tutorial, you can deploy patches and fixes to smart contracts. 이번에는 해당 지식을 사용하여 nft_total_supply, nft_tokensnft_supply_for_owner 열거형 함수를 구현합니다.


컨트랙트 수정

src/enumeration.rs 파일을 열고 빈 nft_total_supply 함수를 찾는 것으로 시작하겠습니다.

nft_total_supply

이 함수는 컨트랙트에 저장된 총 NFT 수를 반환해야 합니다. nft_metadata_by_id 자료 구조의 길이를 반환하기만 하면, 이 기능을 쉽게 구현할 수 있습니다.

nft_token

This function should return a paginated list of JsonTokens that are stored on the contract regardless of their owners. If the user provides a from_index parameter, you should use that as the starting point for which to start iterating through tokens; otherwise it should start from the beginning. Likewise, if the user provides a limit parameter, the function shall stop after reaching either the limit or the end of the list.

Rust has useful methods for pagination, allowing you to skip to a starting index and taking the first n elements of an iterator. :::

nft_supply_for_owner

이 함수는 사용자 정의 소유자에 대한 모든 NFT를 찾고 결과 집합의 길이를 반환해야 합니다. 제공된 AccountID에 대한 토큰 집합이 없으면 함수는 0을 반환합니다.

그런 다음 CLI를 사용하여 이러한 새 메서드를 쿼리하고 올바르게 작동하는지 확인할 수 있습니다.


컨트랙트 재배포

nft_tokens_for_owner에 필요한 로직을 구현했으므로 이제 컨트랙트를 빌드하고 계정에 재배포할 차례입니다. Using the cargo-near, deploy the contract as you did in the previous tutorials:

cargo near deploy $NFT_CONTRACT_ID without-init-call network-config testnet sign-with-keychain send

토큰 열거

업데이트된 컨트랙트가 재배포되면 이러한 새 함수가 예상대로 작동하는지 테스트하고 확인할 수 있습니다.

NFT 토큰

컨트랙트에서 대체 불가능 토큰(NFT) 목록을 쿼리해 보겠습니다. 다음 명령을 사용하여 10번째 항목부터 최대 50개의 NFT 정보를 쿼리합니다.

near contract call-function as-read-only $NFT_CONTRACT_ID nft_tokens json-args '{"from_index": "10", "limit": 50}' network-config testnet now

이 명령은 다음과 유사한 출력을 반환해야 합니다.

응답 예시:

[]


소유자별 토큰

goteam.testnet 계정이 소유한 NFT의 총 공급량을 얻으려면, nft_supply_for_owner 함수를 호출하고 account_id 매개변수를 설정합니다.

near contract call-function as-read-only $NFT_CONTRACT_ID nft_supply_for_owner json-args '{"account_id": "goteam.testnet"}' network-config testnet now

그러면 다음과 유사한 출력이 반환됩니다.

응답 예시:

0


결론

이 튜토리얼에서는 두 개의 새로운 열거 함수를 추가했으며, 이제 생성 및 열거 메서드가 있는 기본 NFT 스마트 컨트랙트가 있습니다. 이러한 수정 사항을 구현한 후 스마트 컨트랙트를 재배포하고 CLI를 사용하여 기능을 테스트했습니다.

In the next tutorial, you'll implement the core functions needed to allow users to transfer the minted tokens.

문서 버전 관리

글을 작성하는 시점에서, 해당 예제는 다음 버전에서 작동합니다.

  • rustc: 1.77.1
  • near-cli-rs: 0.11.0
  • cargo-near 0.6.1
  • NFT standard: NEP171, version 1.0.0
  • 열거 표준: NEP181, 1.0.0 버전
Was this page helpful?