ETH Price: $3,617.58 (-0.51%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Submit_logic_cal...215247722024-12-31 20:15:235 days ago1735676123IN
0xDcBd07EE...9c7ed391d
0 ETH0.001428935.61651083
Update_valset215247702024-12-31 20:14:595 days ago1735676099IN
0xDcBd07EE...9c7ed391d
0 ETH0.001046875.46971579
Submit_logic_cal...215001242024-12-28 9:39:478 days ago1735378787IN
0xDcBd07EE...9c7ed391d
0 ETH0.001065783.28692019
Update_valset215000832024-12-28 9:31:358 days ago1735378295IN
0xDcBd07EE...9c7ed391d
0 ETH0.000693253.85995506
Submit_logic_cal...214718282024-12-24 10:47:4712 days ago1735037267IN
0xDcBd07EE...9c7ed391d
0 ETH0.001572186.29094547
Update_valset214718262024-12-24 10:47:2312 days ago1735037243IN
0xDcBd07EE...9c7ed391d
0 ETH0.001261486.53252284
Deposit214377992024-12-19 16:36:1117 days ago1734626171IN
0xDcBd07EE...9c7ed391d
0.1 ETH0.0013481526.15387702
Update_valset214371902024-12-19 14:33:4717 days ago1734618827IN
0xDcBd07EE...9c7ed391d
0 ETH0.0030197816.19849892
Update_valset214369582024-12-19 13:47:1117 days ago1734616031IN
0xDcBd07EE...9c7ed391d
0 ETH0.002284312.68280753
Update_valset214368922024-12-19 13:33:5917 days ago1734615239IN
0xDcBd07EE...9c7ed391d
0 ETH0.0024915612.65741239
Update_valset214366822024-12-19 12:51:4717 days ago1734612707IN
0xDcBd07EE...9c7ed391d
0 ETH0.0020167410.67980313
Update_valset214365762024-12-19 12:30:2317 days ago1734611423IN
0xDcBd07EE...9c7ed391d
0 ETH0.0021046511.16018382
Update_valset214365012024-12-19 12:15:1117 days ago1734610511IN
0xDcBd07EE...9c7ed391d
0 ETH0.0019577610.50765193
Update_valset214362892024-12-19 11:32:3517 days ago1734607955IN
0xDcBd07EE...9c7ed391d
0 ETH0.0024705413.28612291
Update_valset214360612024-12-19 10:46:4717 days ago1734605207IN
0xDcBd07EE...9c7ed391d
0 ETH0.003145417.29061817
Update_valset214360232024-12-19 10:39:1117 days ago1734604751IN
0xDcBd07EE...9c7ed391d
0 ETH0.0029746816.04911314
Update_valset214359712024-12-19 10:28:4717 days ago1734604127IN
0xDcBd07EE...9c7ed391d
0 ETH0.0033687217.93495263
Update_valset214358332024-12-19 10:00:4717 days ago1734602447IN
0xDcBd07EE...9c7ed391d
0 ETH0.0022637111.73356843
Update_valset214357472024-12-19 9:43:2317 days ago1734601403IN
0xDcBd07EE...9c7ed391d
0 ETH0.001842089.2889644
Update_valset214357142024-12-19 9:36:4717 days ago1734601007IN
0xDcBd07EE...9c7ed391d
0 ETH0.001645118.71237925
Update_valset214347242024-12-19 6:17:1117 days ago1734589031IN
0xDcBd07EE...9c7ed391d
0 ETH0.001866659.99662502
Update_valset214346742024-12-19 6:07:1117 days ago1734588431IN
0xDcBd07EE...9c7ed391d
0 ETH0.0018718410.00525093
Update_valset214343462024-12-19 5:01:2317 days ago1734584483IN
0xDcBd07EE...9c7ed391d
0 ETH0.0020232110.76725437
Update_valset214334802024-12-19 2:06:4717 days ago1734574007IN
0xDcBd07EE...9c7ed391d
0 ETH0.0042248522.62558404
Update_valset214334182024-12-19 1:54:1117 days ago1734573251IN
0xDcBd07EE...9c7ed391d
0 ETH0.0022121611.82052882
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
214377992024-12-19 16:36:1117 days ago1734626171
0xDcBd07EE...9c7ed391d
0.1 ETH
212876592024-11-28 17:21:5938 days ago1732814519
0xDcBd07EE...9c7ed391d
0.1 ETH
212809022024-11-27 18:34:1139 days ago1732732451
0xDcBd07EE...9c7ed391d
0.1 ETH
211955162024-11-15 20:36:2351 days ago1731702983
0xDcBd07EE...9c7ed391d
 Contract Creation0 ETH
211952702024-11-15 19:46:2351 days ago1731699983
0xDcBd07EE...9c7ed391d
0.1 ETH
211937942024-11-15 14:49:2351 days ago1731682163
0xDcBd07EE...9c7ed391d
0.1 ETH
211447532024-11-08 18:35:5958 days ago1731090959
0xDcBd07EE...9c7ed391d
0.1 ETH
210802962024-10-30 18:39:2367 days ago1730313563
0xDcBd07EE...9c7ed391d
0.1 ETH
210716162024-10-29 13:33:4768 days ago1730208827
0xDcBd07EE...9c7ed391d
0.1 ETH
210667152024-10-28 21:07:5969 days ago1730149679
0xDcBd07EE...9c7ed391d
0.1 ETH
210447042024-10-25 19:24:4772 days ago1729884287
0xDcBd07EE...9c7ed391d
0.1 ETH
210301502024-10-23 18:41:5974 days ago1729708919
0xDcBd07EE...9c7ed391d
0.1 ETH
210194152024-10-22 6:45:3575 days ago1729579535
0xDcBd07EE...9c7ed391d
 Contract Creation0 ETH
210145962024-10-21 14:37:1176 days ago1729521431
0xDcBd07EE...9c7ed391d
0.05 ETH
209795002024-10-16 17:05:1181 days ago1729098311
0xDcBd07EE...9c7ed391d
0.1 ETH
209368822024-10-10 18:03:3587 days ago1728583415
0xDcBd07EE...9c7ed391d
0.1 ETH
209301882024-10-09 19:40:1188 days ago1728502811
0xDcBd07EE...9c7ed391d
0.1 ETH
208758832024-10-02 6:00:4795 days ago1727848847
0xDcBd07EE...9c7ed391d
0.1 ETH
208223092024-09-24 18:40:47103 days ago1727203247
0xDcBd07EE...9c7ed391d
0.1 ETH
208219922024-09-24 17:37:11103 days ago1727199431
0xDcBd07EE...9c7ed391d
0.2 ETH
208140322024-09-23 14:59:11104 days ago1727103551
0xDcBd07EE...9c7ed391d
0.1 ETH
207923802024-09-20 14:24:59107 days ago1726842299
0xDcBd07EE...9c7ed391d
0.1 ETH
207788092024-09-18 16:55:47109 days ago1726678547
0xDcBd07EE...9c7ed391d
0.04 ETH
207778632024-09-18 13:45:59109 days ago1726667159
0xDcBd07EE...9c7ed391d
0.05 ETH
206926812024-09-06 16:15:47121 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.