From 4531802f132080320f1aee30ccf814e92887821a Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Mon, 12 Jun 2023 15:08:40 +0800 Subject: [PATCH] 1 --- .../_internal/activate1155nft_process.js | 155 ------ .../_internal/activate721nft_process.js | 169 ------ .../services/_internal/activate_process.js | 117 ----- .../services/_internal/boxopened_process.js | 115 ----- .../services/_internal/chip_plugin_process.js | 52 -- .../services/_internal/chip_unplug_process.js | 52 -- .../services/_internal/evolve_fail_process.js | 35 -- .../services/_internal/evolve_succ_process.js | 110 ---- .../_internal/nft1155_transfer_process.js | 57 -- .../_internal/nft_transfer_process.js | 47 -- .../_internal/shard_mint_fail_process.js | 32 -- .../_internal/shard_mint_succ_process.js | 50 -- .../_internal/shard_mix_fail_process.js | 32 -- .../_internal/shard_mix_succ_process.js | 180 ------- server/web3spider/services/event_center.js | 485 ------------------ server/web3spider/services/event_process.js | 220 -------- .../services/exec_confirm_balance.js | 163 ------ .../web3spider/services/exec_confirm_owner.js | 173 ------- .../services/exec_confirm_plugin.js | 147 ------ server/web3spider/services/factory.js | 8 - server/web3spider/services/gameapi.js | 66 --- server/web3spider/services/present.js | 159 ------ 22 files changed, 2624 deletions(-) delete mode 100644 server/web3spider/services/_internal/activate1155nft_process.js delete mode 100644 server/web3spider/services/_internal/activate721nft_process.js delete mode 100644 server/web3spider/services/_internal/activate_process.js delete mode 100644 server/web3spider/services/_internal/boxopened_process.js delete mode 100644 server/web3spider/services/_internal/chip_plugin_process.js delete mode 100644 server/web3spider/services/_internal/chip_unplug_process.js delete mode 100644 server/web3spider/services/_internal/evolve_fail_process.js delete mode 100644 server/web3spider/services/_internal/evolve_succ_process.js delete mode 100644 server/web3spider/services/_internal/nft1155_transfer_process.js delete mode 100644 server/web3spider/services/_internal/nft_transfer_process.js delete mode 100644 server/web3spider/services/_internal/shard_mint_fail_process.js delete mode 100644 server/web3spider/services/_internal/shard_mint_succ_process.js delete mode 100644 server/web3spider/services/_internal/shard_mix_fail_process.js delete mode 100644 server/web3spider/services/_internal/shard_mix_succ_process.js delete mode 100644 server/web3spider/services/event_center.js delete mode 100644 server/web3spider/services/event_process.js delete mode 100644 server/web3spider/services/exec_confirm_balance.js delete mode 100644 server/web3spider/services/exec_confirm_owner.js delete mode 100644 server/web3spider/services/exec_confirm_plugin.js delete mode 100644 server/web3spider/services/gameapi.js delete mode 100644 server/web3spider/services/present.js diff --git a/server/web3spider/services/_internal/activate1155nft_process.js b/server/web3spider/services/_internal/activate1155nft_process.js deleted file mode 100644 index d7dad32..0000000 --- a/server/web3spider/services/_internal/activate1155nft_process.js +++ /dev/null @@ -1,155 +0,0 @@ -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 BuyTransactionBatch( - address indexed buyer, - address[3] addresses, - uint256 price, - uint256[] ids, - uint256[] amounts -); -*/ - -class Activate1155Nft { - - async start(instance, conn, event) { - this.instance = instance; - this.conn = conn; - this.event = event; - - console.log('Activate1155Nft', event); - const blockNumber = event['blockNumber']; - const returnValues = event['returnValues']; - const transId = returnValues['nonce']; - const buyer = returnValues['buyer']; - 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('error transId:' + transId); - return; - } - const itemUniId = params[0]; - const subParams1 = bcutils.extractSubParams(params[1]); - var level = subParams1[0]; - let itemId = Math.max(1, subParams1[1]); - if (itemId == 0 || - itemId == 1) { - itemId = 130011; - } - - await this.mintNft( - transId, - bcutils.toNormalAddress(buyer), - blockNumber, - tokenId, - itemUniId, - itemId, - level); - j7event.emitEvent(C.CREATE_EXEC_CONFIRM_BALANCE_EVENT, - 'chipInstance', //this.instance['name'], - bcutils.toNormalAddress(buyer), - [tokenId], - 0); - await gameapi.confirmTransactionDb(this.instance, transId); - } - - async mintNft(transId, owner, blockNumber, tokenId, itemUniId, itemId, level) { - const itemMeta = metaFactory.getMetaByKey('Item', itemId); - if (!itemMeta) { - this.throwError('activate1155nft error transId:1'); - return; - } - const tokenType = itemMeta.getNftType(); - if (tokenType != bcutils.CHIP_TYPE) { - this.throwError('activate1155nft error transId:2'); - return; - } - await this.updateGameDbInfo(transId, itemUniId, itemId, tokenId, tokenType, level); - const {err, row} = await this.conn.ormSelectOne( - 't_nft1155', - [ - ['owner_address', bcutils.toNormalAddress(owner)], - ['token_id', tokenId], - ] - ); - if (err) { - log.error('processEvent:' + err); - throw 'processEvent:' + err; - } - if (!row) { - const nowTime = utils.getUtcTime(); - const fieldList = [ - ['token_id', tokenId], - ['item_id', itemId], - ['owner_address', bcutils.toNormalAddress(owner)], - ['createtime', nowTime], - ['modifytime', nowTime], - ]; - const {err} = await this.conn.insert( - 't_nft1155', - fieldList - ); - if (err) { - log.error('processEvent:' + err); - throw 'processEvent:' + err; - } - } - } - - async updateGameDbInfo(transId, itemUniId, itemId, tokenId, tokenType, level) { - const {err, conn} = await app.getDbConn('GameDb0'); - if (err) { - this.throwError('gamedb connection err:' + err); - return; - } - const nowTime = utils.getUtcTime(); - try { - try { - await conn.upsert( - 't_chip', - [ - ['token_id', tokenId], - ], - [ - ], - [ - ['token_id', tokenId], - ['item_id', itemId], - ['item_num', 1], - ['chip_grade', level], - ['createtime', nowTime], - ['modifytime', nowTime], - ] - ); - } finally{ - conn.release(); - } - } catch (e) { - this.throwError('updateGameDbInfo err:' + e); - return; - } - } - - throwError(err) { - const errMsg = 'processActivate1155NftEvent:' + - utils.jsonEncode(this.instance) + - ' err:' + err; - throw errMsg; - } - -} - -module.exports = Activate1155Nft; diff --git a/server/web3spider/services/_internal/activate721nft_process.js b/server/web3spider/services/_internal/activate721nft_process.js deleted file mode 100644 index e6222f9..0000000 --- a/server/web3spider/services/_internal/activate721nft_process.js +++ /dev/null @@ -1,169 +0,0 @@ -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; diff --git a/server/web3spider/services/_internal/activate_process.js b/server/web3spider/services/_internal/activate_process.js deleted file mode 100644 index e0b7d6d..0000000 --- a/server/web3spider/services/_internal/activate_process.js +++ /dev/null @@ -1,117 +0,0 @@ -const log = require('j7/log'); -const bcutils = require('j7/bcutils'); -const utils = require('j7/utils'); -const j7event = 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 { - j7event.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; diff --git a/server/web3spider/services/_internal/boxopened_process.js b/server/web3spider/services/_internal/boxopened_process.js deleted file mode 100644 index 1dc596d..0000000 --- a/server/web3spider/services/_internal/boxopened_process.js +++ /dev/null @@ -1,115 +0,0 @@ -const log = require('j7/log'); -const bcutils = require('j7/bcutils'); -const utils = require('j7/utils'); -const j7event = require('j7/event'); -const metaFactory = require('../../metadata/factory'); -const C = require('../../C'); - -class BoxOpenedProcess { - - async start(instance, 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( - conn, - bcutils.toNormalAddress(returnValues['to']), - blockNumber, - id, - type); - } - } - const {err} = await conn.insert( - 't_boxopened_event', - fieldList - ); - if (err) { - this.throwError(instance, err); - } - } - } - - async mintNft(conn, 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], - ]; - 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); - } - } - } - } - - throwError(instance, err) { - const errMsg = 'processBoxOpenedEvent:' + utils.jsonEncode(instance) + ' err:' + err; - throw errMsg; - } - -} - -module.exports = BoxOpenedProcess; diff --git a/server/web3spider/services/_internal/chip_plugin_process.js b/server/web3spider/services/_internal/chip_plugin_process.js deleted file mode 100644 index 79cac38..0000000 --- a/server/web3spider/services/_internal/chip_plugin_process.js +++ /dev/null @@ -1,52 +0,0 @@ -const log = require('j7/log'); -const app = require('j7/app'); -const bcutils = require('j7/bcutils'); -const utils = require('j7/utils'); -const event = require('j7/event'); -const metaFactory = require('../../metadata/factory'); -const C = require('../../C'); -const factory = require('../factory'); -const gameapi = require('../gameapi'); - -/* - event ChipPlugin( - address nft, - uint256 nftId, - address chip, - uint256[] ids - ); - */ - -class ChipPlugin { - - async start(instance, conn, event) { - console.log('chipSucc', event); - - this.instance = instance; - this.conn = conn; - this.event = event; - - const blockNumber = event['blockNumber']; - const returnValues = event['returnValues']; - const transId = returnValues['nonce']; - const nftAddress = returnValues['nft']; - const chipAddress = returnValues['chip']; - const tokenId = returnValues['nftId']; - - try { - const newRequest = new factory.create('ExecConfirmPlugin', null); - await newRequest.init('nftChipLockerInstance', nftAddress, chipAddress, tokenId); - } catch (e) { - this.throwError(e); - } - await gameapi.confirmTransactionDb(this.instance, transId); - } - - throwError(err) { - const errMsg = 'chipPluginEvent:' + utils.jsonEncode(this.instance) + ' err:' + err; - throw errMsg; - } - -} - -module.exports = ChipPlugin; diff --git a/server/web3spider/services/_internal/chip_unplug_process.js b/server/web3spider/services/_internal/chip_unplug_process.js deleted file mode 100644 index 6710cd1..0000000 --- a/server/web3spider/services/_internal/chip_unplug_process.js +++ /dev/null @@ -1,52 +0,0 @@ -const log = require('j7/log'); -const app = require('j7/app'); -const bcutils = require('j7/bcutils'); -const utils = require('j7/utils'); -const event = require('j7/event'); -const metaFactory = require('../../metadata/factory'); -const C = require('../../C'); -const factory = require('../factory'); -const gameapi = require('../gameapi'); - -/* - event ChipUnplug( - address nft, - uint256 nftId, - address chip, - uint256[] ids - ); -*/ - -class ChipUnplug { - - async start(instance, conn, event) { - console.log('evolveSucc', event); - - this.instance = instance; - this.conn = conn; - this.event = event; - - const blockNumber = event['blockNumber']; - const returnValues = event['returnValues']; - const transId = returnValues['nonce']; - const nftAddress = returnValues['nft']; - const chipAddress = returnValues['chip']; - const tokenId = returnValues['nftId']; - - try { - const newRequest = new factory.create('ExecConfirmPlugin', null); - await newRequest.init('nftChipLockerInstance', nftAddress, chipAddress, tokenId); - } catch (e) { - this.throwError(e); - } - await gameapi.confirmTransactionDb(this.instance, transId); - } - - throwError(err) { - const errMsg = 'chipUnplugEvent:' + utils.jsonEncode(this.instance) + ' err:' + err; - throw errMsg; - } - -} - -module.exports = ChipUnplug; diff --git a/server/web3spider/services/_internal/evolve_fail_process.js b/server/web3spider/services/_internal/evolve_fail_process.js deleted file mode 100644 index 7c70fe6..0000000 --- a/server/web3spider/services/_internal/evolve_fail_process.js +++ /dev/null @@ -1,35 +0,0 @@ -const log = require('j7/log'); -const app = require('j7/app'); -const bcutils = require('j7/bcutils'); -const utils = require('j7/utils'); -const event = require('j7/event'); -const metaFactory = require('../../metadata/factory'); -const C = require('../../C'); - -/* -// 失败的event -event TokenEvolveFail( - address indexed to, - bytes signature, - string reason, - bytes byteReason -); -*/ - -class EvolveFail { - - async start(instance, conn, event) { - console.log('EvolveFail', event); - this.instance = instance; - this.conn = conn; - this.event = event; - } - - throwError(err) { - const errMsg = 'evolveFailEvent:' + utils.jsonEncode(this.instance) + ' err:' + err; - throw errMsg; - } - -} - -module.exports = EvolveFail; diff --git a/server/web3spider/services/_internal/evolve_succ_process.js b/server/web3spider/services/_internal/evolve_succ_process.js deleted file mode 100644 index d20b69d..0000000 --- a/server/web3spider/services/_internal/evolve_succ_process.js +++ /dev/null @@ -1,110 +0,0 @@ -const log = require('j7/log'); -const app = require('j7/app'); -const bcutils = require('j7/bcutils'); -const utils = require('j7/utils'); -const event = require('j7/event'); -const metaFactory = require('../../metadata/factory'); -const C = require('../../C'); -const gameapi = require('../gameapi'); - -/* -// 成功的event -// logic/EvolveFactory -event TokenEvolved(address indexed owner, uint256[] tokenIds); -*/ - -class EvolveSucc { - - async start(instance, conn, event) { - console.log('evolveSucc', event); - - this.instance = instance; - this.conn = conn; - this.event = event; - - const blockNumber = event['blockNumber']; - const returnValues = event['returnValues']; - const transId = returnValues['nonce']; - const owner = returnValues['owner']; - if (returnValues['tokenIds'].length < 2) { - this.throwError('tokenIds length error:' + utils.jsonEncode(returnValues)); - return; - } - const tokenId = returnValues['tokenIds'][0]; - const tokenId1 = returnValues['tokenIds'][0]; - const tokenId2 = returnValues['tokenIds'][1]; - - const params = bcutils.extractParamsFromTransId(transId); - if (!params || params.length != 3) { - this.throwError('error transId:' + transId); - return; - } - const tokenType = params[0]; - - await this.notifyGameApi(transId, tokenId, tokenType, tokenId1, tokenId2); - await gameapi.confirmTransactionDb(this.instance, transId); - } - - async notifyGameApi(transId, tokenId, tokenType, tokenId1, tokenId2) { - console.log(transId, tokenId, tokenType); - let a = ''; - switch (Number(tokenType)) { - case bcutils.HERO_TYPE: - { - a = 'heroUpgradeQuality'; - } - break; - case bcutils.EQUIP_TYPE: - { - a = 'gunUpgradeQuality'; - } - break; - case bcutils.CHIP_TYPE: - { - a = 'chipUpgradeGrade'; - } - break; - default: - { - throw 'error token type'; - } - break; - } - while (true) { - try { - const {err, data} = await gameapi.callApi - ( - 'Callback', - a, - { - 'trans_id': transId, - 'token_id': tokenId, - 'token_id1': tokenId1, - 'token_id2': tokenId2, - } - ); - if (err) { - throw err; - } - console.log(data); - if (!data) { - throw 'data is empty'; - } - if (data['errcode'] == 0) { - return; - } - } catch (e) { - log.error(e); - } - await utils.sleep(3000 + utils.randRange(500, 1500)); - } - } - - throwError(err) { - const errMsg = 'evolveSuccEvent:' + utils.jsonEncode(this.instance) + ' err:' + err; - throw errMsg; - } - -} - -module.exports = EvolveSucc; diff --git a/server/web3spider/services/_internal/nft1155_transfer_process.js b/server/web3spider/services/_internal/nft1155_transfer_process.js deleted file mode 100644 index de7691b..0000000 --- a/server/web3spider/services/_internal/nft1155_transfer_process.js +++ /dev/null @@ -1,57 +0,0 @@ -const log = require('j7/log'); -const bcutils = require('j7/bcutils'); -const utils = require('j7/utils'); - -class Nft1155TransferProcess { - - async start(instance, conn, event) { - if ([ - 'TransferSingle', - 'TransferBatch' - ].indexOf(instance['eventName']) < 0) { - this.throwError(instance, 'error eventName'); - return; - } - const {err, row} = await conn.ormSelectOne( - 't_nft1155_transfer', - [ - ['txhash', event['transactionHash']], - ['log_index', event['logIndex']], - ] - ); - if (err) { - this.throwError(instance, err); - return; - } - if (!row) { - const returnValues = event['returnValues']; - const {err} = await conn.insert( - 't_nft1155_transfer', - [ - ['event_name', instance['eventName']], - ['instance_name', instance['name']], - ['txhash', event['transactionHash']], - ['block_number', event['blockNumber']], - ['log_index', event['logIndex']], - ['_from', bcutils.toNormalAddress(returnValues['from'])], - ['_to', bcutils.toNormalAddress(returnValues['to'])], - ['return_values', utils.jsonEncode(returnValues)], - ['raw_data', utils.jsonEncode(event)], - ['createtime', utils.getUtcTime()], - ['modifytime', utils.getUtcTime()], - ] - ); - if (err) { - this.throwError(instance, err); - } - } - }; - - throwError(instance, err) { - const errMsg = 'processNft1155TransferEvent:' + utils.jsonEncode(instance) + ' err:' + err; - throw errMsg; - } - -} - -module.exports = Nft1155TransferProcess; diff --git a/server/web3spider/services/_internal/nft_transfer_process.js b/server/web3spider/services/_internal/nft_transfer_process.js deleted file mode 100644 index 03ca1ee..0000000 --- a/server/web3spider/services/_internal/nft_transfer_process.js +++ /dev/null @@ -1,47 +0,0 @@ -const log = require('j7/log'); -const bcutils = require('j7/bcutils'); -const utils = require('j7/utils'); - -class NftTransferProcess { - - async start(instance, conn, event) { - const {err, row} = await conn.ormSelectOne( - 't_nft_transfer', - [ - ['txhash', event['transactionHash']], - ['log_index', event['logIndex']], - ] - ); - if (err) { - this.throwError(instance, err); - } - if (!row) { - const returnValues = event['returnValues']; - const {err} = await conn.insert( - 't_nft_transfer', - [ - ['token_id', returnValues['tokenId']], - ['txhash', event['transactionHash']], - ['block_number', event['blockNumber']], - ['log_index', event['logIndex']], - ['_from', bcutils.toNormalAddress(returnValues['from'])], - ['_to', bcutils.toNormalAddress(returnValues['to'])], - ['raw_data', utils.jsonEncode(event)], - ['createtime', utils.getUtcTime()], - ['modifytime', utils.getUtcTime()], - ] - ); - if (err) { - this.throwError(instance, err); - } - } - }; - - throwError(instance, err) { - const errMsg = 'processNftTransferEvent:' + utils.jsonEncode(instance) + ' err:' + err; - throw errMsg; - } - -} - -module.exports = NftTransferProcess; diff --git a/server/web3spider/services/_internal/shard_mint_fail_process.js b/server/web3spider/services/_internal/shard_mint_fail_process.js deleted file mode 100644 index 0e44893..0000000 --- a/server/web3spider/services/_internal/shard_mint_fail_process.js +++ /dev/null @@ -1,32 +0,0 @@ -const log = require('j7/log'); -const app = require('j7/app'); -const bcutils = require('j7/bcutils'); -const utils = require('j7/utils'); -const event = require('j7/event'); -const metaFactory = require('../../metadata/factory'); -const C = require('../../C'); - -/* -// 失败事件 -event TokenMintFail( - address indexed to, - bytes signature, - string reason, - bytes byteReason -); -*/ - -class ShardMintFail { - - async start(instance, conn, event) { - console.log('ShardMintFail', event); - } - - throwError(err) { - const errMsg = 'shardMintFailEvent:' + utils.jsonEncode(this.instance) + ' err:' + err; - throw errMsg; - } - -} - -module.exports = ShardMintFail; diff --git a/server/web3spider/services/_internal/shard_mint_succ_process.js b/server/web3spider/services/_internal/shard_mint_succ_process.js deleted file mode 100644 index 62e8286..0000000 --- a/server/web3spider/services/_internal/shard_mint_succ_process.js +++ /dev/null @@ -1,50 +0,0 @@ -const log = require('j7/log'); -const app = require('j7/app'); -const bcutils = require('j7/bcutils'); -const utils = require('j7/utils'); -const event = require('j7/event'); -const metaFactory = require('../../metadata/factory'); -const C = require('../../C'); -const gameapi = require('../gameapi'); - -/* -// 成功事件 -// logic/MinterFactory.sol -event TokenMintedBatch( - address contractAddress, - address indexed to, - uint256[] ids, - uint256[] amounts -); -*/ - -class ShardMintSucc { - - async start(instance, conn, event) { - console.log('ShardMintSucc', event); - - this.instance = instance; - this.conn = conn; - this.event = event; - - const blockNumber = event['blockNumber']; - const returnValues = event['returnValues']; - const transId = returnValues['nonce']; - - const params = bcutils.extractParamsFromTransId(transId); - if (!params || params.length != 3) { - this.throwError('error transId:' + transId); - return; - } - - await gameapi.confirmTransactionDb(this.instance, transId); - } - - throwError(err) { - const errMsg = 'shardMintEvent:' + utils.jsonEncode(this.instance) + ' err:' + err; - throw errMsg; - } - -} - -module.exports = ShardMintSucc; diff --git a/server/web3spider/services/_internal/shard_mix_fail_process.js b/server/web3spider/services/_internal/shard_mix_fail_process.js deleted file mode 100644 index c51a0e0..0000000 --- a/server/web3spider/services/_internal/shard_mix_fail_process.js +++ /dev/null @@ -1,32 +0,0 @@ -const log = require('j7/log'); -const app = require('j7/app'); -const bcutils = require('j7/bcutils'); -const utils = require('j7/utils'); -const event = require('j7/event'); -const metaFactory = require('../../metadata/factory'); -const C = require('../../C'); - -/* -// 失败事件 -event TokenMintFail( - address indexed to, - bytes signature, - string reason, - bytes byteReason -); -*/ - -class ShardMixFail { - - async start(instance, conn, event) { - console.log('ShardMixFail', event); - } - - throwError(err) { - const errMsg = 'shardMixFailEvent:' + utils.jsonEncode(this.instance) + ' err:' + err; - throw errMsg; - } - -} - -module.exports = ShardMixFail; diff --git a/server/web3spider/services/_internal/shard_mix_succ_process.js b/server/web3spider/services/_internal/shard_mix_succ_process.js deleted file mode 100644 index 453b30d..0000000 --- a/server/web3spider/services/_internal/shard_mix_succ_process.js +++ /dev/null @@ -1,180 +0,0 @@ -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'); - -/* -//成功事件 -// logic/MinterFactory.sol -event TokenMinted( - address contractAddress, - address to, - uint256 indexed tokenId - ); -*/ - -class ShardMixSucc { - - async start(instance, conn, event) { - console.log('ShardMixSucc', event); - - this.instance = instance; - this.conn = conn; - this.event = event; - - const blockNumber = event['blockNumber']; - const returnValues = event['returnValues']; - const transId = returnValues['nonce']; - const owner = returnValues['to']; - const tokenId = returnValues['tokenId']; - - const params = bcutils.extractParamsFromTransId(transId); - if (!params || params.length != 3) { - this.throwError('error transId:' + transId); - return; - } - const subParams1 = bcutils.extractSubParams(params[0]); - let itemId = subParams1[0]; - const tokenType = Number(subParams1[1]); - - if (!(tokenType == bcutils.HERO_TYPE || - tokenType == bcutils.EQUIP_TYPE - )) { - this.throwError('error tokenType:' + tokenType); - return; - } - if (itemId == 0) { - const heroId = metaFactory.callMetaStatic('Item', 'randHero', transId); - const gunId = metaFactory.callMetaStatic('Item', 'randGun', transId); - const heroMeta = metaFactory.getMetaByKey('Item', heroId); - const gunMeta = metaFactory.getMetaByKey('Item', gunId); - console.log(heroId, gunId); - switch (tokenType) { - case bcutils.HERO_TYPE: - { - if (!heroMeta) { - this.throwError('error randHero'); - } - itemId = heroMeta['id']; - } - break; - case bcutils.EQUIP_TYPE: - { - if (!gunMeta) { - this.throwError('error randEquip'); - } - itemId = gunMeta['id']; - } - break; - default: - { - this.throwError('error tokenType:' + tokenType); - return; - } - break; - } - } else { - const itemMeta = metaFactory.getMetaByKey('Item', itemId); - if (itemMeta.getNftType() != tokenType) { - this.throwError('error tokenType:' + tokenType); - return; - } - } - await this.mintNft(transId, owner, blockNumber, tokenId, tokenType, itemId); - j7event.emitEvent(C.CREATE_EXEC_CONFIRM_OWNER_EVENT, tokenId); - await gameapi.confirmTransactionDb(this.instance, transId); - } - - async mintNft(transId, owner, blockNumber, tokenId, tokenType, itemId) { - try { - const nowTime = utils.getUtcTime(); - { - const {err} = await this.conn.upsert( - 't_nft', - [ - ['token_id', tokenId], - ], - [ - ], - [ - ['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], - ] - ); - if (err) { - this.throwError('error upsert t_nft:' + err); - return; - } - } - const {err, conn} = await app.getDbConn('GameDb0'); - if (err) { - this.throwError('gamedb connection err:' + err); - return; - } - let tblName = ''; - let fields = []; - switch (tokenType) { - case bcutils.HERO_TYPE: - { - tblName = 't_hero'; - fields = [ - ['token_id', tokenId], - ['hero_id', itemId], - ['createtime', nowTime], - ['modifytime', nowTime], - ]; - } - break; - case bcutils.EQUIP_TYPE: - { - tblName = 't_gun'; - fields = [ - ['token_id', tokenId], - ['gun_id', itemId], - ['createtime', nowTime], - ['modifytime', nowTime], - ]; - } - break; - default: - { - } - break; - } - if (!tblName) { - this.throwError('error token_type2:' + tokenType); - return; - } - await conn.upsert( - tblName, - [ - ['token_id', tokenId], - ], - [ - ], - fields - ); - } catch (err) { - this.throwError('mintNft:' + err); - } - } - - throwError(err) { - const errMsg = 'shardMixEvent:' + utils.jsonEncode(this.instance) + ' err:' + err; - throw errMsg; - } - -} - -module.exports = ShardMixSucc; diff --git a/server/web3spider/services/event_center.js b/server/web3spider/services/event_center.js deleted file mode 100644 index 8599742..0000000 --- a/server/web3spider/services/event_center.js +++ /dev/null @@ -1,485 +0,0 @@ -const app = require('j7/app'); -const utils = require('j7/utils'); -const bcutils = require('j7/bcutils'); -const log = require('j7/log'); -const event = require('j7/event'); -const BaseService = require('./baseservice'); -const bc = require('../blockchain'); -const C = require('../C'); -const factory = require('./factory'); -const BoxOpenedProcess = require('./_internal/boxopened_process'); -const ActivateProcess = require('./_internal/activate_process'); -const NftTransferProcess = require('./_internal/nft_transfer_process'); -const Nft1155TransferProcess = require('./_internal/nft1155_transfer_process'); -const Activate721NftProcess = require('./_internal/activate721nft_process'); -const Activate1155NftProcess = require('./_internal/activate1155nft_process'); -const ShardMixSuccProcess = require('./_internal/shard_mix_succ_process'); -const ShardMixFailProcess = require('./_internal/shard_mix_fail_process'); -const ShardMintSuccProcess = require('./_internal/shard_mint_succ_process'); -const ShardMintFailProcess = require('./_internal/shard_mint_fail_process'); -const EvolveSuccProcess = require('./_internal/evolve_succ_process'); -const EvolveFailProcess = require('./_internal/evolve_fail_process'); -const ChipPluginProcess = require('./_internal/chip_plugin_process'); -const ChipUnplugProcess = require('./_internal/chip_unplug_process'); - -const LIMIT_COUNT = 100; - -class EventCenter extends BaseService { - - instances = [ - { - 'name': 'HEROInstance', - 'eventName': 'Transfer', - }, - { - 'name': 'WEAPONInstance', - 'eventName': 'Transfer', - }, - // { - // 'name': 'chipInstance', - // 'eventName': 'Transfer', - // }, - // { - // 'name': 'luckboxInstance', - // 'eventName': 'Transfer', - // } - ]; - - instances1155 = [ - { - 'name': 'chipInstance', - 'eventName': 'TransferSingle', - }, - { - 'name': 'chipInstance', - 'eventName': 'TransferBatch', - }, - { - 'name': 'shardInstance', - 'eventName': 'TransferSingle', - }, - { - 'name': 'shardInstance', - 'eventName': 'TransferBatch', - }, - ]; - - // boxInstance = { - // 'name': 'boxproxyInstance', - // 'eventName': 'BoxOpened', - // }; - - // activateInstance = { - // 'name': 'activateproxyInstance', - // 'eventName': 'LogNFTActivate', - // }; - - activate721NftInstance = { - 'name': 'UserMinterFactoryInstance', - 'eventName': 'TokenMinted', - }; - - activate1155NftInstance = { - 'name': 'nftMallInstance', - 'eventName': 'BuyTransactionBatch', - }; - - shardMixByUserFailInstance = { - 'name': 'userFactoryInstance', - 'eventName': 'TokenMintFail', - }; - - shardMixByUserSuccInstance = { - 'name': 'factoryInstance', - 'eventName': 'TokenMinted', - }; - - // shardMintByUserFailInstance = { - // 'name': 'userFactoryInstance', - // 'eventName': 'TokenMintFail', - // }; - - shardMintByUserSuccInstance = { - 'name': 'factoryInstance', - 'eventName': 'TokenMintedBatch', - }; - - evolveFailInstance = { - 'name': 'userProxyInstance', - 'eventName': 'TokenEvolveFail', - }; - - evolveSuccInstance = { - 'name': 'proxyInstance', - 'eventName': 'TokenEvolved', - }; - - chipPluginInstance = { - 'name': 'nftChipLockerInstance', - 'eventName': 'ChipPlugin', - }; - - chipUnplugInstance = { - 'name': 'nftChipLockerInstance', - 'eventName': 'ChipUnplug', - }; - - async init() { - this.lastIdx = 0; - this.pendingConfirmOwnerHash = {}; - this.pendingConfirmBalanceHash = {}; - - const {err, conn} = await app.getDbConn('MarketDb0'); - if (err) { - throw 'db error:' + err; - } - this.conn = conn; - - { - event.addListener(C.DESTORY_EXEC_CONFIRM_OWNER_EVENT, (tokenId) => { - log.info('destory confirm owner:' + tokenId); - try { - if (utils.getVal(this.pendingConfirmOwnerHash, tokenId)) { - delete this.pendingConfirmOwnerHash[tokenId]; - } - } catch(err) { - log.error('destory confirm owner:' + err); - } - }); - event.addListener(C.CREATE_EXEC_CONFIRM_OWNER_EVENT, (tokenId) => { - log.info('create confirm owner:' + tokenId); - try { - this.addConfirmOwnerRequest(tokenId); - } catch(err) { - log.error('create confirm owner:' + err); - } - }); - } - { - event.addListener - (C.DESTORY_EXEC_CONFIRM_BALANCE_EVENT, - (instanceName, address, tokenId) => { - log.info('destory confirm balance:' + instanceName + ' ' + address + tokenId); - try { - const key = this.genBalanceKey(instanceName, address, tokenId); - if (utils.getVal(this.pendingConfirmBalanceHash, key)) { - delete this.pendingConfirmBalanceHash[key]; - } - } catch(err) { - log.error('destory confirm balance:' + err); - } - }); - event.addListener - (C.CREATE_EXEC_CONFIRM_BALANCE_EVENT, - (instanceName, address, tokenIds, idx) => { - log.info('create confirm balance:' + instanceName + ' ' + address + utils.jsonEncode(tokenIds)); - try { - this.addConfirmBalanceRequest(instanceName, address, tokenIds, idx); - } catch(err) { - log.error('create confirm balance:' + err); - } - }); - } - - this.confirmOwner(); - this.confirmBalance(); - //this.addConfirmBalanceRequest('shardInstance', '0xffcf8fdee72ac11b5c542428b35eef5769c409f0', [1], 0); - await this.initEventProcess(); - } - - async initEventProcess() { - const initInstance = (instance) => { - instance['pullCount'] = 0; - instance['eventCount'] = 0; - instance['fromBlock'] = 0; - instance['toBlock'] = 0; - instance['currBlock'] = 0; - }; - const allInstances = []; - { - this.instances.forEach((item) => { - allInstances.push(item); - }); - // this.instances1155.forEach((item) => { - // allInstances.push(item); - // }); - //allInstances.push(this.boxInstance); - //allInstances.push(this.activateInstance); - allInstances.push(this.activate721NftInstance); - //allInstances.push(this.activate1155NftInstance); - //allInstances.push(this.shardMixByUserFailInstance); - //allInstances.push(this.shardMixByUserSuccInstance); - //allInstances.push(this.shardMintByUserFailInstance); - //allInstances.push(this.shardMintByUserSuccInstance); - //allInstances.push(this.evolveFailInstance); - //allInstances.push(this.evolveSuccInstance); - //allInstances.push(this.chipPluginInstance); - //allInstances.push(this.chipUnplugInstance); - console.log(allInstances); - { - const instanceHash = {}; - allInstances.forEach((item) => { - const key = item['name'] + '.' + item['eventName']; - if (utils.hasKey(instanceHash, key)) { - console.log(key); - throw '!!!!duplicate instance'; - } - instanceHash[key] = item; - }); - } - allInstances.forEach((item) => { - initInstance(item); - }); - - let count = 0; - const outputLog = async () => { - while (true) { - log.info(++count + '-------------------------------------------------------------'); - log.info('pendingConfirmOwnerHash.size:' + - Object.keys(this.pendingConfirmOwnerHash).length + - 'pendingConfirmBalanceHash.size:' + - Object.keys(this.pendingConfirmBalanceHash).length); - allInstances.forEach((item) => { - log.info(utils.jsonEncode(item)); - }); - await utils.sleep(1000 * 10); - } - }; - setTimeout(outputLog, 1000 * 3); - } - { - this.instances.forEach(async (item) => { - factory.create('EventProcess', null) - .init(this.conn, item, async (event) => { - await (new NftTransferProcess()).start(item, this.conn, event); - }); - }); - } - // { - // this.instances1155.forEach(async (item) => { - // factory.create('EventProcess', null) - // .init(this.conn, item, async (event) => { - // await (new Nft1155TransferProcess()).start(item, this.conn, event); - // }); - // }); - // } - /* - { - factory.create('EventProcess', null) - .init(this.conn, this.boxInstance, async (event) => { - await (new BoxOpenedProcess()).start(this.boxInstance, this.conn, event); - }); - } - { - factory.create('EventProcess', null) - .init(this.conn, this.activateInstance, async (event) => { - await (new ActivateProcess()).start(this.activateInstance, this.conn, event); - }); - }*/ - { - factory.create('EventProcess', null) - .init(this.conn, this.activate721NftInstance, async (event) => { - await (new Activate721NftProcess()).start(this.activate721NftInstance, this.conn, event); - }); - } - // { - // factory.create('EventProcess', null) - // .init(this.conn, this.activate1155NftInstance, async (event) => { - // await (new Activate1155NftProcess()).start(this.activate1155NftInstance, this.conn, event); - // }); - // } - // { - // factory.create('EventProcess', null) - // .init(this.conn, this.shardMixByUserFailInstance, async (event) => { - // await (new ShardMixFailProcess()).start(this.shardMixByUserFailInstance, this.conn, event); - // }); - // } - // { - // factory.create('EventProcess', null) - // .init(this.conn, this.shardMixByUserSuccInstance, async (event) => { - // await (new ShardMixSuccProcess()).start(this.shardMixByUserSuccInstance, this.conn, event); - // }); - // } - { - /*factory.create('EventProcess', null) - .init(this.conn, this.shardMintByUserFailInstance, async (event) => { - await (new ShardMintFailProcess()).start(this.shardMintByUserFailInstance, this.conn, event); - }); - */ - } - // { - // factory.create('EventProcess', null) - // .init(this.conn, this.shardMintByUserSuccInstance, async (event) => { - // await (new ShardMintSuccProcess()).start(this.shardMintByUserSuccInstance, this.conn, event); - // }); - // } - // { - // factory.create('EventProcess', null) - // .init(this.conn, this.evolveFailInstance, async (event) => { - // await (new EvolveFailProcess()).start(this.evolveFailInstance, this.conn, event); - // }); - // } - // { - // factory.create('EventProcess', null) - // .init(this.conn, this.evolveSuccInstance, async (event) => { - // await (new EvolveSuccProcess()).start(this.evolveSuccInstance, this.conn, event); - // }); - // } - // { - // factory.create('EventProcess', null) - // .init(this.conn, this.chipPluginInstance, async (event) => { - // await (new ChipPluginProcess()).start(this.chipPluginInstance, this.conn, event); - // }); - // } - // { - // factory.create('EventProcess', null) - // .init(this.conn, this.chipUnplugInstance, async (event) => { - // await (new ChipUnplugProcess()).start(this.chipUnplugInstance, this.conn, event); - // }); - // } - } - - async addConfirmOwnerRequest(tokenId) { - const pendingRequest = utils.getVal(this.pendingConfirmOwnerHash, tokenId); - if (!pendingRequest) { - const newRequest = new factory.create('ExecConfirmOwner', null); - this.pendingConfirmOwnerHash[tokenId] = newRequest; - newRequest.init(tokenId); - return; - } else { - pendingRequest.addTryCount(); - } - } - - async addConfirmBalanceRequest(instanceName, address, tokenIds, idx) { - const syncTokenIds = []; - tokenIds.forEach( - (element) => { - const tokenId = element; - const key = this.genBalanceKey(instanceName, address, tokenId); - const pendingRequest = utils.getVal(this.pendingConfirmBalanceHash, key); - if (pendingRequest) { - pendingRequest.addTryCount(tokenId); - } else { - syncTokenIds.push(tokenId); - } - } - ); - if (syncTokenIds.length > 0) { - const newRequest = new factory.create('ExecConfirmBalance', null); - syncTokenIds.forEach( - (element) => { - const tokenId = element; - const key = this.genBalanceKey(instanceName, address, tokenId); - this.pendingConfirmBalanceHash[key] = newRequest; - } - ); - newRequest.init(instanceName, address, syncTokenIds, idx); - } - } - - async confirmOwner() { - let maxIdx = 0; - while (true) { - { - const {err, rows} = await this.conn.execQuery( - 'SELECT * FROM t_nft_transfer WHERE `idx` > ? AND ' + - '`owner_confirmed` = 0 LIMIT ' + LIMIT_COUNT, - [this.lastIdx]); - if (!err) { - for (let i in rows) { - const row = rows[i]; - this.addConfirmOwnerRequest(row['token_id']); - if (row['idx'] > this.lastIdx) { - this.lastIdx = row['idx']; - } - } - if (rows.length < 1 && this.lastIdx + LIMIT_COUNT < maxIdx) { - this.lastIdx += LIMIT_COUNT; - continue; - } - } - } - { - const {err, row} = await this.conn.execQueryOne( - 'SELECT max(idx) max_idx FROM t_nft_transfer', []); - if (!err && row['max_idx'] != null) { - maxIdx = row['max_idx']; - } - } - while (Object.keys(this.pendingConfirmOwnerHash).length > 50) { - await utils.sleep(1000 + utils.randRange(500, 1500)); - } - await utils.sleep(2000 + utils.randRange(500, 1500)); - } - } - - async confirmBalance() { - let maxIdx = 0; - let lastIdx = 0; - while (true) { - { - const {err, rows} = await this.conn.execQuery( - 'SELECT * FROM t_nft1155_transfer WHERE `idx` > ? AND ' + - '`owner_confirmed` = 0 LIMIT ' + LIMIT_COUNT, - [lastIdx]); - if (!err) { - for (let i in rows) { - const row = rows[i]; - const instanceName = row['instance_name']; - const tokenIds = this.extractTokenIds(row); - console.log('confirmBalance', instanceName, tokenIds, row); - if (bcutils.isValidAddress(row['_from'])) { - this.addConfirmBalanceRequest(instanceName, row['_from'], tokenIds, row['idx']); - } - if (bcutils.isValidAddress(row['_to'])) { - this.addConfirmBalanceRequest(instanceName, row['_to'], tokenIds, row['idx']); - } - if (row['idx'] > lastIdx) { - lastIdx = row['idx']; - } - } - if (rows.length < 1 && lastIdx + LIMIT_COUNT < maxIdx) { - lastIdx += LIMIT_COUNT; - continue; - } - } - } - { - const {err, row} = await this.conn.execQueryOne( - 'SELECT max(idx) max_idx FROM t_nft1155_transfer', []); - if (!err && row['max_idx'] != null) { - maxIdx = row['max_idx']; - } - } - while (Object.keys(this.pendingConfirmBalanceHash).length > 50) { - await utils.sleep(1000 + utils.randRange(500, 1500)); - } - await utils.sleep(2000 + utils.randRange(500, 1500)); - } - } - - extractTokenIds(row) { - let tokenIds = []; - try { - const returnValues = utils.jsonDecode(row['return_values']); - const eventName = row['event_name']; - console.log(returnValues, eventName); - if (eventName == 'TransferSingle') { - tokenIds.push(returnValues['id']); - } else if (eventName == 'TransferBatch') { - tokenIds = returnValues['ids']; - } - } catch (e) { - - } - return tokenIds; - } - - genBalanceKey(instanceName, address, tokenId) { - return instanceName + '!' + address.toString() + '!' + tokenId; - } - -} - -module.exports = EventCenter; diff --git a/server/web3spider/services/event_process.js b/server/web3spider/services/event_process.js deleted file mode 100644 index f23d46e..0000000 --- a/server/web3spider/services/event_process.js +++ /dev/null @@ -1,220 +0,0 @@ -const app = require('j7/app'); -const utils = require('j7/utils'); -const bcutils = require('j7/bcutils'); -const log = require('j7/log'); -const bc = require('../blockchain'); -const BaseService = require('./baseservice'); - -class EventProcess extends BaseService { - - async init(conn, instance, cb) { - this.conn = conn; - this.instance = instance; - this.cb = cb; - this.lastBlockNumber = 0; - await this.start(); - } - - async start() { - while (true) { - await this.pullEvent(); - await utils.sleep(8000 + utils.randRange(500, 1500)); - } - } - - async pullEvent() { - const logClass = this.getInstanceName() + ' pullEvent:'; - while (true) { - await bc.lockQuery(); - try { - const fromBlock = await this.getFromBlock(); - const toBlock = await this.calcToBlock(fromBlock); - if (toBlock > fromBlock) { - const events = await bc[this.getInstanceName()].getPastEvents( - this.instance['eventName'], - { - fromBlock: fromBlock, - toBlock: toBlock, - }, - ); - this.instance['fromBlock'] = fromBlock; - this.instance['toBlock'] = toBlock; - this.instance['currBlock'] = bc.getCurrBlockNumber(); - this.instance['eventCount'] += events.length; - if (events.length > 0) { - console.log(events); - await this.updateFirstBlockNumber(fromBlock); - } - await this.processEvents(events, toBlock); - await this.saveLastBlockNumber(toBlock); - } - ++this.instance['pullCount']; - return; - } catch (err) { - log.error(logClass + err); - await utils.sleep(1000 + utils.randRange(10, 2000)); - } finally { - await bc.unlockQuery(); - } - } - } - - getInstanceName() { - return this.instance['name']; - } - - async processEvents(events, toBlock) { - for (let i in events) { - while (true) { - try { - await this.cb(events[i]); - await this.saveToDb(events[i]); - break; - } catch (err) { - log.error(err); - } - await utils.sleep(8000 + utils.randRange(500, 1500)); - } - } - } - - async getFromBlock() { - const logClass = this.getInstanceName() + ' getFromBlock:'; - const firstBlockNumber = await bc.getFirstBlockNumber(); - while (this.lastBlockNumber < 1) { - try { - const {err, row} = await this.conn.ormSelectOne( - 't_parameter', - [ - ['name', this.getBlockNumberDbName()] - ] - ); - if (!err) { - if (row) { - this.lastBlockNumber = Number(row['value']); - } else { - this.lastBlockNumber = firstBlockNumber; - } - } - console.log(logClass, this.lastBlockNumber, bc.getCurrBlockNumber()); - while (this.lastBlockNumber + 8 > bc.getCurrBlockNumber()) { - await utils.sleep(1000 + utils.randRange(500, 1500)); - } - continue; - } catch (err) { - log.log(err); - } - await utils.sleep(5000 + utils.randRange(500, 1500)); - } - return this.lastBlockNumber + 1; - } - - async calcToBlock(fromBlock) { - const currBlockNumber = bc.getCurrBlockNumber(); - const distanceBlock = currBlockNumber - fromBlock - 8; - const batchBlockNum = 888; - if (distanceBlock > 0) { - if (distanceBlock > batchBlockNum) { - return fromBlock + batchBlockNum; - } else { - return fromBlock + distanceBlock; - } - } - return fromBlock; - } - - async saveLastBlockNumber(blockNumber) { - const logClass = 'event_process.saveLastBlockNumber'; - while (true) { - const {err} = await this.conn.upsert( - 't_parameter', - [ - ['name', this.getBlockNumberDbName()] - ], - [ - ['value', blockNumber], - ], - [ - ['name', this.getBlockNumberDbName()], - ['value', blockNumber], - ] - ); - if (!err) { - break; - } - log.error(logClass + err); - await utils.sleep(5000 + utils.randRange(500, 1500)); - } - this.lastBlockNumber = blockNumber; - } - - async updateFirstBlockNumber(blockNumber) { - const logClass = 'event_process.updateFirstBlockNumber'; - while (true) { - const {err} = await this.conn.upsert( - 't_parameter', - [ - ['name', this.getFirstBlockNumberDbName()] - ], - [ - ['!value', () => { - return 'LEAST(CONVERT(value, unsigned), ' + blockNumber + ')'; - }], - ], - [ - ['name', this.getFirstBlockNumberDbName()], - ['value', blockNumber], - ] - ); - if (!err) { - break; - } - log.error(logClass + err); - await utils.sleep(5000 + utils.randRange(500, 1500)); - } - } - - async saveToDb(event) { - const logClass = 'event_process.saveToDb'; - while (true) { - const nowTime = utils.getUtcTime(); - const returnValues = event['returnValues']; - const {err} = await this.conn.upsert( - 't_blockchain_event', - [ - ['txhash', event['transactionHash']], - ['log_index', event['logIndex']], - ], - [ - ], - [ - ['instance_name', this.instance['name']], - ['event_name', this.instance['eventName']], - ['txhash', event['transactionHash']], - ['log_index', event['logIndex']], - ['block_number', event['blockNumber']], - ['raw_data', utils.jsonEncode(event)], - ['return_values', utils.jsonEncode(returnValues)], - ['createtime', utils.getUtcTime()], - ['modifytime', utils.getUtcTime()], - ] - ); - if (!err) { - break; - } - log.error(logClass + err); - await utils.sleep(5000 + utils.randRange(500, 1500)); - } - } - - getBlockNumberDbName() { - return this.instance['name'] + '.' + this.instance['eventName'] + '.last_block_number'; - } - - getFirstBlockNumberDbName() { - return this.instance['name'] + '.' + this.instance['eventName'] + '.first_block_number'; - } - -} - -module.exports = EventProcess; diff --git a/server/web3spider/services/exec_confirm_balance.js b/server/web3spider/services/exec_confirm_balance.js deleted file mode 100644 index a8894de..0000000 --- a/server/web3spider/services/exec_confirm_balance.js +++ /dev/null @@ -1,163 +0,0 @@ -const bcutils = require('j7/bcutils'); -const utils = require('j7/utils'); -const app = require('j7/app'); -const log = require('j7/log'); -const event = require('j7/event'); -const bc = require('../blockchain'); -const C = require('../C'); - -class ExecConfirmBalance { - - async init(instanceName, address, tokenIds, idx) { - try { - this.instanceName = instanceName; - this.address = address; - this.tryCount = 1; - this.tokenIds = tokenIds; - this.idx = idx; - await this.doConfirm(); - } catch (err) { - log.error('ExecConfirmBalance:' + this.tokenIds.toString() + ' err:' + err); - } finally { - this.destory(); - } - } - - destory() { - this.tokenIds.forEach - ( - (element) => { - const tokenId = element; - event.emitEvent(C.DESTORY_EXEC_CONFIRM_BALANCE_EVENT, this.instanceName, this.address, tokenId); - } - ); - } - - addTryCount(tokenId) { - ++this.tryCount; - } - - async doConfirm() { - while (true) { - await bc.mustBeActive(); - const oldTryCount = this.tryCount; - const oldBlockNumber = bc.getCurrBlockNumber(); - let oldBalances = await this.getBalances(); - while (oldBlockNumber + 8 > bc.getCurrBlockNumber()) { - await utils.sleep(1000 + utils.randRange(0, 500)); - } - - await bc.mustBeActive(); - const newBlockNumber = bc.getCurrBlockNumber(); - let newBalances = await this.getBalances(); - - if (this.isSameBlances(oldBalances, newBalances)) { - const ok = await this.updateConfirmed(newBalances, oldBlockNumber); - if (ok && oldTryCount == this.tryCount) { - break; - } - } - await utils.sleep(1000 + utils.randRange(500, 1500)); - } - } - - async getBalances() { - while (true) { - await bc.lockQuery(); - try { - const address = []; - this.tokenIds.forEach( - (element) => { - address.push(this.address); - } - ); - let banlances = await bc[this.instanceName].methods.balanceOfBatch - ( - address, - this.tokenIds - ).call(); - if (banlances.length == banlances.length) { - return banlances; - } - } catch (err) { - log.error(err); - } finally { - await bc.unlockQuery(); - } - await utils.sleep(5000 + utils.randRange(1500, 2500)); - } - } - - isSameBlances(oldBalances, newBalances) { - if (oldBalances.length != newBalances.length) { - return false; - } - for (let i = 0; i < oldBalances.length; ++i) { - if (oldBalances[i] != newBalances[i]) { - return false; - } - } - return true; - } - - async updateConfirmed(newBalances, blockNumber) { - const {err, conn} = await app.getDbConn('MarketDb0'); - if (err) { - log.error('updateConfirmed:' + this.tokenId + ' err:' + err); - return false; - } - try { - const nowTime = utils.getUtcTime(); - for (let i = 0; i < this.tokenIds.length; ++i) { - const tokenId = this.tokenIds[i]; - const balance = newBalances[i]; - { - const {err} = await conn.upsert( - 't_nft1155', - [ - ['owner_address', this.address], - ['token_id', tokenId] - ], - [ - ['balance', balance], - ['!confirm_count', () => { - return 'confirm_count + 1'; - }], - ['confirm_block_number', blockNumber] - ], - [ - ['owner_address', this.address], - ['token_id', tokenId], - ['balance', balance], - ['confirm_count', 1], - ['confirm_block_number', blockNumber], - ['createtime', nowTime], - ['modifytime', nowTime], - ]); - if (err) { - log.error('updateConfirmed:' + tokenId + ' err:' + err); - return false; - } - } - } - { - const {err} = await conn.execScript( - 'UPDATE t_nft1155_transfer SET `owner_confirmed`=1 ' + - 'WHERE idx=?', - [ - this.idx - ]); - if (err) { - log.error('updateConfirmed balance' + ' err:' + err); - return false; - } - } - } finally { - conn.release(); - } - return true; - } - -} - -module.exports = ExecConfirmBalance; diff --git a/server/web3spider/services/exec_confirm_owner.js b/server/web3spider/services/exec_confirm_owner.js deleted file mode 100644 index b65ce8c..0000000 --- a/server/web3spider/services/exec_confirm_owner.js +++ /dev/null @@ -1,173 +0,0 @@ -const bcutils = require('j7/bcutils'); -const utils = require('j7/utils'); -const app = require('j7/app'); -const log = require('j7/log'); -const event = require('j7/event'); -const bc = require('../blockchain'); -const C = require('../C'); - -class ExecConfirmOwner { - - async init(tokenId) { - try { - this.tryCount = 1; - this.tokenId = tokenId; - this.nftDb = await this.getNftDb(tokenId); - if (!this.nftDb) { - return; - } - this.addTryCount(); - await this.doConfirm(); - } catch (err) { - log.error('ExecConfirmOwner:' + this.tokenId + ' err:' + err); - } finally { - this.destory(); - } - } - - destory() { - event.emitEvent(C.DESTORY_EXEC_CONFIRM_OWNER_EVENT, this.tokenId); - } - - addTryCount() { - ++this.tryCount; - } - - async doConfirm() { - while (true) { - await bc.mustBeActive(); - const oldTryCount = this.tryCount; - const oldBlockNumber = bc.getCurrBlockNumber(); - let oldOwner = await this.getOwner(); - while (oldBlockNumber + 8 > bc.getCurrBlockNumber()) { - await utils.sleep(1000 + utils.randRange(0, 500)); - } - - await bc.mustBeActive(); - const newBlockNumber = bc.getCurrBlockNumber(); - let newOwner = await this.getOwner(); - - if (oldOwner == newOwner) { - const ok = await this.updateConfirmed(newOwner, oldBlockNumber); - if (ok && oldTryCount == this.tryCount) { - break; - } - } - await utils.sleep(1000 + utils.randRange(500, 1500)); - } - } - - getInstanceName() { - switch (this.nftDb['token_type']) { - case bcutils.HERO_TYPE: - { - return 'heroInstance'; - } - break; - case bcutils.EQUIP_TYPE: - { - return 'equipInstance'; - } - break; - case bcutils.CHIP_TYPE: - { - return 'chipInstance'; - } - break; - case bcutils.BLIND_BOX_TYPE: - { - return 'luckboxInstance'; - } - break; - } - } - - async getNftDb(tokenId) { - const {err, conn} = await app.getDbConn('MarketDb0'); - if (err) { - return null; - } - try { - const {err, row} = await conn.ormSelectOne( - 't_nft', - [ - ['token_id', tokenId] - ]); - return row; - } finally { - conn.release(); - } - } - - async getOwner() { - const instanceName = this.getInstanceName(); - log.info('getOwner:' + instanceName + - ' tryCount:' + this.tryCount + - ' token_id:' + this.tokenId); - while (true) { - await bc.lockQuery(); - try { - let owner = await bc[instanceName].methods.ownerOf(this.tokenId).call(); - return owner; - } catch (err) { - const reason = utils.getVal(err, 'reason'); - if (reason == 'ERC721: owner query for nonexistent token') { - return ''; - } - if (err == 'Error: Returned error: VM Exception while processing transaction: revert ERC721: owner query for nonexistent token' || - err == 'Error: Returned error: execution reverted: ERC721: owner query for nonexistent token') { - return ''; - } - log.error(err); - } finally { - await bc.unlockQuery(); - } - await utils.sleep(5000 + utils.randRange(1500, 2500)); - } - } - - async updateConfirmed(newOwner, blockNumber) { - const {err, conn} = await app.getDbConn('MarketDb0'); - if (err) { - log.error('updateConfirmed:' + this.tokenId + ' err:' + err); - return false; - } - try { - { - const {err} = await conn.update( - 't_nft', - [ - ['token_id', this.tokenId] - ], - [ - ['owner_address', bcutils.toNormalAddress(newOwner)], - ['confirm_count', this.nftDb['confirm_count'] + 1], - ['confirm_block_number', blockNumber] - ]); - if (err) { - log.error('updateConfirmed:' + this.tokenId + ' err:' + err); - return false; - } - } - { - const {err} = await conn.execScript( - 'UPDATE t_nft_transfer SET `owner_confirmed`=1 ' + - 'WHERE token_id=? AND block_number < ?', - [ - this.tokenId, - blockNumber - ]); - if (err) { - log.error('updateConfirmed:' + this.tokenId + ' err:' + err); - return false; - } - } - } finally { - conn.release(); - } - return true; - } - -} - -module.exports = ExecConfirmOwner; diff --git a/server/web3spider/services/exec_confirm_plugin.js b/server/web3spider/services/exec_confirm_plugin.js deleted file mode 100644 index 9d58e54..0000000 --- a/server/web3spider/services/exec_confirm_plugin.js +++ /dev/null @@ -1,147 +0,0 @@ -const bcutils = require('j7/bcutils'); -const utils = require('j7/utils'); -const app = require('j7/app'); -const log = require('j7/log'); -const event = require('j7/event'); -const bc = require('../blockchain'); -const C = require('../C'); - -/* - function pluginedChips(address nft, address chip, uint256 tokenId) - external - view - returns(uint256[] memory) - { - return chipPlugined[nft][chip][tokenId].values(); - } - */ - -class ExecConfirmPlugin { - - async init(instanceName, nftAddress, chipAddress, tokenId) { - try { - this.instanceName = instanceName; - this.nftAddress = nftAddress; - this.chipAddress = chipAddress; - this.tokenId = tokenId; - await this.doConfirm(); - } catch (err) { - log.error('ExecConfirmPlugin:' + this.tokenId() + ' err:' + err); - } finally { - this.destory(); - } - } - - destory() { - } - - async doConfirm() { - while (true) { - await bc.mustBeActive(); - const oldBlockNumber = bc.getCurrBlockNumber(); - let oldChips = await this.getChips(); - while (oldBlockNumber + 8 > bc.getCurrBlockNumber()) { - await utils.sleep(1000 + utils.randRange(0, 500)); - } - - await bc.mustBeActive(); - const newBlockNumber = bc.getCurrBlockNumber(); - let newChips = await this.getChips(); - - if (this.isSameChips(oldChips, newChips)) { - const ok = await this.updateConfirmed(newChips, oldBlockNumber); - if (ok) { - break; - } - } - await utils.sleep(1000 + utils.randRange(500, 1500)); - } - } - - async getChips() { - while (true) { - await bc.lockQuery(); - try { - let chips = await bc[this.instanceName].methods.pluginedChips - ( - this.nftAddress, - this.chipAddress, - this.tokenId - ).call(); - return chips; - } catch (err) { - log.error(err); - } finally { - await bc.unlockQuery(); - } - await utils.sleep(5000 + utils.randRange(1500, 2500)); - } - } - - isSameChips(oldChips, newChips) { - if (oldChips.length != newChips.length) { - return false; - } - for (let i = 0; i < oldChips.length; ++i) { - if (oldChips[i] != newChips[i]) { - return false; - } - } - return true; - } - - async updateConfirmed(newChips, blockNumber) { - const {err, conn} = await app.getDbConn('MarketDb0'); - if (err) { - log.error('updateConfirmedPlugin:' + this.tokenId + ' err:' + err); - return false; - } - try { - const nowTime = utils.getUtcTime(); - { - const chipFields = [ - ['chip1', ''], - ['chip2', ''], - ['chip3', ''], - ['chip4', ''], - ]; - for (let i = 0; i < newChips.length; ++i) { - if (newChips[i] != 0) { - chipFields[i][1] = newChips[i]; - } - } - const {err} = await conn.upsert( - 't_chip_plugin', - [ - ['token_id', this.tokenId] - ], - [ - ['modifytime', nowTime], - ['!confirm_count', () => { - return 'confirm_count + 1'; - }], - ['confirm_block_number', blockNumber], - ...chipFields - ], - [ - ['token_id', this.tokenId], - ['confirm_count', 1], - ['confirm_block_number', blockNumber], - ['createtime', nowTime], - ['modifytime', nowTime], - ...chipFields - ]); - if (err) { - log.error('updateConfirmed:' + this.tokenId + ' err:' + err); - return false; - } - } - } finally { - conn.release(); - } - return true; - } - -} - -module.exports = ExecConfirmPlugin; diff --git a/server/web3spider/services/factory.js b/server/web3spider/services/factory.js index 5497dad..5a9dbb0 100644 --- a/server/web3spider/services/factory.js +++ b/server/web3spider/services/factory.js @@ -12,14 +12,6 @@ function add(clsNames, modName) { } function init() { - add(['Present'], 'present'); - add(['EventCenter'], 'event_center'); - add(['ExecConfirmOwner'], 'exec_confirm_owner'); - add(['ExecConfirmBalance'], 'exec_confirm_balance'); - add(['ExecConfirmPlugin'], 'exec_confirm_plugin'); - add(['EventProcess'], 'event_process'); - create('Present', null).init(); - create('EventCenter', null).init(); } function create(name, session) { diff --git a/server/web3spider/services/gameapi.js b/server/web3spider/services/gameapi.js deleted file mode 100644 index 0a5d33f..0000000 --- a/server/web3spider/services/gameapi.js +++ /dev/null @@ -1,66 +0,0 @@ -const app = require('j7/app'); -const utils = require('j7/utils'); -const bcutils = require('j7/bcutils'); -const log = require('j7/log'); -const event = require('j7/event'); -const http = require('j7/http'); -const BaseService = require('./baseservice'); -const bc = require('../blockchain'); -const metaFactory = require('../metadata/factory'); -const C = require('../C'); -const factory = require('./factory'); - -function throwInstanceError(instance, name, err) { - const errMsg = name + - utils.jsonEncode(instance) + - ' err:' + err; - throw errMsg; -} - -async function callApi(c, a, params) { - params['c'] = c; - params['a'] = a; - const url = metaFactory.getMetaByKey('Config', 0)['game2006api_url']; - return await http.get(url, params); -} - -async function confirmTransactionDb(instance, transId) { - const {err, conn} = await app.getDbConn('GameDb0'); - if (err) { - throwInstanceError(instance, 'confirmTransactionDb:', 'gamedb connection err:' + err); - return; - } - const nowTime = utils.getUtcTime(); - try { - try { - await conn.update( - 't_transaction_prefee', - [ - ['trans_id', transId], - ], - [ - ['done', 1], - ['modifytime', nowTime], - ] - ); - await conn.update( - 't_transaction', - [ - ['trans_id', transId], - ], - [ - ['status', 3], - ['modifytime', nowTime], - ] - ); - } catch (e) { - throwInstanceError(instance, 'confirmTransactionDb:', e); - return; - } - } finally { - conn.release(); - } -} - -exports.callApi = callApi; -exports.confirmTransactionDb = confirmTransactionDb; diff --git a/server/web3spider/services/present.js b/server/web3spider/services/present.js deleted file mode 100644 index 0c526d9..0000000 --- a/server/web3spider/services/present.js +++ /dev/null @@ -1,159 +0,0 @@ -const assert = require('assert'); -const app = require('j7/app'); -const utils = require('j7/utils'); -const bcutils = require('j7/bcutils'); -const log = require('j7/log'); -const BaseService = require('./baseservice'); -const metaFactory = require('../metadata/factory'); - -class Present extends BaseService { - - async init() { - this.gameId = 2006; - this.nowTime = utils.getUtcTime(); - this.tokenTime = this.nowTime; - this.idx = 0; - this.idSection = {}; - - { - const {err, conn} = await app.getDbConn('MarketDb0'); - if (err) { - throw 'db error:' + err; - } - this.conn = conn; - } - { - const {err, row} = await this.conn.execQueryOne( - 'SELECT max(idx) max_idx FROM t_mint', []); - if (!err && row['max_idx'] != null) { - this.idx = row['max_idx']; - } - log.info('idx:' + this.idx); - } - - const presentList = metaFactory.getMetaByKey('PresentList', '0')['list']; - const idSection = metaFactory.getMetaByKey('PresentList', '0')['id_section']; - Object.keys(idSection).forEach((item) => { - const startId = idSection[item][0]; - const endId = idSection[item][1]; - assert(startId > 0); - assert(endId > 0); - assert(startId < endId); - this.idSection[item] = { - 'startId': startId, - 'endId': endId, - 'currId': startId - }; - }); - - log.info('load present_list.json list ' + utils.jsonEncode(presentList)); - log.info('load present_list.json id_section ' + utils.jsonEncode(this.idSection)); - for (let i in presentList) { - const name = presentList[i]; - const list = []; - metaFactory.traverseMetaList('Present' + name, (item) => { - list.push(item); - return true; - }); - await this.processList(name, list); - } - } - - async processList(name, list) { - for (let i in list){ - const presentMeta = list[i]; - for (let ii = 0; ii < presentMeta.getCount(); ++ii) { - const randItem = presentMeta.randItem(); - if (randItem) { - const itemId = randItem['itemId']; - const tokenType = randItem['tokenType']; - await this.processOne(name, - presentMeta, - itemId, - tokenType, - ii + 1, - ); - } - } - } - } - - async processOne(name, presentMeta, itemId, tokenType, seqId) { - const uniKey = this.genUniKey(name, presentMeta['id'], seqId); - const sented = await this.isSented(uniKey); - - if (!sented) { - const tokenId = this.genTokenId(name); - const fieldsList = [ - ['bc_mint_tokenid', tokenId], - ['unikey', uniKey], - ['account', bcutils.toNormalAddress(presentMeta['account'])], - ['game_id', this.gameId], - - ['bc_mint_itemid', itemId], - ['bc_mint_token_type', tokenType], - ['bc_mint_tags', presentMeta.getTags()], - - ['createtime', this.nowTime], - ['modifytime', this.nowTime] - ]; - - log.info('insert t_mint ' + utils.jsonEncode(fieldsList)); - const {err} = await this.conn.insert( - 't_mint', - fieldsList - ); - } - } - - async isSented(uniKey) { - const {err, row} = await this.conn.ormSelectOne( - 't_mint', - [ - ['unikey', uniKey], - ] - ); - if (err) { - throw err; - } - return row ? true : false; - } - - genTokenId(batchName) { - let tokenId = 0; - if (utils.getVal(this.idSection, 'id_' + batchName)) { - const section = this.idSection['id_' + batchName]; - assert(section['currId'] < section['endId']); - tokenId = section['currId']++; - } else { - tokenId = bcutils.genTokenId( - this.gameId, - bcutils.BC_FUNC_GUILD, - this.nowTime, - 1, - this.genIdx() - ); - } - return tokenId; - } - - genIdx() { - let newIdx = this.idx; - if (this.idx < bcutils.BC_MAX_TOKEN_IDX) { - newIdx = this.idx; - ++this.idx; - } else { - this.idx = 0; - newIdx = this.idx; - ++this.tokenTime; - } - return newIdx; - } - - genUniKey(batchId, rowId, seqId) { - return ''.concat(batchId, '_', rowId, '_', seqId); - } - -} - -module.exports = Present;