1
This commit is contained in:
parent
de1c856ca3
commit
b61f866682
@ -0,0 +1,169 @@
|
|||||||
|
const log = require('j7/log');
|
||||||
|
const app = require('j7/app');
|
||||||
|
const bcutils = require('j7/bcutils');
|
||||||
|
const utils = require('j7/utils');
|
||||||
|
const j7event = require('j7/event');
|
||||||
|
const metaFactory = require('../../metadata/factory');
|
||||||
|
const C = require('../../C');
|
||||||
|
const gameapi = require('../gameapi');
|
||||||
|
|
||||||
|
/*
|
||||||
|
操作成功的事件
|
||||||
|
event TokenMinted(
|
||||||
|
address indexed to,
|
||||||
|
uint256 indexed nonce,
|
||||||
|
uint256 startTime,
|
||||||
|
uint256[] ids
|
||||||
|
)
|
||||||
|
*/
|
||||||
|
|
||||||
|
class Activate721Nft {
|
||||||
|
|
||||||
|
async start(instance, conn, event) {
|
||||||
|
console.log('Activate721Nft', event);
|
||||||
|
const blockNumber = event['blockNumber'];
|
||||||
|
const returnValues = event['returnValues'];
|
||||||
|
const transId = returnValues['nonce'];
|
||||||
|
const to = returnValues['to'];
|
||||||
|
|
||||||
|
if (returnValues['ids'].length != 1) {
|
||||||
|
this.throwError('error returnValues:' + utils.jsonEncode(returnValues));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const tokenId = returnValues['ids'][0];
|
||||||
|
|
||||||
|
const params = bcutils.extractParamsFromTransId(transId);
|
||||||
|
if (!params || params.length != 3) {
|
||||||
|
//this.throwError(instance, 'activate721nft error transId:' + transId);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const itemUniId = params[0];
|
||||||
|
const itemId = params[1];
|
||||||
|
|
||||||
|
console.log(params);
|
||||||
|
await this.mintNft(
|
||||||
|
instance,
|
||||||
|
conn,
|
||||||
|
transId,
|
||||||
|
bcutils.toNormalAddress(to),
|
||||||
|
blockNumber,
|
||||||
|
tokenId,
|
||||||
|
itemUniId,
|
||||||
|
itemId);
|
||||||
|
await gameapi.confirmTransactionDb(this.instance, transId);
|
||||||
|
}
|
||||||
|
|
||||||
|
async mintNft(instance, conn, transId, owner, blockNumber, tokenId, itemUniId, itemId) {
|
||||||
|
const itemMeta = metaFactory.getMetaByKey('Item', itemId);
|
||||||
|
if (!itemMeta) {
|
||||||
|
this.throwError(instance, 'activate721nft error transId:1');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const tokenType = itemMeta.getNftType();
|
||||||
|
if (tokenType == bcutils.NONE_TYPE) {
|
||||||
|
this.throwError(instance, 'activate721nft error transId:2');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
await this.updateGameDbInfo(instance, conn, transId, itemUniId, itemId, 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 nowTime = utils.getUtcTime();
|
||||||
|
const fieldList = [
|
||||||
|
['token_id', tokenId],
|
||||||
|
['token_type', tokenType],
|
||||||
|
['item_id', itemId],
|
||||||
|
['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 {
|
||||||
|
j7event.emitEvent(C.CREATE_EXEC_CONFIRM_OWNER_EVENT, tokenId);
|
||||||
|
} catch (err) {
|
||||||
|
log.warning('processEvent:' + err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async updateGameDbInfo(instance, marketDbConn, transId, itemUniId, itemId, tokenId, tokenType) {
|
||||||
|
const {err, conn} = await app.getDbConn('GameDb0');
|
||||||
|
if (err) {
|
||||||
|
this.throwError(instance, 'gamedb connection err:' + err);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
try {
|
||||||
|
let tblName = '';
|
||||||
|
switch (tokenType) {
|
||||||
|
case bcutils.HERO_TYPE:
|
||||||
|
{
|
||||||
|
tblName = 't_hero';
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case bcutils.EQUIP_TYPE:
|
||||||
|
{
|
||||||
|
tblName = 't_gun';
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case bcutils.CHIP_TYPE:
|
||||||
|
{
|
||||||
|
tblName = 't_chip';
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (!tblName) {
|
||||||
|
this.throwError(instance, 'error token_type:' + tokenType);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
await conn.update(
|
||||||
|
tblName,
|
||||||
|
[
|
||||||
|
['idx', itemUniId],
|
||||||
|
],
|
||||||
|
[
|
||||||
|
['token_id', tokenId],
|
||||||
|
['!account_id', () => {
|
||||||
|
return 'null';
|
||||||
|
}],
|
||||||
|
]
|
||||||
|
);
|
||||||
|
} finally{
|
||||||
|
conn.release();
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
this.throwError(instance, 'updateGameDbInfo err:' + e);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
throwError(instance, err) {
|
||||||
|
const errMsg = 'processActivate721NftEvent:' + utils.jsonEncode(instance) + ' err:' + err;
|
||||||
|
throw errMsg;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = Activate721Nft;
|
Loading…
x
Reference in New Issue
Block a user