ETH Price: $3,418.22 (+2.95%)

Contract

0xa00CF3504FfaCff301E4973e21B44C052d087157
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Submit_logic_cal...185883062023-11-17 1:25:11372 days ago1700184311IN
0xa00CF350...52d087157
0 ETH0.0062194822.24956797
Submit_logic_cal...185883062023-11-17 1:25:11372 days ago1700184311IN
0xa00CF350...52d087157
0 ETH0.0062170822.24956797
Submit_logic_cal...185883062023-11-17 1:25:11372 days ago1700184311IN
0xa00CF350...52d087157
0 ETH0.0062176122.24956797
Submit_logic_cal...185883062023-11-17 1:25:11372 days ago1700184311IN
0xa00CF350...52d087157
0 ETH0.0165790822.24956797
Update_valset185883022023-11-17 1:24:23372 days ago1700184263IN
0xa00CF350...52d087157
0 ETH0.0042066420.59083839
Submit_logic_cal...185743302023-11-15 2:30:59374 days ago1700015459IN
0xa00CF350...52d087157
0 ETH0.0092318933.71925343
Submit_logic_cal...185743302023-11-15 2:30:59374 days ago1700015459IN
0xa00CF350...52d087157
0 ETH0.0153323433.71925343
Update_valset185743292023-11-15 2:30:47374 days ago1700015447IN
0xa00CF350...52d087157
0 ETH0.0071584233.26202943
Submit_logic_cal...185667802023-11-14 1:12:59375 days ago1699924379IN
0xa00CF350...52d087157
0 ETH0.0112434738.87112409
Submit_logic_cal...185667802023-11-14 1:12:59375 days ago1699924379IN
0xa00CF350...52d087157
0 ETH0.0112406738.87112409
Submit_logic_cal...185667802023-11-14 1:12:59375 days ago1699924379IN
0xa00CF350...52d087157
0 ETH0.0174836438.87112409
Update_valset185667772023-11-14 1:12:23375 days ago1699924343IN
0xa00CF350...52d087157
0 ETH0.0089181240.40929399
Update_valset185658792023-11-13 22:11:47375 days ago1699913507IN
0xa00CF350...52d087157
0 ETH0.0103767447.80611762
Update_valset185658712023-11-13 22:10:11375 days ago1699913411IN
0xa00CF350...52d087157
0 ETH0.0102780746.02193544
Update_valset185651252023-11-13 19:40:11376 days ago1699904411IN
0xa00CF350...52d087157
0 ETH0.0110733850.02931103
Update_valset185651192023-11-13 19:38:59376 days ago1699904339IN
0xa00CF350...52d087157
0 ETH0.0068892248.85525677
Update_valset185651192023-11-13 19:38:59376 days ago1699904339IN
0xa00CF350...52d087157
0 ETH0.0107084348.85525677
Update_valset185650042023-11-13 19:15:59376 days ago1699902959IN
0xa00CF350...52d087157
0 ETH0.0108745748.29346664
Submit_logic_cal...185645472023-11-13 17:43:35376 days ago1699897415IN
0xa00CF350...52d087157
0 ETH0.073111759.51705601
Submit_logic_cal...185644962023-11-13 17:33:23376 days ago1699896803IN
0xa00CF350...52d087157
0 ETH0.0300039265.38754628
Update_valset185643422023-11-13 17:02:35376 days ago1699894955IN
0xa00CF350...52d087157
0 ETH0.02592022117.91888602
Update_valset185642522023-11-13 16:44:35376 days ago1699893875IN
0xa00CF350...52d087157
0 ETH0.021221297.60914577
Update_valset185641442023-11-13 16:22:59376 days ago1699892579IN
0xa00CF350...52d087157
0 ETH0.04358121196.14922594
Update_valset185640242023-11-13 15:58:47376 days ago1699891127IN
0xa00CF350...52d087157
0 ETH0.0129505460.04572467
Update_valset185640172023-11-13 15:57:23376 days ago1699891043IN
0xa00CF350...52d087157
0 ETH0.0133819560.07207904
View all transactions

Latest 1 internal transaction

Advanced mode:
Parent Transaction Hash Block From To
182137152023-09-25 15:33:11425 days ago1695655991
0xa00CF350...52d087157
 Contract Creation0 ETH
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0x4473eA62...1931C09C1
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.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.
COMPASS_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])

