ETH Price: $3,283.00 (-2.36%)
 

Overview

ETH Balance

0.001 ETH

Eth Value

$3.28 (@ $3,283.00/ETH)

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Deposit200261962024-06-05 14:22:35217 days ago1717597355IN
0x4057f5A5...0af54266A
0.011 ETH0.0121738132.99824738

Latest 1 internal transaction

Advanced mode:
Parent Transaction Hash Block
From
To
200261962024-06-05 14:22:35217 days ago1717597355
0x4057f5A5...0af54266A
0.01 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Curve Limit Order Bot

Compiler Version
vyper:0.3.10

Optimization Enabled:
N/A

Other Settings:
default evmVersion, Apache-2.0 license

Contract Source Code (Vyper language format)

#pragma version 0.3.10
#pragma optimize gas
#pragma evm-version shanghai
"""
@title Curve Limit Order Bot
@license Apache 2.0
@author Volume.finance
"""

struct Deposit:
    route: address[11]
    swap_params: uint256[5][5]
    amount: uint256
    pools: address[5]
    depositor: address

enum WithdrawType:
    CANCEL
    PROFIT_TAKING
    STOP_LOSS
    EXPIRE

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

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

event Deposited:
    deposit_id: uint256
    token0: address
    token1: address
    amount0: uint256
    depositor: address
    profit_taking: uint256
    stop_loss: uint256
    expire: uint256

event Withdrawn:
    deposit_id: uint256
    withdrawer: address
    withdraw_type: WithdrawType
    withdraw_amount: 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

VETH: constant(address) = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE # Virtual ETH
MAX_SIZE: constant(uint256) = 8
DENOMINATOR: constant(uint256) = 10 ** 18
ROUTER: immutable(address)
compass: public(address)
deposit_size: public(uint256)
deposits: public(HashMap[uint256, Deposit])
refund_wallet: public(address)
fee: public(uint256)
paloma: public(bytes32)
service_fee_collector: public(address)
service_fee: public(uint256)

@external
def __init__(_compass: address, router: address, _refund_wallet: address, _fee: uint256, _service_fee_collector: address, _service_fee: uint256):
    self.compass = _compass
    ROUTER = router
    self.refund_wallet = _refund_wallet
    self.fee = _fee
    self.service_fee_collector = _service_fee_collector
    self.service_fee = _service_fee
    log UpdateCompass(empty(address), _compass)
    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(route: address[11], swap_params: uint256[5][5], amount: uint256, pools: address[5], profit_taking: uint256, stop_loss: uint256, expire: uint256):
    assert block.timestamp < expire, "Invalidated expire"
    _value: uint256 = msg.value
    assert self.paloma != empty(bytes32), "Paloma not set"
    _fee: uint256 = self.fee
    if _fee > 0:
        assert _value >= _fee, "Insufficient fee"
        send(self.refund_wallet, _fee)
        _value = unsafe_sub(_value, _fee)
    if route[0] == VETH:
        assert _value >= amount, "Insufficient deposit"
        if _value > amount:
            send(msg.sender, unsafe_sub(_value, amount))
    else:
        send(msg.sender, _value)
        assert ERC20(route[0]).transferFrom(msg.sender, self, amount, default_return_value=True), "Failed transferFrom"
    deposit: Deposit = Deposit({
        route: route,
        swap_params: swap_params,
        amount: amount,
        pools: pools,
        depositor: msg.sender
    })
    last_token: address = empty(address)
    for i in range(5):
        last_token = deposit.route[unsafe_sub(10, unsafe_add(i, i))]
        if last_token != empty(address):
            break
    deposit_id: uint256 = self.deposit_size
    self.deposits[deposit_id] = deposit
    self.deposit_size = unsafe_add(deposit_id, 1)
    log Deposited(deposit_id, route[0], last_token, amount, msg.sender, profit_taking, stop_loss, expire)

@internal
def _safe_transfer(_token: address, _to: address, _value: uint256):
    assert ERC20(_token).transfer(_to, _value, default_return_value=True), "Failed transfer"

