-
Notifications
You must be signed in to change notification settings - Fork 10
/
Copy pathbt_cbridge.py
88 lines (70 loc) · 2.84 KB
/
bt_cbridge.py
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
import pandas as pd
import web3
from pyaml_env import parse_config
from acx.abis import getABI
from acx.data.chains import SHORTNAME_TO_ID
from acx.data.tokens import (
CHAIN_TO_ADDRESS_TO_SYMBOL, SYMBOL_TO_CHAIN_TO_ADDRESS, SYMBOL_TO_DECIMALS
)
from acx.utils import findEvents, scaleDecimals
if __name__ == "__main__":
# Load parameters
params = parse_config("parameters.yaml")
# Tokens to support
SUPPORTED_CHAINS = params["traveler"]["cbridge"]["chains"]
SUPPORTED_TOKENS = params["traveler"]["cbridge"]["tokens"]
cbridgeRelays = []
for chain in SUPPORTED_CHAINS:
chainId = SHORTNAME_TO_ID[chain]
chainInfo = params["traveler"]["cbridge"]["contract_info"][chainId]
# Web 3 instance for particular chain
provider = web3.Web3.HTTPProvider(
params["rpc_node"][chain],
request_kwargs={"timeout": 60}
)
w3 = web3.Web3(provider)
# Create the cBridge bridge
bridgeAddress = chainInfo["address"]
bridge = w3.eth.contract(
address=bridgeAddress, abi=getABI("cBridge")
)
# Get first, last block, and number of blocks to query at once
fb = chainInfo["first_block"]
lb = chainInfo["last_block"]
nBlocks = params["traveler"]["n_blocks"][chainId]
# Find token addresses that we might be interested in
wantedTokenAddresses = []
for token in SUPPORTED_TOKENS:
if chainId in SYMBOL_TO_CHAIN_TO_ADDRESS[token].keys():
wantedTokenAddresses.append(
SYMBOL_TO_CHAIN_TO_ADDRESS[token][chainId]
)
relays = findEvents(
w3, bridge.events.Relay, fb, lb,
nBlocks, {}, True
)
out = []
for relay in relays:
relayArgs = relay["args"]
# Skip tokens that aren't in our "tokens universe"
tokenAddress = relayArgs["token"]
if tokenAddress not in wantedTokenAddresses:
continue
symbol = CHAIN_TO_ADDRESS_TO_SYMBOL[chainId][tokenAddress]
decimals = SYMBOL_TO_DECIMALS[symbol]
# Save row by row
row = {}
row["block"] = relay["blockNumber"]
row["tx"] = relay["transactionHash"]
row["originChainId"] = relayArgs["srcChainId"]
row["destinationChainId"] = chainId
row["transferId"] = relayArgs["transferId"]
row["sender"] = relayArgs["sender"]
row["receiver"] = relayArgs["receiver"]
row["symbol"] = symbol
row["amount"] = scaleDecimals(relayArgs["amount"], decimals)
out.append(row)
chainDf = pd.DataFrame(out)
cbridgeRelays.append(chainDf)
df = pd.concat(cbridgeRelays, axis=0, ignore_index=True)
df.to_parquet("raw/cbridge_transfers.parquet")