S Price: $0.513733 (-3.59%)

Contract

0xfB0681f5e4A89bd64a598B8c76531dE8c468C87c

Overview

S Balance

Sonic LogoSonic LogoSonic Logo0 S

S Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Set_single_rewar...118296592025-03-05 12:59:1536 hrs ago1741179555IN
0xfB0681f5...8c468C87c
0 S0.0031870855
Set_single_rewar...118296512025-03-05 12:59:1236 hrs ago1741179552IN
0xfB0681f5...8c468C87c
0 S0.0031877455
Set_name118296412025-03-05 12:59:0836 hrs ago1741179548IN
0xfB0681f5...8c468C87c
0 S0.0044793655

Parent Transaction Hash Block From To
View All Internal Transactions
Loading...
Loading

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

Contract Name:
Passthrough for L2

Compiler Version
vyper:0.4.0

Optimization Enabled:
N/A

Other Settings:
shanghai EvmVersion, MIT license

Contract Source Code (Vyper language format)

#pragma version ^0.4.0
"""
@title Passthrough for L2
@author anon contributor to curve
@license MIT
@notice passthrough contract who can deposit token rewards to allowed reward_receivers (gauges)
"""

from ethereum.ercs import IERC20

interface Gauge:
    def deposit_reward_token(_reward_token: address, _amount: uint256, _epoch: uint256): nonpayable
    def reward_data(_token: address) -> (address, uint256, uint256, uint256): view
    def manager() -> address: view



FIRST_GUARD: constant(address) = 0x9f499A0B7c14393502207877B17E3748beaCd70B

WEEK: public(constant(uint256)) = 7 * 24 * 60 * 60  # 1 week in seconds

guards: public(DynArray[address, 10])  # L2 guards
non_removable_guards: public(DynArray[address, 2])  # L2 fixed guards
distributors: public(DynArray[address, 10])  # L2 distributors
reward_receivers: public(DynArray[address, 10])  # L2 reward receivers
single_reward_receiver: public(address)
single_reward_token: public(address)

OWNERSHIP_ADMIN: public(immutable(address))
PARAMETER_ADMIN: public(immutable(address))

name: public(String[128])

event PassthroughDeployed:
    timestamp: uint256

event SetSingleRewardReceiver:
    single_reward_receiver: address
    timestamp: uint256

event SetSingleRewardToken:
    single_reward_token: address
    timestamp: uint256

event SetName:
    name: String[128]
    timestamp: uint256

event AddGuard:
    new_guard: address
    timestamp: uint256

event RemoveGuard:
    removed_guard: address
    timestamp: uint256

event AddDistributor:
    new_distributor: address
    timestamp: uint256

event RemoveDistributor:
    removed_distributor: address
    timestamp: uint256

event SentRewardToken:
    single_reward_receiver: address
    reward_token: address
    amount: uint256
    epoch: uint256
    timestamp: uint256

event SentReward:
    single_reward_receiver: address
    reward_token: address
    amount: uint256
    epoch: uint256
    timestamp: uint256

event SentRewardTokenWithReceiver:
    reward_receiver: address
    reward_token: address
    amount: uint256
    epoch: uint256
    timestamp: uint256

event RewardData:
    distributor: address
    period_finish: uint256
    rate: uint256
    last_update: uint256
    timestamp: uint256

@deploy
def __init__(_ownership_admin: address, _parameter_admin: address, _reward_receivers: DynArray[address, 10], _guards: DynArray[address, 7], _distributors: DynArray[address, 10]):
    """
    @notice Contract constructor
    @param _reward_receivers Reward receivers addresses, currently not used anywhere!
    @param _guards Guards addresses
    @param _distributors Distributors addresses
    @dev _reward_receivers are not used anywhere, as the sending reward is gated by the depositor address in the gauge (this contract)
    """
    self.reward_receivers = _reward_receivers
    self.guards = _guards
    # add default guards
    OWNERSHIP_ADMIN = _ownership_admin
    PARAMETER_ADMIN = _parameter_admin
    self.guards.append(OWNERSHIP_ADMIN)
    self.guards.append(PARAMETER_ADMIN)
    self.guards.append(FIRST_GUARD)
    
    self.non_removable_guards.append(OWNERSHIP_ADMIN)
    self.non_removable_guards.append(PARAMETER_ADMIN)

    
    self.distributors = _distributors

    log PassthroughDeployed(block.timestamp)


