ETH Price: $3,161.95 (-8.90%)
Gas: 3 Gwei

Contract

0x7Eec3e2f4d567794B927B6d904Fbf973bC8D15e6
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Submit_logic_cal...180800362023-09-06 21:19:35322 days ago1694035175IN
0x7Eec3e2f...3bC8D15e6
0 ETH0.0181667632.79489684
Submit_logic_cal...180793792023-09-06 19:06:35322 days ago1694027195IN
0x7Eec3e2f...3bC8D15e6
0 ETH0.007778821.86610652
Submit_logic_cal...180792012023-09-06 18:30:35322 days ago1694025035IN
0x7Eec3e2f...3bC8D15e6
0 ETH0.014050128.61546269
Update_valset180790622023-09-06 18:02:35322 days ago1694023355IN
0x7Eec3e2f...3bC8D15e6
0 ETH0.0084587147.08941763
Submit_logic_cal...180790122023-09-06 17:52:23322 days ago1694022743IN
0x7Eec3e2f...3bC8D15e6
0 ETH0.0071041923.07636709
Submit_logic_cal...180663032023-09-04 23:08:35324 days ago1693868915IN
0x7Eec3e2f...3bC8D15e6
0 ETH0.0085460918.62236025
Submit_logic_cal...180662972023-09-04 23:07:23324 days ago1693868843IN
0x7Eec3e2f...3bC8D15e6
0 ETH0.0042767716.78448301
Submit_logic_cal...180662962023-09-04 23:07:11324 days ago1693868831IN
0x7Eec3e2f...3bC8D15e6
0 ETH0.0109366416.97034781
Submit_logic_cal...180662742023-09-04 23:02:47324 days ago1693868567IN
0x7Eec3e2f...3bC8D15e6
0 ETH0.00876318.72800388
Submit_logic_cal...180476932023-09-02 8:38:59327 days ago1693643939IN
0x7Eec3e2f...3bC8D15e6
0 ETH0.0051790812.02248962
Submit_logic_cal...180436482023-09-01 19:00:23327 days ago1693594823IN
0x7Eec3e2f...3bC8D15e6
0 ETH0.0131088627.46519962
Submit_logic_cal...180379052023-08-31 23:43:35328 days ago1693525415IN
0x7Eec3e2f...3bC8D15e6
0 ETH0.0018089415.79712059
Submit_logic_cal...180378902023-08-31 23:40:35328 days ago1693525235IN
0x7Eec3e2f...3bC8D15e6
0 ETH0.0079764318.58914231
Submit_logic_cal...180378772023-08-31 23:37:59328 days ago1693525079IN
0x7Eec3e2f...3bC8D15e6
0 ETH0.0112717825.24589272
Submit_logic_cal...180378382023-08-31 23:30:11328 days ago1693524611IN
0x7Eec3e2f...3bC8D15e6
0 ETH0.0080414418.63641311
Submit_logic_cal...180378242023-08-31 23:27:11328 days ago1693524431IN
0x7Eec3e2f...3bC8D15e6
0 ETH0.0062465414.07698163
Submit_logic_cal...180374592023-08-31 22:13:35328 days ago1693520015IN
0x7Eec3e2f...3bC8D15e6
0 ETH0.0080221922.03010806
Submit_logic_cal...180374442023-08-31 22:10:35328 days ago1693519835IN
0x7Eec3e2f...3bC8D15e6
0 ETH0.0082247121.80799868
Submit_logic_cal...180371002023-08-31 21:00:47328 days ago1693515647IN
0x7Eec3e2f...3bC8D15e6
0 ETH0.0119875927.7435471
Submit_logic_cal...180370742023-08-31 20:55:35328 days ago1693515335IN
0x7Eec3e2f...3bC8D15e6
0 ETH0.0133134829.82078419
Submit_logic_cal...180370582023-08-31 20:52:23328 days ago1693515143IN
0x7Eec3e2f...3bC8D15e6
0 ETH0.010862629.9458278
Submit_logic_cal...180370512023-08-31 20:50:59328 days ago1693515059IN
0x7Eec3e2f...3bC8D15e6
0 ETH0.0131903129.08540444
Submit_logic_cal...180370332023-08-31 20:47:23328 days ago1693514843IN
0x7Eec3e2f...3bC8D15e6
0 ETH0.0123887432.22250923
Submit_logic_cal...180370262023-08-31 20:45:47328 days ago1693514747IN
0x7Eec3e2f...3bC8D15e6
0 ETH0.012327627.57391402
Submit_logic_cal...180370012023-08-31 20:40:47328 days ago1693514447IN
0x7Eec3e2f...3bC8D15e6
0 ETH0.0113277525.3368071
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Compass-EVM

Compiler Version
vyper:0.3.7

Optimization Enabled:
N/A

Other Settings:
Apache-2.0 license

Contract Source Code (Vyper language format)

# @version 0.3.7
"""
@title Compass-EVM
@author Volume.Finance
"""

MAX_VALIDATORS: constant(uint256) = 320
MAX_PAYLOAD: constant(uint256) = 20480
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.
TURNSTONE_ID: immutable(bytes32)

interface ERC20:
    def balanceOf(_owner: address) -> uint256: view

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]

event ValsetUpdated:
    checkpoint: bytes32
    valset_id: uint256

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

event SendToPalomaEvent:
    token: address
    sender: address
    receiver: String[64]
    amount: uint256

event BatchSendEvent:
    token: address
    message_id: uint256

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

last_checkpoint: public(bytes32)
last_valset_id: public(uint256)
message_id_used: public(HashMap[uint256, bool])

# turnstone_id: unique identifier for turnstone instance
# valset: initial validator set
@external
def __init__(turnstone_id: bytes32, valset: Valset):
    TURNSTONE_ID = turnstone_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 += 1
    assert cumulative_power >= POWER_THRESHOLD, "Insufficient Power"
    new_checkpoint: bytes32 = keccak256(_abi_encode(valset.validators, valset.powers, valset.valset_id, turnstone_id, method_id=method_id("checkpoint(address[],uint256[],uint256,bytes32)")))
    self.last_checkpoint = new_checkpoint
    self.last_valset_id = valset.valset_id
    log ValsetUpdated(new_checkpoint, valset.valset_id)

@external
@pure
def turnstone_id() -> bytes32:
    return TURNSTONE_ID

# 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 += 1
    assert cumulative_power >= POWER_THRESHOLD, "Insufficient 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, turnstone_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, TURNSTONE_ID, method_id=method_id("checkpoint(address[],uint256[],uint256,bytes32)")))

# 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):
    # 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 += 1
    assert cumulative_power >= POWER_THRESHOLD, "Insufficient Power"
    # check if the supplied current validator set matches the saved checkpoint
    assert self.last_checkpoint == self.make_checkpoint(consensus.valset), "Incorrect Checkpoint"
    # calculate the new checkpoint
    new_checkpoint: bytes32 = self.make_checkpoint(new_valset)
    # check if enough validators signed new validator set (new checkpoint)
    self.check_validator_signatures(consensus, new_checkpoint)
    self.last_checkpoint = new_checkpoint
    self.last_valset_id = new_valset.valset_id
    log ValsetUpdated(new_checkpoint, new_valset.valset_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, message_id: uint256, deadline: uint256):
    assert block.timestamp <= deadline, "Timeout"
    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
    assert self.last_checkpoint == self.make_checkpoint(consensus.valset), "Incorrect Checkpoint"
    # signing data is keccak256 hash of abi_encoded logic_call(args, message_id, turnstone_id, deadline)
    args_hash: bytes32 = keccak256(_abi_encode(args, message_id, TURNSTONE_ID, deadline, method_id=method_id("logic_call((address,bytes),uint256,bytes32,uint256)")))
    # check if enough validators signed args_hash
    self.check_validator_signatures(consensus, args_hash)
    # make call to logic contract
    raw_call(args.logic_contract_address, args.payload)
    log LogicCallEvent(args.logic_contract_address, args.payload, message_id)

