Create TS scripts to obtain rewards data of all stakers before hack (proposal 20 exectuion)

This commit is contained in:
Theo 2023-06-03 10:53:36 -07:00
parent ec0bca632a
commit a3b18ba479
11 changed files with 4264 additions and 2 deletions

3
.gitignore vendored

@ -1,2 +1,3 @@
.env
.github
.github
node_modules

629
abi/GovernanceABI.json Normal file

@ -0,0 +1,629 @@
[
{
"inputs": [
{
"internalType": "address",
"name": "stakingRewardsAddress",
"type": "address"
},
{ "internalType": "address", "name": "gasCompLogic", "type": "address" },
{
"internalType": "address",
"name": "userVaultAddress",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "account",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "to",
"type": "address"
}
],
"name": "Delegated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint256",
"name": "id",
"type": "uint256"
},
{
"indexed": true,
"internalType": "address",
"name": "proposer",
"type": "address"
},
{
"indexed": false,
"internalType": "address",
"name": "target",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "startTime",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "endTime",
"type": "uint256"
},
{
"indexed": false,
"internalType": "string",
"name": "description",
"type": "string"
}
],
"name": "ProposalCreated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint256",
"name": "proposalId",
"type": "uint256"
}
],
"name": "ProposalExecuted",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "account",
"type": "address"
},
{
"indexed": true,
"internalType": "bytes",
"name": "errorData",
"type": "bytes"
}
],
"name": "RewardUpdateFailed",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "RewardUpdateSuccessful",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "account",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "from",
"type": "address"
}
],
"name": "Undelegated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint256",
"name": "proposalId",
"type": "uint256"
},
{
"indexed": true,
"internalType": "address",
"name": "voter",
"type": "address"
},
{
"indexed": true,
"internalType": "bool",
"name": "support",
"type": "bool"
},
{
"indexed": false,
"internalType": "uint256",
"name": "votes",
"type": "uint256"
}
],
"name": "Voted",
"type": "event"
},
{
"inputs": [],
"name": "CLOSING_PERIOD",
"outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "EXECUTION_DELAY",
"outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "EXECUTION_EXPIRATION",
"outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "PROPOSAL_THRESHOLD",
"outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "QUORUM_VOTES",
"outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "Staking",
"outputs": [
{
"internalType": "contract TornadoStakingRewards",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "VOTE_EXTEND_TIME",
"outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "VOTING_DELAY",
"outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "VOTING_PERIOD",
"outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{ "internalType": "bytes32[]", "name": "domains", "type": "bytes32[]" }
],
"name": "bulkResolve",
"outputs": [
{ "internalType": "address[]", "name": "result", "type": "address[]" }
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [{ "internalType": "address", "name": "", "type": "address" }],
"name": "canWithdrawAfter",
"outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{ "internalType": "address[]", "name": "from", "type": "address[]" },
{ "internalType": "uint256", "name": "proposalId", "type": "uint256" },
{ "internalType": "bool", "name": "support", "type": "bool" }
],
"name": "castDelegatedVote",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{ "internalType": "uint256", "name": "proposalId", "type": "uint256" },
{ "internalType": "bool", "name": "support", "type": "bool" }
],
"name": "castVote",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{ "internalType": "uint256", "name": "proposalId", "type": "uint256" }
],
"name": "checkIfQuorumReached",
"outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [{ "internalType": "address", "name": "to", "type": "address" }],
"name": "delegate",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [{ "internalType": "address", "name": "", "type": "address" }],
"name": "delegatedTo",
"outputs": [{ "internalType": "address", "name": "", "type": "address" }],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{ "internalType": "uint256", "name": "proposalId", "type": "uint256" }
],
"name": "execute",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [],
"name": "gasCompensationVault",
"outputs": [
{
"internalType": "contract IGasCompensationVault",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{ "internalType": "uint256", "name": "proposalId", "type": "uint256" },
{ "internalType": "address", "name": "voter", "type": "address" }
],
"name": "getReceipt",
"outputs": [
{
"components": [
{ "internalType": "bool", "name": "hasVoted", "type": "bool" },
{ "internalType": "bool", "name": "support", "type": "bool" },
{ "internalType": "uint256", "name": "votes", "type": "uint256" }
],
"internalType": "struct Governance.Receipt",
"name": "",
"type": "tuple"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{ "internalType": "uint256", "name": "proposalId", "type": "uint256" },
{ "internalType": "address", "name": "account", "type": "address" }
],
"name": "hasAccountVoted",
"outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{ "internalType": "bytes32", "name": "_torn", "type": "bytes32" }
],
"name": "initialize",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [{ "internalType": "address", "name": "", "type": "address" }],
"name": "latestProposalIds",
"outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{ "internalType": "address", "name": "owner", "type": "address" },
{ "internalType": "uint256", "name": "amount", "type": "uint256" },
{ "internalType": "uint256", "name": "deadline", "type": "uint256" },
{ "internalType": "uint8", "name": "v", "type": "uint8" },
{ "internalType": "bytes32", "name": "r", "type": "bytes32" },
{ "internalType": "bytes32", "name": "s", "type": "bytes32" }
],
"name": "lock",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{ "internalType": "uint256", "name": "amount", "type": "uint256" }
],
"name": "lockWithApproval",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [{ "internalType": "address", "name": "", "type": "address" }],
"name": "lockedBalance",
"outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "proposalCount",
"outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],
"name": "proposals",
"outputs": [
{ "internalType": "address", "name": "proposer", "type": "address" },
{ "internalType": "address", "name": "target", "type": "address" },
{ "internalType": "uint256", "name": "startTime", "type": "uint256" },
{ "internalType": "uint256", "name": "endTime", "type": "uint256" },
{ "internalType": "uint256", "name": "forVotes", "type": "uint256" },
{ "internalType": "uint256", "name": "againstVotes", "type": "uint256" },
{ "internalType": "bool", "name": "executed", "type": "bool" },
{ "internalType": "bool", "name": "extended", "type": "bool" }
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{ "internalType": "address", "name": "target", "type": "address" },
{ "internalType": "string", "name": "description", "type": "string" }
],
"name": "propose",
"outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{ "internalType": "address", "name": "from", "type": "address" },
{ "internalType": "address", "name": "target", "type": "address" },
{ "internalType": "string", "name": "description", "type": "string" }
],
"name": "proposeByDelegate",
"outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{ "internalType": "bytes32", "name": "node", "type": "bytes32" }
],
"name": "resolve",
"outputs": [{ "internalType": "address", "name": "", "type": "address" }],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "returnMultisigAddress",
"outputs": [{ "internalType": "address", "name": "", "type": "address" }],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [
{ "internalType": "uint256", "name": "closingPeriod", "type": "uint256" }
],
"name": "setClosingPeriod",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{ "internalType": "uint256", "name": "executionDelay", "type": "uint256" }
],
"name": "setExecutionDelay",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "executionExpiration",
"type": "uint256"
}
],
"name": "setExecutionExpiration",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "gasCompensationsLimit",
"type": "uint256"
}
],
"name": "setGasCompensations",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "proposalThreshold",
"type": "uint256"
}
],
"name": "setProposalThreshold",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{ "internalType": "uint256", "name": "quorumVotes", "type": "uint256" }
],
"name": "setQuorumVotes",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{ "internalType": "uint256", "name": "voteExtendTime", "type": "uint256" }
],
"name": "setVoteExtendTime",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{ "internalType": "uint256", "name": "votingDelay", "type": "uint256" }
],
"name": "setVotingDelay",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{ "internalType": "uint256", "name": "votingPeriod", "type": "uint256" }
],
"name": "setVotingPeriod",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{ "internalType": "uint256", "name": "proposalId", "type": "uint256" }
],
"name": "state",
"outputs": [
{
"internalType": "enum Governance.ProposalState",
"name": "",
"type": "uint8"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "torn",
"outputs": [
{ "internalType": "contract TORN", "name": "", "type": "address" }
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "undelegate",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{ "internalType": "uint256", "name": "amount", "type": "uint256" }
],
"name": "unlock",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "userVault",
"outputs": [
{
"internalType": "contract ITornadoVault",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "version",
"outputs": [{ "internalType": "string", "name": "", "type": "string" }],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [
{ "internalType": "uint256", "name": "amount", "type": "uint256" }
],
"name": "withdrawFromHelper",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{ "stateMutability": "payable", "type": "receive" }
]

184
abi/StakingABI.json Normal file

@ -0,0 +1,184 @@
[
{
"inputs": [
{
"internalType": "address",
"name": "governanceAddress",
"type": "address"
},
{ "internalType": "address", "name": "tornAddress", "type": "address" },
{
"internalType": "bytes32",
"name": "_relayerRegistry",
"type": "bytes32"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "account",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "rewardsClaimed",
"type": "uint256"
}
],
"name": "RewardsClaimed",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "account",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "rewards",
"type": "uint256"
}
],
"name": "RewardsUpdated",
"type": "event"
},
{
"inputs": [],
"name": "Governance",
"outputs": [
{
"internalType": "contract ITornadoGovernance",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "accumulatedRewardPerTorn",
"outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [{ "internalType": "address", "name": "", "type": "address" }],
"name": "accumulatedRewardRateOnLastUpdate",
"outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [{ "internalType": "address", "name": "", "type": "address" }],
"name": "accumulatedRewards",
"outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{ "internalType": "uint256", "name": "amount", "type": "uint256" }
],
"name": "addBurnRewards",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{ "internalType": "bytes32[]", "name": "domains", "type": "bytes32[]" }
],
"name": "bulkResolve",
"outputs": [
{ "internalType": "address[]", "name": "result", "type": "address[]" }
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{ "internalType": "address", "name": "account", "type": "address" }
],
"name": "checkReward",
"outputs": [
{ "internalType": "uint256", "name": "rewards", "type": "uint256" }
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getReward",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "ratioConstant",
"outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "relayerRegistry",
"outputs": [{ "internalType": "address", "name": "", "type": "address" }],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{ "internalType": "bytes32", "name": "node", "type": "bytes32" }
],
"name": "resolve",
"outputs": [{ "internalType": "address", "name": "", "type": "address" }],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "torn",
"outputs": [
{ "internalType": "contract IERC20", "name": "", "type": "address" }
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{ "internalType": "address", "name": "account", "type": "address" },
{
"internalType": "uint256",
"name": "amountLockedBeforehand",
"type": "uint256"
}
],
"name": "updateRewardsOnLockedBalanceChange",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{ "internalType": "uint256", "name": "amount", "type": "uint256" }
],
"name": "withdrawTorn",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
]

385
data/rewardsBeforeHack.txt Normal file

@ -0,0 +1,385 @@
0xb2C95127308876B0dA00dCE7798412bcA95C9Fee = 261891050760386479981 (~ 261.89 TORN)
0x52f4B90dF9560E50389107baCCD13e8BC1e5a516 = 5519577581187935401 (~ 5.52 TORN)
0x679959449b608AF08d9419fE66D4e985c7d64D96 = 6634938965540161678 (~ 6.63 TORN)
0xf93d494D5A3791e0Ceccf45DAECd4A5264667E98 = 8490060208866067358 (~ 8.49 TORN)
0xCbc3906EFE25eD7CF06265f6B02e83dB67eF41AC = 319116867023920470808 (~ 319.12 TORN)
0xe9B4aA5906C6e842e52aE7B7ab4dec3EE52362cB = 39678252992546852551 (~ 39.68 TORN)
0x875Bf94C16000710f721Cf453B948f23B7394ec2 = 13947501300799785176 (~ 13.95 TORN)
0x642df98E9d71Ba533dF7288512cF63D34a907659 = 135240431519943709355 (~ 135.24 TORN)
0xCa5d2D6758AF981B93a03D17A5A3EC5F80c180EB = 7721278572113994465 (~ 7.72 TORN)
0x201dD47dadA5165D792e6B4bDC2600e2FC5d7375 = 3376734302476765689 (~ 3.38 TORN)
0x97b90FBc8904F861F76CB06BFa0A465b72C5E662 = 85583028288278705143 (~ 85.58 TORN)
0xd3660816c68EF4DB79D2cCBFA2E6D623dfD65699 = 135764830626382535905 (~ 135.76 TORN)
0xa3a7EAe904e92fA67c1888C6572Ac884722f5288 = 63755633956332846740 (~ 63.76 TORN)
0xBFb910652F850F85E3F85AA0C12aE8f4037095b0 = 33237171239790116387 (~ 33.24 TORN)
0x32f8E5d3F4039d1DF89B6A1e544288289A500Fd1 = 1536360162595381679 (~ 1.54 TORN)
0xe2506955723C01dDd6e619dD0829e28F76328c41 = 72958648431519163392 (~ 72.96 TORN)
0x3Df488Bd07C2082E84B1CD63F343Cf3d538342bA = 107098359836630121582 (~ 107.10 TORN)
0x6a90E7Ba20291CDF651A6d61ebf2371BA89EF04B = 46595274664224710080 (~ 46.60 TORN)
0x0b7C43AF43D76f79b6f6CfBAFb3A01ddE0468225 = 18243581064710552362 (~ 18.24 TORN)
0x524b7c9B4cA33ba72445DFd2d6404C81d8D1F2E3 = 8414647798389006172 (~ 8.41 TORN)
0xfDEEc44b6c63E637fA3348092A9F952A02B2E695 = 1468551637230600353 (~ 1.47 TORN)
0x59bb22550fb8b886Bf4c939592f9551cE686d4a3 = 16137118612498456595 (~ 16.14 TORN)
0x429774AdF20a28Cc95D0b3af784934EA79A82c0d = 15365126956977699391 (~ 15.37 TORN)
0x111C36a714282706208ebBe6E353C1a27e86F047 = 7447509943286775069 (~ 7.45 TORN)
0xF36c9777a2cA739dca10855Ad0F3B7833c889C75 = 12390989636498390570 (~ 12.39 TORN)
0x9fB89686c645fCCEF25Bc1Fb4028Caa8351F1b2b = 8514556973152955213 (~ 8.51 TORN)
0xB1583e01ACA426807985FAf9438c9a4cEF73B1A7 = 2769004780372765071 (~ 2.77 TORN)
0xcDfb26F93F2D5e0F4b76190e5bC740b3A3DA16F4 = 1986870853342994225 (~ 1.99 TORN)
0xDbcb5D2a6c77F1a8069ff686F88FC552F2F3eFCC = 2691179623359894955 (~ 2.69 TORN)
0x15Ed2710d0097CE9BC352Db97287bDd9104bEC92 = 517823661753566090385 (~ 517.82 TORN)
0x85f8BeC61f75De3Dbad1bBd4CDD168ea362bDaeA = 118525403763250297030 (~ 118.53 TORN)
0xac57C7A3960Ba383b94b28BF44f9cdC26B84A8e7 = 766340829474823777721 (~ 766.34 TORN)
0xEFb7Ce1357F324a324A8EABDc443b26894A2b246 = 721114114180262809591 (~ 721.11 TORN)
0x84781094f9B11aCb35A7Dca31D731A244B25E6a4 = 389646430287742483283 (~ 389.65 TORN)
0xA3A89931799Ba449A7bd1658EfD9C8662dd22BcA = 4471048279368398062 (~ 4.47 TORN)
0x13e50a5e7D695ae729Da77623c61661B27A3b60a = 25552108041996067156 (~ 25.55 TORN)
0xeafA9AA6832c076D5af3d58D9224E218CA074f04 = 3278339837838322677 (~ 3.28 TORN)
0x25713B024a8004727Ba79c43647a77c7447948dB = 16833083830815723474 (~ 16.83 TORN)
0x73D23cDaBBb25B0E039470ea940514Ca30744277 = 6268058376469446863 (~ 6.27 TORN)
0x11FD8380FcEF61E7D1FC054d4Ba20D7230a5593A = 241999616776245144340 (~ 242.00 TORN)
0xB157ba30e3467DdBC844f14F02b4ba741f1d549F = 65080791858799563574 (~ 65.08 TORN)
0xB6dA1D0cac0CAC8d39125d5213E1623750525ed5 = 3582972520064518922 (~ 3.58 TORN)
0xEBf919b0DAfb9ea4BF324108A142C64A69052D8f = 1492116146713012865552 (~ 1492.12 TORN)
0x60cA7B20DF5BC24De829430483bE764B5D084d69 = 4018319868681046086 (~ 4.02 TORN)
0xeC621c716fCE687011503fbef8110F0b4B41EA03 = 3963263371773808775 (~ 3.96 TORN)
0x076b499e9191A29Fa9210e497cBd89DABC878B6E = 4403836602105176579 (~ 4.40 TORN)
0x83c418D2eD6670785330B996b47a18492b61e218 = 2423008690534464349496 (~ 2423.01 TORN)
0xcD37EF9120132F71E23982881e19B68aE3B4E871 = 6094554447886213907 (~ 6.09 TORN)
0xe44799Ef334Df157e0F8e2855E5EbeBdBc02b299 = 498687077665731358140 (~ 498.69 TORN)
0xff36EdACcEebADC368ea6CACA13E5f3bBD1b43AC = 1685473922303763108 (~ 1.69 TORN)
0x312044825EB5CD2C4Bb016a7a86ce32240Af9136 = 27126619039727679328 (~ 27.13 TORN)
0x3035A1bBd824041B07f8Ab2297a71A81E00127c5 = 14756069076031120181 (~ 14.76 TORN)
0xeBD7213b1C3E73e9dE1B997d4720Fd92c0818cfa = 3613685844231027457 (~ 3.61 TORN)
0x39978cc40e2D1d7E127050bDFFFBB0dFcfaEbAd0 = 15230501138086179326 (~ 15.23 TORN)
0x1d7979F557BA38892f25D3d54Fa6C1D75a4CfA27 = 18055734821037016750 (~ 18.06 TORN)
0x69383889dbb0B45F83B82Aa25b7015cC1bd0ae76 = 16140846745256388878 (~ 16.14 TORN)
0x8DE7824675F8bA6E48286c5ad381D59A0F7DA3b8 = 13934499607748484588 (~ 13.93 TORN)
0x9433ea2C250D84d3fD6398699D48728fa610569A = 109796210858250476424 (~ 109.80 TORN)
0xF99d1946Bf038a1205d430Ec91401E760e5F8F6F = 8151047628859550523186 (~ 8151.05 TORN)
0x9897Bc7231492CDf163BB81bFF10A5919a73d132 = 3388092111567580393688 (~ 3388.09 TORN)
0x8953C798a6F54ea8907875c51e5D466DE76A1b26 = 797098747089744161355 (~ 797.10 TORN)
0x9C42EBDf0fA6fA0274aEEBf981613Dfa9c99BFF8 = 1151021932914438641249 (~ 1151.02 TORN)
0xD88189f7Dee6E5DBd6cbC6F06FD357f4Bf7f330b = 1435829849735697778451 (~ 1435.83 TORN)
0xf4DcA9B37f09D15f8dF740055cEaA860912efe2C = 2569990661510076867 (~ 2.57 TORN)
0xAdE9e51C9E23d64E538A7A38656B78aB6Bcc349e = 146771928128749080734 (~ 146.77 TORN)
0xeE1D1ac27A80De54F0ba92b2E25EBb3418495db2 = 2943758390988392723 (~ 2.94 TORN)
0x6C5C3f27004Cb5d03b094054d0F01d97aC8B0B7b = 459688139562733477821 (~ 459.69 TORN)
0x027Ca422238C0F53F157a61Ee2df44d425EeADA5 = 4215557507159743897 (~ 4.22 TORN)
0x5F5Fd946645511BFBCBe451B8281e2608a9740E1 = 10894111710611142586 (~ 10.89 TORN)
0x4dBD438a45FC9EA6635a7c1f5F8f2dCEAF565ef4 = 156708583792019610376 (~ 156.71 TORN)
0x0022F267eb8A8463C241e3bd23184e0C7DC783F3 = 36248441359369997667 (~ 36.25 TORN)
0x77265BE7cfB120dEAb6E94f6D0db69bD0D79dd4f = 39644548580130019492 (~ 39.64 TORN)
0xefe8Aa053Ef0C9F1879911ef1C83Da08AD385164 = 21293829512107120469 (~ 21.29 TORN)
0x1ed8bB37f05D408D4b2829d2D8c72FcC824c68C1 = 18516124154569693244 (~ 18.52 TORN)
0x238926025E84475e3182774df480021470f8F978 = 27658071363963774207 (~ 27.66 TORN)
0x0f481DCa44DAbea940CE60826140C0bBD69bC18D = 21836415326817810491 (~ 21.84 TORN)
0x0c3a4a0ed70fDB29860760b5ca78B116Fe77DE00 = 27166858033213470375 (~ 27.17 TORN)
0x883d8c8dc7887A47F0B0A5d9300f0b604cb7dc13 = 19824552416365034915 (~ 19.82 TORN)
0x327346e623A4334f7c4034D5a73Ac636d33a31c0 = 120755019242057866191 (~ 120.76 TORN)
0xA0F0287683E820FF4211e67C03cf46a87431f4E1 = 1538812389698165791 (~ 1.54 TORN)
0xeafa6FbaebB26F9d07B42f3Fd8906818CE75026F = 365052745349270769699 (~ 365.05 TORN)
0x728A62B9dFD33E509aa08b68aBa414EDA4500824 = 47932484027594295367 (~ 47.93 TORN)
0x53380cD390f59965d67bD21C1B07B3071FDd7101 = 16630425415229667980 (~ 16.63 TORN)
0xD544E1c38582deB641Ea64AC663d0589eCbF28A3 = 15640762200398339347 (~ 15.64 TORN)
0xB353cA0D3E70f628FAD61A6095Baf06Ce8CeaD3b = 7931344849621524271 (~ 7.93 TORN)
0x2D56db2f95Ae61c2396d30ABEa61fc91E506943F = 37056830404435202337 (~ 37.06 TORN)
0xc7557AfDB4C2EF7E2A5e68ed60B1f8AC41c87459 = 32204391506502234540 (~ 32.20 TORN)
0xedA818ef7f5944680b4BcA06578563D2c7Def261 = 19244624351355060472 (~ 19.24 TORN)
0xD1D03F64C6233Db3fd873B5c33B3E713847A4500 = 22679541926066486022 (~ 22.68 TORN)
0x8441A802EdBfD100a2BAc655Bd144dB9c322B135 = 16940362905695966352 (~ 16.94 TORN)
0x8170bCad3a583A0F394C5607B4EBf4AA718191b4 = 15115630690239261804 (~ 15.12 TORN)
0x4C135B8bC69D9d404673776A7D680465656c0B1D = 18651557745134101778 (~ 18.65 TORN)
0x34c4D38E784D447bE6C944672bD6D31A9206B015 = 11891931505100218503 (~ 11.89 TORN)
0x96Fb8FC2bcCDaa8298366E0187d950EE9af80dDb = 9490287064977661230 (~ 9.49 TORN)
0xE9563fcE6Db466C16E733703Dd2D6B1519091BF6 = 22321586441677961729 (~ 22.32 TORN)
0xDDBD9b3068D3EC084a1E226fCB5Dc1378b3EAF32 = 4616882688199488374 (~ 4.62 TORN)
0x43d07807707e752956b58430C92abC0Ccb7d682D = 5666719269688485142 (~ 5.67 TORN)
0xaB9424c3507BE50d8D9b185e58E1bfF47F1db642 = 6893674565343587818 (~ 6.89 TORN)
0x6FF6D709297875378C8b06721c21f40FE1989e9B = 5651699506237154120 (~ 5.65 TORN)
0x520A8bAB202e1516964185856eC5176899f06BE4 = 22318463746001413626 (~ 22.32 TORN)
0xd99804992cdb929E07D5015007a0849B900f6f84 = 1714276914913887335 (~ 1.71 TORN)
0x02DB6D137bFd99fcB0167718221555C402C82b39 = 29830462422811005139 (~ 29.83 TORN)
0x3E0ac6febCE010bf7aCf8c73bc7Fe1D1001DF997 = 3229113172124504136 (~ 3.23 TORN)
0x52441E08FC4AcFd088044067BF7612326eaEFccE = 2017897499173780670 (~ 2.02 TORN)
0x03DA0543aAd12E681f71f17FF9e9B9747A9F077C = 535039892724559238209 (~ 535.04 TORN)
0x6eA8BfAa4697187D3BB1E27688931d73BcbbEC0b = 96160012179317268085 (~ 96.16 TORN)
0xc7246dee8EB74a00078a0af0e9e449BeA1Ec12dD = 6674277150011094414 (~ 6.67 TORN)
0x5Ef47F1B3d81E4F49317505bE9f275ECdbBdeF5b = 4227887050751472989 (~ 4.23 TORN)
0xB1BfFe6C1f3DE2301A13dE4D661b532474BD3dEC = 8838817614668270933 (~ 8.84 TORN)
0xE0a9Cf94C4c41a7709B55D9bA37D788A8DF19F9E = 45499259144753600486 (~ 45.50 TORN)
0x295F43a11127a8ec0227F26591272a4C81CcEC99 = 2513561913094324146 (~ 2.51 TORN)
0x06F166E11d765aE936E7ec36777E1b4B6f0Cb83B = 50508975824735610016 (~ 50.51 TORN)
0x3034cAaB0eF35C89EB47da2c5f8529238039f3da = 6175636472097169884 (~ 6.18 TORN)
0x328809A567b87b6123462c3062e8438BBB75c1c5 = 27792590979636856692 (~ 27.79 TORN)
0x066A2EDcC0b7278A2CF5Bf2a040b4a54a41A9550 = 15282821843244071780 (~ 15.28 TORN)
0x1023aE712D5F219e9166a9D286e183226DFAafa6 = 42806051433469301743 (~ 42.81 TORN)
0x5db63f987817910Bbb9656B5210990408d3831fB = 24809335995263418515 (~ 24.81 TORN)
0x8DcA15154B8b90f452958e9cEd1abD1CE93294F1 = 11136858220905236877 (~ 11.14 TORN)
0x758E5C35ee11F2B22337228f5e8f53ad4006e6BD = 2546006253314181590 (~ 2.55 TORN)
0x75F3fC9189fd3228a4178e544CdE26b75Da81Bf3 = 90923808354167295865 (~ 90.92 TORN)
0x90e14E059B28Af64B52d4Da0442b22052f507eF1 = 280919372012890102042 (~ 280.92 TORN)
0xdB8Ecd8C4265a9026eEDff388000eC3b43A27bF4 = 13800470519810267784 (~ 13.80 TORN)
0x097DaA98F6dB6a17395bb540eE274bb0f227BF42 = 344296461842409422541 (~ 344.30 TORN)
0xeDE1D96DE24A6DA0371eBfa93E0BB6aBe71c56F0 = 20341123034358760717 (~ 20.34 TORN)
0xBcB9C5e230786Ec2E39e131DD6C6337ABC9F170e = 362940257688800318458 (~ 362.94 TORN)
0x043AF0101c49bDF8F2174EB5d66F0371520fb609 = 20825635245427249690 (~ 20.83 TORN)
0x92a4F58009dF9eaC5f2AF6d05977683639f0060e = 4900663194893379705 (~ 4.90 TORN)
0x344651A2445484bd2928eB46D2610DaaC1B42A66 = 90808834336748165277 (~ 90.81 TORN)
0x2490419318b3F69e8dc209604056f40Eb350d0d7 = 345414794727582170459 (~ 345.41 TORN)
0xDE9902F23Cf51e6C29018a708551a57E87FF27C9 = 1995890341186114459 (~ 2.00 TORN)
0x1e5Ac6A2663F1501EeEf5c28b7f49Bb06F2a0951 = 20698519319739813584 (~ 20.70 TORN)
0x4aAE2d5072385b02465263d5feb91bb1995D4f37 = 41435296640491630100 (~ 41.44 TORN)
0x14E7CA16876965f4C0DAeF6b8ce5cAb79D66f264 = 12092835555676796148 (~ 12.09 TORN)
0x0df59978Cc975e27C5E4e19d355e025F0770F088 = 72651265399984484867 (~ 72.65 TORN)
0x0D75Afb0d88CD5633a62C52afc345eFDc4588DF1 = 4350806294721919927 (~ 4.35 TORN)
0x0EC559DFD33272CAB065E9F6cD67A33538c61371 = 1107177978257047893 (~ 1.11 TORN)
0xDe30040413b26d7Aa2B6Fc4761D80eb35Dcf97aD = 25268214259626074238 (~ 25.27 TORN)
0x85e6C3c83929eE45712EFF4F89c5E74cCddB5D41 = 80916830705010170686 (~ 80.92 TORN)
0xC346A5dc3b3821AEeF3f3fFB70989631521E41cD = 15156100876567919885 (~ 15.16 TORN)
0x5d17B355538A9ea9b45A0018e11b36947fC16376 = 942457608672105748438 (~ 942.46 TORN)
0xAaF7168Bae99a4860D7729745B22C4b48d1f9Adb = 19406970552591675727 (~ 19.41 TORN)
0xdD16D1b97527EC781412B63D1f75518c84aEC1A2 = 6847031664606680728 (~ 6.85 TORN)
0xEb076Bbf46c7040ee7CbA3539135CCc43335e1ae = 5866771869282653696 (~ 5.87 TORN)
0x38caf52451889fced55B7939FE5Db6f930C2A48E = 15004591391718163554 (~ 15.00 TORN)
0x6A3c302B7CE07F7063C787031BeB00E7eF206621 = 2745693129070525796 (~ 2.75 TORN)
0x48Ef3De608AB2304dBB0c4497d266F3BF5506e7B = 1346590027777001145 (~ 1.35 TORN)
0x3716905b040D5cd8a7DdE784918199117d72c3B3 = 1400844245925263369 (~ 1.40 TORN)
0xB835b4e277094D4AF9Fbb66e9f5Db9e6E8dC65dB = 25683271096264423274 (~ 25.68 TORN)
0x08d19484246a987411e04a7F098E36F92cad4f24 = 20246123092729700406 (~ 20.25 TORN)
0x42DbF634c256acd17beDDC1330488F1BEa7B8BDf = 319523008529625373272 (~ 319.52 TORN)
0xE7304bA0f157f2Ade94015934284b6704BC72911 = 39826654578302448107 (~ 39.83 TORN)
0xE06bF8125273Ead3814aBDE0D548079991F5DD8a = 22645804997633317877 (~ 22.65 TORN)
0xaa9298F0c3e97DdA6277713fd3Ed6e2A389E7260 = 3572475984033907702 (~ 3.57 TORN)
0xC9D32C7e16d71aF1739618356F1e3F2c69e8784a = 2812672628757140199 (~ 2.81 TORN)
0xFF30D836794Bfe71E888A7aa2AB62BfFb3F7a73a = 23218272203140765926 (~ 23.22 TORN)
0xCcC24DD1FE711d9f47A42a04b16b789669A21C98 = 252786587455637451074 (~ 252.79 TORN)
0x0091a0aAF911A27133713028a83644224FcD7103 = 4391483020114108858 (~ 4.39 TORN)
0x74E5B46a2A39F86ECc8CABCc409556953A688484 = 3576335685734120104 (~ 3.58 TORN)
0x3eE9378Fb0809a243FcF7C30865941675d766D71 = 36560597025246678361 (~ 36.56 TORN)
0x81348BB6CFA32662cE76aE5FcC8c54F056CE7042 = 31557802849905329659 (~ 31.56 TORN)
0x60B12324fb28132c403Ed26b8677Ca4De31b2e16 = 3727585088600139687 (~ 3.73 TORN)
0x30106D3Ad21e81DDc6ba94965BD8d39c036F2deD = 1970108755076228794 (~ 1.97 TORN)
0x06981EfbE070996654482F4F20786e0CEf0f8740 = 24910012428663008434 (~ 24.91 TORN)
0x8b9Ea63c9e1efccb66d3B7732dC6528B71C04Be0 = 11585355470389709302 (~ 11.59 TORN)
0xE708a1bAfA472C56CC2C28771935116e3113234D = 6267465513978284340 (~ 6.27 TORN)
0xaB1b1fe0bf8BD1582156F8FdCaA323b19FB78258 = 6249903736588606570 (~ 6.25 TORN)
0x6CC256173725Da442A250769d3BE58c0dd0C883c = 3387498383708101530 (~ 3.39 TORN)
0xb827857235d4eACc540A79e9813c80E351F0dC06 = 11871116784644301587 (~ 11.87 TORN)
0x647e9e26DA82C29AAFbbFB1C3f45d916AA9b300d = 4952575083129263084 (~ 4.95 TORN)
0x4e6428489612D68e8fFe37e93eF147B413229d9D = 2510757099624166329 (~ 2.51 TORN)
0x26AE281c9fdB974c766fcB0e407A51dE0aB56931 = 4163814860661655277 (~ 4.16 TORN)
0x3764d6708658d817b730755A15b68e0D02829c6B = 2270554981194684000 (~ 2.27 TORN)
0xFe2beF6AAD7E9Fd68D2C9f5D70DEFf3472F5619B = 2029003869229046450 (~ 2.03 TORN)
0x8DE5a4DC8746F30DeDB9493DE76A4C187Ed8f987 = 1845651550309534566 (~ 1.85 TORN)
0x31606580b4c52A1181eb9f74c1b9Db302c8e16e8 = 18040413854595059909 (~ 18.04 TORN)
0x5b29348B1Bf4574E0F1e94b700ea9Cff5aC92F40 = 10777894208285543318 (~ 10.78 TORN)
0x545f78a51FD98A6bC1e556341200A51236b6D93C = 2691530089466222755 (~ 2.69 TORN)
0x92e74E50edCE4573d181C03cA889f72640cD3a94 = 136869113432790215052 (~ 136.87 TORN)
0x3dD44f129563787449367046c9cBF5610f21467f = 65876838873310486868 (~ 65.88 TORN)
0x3a8A1F045cd4F7246c6B3A78861269CC6065433a = 340485819042729840453 (~ 340.49 TORN)
0x0A54cf15a8719DB69B5cC40d797a213ca9407B8E = 81284025913702862445 (~ 81.28 TORN)
0x00831CF531ccb05ff16F6fcBFe4D328AA52514d2 = 19507081489070834374 (~ 19.51 TORN)
0xA838F88fDFCf112Cbe53d748ea881614B3097b92 = 17275804796657260322 (~ 17.28 TORN)
0x95880f2E70203f759168665Feb6948E81Fe5dF77 = 97122566594954315364 (~ 97.12 TORN)
0x593ce184bcEe0940330A850Af23c7cA89A02324A = 3206450110568998389 (~ 3.21 TORN)
0x0050faCd2C04930257438b213FE9E132a26E5a29 = 39500678847473273923 (~ 39.50 TORN)
0x1d14080067dE02E048DdE58a936b4EBED7ee56e4 = 10668566291321367858 (~ 10.67 TORN)
0x15626a85DeA2d02B251661a9235219aE6c74ed65 = 1253582576072733139 (~ 1.25 TORN)
0xd43f3716CbB9386352880a9BD52f7F07aC01752B = 15806302538242973172 (~ 15.81 TORN)
0xbb6d1648A8BeF51603Badd347Dc91eb7D04a43e5 = 23298218841136959317 (~ 23.30 TORN)
0xD7b2879C8922cd704E41E8CC1f18f6994D6B7C36 = 366822563020873062384 (~ 366.82 TORN)
0x7a628E9bCC082844797C37c79084ed6BC99e6Abc = 5827905211411400869 (~ 5.83 TORN)
0x438c89F4Af0C0913b0cB547d4AC58a2ac42Cd406 = 1286158784632769851 (~ 1.29 TORN)
0x64aCfC01b898031Bc3D3542Fd774F949f1B3A3eD = 22629791720280120817 (~ 22.63 TORN)
0xDaa5C5a5B6725666B1e37B14dc8e1FCB446c5952 = 38342813347447445646 (~ 38.34 TORN)
0x5dab475E601D55efa2290D27333913e025C7Bd89 = 47271335991155105027 (~ 47.27 TORN)
0x6a62Fa571a02f6B7Ac8d36709517418ba80dCd65 = 13295284932273869168 (~ 13.30 TORN)
0x4051e1fcD4Be1366a0CDcfA47ca717868A96575E = 116686435879133319146 (~ 116.69 TORN)
0xC2a92a640d148eee15d16AC307fE8039E37B9073 = 29926470058225692109 (~ 29.93 TORN)
0xDc2b529C3AF6DF66956c2224cA7c55806fc07B27 = 16067505175313969066 (~ 16.07 TORN)
0xB3AAd889bf41Ec39571aFa78aa5D9A26a05DDaAb = 66039342561078583726 (~ 66.04 TORN)
0xe5FaEE1719c058FF3452ad875C78b17a22881266 = 4372707248071008517 (~ 4.37 TORN)
0x4303Ddc9943D862f2B205aF468a4A786c5137E76 = 38062310707197965348 (~ 38.06 TORN)
0xa1eBC8bdE2F1F87fe24F384497b6bD9cE3B14345 = 136274007743711470585 (~ 136.27 TORN)
0xaf095d9cedBc20c8Bb0A75ED9509c1f31DC4E7E6 = 929679243081448689081 (~ 929.68 TORN)
0x4839460F05b2a8fC1b615e0523EbC46eFba75420 = 33126482078138485018 (~ 33.13 TORN)
0x093Fc1387349F65d6382F36dfcb209509B8213f3 = 9450092762258946997 (~ 9.45 TORN)
0x3E6Dd7771f2819136f17f8EeBD6616CAD09Ed012 = 31488252123340309847 (~ 31.49 TORN)
0x6b69c30354Cef94ee9d77DBC7BD268B4A6683825 = 67307670852095513804 (~ 67.31 TORN)
0xc8d51E5a9293426d678400f05fDF8395fFE34187 = 1159086427507011821 (~ 1.16 TORN)
0x1CE7DC66CC98c61A573105514d073D64a9a8608f = 26389224886673669669 (~ 26.39 TORN)
0xD3069f6050A3dd4ECCc27b6A66E5C401aB59DeD5 = 1131703913861582424146 (~ 1131.70 TORN)
0xC796A650D6e7869D1c22642Bf0a4c7D5b3bbed32 = 6099909659507227766 (~ 6.10 TORN)
0xc6DFfE2C1C910A3E049b29638bE0286645054f3C = 29472347834775340843 (~ 29.47 TORN)
0x2753dEeD6Fc665ff159c94aEAFb8a19E4525831E = 25294315679682630786 (~ 25.29 TORN)
0x0d4E989c7620C8749c9417d2BF218896C767B606 = 3364398457228954809190 (~ 3364.40 TORN)
0x4aDD4bC3B1E9075E37C7FF6728Fe67716244F44C = 1329614003989061149 (~ 1.33 TORN)
0x4963C9C61f48272969587c27aA4e6384798d48cA = 146304190741347394112 (~ 146.30 TORN)
0x6fb4becf05497b79F0fCF61CfA5075efAA137DDF = 24433501822630023422 (~ 24.43 TORN)
0x6f9BB7e454f5B3eb2310343f0E99269dC2BB8A1d = 7311696825863967912 (~ 7.31 TORN)
0xb4e39F6D3d386E98AF0C064E087aCBC9A8F08944 = 31036510205773583247 (~ 31.04 TORN)
0x2462375371935c8122895e701380A06CE815B0FD = 45031939040278717234 (~ 45.03 TORN)
0x24f04EC62597C11752c47448228B63052ED3158a = 90815074343246091464 (~ 90.82 TORN)
0xA11109126af2c5904fdc5b6203108Fef5770E85E = 17491569071641631106 (~ 17.49 TORN)
0x8904FFC6Aa039dB5941De11309a42372F3F7D2FD = 89018897961346317265 (~ 89.02 TORN)
0x95Be36B3F6a5DC958c59a4a81FdF0BEE671f26F3 = 92179556551282444104 (~ 92.18 TORN)
0xa729adDeFe1fa7BCe87053ed55D55EDdDD13De60 = 21709183619942034343 (~ 21.71 TORN)
0x409ac9C16B2CD569EC06bb9eceF97eeFDe0e8054 = 15006870038073374755 (~ 15.01 TORN)
0xdF3c8E63677C79b24608bDed80CeD65667513BcB = 541718227741233200336 (~ 541.72 TORN)
0xF7CA6e80753b7ef2647D1B391efbbfefaD03a25C = 19295606810439445963 (~ 19.30 TORN)
0x9265f86d58b348060E43216f968bda8A6Bb63572 = 98620127775202999418 (~ 98.62 TORN)
0xCfbd27a6F88184Ff7F3C2cBC79a673Cd440f3f8c = 5924335043678903077 (~ 5.92 TORN)
0xcE1fFD4cfE424757D6e597293566195Fba6f4cD8 = 110373688594429476293 (~ 110.37 TORN)
0x08e65423a1553e1e952737777Fa1739bD48AD6Ce = 16803855495656227235 (~ 16.80 TORN)
0xA4882E304906DA516fCf9851AA87d6BA251755Ed = 1953120388485130071 (~ 1.95 TORN)
0x2E63Dbd91657dc5fa97213Ba6a1AEb5f194805F6 = 251251776059847254774 (~ 251.25 TORN)
0xe509bd972346DB660D29f811F9302A065C10D545 = 28817656632797696252 (~ 28.82 TORN)
0x68d1C68E033A0594737255953abFd511bEEd7A8f = 1030951197409454477 (~ 1.03 TORN)
0x4273397532A8dF43a6607C4441e3EB6edF63acf3 = 31104820080384860799 (~ 31.10 TORN)
0x378FdAa857d5E1340eBCc9975326A41ECe2c9B4B = 14112288396935461682 (~ 14.11 TORN)
0x4672a4dD8390b712d555739066749Cf087ce03B5 = 3888614225495013923 (~ 3.89 TORN)
0xf32b28572000130714a36d33531aE621a30aDd8f = 9027844878265729121 (~ 9.03 TORN)
0xA556a5a50d2C786617263414878214A9159d1433 = 16276470593499298613 (~ 16.28 TORN)
0x12168AEa666Be756E1aD0595fEd9C306442a4103 = 36412749452500453957 (~ 36.41 TORN)
0xE70eF2B9A263855535727Ee014C6Ffaf01881Ae3 = 35128546559175901644 (~ 35.13 TORN)
0x96499F1DAF16C20736B15345B3bC961027aBf9A9 = 3132594551228880028 (~ 3.13 TORN)
0x2b153c4F0648A1fBF74387b30B2364793e5B78F2 = 11840570785343594608 (~ 11.84 TORN)
0x7803Ab56769dDa5432CDbd63749a6BEeb3180008 = 67349370537699327633 (~ 67.35 TORN)
0x4F50d47D20380172746527bbeAa274940C38EFAC = 109134986268076670848 (~ 109.13 TORN)
0x237cfe337CD641d3a45C8A2ed3540D9b4De5e1f8 = 16924961748013267657 (~ 16.92 TORN)
0x89bFD67276dfEFeDCdc39f186024AeC773C9deb1 = 16206266280488707844 (~ 16.21 TORN)
0x05a4448597935c508e4ad0D2CF56d56beDb246Ce = 5564985557053713810 (~ 5.56 TORN)
0xFeAe121618049802Ccb40f094536a7B186642699 = 26051172063635311610 (~ 26.05 TORN)
0x069Dd24FC8ABEC3708841a4726617c17BC74d5eC = 28952332778826791728 (~ 28.95 TORN)
0x11A2A99396c1BC4D878c9ac86401d38d5f2f4caE = 61198275715198687233 (~ 61.20 TORN)
0x26D3b88d464A575784Be70Edc5F9290dC5e296DB = 143520553783208184300 (~ 143.52 TORN)
0x4ffc1A4bD191935C603df061065Ce97C25C70687 = 1104677208403973125 (~ 1.10 TORN)
0x7Abbdbd51813d85B448F887b946719Dd2B09D6F7 = 28496157399564678982 (~ 28.50 TORN)
0xEb89EfE3Ed80288E310c5529e1E242b4ab56E196 = 10158103172727951367 (~ 10.16 TORN)
0x3C7ddEB357e4341A18cfC587343a4463a280B9c5 = 15766263220154597250 (~ 15.77 TORN)
0x8633ADAf2438703d6D7f953829A4fe0c95FbeC44 = 14574784535592207846 (~ 14.57 TORN)
0xAD142B79f2500Bf194C174f06C7dC901A2CdA74f = 7123937386942958617 (~ 7.12 TORN)
0x4fFDAeB9f4ec23254B6DFA41eEeF2C8d23f8c554 = 33194297731999668131 (~ 33.19 TORN)
0x47789dFc4a68726eaE0eB930D91f4a6bEeC8b1Eb = 3487926054013619640 (~ 3.49 TORN)
0xf5626231B3C6A75Ec68858A4Ef43Cdb7Afb3e642 = 17275370664752538996 (~ 17.28 TORN)
0x369ae1DC8978Fd4D7C73eD322454019db999343F = 1528376231901983047 (~ 1.53 TORN)
0xb03384cA294C06E8d04B08412E8467ff2363E5E3 = 211578919069650342377 (~ 211.58 TORN)
0xD483C2bDae0d41EF8f1A3A0B1B0f7f123aab4bA9 = 16797954501761561253 (~ 16.80 TORN)
0x68eCbC648655Ba1aA045B2f50A219190dE97f9FD = 20547718671359444564 (~ 20.55 TORN)
0x528db62f1828b284EB2041296aecb4dAC9F0515c = 4165181895662237060 (~ 4.17 TORN)
0x6A3738c6299f45c31697aceA647D49EdCC9C28A4 = 97760260576325925251 (~ 97.76 TORN)
0xBF224728D032054a7c293eD9BBf94F4Ce06E3C5d = 7449726293008071375 (~ 7.45 TORN)
0xc74d1af789F5A0223448Db69a1B56c84845e17d5 = 86279890580822470582 (~ 86.28 TORN)
0x5a8345CA0017EAc8A6b699f00e77b6a66bc671D3 = 2677176111126764125 (~ 2.68 TORN)
0x26D5060620F39Cd8011bDa8b883488239444fDa4 = 1516607929338102731 (~ 1.52 TORN)
0xDf90418385aF4E9833603069DEaF7C71d76f83a2 = 155357572254018554532 (~ 155.36 TORN)
0x8B11c69BfC02fE187543e87611207b253Ca62081 = 141988817509681621914 (~ 141.99 TORN)
0x6147E468231f2Df9fa370d45EddddE9010B765cC = 83415353831892079722 (~ 83.42 TORN)
0xA1F12899eE593a41cd0D640706CE3feAfcCbA845 = 1005970156314423558 (~ 1.01 TORN)
0x851a7e50F5BE154D3596276a44cA013cD4E5C3Ee = 3874585207860333623 (~ 3.87 TORN)
0x38dD8aF98907064f1Eea0540b3aB4da56DB28497 = 5642347071859268579 (~ 5.64 TORN)
0xa212F0fDD9e6cacfa6fEC8Bf56207eA344C66afD = 2212922409934864847 (~ 2.21 TORN)
0x7305303A1511Ecd0583bAc2031D878E36B3c7fD3 = 2246547675850021513 (~ 2.25 TORN)
0x16eb5Fbb2a5c7dAbC2c7688482378e89471d5724 = 56528851406540169265 (~ 56.53 TORN)
0x356eE97D7D560af2E97E9f9EEe56b2e09D60e6F5 = 2357571123330435682004 (~ 2357.57 TORN)
0x000AD8F56D3408abE29466189612d1B7B19E4420 = 8944601804979063344 (~ 8.94 TORN)
0xc82ceD242a7c064EC0ef3742BDea830aEB46D614 = 225374382403472958564 (~ 225.37 TORN)
0xAd412239848f37a5dDb8fAbb523D05F4FFdB2651 = 1852483360172530551 (~ 1.85 TORN)
0x21c756E2c7B898BDa8a3b2A77e4C56D855Ab9414 = 52258855596837389305 (~ 52.26 TORN)
0xa6Ba7cddc1c4fBfFBA96eCE341F9baA1c35fA76e = 10324733292812452226 (~ 10.32 TORN)
0xd90825b15f70B64f81BaB600F7F56Fe3F86747CE = 3354805705660717938 (~ 3.35 TORN)
0xFB96D60ce3ee83ed4BC71c6E0da10C537601b77C = 22611440234158131327 (~ 22.61 TORN)
0x6D6f1D15EBb0215B3613e99C4daFd5E1b9F5cC96 = 14791730194629501463 (~ 14.79 TORN)
0xb1Bf7F11E408463CC8F449F2433ccCe8945aa04b = 17864069861611643481 (~ 17.86 TORN)
0xeb0fCD59212E521918b514c64313eF5a3dd101f8 = 3901271037084752091 (~ 3.90 TORN)
0xaDACa82Bc5aCdc51f9439306CE853E23D9804095 = 229610218449354480332 (~ 229.61 TORN)
0x34DF0B83cf4F30683f8AB2Ac971a52A5f663FEb4 = 22958042522429606777 (~ 22.96 TORN)
0x16525102F287C20B4C432548E553576F1C4694E8 = 1560109119830653830 (~ 1.56 TORN)
0x9901bbcFfb45fA06d7D3fc17858599b2EBfA7F98 = 4647859755961887347 (~ 4.65 TORN)
0xF2Ba32f180B243D3138DEd0E1F1BdbdcCBCE0702 = 5519983644068960970 (~ 5.52 TORN)
0x7b22Fb198DceF415763c13661509Fd369Ef8B198 = 15252516305505956415 (~ 15.25 TORN)
0x3654EcfC4e406c8320DCE4Af95C318369488f6b6 = 35867894048125994013 (~ 35.87 TORN)
0xC380D86E375E0b4de213332a22eFb5943cfbcd26 = 33029862300700755690 (~ 33.03 TORN)
0xC2Bd458e3F08282D2195611Aa37dE9C2e93E02cC = 7474008907661241347 (~ 7.47 TORN)
0x9C258268d067ed41C7E6e6042671CE416713FBDE = 1173569337143956794 (~ 1.17 TORN)
0xFB75781F96B2B589a1d40C659c3b3C522b5D4876 = 37132672019373242644 (~ 37.13 TORN)
0x17B728b8B47952306671848d3beb799F1fb44A91 = 2661115072540344958 (~ 2.66 TORN)
0xbC063735a5b8bdd12611157E7E0F29D1570D892D = 105476579411544400855 (~ 105.48 TORN)
0x4E54A86bBeD09e75F3466E79A81BCDD0341a7C3F = 1059258680340063793 (~ 1.06 TORN)
0x0839aE5F7E675f8a9ac4afDBE0723116986e55b4 = 3875490507064413906 (~ 3.88 TORN)
0xe7c724F87EcFf8E2f563962f96b6c291cBD729cF = 51733651718901275551 (~ 51.73 TORN)
0x1fe7d323946A7C3B644528baA42eFf13056cd2B4 = 73872062802036390199 (~ 73.87 TORN)
0x32Af25467b00aAe516505B3331cfEc52092ea5BA = 2162614748223216488 (~ 2.16 TORN)
0x0eCD341cbcB8Ae2b6f61d497242e4Ad51b64183b = 5145936718002554228 (~ 5.15 TORN)
0x48c0477Bf79a59e505d26eB33c5b331502a511B2 = 49085362121291012983 (~ 49.09 TORN)
0xE5A5BfC1772D4A2b44Add05aae63026A89486C1B = 20972207440915443277 (~ 20.97 TORN)
0x27f6809603f051F227aD4B3C547825F5Ae1F8616 = 3800217976471907423 (~ 3.80 TORN)
0xc66f327Ef28f47ce41245F7F42Be5796DdAA45Fa = 15846925154344478196 (~ 15.85 TORN)
0xA103c48Dbe3E804C23a98C5f159cEb3305c28E7b = 3039820725899735674 (~ 3.04 TORN)
0xab03945BC97F6899902D4296Ff97cAE8dbdc1A11 = 66797846279254338952 (~ 66.80 TORN)
0xB945e8074C3e2F758B045Cb9a30066EE33CDB87E = 8960852709660572526 (~ 8.96 TORN)
0xDEB1c51514ee12d9F76Eb67AfCb7B4c33B466449 = 8131473545148842396 (~ 8.13 TORN)
0x00377B2FC0044Dec6507855eDd6531aF1755cCe4 = 187316100663496504711 (~ 187.32 TORN)
0xDaABa4C3a3026149a7a811bcb4B4EE9F23B61800 = 1342110570226429076 (~ 1.34 TORN)
0x10aab4B0EF76AA2AC9b5909e671517a1171B050E = 9816488209589379461 (~ 9.82 TORN)
0xD9D10dc5609d77F2A15FAa68414835A6ed19269B = 95363084515727944710 (~ 95.36 TORN)
0x71e989dC58c879D26C2efDce097edeE505A57a28 = 2088864348657925026 (~ 2.09 TORN)
0xdF20a1124d6B44e19ad75675a622d9c9669E59B6 = 88352293222343728212 (~ 88.35 TORN)
0xaA8B1a05dF753F54DE787a752cB9E7808f447820 = 23946074798869806567 (~ 23.95 TORN)
0x7E5c540b343fB854782617dECc82FBc1745b5591 = 14767739390099031589 (~ 14.77 TORN)
0x209D49fda266C0AB257648555f8459F90e154aEd = 129761028103842230426 (~ 129.76 TORN)
0xF4d2D64D1f9190A9daB0960c80e5C73c04710184 = 20259718574398138635 (~ 20.26 TORN)
0xc4313fCdCC95e1352c8E9892EACC43f3C0302241 = 9114984026955066440 (~ 9.11 TORN)
0xf68de31d7fC80A70959966F9Aa78e86A7b418A10 = 6793910531583492359 (~ 6.79 TORN)
0x27358dcAfE169293640ABcd5a50B2156e3CA7D0b = 1396572756872979834 (~ 1.40 TORN)
0x47B9cCa44fe405D12ff56aaCd1Df6dbA4A79Ae28 = 116401415234644535634 (~ 116.40 TORN)
0xefb3141fF2CC4BAcC32274560F67Ce44A02b47a2 = 2695994774470615737 (~ 2.70 TORN)
0xc0466d5E152d97fE028CDAF761Dddd578637a494 = 7703236971827668108 (~ 7.70 TORN)
0x213A8b4A4719D7C74377Bb2a582e7Aa1c5d4d6e4 = 1906251511229877016 (~ 1.91 TORN)
0x4ce41B12e79Aba3A0B16D1A6826c5687085A8e68 = 12376605768375176829 (~ 12.38 TORN)
0x71917F124be5C0Cd97aDBE7AB472f4C82577B542 = 19387564291842605250 (~ 19.39 TORN)
0x2a2a1FB6382a528F1B23E76d3Ed6F4C17A9e5966 = 78211613640632999853 (~ 78.21 TORN)
0x0BecabF81208CCF08b320334Ee26f65fB28B7B7C = 19706556422398085618 (~ 19.71 TORN)
0x343F48B346b0cE11342ffdEDaDAC4135E1FD525a = 52474802671702736494 (~ 52.47 TORN)
0x408BD39659242CC87abCC578c76f41f730CF67d6 = 5361177370238939271 (~ 5.36 TORN)
0x15c15B2a88406f6434e0902639B7B353458e5498 = 7280010872916183974 (~ 7.28 TORN)
0x1E7f4bA9ECc1F74467851dA248693bd0f66B657A = 2268046082115219840 (~ 2.27 TORN)
0x0F46576F3b8b0ed6522e4b200Df53ac73251b911 = 43106930066979612507 (~ 43.11 TORN)
0xaAaC34d30d6938787c653AAfB922bc20bFa9C512 = 56033971131839936055 (~ 56.03 TORN)
0xDE092c055E3a8486Fa2441A5685448D4851C2DBa = 5089562467001778052 (~ 5.09 TORN)
0x4e1083f454cAE424c8C1165D4f8e0Ef5e462cBa7 = 10821472545808036648 (~ 10.82 TORN)
0x758aB8aC42a8c44dF8C31129Db146c65c2669391 = 91872937975269665468 (~ 91.87 TORN)
0xb3a7FBC2fa38C18ad4433aE93FE7F215Fd2D057f = 2143380905682922209 (~ 2.14 TORN)
0x149da2CB603A8818Fb2d703D72D46390Cd09A6D9 = 33141454797818273137 (~ 33.14 TORN)
0xea76eE7035aF65410D290cB7E2Ed8Fc01C395266 = 6866348488289388870 (~ 6.87 TORN)
0xC2e6B265cb965DED721566f0f9Eb5ab1A6162A21 = 22971027302959450151 (~ 22.97 TORN)
0x4d6A11EbEC10E133A5007578Ad792F765ED724F2 = 1523390814593599013009 (~ 1523.39 TORN)
0xaF305fEfDc439cb1CA9FAC2f9d271fD2CC7B3F05 = 34558215533487668461 (~ 34.56 TORN)
0x164f9ECFc5Ec74fAC1Ba1ca28E71Fd57FeadCD27 = 43630581854870958303 (~ 43.63 TORN)
0xddbc1841BE23b2ab55501Deb4d6bc39E3f8AA2d7 = 57697184564150419473 (~ 57.70 TORN)
0x7b5edF38D955dd9deC103aF05c2D68B28e02Ad90 = 990145869312977038005 (~ 990.15 TORN)
0xE4143f6377AEcd7193b9731d1C28815b57C4f5Ab = 794513313076462735653 (~ 794.51 TORN)
0x9Fd4d0dE8A3A8a8F2aC003A5ece295CE9512d9c6 = 36016585133757988164 (~ 36.02 TORN)
0x3390937ec4D4b94002BCacf65D2F98594b4980eF = 6453311584351983424 (~ 6.45 TORN)
0xA207ac236dFdeE6F885d0Cc1D0C8100b46fA91EE = 1450736948351239615 (~ 1.45 TORN)
0xa39fE8D3094e2D69Bd579Dc2bc2fc44Feb54Fc57 = 451325359651864296017 (~ 451.33 TORN)
0xc8E68D674Df0Eab152926C4F0EE7D0ac0745c715 = 37874059988948844769 (~ 37.87 TORN)
0xc71cB68d38dF4E2190128DCb7E39bD1e72Fc3A2F = 13498777595192377744 (~ 13.50 TORN)
0x3E40eCBf8eB74fB708b8cCeA28c1C9312697aFDd = 2547293201582353144 (~ 2.55 TORN)
0x1e4d844528F3C9890bE6c3de38Dc8c695Cd06B20 = 27853939827678230227 (~ 27.85 TORN)
0x45a4a7b51f8691Bd52988d8ee3f01F7518f6B056 = 11167199970888954708 (~ 11.17 TORN)
0x4BF646757dA7067E683EB20cD122AfFBc0E67e39 = 4512233232588903004 (~ 4.51 TORN)
0xb6242d8F02bA15917A84bD83C2eeee0e45288a03 = 9403472182706909584 (~ 9.40 TORN)
0x6f4CbC2E042ed0D1Df4bf14d00eEb52Ff1E0e5F8 = 9748334349185074783 (~ 9.75 TORN)
0x92374BA66EE27f207F9efff0837FF6D707006304 = 58838358111071620908 (~ 58.84 TORN)
0x6dF07d3864c5F7ee564B5920199374C0b864E7d6 = 664290901673954681162 (~ 664.29 TORN)
0x04700e0Ef1bCD91d36e7CE63FE93d651DFB272cA = 13074452933044923946 (~ 13.07 TORN)
0x8a1d5F23566c802CccEF7f02d5f216c37c8e44aD = 1481488396230202148 (~ 1.48 TORN)
0xfa2176D82cbA00d54998E6C37616b75ceCef08a0 = 8723821105751268318 (~ 8.72 TORN)
0xE4fB69507Cfa7d0654E392E6C1e401918123a85a = 6672203296221673628 (~ 6.67 TORN)
0x592340957eBC9e4Afb0E9Af221d06fDDDF789de9 = 3571261202347432870 (~ 3.57 TORN)
0x000000Cd6521Ed1a65FAe0678eA15aF4EEAD74fe = 1431414111205873746 (~ 1.43 TORN)
0xC49415493eB3Ec64a0F13D8AA5056f1CfC4ce35c = 1213791173344605522 (~ 1.21 TORN)
0xa6eDC956290b7Ce416c5d8EDc67E1C32506Fe099 = 366757732355918570636 (~ 366.76 TORN)
0xbd0fac9A19E8E19F6245eD20411E22D4786752c8 = 4355144205984655655 (~ 4.36 TORN)

2863
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

@ -3,6 +3,7 @@
"version": "1.0.0",
"description": "Proposal to restore old rewards value (as before hack) after redeploying Staking contract",
"scripts": {
"computeRewards": "npx ts-node scripts/writeStakersData.ts",
"test": "echo \"Error: no test specified\" && exit 1"
},
"repository": {
@ -10,5 +11,15 @@
"url": "https://git.tornado.ws/Theo/proposal-23-restore-rewards"
},
"author": "Theo",
"license": "MIT"
"license": "MIT",
"dependencies": {
"bignumber.js": "^9.1.1",
"dotenv": "^16.1.3",
"web3": "^1.10.0",
"web3-utils": "^1.10.0"
},
"devDependencies": {
"ts-node": "^10.9.1",
"typescript": "^5.1.3"
}
}