@external
def deposit_reward_token(_reward_token: address, _amount: uint256, _epoch: uint256 = WEEK):
    """
    @notice Deposit reward token
    @param _reward_token Reward token address
    @param _amount Amount of reward token to deposit
    @param _epoch Epoch to deposit reward token, default is 1 week in seconds, min. 3 days in L2 gauges
    @dev This function is used to deposit reward token to the single reward receiver
    @dev To use this function, set the single reward receiver first (gauge address)
    """
    assert msg.sender in self.distributors or msg.sender in self.guards, 'only distributors or guards can call this function'
    assert self.single_reward_receiver != empty(address), 'single reward receiver not set'

    assert extcall IERC20(_reward_token).transferFrom(msg.sender, self, _amount)
    assert extcall IERC20(_reward_token).approve(self.single_reward_receiver, _amount)

    extcall Gauge(self.single_reward_receiver).deposit_reward_token(_reward_token, _amount, _epoch)

    log SentRewardToken(self.single_reward_receiver, _reward_token, _amount, _epoch, block.timestamp)  


@external
def deposit_reward(_amount: uint256, _epoch: uint256 = WEEK):
    """
    @notice Deposit reward token
    @param _amount Amount of reward token to deposit
    @param _epoch Epoch to deposit reward token, default is 1 week in seconds, min, 3 days in L2 gauges
    @dev This function is used to deposit reward token to the single reward receiver with a fixed reward token
    @dev To use this function, set the single reward receiver first (gauge address)
    """
    assert msg.sender in self.distributors or msg.sender in self.guards, 'only distributors or guards can call this function'
    assert self.single_reward_token != empty(address), 'single reward token not set'
    assert self.single_reward_receiver != empty(address), 'single reward receiver not set'

    assert extcall IERC20(self.single_reward_token).transferFrom(msg.sender, self, _amount)
    assert extcall IERC20(self.single_reward_token).approve(self.single_reward_receiver, _amount)

    extcall Gauge(self.single_reward_receiver).deposit_reward_token(self.single_reward_token, _amount, _epoch)

    log SentReward(self.single_reward_receiver, self.single_reward_token, _amount, _epoch, block.timestamp)


@external
def set_single_reward_receiver(_single_reward_receiver: address):
    """
    @notice Set the single reward receiver
    @param _single_reward_receiver The address of the single reward receiver
    @dev This can be used to set a single reward receiver to have the deposit_reward_token()
    @dev function the same interface as in a gauge
    """
    assert msg.sender in self.guards, 'only guards can call this function'
    self.single_reward_receiver = _single_reward_receiver

    log SetSingleRewardReceiver(_single_reward_receiver, block.timestamp)

@external
def set_single_reward_token(_single_reward_token: address):
    """
    @notice Set the single reward token
    @param _single_reward_token The address of the single reward token
    @dev This can be used to set a single reward token to have the deposit_reward()
    @dev function the same interface as in a gauge
    """
    assert msg.sender in self.guards, 'only guards can call this function'
    self.single_reward_token = _single_reward_token

    log SetSingleRewardToken(_single_reward_token, block.timestamp)


