false
true
0

Contract Address Details

0xde13e89f73C1d26384Bcbe07F04B2deE03CB18Be

Contract Name
FoundersTreasury
Creator
0x369719–0ce369 at 0x34920b–518c0c
Balance
3,204,006.651 PLS ( )
Tokens
Fetching tokens...
Transactions
27 Transactions
Transfers
0 Transfers
Gas Used
0
Last Balance Update
26152622
Contract is not verified. However, we found a verified contract with the same bytecode in Blockscout DB 0x0fd02873ddfdc4fd70998ee8968e3541aebe58c0.
All metadata displayed below is from that contract. In order to verify current contract, click Verify & Publish button
Verify & Publish
Contract name:
FoundersTreasury




Optimization enabled
true
Compiler version
v0.8.18+commit.87f61d96




Optimization runs
1000
Verified at
2023-08-05T05:40:19.978641Z

contracts/FoundersTreasury.sol

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

import "@openzeppelin/contracts/token/ERC20/IERC20.sol";

contract FoundersTreasury {
    struct Founder {
        address addr;
        uint8 sharePercent;
    }

    Founder[] private founders;

    constructor(Founder[] memory _founders) {
        for (uint256 i = 0; i < _founders.length; ++i) {
            founders.push(_founders[i]);
        }
    }

    function distribute(address[] calldata tokenAddresses) public {
        uint256 balance = address(this).balance;
        uint256 balanceRemaining = balance;
        uint256 foundersCount = founders.length;

        for (uint256 i = foundersCount - 1; ; --i) {
            if (balanceRemaining == 0) break;
            Founder memory founder = founders[i];
            uint256 coinsPerAddress = i == 0
                ? balanceRemaining
                : (balance * founder.sharePercent) / 100;
            payable(founder.addr).transfer(coinsPerAddress);
            balanceRemaining -= coinsPerAddress;
            if (i == 0) break;
        }

        for (uint256 j = 0; j < tokenAddresses.length; j++) {
            address tokenAddress = tokenAddresses[j];
            balanceRemaining = balance = IERC20(tokenAddress).balanceOf(
                address(this)
            );

            for (uint256 i = foundersCount - 1; ; --i) {
                if (balanceRemaining == 0) break;
                Founder memory founder = founders[i];
                uint256 tokensPerAddress = i == 0
                    ? balanceRemaining
                    : (balance * founder.sharePercent) / 100;
                IERC20(tokenAddress).transfer(founder.addr, tokensPerAddress);
                balanceRemaining -= tokensPerAddress;
                if (i == 0) break;
            }
        }
    }

    receive() external payable {}
}
        

/IERC20.sol

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @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 amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

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

Compiler Settings

{"viaIR":true,"remappings":[],"optimizer":{"runs":1000,"enabled":true},"metadata":{"bytecodeHash":"ipfs"},"libraries":{},"evmVersion":"paris","compilationTarget":{"contracts/FoundersTreasury.sol":"FoundersTreasury"}}
              

Contract ABI

