Sepolia Testnet

Contract

0x0B218fC154CABcbD49E87EEC9ea821c0fF9FdF9B
Source Code Source Code

Overview

ETH Balance

0 ETH

More Info

Multichain Info

N/A
Transaction Hash
Method
Block
From
To
Amount
Process Queue Pa...102924932026-02-19 11:57:4821 days ago1771502268IN
0x0B218fC1...0fF9FdF9B
0 ETH0.000247442.83626977
Process Queue Pa...101924282026-02-04 22:20:4836 days ago1770243648IN
0x0B218fC1...0fF9FdF9B
0 ETH0.000177362.09293807
Remove Rejected ...101924252026-02-04 22:20:1236 days ago1770243612IN
0x0B218fC1...0fF9FdF9B
0 ETH0.000141762.48808491

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading
Loading...
Loading

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
QueueHandler

Compiler Version
v0.8.33+commit.64118f21

Optimization Enabled:
Yes with 200 runs

Other Settings:
paris EvmVersion

Contract Source Code (Solidity Standard Json-Input format)

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.33;

import { Sponsorship, SponsorshipQueue } from "./SponsorshipQueue.sol";
import { Distribution, DistributionQueue } from "./DistributionQueue.sol";
import { IDistributionVerifier } from "./interface/IDistributionVerifier.sol";
import { ProtocolVersion } from "./util/ProtocolVersion.sol";

/// @notice Handles pairing of sponsorships with distributions
contract QueueHandler is ProtocolVersion {
    address public owner;
    SponsorshipQueue public immutable sponsorshipQueue;
    DistributionQueue public immutable distributionQueue;
    IDistributionVerifier public distributionVerifier;

    event OwnerUpdated(address);
    event RolesUpdated(address);
    event DistributionVerifierUpdated(address);
    event QueuePairProcessed(uint24 distributionQueueNumber, uint24 sponsorshipQueueNumber, address indexed operator);
    event RejectedDistributionRemoved(uint24 queueNumber, address indexed operator);

    constructor(address sponsorshipQueue_, address distributionQueue_, address distributionVerifier_) {
        owner = msg.sender;
        sponsorshipQueue = SponsorshipQueue(sponsorshipQueue_);
        distributionQueue = DistributionQueue(distributionQueue_);
        distributionVerifier = IDistributionVerifier(distributionVerifier_);
    }

    function updateOwner(address owner_) public {
        require(msg.sender == owner, "Only the current owner can set a new owner");
        owner = owner_;
        emit OwnerUpdated(owner_);
    }

    function updateDistributionVerifier(address distributionVerifier_) public {
        require(msg.sender == owner, "Only the owner can set the `distributionVerifier` address");
        distributionVerifier = IDistributionVerifier(distributionVerifier_);
        emit DistributionVerifierUpdated(distributionVerifier_);
    }

    /// @notice Pair the next distribution (if approved) with the next sponsorship
    function processQueuePair() public {
        // Verify that the queue of distributions is not empty
        require(distributionQueue.getLength() > 0, "The distribution queue cannot be empty");

        // Get the next distribution in the queue
        uint24 distributionQueueNumber = distributionQueue.queueNumberFront();

        // Verify that the distribution has been approved
        require(distributionVerifier.isDistributionApproved(distributionQueueNumber), "Only approved distributions can be processed");

        // Verify that the queue of sponsorships is not empty
        require(sponsorshipQueue.getLength() > 0, "The sponsorship queue cannot be empty");

        // Remove the distribution from the queue
        Distribution memory distribution = distributionQueue.dequeue();

        // Remove the sponsorship from the queue
        uint24 sponsorshipQueueNumber = sponsorshipQueue.queueNumberFront();
        Sponsorship memory sponsorship = sponsorshipQueue.dequeue();

        // Transfer ETH from the sponsorship to the distributor
        sponsorshipQueue.payDistributor(distribution.distributor, sponsorship);

        // Emit event
        emit QueuePairProcessed(distributionQueueNumber, sponsorshipQueueNumber, msg.sender);
    }

    /// @notice Remove rejected distribution from the queue
    function removeRejectedDistribution() public {
        // Verify that the queue of distributions is not empty
        require(distributionQueue.getLength() > 0, "The distribution queue cannot be empty");

        // Verify that the next distribution in the queue has been rejected
        uint24 distributionQueueNumber = distributionQueue.queueNumberFront();
        bool isDistributionRejected = distributionVerifier.isDistributionRejected(distributionQueueNumber);
        require(isDistributionRejected, "Only rejected distributions can be removed from the queue");

        // Remove the distribution from the queue
        distributionQueue.dequeue();

        // Emit event
        emit RejectedDistributionRemoved(distributionQueueNumber, msg.sender);
    }
}

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.30;