@ -0,0 +1,20 @@
import fs from 'fs';
import path from "path";
import BigNumber from "bignumber.js";
import { getStakersWithRewardsBeforeHack } from '../utils/stakers';
async function main() {
const stakersWithRewardsBeforeHack = await getStakersWithRewardsBeforeHack();
const rewardsSum = stakersWithRewardsBeforeHack.reduce((acc, staker) => acc.plus(staker.rewardBalance), BigNumber(0));
console.log("Sum of rewards before hack:", rewardsSum.div(1e18).toFixed(2), "TORN");
const stakersDisplayedInfo = stakersWithRewardsBeforeHack.map(staker => {
return `${staker.address} = ${staker.rewardBalance.toString(10)} (~ ${staker.rewardBalance.div(1e18).toFixed(2)} TORN)`;
})
fs.writeFileSync(path.join("data", "rewardsBeforeHack.txt"), stakersDisplayedInfo.join('\n'), { flag: "wx" });
}
main();

109
tsconfig.json Normal file

@ -0,0 +1,109 @@
{
"compilerOptions": {
/* Visit https://aka.ms/tsconfig to read more about this file */
/* Projects */
// "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */
// "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */
// "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */
// "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */
// "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */
// "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */
/* Language and Environment */
"target": "ES2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */
// "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */
// "jsx": "preserve", /* Specify what JSX code is generated. */
// "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */
// "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */
// "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */
// "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */
// "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */
// "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */
// "noLib": true, /* Disable including any library files, including the default lib.d.ts. */
// "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */
// "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */
/* Modules */
"module": "CommonJS", /* Specify what module code is generated. */
// "rootDir": "./", /* Specify the root folder within your source files. */
// "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */
// "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */
// "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */
// "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */
// "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */
// "types": [], /* Specify type package names to be included without being referenced in a source file. */
// "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
// "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */
// "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */
// "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */
// "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */
// "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */
"resolveJsonModule": true, /* Enable importing .json files. */
// "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */
// "noResolve": true, /* Disallow 'import's, 'require's or '<reference>'s from expanding the number of files TypeScript should add to a project. */
/* JavaScript Support */
// "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */
// "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */
// "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */
/* Emit */
// "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */
// "declarationMap": true, /* Create sourcemaps for d.ts files. */
// "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */
// "sourceMap": true, /* Create source map files for emitted JavaScript files. */
// "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */
// "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */
"outDir": "./dist", /* Specify an output folder for all emitted files. */
// "removeComments": true, /* Disable emitting comments. */
// "noEmit": true, /* Disable emitting files from a compilation. */
// "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */
// "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */
// "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */
// "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */
// "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
// "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */
// "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */
// "newLine": "crlf", /* Set the newline character for emitting files. */
// "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */
// "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */
// "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */
// "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */
// "declarationDir": "./", /* Specify the output directory for generated declaration files. */
// "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */
/* Interop Constraints */
// "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */
// "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */
// "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */
"esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */
// "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */
"forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */
/* Type Checking */
"strict": true, /* Enable all strict type-checking options. */
// "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */
// "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */
// "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */
// "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */
// "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */
// "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */
// "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */
// "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */
// "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */
// "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */
// "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */
// "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */
// "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */
// "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */
// "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */
// "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */
// "allowUnusedLabels": true, /* Disable error reporting for unused labels. */
// "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */
/* Completeness */
// "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */
"skipLibCheck": true /* Skip type checking all .d.ts files. */
}
}

