@@ -101,7 +101,6 @@ public async Task<List<NFT>> GetAll(QueryAllParams queryParams = null)
101101 }
102102 catch ( System . Exception e )
103103 {
104- Debug . LogWarning ( $ "Multicall failed, attempting normal calls. Error: { e . Message } ") ;
105104 List < NFT > allNfts = new List < NFT > ( ) ;
106105 for ( int i = start ; i < end ; i ++ )
107106 allNfts . Add ( await Get ( i . ToString ( ) ) ) ;
@@ -129,21 +128,36 @@ public async Task<List<NFT>> GetOwned(string address = null)
129128 List < NFT > ownedNfts = await rawTokenData . ToNFTList ( ) ;
130129 return ownedNfts ;
131130 }
132- catch ( System . Exception e )
131+ catch ( System . Exception )
133132 {
134- Debug . LogWarning ( $ "Multicall failed, likely not enumerable, attempting normal calls. Error: { e . Message } ") ;
135-
136- var balanceOfOwner = int . Parse ( await BalanceOf ( owner ) ) ;
137- List < NFT > ownedNfts = new List < NFT > ( ) ;
138- for ( int i = 0 ; i < balanceOfOwner ; i ++ )
133+ try
139134 {
140- var tokenId = await TransactionManager . ThirdwebRead < TokenERC721Contract . TokenOfOwnerByIndexFunction , TokenERC721Contract . TokenOfOwnerByIndexOutputDTO > (
141- contractAddress ,
142- new TokenERC721Contract . TokenOfOwnerByIndexFunction ( ) { Owner = owner , Index = ( BigInteger ) i }
143- ) ;
144- ownedNfts . Add ( await Get ( tokenId . ReturnValue1 . ToString ( ) ) ) ;
135+ var balanceOfOwner = int . Parse ( await BalanceOf ( owner ) ) ;
136+ List < NFT > ownedNfts = new List < NFT > ( ) ;
137+ for ( int i = 0 ; i < balanceOfOwner ; i ++ )
138+ {
139+ var tokenId = await TransactionManager . ThirdwebRead < TokenERC721Contract . TokenOfOwnerByIndexFunction , TokenERC721Contract . TokenOfOwnerByIndexOutputDTO > (
140+ contractAddress ,
141+ new TokenERC721Contract . TokenOfOwnerByIndexFunction ( ) { Owner = owner , Index = ( BigInteger ) i }
142+ ) ;
143+ ownedNfts . Add ( await Get ( tokenId . ReturnValue1 . ToString ( ) ) ) ;
144+ }
145+ return ownedNfts ;
146+ }
147+ catch ( System . Exception )
148+ {
149+ var count = await TotalCount ( ) ;
150+
151+ List < NFT > ownedNfts = new List < NFT > ( ) ;
152+ for ( int i = 0 ; i < count ; i ++ )
153+ {
154+ if ( await OwnerOf ( i . ToString ( ) ) == owner )
155+ {
156+ ownedNfts . Add ( await Get ( i . ToString ( ) ) ) ;
157+ }
158+ }
159+ return ownedNfts ;
145160 }
146- return ownedNfts ;
147161 }
148162 }
149163 }
@@ -159,11 +173,19 @@ public async Task<string> OwnerOf(string tokenId)
159173 }
160174 else
161175 {
162- var tokenURI = await TransactionManager . ThirdwebRead < TokenERC721Contract . OwnerOfFunction , TokenERC721Contract . OwnerOfOutputDTO > (
163- contractAddress ,
164- new TokenERC721Contract . OwnerOfFunction ( ) { TokenId = BigInteger . Parse ( tokenId ) }
165- ) ;
166- return tokenURI . ReturnValue1 ;
176+ try
177+ {
178+ var tokenURI = await TransactionManager . ThirdwebRead < TokenERC721Contract . OwnerOfFunction , TokenERC721Contract . OwnerOfOutputDTO > (
179+ contractAddress ,
180+ new TokenERC721Contract . OwnerOfFunction ( ) { TokenId = BigInteger . Parse ( tokenId ) }
181+ ) ;
182+ return tokenURI . ReturnValue1 ;
183+ }
184+ catch ( System . Exception )
185+ {
186+ Debug . LogWarning ( "$Unable to find owner of {tokenId}, return address(0)" ) ;
187+ return "0x0000000000000000000000000000000000000000" ;
188+ }
167189 }
168190 }
169191
0 commit comments