interface ILanguages {
    function addSupportedLanguage(string calldata languageCode) external;
    function removeSupportedLanguage(string calldata languageCode) external;
    function isSupportedLanguage(string calldata languageCode) external view returns (bool);
}

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.33;

import { IDistributionQueue } from "./interface/IDistributionQueue.sol";
import { ILanguages } from "@elimu-ai/dao-contracts/ILanguages.sol";
import { ProtocolVersion } from "./util/ProtocolVersion.sol";

struct Distribution {
    string languageCode;
    string androidId;
    uint256 timestamp;
    address distributor;
}

/// @notice A queue of distributions for the Ξlimu DAO's education sponsorship program (https://sponsors.elimu.ai)
contract DistributionQueue is IDistributionQueue, ProtocolVersion {
    address public owner;
    ILanguages public languages;
    address public queueHandler;
    mapping(uint24 => Distribution) public queue;
    uint24 public queueNumberFront = 1;
    uint24 public queueNumberNext = 1;

    event OwnerUpdated(address);
    event LanguagesUpdated(address);
    event QueueHandlerUpdated(address);
    event DistributionAdded(uint24 queueNumber, address indexed distributor);

    error InvalidLanguageCode();

    constructor(address languages_) {
        owner = msg.sender;
        languages = ILanguages(languages_);
    }

    function updateOwner(address owner_) public {
        require(msg.sender == owner, "Only the current owner can set a new owner");
        owner = owner_;
        emit OwnerUpdated(owner_);
    }

    function updateLanguages(address languages_) public {
        require(msg.sender == owner, "Only the owner can set the `languages` address");
        languages = ILanguages(languages_);
        emit LanguagesUpdated(languages_);
    }

    function updateQueueHandler(address queueHandler_) public {
        require(msg.sender == owner, "Only the owner can set the `queueHandler` address");
        queueHandler = queueHandler_;
        emit QueueHandlerUpdated(queueHandler_);
    }

    function addDistribution(string calldata languageCode, string calldata androidId) external {
        if (!languages.isSupportedLanguage(languageCode)) {
            revert InvalidLanguageCode();
        }
        Distribution memory distribution = Distribution(
            languageCode,
            androidId,
            block.timestamp,
            msg.sender
        );
        enqueue(distribution);
        emit DistributionAdded(queueNumberNext - 1, msg.sender);
    }

    function enqueue(Distribution memory sponsorship) private {
        queue[queueNumberNext] = sponsorship;
        queueNumberNext += 1;
    }

    function dequeue() public returns (Distribution memory) {
        require(msg.sender == queueHandler, "Only the queue handler can remove from the queue");
        require(getLength() > 0, "Queue is empty");
        Distribution memory distribution = queue[queueNumberFront];
        queueNumberFront += 1;
        return distribution;
    }

    function getLength() public view returns (uint256) {
        return queueNumberNext - queueNumberFront;
    }
}

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.33;

interface IDistributionQueue {
    /// @notice Add a new distribution to the queue
    /// @param languageCode The language code of the installed software (e.g. "HIN" for Hindi)
    /// @param androidId The hexadecimal Android ID of the distributed device (e.g. "5b7c682a12ecbe2e")
    function addDistribution(string calldata languageCode, string calldata androidId) external;
}

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.33;

interface IDistributionVerifier {
    function isDistributionApproved(uint24 queueNumber) external view returns (bool);
    function isDistributionRejected(uint24 queueNumber) external view returns (bool);
}

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.33;

