增加event to scription的转换方法
This commit is contained in:
parent
de85530295
commit
a99c2dda55
@ -1,50 +1,11 @@
|
||||
[
|
||||
|
||||
{
|
||||
"chain": 421614,
|
||||
"address": "0xCD4bb3402f1a444a1AF10F31946Ed37DaC0eaC4d",
|
||||
"event": "Transfer",
|
||||
"abi": "ERC721_Transfer",
|
||||
"fromBlock": 3549077,
|
||||
"eventProcesser": "NftHolder"
|
||||
},
|
||||
{
|
||||
"chain": 421614,
|
||||
"address": "0x6a673D946a976776fd5F163d9d831b2fEB600015",
|
||||
"event": "Transfer",
|
||||
"abi": "ERC721_Transfer",
|
||||
"fromBlock": 5814045,
|
||||
"eventProcesser": "NftHolder"
|
||||
},
|
||||
{
|
||||
"chain": 421614,
|
||||
"address": "0x7b6399DFbed8Bc46F6A498C6B1040E80c2B5C4bc",
|
||||
"event": "Transfer",
|
||||
"abi": "ERC721_Transfer",
|
||||
"fromBlock": 5814491,
|
||||
"eventProcesser": "NftHolder"
|
||||
},
|
||||
{
|
||||
"chain": 421614,
|
||||
"address": "0xe2E4D5a4045fBFcbCBECAf5b8A94303712d2FA97",
|
||||
"event": "Transfer",
|
||||
"abi": "ERC721_Transfer",
|
||||
"fromBlock": 3549613,
|
||||
"eventProcesser": "NftHolder"
|
||||
},
|
||||
{
|
||||
"chain": 421614,
|
||||
"address": "0xd46fA2E72BA0F54092D0eF6a6e0D1d5660259C7a",
|
||||
"event": "Staked",
|
||||
"abi": "NFT_Stake",
|
||||
"fromBlock": 3549891,
|
||||
"eventProcesser": "NftStake"
|
||||
},
|
||||
{
|
||||
"chain": 421614,
|
||||
"address": "0xd46fA2E72BA0F54092D0eF6a6e0D1d5660259C7a",
|
||||
"event": "Redeem",
|
||||
"abi": "NFT_Redeem",
|
||||
"fromBlock": 3549891,
|
||||
"eventProcesser": "NftStake"
|
||||
"chain": 5611,
|
||||
"address": "0x0Fd13D2CD0B6c679B6f92590E0b91C18DDe7BD3A",
|
||||
"event": "ActionEvent",
|
||||
"abi": "TreasureHunt",
|
||||
"fromBlock": 26202217,
|
||||
"eventProcesser": "GeneralEvent"
|
||||
}
|
||||
]
|
@ -36,8 +36,16 @@ export const retryEthBlockNumber = async (rpc: string) => {
|
||||
return res
|
||||
}
|
||||
|
||||
export const ethGetBlockByNumber = async (rpc: string, blockNumber: string) => {
|
||||
return requestChain(rpc, 'eth_getBlockByNumber', [blockNumber, true])
|
||||
export const retryEthGetBlockByNumber = async (rpc: string, blockNumber: string, all = true) => {
|
||||
const res = await retry(() => ethGetBlockByNumber(rpc, blockNumber, all), { maxRetries: 3, whitelistErrors: [] })
|
||||
if (res.error) {
|
||||
throw new Error(res.error.message)
|
||||
}
|
||||
return res
|
||||
}
|
||||
|
||||
export const ethGetBlockByNumber = async (rpc: string, blockNumber: string, all = true) => {
|
||||
return requestChain(rpc, 'eth_getBlockByNumber', [blockNumber, all])
|
||||
}
|
||||
|
||||
export const ethGetLogs = async (rpc: string, params: any) => {
|
||||
|
58
src/models/TreasureHunt.ts
Normal file
58
src/models/TreasureHunt.ts
Normal file
@ -0,0 +1,58 @@
|
||||
import { CheckIn } from "./CheckIn"
|
||||
import { ChestRecord } from "./ChestRecord"
|
||||
import { GeneralScription } from "./GeneralScription"
|
||||
import Web3 from 'web3'
|
||||
|
||||
const ops = {
|
||||
'1': 'check',
|
||||
'2': 'explore',
|
||||
'3': 'chest_enhance',
|
||||
'4': 'chest_open',
|
||||
'5': 'task_claim'
|
||||
}
|
||||
|
||||
const nexts = {
|
||||
'1': CheckIn,
|
||||
'2': GeneralScription,
|
||||
'3': GeneralScription,
|
||||
'4': ChestRecord,
|
||||
'5': GeneralScription
|
||||
}
|
||||
|
||||
const inputs = {
|
||||
'1': 'data:,{"p":"cf-20","op":"check"}',
|
||||
'2': 'data:,{"p":"cf-20","op":"explore","val":"${val}"}',
|
||||
'3': 'data:,{"p":"cf-20","op":"chest_enhance","val":"${val}"}',
|
||||
'4': 'data:,{"p":"cf-20","op":"chest_open","id":"${val}',
|
||||
'5': 'data:,{"p":"cf-20","op":"task_claim","val":"${val}"}'
|
||||
}
|
||||
export class TreasureHunt {
|
||||
public static async saveEvent(event: any) {
|
||||
const hash = event.hash || event.transactionHash
|
||||
let {user, action, value} = event.decodedData
|
||||
|
||||
let eventScription = {
|
||||
hash,
|
||||
"blockHash" : event.blockHash,
|
||||
"blockNumber" : event.blockNumber,
|
||||
"blockTime" : event.blockTime,
|
||||
"from" : user,
|
||||
"input" : "",
|
||||
"op" : ops[action],
|
||||
"to" : event.address,
|
||||
"value" : "0x0"
|
||||
}
|
||||
if (action === '2' || action === '5') {
|
||||
let val = Web3.utils.numberToHex(value).replace('0x', '')
|
||||
// convert value from hex to base64
|
||||
value = Buffer.from(value.slice(2), 'hex').toString('base64')
|
||||
eventScription.input = inputs[action].replace('${val}', val)
|
||||
} else if (action === '3' || action === '4') {
|
||||
let val = Web3.utils.numberToHex(value).replace('0x', '')
|
||||
eventScription.input = inputs[action].replace('${val}', val)
|
||||
} else {
|
||||
eventScription.input = inputs[action]
|
||||
}
|
||||
await nexts[action].saveEvent(eventScription)
|
||||
}
|
||||
}
|
@ -1,5 +1,5 @@
|
||||
import { IChain } from 'chain/allchain'
|
||||
import { batchEthLogs, ethGetLogs, retryEthBlockNumber } from 'chain/chain.api'
|
||||
import { batchEthLogs, ethGetBlockByNumber, ethGetLogs, retryEthBlockNumber, retryEthGetBlockByNumber } from 'chain/chain.api'
|
||||
import logger from 'logger/logger'
|
||||
import { GeneralEvent } from 'models/GeneralEvent'
|
||||
|
||||
@ -10,6 +10,7 @@ import { TokenHolder } from 'models/TokenHolder'
|
||||
import { NftStake } from 'models/NftStake'
|
||||
import { IEventCfg } from 'interface/IEventCfg'
|
||||
import { ZRedisClient } from 'zutils'
|
||||
import { formatDate } from 'utils/utcdate.util'
|
||||
|
||||
let eventProcessers = {
|
||||
NftHolder: NftHolder,
|
||||
@ -184,6 +185,9 @@ export class EventBatchSvr {
|
||||
let result = decodeEvent(cfg.abi, event)
|
||||
// cfg.fromBlock = Math.max (parseInt(event.blockNumber, 16) + 1, cfg.fromBlock)
|
||||
event.decodedData = result
|
||||
let res = await retryEthGetBlockByNumber(this.rpc, event.blockNumber, false)
|
||||
event.blockTime = parseInt(res.result.timestamp, 16)
|
||||
event.dateTag = formatDate(new Date(event.blockTime * 1000))
|
||||
const record = await GeneralEvent.saveEvent(event)
|
||||
blockNumber = Math.max(parseInt(event.blockNumber, 16), cfg.fromBlock)
|
||||
if (cfg.eventProcesser && eventProcessers[cfg.eventProcesser]) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user