xDAI Price: $1.00 (+0.01%)
Gas: 1.1 GWei

Contract

0xD422E0059eD819E8D792Af936da206878188e34F

Overview

xDAI Balance

Gnosis Chain LogoGnosis Chain LogoGnosis Chain Logo0 xDAI

xDAI Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Send Message380542172025-01-15 12:59:206 days ago1736945960IN
0xD422E005...78188e34F
0.00001 xDAI0.000197351
Send Message380527702025-01-15 10:54:506 days ago1736938490IN
0xD422E005...78188e34F
0.00001 xDAI0.000197471
Pop Next Message380399152025-01-14 16:26:256 days ago1736871985IN
0xD422E005...78188e34F
0 xDAI0.000054981
Send Message380226302025-01-13 15:32:107 days ago1736782330IN
0xD422E005...78188e34F
0.00001 xDAI0.000220461
Pop Next Message380226232025-01-13 15:31:357 days ago1736782295IN
0xD422E005...78188e34F
0 xDAI0.000054981
Pop Next Message380226222025-01-13 15:31:307 days ago1736782290IN
0xD422E005...78188e34F
0 xDAI0.000054981
Send Message380226132025-01-13 15:30:457 days ago1736782245IN
0xD422E005...78188e34F
0.00001 xDAI0.000220421
Send Message380226092025-01-13 15:30:257 days ago1736782225IN
0xD422E005...78188e34F
0.00001 xDAI0.000220221
Pop Next Message380225892025-01-13 15:28:407 days ago1736782120IN
0xD422E005...78188e34F
0 xDAI0.000059391
Send Message380225802025-01-13 15:27:507 days ago1736782070IN
0xD422E005...78188e34F
0.00001 xDAI0.000220461
Send Message380225772025-01-13 15:27:357 days ago1736782055IN
0xD422E005...78188e34F
0.00001 xDAI0.000220271
Pop Next Message380225562025-01-13 15:25:507 days ago1736781950IN
0xD422E005...78188e34F
0 xDAI0.000054981
Send Message380225452025-01-13 15:24:557 days ago1736781895IN
0xD422E005...78188e34F
0.00001 xDAI0.000243341
Send Message380225292025-01-13 15:23:358 days ago1736781815IN
0xD422E005...78188e34F
0.00001 xDAI0.000220461
Pop Next Message380225222025-01-13 15:23:008 days ago1736781780IN
0xD422E005...78188e34F
0 xDAI0.000054981
Pop Next Message380225212025-01-13 15:22:558 days ago1736781775IN
0xD422E005...78188e34F
0 xDAI0.000054981
Send Message380225102025-01-13 15:21:558 days ago1736781715IN
0xD422E005...78188e34F
0.00001 xDAI0.000220221
Send Message380224942025-01-13 15:20:358 days ago1736781635IN
0xD422E005...78188e34F
0.00001 xDAI0.000220371
Send Message380224592025-01-13 15:17:358 days ago1736781455IN
0xD422E005...78188e34F
0.00001 xDAI0.000220461
Pop Next Message380224462025-01-13 15:16:308 days ago1736781390IN
0xD422E005...78188e34F
0 xDAI0.000054981
Send Message380224332025-01-13 15:15:258 days ago1736781325IN
0xD422E005...78188e34F
0.00001 xDAI0.000220321
Send Message380224232025-01-13 15:14:308 days ago1736781270IN
0xD422E005...78188e34F
0.00001 xDAI0.000220381
Pop Next Message380224022025-01-13 15:12:408 days ago1736781160IN
0xD422E005...78188e34F
0 xDAI0.000059391
Send Message380223892025-01-13 15:11:358 days ago1736781095IN
0xD422E005...78188e34F
0.00001 xDAI0.000220421
Send Message380223892025-01-13 15:11:358 days ago1736781095IN
0xD422E005...78188e34F
0.00001 xDAI0.000220251
View all transactions

Latest 25 internal transactions (View All)

