118 lines
3.2 KiB
JavaScript
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;
|