Transaction Hash:
Block:
22027944 at Mar-12-2025 02:56:59 AM +UTC
Transaction Fee:
0.009098561 ETH
$22.17
Gas Used:
9,098,561 Gas / 1 Gwei
Account State Difference:
Address | Before | After | State Difference | ||
---|---|---|---|---|---|
0x0038E652...24Daff3D4 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x0157dCBA...410C4E533 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x01E342C1...f1cd9811f |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x027C6869...d295B2604 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x02ff80fd...8c73aB1F5 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x0338C0A0...885cA70A8 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x05E4d47B...85DA3f0D0 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x05e729b6...5d74A16aD |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x070174F4...95ff31473 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x07146770...7cD597bfB |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x093Bc271...475d72315 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x0a41A918...27B81Ec08 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x0Ab34037...394B45Ca4 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x0CC3118F...626C8f3F8 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x0D34014b...0193D96eF |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x0e6D6cCc...b3BBCa2d0 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x0f0EEC7e...d0054fA58 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x0f49334F...6af21B5CB |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x0f6FFf3F...bd85869C9 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x112F0318...6A24fB84e |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x11552D86...E210F3a9B |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x116BA91F...4d0eB3Ccc |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x116BB7cb...4b3FCE8A7 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x127E32a3...4eA634F50 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x12f272Ee...16e41E052 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x14123790...abD436a74 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x148D99D6...a4EF9866b |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x17cb8427...55E24d2d2 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x17dfd1Cd...c5A276854 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x1926Ae24...5E26ED5AF |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x1c81ecC1...B657454F8 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x1DBdCEEb...7504B3bBA |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x1E693a03...b77Fb93c7 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x1f7d9EDA...15f24b6B6 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x21BDA4fA...2369b43d3 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x223ce1DF...5A9c717c8 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x22ACdb50...9e045ef83 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x23b8A2F3...E4C1D628b |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x2514c1dC...95b41E358 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x25887c8D...b034ECebd |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x2700849A...12A57Ca07 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x27350aE6...a21Dd8266 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x2B0f44Af...3EFA7a7D7 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x2C1cba33...0Fe2D6975 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x2eADe276...8f9135Ee0 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x302666fd...a0c6456b6 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x306f504E...89C183AEA |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x315db6f0...dd6e2f6f1 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x31931480...6f49AC32b |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x33E2c92C...C22eb63b6 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x355678Aa...A0BB9B6ac |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x362a3636...40e1f59Ad |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x3980F914...46cc05aEd |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x3c036597...f4159A37c |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x3CF024C0...6C7fBDC59 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x3d7A8764...bDD5aE45e |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x3ed6eEC5...C27B54Adb |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x4000Df69...65a53E8Da |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x41D23fE7...fCFf00F40 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x429b4008...Ef4b37e70 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x4370Ae62...47423D775 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x44A32E07...8783CeFd4 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x465A0F82...7746a115A |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x469fD8C5...A2da7967c | |||||
0x476B79E4...E1637e789 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x4838B106...B0BAD5f97
Miner
| (Titan Builder) | 11.098948071420594188 Eth | 11.101071485561843386 Eth | 0.002123414141249198 | |
0x4bd0De2D...CdEB95b33 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x4C9dbbe2...155aA37CD |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x500B70d8...57EcD3231 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x509EEc7d...9a45C556d |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x543E1eE1...c095b77A0 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x56A93724...5462B18a7 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x5716Ac15...6D5D52159 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x58e17bC2...deBFa7B0D |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x59Bc3D7E...D11732d5B |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x5B217fa7...3e3f88434 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x5DC372A9...2455F1315 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x5e17aE55...a1E90b2c0 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x5F8B6399...6467E2515 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x6129B8B7...7c82B5cdC |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x62dCAb94...3e27B5326 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x644eB813...ba5e0A63A |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x66154803...e1E1703d9 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x66579606...51a9b753E |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x687721Fc...E95239D79 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x69452c65...393208E11 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x69664249...E84986F4D |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x6bed25Eb...AAcd9A298 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x6ca3C533...461718AF5 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x6D9C26c8...524E5Cbd3 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x6De841b7...8AcE190Df |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x6E86B1aA...3FD1f852C |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x6eF0e5d7...2EAF7bBd0 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x70F25A13...558cEC1D2 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x718d50d9...9ff2C0A04 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x7317FE4E...4bC64b3CB |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x735581Fe...545E7835D |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x73A61Fa8...4D9981929 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x7439c7E4...3Cf9E6fBF |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x74eE0579...1C0B25993 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x750CF161...4c4444e1b |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x75246676...bbb3522d4 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x77109d79...2F03Cc13F |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x77a3032d...1d95CCB61 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x7840A748...b989AcC17 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x7D3B18d2...372996C99 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x7e13aaD1...dCeE80B7C |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x81037B4F...7E61D2d93 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x83583bc4...318Ad0657 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x83f1Ce91...b6a5F617d |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x865dB3Da...C72dA69ac |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x87597995...d7E777844 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x88eA152e...57039B4B9 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x8903EBD4...B16E86C20 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x8A82BCB3...e3553F98c |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x8aA3BD75...8C33A8b2D |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x8aE9e5aB...4231E25FB |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x8b194177...c8Ed469a2 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x8bdCA84a...89e2071aE |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x8cb7fbac...13c6fbE4a |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x8E1A37EF...D57395E0b |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x8ed2B888...c58082205 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x8Fa5d925...80752F1A8 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x91388F1c...Fc1c634AD |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x92792768...9A69f5596 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x94a8f25b...AB0d48796 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x9722DB66...2C98C1a49 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x975b1d75...fca084257 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x9a57c42C...87f3501c4 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x9c224AFF...bf29f7fC0 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x9cb9FdAA...b8874AD25 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0x9CEab8E5...c105B933F |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0xA310BB68...aA00eb119 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0xA6a6Ba5b...490490F80 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0xa6adEfC6...78871e3Cb |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0xA80F7Ed1...0eAE22A83 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0xa81694d5...8e305412C |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0xAbCf3e6E...42749aFAA |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0xaC16d0BE...B0a0a5cB0 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0xaD0793d0...01127D9CB |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0xaf284982...40DBFB8Da |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0xAF5a8a3C...60f81F258 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0xAf5fEcbF...6945Bd477 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0xaff2a738...0321ABE46 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0xb10aFC83...6681882Df |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0xB33cf3c0...cC802Fc4e |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0xB54D552d...0Bb9988ae |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0xB7305C79...088196153 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0xb77a2aCb...43E090122 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0xB79df76C...54039851A |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0xB7Cb1D32...816e0BE78 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0xb7cfC997...88Ff325D7 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0xC2822F5e...6aED9E397 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0xC79b939A...Fa06099D6 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0xC945B9FC...08C0cc698 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0xc98D869A...9cfD7B623 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0xcb1684B5...8a9e5C2ce |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0xCC56c73D...c371A9b4d |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0xceFD4B35...b7d5D281B |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0xCF679e4C...f402E5727 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0xCfc14032...06EC8153E |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0xD138c774...759e261e3 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0xd201A185...39159c4B6 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0xD23333d7...54D6f6Fc8 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0xD2C336B1...481F16f73 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0xD2dC1669...E224b0e80 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0xD33D162E...2d691c761 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0xD64D4d43...6abe8A3ad |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0xd6ead8E4...C1dBd4BE4 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0xD7e23be9...1c11C9eC7 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0xD7eDEa57...071b9A6b5 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0xD927B669...12C758204 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0xD9348A08...e62538D0E |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0xdAB23910...bC2ae3AD4 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0xDc5D4341...72F7322ca |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0xdd5575e4...37994eA3B |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0xddBA743A...10cF4ad14 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0xDe4186b4...195dD9174 |
9.09192041125 Eth
Nonce: 286
|
9.08282185025 Eth
Nonce: 287
| 0.009098561 | ||
0xdFA44b83...0a2A74680 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0xdfA63F4E...A221AB044 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0xe004E3a3...A20Af084A |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0xE618194C...7155c9067 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0xE6F3c0DC...64270bEcd |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0xEA40778c...d4F5c68bF |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0xea424423...F45E65732 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0xEC159b3C...23C586492 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0xeE640225...7AF886040 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0xeeb8FAAC...FCA231C0b |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0xF1196Bc1...4A2aA1E6A |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0xF15d654E...889aA218e |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0xf2127477...4ac839152 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0xF32c5a54...078b9277A |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0xF3D15255...BcbA4CC20 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0xf477A922...5FDb28967 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0xf54BD370...269dcf973 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0xf608dd50...1636FfAE4 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0xf6ee39a5...9d6654726 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0xF80724D0...ff8976aDd |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0xF94F038c...e39cca743 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0xFc824b24...23a350172 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0xfd5292a2...0cE1C2F46 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0xFEE4077E...dB45F2208 |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
| |||
0xFF7eb7ef...312dA965e |
0 Eth
Nonce: 0
|
0 Eth
Nonce: 1
|
Execution Trace
ProxyFactory.deployNewInstanceBatch( from=57001, instanceAmount=200 ) => ( [0xdFA44b83bbE740dbf6833afE8318CE80a2A74680, 0xFEE4077E75408C725F1c88Ea5078BF0dB45F2208, 0x01E342C1DE30CFC80a5434afD0B8a2df1cd9811f, 0xAf5fEcbF18C1afB114e352218B296C96945Bd477, 0x58e17bC2a68Eb33a9850cDD82dfa3c6deBFa7B0D, 0xeeb8FAAC691d82eE0306dB233cB93eEFCA231C0b, 0x44A32E07139D85Ad68d49c1A683A96d8783CeFd4, 0x94a8f25b267B4fF255af6d280Cf3324AB0d48796, 0x3193148038feECe51A91B07728336286f49AC32b, 0x6615480333180C2d5a82BbC70279a01e1E1703d9, 0x3CF024C01daf43e41815B75b77862d26C7fBDC59, 0x687721Fc0024ef6137485f892e1300eE95239D79, 0x56A937243Ca13bE23a17004680e56415462B18a7, 0x33E2c92C0E275e70950eb74A0894f3cC22eb63b6, 0x116BB7cb455191a309F28FB01314b864b3FCE8A7, 0xB33cf3c0d99BE2cF74C4dfe362b499ecC802Fc4e, 0x927927687d199686cA7cac7a69e63a69A69f5596, 0x116BA91FD598C041641BAc09EC181594d0eB3Ccc, 0x41D23fE72E74C9f473fb73B17d02c6bfCFf00F40, 0x8b194177cb7b3975818D38663174cA5c8Ed469a2, 0x0e6D6cCc718f71AA2361dE7381dCc2eb3BBCa2d0, 0xFF7eb7ef43506A7c5f96B82C9A4f70D312dA965e, 0x9722DB66A995590842889ba1741ff8C2C98C1a49, 0x112F0318598a4eF5f0c2B1969c17CB86A24fB84e, 0xceFD4B3566aF7637f9DF939da4DEa4Eb7d5D281B, 0x315db6f0d45241039d15C4b81004Ed9dd6e2f6f1, 0x093Bc271F278fc466FFBEB02E7d10C6475d72315, 0xe004E3a3a9d48B75eC6F813dB2a6576A20Af084A, 0x22ACdb506A2FFE7f5e6E93237609F3C9e045ef83, 0x1DBdCEEbeafA55B1B01C5169e6527887504B3bBA, 0x3ed6eEC51F92c0E7C5a3d9a3a7c9ff6C27B54Adb, 0x735581Fed46FC6D3e13EBf7819108DB545E7835D, 0xD927B6697C95E352bbD1eA1254E423C12C758204, 0x9a57c42C7d5cAb88032C1eCCF810Bdf87f3501c4, 0xf608dd503d1222A0Da7118a9B2bD30E1636FfAE4, 0x5F8B6399f69E634ec225D38122F6d646467E2515, 0x0038E652f91eC38Fa5aba2e601FF3f124Daff3D4, 0xA6a6Ba5bb3094780Aa58F60676D4Fd4490490F80, 0x88eA152eb7AC70f4EBaE3536BC4E57257039B4B9, 0x302666fd5fF9e159DD5F08b77c39b6ea0c6456b6, 0x83f1Ce91B5d92A14d531E93da54e2FDb6a5F617d, 0xB54D552d4465e0f2A9482262bc8f4770Bb9988ae, 0x05e729b6cfbbec0d11C745DA752bc555d74A16aD, 0x0157dCBA86620FBe43955D1924C2D66410C4E533, 0x543E1eE1D0c3e7379dC8Df7D9A7C05bc095b77A0, 0x1f7d9EDA774b16bC22af61d0e7eC49815f24b6B6, 0x73A61Fa850f3fbEDF57a50dD6D446a14D9981929, 0x6bed25Ebbe513cDF4DD35568858ef1aAAcd9A298, 0x070174F45B352cF93A0a3b7C9e5890195ff31473, 0x66579606c32Bc79cd5657267f34365A51a9b753E, 0xB79df76C6Cb44e074BFdb309705289054039851A, 0x9cb9FdAAe94519c7982531Ca9D7e9Eab8874AD25, 0xddBA743AE4BC9905A46537FBfa711D110cF4ad14, 0xD138c77440fB4B99f7375B8cafF7e3d759e261e3, 0x476B79E4ed7364656FDA21DaA2826aAE1637e789, 0x3c0365971f0de1F02F3799bf55181a5f4159A37c, 0xF80724D0C7ED1ebf31ECeE3E0b622DBff8976aDd, 0xA80F7Ed1b6f48DfCef9Dbf6948393ca0eAE22A83, 0x5B217fa788D3824aB91E20b3724FAD23e3f88434, 0x306f504E4ba8D5789f050706a27aDfa89C183AEA, 0xF32c5a54a5152EedE087DBFbE9dCbe2078b9277A, 0x6eF0e5d7A3823E773bb8657C8fcab482EAF7bBd0, 0xD23333d7E671C8561aafBbf626bCFde54D6f6Fc8, 0xB7305C79908499569378e230eEcC309088196153, 0x975b1d758E96134BC55578765A69D93fca084257, 0x8aE9e5aBf544D04C55Ec1A9B189097A4231E25FB, 0x0338C0A0b891f19B2bfe4451e4672EF885cA70A8, 0x62dCAb941006eFed6116509405033f03e27B5326, 0xCfc14032A1C3AB69569d4eFF8BC0f4806EC8153E, 0x02ff80fd53dF5653F2dD3d686A9cE828c73aB1F5, 0x127E32a34f1d7D09518aC7C39a651E64eA634F50, 0x81037B4F0C42b67c3409341Cd1dc11a7E61D2d93, 0x75246676B66814B7080cFA99Efc9D0Abbb3522d4, 0xaf2849824276e7B9c42B329c1e3dc3C40DBFB8Da, 0x59Bc3D7E1b2fD5C1eb57d845E0c44f7D11732d5B, 0x071467704c7c53f8A9fA7D08494A7D27cD597bfB, 0x74eE05796cB4B373A097301376598DB1C0B25993, 0x77109d794a30C41718eaCfd2d5A270a2F03Cc13F, 0x1c81ecC186aCBb0e1844a8432D02403B657454F8, 0xb7cfC9970e8127E1eb377DE295B176888Ff325D7, 0x11552D86Edad507781290060e72683CE210F3a9B, 0xD9348A085d526d0CB793bF496846254e62538D0E, 0x14123790cce5d1B7a1fDBfc0F1DFe7AabD436a74, 0x5716Ac15c55E183A8c083272e770cCf6D5D52159, 0xf6ee39a55638265537DbC339bFF0Fd09d6654726, 0x750CF161B49388ccB54aC1f9C7D3fB44c4444e1b, 0xd6ead8E4222e3d6A51ad02436A2EeBEC1dBd4BE4, 0x2B0f44Af5E1C19654Fb8598f2a021693EFA7a7D7, 0xCF679e4C058e6ffC9c58706935B89B8f402E5727, 0x9CEab8E584427D105e0c9be0786E890c105B933F, 0x7840A748e582b59941EB59602F6d893b989AcC17, 0x12f272EeDf255446E2acA1D7C500F2216e41E052, 0x05E4d47B98e1F793FCBB5430EDF169785DA3f0D0, 0x0f0EEC7ec1c4b1B6a61F744187c1F63d0054fA58, 0x2eADe276F42e18429F2e7fa5C0092648f9135Ee0, 0xaff2a7380D827fF31B6E25C0021B0950321ABE46, 0xa81694d5b85e6c91815AB21DE5606928e305412C, 0x500B70d858bD103190F6c047705910f57EcD3231, 0x4C9dbbe2729CaeB1449E043077037BB155aA37CD, 0xDc5D434163AFF6b83E31a14A26104B372F7322ca, 0xb10aFC83a436095565a0693d698d82A6681882Df, 0x865dB3DaD91453e3AE71AdEb55F07C3C72dA69ac, 0x17dfd1Cd7AE212706Eb9BC6102F228Cc5A276854, 0xF94F038c8416f736c01F6F0a3c8bE2Ce39cca743, 0x8903EBD4309E33EDA27574aDb8a534DB16E86C20, 0xC2822F5e3105d65b2c8466c2f4Dd10D6aED9E397, 0x8Fa5d9251714930Ae606Da4C055a9cC80752F1A8, 0x2700849A09C717590D94244dC81da9512A57Ca07, 0x9c224AFF6a7aD805de1E9aB870350a7bf29f7fC0, 0xCC56c73DE93d0C4F38F690b1eF608Bac371A9b4d, 0x0f49334F10f00BA24Df976a03961ee16af21B5CB, 0x644eB8132214A4E34d130aB71a7Cd92ba5e0A63A, 0x7D3B18d24126558935106471A0716a8372996C99, 0x23b8A2F339b1F8dEB9c7321abD6b766E4C1D628b, 0xf54BD3705711Ff988607d1255F1026d269dcf973, 0x27350aE6a431c2Fe0dd3d1A642b1991a21Dd8266, 0x83583bc4028AeaE1f15efBb0D1dC129318Ad0657, 0x362a3636A3212e2cd40D8a97A90c48140e1f59Ad, 0xE618194CCcC9fF6dcFE902ef4008aDd7155c9067, 0x8cb7fbacCcc29758ac4643d9a16122513c6fbE4a, 0xB7Cb1D32a1AE49dB953af30C0E9A256816e0BE78, 0xC945B9FC815A640FaAF64b708ac8A6608C0cc698, 0x7e13aaD14ed687D27FD17Db8A5a96BedCeE80B7C, 0x6D9C26c8F95Ba05ae7dF1e42C10c253524E5Cbd3, 0xAF5a8a3Cc017E6025bf23E1EbCbB67860f81F258, 0x69452c65a6BC58441129a2f72D46671393208E11, 0x3980F914af5D990790965e76c31B87546cc05aEd, 0xdAB239107b4b7846b5cDfD81EbABB8fbC2ae3AD4, 0x8A82BCB35DA407590F71A8319b626A8e3553F98c, 0x4000Df69207a724f5392a108ac9a3ee65a53E8Da, 0x148D99D66909eae22f995371f55ffe2a4EF9866b, 0x8ed2B888c09F915eb08Cb5d9362b573c58082205, 0xf212747736aeA132F1Cec65A8F3e12b4ac839152, 0xdfA63F4E4D6E7BcF9d9C8373A8e0228A221AB044, 0x8E1A37EF636242ccaC87B698ED686a3D57395E0b, 0xfd5292a2516E295162De74261639f710cE1C2F46, 0xaC16d0BE947aFfd897C2f2678BB5321B0a0a5cB0, 0x355678Aafb47d8161802aacB987B7FBA0BB9B6ac, 0xaD0793d0773f420F5EB055f582c13C301127D9CB, 0xC79b939A8db4990642EA8C781C70735Fa06099D6, 0xE6F3c0DCB62d40D4df66207e4fA362C64270bEcd, 0xeE64022571B0C2b25BEfd9F3c65D57f7AF886040, 0x3d7A8764f873C4f7C4a2130e0e09135bDD5aE45e, 0x91388F1c7cF011cf17d4A4dAc57CA5EFc1c634AD, 0x465A0F82d7C3243de63490D04C80AFf7746a115A, 0x1E693a0362E620cCE76E929E7d7Cd8bb77Fb93c7, 0xc98D869A7d179e9Fe2Da3B2e0FB28F09cfD7B623, 0x0CC3118F02A5a6e41401d77bA1c708f626C8f3F8, 0xD33D162EF5F6B40F395296512B20F372d691c761, 0x429b4008cc21be256929952917611f6Ef4b37e70, 0x875979955c0B3130e50dC55b62c80e3d7E777844, 0xEA40778c3F7FcD9144acdaf48a535dBd4F5c68bF, 0x5DC372A94309a0C4805B37B986c9C1E2455F1315, 0x0f6FFf3F81c16484b939BaDdfcE54FDbd85869C9, 0xD2C336B1c515f87Be6D78cf5f5006fb481F16f73, 0xea4244239cd819d722AD1e7EC8F0fD0F45E65732, 0x0Ab34037E804bf754C237B94e1e7396394B45Ca4, 0xdd5575e4a9F76a76a9A684298bCd74837994eA3B, 0xa6adEfC6e61D154a5C7e2CBFC4A55E978871e3Cb, 0xEC159b3Cded8b539e94B1F2E6C296C223C586492, 0x6129B8B7E4F26ED5D84d117e24758D07c82B5cdC, 0x6ca3C533DE6cC4Fb03f2ae024639757461718AF5, 0xAbCf3e6E37B51006E97bCea50FDB09742749aFAA, 0x77a3032d8d89673c9CBCEA00d5A63801d95CCB61, 0x21BDA4fAdd94CB17C27330Bf7CeA8B12369b43d3, 0xF1196Bc1f79841D5529Ba63D6d1AD354A2aA1E6A, 0xFc824b245BDAb8E4b99Ef6aD7aDf11A23a350172, 0x7317FE4EdD03e27c05Cce032395E2c14bC64b3CB, 0xA310BB68bE3F8c50ebd9C9D1Df73150aA00eb119, 0x0a41A918E66944756F1D1908E296fb227B81Ec08, 0x6De841b742d37aA5a7f68D6686BbddB8AcE190Df, 0xf477A9221f777960d9825950Ad4F1C35FDb28967, 0xb77a2aCb9E15441ebA48B2Cf4C0F9B843E090122, 0x70F25A13aaD68a82626Ff2881b5937E558cEC1D2, 0x2C1cba3375E75D3637953beEfa6741D0Fe2D6975, 0x718d50d9C3e2E64af6531705a34d5879ff2C0A04, 0xD7e23be97BC6e30B04a8e26b39040cA1c11C9eC7, 0xF15d654E2a0307350cd829a129dDc43889aA218e, 0x8aA3BD75c4ABC90e16Fcd2E9c8b94308C33A8b2D, 0x1926Ae2478d29bF07e176F7b91e7d625E26ED5AF, 0x027C6869cDE0daE3AeFA3D76c5172B5d295B2604, 0x0D34014b526De67cB3122C673155a910193D96eF, 0x4370Ae627a20dB798AAC725214e607047423D775, 0x223ce1DF682faf97675C1Ec8Fa0EDf95A9c717c8, 0x4bd0De2D126F7C3C45551232Da996CACdEB95b33, 0x2514c1dC20728E9CC567db8BDE094Ba95b41E358, 0x509EEc7d59d66e5DefD5a04ef10A5C49a45C556d, 0x696642490974c8EDc0909E9351C2047E84986F4D, 0x5e17aE55Dd71F810395eF3bdF3b1975a1E90b2c0, 0xcb1684B5eC8F75cbb626b45FC2A0aC38a9e5C2ce, 0x6E86B1aA91d8652b2e054e51CC695493FD1f852C, 0xD2dC166946cbbe9bA5fb4a97268E8D0E224b0e80, 0x7439c7E4Aea16C9fA7cDec66F31120B3Cf9E6fBF, 0x17cb842706f30e3c97Bb23dD31d6C5f55E24d2d2, 0xF3D15255c191f3Cc51188c0E3c80a7bBcbA4CC20, 0xd201A185cEb0F176c0500c0c8e6A70839159c4B6, 0x8bdCA84a9606e1c69eF981093eaFE7889e2071aE, 0xD7eDEa574A6270765831D57803Cd5A0071b9A6b5, 0xD64D4d43AeDbc0D4E0eA7db9CD2447c6abe8A3ad, 0x25887c8DE3A73B191c2B8790010DD08b034ECebd] )
-
0xdfa44b83bbe740dbf6833afe8318ce80a2a74680.60408060( )
-
0xfee4077e75408c725f1c88ea5078bf0db45f2208.60408060( )
-
0x01e342c1de30cfc80a5434afd0b8a2df1cd9811f.60408060( )
-
0xaf5fecbf18c1afb114e352218b296c96945bd477.60408060( )
-
0x58e17bc2a68eb33a9850cdd82dfa3c6debfa7b0d.60408060( )
-
0xeeb8faac691d82ee0306db233cb93eefca231c0b.60408060( )
-
0x44a32e07139d85ad68d49c1a683a96d8783cefd4.60408060( )
-
0x94a8f25b267b4ff255af6d280cf3324ab0d48796.60408060( )
-
0x3193148038feece51a91b07728336286f49ac32b.60408060( )
-
0x6615480333180c2d5a82bbc70279a01e1e1703d9.60408060( )
-
0x3cf024c01daf43e41815b75b77862d26c7fbdc59.60408060( )
-
0x687721fc0024ef6137485f892e1300ee95239d79.60408060( )
-
0x56a937243ca13be23a17004680e56415462b18a7.60408060( )
-
0x33e2c92c0e275e70950eb74a0894f3cc22eb63b6.60408060( )
-
0x116bb7cb455191a309f28fb01314b864b3fce8a7.60408060( )
-
0xb33cf3c0d99be2cf74c4dfe362b499ecc802fc4e.60408060( )
-
0x927927687d199686ca7cac7a69e63a69a69f5596.60408060( )
-
0x116ba91fd598c041641bac09ec181594d0eb3ccc.60408060( )
-
0x41d23fe72e74c9f473fb73b17d02c6bfcff00f40.60408060( )
-
0x8b194177cb7b3975818d38663174ca5c8ed469a2.60408060( )
-
0x0e6d6ccc718f71aa2361de7381dcc2eb3bbca2d0.60408060( )
-
0xff7eb7ef43506a7c5f96b82c9a4f70d312da965e.60408060( )
-
0x9722db66a995590842889ba1741ff8c2c98c1a49.60408060( )
-
0x112f0318598a4ef5f0c2b1969c17cb86a24fb84e.60408060( )
-
0xcefd4b3566af7637f9df939da4dea4eb7d5d281b.60408060( )
-
0x315db6f0d45241039d15c4b81004ed9dd6e2f6f1.60408060( )
-
0x093bc271f278fc466ffbeb02e7d10c6475d72315.60408060( )
-
0xe004e3a3a9d48b75ec6f813db2a6576a20af084a.60408060( )
-
0x22acdb506a2ffe7f5e6e93237609f3c9e045ef83.60408060( )
-
0x1dbdceebeafa55b1b01c5169e6527887504b3bba.60408060( )
-
0x3ed6eec51f92c0e7c5a3d9a3a7c9ff6c27b54adb.60408060( )
-
0x735581fed46fc6d3e13ebf7819108db545e7835d.60408060( )
-
0xd927b6697c95e352bbd1ea1254e423c12c758204.60408060( )
-
0x9a57c42c7d5cab88032c1eccf810bdf87f3501c4.60408060( )
-
0xf608dd503d1222a0da7118a9b2bd30e1636ffae4.60408060( )
-
0x5f8b6399f69e634ec225d38122f6d646467e2515.60408060( )
-
0x0038e652f91ec38fa5aba2e601ff3f124daff3d4.60408060( )
-
0xa6a6ba5bb3094780aa58f60676d4fd4490490f80.60408060( )
-
0x88ea152eb7ac70f4ebae3536bc4e57257039b4b9.60408060( )
-
0x302666fd5ff9e159dd5f08b77c39b6ea0c6456b6.60408060( )
-
0x83f1ce91b5d92a14d531e93da54e2fdb6a5f617d.60408060( )
-
0xb54d552d4465e0f2a9482262bc8f4770bb9988ae.60408060( )
-
0x05e729b6cfbbec0d11c745da752bc555d74a16ad.60408060( )
-
0x0157dcba86620fbe43955d1924c2d66410c4e533.60408060( )
-
0x543e1ee1d0c3e7379dc8df7d9a7c05bc095b77a0.60408060( )
-
0x1f7d9eda774b16bc22af61d0e7ec49815f24b6b6.60408060( )
-
0x73a61fa850f3fbedf57a50dd6d446a14d9981929.60408060( )
-
0x6bed25ebbe513cdf4dd35568858ef1aaacd9a298.60408060( )
-
0x070174f45b352cf93a0a3b7c9e5890195ff31473.60408060( )
-
0x66579606c32bc79cd5657267f34365a51a9b753e.60408060( )
-
0xb79df76c6cb44e074bfdb309705289054039851a.60408060( )
-
0x9cb9fdaae94519c7982531ca9d7e9eab8874ad25.60408060( )
-
0xddba743ae4bc9905a46537fbfa711d110cf4ad14.60408060( )
-
0xd138c77440fb4b99f7375b8caff7e3d759e261e3.60408060( )
-
0x476b79e4ed7364656fda21daa2826aae1637e789.60408060( )
-
0x3c0365971f0de1f02f3799bf55181a5f4159a37c.60408060( )
-
0xf80724d0c7ed1ebf31ecee3e0b622dbff8976add.60408060( )
-
0xa80f7ed1b6f48dfcef9dbf6948393ca0eae22a83.60408060( )
-
0x5b217fa788d3824ab91e20b3724fad23e3f88434.60408060( )
-
0x306f504e4ba8d5789f050706a27adfa89c183aea.60408060( )
-
0xf32c5a54a5152eede087dbfbe9dcbe2078b9277a.60408060( )
-
0x6ef0e5d7a3823e773bb8657c8fcab482eaf7bbd0.60408060( )
-
0xd23333d7e671c8561aafbbf626bcfde54d6f6fc8.60408060( )
-
0xb7305c79908499569378e230eecc309088196153.60408060( )
-
0x975b1d758e96134bc55578765a69d93fca084257.60408060( )
-
0x8ae9e5abf544d04c55ec1a9b189097a4231e25fb.60408060( )
-
0x0338c0a0b891f19b2bfe4451e4672ef885ca70a8.60408060( )
-
0x62dcab941006efed6116509405033f03e27b5326.60408060( )
-
0xcfc14032a1c3ab69569d4eff8bc0f4806ec8153e.60408060( )
-
0x02ff80fd53df5653f2dd3d686a9ce828c73ab1f5.60408060( )
-
0x127e32a34f1d7d09518ac7c39a651e64ea634f50.60408060( )
-
0x81037b4f0c42b67c3409341cd1dc11a7e61d2d93.60408060( )
-
0x75246676b66814b7080cfa99efc9d0abbb3522d4.60408060( )
-
0xaf2849824276e7b9c42b329c1e3dc3c40dbfb8da.60408060( )
-
0x59bc3d7e1b2fd5c1eb57d845e0c44f7d11732d5b.60408060( )
-
0x071467704c7c53f8a9fa7d08494a7d27cd597bfb.60408060( )
-
0x74ee05796cb4b373a097301376598db1c0b25993.60408060( )
-
0x77109d794a30c41718eacfd2d5a270a2f03cc13f.60408060( )
-
0x1c81ecc186acbb0e1844a8432d02403b657454f8.60408060( )
-
0xb7cfc9970e8127e1eb377de295b176888ff325d7.60408060( )
-
0x11552d86edad507781290060e72683ce210f3a9b.60408060( )
-
0xd9348a085d526d0cb793bf496846254e62538d0e.60408060( )
-
0x14123790cce5d1b7a1fdbfc0f1dfe7aabd436a74.60408060( )
-
0x5716ac15c55e183a8c083272e770ccf6d5d52159.60408060( )
-
0xf6ee39a55638265537dbc339bff0fd09d6654726.60408060( )
-
0x750cf161b49388ccb54ac1f9c7d3fb44c4444e1b.60408060( )
-
0xd6ead8e4222e3d6a51ad02436a2eebec1dbd4be4.60408060( )
-
0x2b0f44af5e1c19654fb8598f2a021693efa7a7d7.60408060( )
-
0xcf679e4c058e6ffc9c58706935b89b8f402e5727.60408060( )
-
0x9ceab8e584427d105e0c9be0786e890c105b933f.60408060( )
-
0x7840a748e582b59941eb59602f6d893b989acc17.60408060( )
-
0x12f272eedf255446e2aca1d7c500f2216e41e052.60408060( )
-
0x05e4d47b98e1f793fcbb5430edf169785da3f0d0.60408060( )
-
0x0f0eec7ec1c4b1b6a61f744187c1f63d0054fa58.60408060( )
-
0x2eade276f42e18429f2e7fa5c0092648f9135ee0.60408060( )
-
0xaff2a7380d827ff31b6e25c0021b0950321abe46.60408060( )
-
0xa81694d5b85e6c91815ab21de5606928e305412c.60408060( )
-
0x500b70d858bd103190f6c047705910f57ecd3231.60408060( )
-
0x4c9dbbe2729caeb1449e043077037bb155aa37cd.60408060( )
-
0xdc5d434163aff6b83e31a14a26104b372f7322ca.60408060( )
-
0xb10afc83a436095565a0693d698d82a6681882df.60408060( )
-
0x865db3dad91453e3ae71adeb55f07c3c72da69ac.60408060( )
-
0x17dfd1cd7ae212706eb9bc6102f228cc5a276854.60408060( )
-
0xf94f038c8416f736c01f6f0a3c8be2ce39cca743.60408060( )
-
0x8903ebd4309e33eda27574adb8a534db16e86c20.60408060( )
-
0xc2822f5e3105d65b2c8466c2f4dd10d6aed9e397.60408060( )
-
0x8fa5d9251714930ae606da4c055a9cc80752f1a8.60408060( )
-
0x2700849a09c717590d94244dc81da9512a57ca07.60408060( )
-
0x9c224aff6a7ad805de1e9ab870350a7bf29f7fc0.60408060( )
-
0xcc56c73de93d0c4f38f690b1ef608bac371a9b4d.60408060( )
-
0x0f49334f10f00ba24df976a03961ee16af21b5cb.60408060( )
-
0x644eb8132214a4e34d130ab71a7cd92ba5e0a63a.60408060( )
-
0x7d3b18d24126558935106471a0716a8372996c99.60408060( )
-
0x23b8a2f339b1f8deb9c7321abd6b766e4c1d628b.60408060( )
-
0xf54bd3705711ff988607d1255f1026d269dcf973.60408060( )
-
0x27350ae6a431c2fe0dd3d1a642b1991a21dd8266.60408060( )
-
0x83583bc4028aeae1f15efbb0d1dc129318ad0657.60408060( )
-
0x362a3636a3212e2cd40d8a97a90c48140e1f59ad.60408060( )
-
0xe618194cccc9ff6dcfe902ef4008add7155c9067.60408060( )
-
0x8cb7fbacccc29758ac4643d9a16122513c6fbe4a.60408060( )
-
0xb7cb1d32a1ae49db953af30c0e9a256816e0be78.60408060( )
-
0xc945b9fc815a640faaf64b708ac8a6608c0cc698.60408060( )
-
0x7e13aad14ed687d27fd17db8a5a96bedcee80b7c.60408060( )
-
0x6d9c26c8f95ba05ae7df1e42c10c253524e5cbd3.60408060( )
-
0xaf5a8a3cc017e6025bf23e1ebcbb67860f81f258.60408060( )
-
0x69452c65a6bc58441129a2f72d46671393208e11.60408060( )
-
0x3980f914af5d990790965e76c31b87546cc05aed.60408060( )
-
0xdab239107b4b7846b5cdfd81ebabb8fbc2ae3ad4.60408060( )
-
0x8a82bcb35da407590f71a8319b626a8e3553f98c.60408060( )
-
0x4000df69207a724f5392a108ac9a3ee65a53e8da.60408060( )
-
0x148d99d66909eae22f995371f55ffe2a4ef9866b.60408060( )
-
0x8ed2b888c09f915eb08cb5d9362b573c58082205.60408060( )
-
0xf212747736aea132f1cec65a8f3e12b4ac839152.60408060( )
-
0xdfa63f4e4d6e7bcf9d9c8373a8e0228a221ab044.60408060( )
-
0x8e1a37ef636242ccac87b698ed686a3d57395e0b.60408060( )
-
0xfd5292a2516e295162de74261639f710ce1c2f46.60408060( )
-
0xac16d0be947affd897c2f2678bb5321b0a0a5cb0.60408060( )
-
0x355678aafb47d8161802aacb987b7fba0bb9b6ac.60408060( )
-
0xad0793d0773f420f5eb055f582c13c301127d9cb.60408060( )
-
0xc79b939a8db4990642ea8c781c70735fa06099d6.60408060( )
-
0xe6f3c0dcb62d40d4df66207e4fa362c64270becd.60408060( )
-
0xee64022571b0c2b25befd9f3c65d57f7af886040.60408060( )
-
0x3d7a8764f873c4f7c4a2130e0e09135bdd5ae45e.60408060( )
-
0x91388f1c7cf011cf17d4a4dac57ca5efc1c634ad.60408060( )
-
0x465a0f82d7c3243de63490d04c80aff7746a115a.60408060( )
-
0x1e693a0362e620cce76e929e7d7cd8bb77fb93c7.60408060( )
-
0xc98d869a7d179e9fe2da3b2e0fb28f09cfd7b623.60408060( )
-
0x0cc3118f02a5a6e41401d77ba1c708f626c8f3f8.60408060( )
-
0xd33d162ef5f6b40f395296512b20f372d691c761.60408060( )
-
0x429b4008cc21be256929952917611f6ef4b37e70.60408060( )
-
0x875979955c0b3130e50dc55b62c80e3d7e777844.60408060( )
-
0xea40778c3f7fcd9144acdaf48a535dbd4f5c68bf.60408060( )
-
0x5dc372a94309a0c4805b37b986c9c1e2455f1315.60408060( )
-
0x0f6fff3f81c16484b939baddfce54fdbd85869c9.60408060( )
-
0xd2c336b1c515f87be6d78cf5f5006fb481f16f73.60408060( )
-
0xea4244239cd819d722ad1e7ec8f0fd0f45e65732.60408060( )
-
0x0ab34037e804bf754c237b94e1e7396394b45ca4.60408060( )
-
0xdd5575e4a9f76a76a9a684298bcd74837994ea3b.60408060( )
-
0xa6adefc6e61d154a5c7e2cbfc4a55e978871e3cb.60408060( )
-
0xec159b3cded8b539e94b1f2e6c296c223c586492.60408060( )
-
0x6129b8b7e4f26ed5d84d117e24758d07c82b5cdc.60408060( )
-
0x6ca3c533de6cc4fb03f2ae024639757461718af5.60408060( )
-
0xabcf3e6e37b51006e97bcea50fdb09742749afaa.60408060( )
-
0x77a3032d8d89673c9cbcea00d5a63801d95ccb61.60408060( )
-
0x21bda4fadd94cb17c27330bf7cea8b12369b43d3.60408060( )
-
0xf1196bc1f79841d5529ba63d6d1ad354a2aa1e6a.60408060( )
-
0xfc824b245bdab8e4b99ef6ad7adf11a23a350172.60408060( )
-
0x7317fe4edd03e27c05cce032395e2c14bc64b3cb.60408060( )
-
0xa310bb68be3f8c50ebd9c9d1df73150aa00eb119.60408060( )
-
0x0a41a918e66944756f1d1908e296fb227b81ec08.60408060( )
-
0x6de841b742d37aa5a7f68d6686bbddb8ace190df.60408060( )
-
0xf477a9221f777960d9825950ad4f1c35fdb28967.60408060( )
-
0xb77a2acb9e15441eba48b2cf4c0f9b843e090122.60408060( )
-
0x70f25a13aad68a82626ff2881b5937e558cec1d2.60408060( )
-
0x2c1cba3375e75d3637953beefa6741d0fe2d6975.60408060( )
-
0x718d50d9c3e2e64af6531705a34d5879ff2c0a04.60408060( )
-
0xd7e23be97bc6e30b04a8e26b39040ca1c11c9ec7.60408060( )
-
0xf15d654e2a0307350cd829a129ddc43889aa218e.60408060( )
-
0x8aa3bd75c4abc90e16fcd2e9c8b94308c33a8b2d.60408060( )
-
0x1926ae2478d29bf07e176f7b91e7d625e26ed5af.60408060( )
-
0x027c6869cde0dae3aefa3d76c5172b5d295b2604.60408060( )
-
0x0d34014b526de67cb3122c673155a910193d96ef.60408060( )
-
0x4370ae627a20db798aac725214e607047423d775.60408060( )
-
0x223ce1df682faf97675c1ec8fa0edf95a9c717c8.60408060( )
-
0x4bd0de2d126f7c3c45551232da996cacdeb95b33.60408060( )
-
0x2514c1dc20728e9cc567db8bde094ba95b41e358.60408060( )
-
0x509eec7d59d66e5defd5a04ef10a5c49a45c556d.60408060( )
-
0x696642490974c8edc0909e9351c2047e84986f4d.60408060( )
-
0x5e17ae55dd71f810395ef3bdf3b1975a1e90b2c0.60408060( )
-
0xcb1684b5ec8f75cbb626b45fc2a0ac38a9e5c2ce.60408060( )
-
0x6e86b1aa91d8652b2e054e51cc695493fd1f852c.60408060( )
-
0xd2dc166946cbbe9ba5fb4a97268e8d0e224b0e80.60408060( )
-
0x7439c7e4aea16c9fa7cdec66f31120b3cf9e6fbf.60408060( )
-
0x17cb842706f30e3c97bb23dd31d6c5f55e24d2d2.60408060( )
-
0xf3d15255c191f3cc51188c0e3c80a7bbcba4cc20.60408060( )
-
0xd201a185ceb0f176c0500c0c8e6a70839159c4b6.60408060( )
-
0x8bdca84a9606e1c69ef981093eafe7889e2071ae.60408060( )
-
0xd7edea574a6270765831d57803cd5a0071b9a6b5.60408060( )
-
0xd64d4d43aedbc0d4e0ea7db9cd2447c6abe8a3ad.60408060( )
-
0x25887c8de3a73b191c2b8790010dd08b034ecebd.60408060( )
deployNewInstanceBatch[ProxyFactory (ln:69)]
// SPDX-License-Identifier: MIT pragma solidity 0.8.20; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; import "@openzeppelin/contracts/token/ERC721/IERC721.sol"; import "@openzeppelin/contracts/utils/Address.sol"; contract ProxyFactory { using SafeERC20 for IERC20; using Address for address payable; /// @dev See comment below for explanation of the proxy INIT_CODE bytes private constant INIT_CODE = hex"604080600a3d393df3fe" hex"7300000000000000000000000000000000000000003d36602557" hex"3d3d3d3d34865af1603156" hex"5b363d3d373d3d363d855af4" hex"5b3d82803e603c573d81fd5b3d81f3"; /// @dev The main address that the deployed proxies will forward to. address payable public immutable mainLogicAddress; address public immutable operatorAddress; constructor(address payable ethDepositLogicAddr, address operatorAddr) { require(ethDepositLogicAddr != address(0), "0x0 is an invalid address"); require(operatorAddr != address(0), "0x0 is an invalid address"); mainLogicAddress = ethDepositLogicAddr; operatorAddress = operatorAddr; } /** * @notice Event used to log the receiver address, token address, operator address, and amount when the returnBackErc20 was called * @param toAddr The receiver address of the returned erc20 token * @param tokenAddr The token address of the erc20 token * @param operatorAddr The operator address which calls the function * @param fromAddr The address which returnback Erc21 * @param amount The amount of the erc20 token which was returned */ event ReturnBackErc20( address indexed toAddr, address indexed tokenAddr, address operatorAddr, address indexed fromAddr, uint256 amount ); /** * @notice Event used to log the receiver address, token address, operator address, and tokenId when the returnBackErc721 was called * @param toAddr The receiver address of the returned erc721 token * @param tokenAddr The token address of the erc721 token * @param operatorAddr The operator address which calls the function * @param fromAddr The address which returnback Erc721 * @param tokenId The tokenId of the erc721 token which was returned */ event ReturnBackErc721( address indexed toAddr, address indexed tokenAddr, address operatorAddr, address indexed fromAddr, uint256 tokenId ); /** * @dev Modifier that will execute internal code block only if the sender is the operator account */ modifier onlyOperator() { require(msg.sender == operatorAddress, "Unauthorized Operator"); _; } /** * @dev batch creation for proxy contract * @param from Represent the initial value of salt * @param instanceAmount The amount of the creation of the proxy contract * @return ethDepositProxyAddr The address array of new created proxy contracts */ function deployNewInstanceBatch(uint256 from, uint256 instanceAmount) external onlyOperator returns (address[] memory) { // copy init code into memory // and immutable EthDepositLogic address onto stack bytes memory initCodeMem = INIT_CODE; address payable addrStack = mainLogicAddress; address dst; address[] memory ethDepositProxyAddrs = new address[](instanceAmount); // loop with times set by the instanceAmount // i represent the salt of create2 for (uint256 i = from; i < from + instanceAmount; ++i) { assembly { // Get the position of the start of init code let pos := add(initCodeMem, 0x20) // grab the first 32 bytes let first32 := mload(pos) // shift the address bytes 8 bits left let addrBytesShifted := shl(8, addrStack) // bitwise OR them and add the address into the init code memory mstore(pos, or(first32, addrBytesShifted)) // create the contract dst := create2( 0, // Send no value to the contract pos, // Deploy code starts at pos 74, // Deploy + runtime code is 74 bytes i // 32 byte salt ) // revert if failed if eq(dst, 0) { revert(0, 0) } } ethDepositProxyAddrs[(i - from)] = dst; // store the created proxy address to array } return ethDepositProxyAddrs; // return the created proxy addrs } /** * @notice External function for returning Erc20 token to specific address * @dev Should be called by operator account * @param erc20Addr The address of the erc20 token contract * @param to The target address which received the erc20 token * @param amount The amount of the erc20 token to return */ function returnBackErc20( IERC20 erc20Addr, address to, uint256 amount ) external onlyOperator { require(amount != 0, "0 is an invalid amount"); require(to != address(0), "0x0 is an invalid address"); uint256 erc20Balance = erc20Addr.balanceOf(address(this)); require(erc20Balance >= amount, "amount is invalid"); erc20Addr.safeTransfer(to, amount); emit ReturnBackErc20( to, address(erc20Addr), msg.sender, address(this), amount ); } /** * @notice External function for returning erc721 token to specific address * @dev Should be called by operator account, * use transferFrom to make sure it can be returned to all specific contract addresses * @param erc721Addr The address of the erc721 token contract * @param to The target address which received the erc721 token * @param tokenId The tokenId of the erc721 token to return */ function returnBackErc721( IERC721 erc721Addr, address to, uint256 tokenId ) external onlyOperator { require(to != address(0), "0x0 is an invalid address"); address owner = erc721Addr.ownerOf(tokenId); require(owner == address(this), "sender is not tokenId owner"); erc721Addr.transferFrom(address(this), to, tokenId); // transfer Erc721 to specific address emit ReturnBackErc721( to, address(erc721Addr), msg.sender, address(this), tokenId ); } } /* // PROXY CONTRACT EXPLANATION // DEPLOY CODE (will not be returned by web3.eth.getCode()) // STORE CONTRACT CODE IN MEMORY, THEN RETURN IT POS | OPCODE | OPCODE TEXT | STACK | 00 | 6040 | PUSH1 0x40 | 0x40 | 02 | 80 | DUP1 | 0x40 0x40 | 03 | 600a | PUSH1 0x0a | 0x0a 0x40 0x40 | 05 | 3d | RETURNDATASIZE | 0x0 0x0a 0x40 0x40 | 06 | 39 | CODECOPY | 0x40 | 07 | 3d | RETURNDATASIZE | 0x0 0x40 | 08 | f3 | RETURN | | 09 | fe | INVALID | | // START CONTRACT CODE // Push the EthDepositLogic address on the stack for DUPing later // Also pushing a 0x0 for DUPing later. (saves runtime AND deploy gas) // Then use the calldata size as the decider for whether to jump or not POS | OPCODE | OPCODE TEXT | STACK | 00 | 73... | PUSH20 ... | {ADDR} | 15 | 3d | RETURNDATASIZE | 0x0 {ADDR} | 16 | 36 | CALLDATASIZE | CDS 0x0 {ADDR} | 17 | 6025 | PUSH1 0x25 | 0x25 CDS 0x0 {ADDR} | 19 | 57 | JUMPI | 0x0 {ADDR} | // If msg.data length === 0, CALL into address // This way, the proxy contract address becomes msg.sender and we can use // msg.sender in the Deposit Event // This also gives us access to our EthDepositLogic storage (for forwarding address) POS | OPCODE | OPCODE TEXT | STACK | 1A | 3d | RETURNDATASIZE | 0x0 0x0 {ADDR} | 1B | 3d | RETURNDATASIZE | 0x0 0x0 0x0 {ADDR} | 1C | 3d | RETURNDATASIZE | 0x0 0x0 0x0 0x0 {ADDR} | 1D | 3d | RETURNDATASIZE | 0x0 0x0 0x0 0x0 0x0 {ADDR} | 1E | 34 | CALLVALUE | VALUE 0x0 0x0 0x0 0x0 0x0 {ADDR} | 1F | 86 | DUP7 | {ADDR} VALUE 0x0 0x0 0x0 0x0 0x0 {ADDR} | 20 | 5a | GAS | GAS {ADDR} VALUE 0x0 0x0 0x0 0x0 0x0 {ADDR} | 21 | f1 | CALL | {RES} 0x0 {ADDR} | 22 | 6031 | PUSH1 0x31 | 0x31 {RES} 0x0 {ADDR} | 24 | 56 | JUMP | {RES} 0x0 {ADDR} | // If msg.data length > 0, DELEGATECALL into address // This will allow us to call gatherErc20 using the context of the proxy // address itself. POS | OPCODE | OPCODE TEXT | STACK | 25 | 5b | JUMPDEST | 0x0 {ADDR} | 26 | 36 | CALLDATASIZE | CDS 0x0 {ADDR} | 27 | 3d | RETURNDATASIZE | 0x0 CDS 0x0 {ADDR} | 28 | 3d | RETURNDATASIZE | 0x0 0x0 CDS 0x0 {ADDR} | 29 | 37 | CALLDATACOPY | 0x0 {ADDR} | 2A | 3d | RETURNDATASIZE | 0x0 0x0 {ADDR} | 2B | 3d | RETURNDATASIZE | 0x0 0x0 0x0 {ADDR} | 2C | 36 | CALLDATASIZE | CDS 0x0 0x0 0x0 {ADDR} | 2D | 3d | RETURNDATASIZE | 0x0 CDS 0x0 0x0 0x0 {ADDR} | 2E | 85 | DUP6 | {ADDR} 0x0 CDS 0x0 0x0 0x0 {ADDR} | 2F | 5a | GAS | GAS {ADDR} 0x0 CDS 0x0 0x0 0x0 {ADDR} | 30 | f4 | DELEGATECALL | {RES} 0x0 {ADDR} | // We take the result of the call, load in the returndata, // If call result == 0, failure, revert // else success, return POS | OPCODE | OPCODE TEXT | STACK | 31 | 5b | JUMPDEST | {RES} 0x0 {ADDR} | 32 | 3d | RETURNDATASIZE | RDS {RES} 0x0 {ADDR} | 33 | 82 | DUP3 | 0x0 RDS {RES} 0x0 {ADDR} | 34 | 80 | DUP1 | 0x0 0x0 RDS {RES} 0x0 {ADDR} | 35 | 3e | RETURNDATACOPY | {RES} 0x0 {ADDR} | 36 | 603c | PUSH1 0x3c | 0x3c {RES} 0x0 {ADDR} | 38 | 57 | JUMPI | 0x0 {ADDR} | 39 | 3d | RETURNDATASIZE | RDS 0x0 {ADDR} | 3A | 81 | DUP2 | 0x0 RDS 0x0 {ADDR} | 3B | fd | REVERT | 0x0 {ADDR} | 3C | 5b | JUMPDEST | 0x0 {ADDR} | 3D | 3d | RETURNDATASIZE | RDS 0x0 {ADDR} | 3E | 81 | DUP2 | 0x0 RDS 0x0 {ADDR} | 3F | f3 | RETURN | 0x0 {ADDR} | */ // SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract. * * _Available since v4.8._ */ function verifyCallResultFromTarget( address target, bool success, bytes memory returndata, string memory errorMessage ) internal view returns (bytes memory) { if (success) { if (returndata.length == 0) { // only check isContract if the call was successful and the return data is empty // otherwise we already know that it was a contract require(isContract(target), "Address: call to non-contract"); } return returndata; } else { _revert(returndata, errorMessage); } } /** * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason or using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { _revert(returndata, errorMessage); } } function _revert(bytes memory returndata, string memory errorMessage) private pure { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } // SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.8.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721 * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must * understand this adds an external call which potentially creates a reentrancy vulnerability. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); } // SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/utils/SafeERC20.sol) pragma solidity ^0.8.0; import "../IERC20.sol"; import "../extensions/draft-IERC20Permit.sol"; import "../../../utils/Address.sol"; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using Address for address; function safeTransfer( IERC20 token, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove( IERC20 token, address spender, uint256 value ) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender) + value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { unchecked { uint256 oldAllowance = token.allowance(address(this), spender); require(oldAllowance >= value, "SafeERC20: decreased allowance below zero"); uint256 newAllowance = oldAllowance - value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } } function safePermit( IERC20Permit token, address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) internal { uint256 nonceBefore = token.nonces(owner); token.permit(owner, spender, value, deadline, v, r, s); uint256 nonceAfter = token.nonces(owner); require(nonceAfter == nonceBefore + 1, "SafeERC20: permit did not succeed"); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612]. * * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't * need to send a transaction, and thus is not required to hold Ether at all. */ interface IERC20Permit { /** * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens, * given ``owner``'s signed approval. * * IMPORTANT: The same issues {IERC20-approve} has related to transaction * ordering also apply here. * * Emits an {Approval} event. * * Requirements: * * - `spender` cannot be the zero address. * - `deadline` must be a timestamp in the future. * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` * over the EIP712-formatted function arguments. * - the signature must use ``owner``'s current nonce (see {nonces}). * * For more information on the signature format, see the * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP * section]. */ function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; /** * @dev Returns the current nonce for `owner`. This value must be * included whenever a signature is generated for {permit}. * * Every successful call to {permit} increases ``owner``'s nonce by one. This * prevents a signature from being used multiple times. */ function nonces(address owner) external view returns (uint256); /** * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}. */ // solhint-disable-next-line func-name-mixedcase function DOMAIN_SEPARATOR() external view returns (bytes32); } // SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); }