-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy patheth-listeners.js
117 lines (106 loc) · 3.86 KB
/
eth-listeners.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
const { ethers, utils } = require("ethers");
const contracts = require('viper-contracts')
const { extractBiteId, getNetwork, getProvider, sleep } = require('./utils.js')
const { addToQueue } = require('./render.js');
console.log('network:', getNetwork())
if (process.env.LISTEN == "false") return
if (contracts.Viper.networks[getNetwork()] == undefined) {
console.error(`no viper contract on network ${getNetwork()}`)
return
}
const viperContract = new ethers.Contract(
contracts.Viper.networks[getNetwork()].address,
contracts.Viper.abi, getProvider()
)
if (contracts.BiteByViper.networks[getNetwork()] == undefined) {
console.error(`no bite by viper contract on network ${getNetwork()}`)
return
}
const biteByViperContract = new ethers.Contract(
contracts.BiteByViper.networks[getNetwork()].address,
contracts.BiteByViper.abi, getProvider()
)
getAllPastEvents()
async function getAllPastEvents() {
const endingBlock = await getProvider().getBlockNumber()
const startingBlock = 17666451
const chunk = 10_000
const timeout = 10 // ms
const chunks = Math.ceil((endingBlock - startingBlock) / chunk)
for (let j = 0; j < 2; j++) {
for (let i = 0; i < chunks; i++) {
try {
if (j == 0) {
await queryViper(startingBlock + i * chunk, startingBlock + (i + 1) * chunk)
await sleep(timeout)
} else {
await queryBiteByViper(startingBlock + i * chunk, startingBlock + (i + 1) * chunk)
await sleep(timeout)
}
} catch (e) {
console.log('failed to query contract', j == 0 ? 'BiteByViper' : 'Viper', { e })
i--
}
}
}
console.log('getAllPastEvents done')
}
async function queryBiteByViper(from, to) {
// get all previous Transfer events from biteByViperContract
biteByViperContract.queryFilter(biteByViperContract.filters.Transfer(), from, to)
.then((events) => {
events.forEach(async (event) => {
var from = event.args[0]
var to = event.args[1].toString()
var tokenId = ethers.BigNumber.from(event.args[2])
if (process.env.GENERATE_GIFS == "true") {
const { length, originalTokenId, senderAddress } = extractBiteId(tokenId)
console.log(`BiteByViper Mint:`,
{ from, to, tokenId: tokenId.toString() },
{ length, originalTokenId, senderAddress },
)
addToQueue(tokenId.toString(), 0)
}
})
})
}
biteByViperContract.on('Transfer', async (...args) => {
var from = args[0]
var to = args[1].toString()
var tokenId = ethers.BigNumber.from(args[2])
const { length, originalTokenId, senderAddress } = extractBiteId(tokenId)
console.log(`BiteByViper Mint:`,
{ from, to, tokenId: tokenId.toString() },
{ length, originalTokenId, senderAddress },
)
addToQueue(tokenId.toString(), 0)
addToQueue(originalTokenId.toString(), length.add(1).toNumber())
})
async function queryViper(from, to) {
// get all previous Transfer events from biteByViperContract
viperContract.queryFilter(viperContract.filters.Transfer(), from, to)
.then((events) => {
events.forEach(async (event) => {
var from = event.args[0]
var to = event.args[1].toString()
var tokenId = ethers.BigNumber.from(event.args[2])
if (process.env.GENERATE_GIFS == "true" && from.toLowerCase() == ethers.constants.AddressZero.toLowerCase()) {
console.log(`ViperContract Mint:`,
{ from, to, tokenId: tokenId.toString() },
)
addToQueue(tokenId.toString(), 1)
}
})
})
}
viperContract.on('Transfer', async (...args) => {
var from = args[0]
var to = args[1].toString()
var tokenId = ethers.BigNumber.from(args[2])
if (from.toLowerCase() == ethers.constants.AddressZero.toLowerCase()) {
console.log(`ViperContract Mint:`,
{ from, to, tokenId: tokenId.toString() },
)
addToQueue(tokenId.toString(), 1)
}
})