# compass_id: unique identifier for compass instance
# valset: initial validator set
@external
def __init__(compass_id: bytes32, 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 += 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
    log ValsetUpdated(new_checkpoint, valset.valset_id)

@external
@pure
def compass_id() -> bytes32:
    return COMPASS_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, 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 += 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, 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)
    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) - _balance
    assert _balance > 0, "Zero Transfer"
    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), "Unmatched Params"
    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(token, args, message_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
        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":"compass_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":"compass_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"}]}]

Deployed Bytecode

0x6003361161000c57611514565b60003560e01c34611a46576384d38f2c811861003e5760043610611a46576020611a5860003960005160405260206040f35b63eadf4af78118610518576101e43610611a46576004356004018035810180358101610140813511611a465780358061cb40526000816101408111611a465780156100ab57905b8060051b6020850101358060a01c611a46578160051b61cb600152600101818118610085575b5050505060208101358101610140813511611a465780358061f36052602082018160051b808261f3803750505050604081013562011b80525060208101358101610140813511611a465780358062011ba0526020820160608202808262011bc037505050505060243560040180358101610140813511611a4657803580620193c0526000816101408111611a4657801561016857905b8060051b6020850101358060a01c611a46578160051b620193e00152600101818118610141575b5050505060208101358101610140813511611a46578035806201bbe052602082018160051b80826201bc00375050505060408101356201e400525062011b80516201e40051116102215760116201e420527f496e76616c69642056616c7365742049440000000000000000000000000000006201e440526201e420506201e42051806201e44001601f826000031636823750506308c379a06201e3e05260206201e40052601f19601f6201e4205101166044016201e3fcfd5b6040366201e420376000620193c0516101408111611a465780156102b857905b8060051b620193e001516201e460526201e420516201e440516201bbe051811015611a465760051b6201bc000151808201828110611a4657905090506201e4205263aaaaaaaa6201e4205110610296576102b8565b6201e4405160018101818110611a465790506201e44052600101818118610241575b505063aaaaaaaa6201e4205110156103395760126201e460527f496e73756666696369656e7420506f77657200000000000000000000000000006201e480526201e460506201e46051806201e48001601f826000031636823750506308c379a06201e4205260206201e44052601f19601f6201e4605101166044016201e43cfd5b61cb4051806040528060051b8060608261cb6060045afa50505061f3605180612860528060051b806128808261f38060045afa50505062011b8051615080526103846201e46061178d565b6201e4605160005418156104015760146201e480527f496e636f727265637420436865636b706f696e740000000000000000000000006201e4a0526201e480506201e48051806201e4a001601f826000031636823750506308c379a06201e4405260206201e46052601f19601f6201e4805101166044016201e45cfd5b620193c051806040528060051b80606082620193e060045afa5050506201bbe05180612860528060051b80612880826201bc0060045afa5050506201e40051615080526104506201e48061178d565b6201e480516201e4605261cb4051806101a0528060051b806101c08261cb6060045afa50505061f36051806129c0528060051b806129e08261f38060045afa50505062011b80516151e05262011ba051806152005260608102806152208262011bc060045afa5050506201e4605161ca20526104ca6115bd565b6201e460516000556201e400516001557f09d40458cf931745f8d532ef13fa9c74bfb7fe0edcee88e0a677b0cbef88f0f96201e460516201e480526201e400516201e4a05260406201e480a1005b631029ae6f81186109cb576101e43610611a46576004356004018035810180358101610140813511611a465780358061cb40526000816101408111611a4657801561058557905b8060051b6020850101358060a01c611a46578160051b61cb60015260010181811861055f575b5050505060208101358101610140813511611a465780358061f36052602082018160051b808261f3803750505050604081013562011b80525060208101358101610140813511611a465780358062011ba0526020820160608202808262011bc037505050505060243560040180358060a01c611a4657620193c05260208101358101615000813511611a4657803580620193e0526020820181816201940037505050506064354211156106a15760076201e400527f54696d656f7574000000000000000000000000000000000000000000000000006201e420526201e400506201e40051806201e42001601f826000031636823750506308c379a06201e3c05260206201e3e052601f19601f6201e4005101166044016201e3dcfd5b60026044356020526000526040600020541561072657600f6201e400527f55736564204d6573736167655f494400000000000000000000000000000000006201e420526201e400506201e40051806201e42001601f826000031636823750506308c379a06201e3c05260206201e3e052601f19601f6201e4005101166044016201e3dcfd5b6001600260443560205260005260406000205561cb4051806040528060051b8060608261cb6060045afa50505061f3605180612860528060051b806128808261f38060045afa50505062011b8051615080526107846201e40061178d565b6201e4005160005418156108015760146201e420527f496e636f727265637420436865636b706f696e740000000000000000000000006201e440526201e420506201e42051806201e44001601f826000031636823750506308c379a06201e3e05260206201e40052601f19601f6201e4205101166044016201e3fcfd5b63980721b26201e4245260046080806201e44452806201e444016040620193c0518252806020830152808201620193e051808252602082018181836201940060045afa5050508051806020830101601f82600003163682375050601f19601f825160200101169050810190509050810190506044356201e464526020611a586000396000516201e484526064356201e4a452016201e420526201e4208051602082012090506201e4005261cb4051806101a0528060051b806101c08261cb6060045afa50505061f36051806129c0528060051b806129e08261f38060045afa50505062011b80516151e05262011ba051806152005260608102806152208262011bc060045afa5050506201e4005161ca205261091b6115bd565b620193e0600060008251602084016000620193c0515af19050610943573d600060003e3d6000fd5b7f0d2bd340033bb64fd086788e6685b480a9bf10b98d63e9b8073eb5d0bd6c6ee96060620193c0516201e42052806201e44052806201e42001620193e051808252602082018181836201940060045afa5050508051806020830101601f82600003163682375050601f19601f825160200101169050810190506044356201e460526201e420a1005b63b39dcd5e8118610bb25760843610611a46576004358060a01c611a46576101e0526024356004016040813511611a465780358061020052602082018181610220375050506101e0516370a0823161028052306102a0526020610280602461029c845afa610a3e573d600060003e3d6000fd5b60203d10611a4657610280905051610260526101e051604052336060523060805260443560a052610a6d611877565b6101e0516370a0823161028052306102a0526020610280602461029c845afa610a9b573d600060003e3d6000fd5b60203d10611a465761028090505161026051808203828111611a4657905090506102605261026051610b2d57600d610280527f5a65726f205472616e73666572000000000000000000000000000000000000006102a0526102805061028051806102a001601f826000031636823750506308c379a061024052602061026052601f19601f61028051011660440161025cfd5b7f75a16dbdc936366f3b5b1a7aaabc5d7b28dcf94ce2eb5b3efbe0bce0da7ee66960806101e05161028052336102a052806102c0528061028001610200518082526020820181818361022060045afa5050508051806020830101601f82600003163682375050601f19601f825160200101169050810190506044356102e052610280a1005b630ffc0bdb81186111b2576102243610611a46576004356004018035810180358101610140813511611a465780358061cb40526000816101408111611a46578015610c1f57905b8060051b6020850101358060a01c611a46578160051b61cb600152600101818118610bf9575b5050505060208101358101610140813511611a465780358061f36052602082018160051b808261f3803750505050604081013562011b80525060208101358101610140813511611a465780358062011ba0526020820160608202808262011bc03750505050506024358060a01c611a4657620193c052604435600401803581016040813511611a4657803580620193e05260008160408111611a46578015610cea57905b8060051b6020850101358060a01c611a46578160051b620194000152600101818118610cc3575b50505050602081013581016040813511611a465780358062019c0052602082018160051b808262019c20375050505050608435421115610d935760076201a420527f54696d656f7574000000000000000000000000000000000000000000000000006201a440526201a420506201a42051806201a44001601f826000031636823750506308c379a06201a3e05260206201a40052601f19601f6201a4205101166044016201a3fcfd5b600260643560205260005260406000205415610e1857600f6201a420527f55736564204d6573736167655f494400000000000000000000000000000000006201a440526201a420506201a42051806201a44001601f826000031636823750506308c379a06201a3e05260206201a40052601f19601f6201a4205101166044016201a3fcfd5b620193e0516201a4205262019c00516201a420511815610ea15760106201a440527f556e6d61746368656420506172616d73000000000000000000000000000000006201a460526201a440506201a44051806201a46001601f826000031636823750506308c379a06201a4005260206201a42052601f19601f6201a4405101166044016201a41cfd5b6001600260643560205260005260406000205561cb4051806040528060051b8060608261cb6060045afa50505061f3605180612860528060051b806128808261f38060045afa50505062011b805161508052610eff6201a44061178d565b6201a440516000541815610f7c5760146201a460527f496e636f727265637420436865636b706f696e740000000000000000000000006201a480526201a460506201a46051806201a48001601f826000031636823750506308c379a06201a4205260206201a44052601f19601f6201a4605101166044016201a43cfd5b63ecaa10b96201a46452600460a0620193c0516201a48452806201a4a452806201a4840160408082528082016000620193e0518083528060051b60008260408111611a46578015610fe857905b8060051b6201940001518160051b602088010152600101818118610fc9575b50508201602001915050905081019050806020830152808201600062019c00518083528060051b60008260408111611a4657801561104157905b8060051b62019c2001518160051b602088010152600101818118611022575b505082016020019150509050810190509050810190506064356201a4c4526020611a586000396000516201a4e4526084356201a50452016201a460526201a4608051602082012090506201a4405261cb4051806101a0528060051b806101c08261cb6060045afa50505061f36051806129c0528060051b806129e08261f38060045afa50505062011b80516151e05262011ba051806152005260608102806152208262011bc060045afa5050506201a4405161ca20526110ff6115bd565b60006040905b806201a460526201a420516201a460511061111f57611174565b620193c0516040526201a46051620193e051811015611a465760051b6201940001516060526201a4605162019c0051811015611a465760051b62019c200151608052611169611966565b600101818118611105575b50507fba199fb06e908b6eca45bc6e460f07d1888e4a0606361da80e679eac61d11103620193c0516201a460526064356201a4805260406201a460a1005b6308a92ad781186114a7576101043610611a46576004356004016040813511611a46578035806040526020820181816060375050506024356004016040813511611a465780358060a05260208201818160c0375050506044356004016020813511611a465780358061010052602082018035610120525050506064358060081c611a4657610140526084358060a01c611a465761016052303318156112b7576007610180527f496e76616c6964000000000000000000000000000000000000000000000000006101a0526101805061018051806101a001601f826000031636823750506308c379a061014052602061016052601f19601f61018051011660440161015cfd5b610160516080306101a0526101a0516101e0528061020052806101e00160a0518082526020820181818360c060045afa5050508051806020830101601f82600003163682375050601f19601f825160200101169050810190508061022052806101e001610100518082526020820161012051815250508051806020830101601f82600003163682375050601f19601f82516020010116905081019050610140516101c0526101c051610240526003823b035960018212611a465781600382863c8181018381856101e060045afa5050828201816000f08015611a46579050905090509050610180527f7144f66490771d357f3d6d385605288e1579754e5555f2e01114a2945f394e5b60a0806101a052806101a00160405180825260208201818183606060045afa5050508051806020830101601f82600003163682375050601f19601f82516020010116905081019050610180516101c052806101e052806101a00160a0518082526020820181818360c060045afa5050508051806020830101601f82600003163682375050601f19601f825160200101169050810190508061020052806101a001610100518082526020820161012051815250508051806020830101601f82600003163682375050601f19601f8251602001011690508101905061014051610220526101a0a1005b63a9a4a98381186114c65760043610611a465760005460405260206040f35b634da6ecc981186114e55760043610611a465760015460405260206040f35b6338d6172d81186115125760243610611a4657600260043560205260005260406000205460405260206040f35b505b60006000fd5b6000601c610100527f19457468657265756d205369676e6564204d6573736167653a0a333200000000610120526101008051602082018361016001815181525050808301925050506060518161016001526020810190508061014052610140905080516020820120905060e05260e051610100526080516101205260a0516101405260c0516101605260206000608061010060015afa5060005160405114815250565b60403661ca40376000615200516101408111611a4657801561171457905b6060810261522001805161ca8052602081015161caa052604081015161cac0525061ca8051156116f45761ca40516101a051811015611a465760051b6101c0015160405261ca205160605261ca805160805261caa05160a05261cac05160c05261164661cae061151a565b61cae0516116b457601161cb00527f496e76616c6964205369676e617475726500000000000000000000000000000061cb205261cb005061cb00518061cb2001601f826000031636823750506308c379a061cac052602061cae052601f19601f61cb0051011660440161cadcfd5b61ca605161ca40516129c051811015611a465760051b6129e00151808201828110611a46579050905061ca605263aaaaaaaa61ca6051106116f457611714565b61ca405160018101818110611a4657905061ca40526001018181186115db575b505063aaaaaaaa61ca6051101561178b57601261ca80527f496e73756666696369656e7420506f776572000000000000000000000000000061caa05261ca805061ca80518061caa001601f826000031636823750506308c379a061ca4052602061ca6052601f19601f61ca8051011660440161ca5cfd5b565b63299018c26150a45260046080806150c452806150c40160006040518083528060051b6000826101408111611a465780156117e157905b8060051b606001518160051b6020880101526001018181186117c4575b50508201602001915050905081019050806150e452806150c4016000612860518083528060051b6000826101408111611a4657801561183a57905b8060051b61288001518160051b60208801015260010181811861181c575b5050820160200191505090508101905061508051615104526020611a5860003960005161512452016150a0526150a0805160208201209050815250565b6323b872dd610104526004606051610124526080516101445260a05161016452606001610100526101005060206101c06101005161012060006040515af16118c4573d600060003e3d6000fd5b3d602081183d60201002186101a0526101a080518060c05260208201805160e05250505060c051156119645760e05160c05160200360031b1c611964576013610100527f5472616e7366657246726f6d206661696c6564000000000000000000000000006101205261010050610100518061012001601f826000031636823750506308c379a060c052602060e052601f19601f61010051011660440160dcfd5b565b63a9059cbb60e4526004606051610104526080516101245260400160e05260e050602061018060e05161010060006040515af16119a8573d600060003e3d6000fd5b3d602081183d60201002186101605261016080518060a05260208201805160c05250505060a05115611a445760c05160a05160200360031b1c611a4457601360e0527f5472616e7366657246726f6d206661696c6564000000000000000000000000006101005260e05060e0518061010001601f826000031636823750506308c379a060a052602060c052601f19601f60e051011660440160bcfd5b565b600080fda165767970657283000307000b3435363735393500000000000000000000000000000000000000000000000000

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.