interface ISponsorshipQueue {
    function estimatedCost() external view returns (uint256);
    function addSponsorship() external payable;
}

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.33;

import { ISponsorshipQueue } from "./interface/ISponsorshipQueue.sol";
import { ProtocolVersion } from "./util/ProtocolVersion.sol";

struct Sponsorship {
    uint256 estimatedCost;
    uint256 timestamp;
    address sponsor;
}

/// @title A queue of sponsorships
/// @author Ξlimu DAO
/// @notice A queue of sponsorships for the Ξlimu DAO's education sponsorship program (https://sponsors.elimu.ai)
/// @dev The address of the queue handler smart contract needs to be set after deployment
contract SponsorshipQueue is ISponsorshipQueue, ProtocolVersion {
    address public owner;
    uint256 public estimatedCost;
    address public queueHandler;
    mapping(uint24 => Sponsorship) public queue;
    uint24 public queueNumberFront = 1;
    uint24 public queueNumberNext = 1;

    event OwnerUpdated(address);
    event EstimatedCostUpdated(uint256);
    event QueueHandlerUpdated(address);
    event SponsorshipAdded(uint24 queueNumber, address indexed sponsor);

    constructor(uint256 estimatedCost_) {
        owner = msg.sender;
        estimatedCost = estimatedCost_;
    }

    /// @notice Change the owner of this smart contract
    /// @param owner_ The address of the new owner
    function updateOwner(address owner_) public {
        require(msg.sender == owner, "Only the current owner can set a new owner");
        owner = owner_;
        emit OwnerUpdated(owner_);
    }

    /// @notice Update the amount that a sponsor will have to pay
    /// @param estimatedCost_ The new estimated cost
    function updateEstimatedCost(uint256 estimatedCost_) public {
        require(msg.sender == owner, "Only the owner can set the `estimatedCost`");
        estimatedCost = estimatedCost_;
        emit EstimatedCostUpdated(estimatedCost_);
    }

    /// @notice Change the handler of this queue
    /// @param queueHandler_ The address of the new queue handler smart contract
    function updateQueueHandler(address queueHandler_) public {
        require(msg.sender == owner, "Only the owner can set the `queueHandler` address");
        queueHandler = queueHandler_;
        emit QueueHandlerUpdated(queueHandler_);
    }

    /// @notice Pay ETH to this smart contract
    /// @dev The amount of ETH to pay can be changed by adjusting the `estimatedCost` variable
    function addSponsorship() external payable {
        require(msg.value == estimatedCost, "Must send exactly the estimated cost");
        Sponsorship memory sponsorship = Sponsorship(
            estimatedCost,
            block.timestamp,
            msg.sender
        );
        enqueue(sponsorship);
        emit SponsorshipAdded(queueNumberNext - 1, msg.sender);
    }

    /// @dev Internal function to add a sponsorship to the queue
    /// @param sponsorship The sponsorship to add
    function enqueue(Sponsorship memory sponsorship) private {
        queue[queueNumberNext] = sponsorship;
        queueNumberNext += 1;
    }

    /// @notice Remove and return the next sponsorship from the queue
    /// @dev Only callable by the queue handler
    /// @return The sponsorship that was removed from the front of the queue
    function dequeue() public returns (Sponsorship memory) {
        require(msg.sender == queueHandler, "Only the queue handler can remove from the queue");
        require(getLength() > 0, "Queue is empty");
        Sponsorship memory sponsorship = queue[queueNumberFront];
        queueNumberFront += 1;
        return sponsorship;
    }

    /// @notice Get the current length of the queue
    /// @return The number of sponsorships in the queue (that have not yet been processed)
    function getLength() public view returns (uint256) {
        return queueNumberNext - queueNumberFront;
    }

    /// @notice Transfer ETH from a sponsorship to a distributor
    /// @dev Only callable by the queue handler
    /// @param distributor The address to receive the ETH
    /// @param sponsorship The sponsorship containing the amount to transfer
    function payDistributor(address distributor, Sponsorship memory sponsorship) public {
        require(msg.sender == queueHandler, "Only the queue handler can process payouts");
        payable(distributor).transfer(sponsorship.estimatedCost);
    }
}