Parent Transaction Hash Block From To
380542172025-01-15 12:59:206 days ago1736945960
0xD422E005...78188e34F
0.000003 xDAI
380542172025-01-15 12:59:206 days ago1736945960
0xD422E005...78188e34F
0.000007 xDAI
380527702025-01-15 10:54:506 days ago1736938490
0xD422E005...78188e34F
0.000003 xDAI
380527702025-01-15 10:54:506 days ago1736938490
0xD422E005...78188e34F
0.000007 xDAI
380226302025-01-13 15:32:107 days ago1736782330
0xD422E005...78188e34F
0.000003 xDAI
380226302025-01-13 15:32:107 days ago1736782330
0xD422E005...78188e34F
0.000007 xDAI
380226132025-01-13 15:30:457 days ago1736782245
0xD422E005...78188e34F
0.000003 xDAI
380226132025-01-13 15:30:457 days ago1736782245
0xD422E005...78188e34F
0.000007 xDAI
380226092025-01-13 15:30:257 days ago1736782225
0xD422E005...78188e34F
0.000003 xDAI
380226092025-01-13 15:30:257 days ago1736782225
0xD422E005...78188e34F
0.000007 xDAI
380225802025-01-13 15:27:507 days ago1736782070
0xD422E005...78188e34F
0.000003 xDAI
380225802025-01-13 15:27:507 days ago1736782070
0xD422E005...78188e34F
0.000007 xDAI
380225772025-01-13 15:27:357 days ago1736782055
0xD422E005...78188e34F
0.000003 xDAI
380225772025-01-13 15:27:357 days ago1736782055
0xD422E005...78188e34F
0.000007 xDAI
380225452025-01-13 15:24:557 days ago1736781895
0xD422E005...78188e34F
0.000003 xDAI
380225452025-01-13 15:24:557 days ago1736781895
0xD422E005...78188e34F
0.000007 xDAI
380225292025-01-13 15:23:358 days ago1736781815
0xD422E005...78188e34F
0.000003 xDAI
380225292025-01-13 15:23:358 days ago1736781815
0xD422E005...78188e34F
0.000007 xDAI
380225102025-01-13 15:21:558 days ago1736781715
0xD422E005...78188e34F
0.000003 xDAI
380225102025-01-13 15:21:558 days ago1736781715
0xD422E005...78188e34F
0.000007 xDAI
380224942025-01-13 15:20:358 days ago1736781635
0xD422E005...78188e34F
0.000003 xDAI
380224942025-01-13 15:20:358 days ago1736781635
0xD422E005...78188e34F
0.000007 xDAI
380224592025-01-13 15:17:358 days ago1736781455
0xD422E005...78188e34F
0.000003 xDAI
380224592025-01-13 15:17:358 days ago1736781455
0xD422E005...78188e34F
0.000007 xDAI
380224332025-01-13 15:15:258 days ago1736781325
0xD422E005...78188e34F
0.000003 xDAI
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
AgentCommunication

Compiler Version
v0.8.26+commit.8a97fa7a

Optimization Enabled:
Yes with 200 runs

Other Settings:
paris EvmVersion
File 1 of 5 : AgentCommunication.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.22;

import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
import "./DoubleEndedStructQueue.sol";

