const log = require('j7/log'); const bcutils = require('j7/bcutils'); const utils = require('j7/utils'); class BoxOpenedProcess extends BaseService { async start(conn, event) { const {err, row} = await conn.ormSelectOne( 't_boxopened_event', [ ['txhash', event['transactionHash']], ['log_index', event['logIndex']], ] ); if (err) { this.throwError(instance, err); } if (!row) { const blockNumber = event['blockNumber']; const returnValues = event['returnValues']; const fieldList = [ ['box_token_id', returnValues['boxId']], ['txhash', event['transactionHash']], ['block_number', blockNumber], ['log_index', event['logIndex']], ['_to', bcutils.toNormalAddress(returnValues['to'])], ['raw_data', utils.jsonEncode(event)], ['createtime', utils.getUtcTime()], ['modifytime', utils.getUtcTime()], ]; for (let i = 0; i < 3; ++i) { const id = returnValues['ids'][i]; const type = returnValues['types'][i]; if (id != '0') { fieldList.push( ['token_id' + (i + 1), id], ); fieldList.push(['token_type' + (i + 1), type]), await this.mintNft( bcutils.toNormalAddress(returnValues['to']), blockNumber, id, type); } } const {err} = await conn.insert( 't_boxopened_event', fieldList ); if (err) { this.throwError(instance, err); } } } async mintNft(owner, blockNumber, tokenId, tokenType) { const {err, row} = await conn.ormSelectOne( 't_nft', [ ['token_id', tokenId], ] ); if (err) { log.error('processEvent:' + err); throw 'processEvent:' + err; } if (!row) { const itemMeta = metaFactory.getMetaByKey('Item', 110001); if (!itemMeta) { return; } const nftItemId = itemMeta.randLuckBox(tokenType); if (nftItemId > 0) { const nowTime = utils.getUtcTime(); const fieldList = [ ['token_id', tokenId], ['token_type', tokenType], ['item_id', nftItemId], ['tags', tokenType == bcutils.HERO_TYPE ? '1' : 0], ['game_id', 2006], ['owner_address', bcutils.toNormalAddress(owner)], ['creator_address', bcutils.toNormalAddress(owner)], ['confirm_block_number', blockNumber], ['createtime', nowTime], ['modifytime', nowTime], ]; await conn.insert( 't_nft', fieldList ); } } } throwError(instance, err) { const errMsg = 'processBoxOpenedEvent:' + utils.jsonEncode(instance) + ' err:' + err; throw errMsg; } } module.exports = BoxOpenedProcess;