8
utils/@types/staker.ts Normal file

@ -0,0 +1,8 @@
import BigNumber from "bignumber.js";
export type EthAddress = string;
export interface IStaker {
address: EthAddress,
rewardBalance: BigNumber
}

5
utils/config.ts Normal file

@ -0,0 +1,5 @@
export const governanceAddress = "0x5efda50f22d34F262c29268506C5Fa42cB56A1Ce";
export const oldStakingAddress = "0x2FC93484614a34f26F7970CBB94615bA109BB4bf";
export const governanceDeployedBlock = 11474695;
export const governanceRewardsProposalBlock = 14173399;
export const hackBlock = 17299139;

47
utils/stakers.ts Normal file

@ -0,0 +1,47 @@
import Web3 from "web3";
import BigNumber from "bignumber.js"
import { AbiItem } from 'web3-utils';
import { EthAddress, IStaker } from "./@types/staker";
import * as dotenv from "dotenv";
import { governanceAddress, governanceRewardsProposalBlock, hackBlock, oldStakingAddress } from "./config";
import GovernanceAbi from "../abi/GovernanceAbi.json";
import StakingAbi from "../abi/StakingABI.json";
dotenv.config();
const web3 = new Web3(process.env.MAINNET_RPC_URL as string);
function getGovernanceFunctionSelector(functionName: string): string {
const lockFunctionAbi = GovernanceAbi.find(item => item.name == functionName);
if (!lockFunctionAbi) throw new Error(`Cannot find function ${functionName} in Governance contract ABI`);
const selector = web3.eth.abi.encodeFunctionSignature(lockFunctionAbi as AbiItem);
return selector;
}
async function getAddressesStakersWithProssibleRewards(): Promise<Array<EthAddress>> {
const governanceContract = new web3.eth.Contract(GovernanceAbi as AbiItem[], governanceAddress);
const rewardsUpdateEvents =
await governanceContract.getPastEvents("RewardUpdateSuccessful", { fromBlock: governanceRewardsProposalBlock });
const governanceStakers = rewardsUpdateEvents.map(event => event.returnValues.account as string);
return [...new Set(governanceStakers)];
}
export async function getStakersWithRewardsBeforeHack(): Promise<Array<IStaker>> {
const stakingContract = new web3.eth.Contract(StakingAbi as AbiItem[], oldStakingAddress);
const stakersAddresses = await getAddressesStakersWithProssibleRewards();
let stakersWithRewardsBeforeHack: Array<IStaker> = [];
for (const address of stakersAddresses) {
const rewardsBeforeHack = await stakingContract.methods.checkReward(address).call({}, hackBlock - 1);
if (BigNumber(rewardsBeforeHack).div(1e18).isGreaterThan(1))
stakersWithRewardsBeforeHack.push({ address, rewardBalance: BigNumber(rewardsBeforeHack) });
}
return stakersWithRewardsBeforeHack;
}