Source Code
Overview
ETH Balance
0 ETH
More Info
ContractCreator
TokenTracker
Multichain Info
N/A
Latest 25 from a total of 40 transactions
| Transaction Hash |
Method
|
Block
|
From
|
To
|
Amount
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Transfer | 9010062 | 207 days ago | IN | 0 ETH | 0.00018781 | ||||
| Transfer | 9010051 | 207 days ago | IN | 0 ETH | 0.00016132 | ||||
| Transfer | 8966543 | 213 days ago | IN | 0 ETH | 0.00016105 | ||||
| Transfer | 8966366 | 213 days ago | IN | 0 ETH | 0.00016102 | ||||
| Transfer | 8966358 | 213 days ago | IN | 0 ETH | 0.00017555 | ||||
| Transfer | 8965933 | 213 days ago | IN | 0 ETH | 0.00018755 | ||||
| Transfer | 8965928 | 213 days ago | IN | 0 ETH | 0.00016102 | ||||
| Transfer | 8956357 | 214 days ago | IN | 0 ETH | 0.00016107 | ||||
| Transfer | 8950433 | 215 days ago | IN | 0 ETH | 0.00018755 | ||||
| Transfer | 8950405 | 215 days ago | IN | 0 ETH | 0.00016102 | ||||
| Transfer | 8950373 | 215 days ago | IN | 0 ETH | 0.00018755 | ||||
| Transfer | 8950364 | 215 days ago | IN | 0 ETH | 0.00016102 | ||||
| Transfer | 8948761 | 215 days ago | IN | 0 ETH | 0.00018755 | ||||
| Transfer | 8948752 | 215 days ago | IN | 0 ETH | 0.00016102 | ||||
| Transfer | 8919944 | 219 days ago | IN | 0 ETH | 0.00033674 | ||||
| Transfer | 8919939 | 219 days ago | IN | 0 ETH | 0.00031885 | ||||
| Transfer | 8919932 | 219 days ago | IN | 0 ETH | 0.00034195 | ||||
| Transfer | 8917485 | 220 days ago | IN | 0 ETH | 0.00029351 | ||||
| Transfer From | 8917477 | 220 days ago | IN | 0 ETH | 0.00013441 | ||||
| Transfer From | 8917474 | 220 days ago | IN | 0 ETH | 0.00013712 | ||||
| Approve | 8917459 | 220 days ago | IN | 0 ETH | 0.00020331 | ||||
| Approve | 8917435 | 220 days ago | IN | 0 ETH | 0.00016605 | ||||
| Approve | 8917350 | 220 days ago | IN | 0 ETH | 0.00009609 | ||||
| Approve | 8917346 | 220 days ago | IN | 0 ETH | 0.00016805 | ||||
| Transfer | 8783339 | 239 days ago | IN | 0 ETH | 0.00016114 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
CharityCoin
Compiler Version
v0.8.25+commit.b61c2a91
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.2;
import "./ERC20.sol";
import "./DonationPool.sol";
// CharityCoin.sol
contract CharityCoin is ERC20 {
address public owner;
address public immutable donationPool; // Donation pool address is immutable
uint256 public initialSupply = 3000000000 * 10**decimals(); // Set initial supply
uint256 public maxTransactionPercent = 5; // Set a maxTransactionAmount: % of the initial supply
uint256 public donationFeePercent = 1; // donationFee on each transaction
constructor(address _donationPool) ERC20("CharityCoin", "GIVE") {
require(
_donationPool != address(0),
"Donation Pool cannot be zero address."
);
donationPool = _donationPool; // Set at construction and immutable
owner = msg.sender;
// define total supply and assign all of them to the account owner
_mint(owner, initialSupply); // Mint totalSupply ONE TIME
uint256 initialDonation = (initialSupply * ((5 * 10**16) / 100)) /
10**16; // NEED TO FINALIZE initialDonation Amount...
_transfer(msg.sender, donationPool, initialDonation); // Seed the donation pool on mint
// update pool
IDonationPool(donationPool).updatePool(
msg.sender,
address(this),
initialDonation
);
}
function transfer(address recipient, uint256 amount)
public
override
returns (bool)
{
uint256 maxTransactionAmount = (initialSupply *
((maxTransactionPercent * 10**16) / 100)) / 10**16;
require(
amount <= maxTransactionAmount,
"Transfer amount exceeds the maxTransactionAmount."
);
uint256 donationFee = 0;
// exclude deduction if sender/recipient is owner
if (msg.sender == donationPool || recipient == donationPool) {
// not allowed case
if (msg.sender == donationPool) {
require(
msg.sender == donationPool,
"Transfer out from donation pool is not allowed"
);
}
// update pool
if (recipient == donationPool) {
IDonationPool(donationPool).updatePool(
msg.sender,
address(this),
amount
);
}
} else {
donationFee =
(amount * ((donationFeePercent * 10**16) / 100)) /
10**16;
_transfer(msg.sender, donationPool, donationFee);
// update pool
IDonationPool(donationPool).updatePool(
msg.sender,
address(this),
donationFee
);
}
return super.transfer(recipient, amount - donationFee);
}
function transferFrom(
address sender,
address recipient,
uint256 amount
) public override returns (bool) {
uint256 maxTransactionAmount = (initialSupply *
((maxTransactionPercent * 10**16) / 100)) / 10**16;
// console.log("CharityCoin -> maxTransactionAmount", initialSupply, maxTransactionPercent, maxTransactionAmount);
require(
amount <= maxTransactionAmount,
"Transfer amount exceeds the maxTransactionAmount. "
);
uint256 donationFee = 0;
// exclude deduction if sender/recipient is owner
if (sender == donationPool || recipient == donationPool) {
// charity out case
if (sender == donationPool) {
}
// update pool
if (recipient == donationPool) {
IDonationPool(donationPool).updatePool(
sender,
address(this),
amount
);
}
} else {
donationFee =
(amount * ((donationFeePercent * 10**16) / 100)) /
10**16;
_transfer(sender, donationPool, donationFee);
// update pool
IDonationPool(donationPool).updatePool(
sender,
address(this),
donationFee
);
}
return super.transferFrom(sender, recipient, amount - donationFee);
}
}
// 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;
}
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.2;
import "./IERC20.sol";
interface IDonationPool {
function updatePool (address sender, address token, uint256 amount) external;
}
// DonationPool.sol
contract DonationPool {
address public owner;
mapping(address => mapping(address => uint256)) public donations; // tokenAddress => donorAddress => amountDonated
mapping(address => uint256) public totalDonations; // tokenAddress => totalDonations
address[] public tokenAddresses; // Array to store token addresses
event Donation(address indexed donor, address indexed token, uint256 amount); // Donation Received
event Transfer(address indexed sender, address indexed recipient, address indexed token, uint256 amount); // transfered to charity
event Approval(address indexed admin, address indexed spender, uint256 amount);
modifier onlyOwner() {
require(msg.sender == owner, "Only owner can call this function");
_;
}
constructor() {
owner = msg.sender;
}
function isTokenAddressExists(address tokenAddress) internal view returns (bool) {
for (uint256 i = 0; i < tokenAddresses.length; i++) {
if (tokenAddresses[i] == tokenAddress) {
return true;
}
}
return false;
}
function updatePool (address sender, address token, uint256 amount) external {
donations[token][sender] += amount;
totalDonations[token] += amount;
if (!isTokenAddressExists(token)) {
tokenAddresses.push(token);
}
emit Donation(msg.sender, token, amount);
}
function approveSpending(address token, uint256 amount) external onlyOwner {
// IERC20(token).approve(spender, amount);
IERC20(token).approve(address(this), amount);
emit Approval(msg.sender, address(this), amount);
}
function transferToCharity(address token, address recipient, uint256 amount) external onlyOwner {
require(amount > 0, "Amount must be greater than zero");
require(totalDonations[token] >= amount, "Insufficient balance");
IERC20(token).transferFrom(address(this), recipient, amount);
totalDonations[token] -= amount;
emit Transfer(address(this), recipient, token, amount);
}
function getDonationBalance(address token, address donor) external view returns (uint256) {
return donations[token][donor];
}
function getTotalDonations(address token) external view returns (uint256) {
return totalDonations[token];
}
function getTokenAddresses() external view returns (address[] memory) {
return tokenAddresses;
}
function getTotalDonationsForTokens() external view returns (uint256[] memory) {
uint256[] memory balances = new uint256[](tokenAddresses.length);
for (uint256 i = 0; i < tokenAddresses.length; i++) {
balances[i] = totalDonations[tokenAddresses[i]];
}
return balances;
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/draft-IERC6093.sol)
pragma solidity ^0.8.20;
/**
* @dev Standard ERC20 Errors
* Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC20 tokens.
*/
interface IERC20Errors {
/**
* @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
* @param sender Address whose tokens are being transferred.
* @param balance Current balance for the interacting account.
* @param needed Minimum amount required to perform a transfer.
*/
error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);
/**
* @dev Indicates a failure with the token `sender`. Used in transfers.
* @param sender Address whose tokens are being transferred.
*/
error ERC20InvalidSender(address sender);
/**
* @dev Indicates a failure with the token `receiver`. Used in transfers.
* @param receiver Address to which tokens are being transferred.
*/
error ERC20InvalidReceiver(address receiver);
/**
* @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers.
* @param spender Address that may be allowed to operate on tokens without being their owner.
* @param allowance Amount of tokens a `spender` is allowed to operate with.
* @param needed Minimum amount required to perform a transfer.
*/
error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);
/**
* @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
* @param approver Address initiating an approval operation.
*/
error ERC20InvalidApprover(address approver);
/**
* @dev Indicates a failure with the `spender` to be approved. Used in approvals.
* @param spender Address that may be allowed to operate on tokens without being their owner.
*/
error ERC20InvalidSpender(address spender);
}
/**
* @dev Standard ERC721 Errors
* Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC721 tokens.
*/
interface IERC721Errors {
/**
* @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in EIP-20.
* Used in balance queries.
* @param owner Address of the current owner of a token.
*/
error ERC721InvalidOwner(address owner);
/**
* @dev Indicates a `tokenId` whose `owner` is the zero address.
* @param tokenId Identifier number of a token.
*/
error ERC721NonexistentToken(uint256 tokenId);
/**
* @dev Indicates an error related to the ownership over a particular token. Used in transfers.
* @param sender Address whose tokens are being transferred.
* @param tokenId Identifier number of a token.
* @param owner Address of the current owner of a token.
*/
error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner);
/**
* @dev Indicates a failure with the token `sender`. Used in transfers.
* @param sender Address whose tokens are being transferred.
*/
error ERC721InvalidSender(address sender);
/**
* @dev Indicates a failure with the token `receiver`. Used in transfers.
* @param receiver Address to which tokens are being transferred.
*/
error ERC721InvalidReceiver(address receiver);
/**
* @dev Indicates a failure with the `operator`’s approval. Used in transfers.
* @param operator Address that may be allowed to operate on tokens without being their owner.
* @param tokenId Identifier number of a token.
*/
error ERC721InsufficientApproval(address operator, uint256 tokenId);
/**
* @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
* @param approver Address initiating an approval operation.
*/
error ERC721InvalidApprover(address approver);
/**
* @dev Indicates a failure with the `operator` to be approved. Used in approvals.
* @param operator Address that may be allowed to operate on tokens without being their owner.
*/
error ERC721InvalidOperator(address operator);
}
/**
* @dev Standard ERC1155 Errors
* Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC1155 tokens.
*/
interface IERC1155Errors {
/**
* @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
* @param sender Address whose tokens are being transferred.
* @param balance Current balance for the interacting account.
* @param needed Minimum amount required to perform a transfer.
* @param tokenId Identifier number of a token.
*/
error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId);
/**
* @dev Indicates a failure with the token `sender`. Used in transfers.
* @param sender Address whose tokens are being transferred.
*/
error ERC1155InvalidSender(address sender);
/**
* @dev Indicates a failure with the token `receiver`. Used in transfers.
* @param receiver Address to which tokens are being transferred.
*/
error ERC1155InvalidReceiver(address receiver);
/**
* @dev Indicates a failure with the `operator`’s approval. Used in transfers.
* @param operator Address that may be allowed to operate on tokens without being their owner.
* @param owner Address of the current owner of a token.
*/
error ERC1155MissingApprovalForAll(address operator, address owner);
/**
* @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
* @param approver Address initiating an approval operation.
*/
error ERC1155InvalidApprover(address approver);
/**
* @dev Indicates a failure with the `operator` to be approved. Used in approvals.
* @param operator Address that may be allowed to operate on tokens without being their owner.
*/
error ERC1155InvalidOperator(address operator);
/**
* @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.
* Used in batch transfers.
* @param idsLength Length of the array of token identifiers
* @param valuesLength Length of the array of token amounts
*/
error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import "./IERC20.sol";
import {IERC20Metadata} from "./IERC20Metadata.sol";
import {Context} from "./Context.sol";
import {IERC20Errors} from "./draft-IERC6093.sol";
/**
* @dev Implementation of the {IERC20} interface.
*
* This implementation is agnostic to the way tokens are created. This means
* that a supply mechanism has to be added in a derived contract using {_mint}.
*
* TIP: For a detailed writeup see our guide
* https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
* to implement supply mechanisms].
*
* The default value of {decimals} is 18. To change this, you should override
* this function so it returns a different value.
*
* We have followed general OpenZeppelin Contracts guidelines: functions revert
* instead returning `false` on failure. This behavior is nonetheless
* conventional and does not conflict with the expectations of ERC20
* applications.
*
* Additionally, an {Approval} event is emitted on calls to {transferFrom}.
* This allows applications to reconstruct the allowance for all accounts just
* by listening to said events. Other implementations of the EIP may not emit
* these events, as it isn't required by the specification.
*/
abstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors {
mapping(address account => uint256) private _balances;
mapping(address account => mapping(address spender => uint256)) private _allowances;
uint256 private _totalSupply;
string private _name;
string private _symbol;
/**
* @dev Sets the values for {name} and {symbol}.
*
* All two of these values are immutable: they can only be set once during
* construction.
*/
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
/**
* @dev Returns the name of the token.
*/
function name() public view virtual returns (string memory) {
return _name;
}
/**
* @dev Returns the symbol of the token, usually a shorter version of the
* name.
*/
function symbol() public view virtual returns (string memory) {
return _symbol;
}
/**
* @dev Returns the number of decimals used to get its user representation.
* For example, if `decimals` equals `2`, a balance of `505` tokens should
* be displayed to a user as `5.05` (`505 / 10 ** 2`).
*
* Tokens usually opt for a value of 18, imitating the relationship between
* Ether and Wei. This is the default value returned by this function, unless
* it's overridden.
*
* NOTE: This information is only used for _display_ purposes: it in
* no way affects any of the arithmetic of the contract, including
* {IERC20-balanceOf} and {IERC20-transfer}.
*/
function decimals() public view virtual returns (uint8) {
return 18;
}
/**
* @dev See {IERC20-totalSupply}.
*/
function totalSupply() public view virtual returns (uint256) {
return _totalSupply;
}
/**
* @dev See {IERC20-balanceOf}.
*/
function balanceOf(address account) public view virtual returns (uint256) {
return _balances[account];
}
/**
* @dev See {IERC20-transfer}.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - the caller must have a balance of at least `value`.
*/
function transfer(address to, uint256 value) public virtual returns (bool) {
address owner = _msgSender();
_transfer(owner, to, value);
return true;
}
/**
* @dev See {IERC20-allowance}.
*/
function allowance(address owner, address spender) public view virtual returns (uint256) {
return _allowances[owner][spender];
}
/**
* @dev See {IERC20-approve}.
*
* NOTE: If `value` is the maximum `uint256`, the allowance is not updated on
* `transferFrom`. This is semantically equivalent to an infinite approval.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function approve(address spender, uint256 value) public virtual returns (bool) {
address owner = _msgSender();
_approve(owner, spender, value);
return true;
}
/**
* @dev See {IERC20-transferFrom}.
*
* Emits an {Approval} event indicating the updated allowance. This is not
* required by the EIP. See the note at the beginning of {ERC20}.
*
* NOTE: Does not update the allowance if the current allowance
* is the maximum `uint256`.
*
* Requirements:
*
* - `from` and `to` cannot be the zero address.
* - `from` must have a balance of at least `value`.
* - the caller must have allowance for ``from``'s tokens of at least
* `value`.
*/
function transferFrom(address from, address to, uint256 value) public virtual returns (bool) {
address spender = _msgSender();
_spendAllowance(from, spender, value);
_transfer(from, to, value);
return true;
}
/**
* @dev Moves a `value` amount of tokens from `from` to `to`.
*
* This internal function is equivalent to {transfer}, and can be used to
* e.g. implement automatic token fees, slashing mechanisms, etc.
*
* Emits a {Transfer} event.
*
* NOTE: This function is not virtual, {_update} should be overridden instead.
*/
function _transfer(address from, address to, uint256 value) internal {
if (from == address(0)) {
revert ERC20InvalidSender(address(0));
}
if (to == address(0)) {
revert ERC20InvalidReceiver(address(0));
}
_update(from, to, value);
}
/**
* @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from`
* (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding
* this function.
*
* Emits a {Transfer} event.
*/
function _update(address from, address to, uint256 value) internal virtual {
if (from == address(0)) {
// Overflow check required: The rest of the code assumes that totalSupply never overflows
_totalSupply += value;
} else {
uint256 fromBalance = _balances[from];
if (fromBalance < value) {
revert ERC20InsufficientBalance(from, fromBalance, value);
}
unchecked {
// Overflow not possible: value <= fromBalance <= totalSupply.
_balances[from] = fromBalance - value;
}
}
if (to == address(0)) {
unchecked {
// Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply.
_totalSupply -= value;
}
} else {
unchecked {
// Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256.
_balances[to] += value;
}
}
emit Transfer(from, to, value);
}
/**
* @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0).
* Relies on the `_update` mechanism
*
* Emits a {Transfer} event with `from` set to the zero address.
*
* NOTE: This function is not virtual, {_update} should be overridden instead.
*/
function _mint(address account, uint256 value) internal {
if (account == address(0)) {
revert ERC20InvalidReceiver(address(0));
}
_update(address(0), account, value);
}
/**
* @dev Destroys a `value` amount of tokens from `account`, lowering the total supply.
* Relies on the `_update` mechanism.
*
* Emits a {Transfer} event with `to` set to the zero address.
*
* NOTE: This function is not virtual, {_update} should be overridden instead
*/
function _burn(address account, uint256 value) internal {
if (account == address(0)) {
revert ERC20InvalidSender(address(0));
}
_update(account, address(0), value);
}
/**
* @dev Sets `value` as the allowance of `spender` over the `owner` s tokens.
*
* This internal function is equivalent to `approve`, and can be used to
* e.g. set automatic allowances for certain subsystems, etc.
*
* Emits an {Approval} event.
*
* Requirements:
*
* - `owner` cannot be the zero address.
* - `spender` cannot be the zero address.
*
* Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument.
*/
function _approve(address owner, address spender, uint256 value) internal {
_approve(owner, spender, value, true);
}
/**
* @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event.
*
* By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by
* `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any
* `Approval` event during `transferFrom` operations.
*
* Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to
* true using the following override:
* ```
* function _approve(address owner, address spender, uint256 value, bool) internal virtual override {
* super._approve(owner, spender, value, true);
* }
* ```
*
* Requirements are the same as {_approve}.
*/
function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual {
if (owner == address(0)) {
revert ERC20InvalidApprover(address(0));
}
if (spender == address(0)) {
revert ERC20InvalidSpender(address(0));
}
_allowances[owner][spender] = value;
if (emitEvent) {
emit Approval(owner, spender, value);
}
}
/**
* @dev Updates `owner` s allowance for `spender` based on spent `value`.
*
* Does not update the allowance value in case of infinite allowance.
* Revert if not enough allowance is available.
*
* Does not emit an {Approval} event.
*/
function _spendAllowance(address owner, address spender, uint256 value) internal virtual {
uint256 currentAllowance = allowance(owner, spender);
if (currentAllowance != type(uint256).max) {
if (currentAllowance < value) {
revert ERC20InsufficientAllowance(spender, currentAllowance, value);
}
unchecked {
_approve(owner, spender, currentAllowance - value, false);
}
}
}
}
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.20;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
/**
* @dev Returns the value of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the value of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves a `value` amount of tokens from the caller's account to `to`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address to, uint256 value) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets a `value` amount of tokens as the allowance of `spender` over the
* caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 value) external returns (bool);
/**
* @dev Moves a `value` amount of tokens from `from` to `to` using the
* allowance mechanism. `value` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(address from, address to, uint256 value) external returns (bool);
}
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Metadata.sol)
pragma solidity ^0.8.20;
import {IERC20} from "./IERC20.sol";
/**
* @dev Interface for the optional metadata functions from the ERC20 standard.
*/
interface IERC20Metadata is IERC20 {
/**
* @dev Returns the name of the token.
*/
function name() external view returns (string memory);
/**
* @dev Returns the symbol of the token.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the decimals places of the token.
*/
function decimals() external view returns (uint8);
}
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_donationPool","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"donationFeePercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"donationPool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60a06040526100126102ba60201b60201c565b600a61001e91906107c7565b63b2d05e0061002d9190610811565b60065560056007556001600855348015610045575f80fd5b50604051612777380380612777833981810160405281019061006791906108b0565b6040518060400160405280600b81526020017f43686172697479436f696e0000000000000000000000000000000000000000008152506040518060400160405280600481526020017f474956450000000000000000000000000000000000000000000000000000000081525081600390816100e29190610b0c565b5080600490816100f29190610b0c565b5050505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610163576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161015a90610c5b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250503360055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061020a60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166006546102c260201b60201c565b5f662386f26fc100006601c6bf526340006006546102289190610811565b6102329190610ca6565b9050610247336080518361034760201b60201c565b60805173ffffffffffffffffffffffffffffffffffffffff166339b8c17c3330846040518463ffffffff1660e01b815260040161028693929190610cf4565b5f604051808303815f87803b15801561029d575f80fd5b505af11580156102af573d5f803e3d5ffd5b505050505050610dc3565b5f6012905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610332575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016103299190610d29565b60405180910390fd5b6103435f838361043d60201b60201c565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036103b7575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016103ae9190610d29565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610427575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161041e9190610d29565b60405180910390fd5b61043883838361043d60201b60201c565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361048d578060025f8282546104819190610d42565b9250508190555061055b565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610516578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161050d93929190610d75565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036105a2578060025f82825403925050819055506105ec565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516106499190610daa565b60405180910390a3505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b60018511156106d8578086048111156106b4576106b3610656565b5b60018516156106c35780820291505b80810290506106d185610683565b9450610698565b94509492505050565b5f826106f057600190506107ab565b816106fd575f90506107ab565b8160018114610713576002811461071d5761074c565b60019150506107ab565b60ff84111561072f5761072e610656565b5b8360020a91508482111561074657610745610656565b5b506107ab565b5060208310610133831016604e8410600b84101617156107815782820a90508381111561077c5761077b610656565b5b6107ab565b61078e848484600161068f565b925090508184048111156107a5576107a4610656565b5b81810290505b9392505050565b5f819050919050565b5f60ff82169050919050565b5f6107d1826107b2565b91506107dc836107bb565b92506108097fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846106e1565b905092915050565b5f61081b826107b2565b9150610826836107b2565b9250828202610834816107b2565b9150828204841483151761084b5761084a610656565b5b5092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61087f82610856565b9050919050565b61088f81610875565b8114610899575f80fd5b50565b5f815190506108aa81610886565b92915050565b5f602082840312156108c5576108c4610852565b5b5f6108d28482850161089c565b91505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061095657607f821691505b60208210810361096957610968610912565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026109cb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610990565b6109d58683610990565b95508019841693508086168417925050509392505050565b5f819050919050565b5f610a10610a0b610a06846107b2565b6109ed565b6107b2565b9050919050565b5f819050919050565b610a29836109f6565b610a3d610a3582610a17565b84845461099c565b825550505050565b5f90565b610a51610a45565b610a5c818484610a20565b505050565b5b81811015610a7f57610a745f82610a49565b600181019050610a62565b5050565b601f821115610ac457610a958161096f565b610a9e84610981565b81016020851015610aad578190505b610ac1610ab985610981565b830182610a61565b50505b505050565b5f82821c905092915050565b5f610ae45f1984600802610ac9565b1980831691505092915050565b5f610afc8383610ad5565b9150826002028217905092915050565b610b15826108db565b67ffffffffffffffff811115610b2e57610b2d6108e5565b5b610b38825461093f565b610b43828285610a83565b5f60209050601f831160018114610b74575f8415610b62578287015190505b610b6c8582610af1565b865550610bd3565b601f198416610b828661096f565b5f5b82811015610ba957848901518255600182019150602085019450602081019050610b84565b86831015610bc65784890151610bc2601f891682610ad5565b8355505b6001600288020188555050505b505050505050565b5f82825260208201905092915050565b7f446f6e6174696f6e20506f6f6c2063616e6e6f74206265207a65726f206164645f8201527f726573732e000000000000000000000000000000000000000000000000000000602082015250565b5f610c45602583610bdb565b9150610c5082610beb565b604082019050919050565b5f6020820190508181035f830152610c7281610c39565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f610cb0826107b2565b9150610cbb836107b2565b925082610ccb57610cca610c79565b5b828204905092915050565b610cdf81610875565b82525050565b610cee816107b2565b82525050565b5f606082019050610d075f830186610cd6565b610d146020830185610cd6565b610d216040830184610ce5565b949350505050565b5f602082019050610d3c5f830184610cd6565b92915050565b5f610d4c826107b2565b9150610d57836107b2565b9250828201905080821115610d6f57610d6e610656565b5b92915050565b5f606082019050610d885f830186610cd6565b610d956020830185610ce5565b610da26040830184610ce5565b949350505050565b5f602082019050610dbd5f830184610ce5565b92915050565b608051611933610e445f395f818161042f01528181610484015281816104d9015281816104fb0152818161054e01528181610622015281816106490152818161088b015281816108e0015281816109350152818161098801528181610a1701528181610a6a01528181610b3e01528181610b650152610c9701526119335ff3fe608060405234801561000f575f80fd5b50600436106100e8575f3560e01c806370a082311161008a578063a9059cbb11610064578063a9059cbb1461024e578063ad6096461461027e578063dd62ed3e1461029c578063ff9de934146102cc576100e8565b806370a08231146101e25780638da5cb5b1461021257806395d89b4114610230576100e8565b806323b872dd116100c657806323b872dd14610158578063313ce56714610188578063378dc3dc146101a65780635c935f44146101c4576100e8565b806306fdde03146100ec578063095ea7b31461010a57806318160ddd1461013a575b5f80fd5b6100f46102ea565b60405161010191906112fc565b60405180910390f35b610124600480360381019061011f91906113ad565b61037a565b6040516101319190611405565b60405180910390f35b61014261039c565b60405161014f919061142d565b60405180910390f35b610172600480360381019061016d9190611446565b6103a5565b60405161017f9190611405565b60405180910390f35b6101906106f3565b60405161019d91906114b1565b60405180910390f35b6101ae6106fb565b6040516101bb919061142d565b60405180910390f35b6101cc610701565b6040516101d9919061142d565b60405180910390f35b6101fc60048036038101906101f791906114ca565b610707565b604051610209919061142d565b60405180910390f35b61021a61074c565b6040516102279190611504565b60405180910390f35b610238610771565b60405161024591906112fc565b60405180910390f35b610268600480360381019061026391906113ad565b610801565b6040516102759190611405565b60405180910390f35b610286610c0d565b604051610293919061142d565b60405180910390f35b6102b660048036038101906102b1919061151d565b610c13565b6040516102c3919061142d565b60405180910390f35b6102d4610c95565b6040516102e19190611504565b60405180910390f35b6060600380546102f990611588565b80601f016020809104026020016040519081016040528092919081815260200182805461032590611588565b80156103705780601f1061034757610100808354040283529160200191610370565b820191905f5260205f20905b81548152906001019060200180831161035357829003601f168201915b5050505050905090565b5f80610384610cb9565b9050610391818585610cc0565b600191505092915050565b5f600254905090565b5f80662386f26fc100006064662386f26fc100006007546103c691906115e5565b6103d09190611653565b6006546103dd91906115e5565b6103e79190611653565b90508083111561042c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610423906116f3565b60405180910390fd5b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614806104d257507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b156105dc577f0000000000000000000000000000000000000000000000000000000000000000507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036105d7577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166339b8c17c8730876040518463ffffffff1660e01b81526004016105a993929190611711565b5f604051808303815f87803b1580156105c0575f80fd5b505af11580156105d2573d5f803e3d5ffd5b505050505b6106d2565b662386f26fc100006064662386f26fc100006008546105fb91906115e5565b6106059190611653565b8561061091906115e5565b61061a9190611653565b9050610647867f000000000000000000000000000000000000000000000000000000000000000083610cd2565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166339b8c17c8730846040518463ffffffff1660e01b81526004016106a493929190611711565b5f604051808303815f87803b1580156106bb575f80fd5b505af11580156106cd573d5f803e3d5ffd5b505050505b6106e8868683876106e39190611746565b610dc2565b925050509392505050565b5f6012905090565b60065481565b60085481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606004805461078090611588565b80601f01602080910402602001604051908101604052809291908181526020018280546107ac90611588565b80156107f75780601f106107ce576101008083540402835291602001916107f7565b820191905f5260205f20905b8154815290600101906020018083116107da57829003601f168201915b5050505050905090565b5f80662386f26fc100006064662386f26fc1000060075461082291906115e5565b61082c9190611653565b60065461083991906115e5565b6108439190611653565b905080831115610888576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f906117e9565b60405180910390fd5b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061092e57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b15610af8577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1603610a15577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0b90611877565b60405180910390fd5b5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603610af3577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166339b8c17c3330876040518463ffffffff1660e01b8152600401610ac593929190611711565b5f604051808303815f87803b158015610adc575f80fd5b505af1158015610aee573d5f803e3d5ffd5b505050505b610bee565b662386f26fc100006064662386f26fc10000600854610b1791906115e5565b610b219190611653565b85610b2c91906115e5565b610b369190611653565b9050610b63337f000000000000000000000000000000000000000000000000000000000000000083610cd2565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166339b8c17c3330846040518463ffffffff1660e01b8152600401610bc093929190611711565b5f604051808303815f87803b158015610bd7575f80fd5b505af1158015610be9573d5f803e3d5ffd5b505050505b610c03858286610bfe9190611746565b610df0565b9250505092915050565b60075481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f33905090565b610ccd8383836001610e12565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d42575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610d399190611504565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610db2575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610da99190611504565b60405180910390fd5b610dbd838383610fe1565b505050565b5f80610dcc610cb9565b9050610dd98582856111fa565b610de4858585610cd2565b60019150509392505050565b5f80610dfa610cb9565b9050610e07818585610cd2565b600191505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610e82575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610e799190611504565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610ef2575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610ee99190611504565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015610fdb578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610fd2919061142d565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611031578060025f8282546110259190611895565b925050819055506110ff565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156110ba578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016110b1939291906118c8565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611146578060025f8282540392505081905550611190565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516111ed919061142d565b60405180910390a3505050565b5f6112058484610c13565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146112865781811015611277578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161126e939291906118c8565b60405180910390fd5b61128584848484035f610e12565b5b50505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6112ce8261128c565b6112d88185611296565b93506112e88185602086016112a6565b6112f1816112b4565b840191505092915050565b5f6020820190508181035f83015261131481846112c4565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61134982611320565b9050919050565b6113598161133f565b8114611363575f80fd5b50565b5f8135905061137481611350565b92915050565b5f819050919050565b61138c8161137a565b8114611396575f80fd5b50565b5f813590506113a781611383565b92915050565b5f80604083850312156113c3576113c261131c565b5b5f6113d085828601611366565b92505060206113e185828601611399565b9150509250929050565b5f8115159050919050565b6113ff816113eb565b82525050565b5f6020820190506114185f8301846113f6565b92915050565b6114278161137a565b82525050565b5f6020820190506114405f83018461141e565b92915050565b5f805f6060848603121561145d5761145c61131c565b5b5f61146a86828701611366565b935050602061147b86828701611366565b925050604061148c86828701611399565b9150509250925092565b5f60ff82169050919050565b6114ab81611496565b82525050565b5f6020820190506114c45f8301846114a2565b92915050565b5f602082840312156114df576114de61131c565b5b5f6114ec84828501611366565b91505092915050565b6114fe8161133f565b82525050565b5f6020820190506115175f8301846114f5565b92915050565b5f80604083850312156115335761153261131c565b5b5f61154085828601611366565b925050602061155185828601611366565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061159f57607f821691505b6020821081036115b2576115b161155b565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6115ef8261137a565b91506115fa8361137a565b92508282026116088161137a565b9150828204841483151761161f5761161e6115b8565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61165d8261137a565b91506116688361137a565b92508261167857611677611626565b5b828204905092915050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d6178545f8201527f72616e73616374696f6e416d6f756e742e200000000000000000000000000000602082015250565b5f6116dd603283611296565b91506116e882611683565b604082019050919050565b5f6020820190508181035f83015261170a816116d1565b9050919050565b5f6060820190506117245f8301866114f5565b61173160208301856114f5565b61173e604083018461141e565b949350505050565b5f6117508261137a565b915061175b8361137a565b9250828203905081811115611773576117726115b8565b5b92915050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d6178545f8201527f72616e73616374696f6e416d6f756e742e000000000000000000000000000000602082015250565b5f6117d3603183611296565b91506117de82611779565b604082019050919050565b5f6020820190508181035f830152611800816117c7565b9050919050565b7f5472616e73666572206f75742066726f6d20646f6e6174696f6e20706f6f6c205f8201527f6973206e6f7420616c6c6f776564000000000000000000000000000000000000602082015250565b5f611861602e83611296565b915061186c82611807565b604082019050919050565b5f6020820190508181035f83015261188e81611855565b9050919050565b5f61189f8261137a565b91506118aa8361137a565b92508282019050808211156118c2576118c16115b8565b5b92915050565b5f6060820190506118db5f8301866114f5565b6118e8602083018561141e565b6118f5604083018461141e565b94935050505056fea2646970667358221220975d772d1ef35ccf740c6dc67afdf0122c863d13a080b1242a4ae127c74c567f64736f6c6343000819003300000000000000000000000020007fa59093c91f9987d9c0da60db3cba3947a7
Deployed Bytecode
0x608060405234801561000f575f80fd5b50600436106100e8575f3560e01c806370a082311161008a578063a9059cbb11610064578063a9059cbb1461024e578063ad6096461461027e578063dd62ed3e1461029c578063ff9de934146102cc576100e8565b806370a08231146101e25780638da5cb5b1461021257806395d89b4114610230576100e8565b806323b872dd116100c657806323b872dd14610158578063313ce56714610188578063378dc3dc146101a65780635c935f44146101c4576100e8565b806306fdde03146100ec578063095ea7b31461010a57806318160ddd1461013a575b5f80fd5b6100f46102ea565b60405161010191906112fc565b60405180910390f35b610124600480360381019061011f91906113ad565b61037a565b6040516101319190611405565b60405180910390f35b61014261039c565b60405161014f919061142d565b60405180910390f35b610172600480360381019061016d9190611446565b6103a5565b60405161017f9190611405565b60405180910390f35b6101906106f3565b60405161019d91906114b1565b60405180910390f35b6101ae6106fb565b6040516101bb919061142d565b60405180910390f35b6101cc610701565b6040516101d9919061142d565b60405180910390f35b6101fc60048036038101906101f791906114ca565b610707565b604051610209919061142d565b60405180910390f35b61021a61074c565b6040516102279190611504565b60405180910390f35b610238610771565b60405161024591906112fc565b60405180910390f35b610268600480360381019061026391906113ad565b610801565b6040516102759190611405565b60405180910390f35b610286610c0d565b604051610293919061142d565b60405180910390f35b6102b660048036038101906102b1919061151d565b610c13565b6040516102c3919061142d565b60405180910390f35b6102d4610c95565b6040516102e19190611504565b60405180910390f35b6060600380546102f990611588565b80601f016020809104026020016040519081016040528092919081815260200182805461032590611588565b80156103705780601f1061034757610100808354040283529160200191610370565b820191905f5260205f20905b81548152906001019060200180831161035357829003601f168201915b5050505050905090565b5f80610384610cb9565b9050610391818585610cc0565b600191505092915050565b5f600254905090565b5f80662386f26fc100006064662386f26fc100006007546103c691906115e5565b6103d09190611653565b6006546103dd91906115e5565b6103e79190611653565b90508083111561042c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610423906116f3565b60405180910390fd5b5f7f00000000000000000000000020007fa59093c91f9987d9c0da60db3cba3947a773ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614806104d257507f00000000000000000000000020007fa59093c91f9987d9c0da60db3cba3947a773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b156105dc577f00000000000000000000000020007fa59093c91f9987d9c0da60db3cba3947a7507f00000000000000000000000020007fa59093c91f9987d9c0da60db3cba3947a773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036105d7577f00000000000000000000000020007fa59093c91f9987d9c0da60db3cba3947a773ffffffffffffffffffffffffffffffffffffffff166339b8c17c8730876040518463ffffffff1660e01b81526004016105a993929190611711565b5f604051808303815f87803b1580156105c0575f80fd5b505af11580156105d2573d5f803e3d5ffd5b505050505b6106d2565b662386f26fc100006064662386f26fc100006008546105fb91906115e5565b6106059190611653565b8561061091906115e5565b61061a9190611653565b9050610647867f00000000000000000000000020007fa59093c91f9987d9c0da60db3cba3947a783610cd2565b7f00000000000000000000000020007fa59093c91f9987d9c0da60db3cba3947a773ffffffffffffffffffffffffffffffffffffffff166339b8c17c8730846040518463ffffffff1660e01b81526004016106a493929190611711565b5f604051808303815f87803b1580156106bb575f80fd5b505af11580156106cd573d5f803e3d5ffd5b505050505b6106e8868683876106e39190611746565b610dc2565b925050509392505050565b5f6012905090565b60065481565b60085481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606004805461078090611588565b80601f01602080910402602001604051908101604052809291908181526020018280546107ac90611588565b80156107f75780601f106107ce576101008083540402835291602001916107f7565b820191905f5260205f20905b8154815290600101906020018083116107da57829003601f168201915b5050505050905090565b5f80662386f26fc100006064662386f26fc1000060075461082291906115e5565b61082c9190611653565b60065461083991906115e5565b6108439190611653565b905080831115610888576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087f906117e9565b60405180910390fd5b5f7f00000000000000000000000020007fa59093c91f9987d9c0da60db3cba3947a773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061092e57507f00000000000000000000000020007fa59093c91f9987d9c0da60db3cba3947a773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b15610af8577f00000000000000000000000020007fa59093c91f9987d9c0da60db3cba3947a773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1603610a15577f00000000000000000000000020007fa59093c91f9987d9c0da60db3cba3947a773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0b90611877565b60405180910390fd5b5b7f00000000000000000000000020007fa59093c91f9987d9c0da60db3cba3947a773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603610af3577f00000000000000000000000020007fa59093c91f9987d9c0da60db3cba3947a773ffffffffffffffffffffffffffffffffffffffff166339b8c17c3330876040518463ffffffff1660e01b8152600401610ac593929190611711565b5f604051808303815f87803b158015610adc575f80fd5b505af1158015610aee573d5f803e3d5ffd5b505050505b610bee565b662386f26fc100006064662386f26fc10000600854610b1791906115e5565b610b219190611653565b85610b2c91906115e5565b610b369190611653565b9050610b63337f00000000000000000000000020007fa59093c91f9987d9c0da60db3cba3947a783610cd2565b7f00000000000000000000000020007fa59093c91f9987d9c0da60db3cba3947a773ffffffffffffffffffffffffffffffffffffffff166339b8c17c3330846040518463ffffffff1660e01b8152600401610bc093929190611711565b5f604051808303815f87803b158015610bd7575f80fd5b505af1158015610be9573d5f803e3d5ffd5b505050505b610c03858286610bfe9190611746565b610df0565b9250505092915050565b60075481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b7f00000000000000000000000020007fa59093c91f9987d9c0da60db3cba3947a781565b5f33905090565b610ccd8383836001610e12565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d42575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610d399190611504565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610db2575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610da99190611504565b60405180910390fd5b610dbd838383610fe1565b505050565b5f80610dcc610cb9565b9050610dd98582856111fa565b610de4858585610cd2565b60019150509392505050565b5f80610dfa610cb9565b9050610e07818585610cd2565b600191505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610e82575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610e799190611504565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610ef2575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610ee99190611504565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015610fdb578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610fd2919061142d565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611031578060025f8282546110259190611895565b925050819055506110ff565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156110ba578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016110b1939291906118c8565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611146578060025f8282540392505081905550611190565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516111ed919061142d565b60405180910390a3505050565b5f6112058484610c13565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146112865781811015611277578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161126e939291906118c8565b60405180910390fd5b61128584848484035f610e12565b5b50505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6112ce8261128c565b6112d88185611296565b93506112e88185602086016112a6565b6112f1816112b4565b840191505092915050565b5f6020820190508181035f83015261131481846112c4565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61134982611320565b9050919050565b6113598161133f565b8114611363575f80fd5b50565b5f8135905061137481611350565b92915050565b5f819050919050565b61138c8161137a565b8114611396575f80fd5b50565b5f813590506113a781611383565b92915050565b5f80604083850312156113c3576113c261131c565b5b5f6113d085828601611366565b92505060206113e185828601611399565b9150509250929050565b5f8115159050919050565b6113ff816113eb565b82525050565b5f6020820190506114185f8301846113f6565b92915050565b6114278161137a565b82525050565b5f6020820190506114405f83018461141e565b92915050565b5f805f6060848603121561145d5761145c61131c565b5b5f61146a86828701611366565b935050602061147b86828701611366565b925050604061148c86828701611399565b9150509250925092565b5f60ff82169050919050565b6114ab81611496565b82525050565b5f6020820190506114c45f8301846114a2565b92915050565b5f602082840312156114df576114de61131c565b5b5f6114ec84828501611366565b91505092915050565b6114fe8161133f565b82525050565b5f6020820190506115175f8301846114f5565b92915050565b5f80604083850312156115335761153261131c565b5b5f61154085828601611366565b925050602061155185828601611366565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061159f57607f821691505b6020821081036115b2576115b161155b565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6115ef8261137a565b91506115fa8361137a565b92508282026116088161137a565b9150828204841483151761161f5761161e6115b8565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61165d8261137a565b91506116688361137a565b92508261167857611677611626565b5b828204905092915050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d6178545f8201527f72616e73616374696f6e416d6f756e742e200000000000000000000000000000602082015250565b5f6116dd603283611296565b91506116e882611683565b604082019050919050565b5f6020820190508181035f83015261170a816116d1565b9050919050565b5f6060820190506117245f8301866114f5565b61173160208301856114f5565b61173e604083018461141e565b949350505050565b5f6117508261137a565b915061175b8361137a565b9250828203905081811115611773576117726115b8565b5b92915050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d6178545f8201527f72616e73616374696f6e416d6f756e742e000000000000000000000000000000602082015250565b5f6117d3603183611296565b91506117de82611779565b604082019050919050565b5f6020820190508181035f830152611800816117c7565b9050919050565b7f5472616e73666572206f75742066726f6d20646f6e6174696f6e20706f6f6c205f8201527f6973206e6f7420616c6c6f776564000000000000000000000000000000000000602082015250565b5f611861602e83611296565b915061186c82611807565b604082019050919050565b5f6020820190508181035f83015261188e81611855565b9050919050565b5f61189f8261137a565b91506118aa8361137a565b92508282019050808211156118c2576118c16115b8565b5b92915050565b5f6060820190506118db5f8301866114f5565b6118e8602083018561141e565b6118f5604083018461141e565b94935050505056fea2646970667358221220975d772d1ef35ccf740c6dc67afdf0122c863d13a080b1242a4ae127c74c567f64736f6c63430008190033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000020007fa59093c91f9987d9c0da60db3cba3947a7
-----Decoded View---------------
Arg [0] : _donationPool (address): 0x20007fA59093c91f9987D9c0dA60DB3Cba3947a7
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000020007fa59093c91f9987d9c0da60db3cba3947a7
Deployed Bytecode Sourcemap
128:4245:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1955:89:3;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4174:186;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3025:97;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2891:1480:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2883:82:3;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;272:58:0;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;459:37;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3180:116:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;164:20:0;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2157:93:3;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1382:1503:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;358:40;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3727:140:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;190:37:0;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1955:89:3;2000:13;2032:5;2025:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1955:89;:::o;4174:186::-;4247:4;4263:13;4279:12;:10;:12::i;:::-;4263:28;;4301:31;4310:5;4317:7;4326:5;4301:8;:31::i;:::-;4349:4;4342:11;;;4174:186;;;;:::o;3025:97::-;3077:7;3103:12;;3096:19;;3025:97;:::o;2891:1480:0:-;3019:4;3035:28;3139:6;3131:3;3121:6;3097:21;;:30;;;;:::i;:::-;3096:38;;;;:::i;:::-;3067:13;;:68;;;;:::i;:::-;3066:79;;;;:::i;:::-;3035:110;;3309:20;3299:6;:30;;3278:127;;;;;;;;;;;;:::i;:::-;;;;;;;;;3416:19;3522:12;3512:22;;:6;:22;;;:51;;;;3551:12;3538:25;;:9;:25;;;3512:51;3508:780;;;3626:12;3616:22;3713:12;3700:25;;:9;:25;;;3696:211;;3759:12;3745:38;;;3805:6;3841:4;3868:6;3745:147;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3696:211;3508:780;;;4034:6;4010:3;4000:6;3979:18;;:27;;;;:::i;:::-;3978:35;;;;:::i;:::-;3968:6;:46;;;;:::i;:::-;3967:73;;;;:::i;:::-;3937:103;;4054:44;4064:6;4072:12;4086:11;4054:9;:44::i;:::-;4154:12;4140:38;;;4196:6;4228:4;4251:11;4140:136;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3508:780;4305:59;4324:6;4332:9;4352:11;4343:6;:20;;;;:::i;:::-;4305:18;:59::i;:::-;4298:66;;;;2891:1480;;;;;:::o;2883:82:3:-;2932:5;2956:2;2949:9;;2883:82;:::o;272:58:0:-;;;;:::o;459:37::-;;;;:::o;3180:116:3:-;3245:7;3271:9;:18;3281:7;3271:18;;;;;;;;;;;;;;;;3264:25;;3180:116;;;:::o;164:20:0:-;;;;;;;;;;;;;:::o;2157:93:3:-;2204:13;2236:7;2229:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2157:93;:::o;1382:1503:0:-;1484:4;1504:28;1608:6;1600:3;1590:6;1566:21;;:30;;;;:::i;:::-;1565:38;;;;:::i;:::-;1536:13;;:68;;;;:::i;:::-;1535:79;;;;:::i;:::-;1504:110;;1655:20;1645:6;:30;;1624:126;;;;;;;;;;;;:::i;:::-;;;;;;;;;1761:19;1871:12;1857:26;;:10;:26;;;:55;;;;1900:12;1887:25;;:9;:25;;;1857:55;1853:961;;;1978:12;1964:26;;:10;:26;;;1960:208;;2053:12;2039:26;;:10;:26;;;2010:143;;;;;;;;;;;;:::i;:::-;;;;;;;;;1960:208;2227:12;2214:25;;:9;:25;;;2210:215;;2273:12;2259:38;;;2319:10;2359:4;2386:6;2259:151;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2210:215;1853:961;;;2552:6;2528:3;2518:6;2497:18;;:27;;;;:::i;:::-;2496:35;;;;:::i;:::-;2486:6;:46;;;;:::i;:::-;2485:73;;;;:::i;:::-;2455:103;;2572:48;2582:10;2594:12;2608:11;2572:9;:48::i;:::-;2676:12;2662:38;;;2718:10;2754:4;2777:11;2662:140;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1853:961;2831:47;2846:9;2866:11;2857:6;:20;;;;:::i;:::-;2831:14;:47::i;:::-;2824:54;;;;1382:1503;;;;:::o;358:40::-;;;;:::o;3727:140:3:-;3807:7;3833:11;:18;3845:5;3833:18;;;;;;;;;;;;;;;:27;3852:7;3833:27;;;;;;;;;;;;;;;;3826:34;;3727:140;;;;:::o;190:37:0:-;;;:::o;656:96:1:-;709:7;735:10;728:17;;656:96;:::o;8870:128:3:-;8954:37;8963:5;8970:7;8979:5;8986:4;8954:8;:37::i;:::-;8870:128;;;:::o;5537:300::-;5636:1;5620:18;;:4;:18;;;5616:86;;5688:1;5661:30;;;;;;;;;;;:::i;:::-;;;;;;;;5616:86;5729:1;5715:16;;:2;:16;;;5711:86;;5783:1;5754:32;;;;;;;;;;;:::i;:::-;;;;;;;;5711:86;5806:24;5814:4;5820:2;5824:5;5806:7;:24::i;:::-;5537:300;;;:::o;4920:244::-;5007:4;5023:15;5041:12;:10;:12::i;:::-;5023:30;;5063:37;5079:4;5085:7;5094:5;5063:15;:37::i;:::-;5110:26;5120:4;5126:2;5130:5;5110:9;:26::i;:::-;5153:4;5146:11;;;4920:244;;;;;:::o;3491:178::-;3560:4;3576:13;3592:12;:10;:12::i;:::-;3576:28;;3614:27;3624:5;3631:2;3635:5;3614:9;:27::i;:::-;3658:4;3651:11;;;3491:178;;;;:::o;9830:432::-;9959:1;9942:19;;:5;:19;;;9938:89;;10013:1;9984:32;;;;;;;;;;;:::i;:::-;;;;;;;;9938:89;10059:1;10040:21;;:7;:21;;;10036:90;;10112:1;10084:31;;;;;;;;;;;:::i;:::-;;;;;;;;10036:90;10165:5;10135:11;:18;10147:5;10135:18;;;;;;;;;;;;;;;:27;10154:7;10135:27;;;;;;;;;;;;;;;:35;;;;10184:9;10180:76;;;10230:7;10214:31;;10223:5;10214:31;;;10239:5;10214:31;;;;;;:::i;:::-;;;;;;;;10180:76;9830:432;;;;:::o;6152:1107::-;6257:1;6241:18;;:4;:18;;;6237:540;;6393:5;6377:12;;:21;;;;;;;:::i;:::-;;;;;;;;6237:540;;;6429:19;6451:9;:15;6461:4;6451:15;;;;;;;;;;;;;;;;6429:37;;6498:5;6484:11;:19;6480:115;;;6555:4;6561:11;6574:5;6530:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;6480:115;6747:5;6733:11;:19;6715:9;:15;6725:4;6715:15;;;;;;;;;;;;;;;:37;;;;6415:362;6237:540;6805:1;6791:16;;:2;:16;;;6787:425;;6970:5;6954:12;;:21;;;;;;;;;;;6787:425;;;7182:5;7165:9;:13;7175:2;7165:13;;;;;;;;;;;;;;;;:22;;;;;;;;;;;6787:425;7242:2;7227:25;;7236:4;7227:25;;;7246:5;7227:25;;;;;;:::i;:::-;;;;;;;;6152:1107;;;:::o;10544:477::-;10643:24;10670:25;10680:5;10687:7;10670:9;:25::i;:::-;10643:52;;10729:17;10709:16;:37;10705:310;;10785:5;10766:16;:24;10762:130;;;10844:7;10853:16;10871:5;10817:60;;;;;;;;;;;;;:::i;:::-;;;;;;;;10762:130;10933:57;10942:5;10949:7;10977:5;10958:16;:24;10984:5;10933:8;:57::i;:::-;10705:310;10633:388;10544:477;;;:::o;7:99:7:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:139::-;376:6;371:3;366;360:23;417:1;408:6;403:3;399:16;392:27;287:139;;;:::o;432:102::-;473:6;524:2;520:7;515:2;508:5;504:14;500:28;490:38;;432:102;;;:::o;540:377::-;628:3;656:39;689:5;656:39;:::i;:::-;711:71;775:6;770:3;711:71;:::i;:::-;704:78;;791:65;849:6;844:3;837:4;830:5;826:16;791:65;:::i;:::-;881:29;903:6;881:29;:::i;:::-;876:3;872:39;865:46;;632:285;540:377;;;;:::o;923:313::-;1036:4;1074:2;1063:9;1059:18;1051:26;;1123:9;1117:4;1113:20;1109:1;1098:9;1094:17;1087:47;1151:78;1224:4;1215:6;1151:78;:::i;:::-;1143:86;;923:313;;;;:::o;1323:117::-;1432:1;1429;1422:12;1569:126;1606:7;1646:42;1639:5;1635:54;1624:65;;1569:126;;;:::o;1701:96::-;1738:7;1767:24;1785:5;1767:24;:::i;:::-;1756:35;;1701:96;;;:::o;1803:122::-;1876:24;1894:5;1876:24;:::i;:::-;1869:5;1866:35;1856:63;;1915:1;1912;1905:12;1856:63;1803:122;:::o;1931:139::-;1977:5;2015:6;2002:20;1993:29;;2031:33;2058:5;2031:33;:::i;:::-;1931:139;;;;:::o;2076:77::-;2113:7;2142:5;2131:16;;2076:77;;;:::o;2159:122::-;2232:24;2250:5;2232:24;:::i;:::-;2225:5;2222:35;2212:63;;2271:1;2268;2261:12;2212:63;2159:122;:::o;2287:139::-;2333:5;2371:6;2358:20;2349:29;;2387:33;2414:5;2387:33;:::i;:::-;2287:139;;;;:::o;2432:474::-;2500:6;2508;2557:2;2545:9;2536:7;2532:23;2528:32;2525:119;;;2563:79;;:::i;:::-;2525:119;2683:1;2708:53;2753:7;2744:6;2733:9;2729:22;2708:53;:::i;:::-;2698:63;;2654:117;2810:2;2836:53;2881:7;2872:6;2861:9;2857:22;2836:53;:::i;:::-;2826:63;;2781:118;2432:474;;;;;:::o;2912:90::-;2946:7;2989:5;2982:13;2975:21;2964:32;;2912:90;;;:::o;3008:109::-;3089:21;3104:5;3089:21;:::i;:::-;3084:3;3077:34;3008:109;;:::o;3123:210::-;3210:4;3248:2;3237:9;3233:18;3225:26;;3261:65;3323:1;3312:9;3308:17;3299:6;3261:65;:::i;:::-;3123:210;;;;:::o;3339:118::-;3426:24;3444:5;3426:24;:::i;:::-;3421:3;3414:37;3339:118;;:::o;3463:222::-;3556:4;3594:2;3583:9;3579:18;3571:26;;3607:71;3675:1;3664:9;3660:17;3651:6;3607:71;:::i;:::-;3463:222;;;;:::o;3691:619::-;3768:6;3776;3784;3833:2;3821:9;3812:7;3808:23;3804:32;3801:119;;;3839:79;;:::i;:::-;3801:119;3959:1;3984:53;4029:7;4020:6;4009:9;4005:22;3984:53;:::i;:::-;3974:63;;3930:117;4086:2;4112:53;4157:7;4148:6;4137:9;4133:22;4112:53;:::i;:::-;4102:63;;4057:118;4214:2;4240:53;4285:7;4276:6;4265:9;4261:22;4240:53;:::i;:::-;4230:63;;4185:118;3691:619;;;;;:::o;4316:86::-;4351:7;4391:4;4384:5;4380:16;4369:27;;4316:86;;;:::o;4408:112::-;4491:22;4507:5;4491:22;:::i;:::-;4486:3;4479:35;4408:112;;:::o;4526:214::-;4615:4;4653:2;4642:9;4638:18;4630:26;;4666:67;4730:1;4719:9;4715:17;4706:6;4666:67;:::i;:::-;4526:214;;;;:::o;4746:329::-;4805:6;4854:2;4842:9;4833:7;4829:23;4825:32;4822:119;;;4860:79;;:::i;:::-;4822:119;4980:1;5005:53;5050:7;5041:6;5030:9;5026:22;5005:53;:::i;:::-;4995:63;;4951:117;4746:329;;;;:::o;5081:118::-;5168:24;5186:5;5168:24;:::i;:::-;5163:3;5156:37;5081:118;;:::o;5205:222::-;5298:4;5336:2;5325:9;5321:18;5313:26;;5349:71;5417:1;5406:9;5402:17;5393:6;5349:71;:::i;:::-;5205:222;;;;:::o;5433:474::-;5501:6;5509;5558:2;5546:9;5537:7;5533:23;5529:32;5526:119;;;5564:79;;:::i;:::-;5526:119;5684:1;5709:53;5754:7;5745:6;5734:9;5730:22;5709:53;:::i;:::-;5699:63;;5655:117;5811:2;5837:53;5882:7;5873:6;5862:9;5858:22;5837:53;:::i;:::-;5827:63;;5782:118;5433:474;;;;;:::o;5913:180::-;5961:77;5958:1;5951:88;6058:4;6055:1;6048:15;6082:4;6079:1;6072:15;6099:320;6143:6;6180:1;6174:4;6170:12;6160:22;;6227:1;6221:4;6217:12;6248:18;6238:81;;6304:4;6296:6;6292:17;6282:27;;6238:81;6366:2;6358:6;6355:14;6335:18;6332:38;6329:84;;6385:18;;:::i;:::-;6329:84;6150:269;6099:320;;;:::o;6425:180::-;6473:77;6470:1;6463:88;6570:4;6567:1;6560:15;6594:4;6591:1;6584:15;6611:410;6651:7;6674:20;6692:1;6674:20;:::i;:::-;6669:25;;6708:20;6726:1;6708:20;:::i;:::-;6703:25;;6763:1;6760;6756:9;6785:30;6803:11;6785:30;:::i;:::-;6774:41;;6964:1;6955:7;6951:15;6948:1;6945:22;6925:1;6918:9;6898:83;6875:139;;6994:18;;:::i;:::-;6875:139;6659:362;6611:410;;;;:::o;7027:180::-;7075:77;7072:1;7065:88;7172:4;7169:1;7162:15;7196:4;7193:1;7186:15;7213:185;7253:1;7270:20;7288:1;7270:20;:::i;:::-;7265:25;;7304:20;7322:1;7304:20;:::i;:::-;7299:25;;7343:1;7333:35;;7348:18;;:::i;:::-;7333:35;7390:1;7387;7383:9;7378:14;;7213:185;;;;:::o;7404:237::-;7544:34;7540:1;7532:6;7528:14;7521:58;7613:20;7608:2;7600:6;7596:15;7589:45;7404:237;:::o;7647:366::-;7789:3;7810:67;7874:2;7869:3;7810:67;:::i;:::-;7803:74;;7886:93;7975:3;7886:93;:::i;:::-;8004:2;7999:3;7995:12;7988:19;;7647:366;;;:::o;8019:419::-;8185:4;8223:2;8212:9;8208:18;8200:26;;8272:9;8266:4;8262:20;8258:1;8247:9;8243:17;8236:47;8300:131;8426:4;8300:131;:::i;:::-;8292:139;;8019:419;;;:::o;8444:442::-;8593:4;8631:2;8620:9;8616:18;8608:26;;8644:71;8712:1;8701:9;8697:17;8688:6;8644:71;:::i;:::-;8725:72;8793:2;8782:9;8778:18;8769:6;8725:72;:::i;:::-;8807;8875:2;8864:9;8860:18;8851:6;8807:72;:::i;:::-;8444:442;;;;;;:::o;8892:194::-;8932:4;8952:20;8970:1;8952:20;:::i;:::-;8947:25;;8986:20;9004:1;8986:20;:::i;:::-;8981:25;;9030:1;9027;9023:9;9015:17;;9054:1;9048:4;9045:11;9042:37;;;9059:18;;:::i;:::-;9042:37;8892:194;;;;:::o;9092:236::-;9232:34;9228:1;9220:6;9216:14;9209:58;9301:19;9296:2;9288:6;9284:15;9277:44;9092:236;:::o;9334:366::-;9476:3;9497:67;9561:2;9556:3;9497:67;:::i;:::-;9490:74;;9573:93;9662:3;9573:93;:::i;:::-;9691:2;9686:3;9682:12;9675:19;;9334:366;;;:::o;9706:419::-;9872:4;9910:2;9899:9;9895:18;9887:26;;9959:9;9953:4;9949:20;9945:1;9934:9;9930:17;9923:47;9987:131;10113:4;9987:131;:::i;:::-;9979:139;;9706:419;;;:::o;10131:233::-;10271:34;10267:1;10259:6;10255:14;10248:58;10340:16;10335:2;10327:6;10323:15;10316:41;10131:233;:::o;10370:366::-;10512:3;10533:67;10597:2;10592:3;10533:67;:::i;:::-;10526:74;;10609:93;10698:3;10609:93;:::i;:::-;10727:2;10722:3;10718:12;10711:19;;10370:366;;;:::o;10742:419::-;10908:4;10946:2;10935:9;10931:18;10923:26;;10995:9;10989:4;10985:20;10981:1;10970:9;10966:17;10959:47;11023:131;11149:4;11023:131;:::i;:::-;11015:139;;10742:419;;;:::o;11167:191::-;11207:3;11226:20;11244:1;11226:20;:::i;:::-;11221:25;;11260:20;11278:1;11260:20;:::i;:::-;11255:25;;11303:1;11300;11296:9;11289:16;;11324:3;11321:1;11318:10;11315:36;;;11331:18;;:::i;:::-;11315:36;11167:191;;;;:::o;11364:442::-;11513:4;11551:2;11540:9;11536:18;11528:26;;11564:71;11632:1;11621:9;11617:17;11608:6;11564:71;:::i;:::-;11645:72;11713:2;11702:9;11698:18;11689:6;11645:72;:::i;:::-;11727;11795:2;11784:9;11780:18;11771:6;11727:72;:::i;:::-;11364:442;;;;;;:::o
Swarm Source
ipfs://975d772d1ef35ccf740c6dc67afdf0122c863d13a080b1242a4ae127c74c567f
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.