ETH Price: $2,561.22 (-1.91%)

Contract

0x652Bf77d9F1BDA15B86894a185E8C22d9c722EB4
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Update_valset201616832024-06-24 12:57:1199 days ago1719233831IN
0x652Bf77d...d9c722EB4
0 ETH0.000812064.50954096
Update_valset201616382024-06-24 12:48:1199 days ago1719233291IN
0x652Bf77d...d9c722EB4
0 ETH0.001013185.59537211
Update_valset201613722024-06-24 11:54:2399 days ago1719230063IN
0x652Bf77d...d9c722EB4
0 ETH0.00050512.86781224
Update_valset201605292024-06-24 9:04:2399 days ago1719219863IN
0x652Bf77d...d9c722EB4
0 ETH0.000984315.15133864
Update_valset201604592024-06-24 8:50:1199 days ago1719219011IN
0x652Bf77d...d9c722EB4
0 ETH0.000908234.98322465
Update_valset201603442024-06-24 8:26:5999 days ago1719217619IN
0x652Bf77d...d9c722EB4
0 ETH0.000903694.96787077
Update_valset201603332024-06-24 8:24:4799 days ago1719217487IN
0x652Bf77d...d9c722EB4
0 ETH0.001114725.96200711
Update_valset201603242024-06-24 8:22:5999 days ago1719217379IN
0x652Bf77d...d9c722EB4
0 ETH0.00099575.5726687
Update_valset201603162024-06-24 8:21:2399 days ago1719217283IN
0x652Bf77d...d9c722EB4
0 ETH0.001064016.0885525
Update_valset201603112024-06-24 8:20:2399 days ago1719217223IN
0x652Bf77d...d9c722EB4
0 ETH0.00103045.82813184
Update_valset201603052024-06-24 8:19:1199 days ago1719217151IN
0x652Bf77d...d9c722EB4
0 ETH0.001137936.3970246
Update_valset201602952024-06-24 8:17:1199 days ago1719217031IN
0x652Bf77d...d9c722EB4
0 ETH0.001085926.07675184
Update_valset201598652024-06-24 6:50:3599 days ago1719211835IN
0x652Bf77d...d9c722EB4
0 ETH0.000345141.94444186
Update_valset201597852024-06-24 6:34:3599 days ago1719210875IN
0x652Bf77d...d9c722EB4
0 ETH0.000301761.77342472
Update_valset201597762024-06-24 6:32:4799 days ago1719210767IN
0x652Bf77d...d9c722EB4
0 ETH0.000337761.93117654
Update_valset201593082024-06-24 4:58:4799 days ago1719205127IN
0x652Bf77d...d9c722EB4
0 ETH0.000503642.67217122
Update_valset201584322024-06-24 2:01:3599 days ago1719194495IN
0x652Bf77d...d9c722EB4
0 ETH0.000307831.71512841
Update_valset201566142024-06-23 19:55:5999 days ago1719172559IN
0x652Bf77d...d9c722EB4
0 ETH0.000347711.96606346
Update_valset201564362024-06-23 19:20:2399 days ago1719170423IN
0x652Bf77d...d9c722EB4
0 ETH0.000370922.08535639
Update_valset201558582024-06-23 17:23:4799 days ago1719163427IN
0x652Bf77d...d9c722EB4
0 ETH0.000620723.52802061
Update_valset201552302024-06-23 15:17:3599 days ago1719155855IN
0x652Bf77d...d9c722EB4
0 ETH0.000793554.35895579
Update_valset201549482024-06-23 14:20:47100 days ago1719152447IN
0x652Bf77d...d9c722EB4
0 ETH0.000593933.20048595
Update_valset201543732024-06-23 12:25:23100 days ago1719145523IN
0x652Bf77d...d9c722EB4
0 ETH0.000369562.05638352
Update_valset201526132024-06-23 6:28:35100 days ago1719124115IN
0x652Bf77d...d9c722EB4
0 ETH0.000347011.99547308
Update_valset201501582024-06-22 22:15:59100 days ago1719094559IN
0x652Bf77d...d9c722EB4
0 ETH0.000280961.6512654
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0xB01cC20F...df31f1537
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
Compass-EVM

