Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Loading...
Loading
Similar Match Source Code This contract matches the deployed Bytecode of the Source Code for Contract 0x33b7836F...E29569BEd The constructor portion of the code might be different and could alter the actual behaviour of the contract
Contract Name:
Curve TWAP Bot
Compiler Version
vyper:0.3.10
Contract Source Code (Vyper language format)
#pragma version 0.3.10 #pragma optimize gas #pragma evm-version shanghai """ @title Curve TWAP Bot @license Apache 2.0 @author Volume.finance """ struct Deposit: depositor: address route: address[11] swap_params: uint256[5][5] pools: address[5] input_amount: uint256 number_trades: uint256 interval: uint256 remaining_counts: uint256 starting_time: uint256 struct SwapInfo: route: address[11] swap_params: uint256[5][5] amount: uint256 pools: address[5] interface WrappedEth: def deposit(): payable interface CurveSwapRouter: def exchange(_route: address[11], _swap_params: uint256[5][5], _amount: uint256, _expected: uint256, _pools: address[5], _receiver: address) -> uint256: payable interface ERC20: def balanceOf(_owner: address) -> uint256: view def approve(_spender: address, _value: uint256) -> bool: nonpayable def transfer(_to: address, _value: uint256) -> bool: nonpayable def transferFrom(_from: address, _to: address, _value: uint256) -> bool: nonpayable VETH: constant(address) = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE # Virtual ETH ROUTER: immutable(address) MAX_SIZE: constant(uint256) = 8 DENOMINATOR: constant(uint256) = 10 ** 18 compass_evm: public(address) deposit_list: HashMap[uint256, Deposit] next_deposit: public(uint256) refund_wallet: public(address) fee: public(uint256) paloma: public(bytes32) service_fee_collector: public(address) service_fee: public(uint256) event Deposited: deposit_id: uint256 token0: address token1: address input_amount: uint256 number_trades: uint256 interval: uint256 starting_time: uint256 depositor: address is_stable_swap: bool event Swapped: deposit_id: uint256 remaining_counts: uint256 amount: uint256 out_amount: uint256 event Canceled: deposit_id: uint256 event UpdateCompass: old_compass: address new_compass: address event UpdateRefundWallet: old_refund_wallet: address new_refund_wallet: address event UpdateFee: old_fee: uint256 new_fee: uint256 event SetPaloma: paloma: bytes32 event UpdateServiceFeeCollector: old_service_fee_collector: address new_service_fee_collector: address event UpdateServiceFee: old_service_fee: uint256 new_service_fee: uint256 @external def __init__(_compass_evm: address, router: address, _refund_wallet: address, _fee: uint256, _service_fee_collector: address, _service_fee: uint256): self.compass_evm = _compass_evm ROUTER = router self.refund_wallet = _refund_wallet self.fee = _fee self.service_fee_collector = _service_fee_collector assert _service_fee < DENOMINATOR self.service_fee = _service_fee log UpdateCompass(empty(address), _compass_evm) log UpdateRefundWallet(empty(address), _refund_wallet) log UpdateFee(0, _fee) log UpdateServiceFeeCollector(empty(address), _service_fee_collector) log UpdateServiceFee(0, _service_fee) @external @payable @nonreentrant('lock') def deposit(swap_infos: DynArray[SwapInfo, MAX_SIZE], number_trades: uint256, interval: uint256, starting_time: uint256): _value: uint256 = msg.value assert self.paloma != empty(bytes32), "Paloma not set" _fee: uint256 = self.fee if _fee > 0: _fee = _fee * number_trades assert _value >= _fee, "Insufficient fee" send(self.refund_wallet, _fee) _value = unsafe_sub(_value, _fee) _next_deposit: uint256 = self.next_deposit for swap_info in swap_infos: last_index: uint256 = 0 for i in range(5): last_index = unsafe_sub(10, unsafe_add(i, i)) if swap_info.route[last_index] != empty(address): break is_stable_swap: bool = True for i in range(5): if swap_info.swap_params[i][2] == 0: break if swap_info.swap_params[i][2] != 8 and (swap_info.swap_params[i][2] == 9 or swap_info.swap_params[i][3] != 1): is_stable_swap = False assert swap_info.amount > 0, "Insufficient deposit" token1: address = swap_info.route[last_index] if swap_info.route[0] == VETH: assert _value >= swap_info.amount, "Insufficient deposit" _value = unsafe_sub(_value, swap_info.amount) else: assert ERC20(swap_info.route[0]).transferFrom(msg.sender, self, swap_info.amount, default_return_value = True), "Failed transferFrom" _starting_time: uint256 = starting_time if starting_time <= block.timestamp: _starting_time = block.timestamp assert number_trades > 0, "Wrong trade count" self.deposit_list[_next_deposit] = Deposit({ depositor: msg.sender, route: swap_info.route, swap_params: swap_info.swap_params, pools: swap_info.pools, input_amount: swap_info.amount, number_trades: number_trades, interval: interval, remaining_counts: number_trades, starting_time: _starting_time }) log Deposited(_next_deposit, swap_info.route[0], swap_info.route[last_index], swap_info.amount, number_trades, interval, _starting_time, msg.sender, is_stable_swap) _next_deposit = unsafe_add(_next_deposit, 1) self.next_deposit = _next_deposit if _value > 0: send(msg.sender, _value) @internal def _safe_transfer(_token: address, _to: address, _value: uint256): assert ERC20(_token).transfer(_to, _value, default_return_value=True), "Failed transfer" @internal def _swap(deposit_id: uint256, remaining_count: uint256, amount_out_min: uint256, count_check: bool = True) -> uint256: _deposit: Deposit = self.deposit_list[deposit_id] if count_check: assert _deposit.remaining_counts == remaining_count, "Wrong count" _amount: uint256 = _deposit.input_amount / _deposit.remaining_counts _deposit.input_amount = unsafe_sub(_deposit.input_amount, _amount) _deposit.remaining_counts = unsafe_sub(_deposit.remaining_counts, 1) self.deposit_list[deposit_id] = _deposit _out_amount: uint256 = 0 last_index: uint256 = 0 for i in range(5): last_index = unsafe_sub(10, unsafe_add(i, i)) if _deposit.route[last_index] != empty(address): break if _deposit.route[0] == VETH: _out_amount = CurveSwapRouter(ROUTER).exchange(_deposit.route, _deposit.swap_params, _amount, amount_out_min, _deposit.pools, self, value=_amount) else: assert ERC20(_deposit.route[0]).approve(ROUTER, _amount, default_return_value = True), "Failed approve" _out_amount = CurveSwapRouter(ROUTER).exchange(_deposit.route, _deposit.swap_params, _amount, amount_out_min, _deposit.pools, self) actual_amount: uint256 = _out_amount service_fee_amount: uint256 = 0 _service_fee: uint256 = self.service_fee if _service_fee > 0: service_fee_amount = unsafe_div(_out_amount * _service_fee, DENOMINATOR) actual_amount = unsafe_sub(actual_amount, service_fee_amount) if _deposit.route[last_index] == VETH: send(_deposit.depositor, actual_amount) if service_fee_amount > 0: send(self.service_fee_collector, service_fee_amount) else: self._safe_transfer(_deposit.route[last_index], _deposit.depositor, actual_amount) if service_fee_amount > 0: self._safe_transfer(_deposit.route[last_index], self.service_fee_collector, service_fee_amount) log Swapped(deposit_id, _deposit.remaining_counts, _amount, _out_amount) return _out_amount @internal def _paloma_check(): assert msg.sender == self.compass_evm, "Not compass" assert self.paloma == convert(slice(msg.data, unsafe_sub(len(msg.data), 32), 32), bytes32), "Invalid paloma" @external @nonreentrant('lock') def multiple_swap(deposit_id: DynArray[uint256, MAX_SIZE], remaining_counts: DynArray[uint256, MAX_SIZE], amount_out_min: DynArray[uint256, MAX_SIZE]): self._paloma_check() _len: uint256 = len(deposit_id) assert _len == len(amount_out_min) and _len == len(remaining_counts), "Validation error" for i in range(MAX_SIZE): if i >= len(deposit_id): break self._swap(deposit_id[i], remaining_counts[i], amount_out_min[i]) @external def multiple_swap_view(deposit_id: DynArray[uint256, MAX_SIZE], remaining_counts: DynArray[uint256, MAX_SIZE]) -> DynArray[uint256, MAX_SIZE]: assert msg.sender == empty(address) # only for view function _len: uint256 = len(deposit_id) res: DynArray[uint256, MAX_SIZE] = [] for i in range(MAX_SIZE): if i >= len(deposit_id): break res.append(self._swap(deposit_id[i], remaining_counts[i], 1, False)) return res @internal def _cancel(deposit_id: uint256): _deposit: Deposit = self.deposit_list[deposit_id] assert _deposit.depositor == msg.sender, "Unauthorized" assert _deposit.input_amount > 0, "All traded" if _deposit.route[0] == VETH: send(msg.sender, _deposit.input_amount) else: self._safe_transfer(_deposit.route[0], msg.sender, _deposit.input_amount) _deposit.input_amount = 0 _deposit.remaining_counts = 0 self.deposit_list[deposit_id] = _deposit log Canceled(deposit_id) @external @nonreentrant('lock') def cancel(deposit_id: uint256): self._cancel(deposit_id) @external @nonreentrant('lock') def multiple_cancel(deposit_ids: DynArray[uint256, MAX_SIZE]): for deposit_id in deposit_ids: self._cancel(deposit_id) @external def update_compass(new_compass: address): self._paloma_check() self.compass_evm = new_compass log UpdateCompass(msg.sender, new_compass) @external def update_refund_wallet(new_refund_wallet: address): self._paloma_check() old_refund_wallet: address = self.refund_wallet self.refund_wallet = new_refund_wallet log UpdateRefundWallet(old_refund_wallet, new_refund_wallet) @external def update_fee(new_fee: uint256): self._paloma_check() old_fee: uint256 = self.fee self.fee = new_fee log UpdateFee(old_fee, new_fee) @external def set_paloma(): assert msg.sender == self.compass_evm and self.paloma == empty(bytes32) and len(msg.data) == 36, "Unauthorized" _paloma: bytes32 = convert(slice(msg.data, 4, 32), bytes32) self.paloma = _paloma log SetPaloma(_paloma) @external def update_service_fee_collector(new_service_fee_collector: address): self._paloma_check() self.service_fee_collector = new_service_fee_collector log UpdateServiceFeeCollector(msg.sender, new_service_fee_collector) @external def update_service_fee(new_service_fee: uint256): self._paloma_check() assert new_service_fee < DENOMINATOR, "Wrong service fee" old_service_fee: uint256 = self.service_fee self.service_fee = new_service_fee log UpdateServiceFee(old_service_fee, new_service_fee) @external @payable def __default__(): pass
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"name":"Deposited","inputs":[{"name":"deposit_id","type":"uint256","indexed":false},{"name":"token0","type":"address","indexed":false},{"name":"token1","type":"address","indexed":false},{"name":"input_amount","type":"uint256","indexed":false},{"name":"number_trades","type":"uint256","indexed":false},{"name":"interval","type":"uint256","indexed":false},{"name":"starting_time","type":"uint256","indexed":false},{"name":"depositor","type":"address","indexed":false},{"name":"is_stable_swap","type":"bool","indexed":false}],"anonymous":false,"type":"event"},{"name":"Swapped","inputs":[{"name":"deposit_id","type":"uint256","indexed":false},{"name":"remaining_counts","type":"uint256","indexed":false},{"name":"amount","type":"uint256","indexed":false},{"name":"out_amount","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"Canceled","inputs":[{"name":"deposit_id","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"UpdateCompass","inputs":[{"name":"old_compass","type":"address","indexed":false},{"name":"new_compass","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"UpdateRefundWallet","inputs":[{"name":"old_refund_wallet","type":"address","indexed":false},{"name":"new_refund_wallet","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"UpdateFee","inputs":[{"name":"old_fee","type":"uint256","indexed":false},{"name":"new_fee","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"SetPaloma","inputs":[{"name":"paloma","type":"bytes32","indexed":false}],"anonymous":false,"type":"event"},{"name":"UpdateServiceFeeCollector","inputs":[{"name":"old_service_fee_collector","type":"address","indexed":false},{"name":"new_service_fee_collector","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"UpdateServiceFee","inputs":[{"name":"old_service_fee","type":"uint256","indexed":false},{"name":"new_service_fee","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"stateMutability":"nonpayable","type":"constructor","inputs":[{"name":"_compass_evm","type":"address"},{"name":"router","type":"address"},{"name":"_refund_wallet","type":"address"},{"name":"_fee","type":"uint256"},{"name":"_service_fee_collector","type":"address"},{"name":"_service_fee","type":"uint256"}],"outputs":[]},{"stateMutability":"payable","type":"function","name":"deposit","inputs":[{"name":"swap_infos","type":"tuple[]","components":[{"name":"route","type":"address[11]"},{"name":"swap_params","type":"uint256[5][5]"},{"name":"amount","type":"uint256"},{"name":"pools","type":"address[5]"}]},{"name":"number_trades","type":"uint256"},{"name":"interval","type":"uint256"},{"name":"starting_time","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"multiple_swap","inputs":[{"name":"deposit_id","type":"uint256[]"},{"name":"remaining_counts","type":"uint256[]"},{"name":"amount_out_min","type":"uint256[]"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"multiple_swap_view","inputs":[{"name":"deposit_id","type":"uint256[]"},{"name":"remaining_counts","type":"uint256[]"}],"outputs":[{"name":"","type":"uint256[]"}]},{"stateMutability":"nonpayable","type":"function","name":"cancel","inputs":[{"name":"deposit_id","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"multiple_cancel","inputs":[{"name":"deposit_ids","type":"uint256[]"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"update_compass","inputs":[{"name":"new_compass","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"update_refund_wallet","inputs":[{"name":"new_refund_wallet","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"update_fee","inputs":[{"name":"new_fee","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"set_paloma","inputs":[],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"update_service_fee_collector","inputs":[{"name":"new_service_fee_collector","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"update_service_fee","inputs":[{"name":"new_service_fee","type":"uint256"}],"outputs":[]},{"stateMutability":"payable","type":"fallback"},{"stateMutability":"view","type":"function","name":"compass_evm","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"next_deposit","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"refund_wallet","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"fee","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"paloma","inputs":[],"outputs":[{"name":"","type":"bytes32"}]},{"stateMutability":"view","type":"function","name":"service_fee_collector","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"service_fee","inputs":[],"outputs":[{"name":"","type":"uint256"}]}]
Deployed Bytecode
0x5f3560e01c60026012820660011b6119c201601e395f51565b63440e4e7b811861003457346119be5760015460405260206040f35b6340e58ee58118611139576024361034176119be575f546002146119be5760025f55600435610160526100656117fd565b60035f5500611139565b6312ece1ed811861113957346119be5760035460405260206040f3611139565b6322221b0c811861113957346119be5760045460405260206040f3611139565b63ddca3f43811861113957346119be5760055460405260206040f3611139565b63c09f329181186100eb57346119be5760065460405260206040f35b636974af698118611139576024361034176119be576004358060a01c6119be5760c0526101166116ff565b60c0516001557fb682667b5b9327acc3f181a08e32c75a75f74ecb054e108a9c7269f64920ab4a3360e05260c05161010052604060e0a100611139565b63d8fe764d811861016f57346119be5760075460405260206040f35b63ff44cecd8118611139576084361034176119be5760043560040160088135116119be57803560208160051b018083610dc03750505060243560040160088135116119be57803560208160051b018083610ee037505050336119be57610dc051611000525f611020525f6008905b8061114052610dc05161114051106101f45761026d565b61102051600781116119be5761114051610dc0518110156119be5760051b610de001516101605261114051610ee0518110156119be5760051b610f0001516101805260016101a0525f6101c05261024c611160611208565b611160518160051b61104001526001810161102052506001018181186101dd575b50506020806111405280611140015f611020518083528060051b5f82600881116119be5780156102b757905b8060051b61104001518160051b602088010152600101818118610299575b50508201602001915050905081019050611140f3611139565b6310d418c281186102ec57346119be5760085460405260206040f35b6323fde8e2811861113957346119be57600154331861031c5760065461031657602436181561031e565b5f61031e565b5f5b61037d57600c6040527f556e617574686f72697a6564000000000000000000000000000000000000000060605260405060405180606001601f825f031636823750506308c379a05f526020602052601f19601f6040510116604401601cfd5b366024116119be576020606052602060046080376060805160200360031b6020820151811c811b905090506040526040516006557f2700ed1ef9147da3f7fdcaae08cbe6d1c92ec7fa6bace169d9c49e398e3cb1ca60405160605260206060a100611139565b632930a9a281186111395760a33611156119be5760043560040160088135116119be5780355f81600881116119be57801561068157905b61054081026060016105408202602086010180358060a01c6119be57825260208101358060a01c6119be57602083015260408101358060a01c6119be57604083015260608101358060a01c6119be57606083015260808101358060a01c6119be57608083015260a08101358060a01c6119be5760a083015260c08101358060a01c6119be5760c083015260e08101358060a01c6119be5760e08301526101008101358060a01c6119be576101008301526101208101358060a01c6119be576101208301526101408101358060a01c6119be5761014083015261016082016101608201803582526020810135602083015260408101356040830152606081013560608301526080810135608083015260a0820160a082018035825260208101356020830152604081013560408301526060810135606083015260808101356080830152505061014082016101408201803582526020810135602083015260408101356040830152606081013560608301526080810135608083015250506101e082016101e0820180358252602081013560208301526040810135604083015260608101356060830152608081013560808301525050610280820161028082018035825260208101356020830152604081013560408301526060810135606083015260808101356080830152505050506104808101356104808301526104a082016104a0820180358060a01c6119be57825260208101358060a01c6119be57602083015260408101358060a01c6119be57604083015260608101358060a01c6119be57606083015260808101358060a01c6119be5760808301525050505060010181811861041a575b50508060405250505f546002146119be5760025f5534612a605260065461070757600e612a80527f50616c6f6d61206e6f7420736574000000000000000000000000000000000000612aa052612a8050612a805180612aa001601f825f031636823750506308c379a0612a40526020612a6052601f19601f612a80510116604401612a5cfd5b600554612a8052612a8051156107c957612a80516024358082028115838383041417156119be5790509050612a8052612a8051612a605110156107a9576010612aa0527f496e73756666696369656e742066656500000000000000000000000000000000612ac052612aa050612aa05180612ac001601f825f031636823750506308c379a0612a60526020612a8052601f19601f612aa0510116604401612a7cfd5b5f5f5f5f612a80516004545ff1156119be57612a8051612a605103612a60525b600354612aa0525f604051600881116119be578015610cbe57905b6105408102606001610540612ac06105408360045afa50505f613000525f6005905b8061302052613020516130205101600a036130005261300051600a81116119be5760051b612ac001511561083957610844565b600101818118610806575b50506001613020525f6005905b806130405260a061304051600481116119be5702612c200160408101905051610879576108fd565b600860a061304051600481116119be5702612c200160408101905051146108e557600960a061304051600481116119be5702612c200160408101905051186108c25760016108e7565b600160a061304051600481116119be5702612c20016060810190505114156108e7565b5f5b156108f2575f613020525b600101818118610851575b5050612f405161096c576014613040527f496e73756666696369656e74206465706f7369740000000000000000000000006130605261304050613040518061306001601f825f031636823750506308c379a061300052602061302052601f19601f61304051011660440161301cfd5b61300051600a81116119be5760051b612ac001516130405273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee612ac05118610a2757612f4051612a60511015610a15576014613060527f496e73756666696369656e74206465706f7369740000000000000000000000006130805261306050613060518061308001601f825f031636823750506308c379a061302052602061304052601f19601f61306051011660440161303cfd5b612f4051612a605103612a6052610aff565b612ac0516323b872dd613060523361308052306130a052612f40516130c0526020613060606461307c5f855af1610a60573d5f5f3e3d5ffd5b3d610a7757803b156119be5760016130e052610a90565b60203d106119be57613060518060011c6119be576130e0525b6130e0905051610aff576013613100527f4661696c6564207472616e7366657246726f6d000000000000000000000000006131205261310050613100518061312001601f825f031636823750506308c379a06130c05260206130e052601f19601f6131005101166044016130dcfd5b606435613060524260643511610b155742613060525b602435610b81576011613080527f57726f6e6720747261646520636f756e740000000000000000000000000000006130a0526130805061308051806130a001601f825f031636823750506308c379a061304052602061306052601f19601f61308051011660440161305cfd5b6002612aa0516020525f5260405f20338155600181015f600b905b8060051b612ac0015181840155600101818118610b9c57505050600c81015f6019905b8060051b612c20015181840155600101818118610bbf5750505060258101612f60518155612f80516001820155612fa0516002820155612fc0516003820155612fe051600482015550612f4051602a820155602435602b820155604435602c820155602435602d82015561306051602e820155507f20d88b5bab36c1ab0d0605dfa6d78c6314c7f4dc7f8ef6079097dd0eb925f548612aa05161308052612ac0516130a05261300051600a81116119be5760051b612ac001516130c052612f40516130e0526040602461310037613060516131405233613160526130205161318052610120613080a16001612aa05101612aa0526001018181186107e4575b5050612aa051600355612a605115610ce1575f5f5f5f612a6051335ff1156119be575b60035f5500611139565b634b1cc18a8118610e9c5760c4361034176119be5760043560040160088135116119be57803560208160051b018083610dc03750505060243560040160088135116119be57803560208160051b018083610ee03750505060443560040160088135116119be57803560208160051b018083611000375050505f546002146119be5760025f55610d786116ff565b610dc05161112052611000516111205118610d9c57610ee051611120511815610d9e565b5f5b610e07576010611140527f56616c69646174696f6e206572726f72000000000000000000000000000000006111605261114050611140518061116001601f825f031636823750506308c379a061110052602061112052601f19601f61114051011660440161111cfd5b5f6008905b8061114052610dc0516111405110610e2357610e94565b61114051610dc0518110156119be5760051b610de001516101605261114051610ee0518110156119be5760051b610f0001516101805261114051611000518110156119be5760051b61102001516101a05260016101c052610e85611160611208565b61116050600101818118610e0c575b505060035f55005b63c98856aa8118611139576024361034176119be576004358060a01c6119be5760c052610ec76116ff565b60045460e05260c0516004557f766266fd21d17d465fb39cab9d9ff8020a212598404ab12bfd59aa2de4dea6a260e0516101005260c051610120526040610100a100611139565b63952258c08118611139576044361034176119be5760043560040160088135116119be57803560208160051b0180836107a0375050505f546002146119be5760025f555f6107a051600881116119be578015610f8e57905b8060051b6107c001516108c0526108c05161016052610f836117fd565b600101818118610f66575b505060035f5500611139565b63fbd159558118611139576024361034176119be57610fb76116ff565b60055460c0526004356005557f8987e6f43a6c6bf408c8c427dceb2f98377f859348939ef4ab7b770b510a395a60c05160e05260043561010052604060e0a100611139565b6330e59cbc8118611139576024361034176119be576004358060a01c6119be5760c0526110276116ff565b60c0516007557f62415a60755d7d2d84ea1baece7480e6a431cf87cbbdfa07d5984b243bf61f313360e05260c05161010052604060e0a100611139565b63c4ec2ff18118611139576024361034176119be576110816116ff565b670de0b6b3a763ffff60043511156110ef57601160c0527f57726f6e6720736572766963652066656500000000000000000000000000000060e05260c05060c0518060e001601f825f031636823750506308c379a0608052602060a052601f19601f60c0510116604401609cfd5b60085460c0526004356008557f4f0eeeb973d948a2b83d5d751d3373650b926bfc6b9f9ed579e3dbd48136635460c05160e05260043561010052604060e0a10061113956611139565b5b005b60405163a9059cbb60a05260605160c05260805160e052602060a0604460bc5f855af161116a573d5f5f3e3d5ffd5b3d61118157803b156119be57600161010052611199565b60203d106119be5760a0518060011c6119be57610100525b61010090505161120657600f610120527f4661696c6564207472616e7366657200000000000000000000000000000000006101405261012050610120518061014001601f825f031636823750506308c379a060e052602061010052601f19601f61012051011660440160fcfd5b565b6002610160516020525f5260405f205f602f905b808301548160051b6101e0015260010181811861121c575050506101c051156112b257610180516107805118156112b257600b6107c0527f57726f6e6720636f756e740000000000000000000000000000000000000000006107e0526107c0506107c051806107e001601f825f031636823750506308c379a06107805260206107a052601f19601f6107c051011660440161079cfd5b610720516107805180156119be57808204905090506107c0526107c05161072051036107205260016107805103610780526002610160516020525f5260405f205f602f905b8060051b6101e00151818401556001018181186112f7575050506040366107e0375f6005905b8061082052610820516108205101600a036108005261080051600a81116119be5760051b6102000151156113505761135b565b60010181811861131d575b505073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee61020051186114215760206119e65f395f5163c872a3c56108205261016061084061016061020060045afa506103206109a061032061036060045afa506107c051610cc0526101a051610ce05261068051610d00526106a051610d20526106c051610d40526106e051610d605261070051610d805230610da052602061082061058461083c6107c051855af161140a573d5f5f3e3d5ffd5b60203d106119be576108209050516107e052611597565b6102005163095ea7b36108205260206119e6610840396107c051610860526020610820604461083c5f855af1611459573d5f5f3e3d5ffd5b3d61147057803b156119be57600161088052611489565b60203d106119be57610820518060011c6119be57610880525b6108809050516114f857600e6108a0527f4661696c656420617070726f76650000000000000000000000000000000000006108c0526108a0506108a051806108c001601f825f031636823750506308c379a061086052602061088052601f19601f6108a051011660440161087cfd5b60206119e65f395f5163c872a3c56108205261016061084061016061020060045afa506103206109a061032061036060045afa506107c051610cc0526101a051610ce05261068051610d00526106a051610d20526106c051610d40526106e051610d605261070051610d805230610da052602061082061058461083c5f855af1611584573d5f5f3e3d5ffd5b60203d106119be576108209050516107e0525b6107e051610820525f610840526008546108605261086051156115ec57670de0b6b3a76400006107e051610860518082028115838383041417156119be57905090500461084052610840516108205103610820525b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee61080051600a81116119be5760051b61020001511861164d575f5f5f5f610820516101e0515ff1156119be5761084051156116af575f5f5f5f610840516007545ff1156119be576116af565b61080051600a81116119be5760051b61020001516040526101e0516060526108205160805261167a61113b565b61084051156116af5761080051600a81116119be5760051b6102000151604052600754606052610840516080526116af61113b565b7f1073c37866404dc5ccf364f61b6850f80619085a9a66bb67b4a9681c2ac614586101605161088052610780516108a0526107c0516108c0526107e0516108e0526080610880a16107e051815250565b60015433181561176457600b6040527f4e6f7420636f6d7061737300000000000000000000000000000000000000000060605260405060405180606001601f825f031636823750506308c379a05f526020602052601f19601f6040510116604401601cfd5b3660206020360301116119be5760206040526020602036036060376040805160200360031b6020820151811c811b9050905060065418156117fb57600e6080527f496e76616c69642070616c6f6d6100000000000000000000000000000000000060a0526080506080518060a001601f825f031636823750506308c379a06040526020606052601f19601f6080510116604401605cfd5b565b6002610160516020525f5260405f205f602f905b808301548160051b6101800152600101818118611811575050503361018051181561189b57600c610760527f556e617574686f72697a656400000000000000000000000000000000000000006107805261076050610760518061078001601f825f031636823750506308c379a061072052602061074052601f19601f61076051011660440161073cfd5b6106c05161190857600a610760527f416c6c20747261646564000000000000000000000000000000000000000000006107805261076050610760518061078001601f825f031636823750506308c379a061072052602061074052601f19601f61076051011660440161073cfd5b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6101a0511861193b575f5f5f5f6106c051335ff1156119be57611955565b6101a051604052336060526106c05160805261195561113b565b5f6106c0525f610720526002610160516020525f5260405f205f602f905b8060051b610180015181840155600101818118611973575050507f829a8683c544ad289ce92d3ce06e9ebad69b18a6916e60ec766c2c217461d8e961016051610760526020610760a1565b5f80fd03e300af0ceb00cf0f0e01530ffc001802d010641138113811380f9a008f11381138006f000000000000000000000000f0d4c12a5768d806021f80a262b4d39d26c58b8d
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.