Source Code
Overview
ETH Balance
0 ETH
More Info
ContractCreator
Multichain Info
N/A
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Loading...
Loading
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);
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.33;
abstract contract ProtocolVersion {
function protocolVersion() public pure returns (string memory) {
return "0.9.8";
}
}{
"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"}]Contract Creation Code
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
Loading...
Loading
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.