ETH Price: $3,673.05 (+1.00%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Bridge215073122024-12-29 9:44:117 days ago1735465451IN
0x9A9ed067...a7a2D3151
0 ETH0.000157273.76560322
Bridge214330552024-12-19 0:40:3518 days ago1734568835IN
0x9A9ed067...a7a2D3151
0 ETH0.0004938410.61328866
Bridge214198802024-12-17 4:31:4719 days ago1734409907IN
0x9A9ed067...a7a2D3151
0 ETH0.000460349.88554981
Bridge213514962024-12-07 15:25:5929 days ago1733585159IN
0x9A9ed067...a7a2D3151
0 ETH0.0006723114.43757295
Bridge213504702024-12-07 11:59:1129 days ago1733572751IN
0x9A9ed067...a7a2D3151
0 ETH0.0005200911.1716813
Bridge213356532024-12-05 10:19:2331 days ago1733393963IN
0x9A9ed067...a7a2D3151
0 ETH0.0009435222.59029381
Bridge213355942024-12-05 10:07:2331 days ago1733393243IN
0x9A9ed067...a7a2D3151
0 ETH0.0010855525.9982813
Bridge213349372024-12-05 7:55:2331 days ago1733385323IN
0x9A9ed067...a7a2D3151
0 ETH0.0008994319.33487486
Bridge213315122024-12-04 20:25:5932 days ago1733343959IN
0x9A9ed067...a7a2D3151
0 ETH0.001603738.40760607
Bridge213241472024-12-03 19:44:3533 days ago1733255075IN
0x9A9ed067...a7a2D3151
0 ETH0.001216629.1282851
Bridge213197802024-12-03 5:06:4733 days ago1733202407IN
0x9A9ed067...a7a2D3151
0 ETH0.000824416.05673864
Bridge213133432024-12-02 7:29:5934 days ago1733124599IN
0x9A9ed067...a7a2D3151
0 ETH0.0005352712.8156862
Bridge212892942024-11-28 22:51:2338 days ago1732834283IN
0x9A9ed067...a7a2D3151
0 ETH0.000395447.70387386
Bridge212841742024-11-28 5:36:5938 days ago1732772219IN
0x9A9ed067...a7a2D3151
0 ETH0.0004826410.36719777
Bridge212841462024-11-28 5:30:1138 days ago1732771811IN
0x9A9ed067...a7a2D3151
0 ETH0.00041488.90776786
Bridge212815132024-11-27 20:36:4739 days ago1732739807IN
0x9A9ed067...a7a2D3151
0 ETH0.0011107223.87679663
Bridge212654602024-11-25 14:46:3541 days ago1732545995IN
0x9A9ed067...a7a2D3151
0 ETH0.0014207727.68518646
Bridge212603522024-11-24 21:40:4742 days ago1732484447IN
0x9A9ed067...a7a2D3151
0 ETH0.000416958.95846453
Set Fees212596812024-11-24 19:25:4742 days ago1732476347IN
0x9A9ed067...a7a2D3151
0 ETH0.000291279.08179059
Bridge212517852024-11-23 16:58:2343 days ago1732381103IN
0x9A9ed067...a7a2D3151
0 ETH0.0008927720.03228846
Bridge208943352024-10-04 19:44:4793 days ago1728071087IN
0x9A9ed067...a7a2D3151
0 ETH0.0005161311.5811376
Bridge208577352024-09-29 17:17:1198 days ago1727630231IN
0x9A9ed067...a7a2D3151
0 ETH0.0005225910.58595045
Bridge208510222024-09-28 18:47:3599 days ago1727549255IN
0x9A9ed067...a7a2D3151
0 ETH0.000261895.30506331
Bridge207830042024-09-19 6:59:47108 days ago1726729187IN
0x9A9ed067...a7a2D3151
0 ETH0.0005536911.2159098
Bridge207795552024-09-18 19:25:47109 days ago1726687547IN
0x9A9ed067...a7a2D3151
0 ETH0.0008097916.4109706
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ManualBridge

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license
File 1 of 5 : ManualBridge.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.13;

import "IManualBridge.sol";
import "Ownable.sol";
import "IERC20.sol";

// This is a totally centralized (ie not trustless) manual bridge contract for DFP2
// bridging between Ethereum and Radix. Requires trust in contract owner.
contract ManualBridge is IManualBridge, Ownable {
  IERC20 constant token = IERC20(0x2F57430a6ceDA85a67121757785877b4a71b8E6D);

  uint16 constant UNLOCKED = 0x0000;
  uint16 constant LOCKED = 0x0001;
  address admin;

  Config public bridgeConfig = Config({
    locked: LOCKED,                     // 2nd bit is admin lock
    forwardBaseFee: 100,                // Base fee
    forwardFeeFraction: 655,            // Approximately 1%
    backwardBaseFee: 500,               // Base fee
    backwardFeeFraction: 655,           // Approximately 1%
    totalFees: 0                        // Total fees collected
  });

  constructor(){
    admin = 0x3C7791728AdCA8C8ca5A46d6170a9c1fd24408e2;
  }

  // used for bridge (un)lock functions which may only be called by admin or owner
  modifier onlyAdmin() {
    if (msg.sender != admin && msg.sender != owner()) { revert AdminRightsRequired(); }
    _;
  }

  /**
   * @inheritdoc IManualBridge
   */
  function bridge(
    uint256 inputAmount,
    bytes32[2] calldata radixAddress
  ) external override
  {
    Config storage c = bridgeConfig;
    if (c.locked == LOCKED) { revert BridgeLocked(); }
    if (inputAmount <= c.forwardBaseFee) { revert InsufficientInput(); }
    if (token.transferFrom(msg.sender, address(this), inputAmount) != true) { revert TokenTransferFailure(); }

    uint256 baseFee = uint256(c.forwardBaseFee) * 10**18;
    uint256 fractionalFee = (inputAmount * c.forwardFeeFraction) >> 16;
    uint256 fee = baseFee > fractionalFee ? baseFee : fractionalFee;
    c.totalFees += uint96(fee);

    emit Bridged(msg.sender, inputAmount - fee, fee, radixAddress);
  }

  /**
   * @notice Bridge tokens back from Radix to Ethereum. Release these tokens to the user.
   * @param inputAmount Amount of tokens bridged back to Ethereum.
   * @param destination Address of the user to receive the funds.
   * @param radixHash Transaction on the Radix network removing supply on Radix.
   */
  function release(
    uint256 inputAmount,
    address destination,
    bytes32[2] calldata radixHash
  ) external onlyOwner()
  {
    Config storage c = bridgeConfig;
    if (c.locked == LOCKED) { revert BridgeLocked(); }
    if (inputAmount <= c.backwardBaseFee) { revert InsufficientInput(); }

    uint256 baseFee = uint256(c.backwardBaseFee) * 10**18;
    uint256 fractionalFee = (inputAmount * c.backwardFeeFraction) >> 16;
    uint256 fee = baseFee > fractionalFee ? baseFee : fractionalFee;
    c.totalFees += uint96(fee);

    if (token.transfer(destination, inputAmount - fee) != true) { revert TokenTransferFailure(); }
    emit Released(destination, inputAmount - fee, fee, radixHash);
  }

  /**
   * @notice Sets admin address for emergency exchange locking.
   * @dev Can only be called by the owner of the contract.
   * @param adminAddress Address of the admin to set
   */
  function setAdmin(address adminAddress) external onlyOwner() {
    admin = adminAddress;
    emit AdminChanged(adminAddress);
  }

  /**
   * @notice Sets exchange lock, under which swap and liquidity add (but not remove) are disabled.
   * @dev Can only be called by the admin of the contract.
   */
  function lockBridge() external onlyAdmin() {
    bridgeConfig.locked = LOCKED;
    emit LockChanged(msg.sender, bridgeConfig.locked);
  }

  /**
   * @notice Resets exchange lock.
   * @dev Can only be called by the admin of the contract.
   */
  function unlockBridge() external onlyAdmin() {
    bridgeConfig.locked = UNLOCKED;
    emit LockChanged(msg.sender, bridgeConfig.locked);
  }

  /**
   * @notice Updates bridge fees.
   * @param newForwardBaseFee New forward base fee level in whole tokens
   * @param newForwardFeeFraction New forward fractional fee (times 2^-16)
   * @param newBackwardBaseFee New backward base fee level in whole tokens
   * @param newBackwardFeeFraction New backward fractional fee (times 2^-16)
   */
  function setFees(
    uint16 newForwardBaseFee,
    uint16 newForwardFeeFraction,
    uint16 newBackwardBaseFee,
    uint16 newBackwardFeeFraction
  ) external onlyOwner()
  {
    Config storage c = bridgeConfig;
    c.forwardBaseFee = newForwardBaseFee;
    c.forwardFeeFraction = newForwardFeeFraction;
    c.backwardBaseFee = newBackwardBaseFee;
    c.backwardFeeFraction = newBackwardFeeFraction;

    emit ConfigUpdated(c);
  }

  /**
   * @notice Claims fees collected by the bridge and transfers to selected address
   * @param destination Address that the fees will be transferred to
   */
  function claimFees(address destination) external onlyOwner() {
    Config storage c = bridgeConfig;
    uint256 totalFees = uint256(c.totalFees);
    if (token.transfer(destination, totalFees) != true) { revert TokenTransferFailure(); }
    c.totalFees = 0;

    emit FeesClaimed(totalFees);
  }
}

File 2 of 5 : IManualBridge.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.6.0;

/**
 * @title ManualBridge interface
 * @author Jazzer9F
 */
interface IManualBridge {
  error AdminRightsRequired();
  error TokenTransferFailure();
  error InsufficientInput();
  error BridgeLocked();

  // bridge configuration
  struct Config {
    uint16 locked;                    // variable to keep track of whether the exchnage is locked
    uint16 forwardBaseFee;            // base fee level in # of whole tokens
    uint16 forwardFeeFraction;        // variable part of fee
    uint16 backwardBaseFee;           // base fee level in # of whole tokens
    uint16 backwardFeeFraction;       // variable part of fee
    uint96 totalFees;                 // total fees currently held by the contract
  }

 /**
  * @notice Bridge the token towards Radix. Forwards the tokens to the team address.
  * @param amountToBridge Amount of tokens to bridge to Radix
  * @param radixAddress Address on the Radix public network that tokens should be sent to
  */
  function bridge(
    uint256 amountToBridge,
    bytes32[2] calldata radixAddress
  ) external;

 /**
  * @notice Emit Bridged event when tokens are bridged to the Radix network
  * @param source Address of the caller
  * @param netAmountBridged Amount of tokens sent to the Radix network (held in team wallet)
  * @param feePayed Fee withheld from the bridged amount
  * @param radixAddress The address on the Radix network that the tokens are to be sent to
  */
  event Bridged(
    address source,
    uint256 netAmountBridged,
    uint256 feePayed,
    bytes32[2] radixAddress
  );

  /**
   * @notice Emit Released event when tokens are bridged back from the Radix network
   * @param destination Address of the bridge user
   * @param radixHash Transaction on Radix network paying for this release
   * @param feePayed Amount of fee payed
   * @param amountReleased Amount of DFP2 released to the user
   */
  event Released(
    address destination,
    uint256 amountReleased,
    uint256 feePayed,
    bytes32[2] radixHash
  );

  /**
   * @notice Emit adminChanged event when the bridge config (ie fees) is updated.
   * @param newConfig The updated config struct
   */
  event ConfigUpdated(
    Config newConfig
  );

  /**
   * @notice Emit adminChanged event when the exchange admin address is changed
   * @param newAdmin Address of new admin, who can (un)lock the exchange
   */
  event AdminChanged(
    address newAdmin
  );

  /**
   * @notice Emit LockChanged event when the exchange is (un)locked by an admin
   * @param exchangeAdmin Address of the admin making the change
   * @param newLockValue The updated value of the lock variable
   */
  event LockChanged(
    address exchangeAdmin,
    uint256 newLockValue
  );

  /**
   * @notice Emit FeesClaimed when the fees collected by the bridge are claimed by the owner
   * @param amountClaimed Amount of fees withdrawn. This is always the total amount of fees collected until now.
   */
  event FeesClaimed(
    uint256 amountClaimed
  );
}

File 3 of 5 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;

import "Context.sol";

/**
 * @dev Contract module which provides 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 {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 4 of 5 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

File 5 of 5 : IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `from` to `to` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

Settings
{
  "evmVersion": "istanbul",
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "libraries": {
    "ManualBridge.sol": {}
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AdminRightsRequired","type":"error"},{"inputs":[],"name":"BridgeLocked","type":"error"},{"inputs":[],"name":"InsufficientInput","type":"error"},{"inputs":[],"name":"TokenTransferFailure","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"source","type":"address"},{"indexed":false,"internalType":"uint256","name":"netAmountBridged","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"feePayed","type":"uint256"},{"indexed":false,"internalType":"bytes32[2]","name":"radixAddress","type":"bytes32[2]"}],"name":"Bridged","type":"event"},{"anonymous":false,"inputs":[{"components":[{"internalType":"uint16","name":"locked","type":"uint16"},{"internalType":"uint16","name":"forwardBaseFee","type":"uint16"},{"internalType":"uint16","name":"forwardFeeFraction","type":"uint16"},{"internalType":"uint16","name":"backwardBaseFee","type":"uint16"},{"internalType":"uint16","name":"backwardFeeFraction","type":"uint16"},{"internalType":"uint96","name":"totalFees","type":"uint96"}],"indexed":false,"internalType":"struct IManualBridge.Config","name":"newConfig","type":"tuple"}],"name":"ConfigUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountClaimed","type":"uint256"}],"name":"FeesClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"exchangeAdmin","type":"address"},{"indexed":false,"internalType":"uint256","name":"newLockValue","type":"uint256"}],"name":"LockChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"destination","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountReleased","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"feePayed","type":"uint256"},{"indexed":false,"internalType":"bytes32[2]","name":"radixHash","type":"bytes32[2]"}],"name":"Released","type":"event"},{"inputs":[{"internalType":"uint256","name":"inputAmount","type":"uint256"},{"internalType":"bytes32[2]","name":"radixAddress","type":"bytes32[2]"}],"name":"bridge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"bridgeConfig","outputs":[{"internalType":"uint16","name":"locked","type":"uint16"},{"internalType":"uint16","name":"forwardBaseFee","type":"uint16"},{"internalType":"uint16","name":"forwardFeeFraction","type":"uint16"},{"internalType":"uint16","name":"backwardBaseFee","type":"uint16"},{"internalType":"uint16","name":"backwardFeeFraction","type":"uint16"},{"internalType":"uint96","name":"totalFees","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"destination","type":"address"}],"name":"claimFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lockBridge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"inputAmount","type":"uint256"},{"internalType":"address","name":"destination","type":"address"},{"internalType":"bytes32[2]","name":"radixHash","type":"bytes32[2]"}],"name":"release","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adminAddress","type":"address"}],"name":"setAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"newForwardBaseFee","type":"uint16"},{"internalType":"uint16","name":"newForwardFeeFraction","type":"uint16"},{"internalType":"uint16","name":"newBackwardBaseFee","type":"uint16"},{"internalType":"uint16","name":"newBackwardFeeFraction","type":"uint16"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unlockBridge","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6101406040526001608052606460a05261028f60c08190526101f460e05261010052600061012052600280546001600160b01b03191669028f01f4028f0064000117905534801561004f57600080fd5b5061005933610084565b600180546001600160a01b031916733c7791728adca8c8ca5a46d6170a9c1fd24408e21790556100d4565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610d63806100e36000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c8063704b6c0211610071578063704b6c0214610184578063715018a6146101975780638da5cb5b1461019f578063b198491b146101ba578063e0905d0f146101cd578063f2fde38b146101d557600080fd5b806315a0ea6a146100ae578063235e5199146100c357806342f7723f146101565780634b2f2b82146101695780635dd4604014610171575b600080fd5b6100c16100bc366004610b23565b6101e8565b005b60025461010b9061ffff808216916201000081048216916401000000008204811691600160301b8104821691600160401b82041690600160501b90046001600160601b031686565b6040805161ffff9788168152958716602087015293861693850193909352908416606084015290921660808201526001600160601b0390911660a082015260c0015b60405180910390f35b6100c1610164366004610b57565b610326565b6100c1610436565b6100c161017f366004610bc2565b6104c8565b6100c1610192366004610b23565b6106f9565b6100c1610777565b6000546040516001600160a01b03909116815260200161014d565b6100c16101c8366004610bff565b6107ad565b6100c1610997565b6100c16101e3366004610b23565b610a1c565b6000546001600160a01b0316331461021b5760405162461bcd60e51b815260040161021290610c2c565b60405180910390fd5b6002805460405163a9059cbb60e01b81526001600160a01b0384166004820152600160501b9091046001600160601b03166024820181905290732f57430a6ceda85a67121757785877b4a71b8e6d9063a9059cbb906044016020604051808303816000875af1158015610292573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102b69190610c61565b15156001146102d85760405163cdf44a9760e01b815260040160405180910390fd5b81546bffffffffffffffffffffffff60501b191682556040518181527f83db9dc084973306ecd0b0f10cb495b81dd9ddcc135eb7934d2723bcabc8f4c39060200160405180910390a1505050565b6000546001600160a01b031633146103505760405162461bcd60e51b815260040161021290610c2c565b6002805465ffffffff000019166201000061ffff8781169190910265ffff00000000191691909117640100000000868316021769ffffffff0000000000001916600160301b8583160269ffff0000000000000000191617600160401b8483160217808355604080518284168152601083901c841660208083019190915283901c841681830152603083901c841660608201529082901c90921660808301526001600160601b0360509190911c1660a08201527f286ac0c0c9341d7f610b0e794c81f3a5eda340d544745bc744ee6fafb34f54489060c00160405180910390a15050505050565b6001546001600160a01b0316331480159061045c57506000546001600160a01b03163314155b1561047a57604051639c60c1ef60e01b815260040160405180910390fd5b6002805461ffff191660019081179091556040805133815260208101929092527f57c0a369a1527577385e79bbeda6dcfb6bf51dad991efc02e392f31b5533f2a791015b60405180910390a1565b6000546001600160a01b031633146104f25760405162461bcd60e51b815260040161021290610c2c565b6002805461ffff166000190161051b5760405163107c757f60e31b815260040160405180910390fd5b8054600160301b900461ffff1684116105475760405163f8b3bb6160e01b815260040160405180910390fd5b805460009061056990600160301b900461ffff16670de0b6b3a7640000610c99565b825490915060009060109061058990600160401b900461ffff1688610c99565b901c9050600081831161059c578161059e565b825b845490915081908590600a906105c5908490600160501b90046001600160601b0316610cb8565b92506101000a8154816001600160601b0302191690836001600160601b03160217905550732f57430a6ceda85a67121757785877b4a71b8e6d6001600160a01b031663a9059cbb87838a6106199190610ce3565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610664573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106889190610c61565b15156001146106aa5760405163cdf44a9760e01b815260040160405180910390fd5b7fac784ad6cb124e5b144179a16598aebde68d4baecd870febab23c557e47878b7866106d6838a610ce3565b83886040516106e89493929190610cfa565b60405180910390a150505050505050565b6000546001600160a01b031633146107235760405162461bcd60e51b815260040161021290610c2c565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527f7ce7ec0b50378fb6c0186ffb5f48325f6593fcb4ca4386f21861af3129188f5c9060200160405180910390a150565b6000546001600160a01b031633146107a15760405162461bcd60e51b815260040161021290610c2c565b6107ab6000610ab7565b565b6002805461ffff16600019016107d65760405163107c757f60e31b815260040160405180910390fd5b805462010000900461ffff1683116108015760405163f8b3bb6160e01b815260040160405180910390fd5b6040516323b872dd60e01b815233600482015230602482015260448101849052732f57430a6ceda85a67121757785877b4a71b8e6d906323b872dd906064016020604051808303816000875af115801561085f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108839190610c61565b15156001146108a55760405163cdf44a9760e01b815260040160405180910390fd5b80546000906108c69062010000900461ffff16670de0b6b3a7640000610c99565b82549091506000906010906108e790640100000000900461ffff1687610c99565b901c905060008183116108fa57816108fc565b825b845490915081908590600a90610923908490600160501b90046001600160601b0316610cb8565b92506101000a8154816001600160601b0302191690836001600160601b031602179055507f844454dc35c9340088789e5c4bb6ff14fe14e1597769b37f5c9a7fab41fefb7d3382886109759190610ce3565b83886040516109879493929190610cfa565b60405180910390a1505050505050565b6001546001600160a01b031633148015906109bd57506000546001600160a01b03163314155b156109db57604051639c60c1ef60e01b815260040160405180910390fd5b6002805461ffff1916905560408051338152600060208201527f57c0a369a1527577385e79bbeda6dcfb6bf51dad991efc02e392f31b5533f2a791016104be565b6000546001600160a01b03163314610a465760405162461bcd60e51b815260040161021290610c2c565b6001600160a01b038116610aab5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610212565b610ab481610ab7565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80356001600160a01b0381168114610b1e57600080fd5b919050565b600060208284031215610b3557600080fd5b610b3e82610b07565b9392505050565b803561ffff81168114610b1e57600080fd5b60008060008060808587031215610b6d57600080fd5b610b7685610b45565b9350610b8460208601610b45565b9250610b9260408601610b45565b9150610ba060608601610b45565b905092959194509250565b8060408101831015610bbc57600080fd5b92915050565b600080600060808486031215610bd757600080fd5b83359250610be760208501610b07565b9150610bf68560408601610bab565b90509250925092565b60008060608385031215610c1257600080fd5b82359150610c238460208501610bab565b90509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060208284031215610c7357600080fd5b81518015158114610b3e57600080fd5b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615610cb357610cb3610c83565b500290565b60006001600160601b03808316818516808303821115610cda57610cda610c83565b01949350505050565b600082821015610cf557610cf5610c83565b500390565b6001600160a01b038516815260208101849052604080820184905260a0820190836060840137600081529594505050505056fea26469706673582212200be5d87679d52d8a206efad305be9f8da3b6cd415798fda18b90d8a921c921d264736f6c634300080d0033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100a95760003560e01c8063704b6c0211610071578063704b6c0214610184578063715018a6146101975780638da5cb5b1461019f578063b198491b146101ba578063e0905d0f146101cd578063f2fde38b146101d557600080fd5b806315a0ea6a146100ae578063235e5199146100c357806342f7723f146101565780634b2f2b82146101695780635dd4604014610171575b600080fd5b6100c16100bc366004610b23565b6101e8565b005b60025461010b9061ffff808216916201000081048216916401000000008204811691600160301b8104821691600160401b82041690600160501b90046001600160601b031686565b6040805161ffff9788168152958716602087015293861693850193909352908416606084015290921660808201526001600160601b0390911660a082015260c0015b60405180910390f35b6100c1610164366004610b57565b610326565b6100c1610436565b6100c161017f366004610bc2565b6104c8565b6100c1610192366004610b23565b6106f9565b6100c1610777565b6000546040516001600160a01b03909116815260200161014d565b6100c16101c8366004610bff565b6107ad565b6100c1610997565b6100c16101e3366004610b23565b610a1c565b6000546001600160a01b0316331461021b5760405162461bcd60e51b815260040161021290610c2c565b60405180910390fd5b6002805460405163a9059cbb60e01b81526001600160a01b0384166004820152600160501b9091046001600160601b03166024820181905290732f57430a6ceda85a67121757785877b4a71b8e6d9063a9059cbb906044016020604051808303816000875af1158015610292573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102b69190610c61565b15156001146102d85760405163cdf44a9760e01b815260040160405180910390fd5b81546bffffffffffffffffffffffff60501b191682556040518181527f83db9dc084973306ecd0b0f10cb495b81dd9ddcc135eb7934d2723bcabc8f4c39060200160405180910390a1505050565b6000546001600160a01b031633146103505760405162461bcd60e51b815260040161021290610c2c565b6002805465ffffffff000019166201000061ffff8781169190910265ffff00000000191691909117640100000000868316021769ffffffff0000000000001916600160301b8583160269ffff0000000000000000191617600160401b8483160217808355604080518284168152601083901c841660208083019190915283901c841681830152603083901c841660608201529082901c90921660808301526001600160601b0360509190911c1660a08201527f286ac0c0c9341d7f610b0e794c81f3a5eda340d544745bc744ee6fafb34f54489060c00160405180910390a15050505050565b6001546001600160a01b0316331480159061045c57506000546001600160a01b03163314155b1561047a57604051639c60c1ef60e01b815260040160405180910390fd5b6002805461ffff191660019081179091556040805133815260208101929092527f57c0a369a1527577385e79bbeda6dcfb6bf51dad991efc02e392f31b5533f2a791015b60405180910390a1565b6000546001600160a01b031633146104f25760405162461bcd60e51b815260040161021290610c2c565b6002805461ffff166000190161051b5760405163107c757f60e31b815260040160405180910390fd5b8054600160301b900461ffff1684116105475760405163f8b3bb6160e01b815260040160405180910390fd5b805460009061056990600160301b900461ffff16670de0b6b3a7640000610c99565b825490915060009060109061058990600160401b900461ffff1688610c99565b901c9050600081831161059c578161059e565b825b845490915081908590600a906105c5908490600160501b90046001600160601b0316610cb8565b92506101000a8154816001600160601b0302191690836001600160601b03160217905550732f57430a6ceda85a67121757785877b4a71b8e6d6001600160a01b031663a9059cbb87838a6106199190610ce3565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610664573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106889190610c61565b15156001146106aa5760405163cdf44a9760e01b815260040160405180910390fd5b7fac784ad6cb124e5b144179a16598aebde68d4baecd870febab23c557e47878b7866106d6838a610ce3565b83886040516106e89493929190610cfa565b60405180910390a150505050505050565b6000546001600160a01b031633146107235760405162461bcd60e51b815260040161021290610c2c565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527f7ce7ec0b50378fb6c0186ffb5f48325f6593fcb4ca4386f21861af3129188f5c9060200160405180910390a150565b6000546001600160a01b031633146107a15760405162461bcd60e51b815260040161021290610c2c565b6107ab6000610ab7565b565b6002805461ffff16600019016107d65760405163107c757f60e31b815260040160405180910390fd5b805462010000900461ffff1683116108015760405163f8b3bb6160e01b815260040160405180910390fd5b6040516323b872dd60e01b815233600482015230602482015260448101849052732f57430a6ceda85a67121757785877b4a71b8e6d906323b872dd906064016020604051808303816000875af115801561085f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108839190610c61565b15156001146108a55760405163cdf44a9760e01b815260040160405180910390fd5b80546000906108c69062010000900461ffff16670de0b6b3a7640000610c99565b82549091506000906010906108e790640100000000900461ffff1687610c99565b901c905060008183116108fa57816108fc565b825b845490915081908590600a90610923908490600160501b90046001600160601b0316610cb8565b92506101000a8154816001600160601b0302191690836001600160601b031602179055507f844454dc35c9340088789e5c4bb6ff14fe14e1597769b37f5c9a7fab41fefb7d3382886109759190610ce3565b83886040516109879493929190610cfa565b60405180910390a1505050505050565b6001546001600160a01b031633148015906109bd57506000546001600160a01b03163314155b156109db57604051639c60c1ef60e01b815260040160405180910390fd5b6002805461ffff1916905560408051338152600060208201527f57c0a369a1527577385e79bbeda6dcfb6bf51dad991efc02e392f31b5533f2a791016104be565b6000546001600160a01b03163314610a465760405162461bcd60e51b815260040161021290610c2c565b6001600160a01b038116610aab5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610212565b610ab481610ab7565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80356001600160a01b0381168114610b1e57600080fd5b919050565b600060208284031215610b3557600080fd5b610b3e82610b07565b9392505050565b803561ffff81168114610b1e57600080fd5b60008060008060808587031215610b6d57600080fd5b610b7685610b45565b9350610b8460208601610b45565b9250610b9260408601610b45565b9150610ba060608601610b45565b905092959194509250565b8060408101831015610bbc57600080fd5b92915050565b600080600060808486031215610bd757600080fd5b83359250610be760208501610b07565b9150610bf68560408601610bab565b90509250925092565b60008060608385031215610c1257600080fd5b82359150610c238460208501610bab565b90509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060208284031215610c7357600080fd5b81518015158114610b3e57600080fd5b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615610cb357610cb3610c83565b500290565b60006001600160601b03808316818516808303821115610cda57610cda610c83565b01949350505050565b600082821015610cf557610cf5610c83565b500390565b6001600160a01b038516815260208101849052604080820184905260a0820190836060840137600081529594505050505056fea26469706673582212200be5d87679d52d8a206efad305be9f8da3b6cd415798fda18b90d8a921c921d264736f6c634300080d0033

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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