2022-04-25 11:28:35 +08:00

118 lines
3.2 KiB
JavaScript

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;