diff --git a/src/assets/AssetsContractController.test.ts b/src/assets/AssetsContractController.test.ts index e60951da85..a18306a870 100644 --- a/src/assets/AssetsContractController.test.ts +++ b/src/assets/AssetsContractController.test.ts @@ -55,6 +55,12 @@ describe('AssetsContractController', () => { expect(tokenId).toEqual('https://api.godsunchained.com/card/0'); }); + it('should return empty string as URI when address given is not an NFT', async () => { + assetsContract.configure({ provider: MAINNET_PROVIDER }); + const tokenId = await assetsContract.getCollectibleTokenURI('0x0000000000000000000000000000000000000000', 0); + expect(tokenId).toEqual(''); + }); + it('should get collectible name', async () => { assetsContract.configure({ provider: MAINNET_PROVIDER }); const name = await assetsContract.getAssetName(GODSADDRESS); diff --git a/src/assets/AssetsContractController.ts b/src/assets/AssetsContractController.ts index 3198892d31..6414de09ac 100644 --- a/src/assets/AssetsContractController.ts +++ b/src/assets/AssetsContractController.ts @@ -164,6 +164,10 @@ export class AssetsContractController extends BaseController { + const supportsMetadata = await this.contractSupportsMetadataInterface(address); + if (!supportsMetadata) { + return ''; + } const contract = this.web3.eth.contract(abiERC721).at(address); return new Promise((resolve, reject) => { contract.tokenURI(tokenId, (error: Error, result: string) => { diff --git a/src/assets/AssetsController.ts b/src/assets/AssetsController.ts index 9c2f4c0de1..d4c4b14fbc 100644 --- a/src/assets/AssetsController.ts +++ b/src/assets/AssetsController.ts @@ -190,24 +190,6 @@ export class AssetsController extends BaseController this.hub.emit(`${suggestedAssetMeta.id}:finished`, failedSuggestedAssetMeta); } - /** - * Get collectible tokenURI API following ERC721 - * - * @param contractAddress - ERC721 asset contract address - * @param tokenId - ERC721 asset identifier - * @returns - Collectible tokenURI - */ - private async getCollectibleTokenURI(contractAddress: string, tokenId: number): Promise { - const assetsContract = this.context.AssetsContractController as AssetsContractController; - const supportsMetadata = await assetsContract.contractSupportsMetadataInterface(contractAddress); - /* istanbul ignore if */ - if (!supportsMetadata) { - return ''; - } - const tokenURI = await assetsContract.getCollectibleTokenURI(contractAddress, tokenId); - return tokenURI; - } - /** * Request individual collectible information from OpenSea api * @@ -242,7 +224,8 @@ export class AssetsController extends BaseController contractAddress: string, tokenId: number, ): Promise { - const tokenURI = await this.getCollectibleTokenURI(contractAddress, tokenId); + const assetsContract = this.context.AssetsContractController as AssetsContractController; + const tokenURI = await assetsContract.getCollectibleTokenURI(contractAddress, tokenId); const object = await handleFetch(tokenURI); const image = object.hasOwnProperty('image') ? 'image' : /* istanbul ignore next */ 'image_url'; return { image: object[image], name: object.name };