@internal
@nonreentrant("lock")
def _withdraw(deposit_id: uint256, expected: uint256, withdraw_type: WithdrawType) -> uint256:
    deposit: Deposit = self.deposits[deposit_id]
    assert deposit.amount > 0, "Empty deposit"
    if withdraw_type == WithdrawType.CANCEL:
        assert msg.sender == deposit.depositor or msg.sender == empty(address), "Unauthorized"
    self.deposits[deposit_id] = Deposit({
        route: empty(address[11]),
        swap_params: empty(uint256[5][5]),
        amount: empty(uint256),
        pools: empty(address[5]),
        depositor: empty(address)
    })
    service_fee_amount: uint256 = 0
    _service_fee: uint256 = self.service_fee
    if withdraw_type == WithdrawType.CANCEL or withdraw_type == WithdrawType.EXPIRE:
        if _service_fee > 0:
            service_fee_amount = unsafe_div(deposit.amount * _service_fee, DENOMINATOR)
        actual_amount: uint256 = unsafe_sub(deposit.amount, service_fee_amount)
        if deposit.route[0] == 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[0], deposit.depositor, actual_amount)
            if service_fee_amount > 0:
                self._safe_transfer(deposit.route[0], self.service_fee_collector, service_fee_amount)
        log Withdrawn(deposit_id, msg.sender, withdraw_type, actual_amount)
        return deposit.amount
    else:
        last_token: address = empty(address)
        for i in range(5):
            last_token = deposit.route[unsafe_sub(10, unsafe_add(i, i))]
            if last_token != empty(address):
                break
        amount0: uint256 = 0
        actual_amount: uint256 = 0
        if deposit.route[0] == VETH:
            amount0 = CurveSwapRouter(ROUTER).exchange(deposit.route, deposit.swap_params, deposit.amount, expected, deposit.pools, self, value=deposit.amount)
            if _service_fee > 0:
                service_fee_amount = unsafe_div(amount0 * _service_fee, DENOMINATOR)
            actual_amount = unsafe_sub(amount0, service_fee_amount)
            if last_token == VETH:
                send(deposit.depositor, actual_amount)
                if service_fee_amount > 0:
                    send(self.service_fee_collector, service_fee_amount)
            else:
                self._safe_transfer(last_token, deposit.depositor, actual_amount)
                if service_fee_amount > 0:
                    self._safe_transfer(last_token, self.service_fee_collector, service_fee_amount)
        else:
            assert ERC20(deposit.route[0]).approve(ROUTER, deposit.amount, default_return_value=True), "Failed approve"
            amount0 = CurveSwapRouter(ROUTER).exchange(deposit.route, deposit.swap_params, deposit.amount, expected, deposit.pools, self)
            if _service_fee > 0:
                service_fee_amount = unsafe_div(amount0 * _service_fee, DENOMINATOR)
            actual_amount = unsafe_sub(amount0, service_fee_amount)
            if last_token == VETH:
                send(deposit.depositor, actual_amount)
                if service_fee_amount > 0:
                    send(self.service_fee_collector, service_fee_amount)
            else:
                self._safe_transfer(last_token, deposit.depositor, actual_amount)
                if service_fee_amount > 0:
                    self._safe_transfer(last_token, self.service_fee_collector, service_fee_amount)
        log Withdrawn(deposit_id, msg.sender, withdraw_type, actual_amount)
        return amount0

@external
def cancel(deposit_id: uint256, expected: uint256) -> uint256:
    return self._withdraw(deposit_id, expected, WithdrawType.CANCEL)

@internal
def _paloma_check():
    assert msg.sender == self.compass, "Not compass"
    assert self.paloma == convert(slice(msg.data, unsafe_sub(len(msg.data), 32), 32), bytes32), "Invalid paloma"

@external
def multiple_withdraw(deposit_ids: DynArray[uint256, MAX_SIZE], expected: DynArray[uint256, MAX_SIZE], withdraw_types: DynArray[WithdrawType, MAX_SIZE]):
    self._paloma_check()
    _len: uint256 = len(deposit_ids)
    assert _len == len(expected) and _len == len(withdraw_types), "Validation error"
    for i in range(MAX_SIZE):
        if i >= len(deposit_ids):
            break
        self._withdraw(deposit_ids[i], expected[i], withdraw_types[i])

@external
def withdraw(deposit_id: uint256, withdraw_type: WithdrawType) -> uint256:
    assert msg.sender == empty(address) # this will work as a view function only
    return self._withdraw(deposit_id, 1, withdraw_type)

@external
def update_compass(new_compass: address):
    self._paloma_check()
    self.compass = 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 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
    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

Contract ABI