[{"type":"constructor","stateMutability":"nonpayable","inputs":[{"type":"tuple[]","name":"_founders","internalType":"struct FoundersTreasury.Founder[]","components":[{"type":"address","name":"addr","internalType":"address"},{"type":"uint8","name":"sharePercent","internalType":"uint8"}]}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"distribute","inputs":[{"type":"address[]","name":"tokenAddresses","internalType":"address[]"}]},{"type":"receive","stateMutability":"payable"}]
              

Contract Creation Code

Verify & Publish
0x604060808152346101a6576106898038038061001a816101c0565b928339810160209182818303126101a65780516001600160401b03918282116101a657019180601f840112156101a6578251828111610132576005926100638683861b016101c0565b94868087858152019360061b820101938085116101a65792908701925b84841061015657505050505060005b8251811015610148578381831b840101516000546801000000000000000081101561013257600181018060005581101561011c576000805285600020019060018060a01b038151168254918760ff60a01b91015160a01b169160018060a81b0319161717905560001981146101065760010161008f565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b84516104a390816101e68239f35b88848203126101a6578851898101818110858211176101ab578a5284516001600160a01b03811681036101a65781528885015160ff811681036101a6578982015282529288019290870190610080565b600080fd5b60246000634e487b7160e01b81526041600452fd5b6040519190601f01601f191682016001600160401b038111838210176101325760405256fe608060405260048036101561001d575b50361561001b57600080fd5b005b600090813560e01c636138889b14610035575061000f565b3461035e576020908160031936011261035a5780359167ffffffffffffffff9182841161035657366023850112156103565783810135928311610356573660248460051b8601011161035657845447946000198201918211939086856103435788908885995b6102aa575b505090919293949596505b8681106100b6578780f35b60248160051b8301013573ffffffffffffffffffffffffffffffffffffffff908181168091036102a657604051907f70a0823100000000000000000000000000000000000000000000000000000000825230888301528582602481845afa91821561029b578b92610268575b50818961025557808c9189915b61015e575b505050505050600019811461014b576001016100ab565b602488601187634e487b7160e01b835252fd5b61017061016a83610392565b50610414565b8215938415610237578a8d60448a86955b51169160405194859384927fa9059cbb0000000000000000000000000000000000000000000000000000000084528301528660248301528a5af18015610229576101ee575b506101d091610362565b916101e7576101df8291610385565b908d9261012f565b8c91610134565b8a81813d8311610222575b61020381836103dc565b8101031261021e57518015150361021a57386101c6565b8e80fd5b8f80fd5b503d6101f9565b508f604051903d90823e3d90fd5b8a8d60448a606461024e60ff86890151168d61045a565b0495610181565b60248c60118b634e487b7160e01b835252fd5b9091508581813d8311610294575b61028081836103dc565b8101031261029057519038610122565b8a80fd5b503d610276565b6040513d8d823e3d90fd5b8980fd5b73ffffffffffffffffffffffffffffffffffffffff838080808e6102d061016a82610392565b9061032857869586915b511682821561031f575bf115610314576102f391610362565b98801561030f57906103068a9392610385565b9990919261009b565b6100a0565b6040513d85823e3d90fd5b506108fc6102e4565b606461033a60ff8d840151168a61045a565b049586916102da565b602489601187634e487b7160e01b835252fd5b8480fd5b8280fd5b5080fd5b9190820391821161036f57565b634e487b7160e01b600052601160045260246000fd5b801561036f576000190190565b9060009182548110156103c8578280527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563019190565b602483634e487b7160e01b81526032600452fd5b90601f8019910116810190811067ffffffffffffffff8211176103fe57604052565b634e487b7160e01b600052604160045260246000fd5b906040516040810181811067ffffffffffffffff8211176103fe57604052915473ffffffffffffffffffffffffffffffffffffffff8116835260a01c60ff166020830152565b8181029291811591840414171561036f5756fea264697066735822122033c31461921e60c26b22569dfc9c062a0ff2e8bdccefbdf41f1d7cab675e48e564736f6c63430008120033000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000030000000000000000000000001e18ed1bfca02e59a43de32c60ac0fd4923b64b5000000000000000000000000000000000000000000000000000000000000001000000000000000000000000055bc3149557373ac8fe90a652d20789cb874503c000000000000000000000000000000000000000000000000000000000000002c0000000000000000000000009355361c9ba7efdcfcda49a2cdf3beccd36309380000000000000000000000000000000000000000000000000000000000000028

Deployed ByteCode

0x608060405260048036101561001d575b50361561001b57600080fd5b005b600090813560e01c636138889b14610035575061000f565b3461035e576020908160031936011261035a5780359167ffffffffffffffff9182841161035657366023850112156103565783810135928311610356573660248460051b8601011161035657845447946000198201918211939086856103435788908885995b6102aa575b505090919293949596505b8681106100b6578780f35b60248160051b8301013573ffffffffffffffffffffffffffffffffffffffff908181168091036102a657604051907f70a0823100000000000000000000000000000000000000000000000000000000825230888301528582602481845afa91821561029b578b92610268575b50818961025557808c9189915b61015e575b505050505050600019811461014b576001016100ab565b602488601187634e487b7160e01b835252fd5b61017061016a83610392565b50610414565b8215938415610237578a8d60448a86955b51169160405194859384927fa9059cbb0000000000000000000000000000000000000000000000000000000084528301528660248301528a5af18015610229576101ee575b506101d091610362565b916101e7576101df8291610385565b908d9261012f565b8c91610134565b8a81813d8311610222575b61020381836103dc565b8101031261021e57518015150361021a57386101c6565b8e80fd5b8f80fd5b503d6101f9565b508f604051903d90823e3d90fd5b8a8d60448a606461024e60ff86890151168d61045a565b0495610181565b60248c60118b634e487b7160e01b835252fd5b9091508581813d8311610294575b61028081836103dc565b8101031261029057519038610122565b8a80fd5b503d610276565b6040513d8d823e3d90fd5b8980fd5b73ffffffffffffffffffffffffffffffffffffffff838080808e6102d061016a82610392565b9061032857869586915b511682821561031f575bf115610314576102f391610362565b98801561030f57906103068a9392610385565b9990919261009b565b6100a0565b6040513d85823e3d90fd5b506108fc6102e4565b606461033a60ff8d840151168a61045a565b049586916102da565b602489601187634e487b7160e01b835252fd5b8480fd5b8280fd5b5080fd5b9190820391821161036f57565b634e487b7160e01b600052601160045260246000fd5b801561036f576000190190565b9060009182548110156103c8578280527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563019190565b602483634e487b7160e01b81526032600452fd5b90601f8019910116810190811067ffffffffffffffff8211176103fe57604052565b634e487b7160e01b600052604160045260246000fd5b906040516040810181811067ffffffffffffffff8211176103fe57604052915473ffffffffffffffffffffffffffffffffffffffff8116835260a01c60ff166020830152565b8181029291811591840414171561036f5756fea264697066735822122033c31461921e60c26b22569dfc9c062a0ff2e8bdccefbdf41f1d7cab675e48e564736f6c63430008120033