Compiler Version
vyper:0.3.10

Optimization Enabled:
N/A

Other Settings:
Apache-2.0 license

Contract Source Code (Vyper language format)

#pragma version 0.3.10
#pragma optimize gas
#pragma evm-version paris
"""
@title Compass-EVM
@author Volume.Finance
"""

MAX_VALIDATORS: constant(uint256) = 200
MAX_PAYLOAD: constant(uint256) = 10240
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

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_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: String[64]
    amount: uint256
    event_id: uint256

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

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

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

# compass_id: unique identifier for compass instance
# valset: initial validator set
@external
def __init__(_compass_id: bytes32, _event_id: uint256, valset: Valset):
    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)
    assert cumulative_power >= POWER_THRESHOLD, "Insufficient 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
    log ValsetUpdated(new_checkpoint, valset.valset_id, _event_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 = unsafe_add(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, 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)")))

# 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 = unsafe_add(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
    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, 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, compass_id, deadline)
    args_hash: bytes32 = keccak256(_abi_encode(args, message_id, compass_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)
    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)

@external
def send_token_to_paloma(token: address, receiver: String[64], amount: uint256):
    _balance: uint256 = ERC20(token).balanceOf(self)
    assert ERC20(token).transferFrom(msg.sender, self, amount, default_return_value=True), "TF fail"
    _balance = ERC20(token).balanceOf(self) - _balance
    assert _balance > 0, "Zero Transfer"
    event_id: uint256 = unsafe_add(self.last_event_id, 1)
    self.last_event_id = event_id
    log SendToPalomaEvent(token, msg.sender, receiver, amount, event_id)