contract AgentCommunication is Ownable {
    address payable public treasury;
    uint256 public pctToTreasuryInBasisPoints; //70% becomes 7000

    error MessageNotSentByAgent();

    mapping(address => DoubleEndedStructQueue.Bytes32Deque) public queues;

    uint256 public minimumValueForSendingMessageInWei;

    event LogMessage(address indexed sender, address indexed agentAddress, bytes message, uint256 value);

    constructor(address payable _treasury, uint256 _pctToTreasuryInBasisPoints) Ownable(msg.sender) {
        treasury = _treasury;
        pctToTreasuryInBasisPoints = _pctToTreasuryInBasisPoints;
        minimumValueForSendingMessageInWei = 10000000000000; // 0.00001 xDAI
    }

    modifier mustPayMoreThanMinimum() {
        require(msg.value >= minimumValueForSendingMessageInWei, "Insufficient message value");
        _;
    }

    function adjustMinimumValueForSendingMessage(uint256 newValue) public onlyOwner {
        minimumValueForSendingMessageInWei = newValue;
    }

    function countMessages(address agentAddress) public view returns (uint256) {
        return DoubleEndedStructQueue.length(queues[agentAddress]);
    }

    // Private function to calculate the amounts
    function _calculateAmounts(uint256 totalValue) private view returns (uint256, uint256) {
        uint256 amountForTreasury = (totalValue * pctToTreasuryInBasisPoints) / 10000; // 10000 since basis points are used
        uint256 amountForAgent = totalValue - amountForTreasury;
        return (amountForTreasury, amountForAgent);
    }

    function sendMessage(address agentAddress, bytes memory message) public payable mustPayMoreThanMinimum {
        // split message value between treasury and agent
        (uint256 amountForTreasury, uint256 amountForAgent) = _calculateAmounts(msg.value);

        // Transfer the amounts
        (bool sentTreasury,) = treasury.call{value: amountForTreasury}("");
        require(sentTreasury, "Failed to send Ether");
        (bool sentAgent,) = payable(agentAddress).call{value: amountForAgent}("");
        require(sentAgent, "Failed to send Ether");

        DoubleEndedStructQueue.MessageContainer memory messageContainer =
            DoubleEndedStructQueue.MessageContainer(msg.sender, agentAddress, message, msg.value);
        DoubleEndedStructQueue.pushBack(queues[agentAddress], messageContainer);
        emit LogMessage(msg.sender, agentAddress, messageContainer.message, msg.value);
    }

    function getAtIndex(address agentAddress, uint256 idx)
        public
        view
        returns (DoubleEndedStructQueue.MessageContainer memory)
    {
        return DoubleEndedStructQueue.at(queues[agentAddress], idx);
    }

    function popNextMessage(address agentAddress) public returns (DoubleEndedStructQueue.MessageContainer memory) {
        if (msg.sender != agentAddress) {
            revert MessageNotSentByAgent();
        }
        DoubleEndedStructQueue.MessageContainer memory message = DoubleEndedStructQueue.popFront(queues[agentAddress]);
        emit LogMessage(message.sender, agentAddress, message.message, message.value);
        return message;
    }
}

File 2 of 5 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)

pragma solidity ^0.8.20;