File 8 of 8 : ProtocolVersion.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.33;

abstract contract ProtocolVersion {
    function protocolVersion() public pure returns (string memory) {
        return "0.9.8";
    }
}

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

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"sponsorshipQueue_","type":"address"},{"internalType":"address","name":"distributionQueue_","type":"address"},{"internalType":"address","name":"distributionVerifier_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"}],"name":"DistributionVerifierUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"}],"name":"OwnerUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint24","name":"distributionQueueNumber","type":"uint24"},{"indexed":false,"internalType":"uint24","name":"sponsorshipQueueNumber","type":"uint24"},{"indexed":true,"internalType":"address","name":"operator","type":"address"}],"name":"QueuePairProcessed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint24","name":"queueNumber","type":"uint24"},{"indexed":true,"internalType":"address","name":"operator","type":"address"}],"name":"RejectedDistributionRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"}],"name":"RolesUpdated","type":"event"},{"inputs":[],"name":"distributionQueue","outputs":[{"internalType":"contract DistributionQueue","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"distributionVerifier","outputs":[{"internalType":"contract IDistributionVerifier","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"processQueuePair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"protocolVersion","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"removeRejectedDistribution","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sponsorshipQueue","outputs":[{"internalType":"contract SponsorshipQueue","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"distributionVerifier_","type":"address"}],"name":"updateDistributionVerifier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner_","type":"address"}],"name":"updateOwner","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60c060405234801561001057600080fd5b50604051610fdb380380610fdb83398101604081905261002f91610086565b600080546001600160a01b031990811633179091556001600160a01b0393841660805291831660a052600180549190931691161790556100c9565b80516001600160a01b038116811461008157600080fd5b919050565b60008060006060848603121561009b57600080fd5b6100a48461006a565b92506100b26020850161006a565b91506100c06040850161006a565b90509250925092565b60805160a051610ea86101336000396000818161012d0152818161018c015281816102360152818161046c015281816106eb0152818161078c01526108fa015260008181609d0152818161038d015281816104f80152818161057e01526106440152610ea86000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c80634de6087c116100665780634de6087c1461011557806365772def14610128578063880cdc311461014f5780638da5cb5b14610162578063a815f7a21461017557600080fd5b8063177df86b146100985780632603b407146100dc5780632ae9c600146100e65780633b49a26d1461010d575b600080fd5b6100bf7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6100e4610188565b005b60408051808201825260058152640605c725c760db1b602082015290516100d39190610b73565b6100e46106e7565b6100e4610123366004610bbe565b6109bf565b6100bf7f000000000000000000000000000000000000000000000000000000000000000081565b6100e461015d366004610bbe565b610a94565b6000546100bf906001600160a01b031681565b6001546100bf906001600160a01b031681565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663be1c766b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061020c9190610be2565b116102325760405162461bcd60e51b815260040161022990610bfb565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632fb0b6596040518163ffffffff1660e01b8152600401602060405180830381865afa158015610292573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102b69190610c41565b60015460405163680dd83760e11b815262ffffff831660048201529192506001600160a01b03169063d01bb06e90602401602060405180830381865afa158015610304573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103289190610c66565b6103895760405162461bcd60e51b815260206004820152602c60248201527f4f6e6c7920617070726f76656420646973747269627574696f6e732063616e2060448201526b1899481c1c9bd8d95cdcd95960a21b6064820152608401610229565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663be1c766b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061040d9190610be2565b116104685760405162461bcd60e51b815260206004820152602560248201527f5468652073706f6e736f72736869702071756575652063616e6e6f7420626520604482015264656d70747960d81b6064820152608401610229565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663957908d16040518163ffffffff1660e01b81526004016000604051808303816000875af11580156104ca573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526104f29190810190610d52565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632fb0b6596040518163ffffffff1660e01b8152600401602060405180830381865afa158015610554573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105789190610c41565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663957908d16040518163ffffffff1660e01b81526004016060604051808303816000875af11580156105dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106009190610e10565b606084015160408051630e8042bd60e21b81526001600160a01b039283166004820152835160248201526020840151604482015290830151821660648201529192507f00000000000000000000000000000000000000000000000000000000000000001690633a010af490608401600060405180830381600087803b15801561068857600080fd5b505af115801561069c573d6000803e3d6000fd5b50506040805162ffffff8089168252861660208201523393507f316c47d823baa86baaa2e951cbff286f84165aeab72718afdc0846582586b59f92500160405180910390a250505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663be1c766b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610747573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061076b9190610be2565b116107885760405162461bcd60e51b815260040161022990610bfb565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632fb0b6596040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080c9190610c41565b600154604051632385ac3b60e01b815262ffffff831660048201529192506000916001600160a01b0390911690632385ac3b90602401602060405180830381865afa15801561085f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108839190610c66565b9050806108f85760405162461bcd60e51b815260206004820152603960248201527f4f6e6c792072656a656374656420646973747269627574696f6e732063616e2060448201527f62652072656d6f7665642066726f6d20746865207175657565000000000000006064820152608401610229565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663957908d16040518163ffffffff1660e01b81526004016000604051808303816000875af1158015610958573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109809190810190610d52565b5060405162ffffff8316815233907fea55ef4bfaa02ab8d3d01556637786ac0952b281afce6f71185489e2098020519060200160405180910390a25050565b6000546001600160a01b03163314610a3f5760405162461bcd60e51b815260206004820152603960248201527f4f6e6c7920746865206f776e65722063616e207365742074686520606469737460448201527f7269627574696f6e5665726966696572602061646472657373000000000000006064820152608401610229565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527f6cc0d3de1edeba7407979d71fe895d856235ad36361847ffa46fd7a3b0d123c7906020015b60405180910390a150565b6000546001600160a01b03163314610b015760405162461bcd60e51b815260206004820152602a60248201527f4f6e6c79207468652063757272656e74206f776e65722063616e207365742061604482015269103732bb9037bbb732b960b11b6064820152608401610229565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527f4ffd725fc4a22075e9ec71c59edf9c38cdeb588a91b24fc5b61388c5be41282b90602001610a89565b60005b83811015610b6a578181015183820152602001610b52565b50506000910152565b6020815260008251806020840152610b92816040850160208701610b4f565b601f01601f19169190910160400192915050565b6001600160a01b0381168114610bbb57600080fd5b50565b600060208284031215610bd057600080fd5b8135610bdb81610ba6565b9392505050565b600060208284031215610bf457600080fd5b5051919050565b60208082526026908201527f54686520646973747269627574696f6e2071756575652063616e6e6f7420626560408201526520656d70747960d01b606082015260800190565b600060208284031215610c5357600080fd5b815162ffffff81168114610bdb57600080fd5b600060208284031215610c7857600080fd5b81518015158114610bdb57600080fd5b634e487b7160e01b600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715610cc157610cc1610c88565b60405290565b600082601f830112610cd857600080fd5b815167ffffffffffffffff811115610cf257610cf2610c88565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610d2157610d21610c88565b604052818152838201602001851015610d3957600080fd5b610d4a826020830160208701610b4f565b949350505050565b600060208284031215610d6457600080fd5b815167ffffffffffffffff811115610d7b57600080fd5b820160808185031215610d8d57600080fd5b610d95610c9e565b815167ffffffffffffffff811115610dac57600080fd5b610db886828501610cc7565b825250602082015167ffffffffffffffff811115610dd557600080fd5b610de186828501610cc7565b6020830152506040828101519082015260609091015190610e0182610ba6565b60608101919091529392505050565b60006060828403128015610e2357600080fd5b506040516060810167ffffffffffffffff81118282101715610e4757610e47610c88565b60409081528351825260208085015190830152830151610e6681610ba6565b6040820152939250505056fea26469706673582212206d7e235a50f80637b5434e25e52bfd33322674df18940f1cf06a8d0b831f8e5864736f6c634300082100330000000000000000000000005f6052facba8107aaa0d6a2febe6cce0e7a4e62d000000000000000000000000beb5647b9435b082582a1a43da8edb9c40440e850000000000000000000000000a67e0fc963641945b2c02d7a6c4b1dfe0d2df99

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100935760003560e01c80634de6087c116100665780634de6087c1461011557806365772def14610128578063880cdc311461014f5780638da5cb5b14610162578063a815f7a21461017557600080fd5b8063177df86b146100985780632603b407146100dc5780632ae9c600146100e65780633b49a26d1461010d575b600080fd5b6100bf7f0000000000000000000000005f6052facba8107aaa0d6a2febe6cce0e7a4e62d81565b6040516001600160a01b0390911681526020015b60405180910390f35b6100e4610188565b005b60408051808201825260058152640605c725c760db1b602082015290516100d39190610b73565b6100e46106e7565b6100e4610123366004610bbe565b6109bf565b6100bf7f000000000000000000000000beb5647b9435b082582a1a43da8edb9c40440e8581565b6100e461015d366004610bbe565b610a94565b6000546100bf906001600160a01b031681565b6001546100bf906001600160a01b031681565b60007f000000000000000000000000beb5647b9435b082582a1a43da8edb9c40440e856001600160a01b031663be1c766b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061020c9190610be2565b116102325760405162461bcd60e51b815260040161022990610bfb565b60405180910390fd5b60007f000000000000000000000000beb5647b9435b082582a1a43da8edb9c40440e856001600160a01b0316632fb0b6596040518163ffffffff1660e01b8152600401602060405180830381865afa158015610292573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102b69190610c41565b60015460405163680dd83760e11b815262ffffff831660048201529192506001600160a01b03169063d01bb06e90602401602060405180830381865afa158015610304573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103289190610c66565b6103895760405162461bcd60e51b815260206004820152602c60248201527f4f6e6c7920617070726f76656420646973747269627574696f6e732063616e2060448201526b1899481c1c9bd8d95cdcd95960a21b6064820152608401610229565b60007f0000000000000000000000005f6052facba8107aaa0d6a2febe6cce0e7a4e62d6001600160a01b031663be1c766b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061040d9190610be2565b116104685760405162461bcd60e51b815260206004820152602560248201527f5468652073706f6e736f72736869702071756575652063616e6e6f7420626520604482015264656d70747960d81b6064820152608401610229565b60007f000000000000000000000000beb5647b9435b082582a1a43da8edb9c40440e856001600160a01b031663957908d16040518163ffffffff1660e01b81526004016000604051808303816000875af11580156104ca573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526104f29190810190610d52565b905060007f0000000000000000000000005f6052facba8107aaa0d6a2febe6cce0e7a4e62d6001600160a01b0316632fb0b6596040518163ffffffff1660e01b8152600401602060405180830381865afa158015610554573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105789190610c41565b905060007f0000000000000000000000005f6052facba8107aaa0d6a2febe6cce0e7a4e62d6001600160a01b031663957908d16040518163ffffffff1660e01b81526004016060604051808303816000875af11580156105dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106009190610e10565b606084015160408051630e8042bd60e21b81526001600160a01b039283166004820152835160248201526020840151604482015290830151821660648201529192507f0000000000000000000000005f6052facba8107aaa0d6a2febe6cce0e7a4e62d1690633a010af490608401600060405180830381600087803b15801561068857600080fd5b505af115801561069c573d6000803e3d6000fd5b50506040805162ffffff8089168252861660208201523393507f316c47d823baa86baaa2e951cbff286f84165aeab72718afdc0846582586b59f92500160405180910390a250505050565b60007f000000000000000000000000beb5647b9435b082582a1a43da8edb9c40440e856001600160a01b031663be1c766b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610747573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061076b9190610be2565b116107885760405162461bcd60e51b815260040161022990610bfb565b60007f000000000000000000000000beb5647b9435b082582a1a43da8edb9c40440e856001600160a01b0316632fb0b6596040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080c9190610c41565b600154604051632385ac3b60e01b815262ffffff831660048201529192506000916001600160a01b0390911690632385ac3b90602401602060405180830381865afa15801561085f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108839190610c66565b9050806108f85760405162461bcd60e51b815260206004820152603960248201527f4f6e6c792072656a656374656420646973747269627574696f6e732063616e2060448201527f62652072656d6f7665642066726f6d20746865207175657565000000000000006064820152608401610229565b7f000000000000000000000000beb5647b9435b082582a1a43da8edb9c40440e856001600160a01b031663957908d16040518163ffffffff1660e01b81526004016000604051808303816000875af1158015610958573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109809190810190610d52565b5060405162ffffff8316815233907fea55ef4bfaa02ab8d3d01556637786ac0952b281afce6f71185489e2098020519060200160405180910390a25050565b6000546001600160a01b03163314610a3f5760405162461bcd60e51b815260206004820152603960248201527f4f6e6c7920746865206f776e65722063616e207365742074686520606469737460448201527f7269627574696f6e5665726966696572602061646472657373000000000000006064820152608401610229565b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527f6cc0d3de1edeba7407979d71fe895d856235ad36361847ffa46fd7a3b0d123c7906020015b60405180910390a150565b6000546001600160a01b03163314610b015760405162461bcd60e51b815260206004820152602a60248201527f4f6e6c79207468652063757272656e74206f776e65722063616e207365742061604482015269103732bb9037bbb732b960b11b6064820152608401610229565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527f4ffd725fc4a22075e9ec71c59edf9c38cdeb588a91b24fc5b61388c5be41282b90602001610a89565b60005b83811015610b6a578181015183820152602001610b52565b50506000910152565b6020815260008251806020840152610b92816040850160208701610b4f565b601f01601f19169190910160400192915050565b6001600160a01b0381168114610bbb57600080fd5b50565b600060208284031215610bd057600080fd5b8135610bdb81610ba6565b9392505050565b600060208284031215610bf457600080fd5b5051919050565b60208082526026908201527f54686520646973747269627574696f6e2071756575652063616e6e6f7420626560408201526520656d70747960d01b606082015260800190565b600060208284031215610c5357600080fd5b815162ffffff81168114610bdb57600080fd5b600060208284031215610c7857600080fd5b81518015158114610bdb57600080fd5b634e487b7160e01b600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715610cc157610cc1610c88565b60405290565b600082601f830112610cd857600080fd5b815167ffffffffffffffff811115610cf257610cf2610c88565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610d2157610d21610c88565b604052818152838201602001851015610d3957600080fd5b610d4a826020830160208701610b4f565b949350505050565b600060208284031215610d6457600080fd5b815167ffffffffffffffff811115610d7b57600080fd5b820160808185031215610d8d57600080fd5b610d95610c9e565b815167ffffffffffffffff811115610dac57600080fd5b610db886828501610cc7565b825250602082015167ffffffffffffffff811115610dd557600080fd5b610de186828501610cc7565b6020830152506040828101519082015260609091015190610e0182610ba6565b60608101919091529392505050565b60006060828403128015610e2357600080fd5b506040516060810167ffffffffffffffff81118282101715610e4757610e47610c88565b60409081528351825260208085015190830152830151610e6681610ba6565b6040820152939250505056fea26469706673582212206d7e235a50f80637b5434e25e52bfd33322674df18940f1cf06a8d0b831f8e5864736f6c63430008210033

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

0000000000000000000000005f6052facba8107aaa0d6a2febe6cce0e7a4e62d000000000000000000000000beb5647b9435b082582a1a43da8edb9c40440e850000000000000000000000000a67e0fc963641945b2c02d7a6c4b1dfe0d2df99

-----Decoded View---------------
Arg [0] : sponsorshipQueue_ (address): 0x5F6052facBA8107aAa0D6A2febe6cce0E7A4E62d
Arg [1] : distributionQueue_ (address): 0xBEB5647B9435B082582a1a43da8Edb9C40440e85
Arg [2] : distributionVerifier_ (address): 0x0A67e0FC963641945B2C02d7A6c4b1DFE0D2DF99

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000005f6052facba8107aaa0d6a2febe6cce0e7a4e62d
Arg [1] : 000000000000000000000000beb5647b9435b082582a1a43da8edb9c40440e85
Arg [2] : 0000000000000000000000000a67e0fc963641945b2c02d7a6c4b1dfe0d2df99


Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
0x0B218fC154CABcbD49E87EEC9ea821c0fF9FdF9B
Loading...
Loading
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.