@internal
def _safe_transfer_from(_token: address, _from: address, _to: address, _value: uint256):
    _response: Bytes[32] = raw_call(
        _token,
        _abi_encode(
            _from, _to, _value,
            method_id=method_id("transferFrom(address,address,uint256)")),
        max_outsize=32
    )  # dev: failed transferFrom
    if len(_response) > 0:
        assert convert(_response, bool), "TransferFrom failed"

@external
def send_token_to_paloma(token: address, receiver: String[64], amount: uint256):
    _balance: uint256 = ERC20(token).balanceOf(self)
    self._safe_transfer_from(token, msg.sender, self, amount)
    _balance -= ERC20(token).balanceOf(self)
    assert _balance > 0
    log SendToPalomaEvent(token, msg.sender, receiver, amount)

@internal
def _safe_transfer(_token: address, _to: address, _value: uint256):
    _response: Bytes[32] = raw_call(
        _token,
        _abi_encode(
            _to, _value,
            method_id=method_id("transfer(address,uint256)")),
        max_outsize=32
    )  # dev: failed transferFrom
    if len(_response) > 0:
        assert convert(_response, bool), "TransferFrom failed"

@external
def submit_batch(consensus: Consensus, token: address, args: TokenSendArgs, message_id: uint256, deadline: uint256):
    assert block.timestamp <= deadline, "Timeout"
    assert not self.message_id_used[message_id], "Used Message_ID"
    length: uint256 = len(args.receiver)
    assert length == len(args.amount)
    self.message_id_used[message_id] = True
    # check if the supplied current validator set matches the saved checkpoint
    assert self.last_checkpoint == self.make_checkpoint(consensus.valset), "Incorrect Checkpoint"
    # signing data is keccak256 hash of abi_encoded logic_call(args, message_id, turnstone_id, deadline)
    args_hash: bytes32 = keccak256(_abi_encode(token, args, message_id, TURNSTONE_ID, deadline, method_id=method_id("batch_call(address,(address[],uint256[]),uint256,bytes32,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
        self._safe_transfer(token, args.receiver[i], args.amount[i])
    log BatchSendEvent(token, message_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)
    log ERC20DeployedEvent(_paloma_denom, erc20, _name, _symbol, _decimals)

Contract Security Audit

Contract ABI

[{"name":"ValsetUpdated","inputs":[{"name":"checkpoint","type":"bytes32","indexed":false},{"name":"valset_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}],"anonymous":false,"type":"event"},{"name":"SendToPalomaEvent","inputs":[{"name":"token","type":"address","indexed":false},{"name":"sender","type":"address","indexed":false},{"name":"receiver","type":"string","indexed":false},{"name":"amount","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"BatchSendEvent","inputs":[{"name":"token","type":"address","indexed":false},{"name":"message_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}],"anonymous":false,"type":"event"},{"stateMutability":"nonpayable","type":"constructor","inputs":[{"name":"turnstone_id","type":"bytes32"},{"name":"valset","type":"tuple","components":[{"name":"validators","type":"address[]"},{"name":"powers","type":"uint256[]"},{"name":"valset_id","type":"uint256"}]}],"outputs":[]},{"stateMutability":"pure","type":"function","name":"turnstone_id","inputs":[],"outputs":[{"name":"","type":"bytes32"}]},{"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"}]}],"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":"message_id","type":"uint256"},{"name":"deadline","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"send_token_to_paloma","inputs":[{"name":"token","type":"address"},{"name":"receiver","type":"string"},{"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":"message_id","type":"uint256"},{"name":"deadline","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":"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":"message_id_used","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"","type":"bool"}]}]

6020611ce8600039600051602081611cc8016000396000518101610140602082611cc80160003960005111611cc357602081611cc801600039600051806040526000816101408111611cc357801561008357905b60208160051b6020860101611cc8016000396000518060a01c611cc3578160051b60600152600101818118610053575b50505050602060208201611cc8016000396000518101610140602082611cc80160003960005111611cc357602081611cc8016000396000518061286052602082018160051b8082611cc8016128803950505050602060408201611cc801600039600051615080525034611cc3576020611cc860003960005161a200526040366150a03760006040516101408111611cc357801561018857905b8060051b606001516150e0526150a0516150c05161286051811015611cc35760051b6128800151808201828110611cc357905090506150a05263aaaaaaaa6150a0511061016857610188565b6150c05160018101818110611cc35790506150c05260010181811861011c575b505063aaaaaaaa6150a05110156101ff5760126150e0527f496e73756666696369656e7420506f7765720000000000000000000000000000615100526150e0506150e0518061510001601f826000031636823750506308c379a06150a05260206150c052601f19601f6150e05101166044016150bcfd5b63299018c261510452600460808061512452806151240160006040518083528060051b6000826101408111611cc357801561025357905b8060051b606001518160051b602088010152600101818118610236575b50508201602001915050905081019050806151445280615124016000612860518083528060051b6000826101408111611cc35780156102ac57905b8060051b61288001518160051b60208801015260010181811861028e575b5050820160200191505090508101905061508051615164526020611cc86000396000516151845201615100526151008051602082012090506150e0526150e051600055615080516001557f09d40458cf931745f8d532ef13fa9c74bfb7fe0edcee88e0a677b0cbef88f0f96150e0516151005261508051615120526040615100a161198361033f61887d396119a361887df36003361161000c5761143f565b60003560e01c346119715763f0f40504811861003e576004361061197157602061198360003960005160405260206040f35b63eadf4af78118610518576101e436106119715760043560040180358101803581016101408135116119715780358061cb405260008161014081116119715780156100ab57905b8060051b6020850101358060a01c611971578160051b61cb600152600101818118610085575b50505050602081013581016101408135116119715780358061f36052602082018160051b808261f3803750505050604081013562011b805250602081013581016101408135116119715780358062011ba0526020820160608202808262011bc03750505050506024356004018035810161014081351161197157803580620193c052600081610140811161197157801561016857905b8060051b6020850101358060a01c611971578160051b620193e00152600101818118610141575b5050505060208101358101610140813511611971578035806201bbe052602082018160051b80826201bc00375050505060408101356201e400525062011b80516201e40051116102215760116201e420527f496e76616c69642056616c7365742049440000000000000000000000000000006201e440526201e420506201e42051806201e44001601f826000031636823750506308c379a06201e3e05260206201e40052601f19601f6201e4205101166044016201e3fcfd5b6040366201e420376000620193c05161014081116119715780156102b857905b8060051b620193e001516201e460526201e420516201e440516201bbe0518110156119715760051b6201bc00015180820182811061197157905090506201e4205263aaaaaaaa6201e4205110610296576102b8565b6201e44051600181018181106119715790506201e44052600101818118610241575b505063aaaaaaaa6201e4205110156103395760126201e460527f496e73756666696369656e7420506f77657200000000000000000000000000006201e480526201e460506201e46051806201e48001601f826000031636823750506308c379a06201e4205260206201e44052601f19601f6201e4605101166044016201e43cfd5b61cb4051806040528060051b8060608261cb6060045afa50505061f3605180612860528060051b806128808261f38060045afa50505062011b8051615080526103846201e4606116b8565b6201e4605160005418156104015760146201e480527f496e636f727265637420436865636b706f696e740000000000000000000000006201e4a0526201e480506201e48051806201e4a001601f826000031636823750506308c379a06201e4405260206201e46052601f19601f6201e4805101166044016201e45cfd5b620193c051806040528060051b80606082620193e060045afa5050506201bbe05180612860528060051b80612880826201bc0060045afa5050506201e40051615080526104506201e4806116b8565b6201e480516201e4605261cb4051806101a0528060051b806101c08261cb6060045afa50505061f36051806129c0528060051b806129e08261f38060045afa50505062011b80516151e05262011ba051806152005260608102806152208262011bc060045afa5050506201e4605161ca20526104ca6114e8565b6201e460516000556201e400516001557f09d40458cf931745f8d532ef13fa9c74bfb7fe0edcee88e0a677b0cbef88f0f96201e460516201e480526201e400516201e4a05260406201e480a1005b631029ae6f81186109cb576101e436106119715760043560040180358101803581016101408135116119715780358061cb4052600081610140811161197157801561058557905b8060051b6020850101358060a01c611971578160051b61cb60015260010181811861055f575b50505050602081013581016101408135116119715780358061f36052602082018160051b808261f3803750505050604081013562011b805250602081013581016101408135116119715780358062011ba0526020820160608202808262011bc037505050505060243560040180358060a01c61197157620193c0526020810135810161500081351161197157803580620193e0526020820181816201940037505050506064354211156106a15760076201e400527f54696d656f7574000000000000000000000000000000000000000000000000006201e420526201e400506201e40051806201e42001601f826000031636823750506308c379a06201e3c05260206201e3e052601f19601f6201e4005101166044016201e3dcfd5b60026044356020526000526040600020541561072657600f6201e400527f55736564204d6573736167655f494400000000000000000000000000000000006201e420526201e400506201e40051806201e42001601f826000031636823750506308c379a06201e3c05260206201e3e052601f19601f6201e4005101166044016201e3dcfd5b6001600260443560205260005260406000205561cb4051806040528060051b8060608261cb6060045afa50505061f3605180612860528060051b806128808261f38060045afa50505062011b8051615080526107846201e4006116b8565b6201e4005160005418156108015760146201e420527f496e636f727265637420436865636b706f696e740000000000000000000000006201e440526201e420506201e42051806201e44001601f826000031636823750506308c379a06201e3e05260206201e40052601f19601f6201e4205101166044016201e3fcfd5b63980721b26201e4245260046080806201e44452806201e444016040620193c0518252806020830152808201620193e051808252602082018181836201940060045afa5050508051806020830101601f82600003163682375050601f19601f825160200101169050810190509050810190506044356201e4645260206119836000396000516201e484526064356201e4a452016201e420526201e4208051602082012090506201e4005261cb4051806101a0528060051b806101c08261cb6060045afa50505061f36051806129c0528060051b806129e08261f38060045afa50505062011b80516151e05262011ba051806152005260608102806152208262011bc060045afa5050506201e4005161ca205261091b6114e8565b620193e0600060008251602084016000620193c0515af19050610943573d600060003e3d6000fd5b7f0d2bd340033bb64fd086788e6685b480a9bf10b98d63e9b8073eb5d0bd6c6ee96060620193c0516201e42052806201e44052806201e42001620193e051808252602082018181836201940060045afa5050508051806020830101601f82600003163682375050601f19601f825160200101169050810190506044356201e460526201e420a1005b63b39dcd5e8118610b4d5760843610611971576004358060a01c611971576101e05260243560040160408135116119715780358061020052602082018181610220375050506101e0516370a0823161028052306102a0526020610280602461029c845afa610a3e573d600060003e3d6000fd5b60203d1061197157610280905051610260526101e051604052336060523060805260443560a052610a6d6117a2565b610260516101e0516370a0823161028052306102a0526020610280602461029c845afa610a9f573d600060003e3d6000fd5b60203d10611971576102809050518082038281116119715790509050610260526102605115611971577f75a16dbdc936366f3b5b1a7aaabc5d7b28dcf94ce2eb5b3efbe0bce0da7ee66960806101e05161028052336102a052806102c0528061028001610200518082526020820181818361022060045afa5050508051806020830101601f82600003163682375050601f19601f825160200101169050810190506044356102e052610280a1005b630ffc0bdb81186110dd5761022436106119715760043560040180358101803581016101408135116119715780358061cb40526000816101408111611971578015610bba57905b8060051b6020850101358060a01c611971578160051b61cb600152600101818118610b94575b50505050602081013581016101408135116119715780358061f36052602082018160051b808261f3803750505050604081013562011b805250602081013581016101408135116119715780358062011ba0526020820160608202808262011bc03750505050506024358060a01c61197157620193c05260443560040180358101604081351161197157803580620193e05260008160408111611971578015610c8557905b8060051b6020850101358060a01c611971578160051b620194000152600101818118610c5e575b505050506020810135810160408135116119715780358062019c0052602082018160051b808262019c20375050505050608435421115610d2e5760076201a420527f54696d656f7574000000000000000000000000000000000000000000000000006201a440526201a420506201a42051806201a44001601f826000031636823750506308c379a06201a3e05260206201a40052601f19601f6201a4205101166044016201a3fcfd5b600260643560205260005260406000205415610db357600f6201a420527f55736564204d6573736167655f494400000000000000000000000000000000006201a440526201a420506201a42051806201a44001601f826000031636823750506308c379a06201a3e05260206201a40052601f19601f6201a4205101166044016201a3fcfd5b620193e0516201a4205262019c00516201a4205118611971576001600260643560205260005260406000205561cb4051806040528060051b8060608261cb6060045afa50505061f3605180612860528060051b806128808261f38060045afa50505062011b805161508052610e2a6201a4406116b8565b6201a440516000541815610ea75760146201a460527f496e636f727265637420436865636b706f696e740000000000000000000000006201a480526201a460506201a46051806201a48001601f826000031636823750506308c379a06201a4205260206201a44052601f19601f6201a4605101166044016201a43cfd5b63ecaa10b96201a46452600460a0620193c0516201a48452806201a4a452806201a4840160408082528082016000620193e0518083528060051b60008260408111611971578015610f1357905b8060051b6201940001518160051b602088010152600101818118610ef4575b50508201602001915050905081019050806020830152808201600062019c00518083528060051b60008260408111611971578015610f6c57905b8060051b62019c2001518160051b602088010152600101818118610f4d575b505082016020019150509050810190509050810190506064356201a4c45260206119836000396000516201a4e4526084356201a50452016201a460526201a4608051602082012090506201a4405261cb4051806101a0528060051b806101c08261cb6060045afa50505061f36051806129c0528060051b806129e08261f38060045afa50505062011b80516151e05262011ba051806152005260608102806152208262011bc060045afa5050506201a4405161ca205261102a6114e8565b60006040905b806201a460526201a420516201a460511061104a5761109f565b620193c0516040526201a46051620193e0518110156119715760051b6201940001516060526201a4605162019c00518110156119715760051b62019c200151608052611094611891565b600101818118611030575b50507fba199fb06e908b6eca45bc6e460f07d1888e4a0606361da80e679eac61d11103620193c0516201a460526064356201a4805260406201a460a1005b6308a92ad781186113d25761010436106119715760043560040160408135116119715780358060405260208201818160603750505060243560040160408135116119715780358060a05260208201818160c03750505060443560040160208135116119715780358061010052602082018035610120525050506064358060081c61197157610140526084358060a01c6119715761016052303318156111e2576007610180527f496e76616c6964000000000000000000000000000000000000000000000000006101a0526101805061018051806101a001601f826000031636823750506308c379a061014052602061016052601f19601f61018051011660440161015cfd5b610160516080306101a0526101a0516101e0528061020052806101e00160a0518082526020820181818360c060045afa5050508051806020830101601f82600003163682375050601f19601f825160200101169050810190508061022052806101e001610100518082526020820161012051815250508051806020830101601f82600003163682375050601f19601f82516020010116905081019050610140516101c0526101c051610240526003823b0359600182126119715781600382863c8181018381856101e060045afa5050828201816000f08015611971579050905090509050610180527f7144f66490771d357f3d6d385605288e1579754e5555f2e01114a2945f394e5b60a0806101a052806101a00160405180825260208201818183606060045afa5050508051806020830101601f82600003163682375050601f19601f82516020010116905081019050610180516101c052806101e052806101a00160a0518082526020820181818360c060045afa5050508051806020830101601f82600003163682375050601f19601f825160200101169050810190508061020052806101a001610100518082526020820161012051815250508051806020830101601f82600003163682375050601f19601f8251602001011690508101905061014051610220526101a0a1005b63a9a4a98381186113f157600436106119715760005460405260206040f35b634da6ecc9811861141057600436106119715760015460405260206040f35b6338d6172d811861143d576024361061197157600260043560205260005260406000205460405260206040f35b505b60006000fd5b6000601c610100527f19457468657265756d205369676e6564204d6573736167653a0a333200000000610120526101008051602082018361016001815181525050808301925050506060518161016001526020810190508061014052610140905080516020820120905060e05260e051610100526080516101205260a0516101405260c0516101605260206000608061010060015afa5060005160405114815250565b60403661ca4037600061520051610140811161197157801561163f57905b6060810261522001805161ca8052602081015161caa052604081015161cac0525061ca80511561161f5761ca40516101a0518110156119715760051b6101c0015160405261ca205160605261ca805160805261caa05160a05261cac05160c05261157161cae0611445565b61cae0516115df57601161cb00527f496e76616c6964205369676e617475726500000000000000000000000000000061cb205261cb005061cb00518061cb2001601f826000031636823750506308c379a061cac052602061cae052601f19601f61cb0051011660440161cadcfd5b61ca605161ca40516129c0518110156119715760051b6129e00151808201828110611971579050905061ca605263aaaaaaaa61ca60511061161f5761163f565b61ca40516001810181811061197157905061ca4052600101818118611506575b505063aaaaaaaa61ca605110156116b657601261ca80527f496e73756666696369656e7420506f776572000000000000000000000000000061caa05261ca805061ca80518061caa001601f826000031636823750506308c379a061ca4052602061ca6052601f19601f61ca8051011660440161ca5cfd5b565b63299018c26150a45260046080806150c452806150c40160006040518083528060051b600082610140811161197157801561170c57905b8060051b606001518160051b6020880101526001018181186116ef575b50508201602001915050905081019050806150e452806150c4016000612860518083528060051b600082610140811161197157801561176557905b8060051b61288001518160051b602088010152600101818118611747575b505082016020019150509050810190506150805161510452602061198360003960005161512452016150a0526150a0805160208201209050815250565b6323b872dd610104526004606051610124526080516101445260a05161016452606001610100526101005060206101c06101005161012060006040515af16117ef573d600060003e3d6000fd5b3d602081183d60201002186101a0526101a080518060c05260208201805160e05250505060c0511561188f5760e05160c05160200360031b1c61188f576013610100527f5472616e7366657246726f6d206661696c6564000000000000000000000000006101205261010050610100518061012001601f826000031636823750506308c379a060c052602060e052601f19601f61010051011660440160dcfd5b565b63a9059cbb60e4526004606051610104526080516101245260400160e05260e050602061018060e05161010060006040515af16118d3573d600060003e3d6000fd5b3d602081183d60201002186101605261016080518060a05260208201805160c05250505060a0511561196f5760c05160a05160200360031b1c61196f57601360e0527f5472616e7366657246726f6d206661696c6564000000000000000000000000006101005260e05060e0518061010001601f826000031636823750506308c379a060a052602060c052601f19601f60e051011660440160bcfd5b565b600080fda165767970657283000307000b005b600080fd313636343038340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000058000000000000000000000000000000000000000000000000000000000000018240000000000000000000000000000000000000000000000000000000000000028000000000000000000000000092604a080524eff1c875ff13a1b88cbdd41df370000000000000000000000006dc59ee4bdfa2c791229004f29b08f783491a934000000000000000000000000deea5b069208e0ee37b630a3e7672fc50e8fe24a000000000000000000000000c47b85c7577260d995be7ab65728ae33b4cd26cd000000000000000000000000ade5f5efeae72102d998f6c496ea59731a70eeb0000000000000000000000000279fc7c0ebef3328d3899fe73464347a764c5f2c000000000000000000000000aac74d38c82c367b3da7482e3aecf6dd7a512ef200000000000000000000000043e218f96a567dc26c6e65fcabf1fde26af694440000000000000000000000005a7c9fc846b18944fd2b8f8ae7255db5af7b9c040000000000000000000000001ad90db98da083e117d5f62a1673fc0f3a5930ca00000000000000000000000063f55bc560e981d53e1f5bb3643e3a96d26fc6350000000000000000000000001dd71ee9e7b1cff10ccb7e12520999c2d4fb45e50000000000000000000000004a89f96fdff3c161937cfbc3e22d2e325612aaec0000000000000000000000001f6ef2784cbb2a5011d8cf12356fb5ee3eaef372000000000000000000000000443266026738061972012e62d5ecd9d98da8b6f4000000000000000000000000443520951d766456f2ac5578f3e7e4b56a7bcf63000000000000000000000000eb13a069d119558b6653cbc8c069dafb3d6758e70000000000000000000000007c3de83d90e8d2001a7e3f38e6a7058334cb291e0000000000000000000000007b5f4b6490ebc2dd03b717d7d26edc78451a88b4000000000000000000000000377d23948d41579f2c3ca40308e3bdd53f6da7b20000000000000000000000000daabb4ff60423eb1f14cc6731394e098ad51bcb000000000000000000000000cfbbf6341cf13a39ffcaf24b86de09489116783b000000000000000000000000179206cd9080a8ee77c2256a27050112da13b2f60000000000000000000000003a188de3d16ddee783990dded1b629e95c8242d900000000000000000000000031cbc8e1bc86d1ba0f5e77afc324d785c54ae3200000000000000000000000006bf4893a5a54191cf16e6337956aa4c99c793903000000000000000000000000827d61ccf62a78a9ac192cb4b47c51df7db4b1660000000000000000000000008b6cd0884e227e7ef90fc4c8b642d723109271c3000000000000000000000000837f0c0d5b50f5463e4dafcd7bae63207e2f63800000000000000000000000009314f0e1d09e1c541c1db02b622af9ca5f1ac9fe000000000000000000000000722e2b4107d3dc5e99cbb4919a1580ae70baab74000000000000000000000000fc0f1e32e0db02cd81de8f662a51e2c285d5228d000000000000000000000000eb784b37365c302c97c9ec8cb0933ce344e6de42000000000000000000000000ee21301af1d9562b5cbedf520077ea0a9bc9d535000000000000000000000000bbefe691d2c3bbb835ce2958b453ccd05bdb27a50000000000000000000000001829a4a33cc162d3d55ed79d77574005a084142b0000000000000000000000005cb3114baf54395da6c3665616bdf59e8dcb3b8a000000000000000000000000b5117420bd1726b6bfeced63602b287ab3dba219000000000000000000000000a49f65cf05dcce7c92621ed41cba9e4e09a5d618000000000000000000000000ecaf11bb88082f06a64d5fa3076a74df792e6afe0000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000001adfb7810000000000000000000000000000000000000000000000000000000011b5e025000000000000000000000000000000000000000000000000000000000f13ec7a000000000000000000000000000000000000000000000000000000000ed4979d000000000000000000000000000000000000000000000000000000000e7e486d000000000000000000000000000000000000000000000000000000000e320cc0000000000000000000000000000000000000000000000000000000000d54f7e2000000000000000000000000000000000000000000000000000000000d24f812000000000000000000000000000000000000000000000000000000000cf34102000000000000000000000000000000000000000000000000000000000cb4b767000000000000000000000000000000000000000000000000000000000b1b97e3000000000000000000000000000000000000000000000000000000000a7b900f000000000000000000000000000000000000000000000000000000000a2280350000000000000000000000000000000000000000000000000000000008c013aa000000000000000000000000000000000000000000000000000000000857d50a0000000000000000000000000000000000000000000000000000000006dbcaf00000000000000000000000000000000000000000000000000000000006b7220200000000000000000000000000000000000000000000000000000000069bed3a00000000000000000000000000000000000000000000000000000000068a49320000000000000000000000000000000000000000000000000000000004a5860000000000000000000000000000000000000000000000000000000000004b2034000000000000000000000000000000000000000000000000000000000041ba2200000000000000000000000000000000000000000000000000000000002a740d0000000000000000000000000000000000000000000000000000000000297c6b00000000000000000000000000000000000000000000000000000000002973ee000000000000000000000000000000000000000000000000000000000029734c00000000000000000000000000000000000000000000000000000000002952f30000000000000000000000000000000000000000000000000000000000293dac000000000000000000000000000000000000000000000000000000000028ccf0000000000000000000000000000000000000000000000000000000000028bf5c0000000000000000000000000000000000000000000000000000000000288aac0000000000000000000000000000000000000000000000000000000000272473000000000000000000000000000000000000000000000000000000000026e154000000000000000000000000000000000000000000000000000000000026d089000000000000000000000000000000000000000000000000000000000026180b0000000000000000000000000000000000000000000000000000000000133c3d000000000000000000000000000000000000000000000000000000000011cc81000000000000000000000000000000000000000000000000000000000011cc81000000000000000000000000000000000000000000000000000000000011cc730000000000000000000000000000000000000000000000000000000000119ef1

Deployed Bytecode

0x6003361161000c5761143f565b60003560e01c346119715763f0f40504811861003e576004361061197157602061198360003960005160405260206040f35b63eadf4af78118610518576101e436106119715760043560040180358101803581016101408135116119715780358061cb405260008161014081116119715780156100ab57905b8060051b6020850101358060a01c611971578160051b61cb600152600101818118610085575b50505050602081013581016101408135116119715780358061f36052602082018160051b808261f3803750505050604081013562011b805250602081013581016101408135116119715780358062011ba0526020820160608202808262011bc03750505050506024356004018035810161014081351161197157803580620193c052600081610140811161197157801561016857905b8060051b6020850101358060a01c611971578160051b620193e00152600101818118610141575b5050505060208101358101610140813511611971578035806201bbe052602082018160051b80826201bc00375050505060408101356201e400525062011b80516201e40051116102215760116201e420527f496e76616c69642056616c7365742049440000000000000000000000000000006201e440526201e420506201e42051806201e44001601f826000031636823750506308c379a06201e3e05260206201e40052601f19601f6201e4205101166044016201e3fcfd5b6040366201e420376000620193c05161014081116119715780156102b857905b8060051b620193e001516201e460526201e420516201e440516201bbe0518110156119715760051b6201bc00015180820182811061197157905090506201e4205263aaaaaaaa6201e4205110610296576102b8565b6201e44051600181018181106119715790506201e44052600101818118610241575b505063aaaaaaaa6201e4205110156103395760126201e460527f496e73756666696369656e7420506f77657200000000000000000000000000006201e480526201e460506201e46051806201e48001601f826000031636823750506308c379a06201e4205260206201e44052601f19601f6201e4605101166044016201e43cfd5b61cb4051806040528060051b8060608261cb6060045afa50505061f3605180612860528060051b806128808261f38060045afa50505062011b8051615080526103846201e4606116b8565b6201e4605160005418156104015760146201e480527f496e636f727265637420436865636b706f696e740000000000000000000000006201e4a0526201e480506201e48051806201e4a001601f826000031636823750506308c379a06201e4405260206201e46052601f19601f6201e4805101166044016201e45cfd5b620193c051806040528060051b80606082620193e060045afa5050506201bbe05180612860528060051b80612880826201bc0060045afa5050506201e40051615080526104506201e4806116b8565b6201e480516201e4605261cb4051806101a0528060051b806101c08261cb6060045afa50505061f36051806129c0528060051b806129e08261f38060045afa50505062011b80516151e05262011ba051806152005260608102806152208262011bc060045afa5050506201e4605161ca20526104ca6114e8565b6201e460516000556201e400516001557f09d40458cf931745f8d532ef13fa9c74bfb7fe0edcee88e0a677b0cbef88f0f96201e460516201e480526201e400516201e4a05260406201e480a1005b631029ae6f81186109cb576101e436106119715760043560040180358101803581016101408135116119715780358061cb4052600081610140811161197157801561058557905b8060051b6020850101358060a01c611971578160051b61cb60015260010181811861055f575b50505050602081013581016101408135116119715780358061f36052602082018160051b808261f3803750505050604081013562011b805250602081013581016101408135116119715780358062011ba0526020820160608202808262011bc037505050505060243560040180358060a01c61197157620193c0526020810135810161500081351161197157803580620193e0526020820181816201940037505050506064354211156106a15760076201e400527f54696d656f7574000000000000000000000000000000000000000000000000006201e420526201e400506201e40051806201e42001601f826000031636823750506308c379a06201e3c05260206201e3e052601f19601f6201e4005101166044016201e3dcfd5b60026044356020526000526040600020541561072657600f6201e400527f55736564204d6573736167655f494400000000000000000000000000000000006201e420526201e400506201e40051806201e42001601f826000031636823750506308c379a06201e3c05260206201e3e052601f19601f6201e4005101166044016201e3dcfd5b6001600260443560205260005260406000205561cb4051806040528060051b8060608261cb6060045afa50505061f3605180612860528060051b806128808261f38060045afa50505062011b8051615080526107846201e4006116b8565b6201e4005160005418156108015760146201e420527f496e636f727265637420436865636b706f696e740000000000000000000000006201e440526201e420506201e42051806201e44001601f826000031636823750506308c379a06201e3e05260206201e40052601f19601f6201e4205101166044016201e3fcfd5b63980721b26201e4245260046080806201e44452806201e444016040620193c0518252806020830152808201620193e051808252602082018181836201940060045afa5050508051806020830101601f82600003163682375050601f19601f825160200101169050810190509050810190506044356201e4645260206119836000396000516201e484526064356201e4a452016201e420526201e4208051602082012090506201e4005261cb4051806101a0528060051b806101c08261cb6060045afa50505061f36051806129c0528060051b806129e08261f38060045afa50505062011b80516151e05262011ba051806152005260608102806152208262011bc060045afa5050506201e4005161ca205261091b6114e8565b620193e0600060008251602084016000620193c0515af19050610943573d600060003e3d6000fd5b7f0d2bd340033bb64fd086788e6685b480a9bf10b98d63e9b8073eb5d0bd6c6ee96060620193c0516201e42052806201e44052806201e42001620193e051808252602082018181836201940060045afa5050508051806020830101601f82600003163682375050601f19601f825160200101169050810190506044356201e460526201e420a1005b63b39dcd5e8118610b4d5760843610611971576004358060a01c611971576101e05260243560040160408135116119715780358061020052602082018181610220375050506101e0516370a0823161028052306102a0526020610280602461029c845afa610a3e573d600060003e3d6000fd5b60203d1061197157610280905051610260526101e051604052336060523060805260443560a052610a6d6117a2565b610260516101e0516370a0823161028052306102a0526020610280602461029c845afa610a9f573d600060003e3d6000fd5b60203d10611971576102809050518082038281116119715790509050610260526102605115611971577f75a16dbdc936366f3b5b1a7aaabc5d7b28dcf94ce2eb5b3efbe0bce0da7ee66960806101e05161028052336102a052806102c0528061028001610200518082526020820181818361022060045afa5050508051806020830101601f82600003163682375050601f19601f825160200101169050810190506044356102e052610280a1005b630ffc0bdb81186110dd5761022436106119715760043560040180358101803581016101408135116119715780358061cb40526000816101408111611971578015610bba57905b8060051b6020850101358060a01c611971578160051b61cb600152600101818118610b94575b50505050602081013581016101408135116119715780358061f36052602082018160051b808261f3803750505050604081013562011b805250602081013581016101408135116119715780358062011ba0526020820160608202808262011bc03750505050506024358060a01c61197157620193c05260443560040180358101604081351161197157803580620193e05260008160408111611971578015610c8557905b8060051b6020850101358060a01c611971578160051b620194000152600101818118610c5e575b505050506020810135810160408135116119715780358062019c0052602082018160051b808262019c20375050505050608435421115610d2e5760076201a420527f54696d656f7574000000000000000000000000000000000000000000000000006201a440526201a420506201a42051806201a44001601f826000031636823750506308c379a06201a3e05260206201a40052601f19601f6201a4205101166044016201a3fcfd5b600260643560205260005260406000205415610db357600f6201a420527f55736564204d6573736167655f494400000000000000000000000000000000006201a440526201a420506201a42051806201a44001601f826000031636823750506308c379a06201a3e05260206201a40052601f19601f6201a4205101166044016201a3fcfd5b620193e0516201a4205262019c00516201a4205118611971576001600260643560205260005260406000205561cb4051806040528060051b8060608261cb6060045afa50505061f3605180612860528060051b806128808261f38060045afa50505062011b805161508052610e2a6201a4406116b8565b6201a440516000541815610ea75760146201a460527f496e636f727265637420436865636b706f696e740000000000000000000000006201a480526201a460506201a46051806201a48001601f826000031636823750506308c379a06201a4205260206201a44052601f19601f6201a4605101166044016201a43cfd5b63ecaa10b96201a46452600460a0620193c0516201a48452806201a4a452806201a4840160408082528082016000620193e0518083528060051b60008260408111611971578015610f1357905b8060051b6201940001518160051b602088010152600101818118610ef4575b50508201602001915050905081019050806020830152808201600062019c00518083528060051b60008260408111611971578015610f6c57905b8060051b62019c2001518160051b602088010152600101818118610f4d575b505082016020019150509050810190509050810190506064356201a4c45260206119836000396000516201a4e4526084356201a50452016201a460526201a4608051602082012090506201a4405261cb4051806101a0528060051b806101c08261cb6060045afa50505061f36051806129c0528060051b806129e08261f38060045afa50505062011b80516151e05262011ba051806152005260608102806152208262011bc060045afa5050506201a4405161ca205261102a6114e8565b60006040905b806201a460526201a420516201a460511061104a5761109f565b620193c0516040526201a46051620193e0518110156119715760051b6201940001516060526201a4605162019c00518110156119715760051b62019c200151608052611094611891565b600101818118611030575b50507fba199fb06e908b6eca45bc6e460f07d1888e4a0606361da80e679eac61d11103620193c0516201a460526064356201a4805260406201a460a1005b6308a92ad781186113d25761010436106119715760043560040160408135116119715780358060405260208201818160603750505060243560040160408135116119715780358060a05260208201818160c03750505060443560040160208135116119715780358061010052602082018035610120525050506064358060081c61197157610140526084358060a01c6119715761016052303318156111e2576007610180527f496e76616c6964000000000000000000000000000000000000000000000000006101a0526101805061018051806101a001601f826000031636823750506308c379a061014052602061016052601f19601f61018051011660440161015cfd5b610160516080306101a0526101a0516101e0528061020052806101e00160a0518082526020820181818360c060045afa5050508051806020830101601f82600003163682375050601f19601f825160200101169050810190508061022052806101e001610100518082526020820161012051815250508051806020830101601f82600003163682375050601f19601f82516020010116905081019050610140516101c0526101c051610240526003823b0359600182126119715781600382863c8181018381856101e060045afa5050828201816000f08015611971579050905090509050610180527f7144f66490771d357f3d6d385605288e1579754e5555f2e01114a2945f394e5b60a0806101a052806101a00160405180825260208201818183606060045afa5050508051806020830101601f82600003163682375050601f19601f82516020010116905081019050610180516101c052806101e052806101a00160a0518082526020820181818360c060045afa5050508051806020830101601f82600003163682375050601f19601f825160200101169050810190508061020052806101a001610100518082526020820161012051815250508051806020830101601f82600003163682375050601f19601f8251602001011690508101905061014051610220526101a0a1005b63a9a4a98381186113f157600436106119715760005460405260206040f35b634da6ecc9811861141057600436106119715760015460405260206040f35b6338d6172d811861143d576024361061197157600260043560205260005260406000205460405260206040f35b505b60006000fd5b6000601c610100527f19457468657265756d205369676e6564204d6573736167653a0a333200000000610120526101008051602082018361016001815181525050808301925050506060518161016001526020810190508061014052610140905080516020820120905060e05260e051610100526080516101205260a0516101405260c0516101605260206000608061010060015afa5060005160405114815250565b60403661ca4037600061520051610140811161197157801561163f57905b6060810261522001805161ca8052602081015161caa052604081015161cac0525061ca80511561161f5761ca40516101a0518110156119715760051b6101c0015160405261ca205160605261ca805160805261caa05160a05261cac05160c05261157161cae0611445565b61cae0516115df57601161cb00527f496e76616c6964205369676e617475726500000000000000000000000000000061cb205261cb005061cb00518061cb2001601f826000031636823750506308c379a061cac052602061cae052601f19601f61cb0051011660440161cadcfd5b61ca605161ca40516129c0518110156119715760051b6129e00151808201828110611971579050905061ca605263aaaaaaaa61ca60511061161f5761163f565b61ca40516001810181811061197157905061ca4052600101818118611506575b505063aaaaaaaa61ca605110156116b657601261ca80527f496e73756666696369656e7420506f776572000000000000000000000000000061caa05261ca805061ca80518061caa001601f826000031636823750506308c379a061ca4052602061ca6052601f19601f61ca8051011660440161ca5cfd5b565b63299018c26150a45260046080806150c452806150c40160006040518083528060051b600082610140811161197157801561170c57905b8060051b606001518160051b6020880101526001018181186116ef575b50508201602001915050905081019050806150e452806150c4016000612860518083528060051b600082610140811161197157801561176557905b8060051b61288001518160051b602088010152600101818118611747575b505082016020019150509050810190506150805161510452602061198360003960005161512452016150a0526150a0805160208201209050815250565b6323b872dd610104526004606051610124526080516101445260a05161016452606001610100526101005060206101c06101005161012060006040515af16117ef573d600060003e3d6000fd5b3d602081183d60201002186101a0526101a080518060c05260208201805160e05250505060c0511561188f5760e05160c05160200360031b1c61188f576013610100527f5472616e7366657246726f6d206661696c6564000000000000000000000000006101205261010050610100518061012001601f826000031636823750506308c379a060c052602060e052601f19601f61010051011660440160dcfd5b565b63a9059cbb60e4526004606051610104526080516101245260400160e05260e050602061018060e05161010060006040515af16118d3573d600060003e3d6000fd5b3d602081183d60201002186101605261016080518060a05260208201805160c05250505060a0511561196f5760c05160a05160200360031b1c61196f57601360e0527f5472616e7366657246726f6d206661696c6564000000000000000000000000006101005260e05060e0518061010001601f826000031636823750506308c379a060a052602060c052601f19601f60e051011660440160bcfd5b565b600080fda165767970657283000307000b3136363430383400000000000000000000000000000000000000000000000000

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

313636343038340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000058000000000000000000000000000000000000000000000000000000000000018240000000000000000000000000000000000000000000000000000000000000028000000000000000000000000092604a080524eff1c875ff13a1b88cbdd41df370000000000000000000000006dc59ee4bdfa2c791229004f29b08f783491a934000000000000000000000000deea5b069208e0ee37b630a3e7672fc50e8fe24a000000000000000000000000c47b85c7577260d995be7ab65728ae33b4cd26cd000000000000000000000000ade5f5efeae72102d998f6c496ea59731a70eeb0000000000000000000000000279fc7c0ebef3328d3899fe73464347a764c5f2c000000000000000000000000aac74d38c82c367b3da7482e3aecf6dd7a512ef200000000000000000000000043e218f96a567dc26c6e65fcabf1fde26af694440000000000000000000000005a7c9fc846b18944fd2b8f8ae7255db5af7b9c040000000000000000000000001ad90db98da083e117d5f62a1673fc0f3a5930ca00000000000000000000000063f55bc560e981d53e1f5bb3643e3a96d26fc6350000000000000000000000001dd71ee9e7b1cff10ccb7e12520999c2d4fb45e50000000000000000000000004a89f96fdff3c161937cfbc3e22d2e325612aaec0000000000000000000000001f6ef2784cbb2a5011d8cf12356fb5ee3eaef372000000000000000000000000443266026738061972012e62d5ecd9d98da8b6f4000000000000000000000000443520951d766456f2ac5578f3e7e4b56a7bcf63000000000000000000000000eb13a069d119558b6653cbc8c069dafb3d6758e70000000000000000000000007c3de83d90e8d2001a7e3f38e6a7058334cb291e0000000000000000000000007b5f4b6490ebc2dd03b717d7d26edc78451a88b4000000000000000000000000377d23948d41579f2c3ca40308e3bdd53f6da7b20000000000000000000000000daabb4ff60423eb1f14cc6731394e098ad51bcb000000000000000000000000cfbbf6341cf13a39ffcaf24b86de09489116783b000000000000000000000000179206cd9080a8ee77c2256a27050112da13b2f60000000000000000000000003a188de3d16ddee783990dded1b629e95c8242d900000000000000000000000031cbc8e1bc86d1ba0f5e77afc324d785c54ae3200000000000000000000000006bf4893a5a54191cf16e6337956aa4c99c793903000000000000000000000000827d61ccf62a78a9ac192cb4b47c51df7db4b1660000000000000000000000008b6cd0884e227e7ef90fc4c8b642d723109271c3000000000000000000000000837f0c0d5b50f5463e4dafcd7bae63207e2f63800000000000000000000000009314f0e1d09e1c541c1db02b622af9ca5f1ac9fe000000000000000000000000722e2b4107d3dc5e99cbb4919a1580ae70baab74000000000000000000000000fc0f1e32e0db02cd81de8f662a51e2c285d5228d000000000000000000000000eb784b37365c302c97c9ec8cb0933ce344e6de42000000000000000000000000ee21301af1d9562b5cbedf520077ea0a9bc9d535000000000000000000000000bbefe691d2c3bbb835ce2958b453ccd05bdb27a50000000000000000000000001829a4a33cc162d3d55ed79d77574005a084142b0000000000000000000000005cb3114baf54395da6c3665616bdf59e8dcb3b8a000000000000000000000000b5117420bd1726b6bfeced63602b287ab3dba219000000000000000000000000a49f65cf05dcce7c92621ed41cba9e4e09a5d618000000000000000000000000ecaf11bb88082f06a64d5fa3076a74df792e6afe0000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000001adfb7810000000000000000000000000000000000000000000000000000000011b5e025000000000000000000000000000000000000000000000000000000000f13ec7a000000000000000000000000000000000000000000000000000000000ed4979d000000000000000000000000000000000000000000000000000000000e7e486d000000000000000000000000000000000000000000000000000000000e320cc0000000000000000000000000000000000000000000000000000000000d54f7e2000000000000000000000000000000000000000000000000000000000d24f812000000000000000000000000000000000000000000000000000000000cf34102000000000000000000000000000000000000000000000000000000000cb4b767000000000000000000000000000000000000000000000000000000000b1b97e3000000000000000000000000000000000000000000000000000000000a7b900f000000000000000000000000000000000000000000000000000000000a2280350000000000000000000000000000000000000000000000000000000008c013aa000000000000000000000000000000000000000000000000000000000857d50a0000000000000000000000000000000000000000000000000000000006dbcaf00000000000000000000000000000000000000000000000000000000006b7220200000000000000000000000000000000000000000000000000000000069bed3a00000000000000000000000000000000000000000000000000000000068a49320000000000000000000000000000000000000000000000000000000004a5860000000000000000000000000000000000000000000000000000000000004b2034000000000000000000000000000000000000000000000000000000000041ba2200000000000000000000000000000000000000000000000000000000002a740d0000000000000000000000000000000000000000000000000000000000297c6b00000000000000000000000000000000000000000000000000000000002973ee000000000000000000000000000000000000000000000000000000000029734c00000000000000000000000000000000000000000000000000000000002952f30000000000000000000000000000000000000000000000000000000000293dac000000000000000000000000000000000000000000000000000000000028ccf0000000000000000000000000000000000000000000000000000000000028bf5c0000000000000000000000000000000000000000000000000000000000288aac0000000000000000000000000000000000000000000000000000000000272473000000000000000000000000000000000000000000000000000000000026e154000000000000000000000000000000000000000000000000000000000026d089000000000000000000000000000000000000000000000000000000000026180b0000000000000000000000000000000000000000000000000000000000133c3d000000000000000000000000000000000000000000000000000000000011cc81000000000000000000000000000000000000000000000000000000000011cc81000000000000000000000000000000000000000000000000000000000011cc730000000000000000000000000000000000000000000000000000000000119ef1

-----Decoded View---------------
Arg [0] : turnstone_id (bytes32): 0x3136363430383400000000000000000000000000000000000000000000000000
Arg [1] : valset (tuple): System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput]

-----Encoded View---------------
87 Constructor Arguments found :
Arg [0] : 3136363430383400000000000000000000000000000000000000000000000000
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000580
Arg [4] : 0000000000000000000000000000000000000000000000000000000000001824
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000028
Arg [6] : 000000000000000000000000092604a080524eff1c875ff13a1b88cbdd41df37
Arg [7] : 0000000000000000000000006dc59ee4bdfa2c791229004f29b08f783491a934
Arg [8] : 000000000000000000000000deea5b069208e0ee37b630a3e7672fc50e8fe24a
Arg [9] : 000000000000000000000000c47b85c7577260d995be7ab65728ae33b4cd26cd
Arg [10] : 000000000000000000000000ade5f5efeae72102d998f6c496ea59731a70eeb0
Arg [11] : 000000000000000000000000279fc7c0ebef3328d3899fe73464347a764c5f2c
Arg [12] : 000000000000000000000000aac74d38c82c367b3da7482e3aecf6dd7a512ef2
Arg [13] : 00000000000000000000000043e218f96a567dc26c6e65fcabf1fde26af69444
Arg [14] : 0000000000000000000000005a7c9fc846b18944fd2b8f8ae7255db5af7b9c04
Arg [15] : 0000000000000000000000001ad90db98da083e117d5f62a1673fc0f3a5930ca
Arg [16] : 00000000000000000000000063f55bc560e981d53e1f5bb3643e3a96d26fc635
Arg [17] : 0000000000000000000000001dd71ee9e7b1cff10ccb7e12520999c2d4fb45e5
Arg [18] : 0000000000000000000000004a89f96fdff3c161937cfbc3e22d2e325612aaec
Arg [19] : 0000000000000000000000001f6ef2784cbb2a5011d8cf12356fb5ee3eaef372
Arg [20] : 000000000000000000000000443266026738061972012e62d5ecd9d98da8b6f4
Arg [21] : 000000000000000000000000443520951d766456f2ac5578f3e7e4b56a7bcf63
Arg [22] : 000000000000000000000000eb13a069d119558b6653cbc8c069dafb3d6758e7
Arg [23] : 0000000000000000000000007c3de83d90e8d2001a7e3f38e6a7058334cb291e
Arg [24] : 0000000000000000000000007b5f4b6490ebc2dd03b717d7d26edc78451a88b4
Arg [25] : 000000000000000000000000377d23948d41579f2c3ca40308e3bdd53f6da7b2
Arg [26] : 0000000000000000000000000daabb4ff60423eb1f14cc6731394e098ad51bcb
Arg [27] : 000000000000000000000000cfbbf6341cf13a39ffcaf24b86de09489116783b
Arg [28] : 000000000000000000000000179206cd9080a8ee77c2256a27050112da13b2f6
Arg [29] : 0000000000000000000000003a188de3d16ddee783990dded1b629e95c8242d9
Arg [30] : 00000000000000000000000031cbc8e1bc86d1ba0f5e77afc324d785c54ae320
Arg [31] : 0000000000000000000000006bf4893a5a54191cf16e6337956aa4c99c793903
Arg [32] : 000000000000000000000000827d61ccf62a78a9ac192cb4b47c51df7db4b166
Arg [33] : 0000000000000000000000008b6cd0884e227e7ef90fc4c8b642d723109271c3
Arg [34] : 000000000000000000000000837f0c0d5b50f5463e4dafcd7bae63207e2f6380
Arg [35] : 0000000000000000000000009314f0e1d09e1c541c1db02b622af9ca5f1ac9fe
Arg [36] : 000000000000000000000000722e2b4107d3dc5e99cbb4919a1580ae70baab74
Arg [37] : 000000000000000000000000fc0f1e32e0db02cd81de8f662a51e2c285d5228d
Arg [38] : 000000000000000000000000eb784b37365c302c97c9ec8cb0933ce344e6de42
Arg [39] : 000000000000000000000000ee21301af1d9562b5cbedf520077ea0a9bc9d535
Arg [40] : 000000000000000000000000bbefe691d2c3bbb835ce2958b453ccd05bdb27a5
Arg [41] : 0000000000000000000000001829a4a33cc162d3d55ed79d77574005a084142b
Arg [42] : 0000000000000000000000005cb3114baf54395da6c3665616bdf59e8dcb3b8a
Arg [43] : 000000000000000000000000b5117420bd1726b6bfeced63602b287ab3dba219
Arg [44] : 000000000000000000000000a49f65cf05dcce7c92621ed41cba9e4e09a5d618
Arg [45] : 000000000000000000000000ecaf11bb88082f06a64d5fa3076a74df792e6afe
Arg [46] : 0000000000000000000000000000000000000000000000000000000000000028
Arg [47] : 000000000000000000000000000000000000000000000000000000001adfb781
Arg [48] : 0000000000000000000000000000000000000000000000000000000011b5e025
Arg [49] : 000000000000000000000000000000000000000000000000000000000f13ec7a
Arg [50] : 000000000000000000000000000000000000000000000000000000000ed4979d
Arg [51] : 000000000000000000000000000000000000000000000000000000000e7e486d
Arg [52] : 000000000000000000000000000000000000000000000000000000000e320cc0
Arg [53] : 000000000000000000000000000000000000000000000000000000000d54f7e2
Arg [54] : 000000000000000000000000000000000000000000000000000000000d24f812
Arg [55] : 000000000000000000000000000000000000000000000000000000000cf34102
Arg [56] : 000000000000000000000000000000000000000000000000000000000cb4b767
Arg [57] : 000000000000000000000000000000000000000000000000000000000b1b97e3
Arg [58] : 000000000000000000000000000000000000000000000000000000000a7b900f
Arg [59] : 000000000000000000000000000000000000000000000000000000000a228035
Arg [60] : 0000000000000000000000000000000000000000000000000000000008c013aa
Arg [61] : 000000000000000000000000000000000000000000000000000000000857d50a
Arg [62] : 0000000000000000000000000000000000000000000000000000000006dbcaf0
Arg [63] : 0000000000000000000000000000000000000000000000000000000006b72202
Arg [64] : 00000000000000000000000000000000000000000000000000000000069bed3a
Arg [65] : 00000000000000000000000000000000000000000000000000000000068a4932
Arg [66] : 0000000000000000000000000000000000000000000000000000000004a58600
Arg [67] : 00000000000000000000000000000000000000000000000000000000004b2034
Arg [68] : 000000000000000000000000000000000000000000000000000000000041ba22
Arg [69] : 00000000000000000000000000000000000000000000000000000000002a740d
Arg [70] : 0000000000000000000000000000000000000000000000000000000000297c6b
Arg [71] : 00000000000000000000000000000000000000000000000000000000002973ee
Arg [72] : 000000000000000000000000000000000000000000000000000000000029734c
Arg [73] : 00000000000000000000000000000000000000000000000000000000002952f3
Arg [74] : 0000000000000000000000000000000000000000000000000000000000293dac
Arg [75] : 000000000000000000000000000000000000000000000000000000000028ccf0
Arg [76] : 000000000000000000000000000000000000000000000000000000000028bf5c
Arg [77] : 0000000000000000000000000000000000000000000000000000000000288aac
Arg [78] : 0000000000000000000000000000000000000000000000000000000000272473
Arg [79] : 000000000000000000000000000000000000000000000000000000000026e154
Arg [80] : 000000000000000000000000000000000000000000000000000000000026d089
Arg [81] : 000000000000000000000000000000000000000000000000000000000026180b
Arg [82] : 0000000000000000000000000000000000000000000000000000000000133c3d
Arg [83] : 000000000000000000000000000000000000000000000000000000000011cc81
Arg [84] : 000000000000000000000000000000000000000000000000000000000011cc81
Arg [85] : 000000000000000000000000000000000000000000000000000000000011cc73
Arg [86] : 0000000000000000000000000000000000000000000000000000000000119ef1


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  ]

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.