This commit is contained in:
aozhiwei 2023-07-10 14:07:52 +08:00
parent 44485f9a79
commit cdaa601fc8
3 changed files with 66 additions and 1 deletions

View File

@ -3,8 +3,10 @@ const EVENTDB_STATE_HANDLED = 1;
const GAMEDB_NAME = 'GameDb0'; const GAMEDB_NAME = 'GameDb0';
const BCEVENTDB_NAME = 'BcEventDb0'; const BCEVENTDB_NAME = 'BcEventDb0';
const BCNFTDB_NAME = 'BcNftDb0';
exports.EVENTDB_STATE_PENDING = EVENTDB_STATE_PENDING; exports.EVENTDB_STATE_PENDING = EVENTDB_STATE_PENDING;
exports.EVENTDB_STATE_HANDLED = EVENTDB_STATE_HANDLED; exports.EVENTDB_STATE_HANDLED = EVENTDB_STATE_HANDLED;
exports.GAMEDB_NAME = GAMEDB_NAME; exports.GAMEDB_NAME = GAMEDB_NAME;
exports.BCEVENTDB_NAME = BCEVENTDB_NAME; exports.BCEVENTDB_NAME = BCEVENTDB_NAME;
exports.BCNFTDB_NAME = BCNFTDB_NAME;

View File

@ -39,7 +39,7 @@ class BlockChain extends BaseService {
} }
getCurrBlockNumber() { getCurrBlockNumber() {
return this.#bc.currBlockNumber; return this.#bc.getCurrBlockNumber();
} }
async lockQuery() { async lockQuery() {

View File

@ -41,6 +41,14 @@ class Erc721Refresher extends BaseService {
if (err) { if (err) {
throw err; throw err;
} }
if (rows.length > 0) {
await utils.serial(
rows,
async (row) => {
await this.refresh(row);
}
);
}
} catch (err) { } catch (err) {
log.error(logHead + err); log.error(logHead + err);
await utils.sleep(5000 + utils.randRange(1000, 3000)); await utils.sleep(5000 + utils.randRange(1000, 3000));
@ -64,6 +72,61 @@ class Erc721Refresher extends BaseService {
return head; return head;
} }
async refresh(row) {
while (true) {
await this.bc.mustBeActive();
const oldBlockNumber = this.bc.getCurrBlockNumber();
let oldOwner = await this.getOwner();
while (oldBlockNumber + 8 > this.bc.getCurrBlockNumber()) {
await utils.sleep(1000 + utils.randRange(0, 500));
}
await this.bc.mustBeActive();
const newBlockNumber = this.bc.getCurrBlockNumber();
let newOwner = await this.getOwner();
if (oldOwner == newOwner) {
const ok = await this.updateConfirmed(newOwner, oldBlockNumber, row);
if (ok) {
break;
}
}
await utils.sleep(1000 + utils.randRange(500, 1500));
}
}
async updateConfirmed(newOwner, blockNumber, row) {
const {err, nftDbConn} = await app.getDbConn(constant.BCNFTDB_NAME);
if (err) {
log.error('updateConfirmed:' + this.tokenId + ' err:' + err);
return false;
}
try {
{
const {err} = await nftDbConn.update(
't_nft',
[
['net_id', row['net_id']],
['token_id', row['token_id']],
['contract_address', row['contract_address']],
],
[
['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;
}
}
} finally {
nftDbConn.release();
}
return true;
}
} }
module.exports = Erc721Refresher; module.exports = Erc721Refresher;