# 특정 address가 소유한 특정 NFT의 보유 정보를 조회하고 싶습니다

**URL:** <https://devforum.kaia.io/t/address-nft/6379>\
**Category:** Caver\
**Tags:** caver-js, smart-contract\
**Created:** [1월 17, 2023, 1:56오전 UTC](https://devforum.kaia.io/t/address-nft/6379 "2023-01-17T01:56:55Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![exd0tsol](https://avatars.discourse-cdn.com/v4/letter/e/c6cbf5/32.png) [@exd0tsol](https://devforum.kaia.io/u/exd0tsol)\
**Post date:** [1월 17, 2023, 1:56오전 UTC](https://devforum.kaia.io/t/address-nft/6379/1 "2023-01-17T01:56:55Z")

</div>

KAS에서 특정 주소가 소유한 모든 NFT를 조회하는 API가 있었던 것을 확인하였는데, 모든 NFT가 아닌 특정한 주소의 NFT의 소유 id값을 받아오고 싶습니다.

가볍게 구현해보려고하는데, 이벤트를 파싱하는 방식과 스마트컨트랙트 내에서 for문을 돌며 오너를 확인하는 방식 모두 rpc에러가 발생하여 사용이 불가능한 상태입니다.

NFT의 구현자체에 tokenOfOwnerByIndex과 같은 기능이 구현되어있지 않아 도움을 요청합니다.

---

<div class="post-metadata">

**Author:** ![jack\_jin](https://yyz1.discourse-cdn.com/flex035/user_avatar/devforum.kaia.io/jack_jin/32/2305_2.png) [@jack\_jin](https://devforum.kaia.io/u/jack_jin)\
**Post date:** [1월 17, 2023, 2:02오전 UTC](https://devforum.kaia.io/t/address-nft/6379/2 "2023-01-17T02:02:44Z")

</div>

안녕하세요, 어떤 rpc에러가 발생하나요?

---

<div class="post-metadata">

**Author:** ![exd0tsol](https://avatars.discourse-cdn.com/v4/letter/e/c6cbf5/32.png) [@exd0tsol](https://devforum.kaia.io/u/exd0tsol)\
**Post date:** [1월 17, 2023, 2:29오전 UTC](https://devforum.kaia.io/t/address-nft/6379/3 "2023-01-17T02:29:32Z")

</div>

[특정 address가 소유한 특정 NFT의 보유 정보를 조회하고 싶습니다](https://devforum.kaia.io/t/address-nft/6379/2)에서 토론 계속하기:

 ![image](https://canada1.discourse-cdn.com/flex035/uploads/klaytn/original/2X/9/9b69ece313727fdbceaa68aa85eb3b783c56b5f3.png)  
이벤트 목록을 받아오기위해서 contract.getPastEvents를 이용하였고 fromBlock을 조금만 작게해도 (1주일 전 블럭넘버) 위의 에러가 발생합니다.

반복문을 통해서 구하는 방식은

```auto
function getOwnNftId(address _owner) public view returns(uint256[] memory result) {
        uint256 balance = nft.balanceOf(_owner);
        uint256 supply = 5000;
        result = new uint256[](balance);

        uint256 counter = 0;

        if (balance == 0) {
            return result;
        }

        unchecked {
            for (uint256 i=0; i <= supply; ++i) {
                if (nft.ownerOf(i) == _owner) {
                    result[counter] = i;
                    counter++;
                }
                if (counter == balance) {
                    return result;
                }
            }
        }
    }

```

위 함수를 구현하여 호출하였는데 위와 동일한 에러가 발생하였습니다.

---

<div class="post-metadata">

**Author:** ![jack\_jin](https://yyz1.discourse-cdn.com/flex035/user_avatar/devforum.kaia.io/jack_jin/32/2305_2.png) [@jack\_jin](https://devforum.kaia.io/u/jack_jin)\
**Post date:** [1월 17, 2023, 3:25오전 UTC](https://devforum.kaia.io/t/address-nft/6379/4 "2023-01-17T03:25:49Z")

</div>

[NFT tokenOfOwnerByIndex 호출 오류](https://devforum.kaia.io/t/nft-tokenofownerbyindex/4354) 해당글 참고하셔서 한번 확인해보시면 좋을것같네요

---

<div class="post-metadata">

**Author:** ![exd0tsol](https://avatars.discourse-cdn.com/v4/letter/e/c6cbf5/32.png) [@exd0tsol](https://devforum.kaia.io/u/exd0tsol)\
**Post date:** [1월 17, 2023, 3:30오전 UTC](https://devforum.kaia.io/t/address-nft/6379/5 "2023-01-17T03:30:13Z")

</div>

지금 NFT 자체에 tokenOfOwnerByIndex구현체가 없어서 다른 방식으로 값을 받아와야 합니다.  
혹시 다른 방법은 없을까요?

---

<div class="post-metadata">

**Author:** ![jack\_jin](https://yyz1.discourse-cdn.com/flex035/user_avatar/devforum.kaia.io/jack_jin/32/2305_2.png) [@jack\_jin](https://devforum.kaia.io/u/jack_jin)\
**Post date:** [1월 17, 2023, 4:08오전 UTC](https://devforum.kaia.io/t/address-nft/6379/6 "2023-01-17T04:08:11Z")

</div>

nft.ownerOf(i) 결과를 다이렉트로 비교하기보다, 못받아오는 index가 있을 수 있기때문에 에러처리 후 정상적으로 받아온 경우에 대해서만 처리하는 방식으로 하면 될거같아요.

---

<div class="post-metadata">

**Author:** ![exd0tsol](https://avatars.discourse-cdn.com/v4/letter/e/c6cbf5/32.png) [@exd0tsol](https://devforum.kaia.io/u/exd0tsol)\
**Post date:** [1월 17, 2023, 4:27오전 UTC](https://devforum.kaia.io/t/address-nft/6379/7 "2023-01-17T04:27:27Z")

</div>

try catch 활용후 정상 작동하는 것으로 보입니다.

감사합니다