@external
def deposit_reward_token_with_receiver(_reward_receiver: address, _reward_token: address, _amount: uint256, _epoch: uint256 = WEEK):
    """
    @notice Deposit reward token
    @param _reward_receiver Reward receiver address
    @dev reward receiver must be a gauge, as access is set as depositor in the gauge, this is not to be gated here
    @param _reward_token Reward token address
    @param _amount Amount of reward token to deposit
    @param _epoch Epoch to deposit reward token
    """
    assert msg.sender in self.distributors or msg.sender in self.guards, 'only distributors or guards can call this function'
    
    assert extcall IERC20(_reward_token).transferFrom(msg.sender, self, _amount)
    assert extcall IERC20(_reward_token).approve(_reward_receiver, _amount)

    extcall Gauge(_reward_receiver).deposit_reward_token(_reward_token, _amount, _epoch)

    log SentRewardTokenWithReceiver(_reward_receiver, _reward_token, _amount, _epoch, block.timestamp)  

@view
@external
def reward_data(_reward_receiver: address, _token: address) -> (address, uint256, uint256, uint256):

    distributor: address = empty(address)
    period_finish: uint256 = 0
    rate: uint256 = 0
    last_update: uint256 = 0
    
    (distributor, period_finish, rate, last_update) = staticcall Gauge(_reward_receiver).reward_data(_token)
    
    return (distributor, period_finish, rate, last_update)

    # log RewardData(distributor, period_finish, rate, last_update, block.timestamp)


@external
def add_distributor(_new_distributor: address):
    # assert msg.sender in [Gauge(self.reward_receiver).manager(), PARAMETER_ADMIN, OWNERSHIP_ADMIN]

    assert msg.sender in self.guards, 'only guards can call this function'
    assert _new_distributor not in self.distributors, 'prevent to add the same distributor twice'

    self.distributors.append(_new_distributor)

    log AddDistributor(_new_distributor, block.timestamp)

@external
def remove_distributor(_rm_distributor: address):
    """
    @notice Remove an active campaign address from the list
    @param _rm_distributor The address of the distributor to remove
    @dev todo: now a distributor not in the list also creats the RemoveDistributor event
    """
    assert msg.sender in self.guards, 'only guards can call this function'
    
    for i: uint256 in range(len(self.distributors), bound=10):
        if self.distributors[i] == _rm_distributor:    
            last_idx: uint256 = len(self.distributors) - 1
            if i != last_idx:
                self.distributors[i] = self.distributors[last_idx]
            self.distributors.pop()
            break

    log RemoveDistributor(_rm_distributor, block.timestamp)


@external
def add_guard(_new_guard: address):
    # assert msg.sender in [Gauge(self.reward_receiver).manager(), PARAMETER_ADMIN, OWNERSHIP_ADMIN]

    assert msg.sender in self.guards, 'only guards can call this function'
    assert _new_guard not in self.guards, 'prevent to add the same guard twice'

    self.guards.append(_new_guard)

    log AddGuard(_new_guard, block.timestamp)

@external
def remove_guard(_rm_guard: address):
    """
    @notice Remove an active guard address from the list
    @param _rm_guard The address of the guard to remove
    """
    assert msg.sender in self.guards, 'only guards can call this function'
    assert _rm_guard != msg.sender, 'guards cannot remove themselves'
    assert _rm_guard not in self.non_removable_guards, 'non-removable guards cannot be removed'
    
    for i: uint256 in range(len(self.guards), bound=10):
        if self.guards[i] == _rm_guard:    
            last_idx: uint256 = len(self.guards) - 1
            if i != last_idx:
                self.guards[i] = self.guards[last_idx]
            self.guards.pop()
            break

    log RemoveGuard(_rm_guard, block.timestamp)


@external
def set_name(name: String[128]):
    """
    @notice Set the name of the passthrough contract
    @param name The name of the passthrough contract
    """
    assert msg.sender in self.guards, 'only guards can call this function'
    self.name = name

    log SetName(name, block.timestamp)


@external
@view
def get_all_reward_receivers() -> DynArray[address, 10]:
    """
    @notice Get all guards
    @return DynArray[address, 10] Array containing all guards
    """
    return self.reward_receivers

@external
@view
def get_all_guards() -> DynArray[address, 10]:
    """
    @notice Get all guards
    @return DynArray[address, 10] Array containing all guards
    """
    return self.guards

