ETH Price: $3,263.55 (+4.90%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Update_valset217169352025-01-27 16:04:353 days ago1737993875IN
0xDcBd07EE...9c7ed391d
0 ETH0.0042123622.87226598
Submit_logic_cal...217169182025-01-27 16:01:113 days ago1737993671IN
0xDcBd07EE...9c7ed391d
0 ETH0.0065277720.33436303
Submit_logic_cal...217010272025-01-25 10:48:595 days ago1737802139IN
0xDcBd07EE...9c7ed391d
0 ETH0.00151584.81276325
Update_valset217010242025-01-25 10:48:235 days ago1737802103IN
0xDcBd07EE...9c7ed391d
0 ETH0.000969235.17332067
Submit_logic_cal...216954262025-01-24 16:02:116 days ago1737734531IN
0xDcBd07EE...9c7ed391d
0 ETH0.0050882615.98825777
Update_valset216954232025-01-24 16:01:356 days ago1737734495IN
0xDcBd07EE...9c7ed391d
0 ETH0.0032678116.51543488
Submit_logic_cal...216874172025-01-23 13:13:357 days ago1737638015IN
0xDcBd07EE...9c7ed391d
0 ETH0.0035836310.88266206
Update_valset216874112025-01-23 13:12:237 days ago1737637943IN
0xDcBd07EE...9c7ed391d
0 ETH0.001488777.27775263
Update_valset216755802025-01-21 21:34:118 days ago1737495251IN
0xDcBd07EE...9c7ed391d
0 ETH0.002723914.14348583
Submit_logic_cal...216755692025-01-21 21:31:598 days ago1737495119IN
0xDcBd07EE...9c7ed391d
0 ETH0.0041741313.28967117
Update_valset216732102025-01-21 13:38:119 days ago1737466691IN
0xDcBd07EE...9c7ed391d
0 ETH0.0030436416.12763804
Update_valset216731972025-01-21 13:35:359 days ago1737466535IN
0xDcBd07EE...9c7ed391d
0 ETH0.0029720715.00291706
Submit_logic_cal...216731762025-01-21 13:31:239 days ago1737466283IN
0xDcBd07EE...9c7ed391d
0 ETH0.0048079114.83703461
Update_valset216731722025-01-21 13:30:359 days ago1737466235IN
0xDcBd07EE...9c7ed391d
0 ETH0.0027036914.06862251
Submit_logic_cal...216695762025-01-21 1:27:239 days ago1737422843IN
0xDcBd07EE...9c7ed391d
0 ETH0.0035969711.47371639
Submit_logic_cal...216695542025-01-21 1:22:599 days ago1737422579IN
0xDcBd07EE...9c7ed391d
0 ETH0.0033799310.77208761
Update_valset216695522025-01-21 1:22:359 days ago1737422555IN
0xDcBd07EE...9c7ed391d
0 ETH0.002073810.61845717
Submit_logic_cal...216580332025-01-19 10:47:4711 days ago1737283667IN
0xDcBd07EE...9c7ed391d
0 ETH0.0085548326.80296713
Update_valset216580302025-01-19 10:47:1111 days ago1737283631IN
0xDcBd07EE...9c7ed391d
0 ETH0.0055480527.06910318
Submit_logic_cal...216358602025-01-16 8:29:4714 days ago1737016187IN
0xDcBd07EE...9c7ed391d
0 ETH0.00112023.24710671
Update_valset216358582025-01-16 8:29:2314 days ago1737016163IN
0xDcBd07EE...9c7ed391d
0 ETH0.000616493.13509674
Submit_logic_cal...216317212025-01-15 18:37:3514 days ago1736966255IN
0xDcBd07EE...9c7ed391d
0 ETH0.0047531714.75109252
Update_valset216317172025-01-15 18:36:4714 days ago1736966207IN
0xDcBd07EE...9c7ed391d
0 ETH0.0029083515.52552575
Submit_logic_cal...216203572025-01-14 4:33:1116 days ago1736829191IN
0xDcBd07EE...9c7ed391d
0 ETH0.00048081.92610123
Submit_logic_cal...216203502025-01-14 4:31:4716 days ago1736829107IN
0xDcBd07EE...9c7ed391d
0 ETH0.000457791.83866667
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
214377992024-12-19 16:36:1142 days ago1734626171
0xDcBd07EE...9c7ed391d
0.1 ETH
212876592024-11-28 17:21:5963 days ago1732814519
0xDcBd07EE...9c7ed391d
0.1 ETH
212809022024-11-27 18:34:1163 days ago1732732451
0xDcBd07EE...9c7ed391d
0.1 ETH
211955162024-11-15 20:36:2375 days ago1731702983
0xDcBd07EE...9c7ed391d
 Contract Creation0 ETH
211952702024-11-15 19:46:2375 days ago1731699983
0xDcBd07EE...9c7ed391d
0.1 ETH
211937942024-11-15 14:49:2376 days ago1731682163
0xDcBd07EE...9c7ed391d
0.1 ETH
211447532024-11-08 18:35:5982 days ago1731090959
0xDcBd07EE...9c7ed391d
0.1 ETH
210802962024-10-30 18:39:2391 days ago1730313563
0xDcBd07EE...9c7ed391d
0.1 ETH
210716162024-10-29 13:33:4793 days ago1730208827
0xDcBd07EE...9c7ed391d
0.1 ETH
210667152024-10-28 21:07:5993 days ago1730149679
0xDcBd07EE...9c7ed391d
0.1 ETH
210447042024-10-25 19:24:4796 days ago1729884287
0xDcBd07EE...9c7ed391d
0.1 ETH
210301502024-10-23 18:41:5998 days ago1729708919
0xDcBd07EE...9c7ed391d
0.1 ETH
210194152024-10-22 6:45:35100 days ago1729579535
0xDcBd07EE...9c7ed391d
 Contract Creation0 ETH
210145962024-10-21 14:37:11101 days ago1729521431
0xDcBd07EE...9c7ed391d
0.05 ETH
209795002024-10-16 17:05:11106 days ago1729098311
0xDcBd07EE...9c7ed391d
0.1 ETH
209368822024-10-10 18:03:35111 days ago1728583415
0xDcBd07EE...9c7ed391d
0.1 ETH
209301882024-10-09 19:40:11112 days ago1728502811
0xDcBd07EE...9c7ed391d
0.1 ETH
208758832024-10-02 6:00:47120 days ago1727848847
0xDcBd07EE...9c7ed391d
0.1 ETH
208223092024-09-24 18:40:47127 days ago1727203247
0xDcBd07EE...9c7ed391d
0.1 ETH
208219922024-09-24 17:37:11128 days ago1727199431
0xDcBd07EE...9c7ed391d
0.2 ETH
208140322024-09-23 14:59:11129 days ago1727103551
0xDcBd07EE...9c7ed391d
0.1 ETH
207923802024-09-20 14:24:59132 days ago1726842299
0xDcBd07EE...9c7ed391d
0.1 ETH
207788092024-09-18 16:55:47134 days ago1726678547
0xDcBd07EE...9c7ed391d
0.04 ETH
207778632024-09-18 13:45:59134 days ago1726667159
0xDcBd07EE...9c7ed391d
0.05 ETH
206926812024-09-06 16:15:47146 days ago1725639347
0xDcBd07EE...9c7ed391d
0.2 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Compass

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 Compass
@license MIT
@author Volume.Finance
@notice v2.0.0
"""

MAX_VALIDATORS: constant(uint256) = 200
MAX_PAYLOAD: constant(uint256) = 10240
MAX_EVENT: constant(uint256) = 1024
MAX_BATCH: constant(uint256) = 64

POWER_THRESHOLD: constant(uint256) = 2_863_311_530 # 2/3 of 2^32, Validator powers will be normalized to sum to 2 ^ 32 in every valset update.
compass_id: public(immutable(bytes32))

interface ERC20:
    def balanceOf(_owner: address) -> uint256: view
    def transfer(_to: address, _value: uint256) -> bool: nonpayable
    def transferFrom(_from: address, _to: address, _value: uint256) -> bool: nonpayable

interface FeeManager:
    def deposit(depositor_paloma_address: bytes32): payable
    def withdraw(receiver: address, amount:uint256, dex: address, payload: Bytes[1028], min_grain: uint256): nonpayable
    def transfer_fees(fee_args: FeeArgs, relayer: address): nonpayable
    def security_fee_topup(): payable
    def reserve_security_fee(sender: address, gas_fee_amount: uint256): nonpayable
    def bridge_community_fee_to_paloma(amount: uint256, dex: address, payload: Bytes[1028], min_grain: uint256) -> (address, uint256): nonpayable
    def update_compass(_new_compass: address): nonpayable

interface Compass:
    def FEE_MANAGER() -> address: view

interface Deployer:
    def deployFromBytecode(_bytecode: Bytes[24576]) -> address: nonpayable

struct Valset:
    validators: DynArray[address, MAX_VALIDATORS] # Validator addresses
    powers: DynArray[uint256, MAX_VALIDATORS] # Powers of given validators, in the same order as validators array
    valset_id: uint256 # nonce of this validator set

struct Signature:
    v: uint256
    r: uint256
    s: uint256

struct Consensus:
    valset: Valset # Valset data
    signatures: DynArray[Signature, MAX_VALIDATORS] # signatures in the same order as validator array in valset

struct LogicCallArgs:
    logic_contract_address: address # the arbitrary contract address to external call
    payload: Bytes[MAX_PAYLOAD] # payloads

struct TokenSendArgs:
    receiver: DynArray[address, MAX_BATCH]
    amount: DynArray[uint256, MAX_BATCH]

struct FeeArgs:
    relayer_fee: uint256 # Total amount to alot for relayer
    community_fee: uint256 # Total amount to alot for community wallet
    security_fee: uint256 # Total amount to alot for security wallet
    fee_payer_paloma_address: bytes32 # Paloma address covering the fees

event ValsetUpdated:
    checkpoint: bytes32
    valset_id: uint256
    event_id: uint256

event LogicCallEvent:
    logic_contract_address: address
    payload: Bytes[MAX_PAYLOAD]
    message_id: uint256
    event_id: uint256

event SendToPalomaEvent:
    token: address
    sender: address
    receiver: bytes32
    amount: uint256
    nonce: uint256
    event_id: uint256

event BatchSendEvent:
    token: address
    batch_id: uint256
    nonce: uint256
    event_id: uint256

event ERC20DeployedEvent:
    paloma_denom: String[64]
    token_contract: address
    name: String[64]
    symbol: String[32]
    decimals: uint8
    event_id: uint256

event FundsDepositedEvent:
    depositor_paloma_address: bytes32
    sender: address
    amount: uint256

event FundsWithdrawnEvent:
    receiver: address
    amount: uint256

event UpdateCompass:
    contract_address: address
    payload: Bytes[MAX_PAYLOAD]
    event_id: uint256

event NodeSaleEvent:
    contract_address: address
    buyer: address
    paloma: bytes32
    node_count: uint256
    grain_amount: uint256
    nonce: uint256
    event_id: uint256

event ContractDeployed:
    child: address
    deployer: address
    event_id: uint256

last_checkpoint: public(bytes32)
last_valset_id: public(uint256)
last_event_id: public(uint256)
last_gravity_nonce: public(uint256)
last_batch_id: public(HashMap[address, uint256])
message_id_used: public(HashMap[uint256, bool])
slc_switch: public(bool)
FEE_MANAGER: public(immutable(address))

# compass_id: unique identifier for compass instance
# valset: initial validator set
@external
def __init__(_compass_id: bytes32, _event_id: uint256, _gravity_nonce:uint256, valset: Valset, fee_manager: address):
    compass_id = _compass_id
    cumulative_power: uint256 = 0
    i: uint256 = 0
    # check cumulative power is enough
    for validator in valset.validators:
        cumulative_power += valset.powers[i]
        if cumulative_power >= POWER_THRESHOLD:
            break
        i = unsafe_add(i, 1)
    self.power_check(cumulative_power)
    new_checkpoint: bytes32 = keccak256(_abi_encode(valset.validators, valset.powers, valset.valset_id, compass_id, method_id=method_id("checkpoint(address[],uint256[],uint256,bytes32)")))
    self.last_checkpoint = new_checkpoint
    self.last_valset_id = valset.valset_id
    self.last_event_id = _event_id
    self.last_gravity_nonce = _gravity_nonce
    FEE_MANAGER = fee_manager
    log ValsetUpdated(new_checkpoint, valset.valset_id, _event_id)

# check if cumulated power is enough
@internal
def power_check(cumulative_power: uint256):
    assert cumulative_power >= POWER_THRESHOLD, "Insufficient Power"


# utility function to verify EIP712 signature
@internal
@pure
def verify_signature(signer: address, hash: bytes32, sig: Signature) -> bool:
    message_digest: bytes32 = keccak256(concat(convert("\x19Ethereum Signed Message:\n32", Bytes[28]), hash))
    return signer == ecrecover(message_digest, sig.v, sig.r, sig.s)

# consensus: validator set and signatures
# hash: what we are checking they have signed
@internal
def check_validator_signatures(consensus: Consensus, hash: bytes32):
    i: uint256 = 0
    cumulative_power: uint256 = 0
    for sig in consensus.signatures:
        if sig.v != 0:
            assert self.verify_signature(consensus.valset.validators[i], hash, sig), "Invalid Signature"
            cumulative_power += consensus.valset.powers[i]
            if cumulative_power >= POWER_THRESHOLD:
                break
        i = unsafe_add(i, 1)
    self.power_check(cumulative_power)

# Make a new checkpoint from the supplied validator set
# A checkpoint is a hash of all relevant information about the valset. This is stored by the contract,
# instead of storing the information directly. This saves on storage and gas.
# The format of the checkpoint is:
# keccak256 hash of abi_encoded checkpoint(validators[], powers[], valset_id, compass_id)
# The validator powers must be decreasing or equal. This is important for checking the signatures on the
# next valset, since it allows the caller to stop verifying signatures once a quorum of signatures have been verified.
@internal
@view
def make_checkpoint(valset: Valset) -> bytes32:
    return keccak256(_abi_encode(valset.validators, valset.powers, valset.valset_id, compass_id, method_id=method_id("checkpoint(address[],uint256[],uint256,bytes32)")))

# check if the gas estimate is too big
@internal
def gas_check(gas_estimate: uint256):
    assert msg.gas >= gas_estimate, "Insufficient funds to cover gas estimate"

@internal
def deadline_check(deadline: uint256):
    assert block.timestamp <= deadline, "Timeout"

@internal
def reserve_security_fee(relayer: address, gas_estimate: uint256):
    self.gas_check(gas_estimate)
    FeeManager(FEE_MANAGER).reserve_security_fee(relayer, gas_estimate)

@internal
def check_checkpoint(checkpoint: bytes32):
    assert self.last_checkpoint == checkpoint, "Incorrect Checkpoint"

# This updates the valset by checking that the validators in the current valset have signed off on the
# new valset. The signatures supplied are the signatures of the current valset over the checkpoint hash
# generated from the new valset.
# Anyone can call this function, but they must supply valid signatures of constant_powerThreshold of the current valset over
# the new valset.
# valset: new validator set to update with
# consensus: current validator set and signatures
@external
def update_valset(consensus: Consensus, new_valset: Valset, relayer: address, gas_estimate: uint256):
    self.reserve_security_fee(relayer, gas_estimate)
    # check if new valset_id is greater than current valset_id
    assert new_valset.valset_id > consensus.valset.valset_id, "Invalid Valset ID"
    cumulative_power: uint256 = 0
    i: uint256 = 0
    # check cumulative power is enough
    for validator in new_valset.validators:
        cumulative_power += new_valset.powers[i]
        if cumulative_power >= POWER_THRESHOLD:
            break
        i = unsafe_add(i, 1)
    self.power_check(cumulative_power)
    # check if the supplied current validator set matches the saved checkpoint
    self.check_checkpoint(self.make_checkpoint(consensus.valset))
    # calculate the new checkpoint
    new_checkpoint: bytes32 = self.make_checkpoint(new_valset)
    args_hash: bytes32 = keccak256(_abi_encode(new_checkpoint, relayer, gas_estimate, method_id=method_id("update_valset(bytes32,address,uint256)")))
    # check if enough validators signed new validator set (new checkpoint)
    self.check_validator_signatures(consensus, args_hash)
    self.last_checkpoint = new_checkpoint
    self.last_valset_id = new_valset.valset_id
    event_id: uint256 = unsafe_add(self.last_event_id, 1)
    self.last_event_id = event_id
    log ValsetUpdated(new_checkpoint, new_valset.valset_id, event_id)

# This makes calls to contracts that execute arbitrary logic
# message_id is to prevent replay attack and every message_id can be used only once
@external
def submit_logic_call(consensus: Consensus, args: LogicCallArgs, fee_args: FeeArgs, message_id: uint256, deadline: uint256, relayer: address):
    FeeManager(FEE_MANAGER).transfer_fees(fee_args, relayer)
    self.deadline_check(deadline)
    assert not self.message_id_used[message_id], "Used Message_ID"
    self.message_id_used[message_id] = True
    # check if the supplied current validator set matches the saved checkpoint
    self.check_checkpoint(self.make_checkpoint(consensus.valset))
    # signing data is keccak256 hash of abi_encoded logic_call(args, fee_args, message_id, compass_id, deadline, relayer)
    args_hash: bytes32 = keccak256(_abi_encode(args, fee_args, message_id, compass_id, deadline, relayer, method_id=method_id("logic_call((address,bytes),(uint256,uint256,uint256,bytes32),uint256,bytes32,uint256,address)")))
    # check if enough validators signed args_hash
    self.check_validator_signatures(consensus, args_hash)
    # make call to logic contract
    self.slc_switch = True
    raw_call(args.logic_contract_address, args.payload)
    self.slc_switch = False
    event_id: uint256 = unsafe_add(self.last_event_id, 1)
    self.last_event_id = event_id
    log LogicCallEvent(args.logic_contract_address, args.payload, message_id, event_id)

@internal
def _send_token_to_paloma(token: address, receiver: bytes32, amount: uint256):
    _nonce: uint256 = unsafe_add(self.last_gravity_nonce, 1)
    self.last_gravity_nonce = _nonce
    _event_id: uint256 = unsafe_add(self.last_event_id, 1)
    self.last_event_id = _event_id
    log SendToPalomaEvent(token, msg.sender, receiver, amount, _nonce, _event_id)

@external
def send_token_to_paloma(token: address, receiver: bytes32, amount: uint256):
    _balance: uint256 = ERC20(token).balanceOf(self)
    assert ERC20(token).transferFrom(msg.sender, self, amount, default_return_value=True), "failed TransferFrom"
    _balance = ERC20(token).balanceOf(self) - _balance
    self._send_token_to_paloma(token, receiver, _balance)

@external
def submit_batch(consensus: Consensus, token: address, args: TokenSendArgs, batch_id: uint256, deadline: uint256, relayer: address, gas_estimate: uint256):
    self.reserve_security_fee(relayer, gas_estimate)
    self.deadline_check(deadline)
    assert self.last_batch_id[token] < batch_id, "Wrong batch id"
    length: uint256 = len(args.receiver)
    assert length == len(args.amount), "Unmatched Params"
    # check if the supplied current validator set matches the saved checkpoint
    self.check_checkpoint(self.make_checkpoint(consensus.valset))
    # signing data is keccak256 hash of abi_encoded batch_call(args, batch_id, compass_id, deadline, relayer, gas_estimate)
    args_hash: bytes32 = keccak256(_abi_encode(token, args, batch_id, compass_id, deadline, relayer, gas_estimate, method_id=method_id("batch_call(address,(address[],uint256[]),uint256,bytes32,uint256,address,uint256)")))
    # check if enough validators signed args_hash
    self.check_validator_signatures(consensus, args_hash)
    # make call to logic contract
    for i in range(MAX_BATCH):
        if  i >= length:
            break
        assert ERC20(token).transfer(args.receiver[i], args.amount[i], default_return_value=True), "failed transfer"
    _nonce: uint256 = unsafe_add(self.last_gravity_nonce, 1)
    self.last_gravity_nonce = _nonce
    _event_id: uint256 = unsafe_add(self.last_event_id, 1)
    self.last_event_id = _event_id
    self.last_batch_id[token] = batch_id
    log BatchSendEvent(token, batch_id, _nonce, _event_id)

@external
def emit_nodesale_event(buyer: address, paloma: bytes32, node_count: uint256, grain_amount: uint256):
    event_id: uint256 = unsafe_add(self.last_event_id, 1)
    self.last_event_id = event_id
    _nonce: uint256 = unsafe_add(self.last_gravity_nonce, 1)
    self.last_gravity_nonce = _nonce
    log NodeSaleEvent(msg.sender, buyer, paloma, node_count, grain_amount, _nonce, event_id)

@external
def deploy_erc20(_paloma_denom: String[64], _name: String[64], _symbol: String[32], _decimals: uint8, _blueprint: address):
    assert msg.sender == self, "Invalid"
    erc20: address = create_from_blueprint(_blueprint, self, _name, _symbol, _decimals, code_offset=3)
    event_id: uint256 = unsafe_add(self.last_event_id, 1)
    self.last_event_id = event_id
    log ERC20DeployedEvent(_paloma_denom, erc20, _name, _symbol, _decimals, event_id)

@external
@view
def arbitrary_view(contract_address: address, payload: Bytes[1024]) -> Bytes[1024]:
    return raw_call(contract_address, payload, is_static_call=True, max_outsize=1024)


# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 
# F E E S
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 

# Deposit some balance on the contract to be used when sending messages from Paloma.
# depositor_paloma_address: paloma address to which to attribute the sent amount
# amount: amount of COIN to register with compass. Overpaid balance will be sent back.
@external
@payable
@nonreentrant('lock')
def deposit(depositor_paloma_address: bytes32, amount: uint256):
    if msg.value > amount:
        send(msg.sender, unsafe_sub(msg.value, amount))
    else:
        assert amount == msg.value, "Insufficient deposit"
    FeeManager(FEE_MANAGER).deposit(depositor_paloma_address, value=amount)
    log FundsDepositedEvent(depositor_paloma_address, msg.sender, amount)

# Withdraw ramped up claimable rewards from compass. Withdrawals will be swapped and
# reimbursed in GRAIN.
# amount: the amount of COIN to withdraw.
# dex: address of the DEX to use for exchanging the token
# payload: the function payload to exchange ETH to grain for the dex
# min_grain: expected grain amount getting from dex to prevent front-running(high slippage / sandwich attack)
@external
def withdraw(amount:uint256, dex: address, payload: Bytes[1028], min_grain: uint256):
    FeeManager(FEE_MANAGER).withdraw(msg.sender, amount, dex, payload, min_grain)
    log FundsWithdrawnEvent(msg.sender, amount)

# Top up the security funds on the contract used to reimburse all infrastructure
# related messages. All sent value will be consumed.
@external
@payable
@nonreentrant('lock')
def security_fee_topup(amount: uint256):
    if msg.value > amount:
        send(msg.sender, unsafe_sub(msg.value, amount))
    else:
        assert amount == msg.value, "Insufficient deposit"
    # Make sure we check against overflow here
    FeeManager(FEE_MANAGER).security_fee_topup(value=amount)

# Bridge the current balance of the community funds back to Paloma
# consensus: current validator set and signatures
# message_id: incremental unused message ID
# deadline: message deadline
# receiver: Paloma address to receive the funds
# relayer: relayer address
# gas_estimate: gas amount estimation
# amount: Ete amount to swap and bridge
# dex: address of the DEX to use for exchanging the Eth
# payload: the function payload to exchange ETH to grain for the dex
# min_grain: expected grain amount getting from dex to prevent front-running(high slippage / sandwich attack)
@external
@nonreentrant('lock')
def bridge_community_tax_to_paloma(consensus: Consensus, message_id: uint256, deadline: uint256, receiver: bytes32, relayer: address, gas_estimate: uint256, amount:uint256, dex: address, payload: Bytes[1028], min_grain: uint256):
    self.reserve_security_fee(relayer, gas_estimate)
    self.deadline_check(deadline)
    assert not self.message_id_used[message_id], "Used Message_ID"
    self.message_id_used[message_id] = True

    # check if the supplied current validator set matches the saved checkpoint
    self.check_checkpoint(self.make_checkpoint(consensus.valset))

    # signing data is keccak256 hash of abi_encoded logic_call(args, message_id, compass_id, deadline)
    args_hash: bytes32 = keccak256(_abi_encode(message_id, deadline, receiver, relayer, gas_estimate, amount, dex, payload,  min_grain, method_id=method_id("bridge_community_tax_to_paloma(uint256,uint256,byte32,address,uint256,uint256,address,bytes,uint256)")))
    # check if enough validators signed args_hash
    self.check_validator_signatures(consensus, args_hash)

    grain: address = empty(address)
    grain_balance: uint256 = 0
    grain, grain_balance = FeeManager(FEE_MANAGER).bridge_community_fee_to_paloma(amount, dex, payload, min_grain)
    self._send_token_to_paloma(grain, receiver, grain_balance)

# This function is to update compass address in contracts. After running this function, This Compass-evm can't be used anymore.
# consensus: current validator set and signatures
# update_compass_args: array of LogicCallArgs to update compass address in contracts
# deadline: message deadline
# gas_estimate: gas amount estimation
# relayer: relayer address

@external
def compass_update_batch(consensus: Consensus, update_compass_args: DynArray[LogicCallArgs, MAX_BATCH], deadline: uint256, gas_estimate: uint256, relayer: address):
    self.reserve_security_fee(relayer, gas_estimate)
    self.deadline_check(deadline)
    # check if the supplied current validator set matches the saved checkpoint
    self.check_checkpoint(self.make_checkpoint(consensus.valset))
    # signing data is keccak256 hash of abi_encoded logic_call(args, message_id, compass_id, deadline)
    args_hash: bytes32 = keccak256(_abi_encode(update_compass_args, deadline, relayer, gas_estimate, method_id=method_id("compass_update_batch((address,bytes)[],uint256,address,uint256)")))
    # check if enough validators signed args_hash
    self.check_validator_signatures(consensus, args_hash)
    event_id: uint256 = unsafe_add(self.last_event_id, 1)
    for i in range(MAX_BATCH):
        if i >= len(update_compass_args):
            break
        raw_call(update_compass_args[i].logic_contract_address, update_compass_args[i].payload)
        event_id = unsafe_add(event_id, 1)
        log UpdateCompass(update_compass_args[0].logic_contract_address, update_compass_args[0].payload, event_id)
    self.last_event_id = event_id

@external
def deploy_contract(consensus: Consensus, _deployer: address, _bytecode: Bytes[24576], fee_args: FeeArgs, message_id: uint256, deadline: uint256, relayer: address):
    FeeManager(FEE_MANAGER).transfer_fees(fee_args, relayer)
    self.deadline_check(deadline)
    assert not self.message_id_used[message_id], "Used Message_ID"
    self.message_id_used[message_id] = True
    # check if the supplied current validator set matches the saved checkpoint
    self.check_checkpoint(self.make_checkpoint(consensus.valset))
    # signing data is keccak256 hash of abi_encoded deploy_contract(bytecode, fee_args, message_id, compass_id, deadline, relayer)
    args_hash: bytes32 = keccak256(_abi_encode(_deployer, _bytecode, fee_args, message_id, compass_id, deadline, relayer, method_id=method_id("deploy_contract(address,bytes,(uint256,uint256,uint256,bytes32),uint256,bytes32,uint256,address)")))
    # check if enough validators signed args_hash
    self.check_validator_signatures(consensus, args_hash)
    # make call to logic contract
    event_id: uint256 = unsafe_add(self.last_event_id, 1)
    child: address = Deployer(_deployer).deployFromBytecode(_bytecode)
    self.last_event_id = event_id
    log ContractDeployed(child, _deployer, event_id)

Contract Security Audit

Contract ABI

[{"name":"ValsetUpdated","inputs":[{"name":"checkpoint","type":"bytes32","indexed":false},{"name":"valset_id","type":"uint256","indexed":false},{"name":"event_id","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"LogicCallEvent","inputs":[{"name":"logic_contract_address","type":"address","indexed":false},{"name":"payload","type":"bytes","indexed":false},{"name":"message_id","type":"uint256","indexed":false},{"name":"event_id","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"SendToPalomaEvent","inputs":[{"name":"token","type":"address","indexed":false},{"name":"sender","type":"address","indexed":false},{"name":"receiver","type":"bytes32","indexed":false},{"name":"amount","type":"uint256","indexed":false},{"name":"nonce","type":"uint256","indexed":false},{"name":"event_id","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"BatchSendEvent","inputs":[{"name":"token","type":"address","indexed":false},{"name":"batch_id","type":"uint256","indexed":false},{"name":"nonce","type":"uint256","indexed":false},{"name":"event_id","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"ERC20DeployedEvent","inputs":[{"name":"paloma_denom","type":"string","indexed":false},{"name":"token_contract","type":"address","indexed":false},{"name":"name","type":"string","indexed":false},{"name":"symbol","type":"string","indexed":false},{"name":"decimals","type":"uint8","indexed":false},{"name":"event_id","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"FundsDepositedEvent","inputs":[{"name":"depositor_paloma_address","type":"bytes32","indexed":false},{"name":"sender","type":"address","indexed":false},{"name":"amount","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"FundsWithdrawnEvent","inputs":[{"name":"receiver","type":"address","indexed":false},{"name":"amount","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"UpdateCompass","inputs":[{"name":"contract_address","type":"address","indexed":false},{"name":"payload","type":"bytes","indexed":false},{"name":"event_id","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"NodeSaleEvent","inputs":[{"name":"contract_address","type":"address","indexed":false},{"name":"buyer","type":"address","indexed":false},{"name":"paloma","type":"bytes32","indexed":false},{"name":"node_count","type":"uint256","indexed":false},{"name":"grain_amount","type":"uint256","indexed":false},{"name":"nonce","type":"uint256","indexed":false},{"name":"event_id","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"ContractDeployed","inputs":[{"name":"child","type":"address","indexed":false},{"name":"deployer","type":"address","indexed":false},{"name":"event_id","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"stateMutability":"nonpayable","type":"constructor","inputs":[{"name":"_compass_id","type":"bytes32"},{"name":"_event_id","type":"uint256"},{"name":"_gravity_nonce","type":"uint256"},{"name":"valset","type":"tuple","components":[{"name":"validators","type":"address[]"},{"name":"powers","type":"uint256[]"},{"name":"valset_id","type":"uint256"}]},{"name":"fee_manager","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"update_valset","inputs":[{"name":"consensus","type":"tuple","components":[{"name":"valset","type":"tuple","components":[{"name":"validators","type":"address[]"},{"name":"powers","type":"uint256[]"},{"name":"valset_id","type":"uint256"}]},{"name":"signatures","type":"tuple[]","components":[{"name":"v","type":"uint256"},{"name":"r","type":"uint256"},{"name":"s","type":"uint256"}]}]},{"name":"new_valset","type":"tuple","components":[{"name":"validators","type":"address[]"},{"name":"powers","type":"uint256[]"},{"name":"valset_id","type":"uint256"}]},{"name":"relayer","type":"address"},{"name":"gas_estimate","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"submit_logic_call","inputs":[{"name":"consensus","type":"tuple","components":[{"name":"valset","type":"tuple","components":[{"name":"validators","type":"address[]"},{"name":"powers","type":"uint256[]"},{"name":"valset_id","type":"uint256"}]},{"name":"signatures","type":"tuple[]","components":[{"name":"v","type":"uint256"},{"name":"r","type":"uint256"},{"name":"s","type":"uint256"}]}]},{"name":"args","type":"tuple","components":[{"name":"logic_contract_address","type":"address"},{"name":"payload","type":"bytes"}]},{"name":"fee_args","type":"tuple","components":[{"name":"relayer_fee","type":"uint256"},{"name":"community_fee","type":"uint256"},{"name":"security_fee","type":"uint256"},{"name":"fee_payer_paloma_address","type":"bytes32"}]},{"name":"message_id","type":"uint256"},{"name":"deadline","type":"uint256"},{"name":"relayer","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"send_token_to_paloma","inputs":[{"name":"token","type":"address"},{"name":"receiver","type":"bytes32"},{"name":"amount","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"submit_batch","inputs":[{"name":"consensus","type":"tuple","components":[{"name":"valset","type":"tuple","components":[{"name":"validators","type":"address[]"},{"name":"powers","type":"uint256[]"},{"name":"valset_id","type":"uint256"}]},{"name":"signatures","type":"tuple[]","components":[{"name":"v","type":"uint256"},{"name":"r","type":"uint256"},{"name":"s","type":"uint256"}]}]},{"name":"token","type":"address"},{"name":"args","type":"tuple","components":[{"name":"receiver","type":"address[]"},{"name":"amount","type":"uint256[]"}]},{"name":"batch_id","type":"uint256"},{"name":"deadline","type":"uint256"},{"name":"relayer","type":"address"},{"name":"gas_estimate","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"emit_nodesale_event","inputs":[{"name":"buyer","type":"address"},{"name":"paloma","type":"bytes32"},{"name":"node_count","type":"uint256"},{"name":"grain_amount","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"deploy_erc20","inputs":[{"name":"_paloma_denom","type":"string"},{"name":"_name","type":"string"},{"name":"_symbol","type":"string"},{"name":"_decimals","type":"uint8"},{"name":"_blueprint","type":"address"}],"outputs":[]},{"stateMutability":"view","type":"function","name":"arbitrary_view","inputs":[{"name":"contract_address","type":"address"},{"name":"payload","type":"bytes"}],"outputs":[{"name":"","type":"bytes"}]},{"stateMutability":"payable","type":"function","name":"deposit","inputs":[{"name":"depositor_paloma_address","type":"bytes32"},{"name":"amount","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"withdraw","inputs":[{"name":"amount","type":"uint256"},{"name":"dex","type":"address"},{"name":"payload","type":"bytes"},{"name":"min_grain","type":"uint256"}],"outputs":[]},{"stateMutability":"payable","type":"function","name":"security_fee_topup","inputs":[{"name":"amount","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"bridge_community_tax_to_paloma","inputs":[{"name":"consensus","type":"tuple","components":[{"name":"valset","type":"tuple","components":[{"name":"validators","type":"address[]"},{"name":"powers","type":"uint256[]"},{"name":"valset_id","type":"uint256"}]},{"name":"signatures","type":"tuple[]","components":[{"name":"v","type":"uint256"},{"name":"r","type":"uint256"},{"name":"s","type":"uint256"}]}]},{"name":"message_id","type":"uint256"},{"name":"deadline","type":"uint256"},{"name":"receiver","type":"bytes32"},{"name":"relayer","type":"address"},{"name":"gas_estimate","type":"uint256"},{"name":"amount","type":"uint256"},{"name":"dex","type":"address"},{"name":"payload","type":"bytes"},{"name":"min_grain","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"compass_update_batch","inputs":[{"name":"consensus","type":"tuple","components":[{"name":"valset","type":"tuple","components":[{"name":"validators","type":"address[]"},{"name":"powers","type":"uint256[]"},{"name":"valset_id","type":"uint256"}]},{"name":"signatures","type":"tuple[]","components":[{"name":"v","type":"uint256"},{"name":"r","type":"uint256"},{"name":"s","type":"uint256"}]}]},{"name":"update_compass_args","type":"tuple[]","components":[{"name":"logic_contract_address","type":"address"},{"name":"payload","type":"bytes"}]},{"name":"deadline","type":"uint256"},{"name":"gas_estimate","type":"uint256"},{"name":"relayer","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"deploy_contract","inputs":[{"name":"consensus","type":"tuple","components":[{"name":"valset","type":"tuple","components":[{"name":"validators","type":"address[]"},{"name":"powers","type":"uint256[]"},{"name":"valset_id","type":"uint256"}]},{"name":"signatures","type":"tuple[]","components":[{"name":"v","type":"uint256"},{"name":"r","type":"uint256"},{"name":"s","type":"uint256"}]}]},{"name":"_deployer","type":"address"},{"name":"_bytecode","type":"bytes"},{"name":"fee_args","type":"tuple","components":[{"name":"relayer_fee","type":"uint256"},{"name":"community_fee","type":"uint256"},{"name":"security_fee","type":"uint256"},{"name":"fee_payer_paloma_address","type":"bytes32"}]},{"name":"message_id","type":"uint256"},{"name":"deadline","type":"uint256"},{"name":"relayer","type":"address"}],"outputs":[]},{"stateMutability":"view","type":"function","name":"compass_id","inputs":[],"outputs":[{"name":"","type":"bytes32"}]},{"stateMutability":"view","type":"function","name":"last_checkpoint","inputs":[],"outputs":[{"name":"","type":"bytes32"}]},{"stateMutability":"view","type":"function","name":"last_valset_id","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"last_event_id","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"last_gravity_nonce","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"last_batch_id","inputs":[{"name":"arg0","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"message_id_used","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"","type":"bool"}]},{"stateMutability":"view","type":"function","name":"slc_switch","inputs":[],"outputs":[{"name":"","type":"bool"}]},{"stateMutability":"view","type":"function","name":"FEE_MANAGER","inputs":[],"outputs":[{"name":"","type":"address"}]}]

6166a051503461034c576020612c4c5f395f51602081612bec015f395f51810160c8602082612bec015f395f511161034c57602081612bec015f395f515f8160c8811161034c57801561007c57905b60208160051b6020860101612bec015f395f518060a01c61034c578160051b60c0015260010181811861004e575b50508060a0525050602060208201612bec015f395f51810160c8602082612bec015f395f511161034c57602081612bec015f395f5160208160051b018083612bec016119c039505050602060408201612bec016132e039506020612c6c5f395f518060a01c61034c57613300526020612bec5f395f5161668052604036613320375f60a05160c8811161034c57801561017357905b8060051b60c001516133605261332051613340516119c05181101561034c5760051b6119e0015180820182811061034c57905090506133205263aaaaaaaa613320511061015d57610173565b6001613340510161334052600101818118610111575b5050613320516040526101846102e0565b63299018c26133845260046080806133a452806133a4015f60a0518083528060051b5f8260c8811161034c5780156101d557905b8060051b60c001518160051b6020880101526001018181186101b8575b50508201602001915050905081019050806133c452806133a4015f6119c0518083528060051b5f8260c8811161034c57801561022b57905b8060051b6119e001518160051b60208801015260010181811861020d575b505082016020019150509050810190506132e0516133e4526166805161340452016133805261338080516020820120905061336052613360516001556132e0516002556020612c0c5f395f516003556020612c2c5f395f51600455613300516166a0527fb7ca5e46e360950244488bf096bf742a1f63183cf1ee5b3b0c53045b6247bf5b61336051613380526132e0516133a0526020612c0c6133c0396060613380a1612886610350613dfa396128c6613dfaf35b63aaaaaaaa604051101561034a5760126060527f496e73756666696369656e7420506f776572000000000000000000000000000060805260605060605180608001601f825f031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b565b5f80fd5f3560e01c60026015820660011b61285c01601e395f51565b6384d38f2c8118610036573461285857602061288660403960206040f35b6308a92ad781186122e85761010436103417612858576004356004016040813511612858576020813501808260403750506024356004016040813511612858576020813501808260a0375050604435600401602081351161285857602081350180826101003750506064358060081c61285857610140526084358060a01c612858576101605230331815610129576007610180527f496e76616c6964000000000000000000000000000000000000000000000000006101a0526101805061018051806101a001601f825f031636823750506308c379a061014052602061016052601f19601f61018051011660440161015cfd5b610160516080306101a0526101a0516101e0528061020052806101e001602060a0510180828260a060045afa50508051806020830101601f825f03163682375050601f19601f825160200101169050810190508061022052806101e0016101005181526101205160208201528051806020830101601f825f03163682375050601f19601f82516020010116905081019050610140516101c0526101c051610240526003823b0359600182126128585781600382863c8181018381856101e060045afa5050828201815ff08015612858579050905090509050610180526001600354016101a0526101a0516003557f82fe3a4fa49c6382d0c085746698ddbbafe6c2bf61285b19410644b5b26287c760c0806101c052806101c001602060405101808282604060045afa50508051806020830101601f825f03163682375050601f19601f82516020010116905081019050610180516101e0528061020052806101c001602060a0510180828260a060045afa50508051806020830101601f825f03163682375050601f19601f825160200101169050810190508061022052806101c0016101005181526101205160208201528051806020830101601f825f03163682375050601f19601f8251602001011690508101905061014051610240526101a051610260526101c0a1006122e8565b63a9a4a98381186122e857346128585760015460405260206040f36122e8565b634da6ecc981186122e857346128585760025460405260206040f36122e8565b6319429b8d81186122e857346128585760035460405260206040f36122e8565b630cb39e9681186122e857346128585760045460405260206040f36122e8565b63fa82256781186122e857602436103417612858576004358060a01c6128585760405260056040516020525f5260405f205460605260206060f36122e8565b6338d6172d8118610405576024361034176128585760066004356020525f5260405f205460405260206040f35b63a0dd2e4981186122e8576102643610341761285857600435600401803581018035810160c88135116128585780355f8160c8811161285857801561046c57905b8060051b6020850101358060a01c612858578160051b6180600152600101818118610446575b5050806180405250506020810135810160c881351161285857803560208160051b01808361996037505050604081013561b28052506020810135810160c881351161285857803560206060820201808361b2a037505050506084358060a01c6128585761fdc05260e4358060a01c6128585761fde05261010435600401610404813511612858576020813501808261fe003750505f546002146128585760025f5561fdc05160c05260a43560e052610522612730565b6044356040526105306126c8565b60066024356020525f5260405f2054156105b257600f62010240527f55736564204d6573736167655f49440000000000000000000000000000000000620102605262010240506201024051806201026001601f825f031636823750506308c379a0620102005260206201022052601f19601f620102405101166044016201021cfd5b600160066024356020525f5260405f2055613260604061326061804060045afa506105df6201024061255e565b6201024051620102605262010260516040526105f9612781565b636c5023876201026452600461012060606024620102843761fdc051620102e452604060a4620103043761fde0516201034452806201036452806201028401602061fe00510180828261fe0060045afa50508051806020830101601f825f03163682375050601f19601f82516020010116905081019050610124356201038452016201026052620102608051602082012090506201024052617d806101a0617d8061804060045afa506201024051617f20526106b3612401565b604036620102603760206128a65f395f516306c9624d620102a052608060c435620102c05261fde051620102e05280620103005280620102c001602061fe00510180828261fe0060045afa50508051806020830101601f825f03163682375050601f19601f82516020010116905081019050610124356201032052506040620102a06104c4620102bc5f855af161074c573d5f5f3e3d5ffd5b60403d1061285857620102a0518060a01c612858576201078052620102c051620107a052620107809050805162010260526020810151620102805250620102605160405260643560605262010280516080526107a66127eb565b60035f55006122e8565b63844105e181186107cc57346128585760075460405260206040f35b63ea26266c81186122e857346128585760206128a660403960206040f36122e8565b63f064acb281186122e8576102243610341761285857600435600401803581018035810160c88135116128585780355f8160c8811161285857801561085557905b8060051b6020850101358060a01c612858578160051b618060015260010181811861082f575b5050806180405250506020810135810160c881351161285857803560208160051b01808361996037505050604081013561b28052506020810135810160c881351161285857803560206060820201808361b2a037505050506024356004018035810160c88135116128585780355f8160c881116128585780156108fa57905b8060051b6020850101358060a01c612858578160051b61fde001526001018181186108d4575b50508061fdc05250506020810135810160c881351161285857803560208160051b018083620116e03750505060408101356201300052506044358060a01c612858576201302052620130205160c05260643560e052610957612730565b61b280516201300051116109d357601162013040527f496e76616c69642056616c736574204944000000000000000000000000000000620130605262013040506201304051806201306001601f825f031636823750506308c379a0620130005260206201302052601f19601f620130405101166044016201301cfd5b60403662013040375f61fdc05160c88111612858578015610a5c57905b8060051b61fde00151620130805262013040516201306051620116e0518110156128585760051b6201170001518082018281106128585790509050620130405263aaaaaaaa620130405110610a4457610a5c565b600162013060510162013060526001018181186109f0575b50506201304051604052610a6e6122ec565b613260604061326061804060045afa50610a8a6201308061255e565b6201308051620130a052620130a051604052610aa4612781565b613260604061326061fdc060045afa50610ac0620130a061255e565b620130a0516201308052639af2b8d2620130c45260046201308051620130e452620130205162013104526064356201312452606001620130c052620130c0805160208201209050620130a052617d806101a0617d8061804060045afa50620130a051617f2052610b2e612401565b62013080516001556201300051600255600160035401620130c052620130c0516003557fb7ca5e46e360950244488bf096bf742a1f63183cf1ee5b3b0c53045b6247bf5b6201308051620130e05262013000516201310052620130c05162013120526060620130e0a1006122e8565b63a930e8dc8118610f5c576102843610341761285857600435600401803581018035810160c88135116128585780355f8160c88111612858578015610c0457905b8060051b6020850101358060a01c612858578160051b6180600152600101818118610bde575b5050806180405250506020810135810160c881351161285857803560208160051b01808361996037505050604081013561b28052506020810135810160c881351161285857803560206060820201808361b2a0375050505060243560040180358060a01c6128585761fdc05260208101358101612800813511612858576020813501808261fde037505050610104358060a01c61285857620126005260206128a65f395f5163ffd8d4aa62012620526080604462012640376201260051620126c052803b15612858575f6201262060a46201263c5f855af1610ce8573d5f5f3e3d5ffd5b5060e435604052610cf76126c8565b600660c4356020525f5260405f205415610d7957600f62012620527f55736564204d6573736167655f49440000000000000000000000000000000000620126405262012620506201262051806201264001601f825f031636823750506308c379a0620125e05260206201260052601f19601f62012620510116604401620125fcfd5b6001600660c4356020525f5260405f2055613260604061326061804060045afa50610da66201262061255e565b620126205162012640526201264051604052610dc0612781565b638046d1e762012644526004610120806201266452806201266401604061fdc0518252806020830152808201602061fde0510180828261fde060045afa50508051806020830101601f825f03163682375050601f19601f8251602001011690508101905090508101905060806044620126843760c43562012704526020612886620127243960e435620127445262012600516201276452016201264052620126408051602082012090506201262052617d806101a0617d8061804060045afa506201262051617f2052610e91612401565b600160075561fdc0515a61fde05f5f8251602084015f8787f1905090509050610ebc573d5f5f3e3d5ffd5b5f600755600160035401620126405262012640516003557f0594b174e11e17c2cb4d0d303c2125060bea4f4da113a4e79edce87465592d00608061fdc0516201266052806201268052806201266001602061fde0510180828261fde060045afa50508051806020830101601f825f03163682375050601f19601f8251602001011690508101905060c435620126a0526201264051620126c05262012660a1005b6308d2b3e381186122e8576101c43610341761285857600435600401803581018035810160c88135116128585780355f8160c88111612858578015610fc357905b8060051b6020850101358060a01c612858578160051b6180600152600101818118610f9d575b5050806180405250506020810135810160c881351161285857803560208160051b01808361996037505050604081013561b28052506020810135810160c881351161285857803560206060820201808361b2a0375050505060243560040160408135116128585780355f816040811161285857801561109057905b612840810261fde0018160051b602086010135602086010180358060a01c612858578252602081013581016128008135116128585760208135016020840181838237505050505060010181811861103e575b50508061fdc05250506084358060a01c61285857620b0de052620b0de05160c05260643560e0526110bf612730565b6044356040526110cd6126c8565b613260604061326061804060045afa506110e9620b0e0061255e565b620b0e0051620b0e2052620b0e2051604052611103612781565b630baeca88620b0e24526004608080620b0e445280620b0e44015f61fdc0518083528060051b5f82604081116128585780156111b157905b828160051b602088010152612840810261fde0018360208801016040825182528060208301526020830181830160208251018082828560045afa50508051806020830101601f825f03163682375050601f19601f825160200101169050905081019050905090508301925060010181811861113b575b50508201602001915050905081019050604435620b0e6452620b0de051620b0e8452606435620b0ea45201620b0e2052620b0e20805160208201209050620b0e0052617d806101a0617d8061804060045afa50620b0e0051617f2052611215612401565b600160035401620b0e20525f6040905b80620b0e405261fdc051620b0e40511061123e57611350565b612840620b0e405161fdc051811015612858570261fde001515a612840620b0e405161fdc051811015612858570261fde0016020810190505f5f8251602084015f8787f1905090509050611294573d5f5f3e3d5ffd5b6001620b0e205101620b0e20527fdf4a952cd86acf74a1c5b1d3ff176de7e23a76082d0169d1925e1b32f3cf36e0606061284061fdc05115612858575f0261fde00151620b0e605280620b0e805261284061fdc05115612858575f0261fde00160208101905081620b0e600160208251018082828560045afa50508051806020830101601f825f03163682375050601f19601f825160200101169050905081019050620b0e2051620b0ea052620b0e60a1600101818118611225575b5050620b0e2051600355006122e8565b63f650f6e9811861150557606436103417612858576004358060a01c612858576101a0526101a0516370a082316101e052306102005260206101e060246101fc845afa6113af573d5f5f3e3d5ffd5b60203d10612858576101e09050516101c0526101a0516323b872dd6101e052336102005230610220526044356102405260206101e060646101fc5f855af16113f9573d5f5f3e3d5ffd5b3d61141057803b1561285857600161026052611429565b60203d10612858576101e0518060011c61285857610260525b610260905051611498576013610280527f6661696c6564205472616e7366657246726f6d000000000000000000000000006102a0526102805061028051806102a001601f825f031636823750506308c379a061024052602061026052601f19601f61028051011660440161025cfd5b6101a0516370a082316101e052306102005260206101e060246101fc845afa6114c3573d5f5f3e3d5ffd5b60203d10612858576101e09050516101c05180820382811161285857905090506101c0526101a0516040526024356060526101c0516080526115036127eb565b005b63048a245d81186122e85760a436103417612858576024358060a01c612858576040526044356004016104048135116128585760208135018082606037505060206128a65f395f5163d07e9fa06104a05260a0336104c0526004356104e052604051610500528061052052806104c001602060605101808282606060045afa50508051806020830101601f825f03163682375050601f19601f825160200101169050810190506064356105405250803b15612858575f6104a06104e46104bc5f855af16115d4573d5f5f3e3d5ffd5b507fbcd7c5f94d828115734ea3d51400c2e1ad93894d1a5099a1808794a924f71f24336104a0526004356104c05260406104a0a1006122e8565b6314fe978f8118611bcd576102643610341761285857600435600401803581018035810160c88135116128585780355f8160c8811161285857801561167557905b8060051b6020850101358060a01c612858578160051b618060015260010181811861164f575b5050806180405250506020810135810160c881351161285857803560208160051b01808361996037505050604081013561b28052506020810135810160c881351161285857803560206060820201808361b2a037505050506024358060a01c6128585761fdc0526044356004018035810160408135116128585780355f816040811161285857801561172957905b8060051b6020850101358060a01c612858578160051b61fe000152600101818118611703575b50508061fde052505060208101358101604081351161285857803560208160051b01808362010600375050505060a4358060a01c6128585762010e205262010e205160c05260c43560e05261177c612730565b60843560405261178a6126c8565b606435600561fdc0516020525f5260405f20541061181057600e62010e40527f57726f6e6720626174636820696400000000000000000000000000000000000062010e605262010e405062010e40518062010e6001601f825f031636823750506308c379a062010e0052602062010e2052601f19601f62010e4051011660440162010e1cfd5b61fde05162010e4052620106005162010e4051181561189757601062010e60527f556e6d61746368656420506172616d730000000000000000000000000000000062010e805262010e605062010e60518062010e8001601f825f031636823750506308c379a062010e2052602062010e4052601f19601f62010e6051011660440162010e3cfd5b613260604061326061804060045afa506118b362010e6061255e565b62010e605162010e805262010e80516040526118cd612781565b636f7be45762010e8452600460e061fdc05162010ea4528062010ec4528062010ea40160408082528082015f61fde0518083528060051b5f826040811161285857801561193457905b8060051b61fe0001518160051b602088010152600101818118611916575b505082016020019150509050810190508060208301528082015f62010600518083528060051b5f826040811161285857801561198b57905b8060051b6201062001518160051b60208801015260010181811861196c575b5050820160200191505090508101905090508101905060643562010ee452602061288662010f043960843562010f245262010e205162010f445260c43562010f64520162010e805262010e8080516020820120905062010e6052617d806101a0617d8061804060045afa5062010e6051617f2052611a07612401565b5f6040905b8062010e805262010e405162010e805110611a2657611b43565b61fdc05163a9059cbb62010ea05262010e805161fde0518110156128585760051b61fe00015162010ec05262010e805162010600518110156128585760051b62010620015162010ee052602062010ea0604462010ebc5f855af1611a8c573d5f5f3e3d5ffd5b3d611aa457803b1561285857600162010f0052611abf565b60203d106128585762010ea0518060011c6128585762010f00525b62010f00905051611b3857600f62010f20527f6661696c6564207472616e73666572000000000000000000000000000000000062010f405262010f205062010f20518062010f4001601f825f031636823750506308c379a062010ee052602062010f0052601f19601f62010f2051011660440162010efcfd5b600101818118611a0c575b505060016004540162010e805262010e805160045560016003540162010ea05262010ea051600355606435600561fdc0516020525f5260405f20557f0ba40544a53f11e70bd7e03a4cfeec841fc3566e81dfbef26f669358a705ad2c61fdc05162010ec05260643562010ee05262010e805162010f005262010ea05162010f2052608062010ec0a1005b63da29a8c681186122e8576023361115612858575f546002146128585760025f556004353411611c6057346004351815611c725760146040527f496e73756666696369656e74206465706f73697400000000000000000000000060605260405060405180606001601f825f031636823750506308c379a05f526020602052601f19601f6040510116604401601cfd611c72565b5f5f5f5f6004353403335ff115612858575b60206128a65f395f51631d046325604052803b15612858575f60406004605c600435855af1611ca3573d5f5f3e3d5ffd5b5060035f55006122e8565b63a329977181186122e857608436103417612858576004358060a01c612858576040526001600354016060526060516003556001600454016080526080516004557fc72b917679ae2dea3062a0a355d542c92296f3e5c39cfcb0db7c30e28c8163493360a05260405160c0526060602460e037608051610140526060516101605260e060a0a1006122e8565b630b14c5458118611df957606436103417612858576004358060a01c61285857604052602435600401610400813511612858576020813501808260603750506020806108a0526040515a6060506104006104a060605160808585fa90509050611da5573d5f5f3e3d5ffd5b3d61040081183d61040010021861048052610480816108a00160208251018082828560045afa50508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506108a0f35b631de26e1681186122e8576043361115612858575f546002146128585760025f556024353411611e8c57346024351815611e9e5760146040527f496e73756666696369656e74206465706f73697400000000000000000000000060605260405060405180606001601f825f031636823750506308c379a05f526020602052601f19601f6040510116604401601cfd611e9e565b5f5f5f5f6024353403335ff115612858575b60206128a65f395f5163b214faa5604052600435606052803b15612858575f60406024605c602435855af1611ed5573d5f5f3e3d5ffd5b507f4f78bbd9a86543dc57c484da46f56d43190ac1148b43565fa8d522b1d4fe52986004356040523360605260243560805260606040a160035f55006122e8565b6361baeb6381186122e8576102643610341761285857600435600401803581018035810160c88135116128585780355f8160c88111612858578015611f7d57905b8060051b6020850101358060a01c612858578160051b6180600152600101818118611f57575b5050806180405250506020810135810160c881351161285857803560208160051b01808361996037505050604081013561b28052506020810135810160c881351161285857803560206060820201808361b2a037505050506024358060a01c6128585761fdc052604435600401616000813511612858576020813501808261fde0375050610124358060a01c6128585762015e005260206128a65f395f5163ffd8d4aa62015e20526080606462015e403762015e005162015ec052803b15612858575f62015e2060a462015e3c5f855af161205a573d5f5f3e3d5ffd5b506101043560405261206a6126c8565b600660e4356020525f5260405f2054156120ec57600f62015e20527f55736564204d6573736167655f4944000000000000000000000000000000000062015e405262015e205062015e20518062015e4001601f825f031636823750506308c379a062015de052602062015e0052601f19601f62015e2051011660440162015dfcfd5b6001600660e4356020525f5260405f2055613260604061326061804060045afa5061211962015e2061255e565b62015e205162015e405262015e4051604052612133612781565b636529d22b62015e4452600461014061fdc05162015e64528062015e84528062015e6401602061fde0510180828261fde060045afa50508051806020830101601f825f03163682375050601f19601f825160200101169050810190506080606462015ea43760e43562015f2452602061288662015f44396101043562015f645262015e005162015f84520162015e405262015e4080516020820120905062015e2052617d806101a0617d8061804060045afa5062015e2051617f20526121f7612401565b60016003540162015e405261fdc0516331502b5662015e805260208062015ea0528062015ea001602061fde0510180828261fde060045afa50508051806020830101601f825f03163682375050601f19601f82516020010116905081015050602062015e8061604462015e9c5f855af1612273573d5f5f3e3d5ffd5b60203d106128585762015e80518060a01c612858576201bee0526201bee090505162015e605262015e40516003557fac4ce915ef22753b636e57aac5ae5fdd9d13d782ae5bf6dbcda15e29f95386c162015e605162015e805261fdc05162015ea05262015e405162015ec052606062015e80a1005b5f5ffd5b63aaaaaaaa60405110156123565760126060527f496e73756666696369656e7420506f776572000000000000000000000000000060805260605060605180608001601f825f031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b565b5f601c610100527f19457468657265756d205369676e6564204d6573736167653a0a333200000000610120526101008051602082018361016001815181525050808301925050506060518161016001526020810190508061014052610140905080516020820120905060e0525f6101805260e051610100526080516101205260a0516101405260c051610160526020610180608061010060015afa506101805160405114815250565b604036617f40375f6134005160c8811161285857801561254b57905b60608102613420018051617f80526020810151617fa0526040810151617fc05250617f80511561253557617f40516101a0518110156128585760051b6101c00151604052617f2051606052617f8051608052617fa05160a052617fc05160c052612488617fe0612358565b617fe0516124f5576011618000527f496e76616c6964205369676e61747572650000000000000000000000000000006180205261800050618000518061802001601f825f031636823750506308c379a0617fc0526020617fe052601f19601f618000510116604401617fdcfd5b617f6051617f4051611ac0518110156128585760051b611ae001518082018281106128585790509050617f605263aaaaaaaa617f6051106125355761254b565b6001617f405101617f405260010181811861241d575b5050617f605160405261255c6122ec565b565b63299018c26132a45260046080806132c452806132c4015f6040518083528060051b5f8260c881116128585780156125af57905b8060051b606001518160051b602088010152600101818118612592575b50508201602001915050905081019050806132e452806132c4015f611960518083528060051b5f8260c8811161285857801561260557905b8060051b61198001518160051b6020880101526001018181186125e7575b505082016020019150509050810190506132805161330452602061288661332439016132a0526132a0805160208201209050815250565b6040515a10156126c65760286060527f496e73756666696369656e742066756e647320746f20636f76657220676173206080527f657374696d61746500000000000000000000000000000000000000000000000060a05260605060605180608001601f825f031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b565b60405142111561272e5760076060527f54696d656f75740000000000000000000000000000000000000000000000000060805260605060605180608001601f825f031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b565b60e05160405261273e61263c565b60206128a65f395f5163d4bbab4f6101005260c0516101205260e05161014052803b15612858575f610100604461011c5f855af161277e573d5f5f3e3d5ffd5b50565b60405160015418156127e95760146060527f496e636f727265637420436865636b706f696e7400000000000000000000000060805260605060605180608001601f825f031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b565b60016004540160a05260a05160045560016003540160c05260c0516003557fc5bdbcfcfae5c5b84c56bbf0860c4286d627aefaf28ce4011ba4fcb9b5aadf0860405160e0523361010052606051610120526080516101405260a0516101605260c0516101805260c060e0a1565b5f80fd22e8160e22e81cae037903d80b9d22e80018031907b022e81d3a13600339035922e81f1607ee039922e88419288681182a1840a16576797065728300030a001632323439373130300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000001067082fd0b74bfddfd5794e5ac0f24ed941dcc9000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000003a000000000000000000000000000000000000000000000000000000000000009830000000000000000000000000000000000000000000000000000000000000019000000000000000000000000a228292447064d5818bbc80b577c91f5212f93550000000000000000000000006dc59ee4bdfa2c791229004f29b08f783491a9340000000000000000000000001ad90db98da083e117d5f62a1673fc0f3a5930ca000000000000000000000000ade5f5efeae72102d998f6c496ea59731a70eeb0000000000000000000000000279fc7c0ebef3328d3899fe73464347a764c5f2c000000000000000000000000c1009c72cc2519b0dd595c3e500c1293a862aa6a000000000000000000000000eb784b37365c302c97c9ec8cb0933ce344e6de42000000000000000000000000d02e6bd61f5403748e7f0ec413a9058ddab56d470000000000000000000000001177806cd88b0bc0ea363bed3c64f8314361b1620000000000000000000000007bd1a3270570b65f264895c2f86e631fdc49754500000000000000000000000043e218f96a567dc26c6e65fcabf1fde26af694440000000000000000000000005a7c9fc846b18944fd2b8f8ae7255db5af7b9c040000000000000000000000000daabb4ff60423eb1f14cc6731394e098ad51bcb00000000000000000000000014aa448c2c918c4427c5671028b63bc17f6132d500000000000000000000000063f55bc560e981d53e1f5bb3643e3a96d26fc63500000000000000000000000019f5911e4ca69e30449ad6bb71de341f01f118bb000000000000000000000000ee21301af1d9562b5cbedf520077ea0a9bc9d535000000000000000000000000443266026738061972012e62d5ecd9d98da8b6f4000000000000000000000000377d23948d41579f2c3ca40308e3bdd53f6da7b2000000000000000000000000aac74d38c82c367b3da7482e3aecf6dd7a512ef20000000000000000000000003ab643728bd503ae41561b4bfe1d309a17255b8d000000000000000000000000cfbbf6341cf13a39ffcaf24b86de09489116783b000000000000000000000000092604a080524eff1c875ff13a1b88cbdd41df370000000000000000000000004a89f96fdff3c161937cfbc3e22d2e325612aaec000000000000000000000000deea5b069208e0ee37b630a3e7672fc50e8fe24a000000000000000000000000000000000000000000000000000000000000001900000000000000000000000000000000000000000000000000000000155f498b0000000000000000000000000000000000000000000000000000000011d665d40000000000000000000000000000000000000000000000000000000010420e4700000000000000000000000000000000000000000000000000000000100b5dda000000000000000000000000000000000000000000000000000000000fd7437a000000000000000000000000000000000000000000000000000000000ec6a36d000000000000000000000000000000000000000000000000000000000df4cb8f000000000000000000000000000000000000000000000000000000000d7f9fed000000000000000000000000000000000000000000000000000000000c910de7000000000000000000000000000000000000000000000000000000000c84c12f000000000000000000000000000000000000000000000000000000000b3757e9000000000000000000000000000000000000000000000000000000000b0fd19b00000000000000000000000000000000000000000000000000000000099a99f30000000000000000000000000000000000000000000000000000000008eeac490000000000000000000000000000000000000000000000000000000008c165e70000000000000000000000000000000000000000000000000000000008ae11e90000000000000000000000000000000000000000000000000000000007edb0fc0000000000000000000000000000000000000000000000000000000006e70afe0000000000000000000000000000000000000000000000000000000005941f40000000000000000000000000000000000000000000000000000000000504d85300000000000000000000000000000000000000000000000000000000046b796b00000000000000000000000000000000000000000000000000000000040ca3fb000000000000000000000000000000000000000000000000000000000399a6000000000000000000000000000000000000000000000000000000000002d8ae9d0000000000000000000000000000000000000000000000000000000002bcb5d8

Deployed Bytecode

0x5f3560e01c60026015820660011b61285c01601e395f51565b6384d38f2c8118610036573461285857602061288660403960206040f35b6308a92ad781186122e85761010436103417612858576004356004016040813511612858576020813501808260403750506024356004016040813511612858576020813501808260a0375050604435600401602081351161285857602081350180826101003750506064358060081c61285857610140526084358060a01c612858576101605230331815610129576007610180527f496e76616c6964000000000000000000000000000000000000000000000000006101a0526101805061018051806101a001601f825f031636823750506308c379a061014052602061016052601f19601f61018051011660440161015cfd5b610160516080306101a0526101a0516101e0528061020052806101e001602060a0510180828260a060045afa50508051806020830101601f825f03163682375050601f19601f825160200101169050810190508061022052806101e0016101005181526101205160208201528051806020830101601f825f03163682375050601f19601f82516020010116905081019050610140516101c0526101c051610240526003823b0359600182126128585781600382863c8181018381856101e060045afa5050828201815ff08015612858579050905090509050610180526001600354016101a0526101a0516003557f82fe3a4fa49c6382d0c085746698ddbbafe6c2bf61285b19410644b5b26287c760c0806101c052806101c001602060405101808282604060045afa50508051806020830101601f825f03163682375050601f19601f82516020010116905081019050610180516101e0528061020052806101c001602060a0510180828260a060045afa50508051806020830101601f825f03163682375050601f19601f825160200101169050810190508061022052806101c0016101005181526101205160208201528051806020830101601f825f03163682375050601f19601f8251602001011690508101905061014051610240526101a051610260526101c0a1006122e8565b63a9a4a98381186122e857346128585760015460405260206040f36122e8565b634da6ecc981186122e857346128585760025460405260206040f36122e8565b6319429b8d81186122e857346128585760035460405260206040f36122e8565b630cb39e9681186122e857346128585760045460405260206040f36122e8565b63fa82256781186122e857602436103417612858576004358060a01c6128585760405260056040516020525f5260405f205460605260206060f36122e8565b6338d6172d8118610405576024361034176128585760066004356020525f5260405f205460405260206040f35b63a0dd2e4981186122e8576102643610341761285857600435600401803581018035810160c88135116128585780355f8160c8811161285857801561046c57905b8060051b6020850101358060a01c612858578160051b6180600152600101818118610446575b5050806180405250506020810135810160c881351161285857803560208160051b01808361996037505050604081013561b28052506020810135810160c881351161285857803560206060820201808361b2a037505050506084358060a01c6128585761fdc05260e4358060a01c6128585761fde05261010435600401610404813511612858576020813501808261fe003750505f546002146128585760025f5561fdc05160c05260a43560e052610522612730565b6044356040526105306126c8565b60066024356020525f5260405f2054156105b257600f62010240527f55736564204d6573736167655f49440000000000000000000000000000000000620102605262010240506201024051806201026001601f825f031636823750506308c379a0620102005260206201022052601f19601f620102405101166044016201021cfd5b600160066024356020525f5260405f2055613260604061326061804060045afa506105df6201024061255e565b6201024051620102605262010260516040526105f9612781565b636c5023876201026452600461012060606024620102843761fdc051620102e452604060a4620103043761fde0516201034452806201036452806201028401602061fe00510180828261fe0060045afa50508051806020830101601f825f03163682375050601f19601f82516020010116905081019050610124356201038452016201026052620102608051602082012090506201024052617d806101a0617d8061804060045afa506201024051617f20526106b3612401565b604036620102603760206128a65f395f516306c9624d620102a052608060c435620102c05261fde051620102e05280620103005280620102c001602061fe00510180828261fe0060045afa50508051806020830101601f825f03163682375050601f19601f82516020010116905081019050610124356201032052506040620102a06104c4620102bc5f855af161074c573d5f5f3e3d5ffd5b60403d1061285857620102a0518060a01c612858576201078052620102c051620107a052620107809050805162010260526020810151620102805250620102605160405260643560605262010280516080526107a66127eb565b60035f55006122e8565b63844105e181186107cc57346128585760075460405260206040f35b63ea26266c81186122e857346128585760206128a660403960206040f36122e8565b63f064acb281186122e8576102243610341761285857600435600401803581018035810160c88135116128585780355f8160c8811161285857801561085557905b8060051b6020850101358060a01c612858578160051b618060015260010181811861082f575b5050806180405250506020810135810160c881351161285857803560208160051b01808361996037505050604081013561b28052506020810135810160c881351161285857803560206060820201808361b2a037505050506024356004018035810160c88135116128585780355f8160c881116128585780156108fa57905b8060051b6020850101358060a01c612858578160051b61fde001526001018181186108d4575b50508061fdc05250506020810135810160c881351161285857803560208160051b018083620116e03750505060408101356201300052506044358060a01c612858576201302052620130205160c05260643560e052610957612730565b61b280516201300051116109d357601162013040527f496e76616c69642056616c736574204944000000000000000000000000000000620130605262013040506201304051806201306001601f825f031636823750506308c379a0620130005260206201302052601f19601f620130405101166044016201301cfd5b60403662013040375f61fdc05160c88111612858578015610a5c57905b8060051b61fde00151620130805262013040516201306051620116e0518110156128585760051b6201170001518082018281106128585790509050620130405263aaaaaaaa620130405110610a4457610a5c565b600162013060510162013060526001018181186109f0575b50506201304051604052610a6e6122ec565b613260604061326061804060045afa50610a8a6201308061255e565b6201308051620130a052620130a051604052610aa4612781565b613260604061326061fdc060045afa50610ac0620130a061255e565b620130a0516201308052639af2b8d2620130c45260046201308051620130e452620130205162013104526064356201312452606001620130c052620130c0805160208201209050620130a052617d806101a0617d8061804060045afa50620130a051617f2052610b2e612401565b62013080516001556201300051600255600160035401620130c052620130c0516003557fb7ca5e46e360950244488bf096bf742a1f63183cf1ee5b3b0c53045b6247bf5b6201308051620130e05262013000516201310052620130c05162013120526060620130e0a1006122e8565b63a930e8dc8118610f5c576102843610341761285857600435600401803581018035810160c88135116128585780355f8160c88111612858578015610c0457905b8060051b6020850101358060a01c612858578160051b6180600152600101818118610bde575b5050806180405250506020810135810160c881351161285857803560208160051b01808361996037505050604081013561b28052506020810135810160c881351161285857803560206060820201808361b2a0375050505060243560040180358060a01c6128585761fdc05260208101358101612800813511612858576020813501808261fde037505050610104358060a01c61285857620126005260206128a65f395f5163ffd8d4aa62012620526080604462012640376201260051620126c052803b15612858575f6201262060a46201263c5f855af1610ce8573d5f5f3e3d5ffd5b5060e435604052610cf76126c8565b600660c4356020525f5260405f205415610d7957600f62012620527f55736564204d6573736167655f49440000000000000000000000000000000000620126405262012620506201262051806201264001601f825f031636823750506308c379a0620125e05260206201260052601f19601f62012620510116604401620125fcfd5b6001600660c4356020525f5260405f2055613260604061326061804060045afa50610da66201262061255e565b620126205162012640526201264051604052610dc0612781565b638046d1e762012644526004610120806201266452806201266401604061fdc0518252806020830152808201602061fde0510180828261fde060045afa50508051806020830101601f825f03163682375050601f19601f8251602001011690508101905090508101905060806044620126843760c43562012704526020612886620127243960e435620127445262012600516201276452016201264052620126408051602082012090506201262052617d806101a0617d8061804060045afa506201262051617f2052610e91612401565b600160075561fdc0515a61fde05f5f8251602084015f8787f1905090509050610ebc573d5f5f3e3d5ffd5b5f600755600160035401620126405262012640516003557f0594b174e11e17c2cb4d0d303c2125060bea4f4da113a4e79edce87465592d00608061fdc0516201266052806201268052806201266001602061fde0510180828261fde060045afa50508051806020830101601f825f03163682375050601f19601f8251602001011690508101905060c435620126a0526201264051620126c05262012660a1005b6308d2b3e381186122e8576101c43610341761285857600435600401803581018035810160c88135116128585780355f8160c88111612858578015610fc357905b8060051b6020850101358060a01c612858578160051b6180600152600101818118610f9d575b5050806180405250506020810135810160c881351161285857803560208160051b01808361996037505050604081013561b28052506020810135810160c881351161285857803560206060820201808361b2a0375050505060243560040160408135116128585780355f816040811161285857801561109057905b612840810261fde0018160051b602086010135602086010180358060a01c612858578252602081013581016128008135116128585760208135016020840181838237505050505060010181811861103e575b50508061fdc05250506084358060a01c61285857620b0de052620b0de05160c05260643560e0526110bf612730565b6044356040526110cd6126c8565b613260604061326061804060045afa506110e9620b0e0061255e565b620b0e0051620b0e2052620b0e2051604052611103612781565b630baeca88620b0e24526004608080620b0e445280620b0e44015f61fdc0518083528060051b5f82604081116128585780156111b157905b828160051b602088010152612840810261fde0018360208801016040825182528060208301526020830181830160208251018082828560045afa50508051806020830101601f825f03163682375050601f19601f825160200101169050905081019050905090508301925060010181811861113b575b50508201602001915050905081019050604435620b0e6452620b0de051620b0e8452606435620b0ea45201620b0e2052620b0e20805160208201209050620b0e0052617d806101a0617d8061804060045afa50620b0e0051617f2052611215612401565b600160035401620b0e20525f6040905b80620b0e405261fdc051620b0e40511061123e57611350565b612840620b0e405161fdc051811015612858570261fde001515a612840620b0e405161fdc051811015612858570261fde0016020810190505f5f8251602084015f8787f1905090509050611294573d5f5f3e3d5ffd5b6001620b0e205101620b0e20527fdf4a952cd86acf74a1c5b1d3ff176de7e23a76082d0169d1925e1b32f3cf36e0606061284061fdc05115612858575f0261fde00151620b0e605280620b0e805261284061fdc05115612858575f0261fde00160208101905081620b0e600160208251018082828560045afa50508051806020830101601f825f03163682375050601f19601f825160200101169050905081019050620b0e2051620b0ea052620b0e60a1600101818118611225575b5050620b0e2051600355006122e8565b63f650f6e9811861150557606436103417612858576004358060a01c612858576101a0526101a0516370a082316101e052306102005260206101e060246101fc845afa6113af573d5f5f3e3d5ffd5b60203d10612858576101e09050516101c0526101a0516323b872dd6101e052336102005230610220526044356102405260206101e060646101fc5f855af16113f9573d5f5f3e3d5ffd5b3d61141057803b1561285857600161026052611429565b60203d10612858576101e0518060011c61285857610260525b610260905051611498576013610280527f6661696c6564205472616e7366657246726f6d000000000000000000000000006102a0526102805061028051806102a001601f825f031636823750506308c379a061024052602061026052601f19601f61028051011660440161025cfd5b6101a0516370a082316101e052306102005260206101e060246101fc845afa6114c3573d5f5f3e3d5ffd5b60203d10612858576101e09050516101c05180820382811161285857905090506101c0526101a0516040526024356060526101c0516080526115036127eb565b005b63048a245d81186122e85760a436103417612858576024358060a01c612858576040526044356004016104048135116128585760208135018082606037505060206128a65f395f5163d07e9fa06104a05260a0336104c0526004356104e052604051610500528061052052806104c001602060605101808282606060045afa50508051806020830101601f825f03163682375050601f19601f825160200101169050810190506064356105405250803b15612858575f6104a06104e46104bc5f855af16115d4573d5f5f3e3d5ffd5b507fbcd7c5f94d828115734ea3d51400c2e1ad93894d1a5099a1808794a924f71f24336104a0526004356104c05260406104a0a1006122e8565b6314fe978f8118611bcd576102643610341761285857600435600401803581018035810160c88135116128585780355f8160c8811161285857801561167557905b8060051b6020850101358060a01c612858578160051b618060015260010181811861164f575b5050806180405250506020810135810160c881351161285857803560208160051b01808361996037505050604081013561b28052506020810135810160c881351161285857803560206060820201808361b2a037505050506024358060a01c6128585761fdc0526044356004018035810160408135116128585780355f816040811161285857801561172957905b8060051b6020850101358060a01c612858578160051b61fe000152600101818118611703575b50508061fde052505060208101358101604081351161285857803560208160051b01808362010600375050505060a4358060a01c6128585762010e205262010e205160c05260c43560e05261177c612730565b60843560405261178a6126c8565b606435600561fdc0516020525f5260405f20541061181057600e62010e40527f57726f6e6720626174636820696400000000000000000000000000000000000062010e605262010e405062010e40518062010e6001601f825f031636823750506308c379a062010e0052602062010e2052601f19601f62010e4051011660440162010e1cfd5b61fde05162010e4052620106005162010e4051181561189757601062010e60527f556e6d61746368656420506172616d730000000000000000000000000000000062010e805262010e605062010e60518062010e8001601f825f031636823750506308c379a062010e2052602062010e4052601f19601f62010e6051011660440162010e3cfd5b613260604061326061804060045afa506118b362010e6061255e565b62010e605162010e805262010e80516040526118cd612781565b636f7be45762010e8452600460e061fdc05162010ea4528062010ec4528062010ea40160408082528082015f61fde0518083528060051b5f826040811161285857801561193457905b8060051b61fe0001518160051b602088010152600101818118611916575b505082016020019150509050810190508060208301528082015f62010600518083528060051b5f826040811161285857801561198b57905b8060051b6201062001518160051b60208801015260010181811861196c575b5050820160200191505090508101905090508101905060643562010ee452602061288662010f043960843562010f245262010e205162010f445260c43562010f64520162010e805262010e8080516020820120905062010e6052617d806101a0617d8061804060045afa5062010e6051617f2052611a07612401565b5f6040905b8062010e805262010e405162010e805110611a2657611b43565b61fdc05163a9059cbb62010ea05262010e805161fde0518110156128585760051b61fe00015162010ec05262010e805162010600518110156128585760051b62010620015162010ee052602062010ea0604462010ebc5f855af1611a8c573d5f5f3e3d5ffd5b3d611aa457803b1561285857600162010f0052611abf565b60203d106128585762010ea0518060011c6128585762010f00525b62010f00905051611b3857600f62010f20527f6661696c6564207472616e73666572000000000000000000000000000000000062010f405262010f205062010f20518062010f4001601f825f031636823750506308c379a062010ee052602062010f0052601f19601f62010f2051011660440162010efcfd5b600101818118611a0c575b505060016004540162010e805262010e805160045560016003540162010ea05262010ea051600355606435600561fdc0516020525f5260405f20557f0ba40544a53f11e70bd7e03a4cfeec841fc3566e81dfbef26f669358a705ad2c61fdc05162010ec05260643562010ee05262010e805162010f005262010ea05162010f2052608062010ec0a1005b63da29a8c681186122e8576023361115612858575f546002146128585760025f556004353411611c6057346004351815611c725760146040527f496e73756666696369656e74206465706f73697400000000000000000000000060605260405060405180606001601f825f031636823750506308c379a05f526020602052601f19601f6040510116604401601cfd611c72565b5f5f5f5f6004353403335ff115612858575b60206128a65f395f51631d046325604052803b15612858575f60406004605c600435855af1611ca3573d5f5f3e3d5ffd5b5060035f55006122e8565b63a329977181186122e857608436103417612858576004358060a01c612858576040526001600354016060526060516003556001600454016080526080516004557fc72b917679ae2dea3062a0a355d542c92296f3e5c39cfcb0db7c30e28c8163493360a05260405160c0526060602460e037608051610140526060516101605260e060a0a1006122e8565b630b14c5458118611df957606436103417612858576004358060a01c61285857604052602435600401610400813511612858576020813501808260603750506020806108a0526040515a6060506104006104a060605160808585fa90509050611da5573d5f5f3e3d5ffd5b3d61040081183d61040010021861048052610480816108a00160208251018082828560045afa50508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506108a0f35b631de26e1681186122e8576043361115612858575f546002146128585760025f556024353411611e8c57346024351815611e9e5760146040527f496e73756666696369656e74206465706f73697400000000000000000000000060605260405060405180606001601f825f031636823750506308c379a05f526020602052601f19601f6040510116604401601cfd611e9e565b5f5f5f5f6024353403335ff115612858575b60206128a65f395f5163b214faa5604052600435606052803b15612858575f60406024605c602435855af1611ed5573d5f5f3e3d5ffd5b507f4f78bbd9a86543dc57c484da46f56d43190ac1148b43565fa8d522b1d4fe52986004356040523360605260243560805260606040a160035f55006122e8565b6361baeb6381186122e8576102643610341761285857600435600401803581018035810160c88135116128585780355f8160c88111612858578015611f7d57905b8060051b6020850101358060a01c612858578160051b6180600152600101818118611f57575b5050806180405250506020810135810160c881351161285857803560208160051b01808361996037505050604081013561b28052506020810135810160c881351161285857803560206060820201808361b2a037505050506024358060a01c6128585761fdc052604435600401616000813511612858576020813501808261fde0375050610124358060a01c6128585762015e005260206128a65f395f5163ffd8d4aa62015e20526080606462015e403762015e005162015ec052803b15612858575f62015e2060a462015e3c5f855af161205a573d5f5f3e3d5ffd5b506101043560405261206a6126c8565b600660e4356020525f5260405f2054156120ec57600f62015e20527f55736564204d6573736167655f4944000000000000000000000000000000000062015e405262015e205062015e20518062015e4001601f825f031636823750506308c379a062015de052602062015e0052601f19601f62015e2051011660440162015dfcfd5b6001600660e4356020525f5260405f2055613260604061326061804060045afa5061211962015e2061255e565b62015e205162015e405262015e4051604052612133612781565b636529d22b62015e4452600461014061fdc05162015e64528062015e84528062015e6401602061fde0510180828261fde060045afa50508051806020830101601f825f03163682375050601f19601f825160200101169050810190506080606462015ea43760e43562015f2452602061288662015f44396101043562015f645262015e005162015f84520162015e405262015e4080516020820120905062015e2052617d806101a0617d8061804060045afa5062015e2051617f20526121f7612401565b60016003540162015e405261fdc0516331502b5662015e805260208062015ea0528062015ea001602061fde0510180828261fde060045afa50508051806020830101601f825f03163682375050601f19601f82516020010116905081015050602062015e8061604462015e9c5f855af1612273573d5f5f3e3d5ffd5b60203d106128585762015e80518060a01c612858576201bee0526201bee090505162015e605262015e40516003557fac4ce915ef22753b636e57aac5ae5fdd9d13d782ae5bf6dbcda15e29f95386c162015e605162015e805261fdc05162015ea05262015e405162015ec052606062015e80a1005b5f5ffd5b63aaaaaaaa60405110156123565760126060527f496e73756666696369656e7420506f776572000000000000000000000000000060805260605060605180608001601f825f031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b565b5f601c610100527f19457468657265756d205369676e6564204d6573736167653a0a333200000000610120526101008051602082018361016001815181525050808301925050506060518161016001526020810190508061014052610140905080516020820120905060e0525f6101805260e051610100526080516101205260a0516101405260c051610160526020610180608061010060015afa506101805160405114815250565b604036617f40375f6134005160c8811161285857801561254b57905b60608102613420018051617f80526020810151617fa0526040810151617fc05250617f80511561253557617f40516101a0518110156128585760051b6101c00151604052617f2051606052617f8051608052617fa05160a052617fc05160c052612488617fe0612358565b617fe0516124f5576011618000527f496e76616c6964205369676e61747572650000000000000000000000000000006180205261800050618000518061802001601f825f031636823750506308c379a0617fc0526020617fe052601f19601f618000510116604401617fdcfd5b617f6051617f4051611ac0518110156128585760051b611ae001518082018281106128585790509050617f605263aaaaaaaa617f6051106125355761254b565b6001617f405101617f405260010181811861241d575b5050617f605160405261255c6122ec565b565b63299018c26132a45260046080806132c452806132c4015f6040518083528060051b5f8260c881116128585780156125af57905b8060051b606001518160051b602088010152600101818118612592575b50508201602001915050905081019050806132e452806132c4015f611960518083528060051b5f8260c8811161285857801561260557905b8060051b61198001518160051b6020880101526001018181186125e7575b505082016020019150509050810190506132805161330452602061288661332439016132a0526132a0805160208201209050815250565b6040515a10156126c65760286060527f496e73756666696369656e742066756e647320746f20636f76657220676173206080527f657374696d61746500000000000000000000000000000000000000000000000060a05260605060605180608001601f825f031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b565b60405142111561272e5760076060527f54696d656f75740000000000000000000000000000000000000000000000000060805260605060605180608001601f825f031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b565b60e05160405261273e61263c565b60206128a65f395f5163d4bbab4f6101005260c0516101205260e05161014052803b15612858575f610100604461011c5f855af161277e573d5f5f3e3d5ffd5b50565b60405160015418156127e95760146060527f496e636f727265637420436865636b706f696e7400000000000000000000000060805260605060605180608001601f825f031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b565b60016004540160a05260a05160045560016003540160c05260c0516003557fc5bdbcfcfae5c5b84c56bbf0860c4286d627aefaf28ce4011ba4fcb9b5aadf0860405160e0523361010052606051610120526080516101405260a0516101605260c0516101805260c060e0a1565b5f80fd22e8160e22e81cae037903d80b9d22e80018031907b022e81d3a13600339035922e81f1607ee039922e832323439373130300000000000000000000000000000000000000000000000000000000000000000000000001067082fd0b74bfddfd5794e5ac0f24ed941dcc9

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

32323439373130300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000001067082fd0b74bfddfd5794e5ac0f24ed941dcc9000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000003a000000000000000000000000000000000000000000000000000000000000009830000000000000000000000000000000000000000000000000000000000000019000000000000000000000000a228292447064d5818bbc80b577c91f5212f93550000000000000000000000006dc59ee4bdfa2c791229004f29b08f783491a9340000000000000000000000001ad90db98da083e117d5f62a1673fc0f3a5930ca000000000000000000000000ade5f5efeae72102d998f6c496ea59731a70eeb0000000000000000000000000279fc7c0ebef3328d3899fe73464347a764c5f2c000000000000000000000000c1009c72cc2519b0dd595c3e500c1293a862aa6a000000000000000000000000eb784b37365c302c97c9ec8cb0933ce344e6de42000000000000000000000000d02e6bd61f5403748e7f0ec413a9058ddab56d470000000000000000000000001177806cd88b0bc0ea363bed3c64f8314361b1620000000000000000000000007bd1a3270570b65f264895c2f86e631fdc49754500000000000000000000000043e218f96a567dc26c6e65fcabf1fde26af694440000000000000000000000005a7c9fc846b18944fd2b8f8ae7255db5af7b9c040000000000000000000000000daabb4ff60423eb1f14cc6731394e098ad51bcb00000000000000000000000014aa448c2c918c4427c5671028b63bc17f6132d500000000000000000000000063f55bc560e981d53e1f5bb3643e3a96d26fc63500000000000000000000000019f5911e4ca69e30449ad6bb71de341f01f118bb000000000000000000000000ee21301af1d9562b5cbedf520077ea0a9bc9d535000000000000000000000000443266026738061972012e62d5ecd9d98da8b6f4000000000000000000000000377d23948d41579f2c3ca40308e3bdd53f6da7b2000000000000000000000000aac74d38c82c367b3da7482e3aecf6dd7a512ef20000000000000000000000003ab643728bd503ae41561b4bfe1d309a17255b8d000000000000000000000000cfbbf6341cf13a39ffcaf24b86de09489116783b000000000000000000000000092604a080524eff1c875ff13a1b88cbdd41df370000000000000000000000004a89f96fdff3c161937cfbc3e22d2e325612aaec000000000000000000000000deea5b069208e0ee37b630a3e7672fc50e8fe24a000000000000000000000000000000000000000000000000000000000000001900000000000000000000000000000000000000000000000000000000155f498b0000000000000000000000000000000000000000000000000000000011d665d40000000000000000000000000000000000000000000000000000000010420e4700000000000000000000000000000000000000000000000000000000100b5dda000000000000000000000000000000000000000000000000000000000fd7437a000000000000000000000000000000000000000000000000000000000ec6a36d000000000000000000000000000000000000000000000000000000000df4cb8f000000000000000000000000000000000000000000000000000000000d7f9fed000000000000000000000000000000000000000000000000000000000c910de7000000000000000000000000000000000000000000000000000000000c84c12f000000000000000000000000000000000000000000000000000000000b3757e9000000000000000000000000000000000000000000000000000000000b0fd19b00000000000000000000000000000000000000000000000000000000099a99f30000000000000000000000000000000000000000000000000000000008eeac490000000000000000000000000000000000000000000000000000000008c165e70000000000000000000000000000000000000000000000000000000008ae11e90000000000000000000000000000000000000000000000000000000007edb0fc0000000000000000000000000000000000000000000000000000000006e70afe0000000000000000000000000000000000000000000000000000000005941f40000000000000000000000000000000000000000000000000000000000504d85300000000000000000000000000000000000000000000000000000000046b796b00000000000000000000000000000000000000000000000000000000040ca3fb000000000000000000000000000000000000000000000000000000000399a6000000000000000000000000000000000000000000000000000000000002d8ae9d0000000000000000000000000000000000000000000000000000000002bcb5d8

-----Decoded View---------------
Arg [0] : _compass_id (bytes32): 0x3232343937313030000000000000000000000000000000000000000000000000
Arg [1] : _event_id (uint256): 0
Arg [2] : _gravity_nonce (uint256): 0
Arg [3] : valset (tuple): System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput]
Arg [4] : fee_manager (address): 0x1067082fD0b74BfDdFd5794E5AC0F24ED941dcc9

-----Encoded View---------------
60 Constructor Arguments found :
Arg [0] : 3232343937313030000000000000000000000000000000000000000000000000
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [3] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [4] : 0000000000000000000000001067082fd0b74bfddfd5794e5ac0f24ed941dcc9
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [6] : 00000000000000000000000000000000000000000000000000000000000003a0
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000983
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000019
Arg [9] : 000000000000000000000000a228292447064d5818bbc80b577c91f5212f9355
Arg [10] : 0000000000000000000000006dc59ee4bdfa2c791229004f29b08f783491a934
Arg [11] : 0000000000000000000000001ad90db98da083e117d5f62a1673fc0f3a5930ca
Arg [12] : 000000000000000000000000ade5f5efeae72102d998f6c496ea59731a70eeb0
Arg [13] : 000000000000000000000000279fc7c0ebef3328d3899fe73464347a764c5f2c
Arg [14] : 000000000000000000000000c1009c72cc2519b0dd595c3e500c1293a862aa6a
Arg [15] : 000000000000000000000000eb784b37365c302c97c9ec8cb0933ce344e6de42
Arg [16] : 000000000000000000000000d02e6bd61f5403748e7f0ec413a9058ddab56d47
Arg [17] : 0000000000000000000000001177806cd88b0bc0ea363bed3c64f8314361b162
Arg [18] : 0000000000000000000000007bd1a3270570b65f264895c2f86e631fdc497545
Arg [19] : 00000000000000000000000043e218f96a567dc26c6e65fcabf1fde26af69444
Arg [20] : 0000000000000000000000005a7c9fc846b18944fd2b8f8ae7255db5af7b9c04
Arg [21] : 0000000000000000000000000daabb4ff60423eb1f14cc6731394e098ad51bcb
Arg [22] : 00000000000000000000000014aa448c2c918c4427c5671028b63bc17f6132d5
Arg [23] : 00000000000000000000000063f55bc560e981d53e1f5bb3643e3a96d26fc635
Arg [24] : 00000000000000000000000019f5911e4ca69e30449ad6bb71de341f01f118bb
Arg [25] : 000000000000000000000000ee21301af1d9562b5cbedf520077ea0a9bc9d535
Arg [26] : 000000000000000000000000443266026738061972012e62d5ecd9d98da8b6f4
Arg [27] : 000000000000000000000000377d23948d41579f2c3ca40308e3bdd53f6da7b2
Arg [28] : 000000000000000000000000aac74d38c82c367b3da7482e3aecf6dd7a512ef2
Arg [29] : 0000000000000000000000003ab643728bd503ae41561b4bfe1d309a17255b8d
Arg [30] : 000000000000000000000000cfbbf6341cf13a39ffcaf24b86de09489116783b
Arg [31] : 000000000000000000000000092604a080524eff1c875ff13a1b88cbdd41df37
Arg [32] : 0000000000000000000000004a89f96fdff3c161937cfbc3e22d2e325612aaec
Arg [33] : 000000000000000000000000deea5b069208e0ee37b630a3e7672fc50e8fe24a
Arg [34] : 0000000000000000000000000000000000000000000000000000000000000019
Arg [35] : 00000000000000000000000000000000000000000000000000000000155f498b
Arg [36] : 0000000000000000000000000000000000000000000000000000000011d665d4
Arg [37] : 0000000000000000000000000000000000000000000000000000000010420e47
Arg [38] : 00000000000000000000000000000000000000000000000000000000100b5dda
Arg [39] : 000000000000000000000000000000000000000000000000000000000fd7437a
Arg [40] : 000000000000000000000000000000000000000000000000000000000ec6a36d
Arg [41] : 000000000000000000000000000000000000000000000000000000000df4cb8f
Arg [42] : 000000000000000000000000000000000000000000000000000000000d7f9fed
Arg [43] : 000000000000000000000000000000000000000000000000000000000c910de7
Arg [44] : 000000000000000000000000000000000000000000000000000000000c84c12f
Arg [45] : 000000000000000000000000000000000000000000000000000000000b3757e9
Arg [46] : 000000000000000000000000000000000000000000000000000000000b0fd19b
Arg [47] : 00000000000000000000000000000000000000000000000000000000099a99f3
Arg [48] : 0000000000000000000000000000000000000000000000000000000008eeac49
Arg [49] : 0000000000000000000000000000000000000000000000000000000008c165e7
Arg [50] : 0000000000000000000000000000000000000000000000000000000008ae11e9
Arg [51] : 0000000000000000000000000000000000000000000000000000000007edb0fc
Arg [52] : 0000000000000000000000000000000000000000000000000000000006e70afe
Arg [53] : 0000000000000000000000000000000000000000000000000000000005941f40
Arg [54] : 000000000000000000000000000000000000000000000000000000000504d853
Arg [55] : 00000000000000000000000000000000000000000000000000000000046b796b
Arg [56] : 00000000000000000000000000000000000000000000000000000000040ca3fb
Arg [57] : 000000000000000000000000000000000000000000000000000000000399a600
Arg [58] : 0000000000000000000000000000000000000000000000000000000002d8ae9d
Arg [59] : 0000000000000000000000000000000000000000000000000000000002bcb5d8


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.