Source Code
Latest 23 from a total of 23 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Submit_block_hea... | 17398566 | 327 days ago | IN | 0 FRAX | 0.0000006 | ||||
| Submit_block_hea... | 17355226 | 328 days ago | IN | 0 FRAX | 0.00000047 | ||||
| Submit_block_hea... | 17313697 | 329 days ago | IN | 0 FRAX | 0.00000058 | ||||
| Submit_block_hea... | 17272162 | 330 days ago | IN | 0 FRAX | 0.00000075 | ||||
| Submit_block_hea... | 17228806 | 331 days ago | IN | 0 FRAX | 0.00000049 | ||||
| Submit_block_hea... | 17203515 | 332 days ago | IN | 0 FRAX | 0.00000048 | ||||
| Submit_block_hea... | 17140157 | 333 days ago | IN | 0 FRAX | 0.00000059 | ||||
| Submit_block_hea... | 17098627 | 334 days ago | IN | 0 FRAX | 0.00000047 | ||||
| Submit_block_hea... | 17084170 | 335 days ago | IN | 0 FRAX | 0.00000045 | ||||
| Submit_block_hea... | 17011946 | 336 days ago | IN | 0 FRAX | 0.00000042 | ||||
| Submit_block_hea... | 16968611 | 337 days ago | IN | 0 FRAX | 0.00000084 | ||||
| Submit_block_hea... | 16925269 | 338 days ago | IN | 0 FRAX | 0.00000051 | ||||
| Submit_block_hea... | 16894567 | 339 days ago | IN | 0 FRAX | 0.00000129 | ||||
| Submit_block_hea... | 16849414 | 340 days ago | IN | 0 FRAX | 0.00000081 | ||||
| Submit_block_hea... | 16800659 | 341 days ago | IN | 0 FRAX | 0.00000169 | ||||
| Submit_block_hea... | 16757321 | 342 days ago | IN | 0 FRAX | 0.00000057 | ||||
| Submit_block_hea... | 16708564 | 343 days ago | IN | 0 FRAX | 0.00000055 | ||||
| Submit_block_hea... | 16664187 | 344 days ago | IN | 0 FRAX | 0.00000056 | ||||
| Submit_block_hea... | 16621033 | 345 days ago | IN | 0 FRAX | 0.00000049 | ||||
| Submit_block_hea... | 16582668 | 346 days ago | IN | 0 FRAX | 0.00000069 | ||||
| Submit_block_hea... | 16576537 | 346 days ago | IN | 0 FRAX | 0.00000049 | ||||
| Submit_block_hea... | 16500833 | 348 days ago | IN | 0 FRAX | 0.00000724 | ||||
| Add_committer | 16498860 | 348 days ago | IN | 0 FRAX | 0.00000259 |
Latest 1 internal transaction
Advanced mode:
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 16498296 | 348 days ago | Contract Creation | 0 FRAX |
Cross-Chain Transactions
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
Vyper_contract
Compiler Version
vyper:0.4.0
Optimization Enabled:
Yes
Other Settings:
default evmVersion
Contract Source Code (Vyper Json-Input format)
# pragma version ~=0.4
# pragma optimize gas
# pragma evm-version cancun
"""
@title Block Oracle
@notice Decentralized block hash oracle with multi-committer consensus
Uses a threshold-based commitment system where trusted committers can submit and validate block hashes
Notable features are:
- Committers can submit block hashes and optionally trigger validation
- Each block requires threshold number of matching commitments to be confirmed
- Committers can update their votes before confirmation
- Once confirmed, block hashes are immutable
- Owner can manage committers and adjust threshold
@license Copyright (c) Curve.Fi, 2025 - all rights reserved
@author curve.fi
@custom:security [email protected]
"""
################################################################
# MODULES #
################################################################
# Import ownership management
from snekmate.auth import ownable
initializes: ownable
exports: (
ownable.owner,
ownable.transfer_ownership,
ownable.renounce_ownership,
)
# Import RLP Block Header Decoder
# import contracts.modules.BlockHeaderRLPDecoder as bh_rlp
from modules import BlockHeaderRLPDecoder as bh_rlp
initializes: bh_rlp
################################################################
# EVENTS #
################################################################
event CommitBlock:
committer: indexed(address)
block_number: indexed(uint256)
block_hash: bytes32
event ApplyBlock:
block_number: indexed(uint256)
block_hash: bytes32
event SubmitBlockHeader:
committer: indexed(address)
block_number: indexed(uint256)
block_hash: bytes32
event AddCommitter:
committer: indexed(address)
event RemoveCommitter:
committer: indexed(address)
################################################################
# CONSTANTS #
################################################################
MAX_COMMITTERS: constant(uint256) = 32
################################################################
# STORAGE #
################################################################
block_hash: public(HashMap[uint256, bytes32]) # block_number => hash
last_confirmed_block_number: public(uint256) # number of the last confirmed block hash
block_header: public(HashMap[uint256, bh_rlp.BlockHeader]) # block_number => header
last_confirmed_header: public(bh_rlp.BlockHeader) # last confirmed header
committers: public(DynArray[address, MAX_COMMITTERS]) # List of all committers
is_committer: public(HashMap[address, bool])
commitment_count: public(
HashMap[uint256, HashMap[bytes32, uint256]]
) # block_number => hash => count
committer_votes: public(
HashMap[address, HashMap[uint256, bytes32]]
) # committer => block_number => committed_hash
threshold: public(uint256)
################################################################
# CONSTRUCTOR #
################################################################
@deploy
def __init__(_owner: address):
"""
@notice Initialize the contract with the owner
@param _owner The owner of the contract
"""
# Initialize ownable
ownable.__init__()
ownable._transfer_ownership(_owner)
# Initialize RLP decoder
bh_rlp.__init__()
################################################################
# OWNER FUNCTIONS #
################################################################
@external
def add_committer(_committer: address, _bump_threshold: bool = False):
"""
@notice Set trusted address that can commit block data
@param _committer Address of trusted committer
@param _bump_threshold If True, bump threshold to 1 more (useful for initial setup)
"""
ownable._check_owner()
if not self.is_committer[_committer]:
assert len(self.committers) < MAX_COMMITTERS, "Max committers reached"
self.is_committer[_committer] = True
self.committers.append(_committer)
log AddCommitter(_committer)
if _bump_threshold:
self.threshold += 1
@external
def remove_committer(_committer: address):
"""
@notice Remove trusted address that can commit block data
@param _committer Address of trusted committer
"""
ownable._check_owner()
if self.is_committer[_committer]:
self.is_committer[_committer] = False
# Rebuild committers array excluding the removed committer
new_committers: DynArray[address, MAX_COMMITTERS] = []
for committer: address in self.committers:
if committer != _committer:
new_committers.append(committer)
self.committers = new_committers
log RemoveCommitter(_committer)
@external
def set_threshold(_new_threshold: uint256):
"""
@notice Update threshold for block application
@param _new_threshold New threshold value
"""
ownable._check_owner()
assert _new_threshold <= len(
self.committers
), "Threshold cannot be greater than number of committers"
self.threshold = _new_threshold
@external
def admin_apply_block(block_number: uint256, block_hash: bytes32):
"""
@notice Apply a block hash with admin rights
@param block_number The block number to apply
@param block_hash The hash to apply
@dev Only callable by owner
"""
ownable._check_owner()
self._apply_block(block_number, block_hash)
################################################################
# INTERNAL FUNCTIONS #
################################################################
@internal
def _apply_block(block_number: uint256, block_hash: bytes32):
"""
@notice Confirm a block hash and apply it
@dev All security checks must be performed outside!
@param block_number The block number to confirm
@param block_hash The hash to confirm
"""
self.block_hash[block_number] = block_hash
if self.last_confirmed_block_number < block_number:
self.last_confirmed_block_number = block_number
log ApplyBlock(block_number, block_hash)
################################################################
# PERMISSIONED FUNCTIONS #
################################################################
@external
def commit_block(block_number: uint256, block_hash: bytes32, apply: bool = True) -> bool:
"""
@notice Commit a block hash and optionally attempt to apply it
@param block_number The block number to commit
@param block_hash The hash to commit
@param apply If True, checks if threshold is met and applies block
@return True if block was applied
"""
assert self.is_committer[msg.sender], "Not authorized"
assert self.block_hash[block_number] == empty(bytes32), "Already applied"
previous_commitment: bytes32 = self.committer_votes[msg.sender][block_number]
# Remove previous vote if exists, to avoid duplicate commitments
if previous_commitment != empty(bytes32):
self.commitment_count[block_number][previous_commitment] -= 1
self.committer_votes[msg.sender][block_number] = block_hash
self.commitment_count[block_number][block_hash] += 1
log CommitBlock(msg.sender, block_number, block_hash)
# Optional attempt to apply block
if apply and self.commitment_count[block_number][block_hash] >= self.threshold:
self._apply_block(block_number, block_hash)
return True
return False
################################################################
# PERMISSIONLESS FUNCTIONS #
################################################################
@external
def apply_block(block_number: uint256, block_hash: bytes32):
"""
@notice Apply a block hash if it has sufficient commitments
"""
assert self.block_hash[block_number] == empty(bytes32), "Already applied"
assert (
self.commitment_count[block_number][block_hash] >= self.threshold
), "Insufficient commitments"
self._apply_block(block_number, block_hash)
@external
def submit_block_header(encoded_header: Bytes[bh_rlp.BLOCK_HEADER_SIZE]):
"""
@notice Submit a block header. If it's correct and blockhash is applied, store it.
@param encoded_header The block header to submit
"""
current_header_block_number: uint256 = self.last_confirmed_header.block_number
# Decode whatever is submitted
decoded_header: bh_rlp.BlockHeader = bh_rlp._decode_block_header(encoded_header)
# Validate against stored blockhash
assert self.block_hash[decoded_header.block_number] != empty(bytes32), "Blockhash not applied"
assert (
decoded_header.block_hash == self.block_hash[decoded_header.block_number]
), "Blockhash does not match"
# Store decoded header
self.block_header[decoded_header.block_number] = decoded_header
log SubmitBlockHeader(msg.sender, decoded_header.block_number, decoded_header.block_hash)
if decoded_header.block_number > current_header_block_number:
self.last_confirmed_header = decoded_header
################################################################
# VIEW FUNCTIONS #
################################################################
@view
@external
def get_all_committers() -> DynArray[address, MAX_COMMITTERS]:
"""
@notice Utility viewer that returns list of all committers
"""
return self.committers
@view
@external
def get_block_hash(block_number: uint256) -> bytes32:
return self.block_hash[block_number]
@view
@external
def get_state_root(block_number: uint256) -> bytes32:
return self.block_header[block_number].state_root# pragma version ~=0.4.0
"""
@title Owner-Based Access Control Functions
@custom:contract-name ownable
@license GNU Affero General Public License v3.0 only
@author pcaversaccio
@notice These functions can be used to implement a basic access
control mechanism, where there is an account (an owner)
that can be granted exclusive access to specific functions.
By default, the owner account will be the one that deploys
the contract. This can later be changed with `transfer_ownership`.
An exemplary integration can be found in the ERC-20 implementation here:
https://github.com/pcaversaccio/snekmate/blob/main/src/snekmate/tokens/erc20.vy.
The implementation is inspired by OpenZeppelin's implementation here:
https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/Ownable.sol.
"""
# @dev Returns the address of the current owner.
# @notice If you declare a variable as `public`,
# Vyper automatically generates an `external`
# getter function for the variable.
owner: public(address)
# @dev Emitted when the ownership is transferred
# from `previous_owner` to `new_owner`.
event OwnershipTransferred:
previous_owner: indexed(address)
new_owner: indexed(address)
@deploy
@payable
def __init__():
"""
@dev To omit the opcodes for checking the `msg.value`
in the creation-time EVM bytecode, the constructor
is declared as `payable`.
@notice The `owner` role will be assigned to
the `msg.sender`.
"""
self._transfer_ownership(msg.sender)
@external
def transfer_ownership(new_owner: address):
"""
@dev Transfers the ownership of the contract
to a new account `new_owner`.
@notice Note that this function can only be
called by the current `owner`. Also,
the `new_owner` cannot be the zero address.
@param new_owner The 20-byte address of the new owner.
"""
self._check_owner()
assert new_owner != empty(address), "ownable: new owner is the zero address"
self._transfer_ownership(new_owner)
@external
def renounce_ownership():
"""
@dev Leaves the contract without an owner.
@notice Renouncing ownership will leave the
contract without an owner, thereby
removing any functionality that is
only available to the owner.
"""
self._check_owner()
self._transfer_ownership(empty(address))
@internal
def _check_owner():
"""
@dev Throws if the sender is not the owner.
"""
assert msg.sender == self.owner, "ownable: caller is not the owner"
@internal
def _transfer_ownership(new_owner: address):
"""
@dev Transfers the ownership of the contract
to a new account `new_owner`.
@notice This is an `internal` function without
access restriction.
@param new_owner The 20-byte address of the new owner.
"""
old_owner: address = self.owner
self.owner = new_owner
log OwnershipTransferred(old_owner, new_owner)# pragma version ~=0.4
"""
@title Block Header RLP Decoder Vyper Module
@notice Decodes RLP-encoded Ethereum block header and stores key fields
@dev Extracts block number from RLP and uses it as storage key
"""
################################################################
# CONSTANTS #
################################################################
# Block header size upper limit
BLOCK_HEADER_SIZE: constant(uint256) = 1024
# RLP decoding constants
RLP_SHORT_START: constant(uint256) = 128 # 0x80
RLP_LONG_START: constant(uint256) = 183 # 0xb7
RLP_LIST_SHORT_START: constant(uint256) = 192 # 0xc0
RLP_LIST_LONG_START: constant(uint256) = 247 # 0xf7
################################################################
# STRUCTS #
################################################################
struct BlockHeader:
block_hash: bytes32
parent_hash: bytes32
state_root: bytes32
block_number: uint256
timestamp: uint256
################################################################
# CONSTRUCTOR #
################################################################
@deploy
def __init__():
pass
################################################################
# EXTERNAL FUNCTIONS #
################################################################
# can be exposed optionally, or used in testing
@pure
@external
def calculate_block_hash(encoded_header: Bytes[BLOCK_HEADER_SIZE]) -> bytes32:
"""
@notice Calculates block hash from RLP encoded header
@param encoded_header RLP encoded header data
@return Block hash
"""
return keccak256(encoded_header)
@pure
@external
def decode_block_header(encoded_header: Bytes[BLOCK_HEADER_SIZE]) -> BlockHeader:
return self._decode_block_header(encoded_header)
################################################################
# CORE FUNCTIONS #
################################################################
@pure
@internal
def _decode_block_header(encoded_header: Bytes[BLOCK_HEADER_SIZE]) -> BlockHeader:
"""
@notice Decodes key fields from RLP-encoded Ethereum block header
@dev RLP encoding rules:
- Single byte values (< 0x80) are encoded as themselves
- Short strings (length < 56) start with 0x80 + length
- Long strings (length >= 56) start with 0xb7 + length_of_length, followed by length
- Lists follow similar rules but with 0xc0 and 0xf7 as starting points
Makes use of utility functions to parse the RLP encoded header,
and passes entire header to them which is not optimal in terms of gas, but
makes code more readable.
@param encoded_header RLP encoded block header
@return BlockHeader(block_hash, parent_hash, state_root, block_number, timestamp)
"""
# Placeholder variables
tmp_int: uint256 = 0
tmp_bytes: bytes32 = empty(bytes32)
# 1. Parse RLP list header
current_pos: uint256 = self._read_rlp_list_header(encoded_header)
# 2. Extract hashes
parent_hash: bytes32 = empty(bytes32)
parent_hash, current_pos = self._read_hash32(encoded_header, current_pos) # parent hash
tmp_bytes, current_pos = self._read_hash32(encoded_header, current_pos) # skip uncle hash
# 3. Skip miner address (20 bytes + 0x94)
assert convert(slice(encoded_header, current_pos, 1), bytes1) == 0x94
current_pos += 21
# 4. Read state root
state_root: bytes32 = empty(bytes32)
state_root, current_pos = self._read_hash32(encoded_header, current_pos)
# 5. Skip transaction and receipt roots
tmp_bytes, current_pos = self._read_hash32(encoded_header, current_pos) # skip tx root
tmp_bytes, current_pos = self._read_hash32(encoded_header, current_pos) # skip receipt root
# 6. Skip variable length fields
current_pos = self._skip_rlp_string(encoded_header, current_pos) # skip logs bloom
# 7. Skip difficulty
tmp_int, current_pos = self._read_rlp_number(encoded_header, current_pos)
# 8. Read block number
block_number: uint256 = 0
block_number, current_pos = self._read_rlp_number(encoded_header, current_pos)
# 9. Skip gas fields
tmp_int, current_pos = self._read_rlp_number(encoded_header, current_pos) # skip gas limit
tmp_int, current_pos = self._read_rlp_number(encoded_header, current_pos) # skip gas used
# 10. Read timestamp
timestamp: uint256 = 0
timestamp, current_pos = self._read_rlp_number(encoded_header, current_pos)
return BlockHeader(
block_hash=keccak256(encoded_header),
parent_hash=parent_hash,
state_root=state_root,
block_number=block_number,
timestamp=timestamp,
)
################################################################
# UTILITY FUNCTIONS #
################################################################
@pure
@internal
def _read_rlp_list_header(encoded: Bytes[BLOCK_HEADER_SIZE]) -> uint256:
"""@dev Returns position after list header"""
first_byte: uint256 = convert(slice(encoded, 0, 1), uint256)
assert first_byte >= RLP_LIST_SHORT_START, "Not a list"
if first_byte < RLP_LIST_LONG_START:
return 1
else:
len_of_len: uint256 = first_byte - RLP_LIST_LONG_START
return 1 + len_of_len
@pure
@internal
def _read_hash32(encoded: Bytes[BLOCK_HEADER_SIZE], pos: uint256) -> (bytes32, uint256):
"""@dev Read 32-byte hash field, returns (hash, next_pos)"""
assert convert(slice(encoded, pos, 1), uint256) == 160 # 0xa0
return extract32(encoded, pos + 1), pos + 33
@pure
@internal
def _read_rlp_number(encoded: Bytes[BLOCK_HEADER_SIZE], pos: uint256) -> (uint256, uint256):
"""@dev Read RLP-encoded number, returns (value, next_pos)"""
prefix: uint256 = convert(slice(encoded, pos, 1), uint256)
if prefix < RLP_SHORT_START:
return prefix, pos + 1
length: uint256 = prefix - RLP_SHORT_START
value: uint256 = convert(
abi_decode(abi_encode(slice(encoded, pos + 1, length)), (Bytes[32])), uint256
)
# abi_decode(abi_encode(bytesA), bytesB) is needed to unsafe cast bytesA to bytesB
return value, pos + 1 + length
@pure
@internal
def _skip_rlp_string(encoded: Bytes[BLOCK_HEADER_SIZE], pos: uint256) -> uint256:
"""@dev Skip RLP string field, returns next_pos"""
prefix: uint256 = convert(slice(encoded, pos, 1), uint256)
if prefix < RLP_SHORT_START:
return pos + 1
elif prefix < RLP_LONG_START:
return pos + 1 + (prefix - RLP_SHORT_START)
else:
len_of_len: uint256 = prefix - RLP_LONG_START
data_length: uint256 = convert(
abi_decode(abi_encode(slice(encoded, pos + 1, len_of_len)), (Bytes[32])), uint256
)
return pos + 1 + len_of_len + data_length{
"outputSelection": {
"contracts/BlockOracle.vy": [
"evm.bytecode",
"evm.deployedBytecode",
"abi"
]
},
"search_paths": [
".venv/lib/python3.12/site-packages",
"."
]
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"anonymous":false,"inputs":[{"indexed":true,"name":"committer","type":"address"},{"indexed":true,"name":"block_number","type":"uint256"},{"indexed":false,"name":"block_hash","type":"bytes32"}],"name":"CommitBlock","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"block_number","type":"uint256"},{"indexed":false,"name":"block_hash","type":"bytes32"}],"name":"ApplyBlock","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"committer","type":"address"},{"indexed":true,"name":"block_number","type":"uint256"},{"indexed":false,"name":"block_hash","type":"bytes32"}],"name":"SubmitBlockHeader","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"committer","type":"address"}],"name":"AddCommitter","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"committer","type":"address"}],"name":"RemoveCommitter","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previous_owner","type":"address"},{"indexed":true,"name":"new_owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"name":"new_owner","type":"address"}],"name":"transfer_ownership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounce_ownership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_committer","type":"address"}],"name":"add_committer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_committer","type":"address"},{"name":"_bump_threshold","type":"bool"}],"name":"add_committer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_committer","type":"address"}],"name":"remove_committer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_new_threshold","type":"uint256"}],"name":"set_threshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"block_number","type":"uint256"},{"name":"block_hash","type":"bytes32"}],"name":"admin_apply_block","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"block_number","type":"uint256"},{"name":"block_hash","type":"bytes32"}],"name":"commit_block","outputs":[{"name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"block_number","type":"uint256"},{"name":"block_hash","type":"bytes32"},{"name":"apply","type":"bool"}],"name":"commit_block","outputs":[{"name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"block_number","type":"uint256"},{"name":"block_hash","type":"bytes32"}],"name":"apply_block","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"encoded_header","type":"bytes"}],"name":"submit_block_header","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"get_all_committers","outputs":[{"name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"name":"block_number","type":"uint256"}],"name":"get_block_hash","outputs":[{"name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"name":"block_number","type":"uint256"}],"name":"get_state_root","outputs":[{"name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"name":"arg0","type":"uint256"}],"name":"block_hash","outputs":[{"name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"last_confirmed_block_number","outputs":[{"name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"name":"arg0","type":"uint256"}],"name":"block_header","outputs":[{"components":[{"name":"block_hash","type":"bytes32"},{"name":"parent_hash","type":"bytes32"},{"name":"state_root","type":"bytes32"},{"name":"block_number","type":"uint256"},{"name":"timestamp","type":"uint256"}],"name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"last_confirmed_header","outputs":[{"components":[{"name":"block_hash","type":"bytes32"},{"name":"parent_hash","type":"bytes32"},{"name":"state_root","type":"bytes32"},{"name":"block_number","type":"uint256"},{"name":"timestamp","type":"uint256"}],"name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"name":"arg0","type":"uint256"}],"name":"committers","outputs":[{"name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"name":"arg0","type":"address"}],"name":"is_committer","outputs":[{"name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"name":"arg0","type":"uint256"},{"name":"arg1","type":"bytes32"}],"name":"commitment_count","outputs":[{"name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"name":"arg0","type":"address"},{"name":"arg1","type":"uint256"}],"name":"committer_votes","outputs":[{"name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"threshold","outputs":[{"name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"name":"_owner","type":"address"}],"outputs":[],"stateMutability":"nonpayable","type":"constructor"}]Contract Creation Code
3461008f5760206118065f395f518060a01c61008f5760805261002061007f565b60805160405261002e610048565b61003661008d565b61175e6100936100003961175e610000f35b5f546060526040515f556040516060517f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f6080a3565b3360405261008b610048565b565b565b5f80fd5f3560e01c60026014820660011b61173601601e395f51565b638da5cb5b81186100335734611732575f5460405260206040f35b639724283f8118610d7e576024361034176117325760016004356020525f5260405f205460405260206040f35b63f0350c04811861014757602436103417611732576004358060a01c611732576101005261008c610d82565b61010051610136576020806101a0526026610120527f6f776e61626c653a206e6577206f776e657220697320746865207a65726f2061610140527f646472657373000000000000000000000000000000000000000000000000000061016052610120816101a00160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a0610180528060040161019cfd5b61010051604052610145610e03565b005b6324fe3c7c8118610d7e576024361034176117325760043560095481101561173257600a015460405260206040f35b63b15e13ee811861019c57346117325761018e610d82565b5f60405261019a610e03565b005b6322e7257e8118610d7e576024361034176117325760036004356020525f5260405f20805460405260018101546060526002810154608052600381015460a052600481015460c0525060a06040f35b6385ff2e9d811861020a57602436103417611732575f6101205261026a565b63bf8d5f318118610d7e57602436103417611732576004358060a01c61173257604052602a6040516020525f5260405f205460605260206060f35b636e63afe1811861039457604436103417611732576024358060011c61173257610120525b6004358060a01c6117325761010052610281610d82565b602a610100516020525f5260405f205461039257601f600954111561031d576020806101a0526016610140527f4d617820636f6d6d69747465727320726561636865640000000000000000000061016052610140816101a00160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a0610180528060040161019cfd5b6001602a610100516020525f5260405f2055600954601f8111611732576101005181600a01556001810160095550610100517fc871dc6554951ceeadd9fa74a35411fd9083fa2cbbe44e9b0ebbc0b4bca0a7ca5f610140a2610120511561039257602d5460018101818110611732579050602d555b005b63939074b18118610d7e5760443610341761173257600160a0526105f6565b6339652ba48118610d7e57602436103417611732576004358060a01c61173257610100526103df610d82565b602a610100516020525f5260405f2054156104cf575f602a610100516020525f5260405f20555f610120525f6009546020811161173257801561046257905b80600a0154610540526101005161054051146104575761012051601f811161173257610540518160051b61014001526001810161012052505b60010181811861041e575b50506101205160208160051b015f81601f0160051c602181116117325780156104a057905b8060051b61012001518160090155600101818118610487575b50505050610100517f7e10e432298311a6e8b3ac2db903c9d8e89a137ea670aee0b38094e1c45a8b425f610540a25b005b634c8f82068118610d7e57602436103417611732576104ee610d82565b600954600435111561059c57602080610180526035610100527f5468726573686f6c642063616e6e6f742062652067726561746572207468616e610120527f206e756d626572206f6620636f6d6d697474657273000000000000000000000061014052610100816101800160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a0610160528060040161017cfd5b600435602d55005b63b6268d318118610d7e57604436103417611732576105c1610d82565b604060046040376105d0610e3a565b005b63873566f7811861084257606436103417611732576044358060011c6117325760a0525b602a336020525f5260405f20546106815760208061012052600e60c0527f4e6f7420617574686f72697a656400000000000000000000000000000000000060e05260c0816101200160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a0610100528060040161011cfd5b60016004356020525f5260405f20541561070f5760208061012052600f60c0527f416c7265616479206170706c696564000000000000000000000000000000000060e05260c0816101200160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a0610100528060040161011cfd5b602c336020525f5260405f20806004356020525f5260405f2090505460c05260c0511561076657602b6004356020525f5260405f208060c0516020525f5260405f2090508054600181038181116117325790508155505b602435602c336020525f5260405f20806004356020525f5260405f20905055602b6004356020525f5260405f20806024356020525f5260405f209050805460018101818110611732579050815550600435337f11fe4427f3a01f8ddd0e563f79ec13468efef4738ce49084b2f00abe2897ef0360243560e052602060e0a360a0516107f1575f610815565b602d54602b6004356020525f5260405f20806024356020525f5260405f2090505410155b156108375760406004604037610829610e3a565b600160e052602060e0610840565b5f60e052602060e05bf35b63539f58bb8118610d7e57604436103417611732576004358060a01c61173257604052602c6040516020525f5260405f20806024356020525f5260405f2090505460605260206060f35b633b71f23481186109dd576044361034176117325760016004356020525f5260405f20541561092d5760208061010052600f60a0527f416c7265616479206170706c696564000000000000000000000000000000000060c05260a0816101000160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a060e0528060040160fcfd5b602d54602b6004356020525f5260405f20806024356020525f5260405f2090505410156109cc5760208061010052601860a0527f496e73756666696369656e7420636f6d6d69746d656e7473000000000000000060c05260a0816101000160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a060e0528060040160fcfd5b604060046040376109db610e3a565b005b6342cde4e88118610d7e573461173257602d5460405260206040f35b63b0668dda8118610d7e576024361034176117325760043560040180356104008111611732575060208135018082611320375050600754611740526020611320510180611320610da05e50610a4f6118006113cf565b61180060a0816117605e5060016117c0516020525f5260405f2054610aeb57602080611860526015611800527f426c6f636b68617368206e6f74206170706c696564000000000000000000000061182052611800816118600160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a0611840528060040161185cfd5b60016117c0516020525f5260405f2054611760511815610b8257602080611860526018611800527f426c6f636b6861736820646f6573206e6f74206d61746368000000000000000061182052611800816118600160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a0611840528060040161185cfd5b60a06117606118005e60036117c0516020525f5260405f20611800518155611820516001820155611840516002820155611860516003820155611880516004820155506117c051337f29ca676ff4f5cbab23ce830b8b77af1dede9e0c62e9721d634e48be911b2529c61176051611800526020611800a3611740516117c0511115610c2b5761176051600455611780516005556117a0516006556117c0516007556117e0516008555b005b63fd2dc64e8118610d7e573461173257602080604052806040015f6009548083528060051b5f8260208111611732578015610c7e57905b80600a01548160051b602088010152600101818118610c64575b505082016020019150509050810190506040f35b630dfe68108118610d7e576024361034176117325760036004356020525f5260405f206002810190505460405260206040f35b63b509f4ef8118610d7e576024361034176117325760016004356020525f5260405f205460405260206040f35b63017a494d8118610d7e57346117325760025460405260206040f35b631dd3e3748118610d7e57346117325760045460405260055460605260065460805260075460a05260085460c05260a06040f35b6342b2fbd98118610d7e5760443610341761173257602b6004356020525f5260405f20806024356020525f5260405f2090505460405260206040f35b5f5ffd5b5f54331815610e015760208060a05260206040527f6f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260605260408160a00160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a060805280600401609cfd5b565b5f546060526040515f556040516060517f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f6080a3565b60605160016040516020525f5260405f20556040516002541015610e5f576040516002555b6040517fb078a94dce502a3eb8987308759913d3d974a4ad431c3cfc174cec33b631b40b60605160805260206080a2565b60405115611732576060516104a0526001610480526104806020810151815160200360031b1c90506104605260c0610460511015610f45576020806104e052600a610480527f4e6f742061206c697374000000000000000000000000000000000000000000006104a052610480816104e00160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a06104c052806004016104dcfd5b60f6610460511115610f80576104605160f7810381811161173257905061048052610480518060010160018110611732579050815250610f86565b60018152505b565b60a0610460516001810160405181118282101761173257508060600180516104a0525060016104805261048090506020810151815160200360031b1c9050186117325761046051600181018181106117325790506020604051038113157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82131615611732578060600151905081526104605160218101818110611732579050602082015250565b610460516001810160405181118282101761173257508060600180516104c0525060016104a0526104a090506020810151815160200360031b1c905061048052607f61048051111561120b5760b66104805111156111d3576104805160b781038181116117325790506104a0526020806109205261046051600181018181106117325790506104a05180820160405181118382101761173257508160600181816105005e50806104e0526104e090509050816109200160208251018083835e508051806020830101601f825f03163682375050601f19601f82516020010116905090508101905061090052610900805160618110601f8211161561173257506020810181516020830101602082011161173257808151820110611732578051810180518351602085010182516020018301116117325760208111611732575060208151018082610d605e505050610d6090506020810151815160200360031b1c90506104c05261046051600181018181106117325790506104a05180820182811061173257905090506104c0518082018281106117325790509050815250611220565b610460516001810181811061173257905061048051608081038181116117325790508082018281106117325790509050815250611220565b61046051600181018181106117325790508152505b565b610460516001810160405181118282101761173257508060600180516104c0525060016104a0526104a090506020810151815160200360031b1c905061048052607f610480511161128f5761048051815261046051600181018181106117325790506020820152506113cd565b61048051608081038181116117325790506104a0526020806109205261046051600181018181106117325790506104a05180820160405181118382101761173257508160600181816105005e50806104e0526104e090509050816109200160208251018083835e508051806020830101601f825f03163682375050601f19601f82516020010116905090508101905061090052610900805160618110601f8211161561173257506020810181516020830101602082011161173257808151820110611732578051810180518351602085010182516020018301116117325760208111611732575060208151018082610d605e505050610d6090506020810151815160200360031b1c90506104c0526104c051815261046051600181018181106117325790506104a05180820182811061173257905090506020820152505b565b6040366111c0376020610da0510180610da060405e506113f0611220610e90565b61122051611200525f611220526020610da0510180610da060405e50611200516104605261141f611240610f88565b6112406040816112805e5061128051611220526112a051611200526020610da0510180610da060405e50611200516104605261145c611240610f88565b6112406040816112805e5060406112806111e05e7f94000000000000000000000000000000000000000000000000000000000000006112005160018101610da051811182821017611732575080610dc001805161126052506001611240526112409050805160200360031b6020820151811c811b9050905018611732576112005160158101818110611732579050611200525f611240526020610da0510180610da060405e506112005161046052611515611260610f88565b6112606040816112a05e506112a051611240526112c051611200526020610da0510180610da060405e506112005161046052611552611260610f88565b6112606040816112a05e5060406112a06111e05e6020610da0510180610da060405e506112005161046052611588611260610f88565b6112606040816112a05e5060406112a06111e05e6020610da0510180610da060405e5061120051610460526115be611260611030565b61126051611200526020610da0510180610da060405e5061120051610460526115e8611260611222565b6112606040816112a05e506112a0516111c0526112c051611200525f611260526020610da0510180610da060405e50611200516104605261162a611280611222565b6112806040816112c05e506112c051611260526112e051611200526020610da0510180610da060405e506112005161046052611667611280611222565b6112806040816112c05e506112c0516111c0526112e051611200526020610da0510180610da060405e5061120051610460526116a4611280611222565b6112806040816112c05e506112c0516111c0526112e051611200525f611280526020610da0510180610da060405e5061120051610460526116e66112a0611222565b6112a06040816112e05e506112e051611280526113005161120052610da051610dc020815261122051602082015261124051604082015261126051606082015261128051608082015250565b5f80fd03b301eb09f90cc5006005a40d7e05d20d0e024504d10d7e0c920cf20c2d0018088c0d4201760d7e8419175e81182800a1657679706572830004000015000000000000000000000000b101b2b0aa02b7167d238b98dc1b0b0404a760e8
Deployed Bytecode
0x5f3560e01c60026014820660011b61173601601e395f51565b638da5cb5b81186100335734611732575f5460405260206040f35b639724283f8118610d7e576024361034176117325760016004356020525f5260405f205460405260206040f35b63f0350c04811861014757602436103417611732576004358060a01c611732576101005261008c610d82565b61010051610136576020806101a0526026610120527f6f776e61626c653a206e6577206f776e657220697320746865207a65726f2061610140527f646472657373000000000000000000000000000000000000000000000000000061016052610120816101a00160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a0610180528060040161019cfd5b61010051604052610145610e03565b005b6324fe3c7c8118610d7e576024361034176117325760043560095481101561173257600a015460405260206040f35b63b15e13ee811861019c57346117325761018e610d82565b5f60405261019a610e03565b005b6322e7257e8118610d7e576024361034176117325760036004356020525f5260405f20805460405260018101546060526002810154608052600381015460a052600481015460c0525060a06040f35b6385ff2e9d811861020a57602436103417611732575f6101205261026a565b63bf8d5f318118610d7e57602436103417611732576004358060a01c61173257604052602a6040516020525f5260405f205460605260206060f35b636e63afe1811861039457604436103417611732576024358060011c61173257610120525b6004358060a01c6117325761010052610281610d82565b602a610100516020525f5260405f205461039257601f600954111561031d576020806101a0526016610140527f4d617820636f6d6d69747465727320726561636865640000000000000000000061016052610140816101a00160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a0610180528060040161019cfd5b6001602a610100516020525f5260405f2055600954601f8111611732576101005181600a01556001810160095550610100517fc871dc6554951ceeadd9fa74a35411fd9083fa2cbbe44e9b0ebbc0b4bca0a7ca5f610140a2610120511561039257602d5460018101818110611732579050602d555b005b63939074b18118610d7e5760443610341761173257600160a0526105f6565b6339652ba48118610d7e57602436103417611732576004358060a01c61173257610100526103df610d82565b602a610100516020525f5260405f2054156104cf575f602a610100516020525f5260405f20555f610120525f6009546020811161173257801561046257905b80600a0154610540526101005161054051146104575761012051601f811161173257610540518160051b61014001526001810161012052505b60010181811861041e575b50506101205160208160051b015f81601f0160051c602181116117325780156104a057905b8060051b61012001518160090155600101818118610487575b50505050610100517f7e10e432298311a6e8b3ac2db903c9d8e89a137ea670aee0b38094e1c45a8b425f610540a25b005b634c8f82068118610d7e57602436103417611732576104ee610d82565b600954600435111561059c57602080610180526035610100527f5468726573686f6c642063616e6e6f742062652067726561746572207468616e610120527f206e756d626572206f6620636f6d6d697474657273000000000000000000000061014052610100816101800160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a0610160528060040161017cfd5b600435602d55005b63b6268d318118610d7e57604436103417611732576105c1610d82565b604060046040376105d0610e3a565b005b63873566f7811861084257606436103417611732576044358060011c6117325760a0525b602a336020525f5260405f20546106815760208061012052600e60c0527f4e6f7420617574686f72697a656400000000000000000000000000000000000060e05260c0816101200160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a0610100528060040161011cfd5b60016004356020525f5260405f20541561070f5760208061012052600f60c0527f416c7265616479206170706c696564000000000000000000000000000000000060e05260c0816101200160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a0610100528060040161011cfd5b602c336020525f5260405f20806004356020525f5260405f2090505460c05260c0511561076657602b6004356020525f5260405f208060c0516020525f5260405f2090508054600181038181116117325790508155505b602435602c336020525f5260405f20806004356020525f5260405f20905055602b6004356020525f5260405f20806024356020525f5260405f209050805460018101818110611732579050815550600435337f11fe4427f3a01f8ddd0e563f79ec13468efef4738ce49084b2f00abe2897ef0360243560e052602060e0a360a0516107f1575f610815565b602d54602b6004356020525f5260405f20806024356020525f5260405f2090505410155b156108375760406004604037610829610e3a565b600160e052602060e0610840565b5f60e052602060e05bf35b63539f58bb8118610d7e57604436103417611732576004358060a01c61173257604052602c6040516020525f5260405f20806024356020525f5260405f2090505460605260206060f35b633b71f23481186109dd576044361034176117325760016004356020525f5260405f20541561092d5760208061010052600f60a0527f416c7265616479206170706c696564000000000000000000000000000000000060c05260a0816101000160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a060e0528060040160fcfd5b602d54602b6004356020525f5260405f20806024356020525f5260405f2090505410156109cc5760208061010052601860a0527f496e73756666696369656e7420636f6d6d69746d656e7473000000000000000060c05260a0816101000160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a060e0528060040160fcfd5b604060046040376109db610e3a565b005b6342cde4e88118610d7e573461173257602d5460405260206040f35b63b0668dda8118610d7e576024361034176117325760043560040180356104008111611732575060208135018082611320375050600754611740526020611320510180611320610da05e50610a4f6118006113cf565b61180060a0816117605e5060016117c0516020525f5260405f2054610aeb57602080611860526015611800527f426c6f636b68617368206e6f74206170706c696564000000000000000000000061182052611800816118600160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a0611840528060040161185cfd5b60016117c0516020525f5260405f2054611760511815610b8257602080611860526018611800527f426c6f636b6861736820646f6573206e6f74206d61746368000000000000000061182052611800816118600160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a0611840528060040161185cfd5b60a06117606118005e60036117c0516020525f5260405f20611800518155611820516001820155611840516002820155611860516003820155611880516004820155506117c051337f29ca676ff4f5cbab23ce830b8b77af1dede9e0c62e9721d634e48be911b2529c61176051611800526020611800a3611740516117c0511115610c2b5761176051600455611780516005556117a0516006556117c0516007556117e0516008555b005b63fd2dc64e8118610d7e573461173257602080604052806040015f6009548083528060051b5f8260208111611732578015610c7e57905b80600a01548160051b602088010152600101818118610c64575b505082016020019150509050810190506040f35b630dfe68108118610d7e576024361034176117325760036004356020525f5260405f206002810190505460405260206040f35b63b509f4ef8118610d7e576024361034176117325760016004356020525f5260405f205460405260206040f35b63017a494d8118610d7e57346117325760025460405260206040f35b631dd3e3748118610d7e57346117325760045460405260055460605260065460805260075460a05260085460c05260a06040f35b6342b2fbd98118610d7e5760443610341761173257602b6004356020525f5260405f20806024356020525f5260405f2090505460405260206040f35b5f5ffd5b5f54331815610e015760208060a05260206040527f6f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260605260408160a00160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a060805280600401609cfd5b565b5f546060526040515f556040516060517f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f6080a3565b60605160016040516020525f5260405f20556040516002541015610e5f576040516002555b6040517fb078a94dce502a3eb8987308759913d3d974a4ad431c3cfc174cec33b631b40b60605160805260206080a2565b60405115611732576060516104a0526001610480526104806020810151815160200360031b1c90506104605260c0610460511015610f45576020806104e052600a610480527f4e6f742061206c697374000000000000000000000000000000000000000000006104a052610480816104e00160208251018083835e508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a06104c052806004016104dcfd5b60f6610460511115610f80576104605160f7810381811161173257905061048052610480518060010160018110611732579050815250610f86565b60018152505b565b60a0610460516001810160405181118282101761173257508060600180516104a0525060016104805261048090506020810151815160200360031b1c9050186117325761046051600181018181106117325790506020604051038113157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82131615611732578060600151905081526104605160218101818110611732579050602082015250565b610460516001810160405181118282101761173257508060600180516104c0525060016104a0526104a090506020810151815160200360031b1c905061048052607f61048051111561120b5760b66104805111156111d3576104805160b781038181116117325790506104a0526020806109205261046051600181018181106117325790506104a05180820160405181118382101761173257508160600181816105005e50806104e0526104e090509050816109200160208251018083835e508051806020830101601f825f03163682375050601f19601f82516020010116905090508101905061090052610900805160618110601f8211161561173257506020810181516020830101602082011161173257808151820110611732578051810180518351602085010182516020018301116117325760208111611732575060208151018082610d605e505050610d6090506020810151815160200360031b1c90506104c05261046051600181018181106117325790506104a05180820182811061173257905090506104c0518082018281106117325790509050815250611220565b610460516001810181811061173257905061048051608081038181116117325790508082018281106117325790509050815250611220565b61046051600181018181106117325790508152505b565b610460516001810160405181118282101761173257508060600180516104c0525060016104a0526104a090506020810151815160200360031b1c905061048052607f610480511161128f5761048051815261046051600181018181106117325790506020820152506113cd565b61048051608081038181116117325790506104a0526020806109205261046051600181018181106117325790506104a05180820160405181118382101761173257508160600181816105005e50806104e0526104e090509050816109200160208251018083835e508051806020830101601f825f03163682375050601f19601f82516020010116905090508101905061090052610900805160618110601f8211161561173257506020810181516020830101602082011161173257808151820110611732578051810180518351602085010182516020018301116117325760208111611732575060208151018082610d605e505050610d6090506020810151815160200360031b1c90506104c0526104c051815261046051600181018181106117325790506104a05180820182811061173257905090506020820152505b565b6040366111c0376020610da0510180610da060405e506113f0611220610e90565b61122051611200525f611220526020610da0510180610da060405e50611200516104605261141f611240610f88565b6112406040816112805e5061128051611220526112a051611200526020610da0510180610da060405e50611200516104605261145c611240610f88565b6112406040816112805e5060406112806111e05e7f94000000000000000000000000000000000000000000000000000000000000006112005160018101610da051811182821017611732575080610dc001805161126052506001611240526112409050805160200360031b6020820151811c811b9050905018611732576112005160158101818110611732579050611200525f611240526020610da0510180610da060405e506112005161046052611515611260610f88565b6112606040816112a05e506112a051611240526112c051611200526020610da0510180610da060405e506112005161046052611552611260610f88565b6112606040816112a05e5060406112a06111e05e6020610da0510180610da060405e506112005161046052611588611260610f88565b6112606040816112a05e5060406112a06111e05e6020610da0510180610da060405e5061120051610460526115be611260611030565b61126051611200526020610da0510180610da060405e5061120051610460526115e8611260611222565b6112606040816112a05e506112a0516111c0526112c051611200525f611260526020610da0510180610da060405e50611200516104605261162a611280611222565b6112806040816112c05e506112c051611260526112e051611200526020610da0510180610da060405e506112005161046052611667611280611222565b6112806040816112c05e506112c0516111c0526112e051611200526020610da0510180610da060405e5061120051610460526116a4611280611222565b6112806040816112c05e506112c0516111c0526112e051611200525f611280526020610da0510180610da060405e5061120051610460526116e66112a0611222565b6112a06040816112e05e506112e051611280526113005161120052610da051610dc020815261122051602082015261124051604082015261126051606082015261128051608082015250565b5f80fd03b301eb09f90cc5006005a40d7e05d20d0e024504d10d7e0c920cf20c2d0018088c0d4201760d7e
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000b101b2b0aa02b7167d238b98dc1b0b0404a760e8
-----Decoded View---------------
Arg [0] : _owner (address): 0xb101b2b0aa02b7167D238B98dc1B0b0404a760E8
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000b101b2b0aa02b7167d238b98dc1b0b0404a760e8
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in FRAX
0
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
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.