[{"name":"Deposited","inputs":[{"name":"deposit_id","type":"uint256","indexed":false},{"name":"token0","type":"address","indexed":false},{"name":"token1","type":"address","indexed":false},{"name":"amount0","type":"uint256","indexed":false},{"name":"depositor","type":"address","indexed":false},{"name":"profit_taking","type":"uint256","indexed":false},{"name":"stop_loss","type":"uint256","indexed":false},{"name":"expire","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"Withdrawn","inputs":[{"name":"deposit_id","type":"uint256","indexed":false},{"name":"withdrawer","type":"address","indexed":false},{"name":"withdraw_type","type":"uint256","indexed":false},{"name":"withdraw_amount","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","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":"route","type":"address[11]"},{"name":"swap_params","type":"uint256[5][5]"},{"name":"amount","type":"uint256"},{"name":"pools","type":"address[5]"},{"name":"profit_taking","type":"uint256"},{"name":"stop_loss","type":"uint256"},{"name":"expire","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"cancel","inputs":[{"name":"deposit_id","type":"uint256"},{"name":"expected","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"nonpayable","type":"function","name":"multiple_withdraw","inputs":[{"name":"deposit_ids","type":"uint256[]"},{"name":"expected","type":"uint256[]"},{"name":"withdraw_types","type":"uint256[]"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"withdraw","inputs":[{"name":"deposit_id","type":"uint256"},{"name":"withdraw_type","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]},{"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","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"deposit_size","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"deposits","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"","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":"depositor","type":"address"}]}]},{"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"}]}]

6116385150346101905760206117e25f395f518060a01c6101905760405260206118025f395f518060a01c6101905760605260206118225f395f518060a01c6101905760805260206118625f395f518060a01c6101905760a0526040516001556060516116385260805160045560206118425f395f5160055560a05160075560206118825f395f516008557fb682667b5b9327acc3f181a08e32c75a75f74ecb054e108a9c7269f64920ab4a5f60c05260405160e052604060c0a17f766266fd21d17d465fb39cab9d9ff8020a212598404ab12bfd59aa2de4dea6a25f60c05260805160e052604060c0a17f8987e6f43a6c6bf408c8c427dceb2f98377f859348939ef4ab7b770b510a395a5f60c052602061184260e039604060c0a17f62415a60755d7d2d84ea1baece7480e6a431cf87cbbdfa07d5984b243bf61f315f60c05260a05160e052604060c0a17f4f0eeeb973d948a2b83d5d751d3373650b926bfc6b9f9ed579e3dbd4813663545f60c052602061188260e039604060c0a161163861019461000039611658610000f35b5f80fd5f3560e01c6002600f820660011b61161a01601e395f51565b63eb8acce68118610c2857346116165760015460405260206040f3610c28565b6331d72b2e811861005457346116165760025460405260206040f35b63c98856aa8118610c2857602436103417611616576004358060a01c6116165760c05261007f611518565b60045460e05260c0516004557f766266fd21d17d465fb39cab9d9ff8020a212598404ab12bfd59aa2de4dea6a260e0516101005260c051610120526040610100a100610c28565b63b02c43d0811861010e576024361034176116165760036004356020525f5260405f205f602b905b808301548160051b604001526001018181186100ee575050506105606040f35b63c4ec2ff18118610c28576024361034176116165761012b611518565b670de0b6b3a763ffff600435116116165760085460c0526004356008557f4f0eeeb973d948a2b83d5d751d3373650b926bfc6b9f9ed579e3dbd48136635460c05160e05260043561010052604060e0a100610c28565b6322221b0c8118610c2857346116165760045460405260206040f3610c28565b63ddca3f4381186101bd57346116165760055460405260206040f35b63d0190e158118610749576105a3361115611616576004358060a01c611616576040526024358060a01c611616576060526044358060a01c611616576080526064358060a01c6116165760a0526084358060a01c6116165760c05260a4358060a01c6116165760e05260c4358060a01c611616576101005260e4358060a01c6116165761012052610104358060a01c6116165761014052610124358060a01c6116165761016052610144358060a01c61161657610180526104a4358060a01c611616576101a0526104c4358060a01c611616576101c0526104e4358060a01c611616576101e052610504358060a01c6116165761020052610524358060a01c61161657610220525f546002146116165760025f55610584354210610340576012610240527f496e76616c6964617465642065787069726500000000000000000000000000006102605261024050610240518061026001601f825f031636823750506308c379a061020052602061022052601f19601f61024051011660440161021cfd5b34610240526006546103b157600e610260527f50616c6f6d61206e6f74207365740000000000000000000000000000000000006102805261026050610260518061028001601f825f031636823750506308c379a061022052602061024052601f19601f61026051011660440161023cfd5b6005546102605261026051156104545761026051610240511015610434576010610280527f496e73756666696369656e7420666565000000000000000000000000000000006102a0526102805061028051806102a001601f825f031636823750506308c379a061024052602061026052601f19601f61028051011660440161025cfd5b5f5f5f5f610260516004545ff11561161657610260516102405103610240525b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6040511861050c57610484356102405110156104e4576014610280527f496e73756666696369656e74206465706f7369740000000000000000000000006102a0526102805061028051806102a001601f825f031636823750506308c379a061024052602061026052601f19601f61028051011660440161025cfd5b610484356102405111156105f3575f5f5f5f610484356102405103335ff115611616576105f3565b5f5f5f5f61024051335ff115611616576040516323b872dd61028052336102a052306102c052610484356102e0526020610280606461029c5f855af1610554573d5f5f3e3d5ffd5b3d61056b57803b1561161657600161030052610584565b60203d1061161657610280518060011c61161657610300525b6103009050516105f3576013610320527f4661696c6564207472616e7366657246726f6d000000000000000000000000006103405261032050610320518061034001601f825f031636823750506308c379a06102e052602061030052601f19601f6103205101166044016102fcfd5b610160610280610160604060045afa5060a06101646103e03760a06102046104803760a06102a46105203760a06103446105c03760a06103e46106603761048435610700526101a051610720526101c051610740526101e051610760526102005161078052610220516107a052336107c0525f6107e0525f6005905b8061080052610800516108005101600a03600a81116116165760051b61028001516107e0526107e051156106a2576106ad565b60010181811861066f575b5050600254610800526003610800516020525f5260405f205f602b905b8060051b6102800151818401556001018181186106ca57505050600161080051016002557fc4084cccadd451aff865080eee25dd857e367ac52bcb386ff1833e9ab62c9b066108005161082052604051610840526107e051610860526104843561088052336108a05260606105446108c037610100610820a160035f55005b63441a3e708118610c2857604436103417611616576024358060041c61161657610d60523361161657602060043561016052600161018052610d60516101a052610794610d80610cf7565b610d80f3610c28565b63c09f329181186107b957346116165760065460405260206040f35b636974af69811861081d57602436103417611616576004358060a01c6116165760c0526107e4611518565b60c0516001557fb682667b5b9327acc3f181a08e32c75a75f74ecb054e108a9c7269f64920ab4a3360e05260c05161010052604060e0a1005b6330e59cbc8118610c2857602436103417611616576004358060a01c6116165760c052610848611518565b60c0516007557f62415a60755d7d2d84ea1baece7480e6a431cf87cbbdfa07d5984b243bf61f313360e05260c05161010052604060e0a100610c28565b63d8fe764d8118610c2857346116165760075460405260206040f3610c28565b6310d418c281186108c157346116165760085460405260206040f35b6323fde8e28118610c2857346116165760015433186108f1576006546108eb5760243618156108f3565b5f6108f3565b5f5b61095257600c6040527f556e617574686f72697a6564000000000000000000000000000000000000000060605260405060405180606001601f825f031636823750506308c379a05f526020602052601f19601f6040510116604401601cfd5b36602411611616576020606052602060046080376060805160200360031b6020820151811c811b905090506040526040516006557f2700ed1ef9147da3f7fdcaae08cbe6d1c92ec7fa6bace169d9c49e398e3cb1ca60405160605260206060a100610c28565b62efa8958118610c2857604436103417611616576020604060046101603760016101a0526109e7610d60610cf7565b610d60f3610c28565b630be450008114600336111615610bc15760c43610341761161657600435600401600881351161161657803560208160051b018083610d6037505050602435600401600881351161161657803560208160051b018083610e803750505060443560040160088135116116165780355f8160088111611616578015610a9657905b8060051b6020850101358060041c611616578160051b610fc00152600101818118610a70575b505080610fa0525050610aa7611518565b610d60516110c052610e80516110c05118610acb57610fa0516110c0511815610acd565b5f5b610b365760106110e0527f56616c69646174696f6e206572726f7200000000000000000000000000000000611100526110e0506110e0518061110001601f825f031636823750506308c379a06110a05260206110c052601f19601f6110e05101166044016110bcfd5b5f6008905b806110e052610d60516110e05110610b5257610bbd565b6110e051610d60518110156116165760051b610d800151610160526110e051610e80518110156116165760051b610ea00151610180526110e051610fa0518110156116165760051b610fc001516101a052610bae611100610cf7565b61110050600101818118610b3b575b5050005b63fbd159558118610c285760243610341761161657610bde611518565b60055460c0526004356005557f8987e6f43a6c6bf408c8c427dceb2f98377f859348939ef4ab7b770b510a395a60c05160e05260043561010052604060e0a100610c2856610c28565b5b005b60405163a9059cbb60a05260605160c05260805160e052602060a0604460bc5f855af1610c59573d5f5f3e3d5ffd5b3d610c7057803b1561161657600161010052610c88565b60203d106116165760a0518060011c61161657610100525b610100905051610cf557600f610120527f4661696c6564207472616e7366657200000000000000000000000000000000006101405261012050610120518061014001601f825f031636823750506308c379a060e052602061010052601f19601f61012051011660440160fcfd5b565b5f546002146116165760025f556003610160516020525f5260405f205f602b905b808301548160051b6101c00152600101818118610d185750505061064051610d9f57600d610720527f456d707479206465706f736974000000000000000000000000000000000000006107405261072050610720518061074001601f825f031636823750506308c379a06106e052602061070052601f19601f6107205101166044016106fcfd5b60016101a05118610e2757610700513318610dbb576001610dbe565b33155b610e2757600c610720527f556e617574686f72697a656400000000000000000000000000000000000000006107405261072050610720518061074001601f825f031636823750506308c379a06106e052602061070052601f19601f6107205101166044016106fcfd5b6003610160516020525f5260405f205f81555f60018201555f60028201555f60038201555f60048201555f60058201555f60068201555f60078201555f60088201555f60098201555f600a820155600b81015f81555f60018201555f60028201555f60038201555f6004820155600581015f81555f60018201555f60028201555f60038201555f600482015550600a81015f81555f60018201555f60028201555f60038201555f600482015550600f81015f81555f60018201555f60028201555f60038201555f600482015550601481015f81555f60018201555f60028201555f60038201555f600482015550505f6024820155602581015f81555f60018201555f60028201555f60038201555f6004820155505f602a820155505f610720526008546107405260016101a05118610f60576001610f69565b60086101a05118155b6113f2575f610760525f6005905b8061078052610780516107805101600a03600a81116116165760051b6101c00151610760526107605115610faa57610fb5565b600101818118610f77575b50506040366107803773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6101c051186111555760206116385f395f5163c872a3c56107c0526101606107e06101606101c060045afa5061032061094061032061032060045afa5061064051610c605261018051610c805261066051610ca05261068051610cc0526106a051610ce0526106c051610d00526106e051610d205230610d405260206107c06105846107dc61064051855af161106b573d5f5f3e3d5ffd5b60203d10611616576107c09050516107805261074051156110b157670de0b6b3a76400006107805161074051808202811583838304141715611616579050905004610720525b6107205161078051036107a05273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee610760511861110f575f5f5f5f6107a051610700515ff11561161657610720511561139e575f5f5f5f610720516007545ff1156116165761139e565b61076051604052610700516060526107a05160805261112c610c2a565b610720511561139e57610760516040526007546060526107205160805261139e610c2a5661139e565b6101c05163095ea7b36107c05260206116386107e039610640516108005260206107c060446107dc5f855af161118d573d5f5f3e3d5ffd5b3d6111a457803b15611616576001610820526111bd565b60203d10611616576107c0518060011c61161657610820525b61082090505161122c57600e610840527f4661696c656420617070726f76650000000000000000000000000000000000006108605261084050610840518061086001601f825f031636823750506308c379a061080052602061082052601f19601f61084051011660440161081cfd5b60206116385f395f5163c872a3c56107c0526101606107e06101606101c060045afa5061032061094061032061032060045afa5061064051610c605261018051610c805261066051610ca05261068051610cc0526106a051610ce0526106c051610d00526106e051610d205230610d405260206107c06105846107dc5f855af16112b8573d5f5f3e3d5ffd5b60203d10611616576107c09050516107805261074051156112fe57670de0b6b3a76400006107805161074051808202811583838304141715611616579050905004610720525b6107205161078051036107a05273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee610760511861135c575f5f5f5f6107a051610700515ff11561161657610720511561139e575f5f5f5f610720516007545ff1156116165761139e565b61076051604052610700516060526107a051608052611379610c2a565b610720511561139e57610760516040526007546060526107205160805261139e610c2a565b7f1c84cc0f96161bdafea718a9094dd21c21d1fb2f9ca2ebb9bd4e39918efbaace610160516107c052336107e0526101a051610800526107a0516108205260806107c0a16107805181525061151256611512565b610740511561142657670de0b6b3a76400006106405161074051808202811583838304141715611616579050905004610720525b6107205161064051036107605273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6101c05118611484575f5f5f5f61076051610700515ff1156116165761072051156114c6575f5f5f5f610720516007545ff115611616576114c6565b6101c05160405261070051606052610760516080526114a1610c2a565b61072051156114c6576101c051604052600754606052610720516080526114c6610c2a565b7f1c84cc0f96161bdafea718a9094dd21c21d1fb2f9ca2ebb9bd4e39918efbaace6101605161078052336107a0526101a0516107c052610760516107e0526080610780a1610640518152505b60035f55565b60015433181561157d57600b6040527f4e6f7420636f6d7061737300000000000000000000000000000000000000000060605260405060405180606001601f825f031636823750506308c379a05f526020602052601f19601f6040510116604401601cfd5b3660206020360301116116165760206040526020602036036060376040805160200360031b6020820151811c811b90509050600654181561161457600e6080527f496e76616c69642070616c6f6d6100000000000000000000000000000000000060a0526080506080518060a001601f825f031636823750506308c379a06040526020606052601f19601f6080510116604401605cfd5b565b5f80fd00c609b801810c2709f00885079d0c2700380c270c2708a5001801a10c278419163881181e1820a16576797065728300030a0016000000000000000000000000652bf77d9f1bda15b86894a185e8c22d9c722eb4000000000000000000000000f0d4c12a5768d806021f80a262b4d39d26c58b8d0000000000000000000000006dc0a87638cd75cc700ccdb226c7ab6c054bc70b000000000000000000000000000000000000000000000000002386f26fc10000000000000000000000000000e693603c9441f0e645af6a5898b76a60dbf757f40000000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x5f3560e01c6002600f820660011b61161a01601e395f51565b63eb8acce68118610c2857346116165760015460405260206040f3610c28565b6331d72b2e811861005457346116165760025460405260206040f35b63c98856aa8118610c2857602436103417611616576004358060a01c6116165760c05261007f611518565b60045460e05260c0516004557f766266fd21d17d465fb39cab9d9ff8020a212598404ab12bfd59aa2de4dea6a260e0516101005260c051610120526040610100a100610c28565b63b02c43d0811861010e576024361034176116165760036004356020525f5260405f205f602b905b808301548160051b604001526001018181186100ee575050506105606040f35b63c4ec2ff18118610c28576024361034176116165761012b611518565b670de0b6b3a763ffff600435116116165760085460c0526004356008557f4f0eeeb973d948a2b83d5d751d3373650b926bfc6b9f9ed579e3dbd48136635460c05160e05260043561010052604060e0a100610c28565b6322221b0c8118610c2857346116165760045460405260206040f3610c28565b63ddca3f4381186101bd57346116165760055460405260206040f35b63d0190e158118610749576105a3361115611616576004358060a01c611616576040526024358060a01c611616576060526044358060a01c611616576080526064358060a01c6116165760a0526084358060a01c6116165760c05260a4358060a01c6116165760e05260c4358060a01c611616576101005260e4358060a01c6116165761012052610104358060a01c6116165761014052610124358060a01c6116165761016052610144358060a01c61161657610180526104a4358060a01c611616576101a0526104c4358060a01c611616576101c0526104e4358060a01c611616576101e052610504358060a01c6116165761020052610524358060a01c61161657610220525f546002146116165760025f55610584354210610340576012610240527f496e76616c6964617465642065787069726500000000000000000000000000006102605261024050610240518061026001601f825f031636823750506308c379a061020052602061022052601f19601f61024051011660440161021cfd5b34610240526006546103b157600e610260527f50616c6f6d61206e6f74207365740000000000000000000000000000000000006102805261026050610260518061028001601f825f031636823750506308c379a061022052602061024052601f19601f61026051011660440161023cfd5b6005546102605261026051156104545761026051610240511015610434576010610280527f496e73756666696369656e7420666565000000000000000000000000000000006102a0526102805061028051806102a001601f825f031636823750506308c379a061024052602061026052601f19601f61028051011660440161025cfd5b5f5f5f5f610260516004545ff11561161657610260516102405103610240525b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6040511861050c57610484356102405110156104e4576014610280527f496e73756666696369656e74206465706f7369740000000000000000000000006102a0526102805061028051806102a001601f825f031636823750506308c379a061024052602061026052601f19601f61028051011660440161025cfd5b610484356102405111156105f3575f5f5f5f610484356102405103335ff115611616576105f3565b5f5f5f5f61024051335ff115611616576040516323b872dd61028052336102a052306102c052610484356102e0526020610280606461029c5f855af1610554573d5f5f3e3d5ffd5b3d61056b57803b1561161657600161030052610584565b60203d1061161657610280518060011c61161657610300525b6103009050516105f3576013610320527f4661696c6564207472616e7366657246726f6d000000000000000000000000006103405261032050610320518061034001601f825f031636823750506308c379a06102e052602061030052601f19601f6103205101166044016102fcfd5b610160610280610160604060045afa5060a06101646103e03760a06102046104803760a06102a46105203760a06103446105c03760a06103e46106603761048435610700526101a051610720526101c051610740526101e051610760526102005161078052610220516107a052336107c0525f6107e0525f6005905b8061080052610800516108005101600a03600a81116116165760051b61028001516107e0526107e051156106a2576106ad565b60010181811861066f575b5050600254610800526003610800516020525f5260405f205f602b905b8060051b6102800151818401556001018181186106ca57505050600161080051016002557fc4084cccadd451aff865080eee25dd857e367ac52bcb386ff1833e9ab62c9b066108005161082052604051610840526107e051610860526104843561088052336108a05260606105446108c037610100610820a160035f55005b63441a3e708118610c2857604436103417611616576024358060041c61161657610d60523361161657602060043561016052600161018052610d60516101a052610794610d80610cf7565b610d80f3610c28565b63c09f329181186107b957346116165760065460405260206040f35b636974af69811861081d57602436103417611616576004358060a01c6116165760c0526107e4611518565b60c0516001557fb682667b5b9327acc3f181a08e32c75a75f74ecb054e108a9c7269f64920ab4a3360e05260c05161010052604060e0a1005b6330e59cbc8118610c2857602436103417611616576004358060a01c6116165760c052610848611518565b60c0516007557f62415a60755d7d2d84ea1baece7480e6a431cf87cbbdfa07d5984b243bf61f313360e05260c05161010052604060e0a100610c28565b63d8fe764d8118610c2857346116165760075460405260206040f3610c28565b6310d418c281186108c157346116165760085460405260206040f35b6323fde8e28118610c2857346116165760015433186108f1576006546108eb5760243618156108f3565b5f6108f3565b5f5b61095257600c6040527f556e617574686f72697a6564000000000000000000000000000000000000000060605260405060405180606001601f825f031636823750506308c379a05f526020602052601f19601f6040510116604401601cfd5b36602411611616576020606052602060046080376060805160200360031b6020820151811c811b905090506040526040516006557f2700ed1ef9147da3f7fdcaae08cbe6d1c92ec7fa6bace169d9c49e398e3cb1ca60405160605260206060a100610c28565b62efa8958118610c2857604436103417611616576020604060046101603760016101a0526109e7610d60610cf7565b610d60f3610c28565b630be450008114600336111615610bc15760c43610341761161657600435600401600881351161161657803560208160051b018083610d6037505050602435600401600881351161161657803560208160051b018083610e803750505060443560040160088135116116165780355f8160088111611616578015610a9657905b8060051b6020850101358060041c611616578160051b610fc00152600101818118610a70575b505080610fa0525050610aa7611518565b610d60516110c052610e80516110c05118610acb57610fa0516110c0511815610acd565b5f5b610b365760106110e0527f56616c69646174696f6e206572726f7200000000000000000000000000000000611100526110e0506110e0518061110001601f825f031636823750506308c379a06110a05260206110c052601f19601f6110e05101166044016110bcfd5b5f6008905b806110e052610d60516110e05110610b5257610bbd565b6110e051610d60518110156116165760051b610d800151610160526110e051610e80518110156116165760051b610ea00151610180526110e051610fa0518110156116165760051b610fc001516101a052610bae611100610cf7565b61110050600101818118610b3b575b5050005b63fbd159558118610c285760243610341761161657610bde611518565b60055460c0526004356005557f8987e6f43a6c6bf408c8c427dceb2f98377f859348939ef4ab7b770b510a395a60c05160e05260043561010052604060e0a100610c2856610c28565b5b005b60405163a9059cbb60a05260605160c05260805160e052602060a0604460bc5f855af1610c59573d5f5f3e3d5ffd5b3d610c7057803b1561161657600161010052610c88565b60203d106116165760a0518060011c61161657610100525b610100905051610cf557600f610120527f4661696c6564207472616e7366657200000000000000000000000000000000006101405261012050610120518061014001601f825f031636823750506308c379a060e052602061010052601f19601f61012051011660440160fcfd5b565b5f546002146116165760025f556003610160516020525f5260405f205f602b905b808301548160051b6101c00152600101818118610d185750505061064051610d9f57600d610720527f456d707479206465706f736974000000000000000000000000000000000000006107405261072050610720518061074001601f825f031636823750506308c379a06106e052602061070052601f19601f6107205101166044016106fcfd5b60016101a05118610e2757610700513318610dbb576001610dbe565b33155b610e2757600c610720527f556e617574686f72697a656400000000000000000000000000000000000000006107405261072050610720518061074001601f825f031636823750506308c379a06106e052602061070052601f19601f6107205101166044016106fcfd5b6003610160516020525f5260405f205f81555f60018201555f60028201555f60038201555f60048201555f60058201555f60068201555f60078201555f60088201555f60098201555f600a820155600b81015f81555f60018201555f60028201555f60038201555f6004820155600581015f81555f60018201555f60028201555f60038201555f600482015550600a81015f81555f60018201555f60028201555f60038201555f600482015550600f81015f81555f60018201555f60028201555f60038201555f600482015550601481015f81555f60018201555f60028201555f60038201555f600482015550505f6024820155602581015f81555f60018201555f60028201555f60038201555f6004820155505f602a820155505f610720526008546107405260016101a05118610f60576001610f69565b60086101a05118155b6113f2575f610760525f6005905b8061078052610780516107805101600a03600a81116116165760051b6101c00151610760526107605115610faa57610fb5565b600101818118610f77575b50506040366107803773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6101c051186111555760206116385f395f5163c872a3c56107c0526101606107e06101606101c060045afa5061032061094061032061032060045afa5061064051610c605261018051610c805261066051610ca05261068051610cc0526106a051610ce0526106c051610d00526106e051610d205230610d405260206107c06105846107dc61064051855af161106b573d5f5f3e3d5ffd5b60203d10611616576107c09050516107805261074051156110b157670de0b6b3a76400006107805161074051808202811583838304141715611616579050905004610720525b6107205161078051036107a05273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee610760511861110f575f5f5f5f6107a051610700515ff11561161657610720511561139e575f5f5f5f610720516007545ff1156116165761139e565b61076051604052610700516060526107a05160805261112c610c2a565b610720511561139e57610760516040526007546060526107205160805261139e610c2a5661139e565b6101c05163095ea7b36107c05260206116386107e039610640516108005260206107c060446107dc5f855af161118d573d5f5f3e3d5ffd5b3d6111a457803b15611616576001610820526111bd565b60203d10611616576107c0518060011c61161657610820525b61082090505161122c57600e610840527f4661696c656420617070726f76650000000000000000000000000000000000006108605261084050610840518061086001601f825f031636823750506308c379a061080052602061082052601f19601f61084051011660440161081cfd5b60206116385f395f5163c872a3c56107c0526101606107e06101606101c060045afa5061032061094061032061032060045afa5061064051610c605261018051610c805261066051610ca05261068051610cc0526106a051610ce0526106c051610d00526106e051610d205230610d405260206107c06105846107dc5f855af16112b8573d5f5f3e3d5ffd5b60203d10611616576107c09050516107805261074051156112fe57670de0b6b3a76400006107805161074051808202811583838304141715611616579050905004610720525b6107205161078051036107a05273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee610760511861135c575f5f5f5f6107a051610700515ff11561161657610720511561139e575f5f5f5f610720516007545ff1156116165761139e565b61076051604052610700516060526107a051608052611379610c2a565b610720511561139e57610760516040526007546060526107205160805261139e610c2a565b7f1c84cc0f96161bdafea718a9094dd21c21d1fb2f9ca2ebb9bd4e39918efbaace610160516107c052336107e0526101a051610800526107a0516108205260806107c0a16107805181525061151256611512565b610740511561142657670de0b6b3a76400006106405161074051808202811583838304141715611616579050905004610720525b6107205161064051036107605273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6101c05118611484575f5f5f5f61076051610700515ff1156116165761072051156114c6575f5f5f5f610720516007545ff115611616576114c6565b6101c05160405261070051606052610760516080526114a1610c2a565b61072051156114c6576101c051604052600754606052610720516080526114c6610c2a565b7f1c84cc0f96161bdafea718a9094dd21c21d1fb2f9ca2ebb9bd4e39918efbaace6101605161078052336107a0526101a0516107c052610760516107e0526080610780a1610640518152505b60035f55565b60015433181561157d57600b6040527f4e6f7420636f6d7061737300000000000000000000000000000000000000000060605260405060405180606001601f825f031636823750506308c379a05f526020602052601f19601f6040510116604401601cfd5b3660206020360301116116165760206040526020602036036060376040805160200360031b6020820151811c811b90509050600654181561161457600e6080527f496e76616c69642070616c6f6d6100000000000000000000000000000000000060a0526080506080518060a001601f825f031636823750506308c379a06040526020606052601f19601f6080510116604401605cfd5b565b5f80fd00c609b801810c2709f00885079d0c2700380c270c2708a5001801a10c27000000000000000000000000f0d4c12a5768d806021f80a262b4d39d26c58b8d

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000652bf77d9f1bda15b86894a185e8c22d9c722eb4000000000000000000000000f0d4c12a5768d806021f80a262b4d39d26c58b8d0000000000000000000000006dc0a87638cd75cc700ccdb226c7ab6c054bc70b000000000000000000000000000000000000000000000000002386f26fc10000000000000000000000000000e693603c9441f0e645af6a5898b76a60dbf757f40000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _compass (address): 0x652Bf77d9F1BDA15B86894a185E8C22d9c722EB4
Arg [1] : router (address): 0xF0d4c12A5768D806021F80a262B4d39d26C58b8D
Arg [2] : _refund_wallet (address): 0x6dc0A87638CD75Cc700cCdB226c7ab6C054bc70b
Arg [3] : _fee (uint256): 10000000000000000
Arg [4] : _service_fee_collector (address): 0xe693603C9441f0e645Af6A5898b76a60dbf757F4
Arg [5] : _service_fee (uint256): 0

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 000000000000000000000000652bf77d9f1bda15b86894a185e8c22d9c722eb4
Arg [1] : 000000000000000000000000f0d4c12a5768d806021f80a262b4d39d26c58b8d
Arg [2] : 0000000000000000000000006dc0a87638cd75cc700ccdb226c7ab6c054bc70b
Arg [3] : 000000000000000000000000000000000000000000000000002386f26fc10000
Arg [4] : 000000000000000000000000e693603c9441f0e645af6a5898b76a60dbf757f4
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000000


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
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.