@external
def submit_batch(consensus: Consensus, token: address, args: TokenSendArgs, batch_id: uint256, deadline: uint256):
    assert block.timestamp <= deadline, "Timeout"
    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
    assert self.last_checkpoint == self.make_checkpoint(consensus.valset), "Incorrect Checkpoint"
    # signing data is keccak256 hash of abi_encoded batch_call(args, batch_id, compass_id, deadline)
    args_hash: bytes32 = keccak256(_abi_encode(token, args, batch_id, compass_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
        assert ERC20(token).transfer(args.receiver[i], args.amount[i], default_return_value=True), "Tr fail"
    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, 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)

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":"string","indexed":false},{"name":"amount","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":"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"},{"stateMutability":"nonpayable","type":"constructor","inputs":[{"name":"_compass_id","type":"bytes32"},{"name":"_event_id","type":"uint256"},{"name":"valset","type":"tuple","components":[{"name":"validators","type":"address[]"},{"name":"powers","type":"uint256[]"},{"name":"valset_id","type":"uint256"}]}],"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"}]}],"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":"batch_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":"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_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"}]}]

Deployed Bytecode

0x60003560e01c6002600c820660011b61186d01601e39600051565b6384d38f2c8118611510573461186857602061188560403960206040f3611510565b63a9a4a983811861005857346118685760005460405260206040f35b631029ae6f8118611510576101e43610341761186857600435600401803581018035810160c881351161186857803560008160c881116118685780156100c057905b8060051b6020850101358060a01c611868578160051b618060015260010181811861009a575b5050806180405250506020810135810160c881351161186857803560208160051b01808361996037505050604081013561b28052506020810135810160c881351161186857803560206060820201808361b2a0375050505060243560040180358060a01c6118685761fdc05260208101358101612800813511611868576020813501808261fde0375050506064354211156101c457600762012600527f54696d656f757400000000000000000000000000000000000000000000000000620126205262012600506201260051806201262001601f826000031636823750506308c379a0620125c0526020620125e052601f19601f62012600510116604401620125dcfd5b60046044356020526000526040600020541561024957600f62012600527f55736564204d6573736167655f49440000000000000000000000000000000000620126205262012600506201260051806201262001601f826000031636823750506308c379a0620125c0526020620125e052601f19601f62012600510116604401620125dcfd5b60016004604435602052600052604060002055613260604061326061804060045afa5061027862012600611786565b620126005160005418156102f557601462012620527f496e636f727265637420436865636b706f696e74000000000000000000000000620126405262012620506201262051806201264001601f826000031636823750506308c379a0620125e05260206201260052601f19601f62012620510116604401620125fcfd5b63980721b2620126245260046080806201264452806201264401604061fdc0518252806020830152808201602061fde0510180828261fde060045afa50508051806020830101601f82600003163682375050601f19601f82516020010116905081019050905081019050604435620126645260206118856201268439606435620126a452016201262052620126208051602082012090506201260052617d806101a0617d8061804060045afa506201260051617f20526103b36115c1565b61fdc0515a61fde06000600082516020840160008787f19050905090506103df573d600060003e3d6000fd5b600160025401620126205262012620516002557f0594b174e11e17c2cb4d0d303c2125060bea4f4da113a4e79edce87465592d00608061fdc0516201264052806201266052806201264001602061fde0510180828261fde060045afa50508051806020830101601f82600003163682375050601f19601f8251602001011690508101905060443562012680526201262051620126a05262012640a100611510565b634da6ecc9811861049c57346118685760015460405260206040f35b6338d6172d81186115105760243610341761186857600460043560205260005260406000205460405260206040f3611510565b6319429b8d811861151057346118685760025460405260206040f3611510565b63fa822567811861052c57602436103417611868576004358060a01c61186857604052600360405160205260005260406000205460605260206060f35b63eadf4af78118611510576101e43610341761186857600435600401803581018035810160c881351161186857803560008160c8811161186857801561059457905b8060051b6020850101358060a01c611868578160051b618060015260010181811861056e575b5050806180405250506020810135810160c881351161186857803560208160051b01808361996037505050604081013561b28052506020810135810160c881351161186857803560206060820201808361b2a037505050506024356004018035810160c881351161186857803560008160c8811161186857801561063a57905b8060051b6020850101358060a01c611868578160051b61fde00152600101818118610614575b50508061fdc05250506020810135810160c881351161186857803560208160051b018083620116e037505050604081013562013000525061b280516201300051116106ee57601162013020527f496e76616c69642056616c736574204944000000000000000000000000000000620130405262013020506201302051806201304001601f826000031636823750506308c379a062012fe05260206201300052601f19601f6201302051011660440162012ffcfd5b6040366201302037600061fdc05160c8811161186857801561077857905b8060051b61fde00151620130605262013020516201304051620116e0518110156118685760051b6201170001518082018281106118685790509050620130205263aaaaaaaa62013020511061076057610778565b6001620130405101620130405260010181811861070c575b505063aaaaaaaa620130205110156107f957601262013060527f496e73756666696369656e7420506f7765720000000000000000000000000000620130805262013060506201306051806201308001601f826000031636823750506308c379a0620130205260206201304052601f19601f620130605101166044016201303cfd5b613260604061326061804060045afa5061081562013060611786565b6201306051600054181561089257601462013080527f496e636f727265637420436865636b706f696e74000000000000000000000000620130a0526201308050620130805180620130a001601f826000031636823750506308c379a0620130405260206201306052601f19601f620130805101166044016201305cfd5b613260604061326061fdc060045afa506108ae62013080611786565b62013080516201306052617d806101a0617d8061804060045afa506201306051617f20526108da6115c1565b62013060516000556201300051600155600160025401620130805262013080516002557fb7ca5e46e360950244488bf096bf742a1f63183cf1ee5b3b0c53045b6247bf5b6201306051620130a0526201300051620130c0526201308051620130e0526060620130a0a100611510565b63b39dcd5e811861151057608436103417611868576004358060a01c611868576040526024356004016040813511611868576020813501808260603750506040516370a0823160e0523061010052602060e0602460fc845afa6109b1573d600060003e3d6000fd5b60203d106118685760e090505160c0526040516323b872dd60e0523361010052306101205260443561014052602060e0606460fc6000855af16109f9573d600060003e3d6000fd5b3d610a1057803b1561186857600161016052610a28565b60203d106118685760e0518060011c61186857610160525b610160905051610a98576007610180527f5446206661696c000000000000000000000000000000000000000000000000006101a0526101805061018051806101a001601f826000031636823750506308c379a061014052602061016052601f19601f61018051011660440161015cfd5b6040516370a0823160e0523061010052602060e0602460fc845afa610ac2573d600060003e3d6000fd5b60203d106118685760e090505160c051808203828111611868579050905060c05260c051610b4957600d60e0527f5a65726f205472616e73666572000000000000000000000000000000000000006101005260e05060e0518061010001601f826000031636823750506308c379a060a052602060c052601f19601f60e051011660440160bcfd5b60016002540160e05260e0516002557ffe15510abe06d325676e9b14cbd5ae05ee35422f1c0d5bfa734f3ccdcc23635c60a060405161010052336101205280610140528061010001602060605101808282606060045afa50508051806020830101601f82600003163682375050601f19601f825160200101169050810190506044356101605260e05161018052610100a100611510565b630ffc0bdb811861122a576102243610341761186857600435600401803581018035810160c881351161186857803560008160c88111611868578015610c4857905b8060051b6020850101358060a01c611868578160051b6180600152600101818118610c22575b5050806180405250506020810135810160c881351161186857803560208160051b01808361996037505050604081013561b28052506020810135810160c881351161186857803560206060820201808361b2a037505050506024358060a01c6118685761fdc05260443560040180358101604081351161186857803560008160408111611868578015610cfd57905b8060051b6020850101358060a01c611868578160051b61fe000152600101818118610cd7575b50508061fde052505060208101358101604081351161186857803560208160051b018083620106003750505050608435421115610da357600762010e20527f54696d656f75740000000000000000000000000000000000000000000000000062010e405262010e205062010e20518062010e4001601f826000031636823750506308c379a062010de052602062010e0052601f19601f62010e2051011660440162010dfcfd5b606435600361fdc05160205260005260406000205410610e2c57600e62010e20527f57726f6e6720626174636820696400000000000000000000000000000000000062010e405262010e205062010e20518062010e4001601f826000031636823750506308c379a062010de052602062010e0052601f19601f62010e2051011660440162010dfcfd5b61fde05162010e2052620106005162010e20511815610eb457601062010e40527f556e6d61746368656420506172616d730000000000000000000000000000000062010e605262010e405062010e40518062010e6001601f826000031636823750506308c379a062010e0052602062010e2052601f19601f62010e4051011660440162010e1cfd5b613260604061326061804060045afa50610ed062010e40611786565b62010e40516000541815610f4d57601462010e60527f496e636f727265637420436865636b706f696e7400000000000000000000000062010e805262010e605062010e60518062010e8001601f826000031636823750506308c379a062010e2052602062010e4052601f19601f62010e6051011660440162010e3cfd5b63ecaa10b962010e6452600460a061fdc05162010e84528062010ea4528062010e84016040808252808201600061fde0518083528060051b60008260408111611868578015610fb657905b8060051b61fe0001518160051b602088010152600101818118610f98575b50508201602001915050905081019050806020830152808201600062010600518083528060051b6000826040811161186857801561100f57905b8060051b6201062001518160051b602088010152600101818118610ff0575b5050820160200191505090508101905090508101905060643562010ec452602061188562010ee43960843562010f04520162010e605262010e6080516020820120905062010e4052617d806101a0617d8061804060045afa5062010e4051617f20526110796115c1565b60006040905b8062010e605262010e205162010e605110611099576111bb565b61fdc05163a9059cbb62010e805262010e605161fde0518110156118685760051b61fe00015162010ea05262010e605162010600518110156118685760051b62010620015162010ec052602062010e80604462010e9c6000855af1611103573d600060003e3d6000fd5b3d61111b57803b1561186857600162010ee052611136565b60203d106118685762010e80518060011c6118685762010ee0525b62010ee09050516111b057600762010f00527f5472206661696c0000000000000000000000000000000000000000000000000062010f205262010f005062010f00518062010f2001601f826000031636823750506308c379a062010ec052602062010ee052601f19601f62010f0051011660440162010edcfd5b60010181811861107f575b505060016002540162010e605262010e6051600255606435600361fdc0516020526000526040600020557fe33c10972f01a4d59d918f9c60929137db01805dd24267065165bdfc75b13af061fdc05162010e805260643562010ea05262010e605162010ec052606062010e80a1005b6308a92ad781186115105761010436103417611868576004356004016040813511611868576020813501808260403750506024356004016040813511611868576020813501808260a0375050604435600401602081351161186857602081350180826101003750506064358060081c61186857610140526084358060a01c61186857610160523033181561131e576007610180527f496e76616c6964000000000000000000000000000000000000000000000000006101a0526101805061018051806101a001601f826000031636823750506308c379a061014052602061016052601f19601f61018051011660440161015cfd5b610160516080306101a0526101a0516101e0528061020052806101e001602060a0510180828260a060045afa50508051806020830101601f82600003163682375050601f19601f825160200101169050810190508061022052806101e0016101005181526101205160208201528051806020830101601f82600003163682375050601f19601f82516020010116905081019050610140516101c0526101c051610240526003823b0359600182126118685781600382863c8181018381856101e060045afa5050828201816000f08015611868579050905090509050610180526001600254016101a0526101a0516002557f82fe3a4fa49c6382d0c085746698ddbbafe6c2bf61285b19410644b5b26287c760c0806101c052806101c001602060405101808282604060045afa50508051806020830101601f82600003163682375050601f19601f82516020010116905081019050610180516101e0528061020052806101c001602060a0510180828260a060045afa50508051806020830101601f82600003163682375050601f19601f825160200101169050810190508061022052806101c0016101005181526101205160208201528051806020830101601f82600003163682375050601f19601f8251602001011690508101905061014051610240526101a051610260526101c0a1005b60006000fd5b6000601c610100527f19457468657265756d205369676e6564204d6573736167653a0a333200000000610120526101008051602082018361016001815181525050808301925050506060518161016001526020810190508061014052610140905080516020820120905060e05260006101805260e051610100526080516101205260a0516101405260c051610160526020610180608061010060015afa506101805160405114815250565b604036617f403760006134005160c8811161186857801561170d57905b60608102613420018051617f80526020810151617fa0526040810151617fc05250617f8051156116f757617f40516101a0518110156118685760051b6101c00151604052617f2051606052617f8051608052617fa05160a052617fc05160c052611649617fe0611516565b617fe0516116b7576011618000527f496e76616c6964205369676e61747572650000000000000000000000000000006180205261800050618000518061802001601f826000031636823750506308c379a0617fc0526020617fe052601f19601f618000510116604401617fdcfd5b617f6051617f4051611ac0518110156118685760051b611ae001518082018281106118685790509050617f605263aaaaaaaa617f6051106116f75761170d565b6001617f405101617f40526001018181186115de575b505063aaaaaaaa617f60511015611784576012617f80527f496e73756666696369656e7420506f7765720000000000000000000000000000617fa052617f8050617f805180617fa001601f826000031636823750506308c379a0617f40526020617f6052601f19601f617f80510116604401617f5cfd5b565b63299018c26132a45260046080806132c452806132c40160006040518083528060051b60008260c881116118685780156117d957905b8060051b606001518160051b6020880101526001018181186117bc575b50508201602001915050905081019050806132e452806132c4016000611960518083528060051b60008260c8811161186857801561183157905b8060051b61198001518160051b602088010152600101818118611813575b505082016020019150509050810190506132805161330452602061188561332439016132a0526132a0805160208201209050815250565b600080fd151015100949003c15100480151004ef001a04cf15100be03135383431343030000000000000000000000000000000000000000000000000

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.