This commit is contained in:
aozhiwei 2022-04-22 14:05:18 +08:00
parent a773cdbce0
commit 9fb7e16e14
4 changed files with 51 additions and 16 deletions

View File

@ -1,5 +1,6 @@
const util = require('util'); const util = require('util');
const Web3 = require('web3'); const Web3 = require('web3');
const app = require('j7/app');
const utils = require('j7/utils'); const utils = require('j7/utils');
const event = require('j7/event'); const event = require('j7/event');
const sync = require("j7/sync"); const sync = require("j7/sync");
@ -91,9 +92,11 @@ class BlockChain {
); );
if (!err && row) { if (!err && row) {
this.firstBlockNumber = Number(row['value']); this.firstBlockNumber = Number(row['value']);
await utils.sleep(500 + utils.randRange(500, 1500));
continue;
} }
} catch (e) { } catch (e) {
console.log(e);
} finally { } finally {
conn.release(); conn.release();
} }

View File

@ -1,10 +1,11 @@
const log = require('j7/log'); const log = require('j7/log');
const bcutils = require('j7/bcutils'); const bcutils = require('j7/bcutils');
const utils = require('j7/utils'); const utils = require('j7/utils');
const metaFactory = require('../../metadata/factory');
class BoxOpenedProcess { class BoxOpenedProcess {
async start(conn, event) { async start(instance, conn, event) {
const {err, row} = await conn.ormSelectOne( const {err, row} = await conn.ormSelectOne(
't_boxopened_event', 't_boxopened_event',
[ [
@ -37,6 +38,7 @@ class BoxOpenedProcess {
); );
fieldList.push(['token_type' + (i + 1), type]), fieldList.push(['token_type' + (i + 1), type]),
await this.mintNft( await this.mintNft(
conn,
bcutils.toNormalAddress(returnValues['to']), bcutils.toNormalAddress(returnValues['to']),
blockNumber, blockNumber,
id, id,
@ -53,7 +55,7 @@ class BoxOpenedProcess {
} }
} }
async mintNft(owner, blockNumber, tokenId, tokenType) { async mintNft(conn, owner, blockNumber, tokenId, tokenType) {
const {err, row} = await conn.ormSelectOne( const {err, row} = await conn.ormSelectOne(
't_nft', 't_nft',
[ [

View File

@ -4,7 +4,6 @@ const bcutils = require('j7/bcutils');
const log = require('j7/log'); const log = require('j7/log');
const event = require('j7/event'); const event = require('j7/event');
const BaseService = require('./baseservice'); const BaseService = require('./baseservice');
const metaFactory = require('../metadata/factory');
const bc = require('../blockchain'); const bc = require('../blockchain');
const C = require('../C'); const C = require('../C');
const factory = require('./factory'); const factory = require('./factory');
@ -18,29 +17,24 @@ class EventCenter extends BaseService {
instances = [ instances = [
{ {
'name': 'heroInstance', 'name': 'heroInstance',
'last_block_number': 0,
'eventName': 'Transfer', 'eventName': 'Transfer',
}, },
{ {
'name': 'equipInstance', 'name': 'equipInstance',
'last_block_number': 0,
'eventName': 'Transfer', 'eventName': 'Transfer',
}, },
{ {
'name': 'chipInstance', 'name': 'chipInstance',
'last_block_number': 0,
'eventName': 'Transfer', 'eventName': 'Transfer',
}, },
{ {
'name': 'luckboxInstance', 'name': 'luckboxInstance',
'last_block_number': 0,
'eventName': 'Transfer', 'eventName': 'Transfer',
} }
]; ];
boxInstance = { boxInstance = {
'name': 'boxproxyInstance', 'name': 'boxproxyInstance',
'last_block_number': 0,
'eventName': 'BoxOpened', 'eventName': 'BoxOpened',
}; };

View File

@ -12,6 +12,7 @@ class EventProcess extends BaseService {
this.instance = instance; this.instance = instance;
this.cb = cb; this.cb = cb;
this.lastBlockNumber = 0; this.lastBlockNumber = 0;
await this.start();
} }
async start() { async start() {
@ -25,8 +26,17 @@ class EventProcess extends BaseService {
const logClass = this.getInstanceName() + ' pullEvent:'; const logClass = this.getInstanceName() + ' pullEvent:';
while (true) { while (true) {
try { try {
console.log('pullEvent1',
utils.jsonEncode(this.instance));
const fromBlock = await this.getFromBlock(); const fromBlock = await this.getFromBlock();
console.log('pullEvent2',
utils.jsonEncode(this.instance));
const toBlock = await this.calcToBlock(fromBlock); const toBlock = await this.calcToBlock(fromBlock);
console.log('pullEvent',
fromBlock,
toBlock,
bc.getCurrBlockNumber(),
utils.jsonEncode(this.instance));
if (toBlock >= fromBlock) { if (toBlock >= fromBlock) {
const events = await bc[this.getInstanceName()].getPastEvents( const events = await bc[this.getInstanceName()].getPastEvents(
this.instance['eventName'], this.instance['eventName'],
@ -35,6 +45,7 @@ class EventProcess extends BaseService {
toBlock: toBlock, toBlock: toBlock,
}, },
); );
console.log(events);
await this.processEvents(events, toBlock); await this.processEvents(events, toBlock);
await this.saveLastBlockNumber(toBlock); await this.saveLastBlockNumber(toBlock);
} }
@ -50,13 +61,13 @@ class EventProcess extends BaseService {
} }
async processEvents(events, toBlock) { async processEvents(events, toBlock) {
this.instance['last_block_number'] = toBlock;
for (let i in events) { for (let i in events) {
while (true) { while (true) {
try { try {
await cb(event); await this.cb(events[i]);
break; break;
} catch (err) { } catch (err) {
log.error(err);
} }
await utils.sleep(8000 + utils.randRange(500, 1500)); await utils.sleep(8000 + utils.randRange(500, 1500));
} }
@ -67,7 +78,7 @@ class EventProcess extends BaseService {
const firstBlockNumber = await bc.getFirstBlockNumber(); const firstBlockNumber = await bc.getFirstBlockNumber();
while (this.lastBlockNumber < 1) { while (this.lastBlockNumber < 1) {
try { try {
const {err, row} = await conn.ormSelectOne( const {err, row} = await this.conn.ormSelectOne(
't_parameter', 't_parameter',
[ [
['name', this.getBlockNumberDbName()] ['name', this.getBlockNumberDbName()]
@ -77,13 +88,19 @@ class EventProcess extends BaseService {
if (row) { if (row) {
this.lastBlockNumber = Number(row['value']); this.lastBlockNumber = Number(row['value']);
} else { } else {
this.lastBlockNumber = this.firstBlockNumber; this.lastBlockNumber = firstBlockNumber;
} }
} }
while (this.lastBlockNumber + 8 < bc.getCurrBlockNumber()) { console.log('getFromBlock',
this.lastBlockNumber,
bc.getCurrBlockNumber(),
utils.jsonEncode(this.instance));
while (this.lastBlockNumber + 8 > bc.getCurrBlockNumber()) {
await utils.sleep(1000 + utils.randRange(500, 1500)); await utils.sleep(1000 + utils.randRange(500, 1500));
} }
continue;
} catch (err) { } catch (err) {
console.log(err);
} }
await utils.sleep(5000 + utils.randRange(500, 1500)); await utils.sleep(5000 + utils.randRange(500, 1500));
} }
@ -97,18 +114,37 @@ class EventProcess extends BaseService {
if (distanceBlock > 3000) { if (distanceBlock > 3000) {
return fromBlock + 3000; return fromBlock + 3000;
} else { } else {
return distanceBlock; return fromBlock + distanceBlock;
} }
} }
return fromBlock; return fromBlock;
} }
async saveLastBlockNumber(blockNumber) { async saveLastBlockNumber(blockNumber) {
while (true) {
const {err} = await this.conn.upsert(
't_parameter',
[
['name', this.getBlockNumberDbName()]
],
[
['value', blockNumber],
],
[
['name', this.getBlockNumberDbName()],
['value', blockNumber],
]
);
if (!err) {
break;
}
await utils.sleep(5000 + utils.randRange(500, 1500));
}
this.lastBlockNumber = blockNumber; this.lastBlockNumber = blockNumber;
} }
getBlockNumberDbName() { getBlockNumberDbName() {
return this.instance['name'] + '.' + this.instance['eventName'] + '.last_block_name'; return this.instance['name'] + '.' + this.instance['eventName'] + '.last_block_number';
} }
} }