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

View File

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

View File

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

View File

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