const log = require('j7/log'); const bcutils = require('j7/bcutils'); const utils = require('j7/utils'); const event = require('j7/event'); const metaFactory = require('../../metadata/factory'); const C = require('../../C'); class ActivateProcess { async start(instance, conn, event) { const {err, row} = await conn.ormSelectOne( 't_activate_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 oldTokenId = returnValues['nftOld']; const newTokenId = returnValues['nftNew']; const fieldList = [ ['old_token_id', oldTokenId], ['old_token_type', returnValues['nftType']], ['new_token_id', newTokenId], ['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()], ]; { const {err, row} = await conn.ormSelectOne( 't_nft', [ ['token_id', oldTokenId], ] ); if (err) { log.error('processEvent:' + err); throw 'processEvent:' + err; } else { await this.mintNft( conn, bcutils.toNormalAddress(returnValues['to']), blockNumber, newTokenId, row['token_type'], row['item_id'], row['tags']); } } const {err} = await conn.insert( 't_activate_event', fieldList ); if (err) { this.throwError(instance, err); } } } async mintNft(conn, owner, blockNumber, tokenId, tokenType, itemId, tags) { const {err, row} = await conn.ormSelectOne( 't_nft', [ ['token_id', tokenId], ] ); if (err) { log.error('processEvent:' + err); throw 'processEvent:' + err; } if (!row) { const nowTime = utils.getUtcTime(); const fieldList = [ ['token_id', tokenId], ['token_type', tokenType], ['item_id', itemId], ['tags', tags], ['game_id', 2006], ['owner_address', bcutils.toNormalAddress(owner)], ['creator_address', bcutils.toNormalAddress(owner)], ['confirm_block_number', blockNumber], ['createtime', nowTime], ['modifytime', nowTime], ]; const {err} = await conn.insert( 't_nft', fieldList ); if (err) { log.error('processEvent:' + err); throw 'processEvent:' + err; } try { event.emitEvent(C.CREATE_EXEC_CONFIRM_OWNER_EVENT, tokenId); } catch (err) { log.warning('processEvent:' + err); } } } throwError(instance, err) { const errMsg = 'processActivateEvent:' + utils.jsonEncode(instance) + ' err:' + err; throw errMsg; } } module.exports = ActivateProcess;