增加event to scription的转换方法
This commit is contained in:
parent
de85530295
commit
a99c2dda55
@ -1,50 +1,11 @@
|
|||||||
[
|
[
|
||||||
|
|
||||||
{
|
{
|
||||||
"chain": 421614,
|
"chain": 5611,
|
||||||
"address": "0xCD4bb3402f1a444a1AF10F31946Ed37DaC0eaC4d",
|
"address": "0x0Fd13D2CD0B6c679B6f92590E0b91C18DDe7BD3A",
|
||||||
"event": "Transfer",
|
"event": "ActionEvent",
|
||||||
"abi": "ERC721_Transfer",
|
"abi": "TreasureHunt",
|
||||||
"fromBlock": 3549077,
|
"fromBlock": 26202217,
|
||||||
"eventProcesser": "NftHolder"
|
"eventProcesser": "GeneralEvent"
|
||||||
},
|
|
||||||
{
|
|
||||||
"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"
|
|
||||||
}
|
}
|
||||||
]
|
]
|
@ -36,8 +36,16 @@ export const retryEthBlockNumber = async (rpc: string) => {
|
|||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
|
||||||
export const ethGetBlockByNumber = async (rpc: string, blockNumber: string) => {
|
export const retryEthGetBlockByNumber = async (rpc: string, blockNumber: string, all = true) => {
|
||||||
return requestChain(rpc, 'eth_getBlockByNumber', [blockNumber, 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) => {
|
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 { 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 logger from 'logger/logger'
|
||||||
import { GeneralEvent } from 'models/GeneralEvent'
|
import { GeneralEvent } from 'models/GeneralEvent'
|
||||||
|
|
||||||
@ -10,6 +10,7 @@ import { TokenHolder } from 'models/TokenHolder'
|
|||||||
import { NftStake } from 'models/NftStake'
|
import { NftStake } from 'models/NftStake'
|
||||||
import { IEventCfg } from 'interface/IEventCfg'
|
import { IEventCfg } from 'interface/IEventCfg'
|
||||||
import { ZRedisClient } from 'zutils'
|
import { ZRedisClient } from 'zutils'
|
||||||
|
import { formatDate } from 'utils/utcdate.util'
|
||||||
|
|
||||||
let eventProcessers = {
|
let eventProcessers = {
|
||||||
NftHolder: NftHolder,
|
NftHolder: NftHolder,
|
||||||
@ -184,6 +185,9 @@ export class EventBatchSvr {
|
|||||||
let result = decodeEvent(cfg.abi, event)
|
let result = decodeEvent(cfg.abi, event)
|
||||||
// cfg.fromBlock = Math.max (parseInt(event.blockNumber, 16) + 1, cfg.fromBlock)
|
// cfg.fromBlock = Math.max (parseInt(event.blockNumber, 16) + 1, cfg.fromBlock)
|
||||||
event.decodedData = result
|
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)
|
const record = await GeneralEvent.saveEvent(event)
|
||||||
blockNumber = Math.max(parseInt(event.blockNumber, 16), cfg.fromBlock)
|
blockNumber = Math.max(parseInt(event.blockNumber, 16), cfg.fromBlock)
|
||||||
if (cfg.eventProcesser && eventProcessers[cfg.eventProcesser]) {
|
if (cfg.eventProcesser && eventProcessers[cfg.eventProcesser]) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user