KAS에서 특정 주소가 소유한 모든 NFT를 조회하는 API가 있었던 것을 확인하였는데, 모든 NFT가 아닌 특정한 주소의 NFT의 소유 id값을 받아오고 싶습니다.
가볍게 구현해보려고하는데, 이벤트를 파싱하는 방식과 스마트컨트랙트 내에서 for문을 돌며 오너를 확인하는 방식 모두 rpc에러가 발생하여 사용이 불가능한 상태입니다.
NFT의 구현자체에 tokenOfOwnerByIndex과 같은 기능이 구현되어있지 않아 도움을 요청합니다.
KAS에서 특정 주소가 소유한 모든 NFT를 조회하는 API가 있었던 것을 확인하였는데, 모든 NFT가 아닌 특정한 주소의 NFT의 소유 id값을 받아오고 싶습니다.
가볍게 구현해보려고하는데, 이벤트를 파싱하는 방식과 스마트컨트랙트 내에서 for문을 돌며 오너를 확인하는 방식 모두 rpc에러가 발생하여 사용이 불가능한 상태입니다.
NFT의 구현자체에 tokenOfOwnerByIndex과 같은 기능이 구현되어있지 않아 도움을 요청합니다.
안녕하세요, 어떤 rpc에러가 발생하나요?
특정 address가 소유한 특정 NFT의 보유 정보를 조회하고 싶습니다에서 토론 계속하기:
반복문을 통해서 구하는 방식은
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;
}
}
}
}
위 함수를 구현하여 호출하였는데 위와 동일한 에러가 발생하였습니다.
NFT tokenOfOwnerByIndex 호출 오류 해당글 참고하셔서 한번 확인해보시면 좋을것같네요
지금 NFT 자체에 tokenOfOwnerByIndex구현체가 없어서 다른 방식으로 값을 받아와야 합니다.
혹시 다른 방법은 없을까요?
nft.ownerOf(i) 결과를 다이렉트로 비교하기보다, 못받아오는 index가 있을 수 있기때문에 에러처리 후 정상적으로 받아온 경우에 대해서만 처리하는 방식으로 하면 될거같아요.
try catch 활용후 정상 작동하는 것으로 보입니다.
감사합니다