@external
@view
def get_all_distributors() -> DynArray[address, 10]:
    """
    @notice Get all distributors
    @return DynArray[address, 10] Array containing all distributors
    """
    return self.distributors

Contract Security Audit

Contract ABI

API
[{"name":"PassthroughDeployed","inputs":[{"name":"timestamp","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"SetSingleRewardReceiver","inputs":[{"name":"single_reward_receiver","type":"address","indexed":false},{"name":"timestamp","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"SetSingleRewardToken","inputs":[{"name":"single_reward_token","type":"address","indexed":false},{"name":"timestamp","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"SetName","inputs":[{"name":"name","type":"string","indexed":false},{"name":"timestamp","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"AddGuard","inputs":[{"name":"new_guard","type":"address","indexed":false},{"name":"timestamp","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"RemoveGuard","inputs":[{"name":"removed_guard","type":"address","indexed":false},{"name":"timestamp","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"AddDistributor","inputs":[{"name":"new_distributor","type":"address","indexed":false},{"name":"timestamp","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"RemoveDistributor","inputs":[{"name":"removed_distributor","type":"address","indexed":false},{"name":"timestamp","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"SentRewardToken","inputs":[{"name":"single_reward_receiver","type":"address","indexed":false},{"name":"reward_token","type":"address","indexed":false},{"name":"amount","type":"uint256","indexed":false},{"name":"epoch","type":"uint256","indexed":false},{"name":"timestamp","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"SentReward","inputs":[{"name":"single_reward_receiver","type":"address","indexed":false},{"name":"reward_token","type":"address","indexed":false},{"name":"amount","type":"uint256","indexed":false},{"name":"epoch","type":"uint256","indexed":false},{"name":"timestamp","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"SentRewardTokenWithReceiver","inputs":[{"name":"reward_receiver","type":"address","indexed":false},{"name":"reward_token","type":"address","indexed":false},{"name":"amount","type":"uint256","indexed":false},{"name":"epoch","type":"uint256","indexed":false},{"name":"timestamp","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"RewardData","inputs":[{"name":"distributor","type":"address","indexed":false},{"name":"period_finish","type":"uint256","indexed":false},{"name":"rate","type":"uint256","indexed":false},{"name":"last_update","type":"uint256","indexed":false},{"name":"timestamp","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"stateMutability":"nonpayable","type":"function","name":"deposit_reward_token","inputs":[{"name":"_reward_token","type":"address"},{"name":"_amount","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"deposit_reward_token","inputs":[{"name":"_reward_token","type":"address"},{"name":"_amount","type":"uint256"},{"name":"_epoch","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"deposit_reward","inputs":[{"name":"_amount","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"deposit_reward","inputs":[{"name":"_amount","type":"uint256"},{"name":"_epoch","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"set_single_reward_receiver","inputs":[{"name":"_single_reward_receiver","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"set_single_reward_token","inputs":[{"name":"_single_reward_token","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"deposit_reward_token_with_receiver","inputs":[{"name":"_reward_receiver","type":"address"},{"name":"_reward_token","type":"address"},{"name":"_amount","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"deposit_reward_token_with_receiver","inputs":[{"name":"_reward_receiver","type":"address"},{"name":"_reward_token","type":"address"},{"name":"_amount","type":"uint256"},{"name":"_epoch","type":"uint256"}],"outputs":[]},{"stateMutability":"view","type":"function","name":"reward_data","inputs":[{"name":"_reward_receiver","type":"address"},{"name":"_token","type":"address"}],"outputs":[{"name":"","type":"address"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}]},{"stateMutability":"nonpayable","type":"function","name":"add_distributor","inputs":[{"name":"_new_distributor","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"remove_distributor","inputs":[{"name":"_rm_distributor","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"add_guard","inputs":[{"name":"_new_guard","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"remove_guard","inputs":[{"name":"_rm_guard","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"set_name","inputs":[{"name":"name","type":"string"}],"outputs":[]},{"stateMutability":"view","type":"function","name":"get_all_reward_receivers","inputs":[],"outputs":[{"name":"","type":"address[]"}]},{"stateMutability":"view","type":"function","name":"get_all_guards","inputs":[],"outputs":[{"name":"","type":"address[]"}]},{"stateMutability":"view","type":"function","name":"get_all_distributors","inputs":[],"outputs":[{"name":"","type":"address[]"}]},{"stateMutability":"view","type":"function","name":"WEEK","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"guards","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"non_removable_guards","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"distributors","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"reward_receivers","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"single_reward_receiver","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"single_reward_token","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"OWNERSHIP_ADMIN","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"PARAMETER_ADMIN","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"name","inputs":[],"outputs":[{"name":"","type":"string"}]},{"stateMutability":"nonpayable","type":"constructor","inputs":[{"name":"_ownership_admin","type":"address"},{"name":"_parameter_admin","type":"address"},{"name":"_reward_receivers","type":"address[]"},{"name":"_guards","type":"address[]"},{"name":"_distributors","type":"address[]"}],"outputs":[]}]

Deployed Bytecode

0x5f3560e01c6002601f820660011b611bad01601e395f51565b6393f7aa67811861003957604436103417611ba95762093a80606052610072565b63f4359ce58118611ba55734611ba95762093a8060405260206040f35b6333b50aed811861037657606436103417611ba9576044356060525b6004358060a01c611ba957604052335f6080525f600f54600a8111611ba95780156100b957905b806010015483186100ae5760016080526100b9565b600101818118610099575b5050608051905061010957335f60a0525f600154600a8111611ba95780156100fd57905b806002015483186100f257600160a0526100fd565b6001018181186100dd575b505060a051905061010c565b60015b6101b45760208061014052603260c0527f6f6e6c79206469737472696275746f7273206f72206775617264732063616e2060e0527f63616c6c20746869732066756e6374696f6e00000000000000000000000000006101005260c0816101400160208251018082828560045afa50508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a0610120528060040161013cfd5b6025546102355760208060e052601e6080527f73696e676c6520726577617264207265636569766572206e6f7420736574000060a05260808160e00181518152602082015160208201528051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a060c0528060040160dcfd5b6040516323b872dd6080523360a0523060c05260243560e052602060806064609c5f855af1610266573d5f5f3e3d5ffd5b3d602081183d60201002188060800160a011611ba9576080518060011c611ba957610100525061010090505115611ba95760405163095ea7b360805260255460a05260243560c052602060806044609c5f855af16102c6573d5f5f3e3d5ffd5b3d602081183d60201002188060800160a011611ba9576080518060011c611ba95760e0525060e090505115611ba9576025546333b50aed60805260405160a05260243560c05260605160e052803b15611ba9575f60806064609c5f855af1610330573d5f5f3e3d5ffd5b507fb91d7e6b573b073d4551d3b20e3e13ceaf6dd0b40675ba364431dd7da6a4020460255460805260405160a05260243560c05260605160e052426101005260a06080a1005b63770cec238118611ba557602436103417611ba9576004358060a01c611ba957604052335f6060525f600154600a8111611ba95780156103d257905b806002015483186103c75760016060526103d2565b6001018181186103b2575b5050606051905061047e576020806101005260226080527f6f6e6c79206775617264732063616e2063616c6c20746869732066756e63746960a0527f6f6e00000000000000000000000000000000000000000000000000000000000060c0526080816101000160208251018082828560045afa50508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a060e0528060040160fcfd5b5f600f54600a8111611ba957801561051157905b80606052604051606051600f54811015611ba957601001541861050657600f5460018103818111611ba9579050608052608051606051146104f057608051600f54811015611ba95760100154606051600f54811015611ba957601001555b6001600f548015611ba9570380600f5550610511565b600101818118610492575b50507f486d56310c3a566c5d3a9d0b5f5532ea5ed15dc5ece76bf7f946dbe6316795e86040516060524260805260406060a1005b6394412b38811861056657602436103417611ba95762093a806040526105a3565b63b98827248118611ba557606436103417611ba95762093a80608052610c17565b638c478cb0811861091657604436103417611ba9576024356040525b335f6060525f600f54600a8111611ba95780156105dc57905b806010015483186105d15760016060526105dc565b6001018181186105bc575b5050606051905061062c57335f6080525f600154600a8111611ba957801561062057905b80600201548318610615576001608052610620565b600101818118610600575b5050608051905061062f565b60015b6106d65760208061012052603260a0527f6f6e6c79206469737472696275746f7273206f72206775617264732063616e2060c0527f63616c6c20746869732066756e6374696f6e000000000000000000000000000060e05260a0816101200160208251018082828560045afa50508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a0610100528060040161011cfd5b6026546107575760208060c052601b6060527f73696e676c652072657761726420746f6b656e206e6f7420736574000000000060805260608160c00181518152602082015160208201528051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a060a0528060040160bcfd5b6025546107d85760208060c052601e6060527f73696e676c6520726577617264207265636569766572206e6f7420736574000060805260608160c00181518152602082015160208201528051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a060a0528060040160bcfd5b6026546323b872dd606052336080523060a05260043560c052602060606064607c5f855af1610809573d5f5f3e3d5ffd5b3d602081183d602010021880606001608011611ba9576060518060011c611ba95760e0525060e090505115611ba95760265463095ea7b360605260255460805260043560a052602060606044607c5f855af1610867573d5f5f3e3d5ffd5b3d602081183d602010021880606001608011611ba9576060518060011c611ba95760c0525060c090505115611ba9576025546333b50aed60605260265460805260043560a05260405160c052803b15611ba9575f60606064607c5f855af16108d1573d5f5f3e3d5ffd5b507f38aa51a95cd099697d03dea089bc482af05d74b07ee643b1f8296fdf4b5b11c560255460605260265460805260043560a05260405160c0524260e05260a06060a1005b6364036ec88118611ba55734611ba957602080604052806040015f600f548083528060051b5f82600a8111611ba957801561096757905b80601001548160051b60208801015260010181811861094d575b505082016020019150509050810190506040f35b636d52d7b28118611ba557602436103417611ba9576004358060a01c611ba957604052335f6060525f600154600a8111611ba95780156109d757905b806002015483186109cc5760016060526109d7565b6001018181186109b7575b50506060519050610a83576020806101005260226080527f6f6e6c79206775617264732063616e2063616c6c20746869732066756e63746960a0527f6f6e00000000000000000000000000000000000000000000000000000000000060c0526080816101000160208251018082828560045afa50508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a060e0528060040160fcfd5b6040516025557f45445a07500d288fa89cde6aee18c2de533e3e426938f3910aeeda1ab89b46786040516060524260805260406060a1005b635c4700348118611ba557602436103417611ba9576004358060a01c611ba957604052335f6060525f600154600a8111611ba9578015610b1757905b80600201548318610b0c576001606052610b17565b600101818118610af7575b50506060519050610bc3576020806101005260226080527f6f6e6c79206775617264732063616e2063616c6c20746869732066756e63746960a0527f6f6e00000000000000000000000000000000000000000000000000000000000060c0526080816101000160208251018082828560045afa50508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a060e0528060040160fcfd5b6040516026557f9ad984b06fd047e2ad2c6a5634faf458681e73d0411956fb597f8d470fe9f3c36040516060524260805260406060a1005b63a2fbb16a8118610eae57608436103417611ba9576064356080525b6004358060a01c611ba9576040526024358060a01c611ba957606052335f60a0525f600f54600a8111611ba9578015610c6c57905b80601001548318610c6157600160a052610c6c565b600101818118610c4c575b505060a0519050610cbc57335f60c0525f600154600a8111611ba9578015610cb057905b80600201548318610ca557600160c052610cb0565b600101818118610c90575b505060c0519050610cbf565b60015b610d685760208061016052603260e0527f6f6e6c79206469737472696275746f7273206f72206775617264732063616e20610100527f63616c6c20746869732066756e6374696f6e00000000000000000000000000006101205260e0816101600160208251018082828560045afa50508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a0610140528060040161015cfd5b6060516323b872dd60a0523360c0523060e05260443561010052602060a0606460bc5f855af1610d9a573d5f5f3e3d5ffd5b3d602081183d60201002188060a00160c011611ba95760a0518060011c611ba957610120525061012090505115611ba95760605163095ea7b360a05260405160c05260443560e052602060a0604460bc5f855af1610dfa573d5f5f3e3d5ffd5b3d602081183d60201002188060a00160c011611ba95760a0518060011c611ba957610100525061010090505115611ba9576040516333b50aed60a05260605160c05260443560e05260805161010052803b15611ba9575f60a0606460bc5f855af1610e67573d5f5f3e3d5ffd5b507f366c1e844d00c0715501ef693a547778ba585fe9265a5ef8c57aedc017c6858060405160a05260605160c05260443560e05260805161010052426101205260a060a0a1005b63e67cf9998118611ba557602436103417611ba9576004358060a01c611ba957604052335f6060525f600154600a8111611ba9578015610f0a57905b80600201548318610eff576001606052610f0a565b600101818118610eea575b50506060519050610fb6576020806101005260226080527f6f6e6c79206775617264732063616e2063616c6c20746869732066756e63746960a0527f6f6e00000000000000000000000000000000000000000000000000000000000060c0526080816101000160208251018082828560045afa50508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a060e0528060040160fcfd5b33604051186110395760208060c052601f6060527f6775617264732063616e6e6f742072656d6f7665207468656d73656c7665730060805260608160c00181518152602082015160208201528051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a060a0528060040160bcfd5b60405160016060525f600c5460028111611ba957801561107457905b80600d01548318611069575f606052611074565b600101818118611055575b50506060519050611120576020806101005260266080527f6e6f6e2d72656d6f7661626c65206775617264732063616e6e6f74206265207260a0527f656d6f766564000000000000000000000000000000000000000000000000000060c0526080816101000160208251018082828560045afa50508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a060e0528060040160fcfd5b5f600154600a8111611ba95780156111b357905b80606052604051606051600154811015611ba95760020154186111a85760015460018103818111611ba95790506080526080516060511461119257608051600154811015611ba95760020154606051600154811015611ba957600201555b60016001548015611ba9570380600155506111b3565b600101818118611134575b50507f4642b08121dfa969c5edc8fb57387c723beedd41eb57f195187aa66bc88a0cce6040516060524260805260406060a1005b63121ea2f281186112f157604436103417611ba9576004358060a01c611ba9576040526024358060a01c611ba9576060526080366080376040516348e9c65e61010052606051610120526080610100602461011c845afa61124a573d5f5f3e3d5ffd5b3d608081183d6080100218806101000161018011611ba957610100518060a01c611ba9576101a052610120516101c052610140516101e0526101605161020052506101a0905080516102205260208101516102405260408101516102605260608101516102805250610220516080526102405160a0526102605160c0526102805160e0526080516101005260a0516101205260c0516101405260e051610160526080610100f35b634e228d008114600336111615611ba557602436103417611ba9576004358060a01c611ba957604052335f6060525f600154600a8111611ba957801561135357905b80600201548318611348576001606052611353565b600101818118611333575b505060605190506113ff576020806101005260226080527f6f6e6c79206775617264732063616e2063616c6c20746869732066756e63746960a0527f6f6e00000000000000000000000000000000000000000000000000000000000060c0526080816101000160208251018082828560045afa50508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a060e0528060040160fcfd5b60405160016060525f600154600a8111611ba957801561143a57905b8060020154831861142f575f60605261143a565b60010181811861141b575b505060605190506114e6576020806101005260236080527f70726576656e7420746f20616464207468652073616d6520677561726420747760a0527f696365000000000000000000000000000000000000000000000000000000000060c0526080816101000160208251018082828560045afa50508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a060e0528060040160fcfd5b60015460098111611ba957604051816002015560018101600155507f3e9a60df14f366987009f7cee8051d7e7feacc98635d51b8bd15ef69d41f430c6040516060524260805260406060a1005b636d484f028118611ba557602436103417611ba9576004358060a01c611ba957604052335f6060525f600154600a8111611ba957801561158f57905b8060020154831861158457600160605261158f565b60010181811861156f575b5050606051905061163b576020806101005260226080527f6f6e6c79206775617264732063616e2063616c6c20746869732066756e63746960a0527f6f6e00000000000000000000000000000000000000000000000000000000000060c0526080816101000160208251018082828560045afa50508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a060e0528060040160fcfd5b60405160016060525f600f54600a8111611ba957801561167657905b8060100154831861166b575f606052611676565b600101818118611657575b50506060519050611722576020806101005260296080527f70726576656e7420746f20616464207468652073616d6520646973747269627560a0527f746f72207477696365000000000000000000000000000000000000000000000060c0526080816101000160208251018082828560045afa50508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a060e0528060040160fcfd5b600f5460098111611ba957604051816010015560018101600f55507fa5babb86a45dcaf11bfb2fb70a03b04ce046203b581637539f567d01f6e8c6836040516060524260805260406060a1005b636b701e088118611ba557602436103417611ba957600435600401803560808111611ba95750602081350180826040375050335f60e0525f600154600a8111611ba95780156117da57905b806002015483186117cf57600160e0526117da565b6001018181186117ba575b505060e051905061188c57602080610180526022610100527f6f6e6c79206775617264732063616e2063616c6c20746869732066756e637469610120527f6f6e00000000000000000000000000000000000000000000000000000000000061014052610100816101800160208251018082828560045afa50508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506308c379a0610160528060040161017cfd5b6020604051015f81601f0160051c60058111611ba95780156118c257905b8060051b6040015181602701556001018181186118aa575b5050507f44c7675c33fb3171221cbc9737b814ed69b382282d908eefc7354c55f49deddc60408060e0528060e001602060405101808282604060045afa50508051806020830101601f825f03163682375050601f19601f82516020010116905081019050426101005260e0a1005b63138cd3a881186119955734611ba957602080604052806040015f601a548083528060051b5f82600a8111611ba957801561198157905b80601b01548160051b602088010152600101818118611967575b505082016020019150509050810190506040f35b63375069408118611ba55734611ba957602080604052806040015f6001548083528060051b5f82600a8111611ba95780156119e657905b80600201548160051b6020880101526001018181186119cc575b505082016020019150509050810190506040f35b63c74fc0778118611ba557602436103417611ba957600435600154811015611ba9576002015460405260206040f35b63a4bbaa4d8118611ba557602436103417611ba957600435600c54811015611ba957600d015460405260206040f35b6350b492ba8118611ba557602436103417611ba957600435600f54811015611ba9576010015460405260206040f35b63092040a78118611ab657602436103417611ba957600435601a54811015611ba957601b015460405260206040f35b63329b7b9d8118611ba55734611ba9576020611beb60403960206040f35b631fda3a218118611ba55734611ba95760255460405260206040f35b63be225ddb8118611ba55734611ba95760265460405260206040f35b63e4c8f3fb8118611ba55734611ba9576020611c0b60403960206040f35b6306fdde038118611ba55734611ba957602080604052806040016020602754015f81601f0160051c60058111611ba9578015611b7957905b80602701548160051b850152600101818118611b62575b5050508051806020830101601f825f03163682375050601f19601f825160200101169050810190506040f35b5f5ffd5b5f80fd00181ba51a291ad41ba51ba519fa00561ba51ba51af015331b0c1ba5176f05451ba51ba51a581a8705871ba519300abb097b1b2a11e71ba50bfb1ba51ba50000000000000000000000006c9578402a3ace046a12839f45f84aa5448e9c30000000000000000000000000ec5afc9590964f2fa0feed54f0fbb2a34480908d

Block Transaction 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
[ 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.