import {Context} from "../utils/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.
 *
 * The initial owner is set to the address provided by the deployer. 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;

    /**
     * @dev The caller account is not authorized to perform an operation.
     */
    error OwnableUnauthorizedAccount(address account);

    /**
     * @dev The owner is not a valid owner account. (eg. `address(0)`)
     */
    error OwnableInvalidOwner(address owner);

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

    /**
     * @dev Initializes the contract setting the address provided by the deployer as the initial owner.
     */
    constructor(address initialOwner) {
        if (initialOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(initialOwner);
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        if (owner() != _msgSender()) {
            revert OwnableUnauthorizedAccount(_msgSender());
        }
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling 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 {
        if (newOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _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 3 of 5 : DoubleEndedStructQueue.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

import {Panic} from "@openzeppelin/contracts/utils/Panic.sol";

// Based on OpenZeppelin's DoubleEndedQueue, but with a custom struct as data type instead of bytes32.
// See https://docs.openzeppelin.com/contracts/5.x/api/utils#DoubleEndedQueue
library DoubleEndedStructQueue {
    struct MessageContainer {
        address sender;
        address recipient;
        bytes message;
        uint256 value;
    }

    struct Bytes32Deque {
        uint128 _begin;
        uint128 _end;
        mapping(uint128 index => MessageContainer) _data;
    }

    function pushBack(Bytes32Deque storage deque, MessageContainer memory container) internal {
        unchecked {
            uint128 backIndex = deque._end;
            if (backIndex + 1 == deque._begin) Panic.panic(Panic.RESOURCE_ERROR);
            deque._data[backIndex] = container;
            deque._end = backIndex + 1;
        }
    }

    function popBack(Bytes32Deque storage deque) internal returns (MessageContainer memory value) {
        unchecked {
            uint128 backIndex = deque._end;
            if (backIndex == deque._begin) Panic.panic(Panic.EMPTY_ARRAY_POP);
            --backIndex;
            value = deque._data[backIndex];
            delete deque._data[backIndex];
            deque._end = backIndex;
        }
    }

    function pushFront(Bytes32Deque storage deque, MessageContainer memory value) internal {
        unchecked {
            uint128 frontIndex = deque._begin - 1;
            if (frontIndex == deque._end) Panic.panic(Panic.RESOURCE_ERROR);
            deque._data[frontIndex] = value;
            deque._begin = frontIndex;
        }
    }

    function popFront(Bytes32Deque storage deque) internal returns (MessageContainer memory value) {
        unchecked {
            uint128 frontIndex = deque._begin;
            if (frontIndex == deque._end) Panic.panic(Panic.EMPTY_ARRAY_POP);
            value = deque._data[frontIndex];
            delete deque._data[frontIndex];
            deque._begin = frontIndex + 1;
        }
    }

    function front(Bytes32Deque storage deque) internal view returns (MessageContainer memory value) {
        if (empty(deque)) Panic.panic(Panic.ARRAY_OUT_OF_BOUNDS);
        return deque._data[deque._begin];
    }

    function back(Bytes32Deque storage deque) internal view returns (MessageContainer memory value) {
        if (empty(deque)) Panic.panic(Panic.ARRAY_OUT_OF_BOUNDS);
        unchecked {
            return deque._data[deque._end - 1];
        }
    }

    function at(Bytes32Deque storage deque, uint256 index) internal view returns (MessageContainer memory value) {
        if (index >= length(deque)) Panic.panic(Panic.ARRAY_OUT_OF_BOUNDS);
        // By construction, length is a uint128, so the check above ensures that index can be safely downcast to uint128
        unchecked {
            return deque._data[deque._begin + uint128(index)];
        }
    }

    function clear(Bytes32Deque storage deque) internal {
        deque._begin = 0;
        deque._end = 0;
    }

    function length(Bytes32Deque storage deque) internal view returns (uint256) {
        unchecked {
            return uint256(deque._end - deque._begin);
        }
    }

    function empty(Bytes32Deque storage deque) internal view returns (bool) {
        return deque._end == deque._begin;
    }
}

File 4 of 5 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)

pragma solidity ^0.8.20;

/**
 * @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;
    }

    function _contextSuffixLength() internal view virtual returns (uint256) {
        return 0;
    }
}

File 5 of 5 : Panic.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.20;

/**
 * @dev Helper library for emitting standardized panic codes.
 *
 * ```solidity
 * contract Example {
 *      using Panic for uint256;
 *
 *      // Use any of the declared internal constants
 *      function foo() { Panic.GENERIC.panic(); }
 *
 *      // Alternatively
 *      function foo() { Panic.panic(Panic.GENERIC); }
 * }
 * ```
 *
 * Follows the list from https://github.com/ethereum/solidity/blob/v0.8.24/libsolutil/ErrorCodes.h[libsolutil].
 */
// slither-disable-next-line unused-state
library Panic {
    /// @dev generic / unspecified error
    uint256 internal constant GENERIC = 0x00;
    /// @dev used by the assert() builtin
    uint256 internal constant ASSERT = 0x01;
    /// @dev arithmetic underflow or overflow
    uint256 internal constant UNDER_OVERFLOW = 0x11;
    /// @dev division or modulo by zero
    uint256 internal constant DIVISION_BY_ZERO = 0x12;
    /// @dev enum conversion error
    uint256 internal constant ENUM_CONVERSION_ERROR = 0x21;
    /// @dev invalid encoding in storage
    uint256 internal constant STORAGE_ENCODING_ERROR = 0x22;
    /// @dev empty array pop
    uint256 internal constant EMPTY_ARRAY_POP = 0x31;
    /// @dev array out of bounds access
    uint256 internal constant ARRAY_OUT_OF_BOUNDS = 0x32;
    /// @dev resource error (too large allocation or too large array)
    uint256 internal constant RESOURCE_ERROR = 0x41;
    /// @dev calling invalid internal function
    uint256 internal constant INVALID_INTERNAL_FUNCTION = 0x51;

    /// @dev Reverts with a panic code. Recommended to use with
    /// the internal constants with predefined codes.
    function panic(uint256 code) internal pure {
        /// @solidity memory-safe-assembly
        assembly {
            mstore(0x00, 0x4e487b71)
            mstore(0x20, code)
            revert(0x1c, 0x24)
        }
    }
}

Settings
{
  "remappings": [
    "forge-std/=lib/forge-std/src/",
    "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
    "ds-test/=lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/",
    "erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/",
    "halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/",
    "openzeppelin-contracts/=lib/openzeppelin-contracts/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "metadata": {
    "useLiteralContent": false,
    "bytecodeHash": "ipfs",
    "appendCBOR": true
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "paris",
  "viaIR": false,
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address payable","name":"_treasury","type":"address"},{"internalType":"uint256","name":"_pctToTreasuryInBasisPoints","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"MessageNotSentByAgent","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"agentAddress","type":"address"},{"indexed":false,"internalType":"bytes","name":"message","type":"bytes"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"LogMessage","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"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"adjustMinimumValueForSendingMessage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"agentAddress","type":"address"}],"name":"countMessages","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"agentAddress","type":"address"},{"internalType":"uint256","name":"idx","type":"uint256"}],"name":"getAtIndex","outputs":[{"components":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct DoubleEndedStructQueue.MessageContainer","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumValueForSendingMessageInWei","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pctToTreasuryInBasisPoints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"agentAddress","type":"address"}],"name":"popNextMessage","outputs":[{"components":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct DoubleEndedStructQueue.MessageContainer","name":"","type":"tuple"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"queues","outputs":[{"internalType":"uint128","name":"_begin","type":"uint128"},{"internalType":"uint128","name":"_end","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"agentAddress","type":"address"},{"internalType":"bytes","name":"message","type":"bytes"}],"name":"sendMessage","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

608060405234801561001057600080fd5b5060405161102038038061102083398101604081905261002f916100e2565b338061005557604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b61005e81610092565b50600180546001600160a01b0319166001600160a01b0393909316929092179091556002556509184e72a00060045561011c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080604083850312156100f557600080fd5b82516001600160a01b038116811461010c57600080fd5b6020939093015192949293505050565b610ef58061012b6000396000f3fe6080604052600436106100a75760003560e01c8063b30286ca11610064578063b30286ca146101d0578063baeb0b32146101f0578063bb5ddb0f14610210578063c7cb248014610223578063d4c94a6314610239578063f2fde38b1461025957600080fd5b806305380f3a146100ac57806361d027b3146100d5578063715018a61461010d5780638911ac64146101245780638b9c8565146101855780638da5cb5b146101b2575b600080fd5b3480156100b857600080fd5b506100c260025481565b6040519081526020015b60405180910390f35b3480156100e157600080fd5b506001546100f5906001600160a01b031681565b6040516001600160a01b0390911681526020016100cc565b34801561011957600080fd5b50610122610279565b005b34801561013057600080fd5b5061016561013f366004610b1b565b6003602052600090815260409020546001600160801b0380821691600160801b90041682565b604080516001600160801b039384168152929091166020830152016100cc565b34801561019157600080fd5b506101a56101a0366004610b1b565b61028d565b6040516100cc9190610b7c565b3480156101be57600080fd5b506000546001600160a01b03166100f5565b3480156101dc57600080fd5b506100c26101eb366004610b1b565b610340565b3480156101fc57600080fd5b506101a561020b366004610bd0565b61037a565b61012261021e366004610c10565b6103ab565b34801561022f57600080fd5b506100c260045481565b34801561024557600080fd5b50610122610254366004610cda565b6105e6565b34801561026557600080fd5b50610122610274366004610b1b565b6105f3565b610281610631565b61028b600061065e565b565b610295610a77565b336001600160a01b038316146102be57604051630522bd7b60e51b815260040160405180910390fd5b6001600160a01b03821660009081526003602052604081206102df906106ae565b9050826001600160a01b031681600001516001600160a01b03167ff8885fb552e2e52d7d1e7c73573c443a1ece5ad931dcc158cafe3489d84cc5db83604001518460600151604051610332929190610cf3565b60405180910390a392915050565b6001600160a01b0381166000908152600360205260408120546001600160801b03808216600160801b909204811691909103165b92915050565b610382610a77565b6001600160a01b03831660009081526003602052604090206103a49083610841565b9392505050565b6004543410156104025760405162461bcd60e51b815260206004820152601a60248201527f496e73756666696369656e74206d6573736167652076616c756500000000000060448201526064015b60405180910390fd5b60008061040e3461096a565b6001546040519294509092506000916001600160a01b039091169084908381818185875af1925050503d8060008114610463576040519150601f19603f3d011682016040523d82523d6000602084013e610468565b606091505b50509050806104b05760405162461bcd60e51b81526020600482015260146024820152732330b4b632b2103a379039b2b7321022ba3432b960611b60448201526064016103f9565b6000856001600160a01b03168360405160006040518083038185875af1925050503d80600081146104fd576040519150601f19603f3d011682016040523d82523d6000602084013e610502565b606091505b505090508061054a5760405162461bcd60e51b81526020600482015260146024820152732330b4b632b2103a379039b2b7321022ba3432b960611b60448201526064016103f9565b604080516080810182523381526001600160a01b03881660208083018290528284018990523460608401526000918252600390529190912061058c90826109a4565b866001600160a01b0316336001600160a01b03167ff8885fb552e2e52d7d1e7c73573c443a1ece5ad931dcc158cafe3489d84cc5db8360400151346040516105d5929190610cf3565b60405180910390a350505050505050565b6105ee610631565b600455565b6105fb610631565b6001600160a01b03811661062557604051631e4fbdf760e01b8152600060048201526024016103f9565b61062e8161065e565b50565b6000546001600160a01b0316331461028b5760405163118cdaa760e01b81523360048201526024016103f9565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6106b6610a77565b81546001600160801b0380821691600160801b90041681036106dc576106dc6031610a65565b6001600160801b038116600090815260018085016020908152604092839020835160808101855281546001600160a01b0390811682529382015490931691830191909152600281018054929391929184019161073790610d15565b80601f016020809104026020016040519081016040528092919081815260200182805461076390610d15565b80156107b05780601f10610785576101008083540402835291602001916107b0565b820191906000526020600020905b81548152906001019060200180831161079357829003601f168201915b5050509183525050600391909101546020918201526001600160801b038316600090815260018087019092526040812080546001600160a01b0319908116825592810180549093169092559193509061080c6002830182610ab1565b5060006003919091015582546fffffffffffffffffffffffffffffffff19166001919091016001600160801b03161790915590565b610849610a77565b82546001600160801b03808216600160801b909204811691909103168210610875576108756032610a65565b82546001600160801b03908116830116600090815260018085016020908152604092839020835160808101855281546001600160a01b039081168252938201549093169183019190915260028101805492939192918401916108d690610d15565b80601f016020809104026020016040519081016040528092919081815260200182805461090290610d15565b801561094f5780601f106109245761010080835404028352916020019161094f565b820191906000526020600020905b81548152906001019060200180831161093257829003601f168201915b50505050508152602001600382015481525050905092915050565b6000806000612710600254856109809190610d65565b61098a9190610d7c565b905060006109988286610d9e565b91959194509092505050565b81546001600160801b03600160801b8204811691811660018301909116036109d0576109d06041610a65565b6001600160801b038116600090815260018481016020908152604092839020855181546001600160a01b03199081166001600160a01b039283161783559287015193820180549093169316929092179055908301518391906002820190610a379082610e00565b506060919091015160039091015582546001600160801b0360019092018216600160801b0291161790915550565b634e487b71600052806020526024601cfd5b604051806080016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160608152602001600081525090565b508054610abd90610d15565b6000825580601f10610acd575050565b601f01602090049060005260206000209081019061062e91905b80821115610afb5760008155600101610ae7565b5090565b80356001600160a01b0381168114610b1657600080fd5b919050565b600060208284031215610b2d57600080fd5b6103a482610aff565b6000815180845260005b81811015610b5c57602081850181015186830182015201610b40565b506000602082860101526020601f19601f83011685010191505092915050565b602080825282516001600160a01b0390811683830152908301511660408083019190915282015160806060830152600090610bba60a0840182610b36565b9050606084015160808401528091505092915050565b60008060408385031215610be357600080fd5b610bec83610aff565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215610c2357600080fd5b610c2c83610aff565b9150602083013567ffffffffffffffff811115610c4857600080fd5b8301601f81018513610c5957600080fd5b803567ffffffffffffffff811115610c7357610c73610bfa565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610ca257610ca2610bfa565b604052818152828201602001871015610cba57600080fd5b816020840160208301376000602083830101528093505050509250929050565b600060208284031215610cec57600080fd5b5035919050565b604081526000610d066040830185610b36565b90508260208301529392505050565b600181811c90821680610d2957607f821691505b602082108103610d4957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761037457610374610d4f565b600082610d9957634e487b7160e01b600052601260045260246000fd5b500490565b8181038181111561037457610374610d4f565b601f821115610dfb57806000526020600020601f840160051c81016020851015610dd85750805b601f840160051c820191505b81811015610df85760008155600101610de4565b50505b505050565b815167ffffffffffffffff811115610e1a57610e1a610bfa565b610e2e81610e288454610d15565b84610db1565b6020601f821160018114610e625760008315610e4a5750848201515b600019600385901b1c1916600184901b178455610df8565b600084815260208120601f198516915b82811015610e925787850151825560209485019460019092019101610e72565b5084821015610eb05786840151600019600387901b60f8161c191681555b50505050600190811b0190555056fea26469706673582212205e788e0d836464dbf207b7a6897bf159dc490a92a4a2f65e0aa2e379b06950e164736f6c634300081a0033000000000000000000000000d1a54fd7a200c2ca76b6d06437795d660d37fe280000000000000000000000000000000000000000000000000000000000001b58

Deployed Bytecode

0x6080604052600436106100a75760003560e01c8063b30286ca11610064578063b30286ca146101d0578063baeb0b32146101f0578063bb5ddb0f14610210578063c7cb248014610223578063d4c94a6314610239578063f2fde38b1461025957600080fd5b806305380f3a146100ac57806361d027b3146100d5578063715018a61461010d5780638911ac64146101245780638b9c8565146101855780638da5cb5b146101b2575b600080fd5b3480156100b857600080fd5b506100c260025481565b6040519081526020015b60405180910390f35b3480156100e157600080fd5b506001546100f5906001600160a01b031681565b6040516001600160a01b0390911681526020016100cc565b34801561011957600080fd5b50610122610279565b005b34801561013057600080fd5b5061016561013f366004610b1b565b6003602052600090815260409020546001600160801b0380821691600160801b90041682565b604080516001600160801b039384168152929091166020830152016100cc565b34801561019157600080fd5b506101a56101a0366004610b1b565b61028d565b6040516100cc9190610b7c565b3480156101be57600080fd5b506000546001600160a01b03166100f5565b3480156101dc57600080fd5b506100c26101eb366004610b1b565b610340565b3480156101fc57600080fd5b506101a561020b366004610bd0565b61037a565b61012261021e366004610c10565b6103ab565b34801561022f57600080fd5b506100c260045481565b34801561024557600080fd5b50610122610254366004610cda565b6105e6565b34801561026557600080fd5b50610122610274366004610b1b565b6105f3565b610281610631565b61028b600061065e565b565b610295610a77565b336001600160a01b038316146102be57604051630522bd7b60e51b815260040160405180910390fd5b6001600160a01b03821660009081526003602052604081206102df906106ae565b9050826001600160a01b031681600001516001600160a01b03167ff8885fb552e2e52d7d1e7c73573c443a1ece5ad931dcc158cafe3489d84cc5db83604001518460600151604051610332929190610cf3565b60405180910390a392915050565b6001600160a01b0381166000908152600360205260408120546001600160801b03808216600160801b909204811691909103165b92915050565b610382610a77565b6001600160a01b03831660009081526003602052604090206103a49083610841565b9392505050565b6004543410156104025760405162461bcd60e51b815260206004820152601a60248201527f496e73756666696369656e74206d6573736167652076616c756500000000000060448201526064015b60405180910390fd5b60008061040e3461096a565b6001546040519294509092506000916001600160a01b039091169084908381818185875af1925050503d8060008114610463576040519150601f19603f3d011682016040523d82523d6000602084013e610468565b606091505b50509050806104b05760405162461bcd60e51b81526020600482015260146024820152732330b4b632b2103a379039b2b7321022ba3432b960611b60448201526064016103f9565b6000856001600160a01b03168360405160006040518083038185875af1925050503d80600081146104fd576040519150601f19603f3d011682016040523d82523d6000602084013e610502565b606091505b505090508061054a5760405162461bcd60e51b81526020600482015260146024820152732330b4b632b2103a379039b2b7321022ba3432b960611b60448201526064016103f9565b604080516080810182523381526001600160a01b03881660208083018290528284018990523460608401526000918252600390529190912061058c90826109a4565b866001600160a01b0316336001600160a01b03167ff8885fb552e2e52d7d1e7c73573c443a1ece5ad931dcc158cafe3489d84cc5db8360400151346040516105d5929190610cf3565b60405180910390a350505050505050565b6105ee610631565b600455565b6105fb610631565b6001600160a01b03811661062557604051631e4fbdf760e01b8152600060048201526024016103f9565b61062e8161065e565b50565b6000546001600160a01b0316331461028b5760405163118cdaa760e01b81523360048201526024016103f9565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6106b6610a77565b81546001600160801b0380821691600160801b90041681036106dc576106dc6031610a65565b6001600160801b038116600090815260018085016020908152604092839020835160808101855281546001600160a01b0390811682529382015490931691830191909152600281018054929391929184019161073790610d15565b80601f016020809104026020016040519081016040528092919081815260200182805461076390610d15565b80156107b05780601f10610785576101008083540402835291602001916107b0565b820191906000526020600020905b81548152906001019060200180831161079357829003601f168201915b5050509183525050600391909101546020918201526001600160801b038316600090815260018087019092526040812080546001600160a01b0319908116825592810180549093169092559193509061080c6002830182610ab1565b5060006003919091015582546fffffffffffffffffffffffffffffffff19166001919091016001600160801b03161790915590565b610849610a77565b82546001600160801b03808216600160801b909204811691909103168210610875576108756032610a65565b82546001600160801b03908116830116600090815260018085016020908152604092839020835160808101855281546001600160a01b039081168252938201549093169183019190915260028101805492939192918401916108d690610d15565b80601f016020809104026020016040519081016040528092919081815260200182805461090290610d15565b801561094f5780601f106109245761010080835404028352916020019161094f565b820191906000526020600020905b81548152906001019060200180831161093257829003601f168201915b50505050508152602001600382015481525050905092915050565b6000806000612710600254856109809190610d65565b61098a9190610d7c565b905060006109988286610d9e565b91959194509092505050565b81546001600160801b03600160801b8204811691811660018301909116036109d0576109d06041610a65565b6001600160801b038116600090815260018481016020908152604092839020855181546001600160a01b03199081166001600160a01b039283161783559287015193820180549093169316929092179055908301518391906002820190610a379082610e00565b506060919091015160039091015582546001600160801b0360019092018216600160801b0291161790915550565b634e487b71600052806020526024601cfd5b604051806080016040528060006001600160a01b0316815260200160006001600160a01b0316815260200160608152602001600081525090565b508054610abd90610d15565b6000825580601f10610acd575050565b601f01602090049060005260206000209081019061062e91905b80821115610afb5760008155600101610ae7565b5090565b80356001600160a01b0381168114610b1657600080fd5b919050565b600060208284031215610b2d57600080fd5b6103a482610aff565b6000815180845260005b81811015610b5c57602081850181015186830182015201610b40565b506000602082860101526020601f19601f83011685010191505092915050565b602080825282516001600160a01b0390811683830152908301511660408083019190915282015160806060830152600090610bba60a0840182610b36565b9050606084015160808401528091505092915050565b60008060408385031215610be357600080fd5b610bec83610aff565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215610c2357600080fd5b610c2c83610aff565b9150602083013567ffffffffffffffff811115610c4857600080fd5b8301601f81018513610c5957600080fd5b803567ffffffffffffffff811115610c7357610c73610bfa565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610ca257610ca2610bfa565b604052818152828201602001871015610cba57600080fd5b816020840160208301376000602083830101528093505050509250929050565b600060208284031215610cec57600080fd5b5035919050565b604081526000610d066040830185610b36565b90508260208301529392505050565b600181811c90821680610d2957607f821691505b602082108103610d4957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761037457610374610d4f565b600082610d9957634e487b7160e01b600052601260045260246000fd5b500490565b8181038181111561037457610374610d4f565b601f821115610dfb57806000526020600020601f840160051c81016020851015610dd85750805b601f840160051c820191505b81811015610df85760008155600101610de4565b50505b505050565b815167ffffffffffffffff811115610e1a57610e1a610bfa565b610e2e81610e288454610d15565b84610db1565b6020601f821160018114610e625760008315610e4a5750848201515b600019600385901b1c1916600184901b178455610df8565b600084815260208120601f198516915b82811015610e925787850151825560209485019460019092019101610e72565b5084821015610eb05786840151600019600387901b60f8161c191681555b50505050600190811b0190555056fea26469706673582212205e788e0d836464dbf207b7a6897bf159dc490a92a4a2f65e0aa2e379b06950e164736f6c634300081a0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000d1a54fd7a200c2ca76b6d06437795d660d37fe280000000000000000000000000000000000000000000000000000000000001b58

-----Decoded View---------------
Arg [0] : _treasury (address): 0xd1A54FD7a200C2ca76B6D06437795d660d37FE28
Arg [1] : _pctToTreasuryInBasisPoints (uint256): 7000

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000d1a54fd7a200c2ca76b6d06437795d660d37fe28
Arg [1] : 0000000000000000000000000000000000000000000000000000000000001b58


Block Transaction Gas Used Reward
view all blocks validated

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
[ 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.