diff --git a/server/web3dbspider/services/events/HERO/transfer.js b/server/web3dbspider/services/events/HERO/transfer.js index c0d48ba..0dc7764 100644 --- a/server/web3dbspider/services/events/HERO/transfer.js +++ b/server/web3dbspider/services/events/HERO/transfer.js @@ -16,14 +16,17 @@ class Transfer extends BaseEventProcess { if (bcutils.isSysAddress(from)) { const airDropMeta = metaFactory.getAirDrop(tokenId); if (airDropMeta) { - await this.mint721Nft( - to, - tokenId, - airDropMeta['item_id'], - bcconst.BC_NFT_HERO, - this.getContractAddress(), - this.getBlockNumber() - ); + const exists = await this.exists721Nft(tokenId, this.getContractAddress()); + if (!exists) { + await this.mint721Nft( + to, + tokenId, + airDropMeta['item_id'], + bcconst.BC_NFT_HERO, + this.getContractAddress(), + this.getBlockNumber() + ); + } await this.apiMint(airDropMeta); } } diff --git a/server/web3dbspider/services/events/common/BaseEventProcess.js b/server/web3dbspider/services/events/common/BaseEventProcess.js index c0e0c99..226de94 100644 --- a/server/web3dbspider/services/events/common/BaseEventProcess.js +++ b/server/web3dbspider/services/events/common/BaseEventProcess.js @@ -300,6 +300,23 @@ class BaseEventProcess { } } + async exists721Nft(tokenId, contractAddress) { + const logHead = this.genLogHead(' exists721Nft '); + const {err, row} = await this.bcNftDbConn( + 'ormSelectOne', + 't_nft', + [ + ['net_id', this.getNetId()], + ['contract_address', contractAddress], + ['token_id', tokenId], + ] + ); + if (err) { + this.throwError(logHead + err); + } + return row ? true : false; + } + async mint721Nft(address, tokenId, itemId, tokenType, contractAddress, blockNumber) { const logHead = this.genLogHead(' mint721Nft ');