Contract
0xa54108a0413f9992dfad7873966ff55d95ebcf7b
6
Contract Overview
Balance:
0.96863765848631639 FTM
FTM Value:
$0.40 (@ $0.41/FTM)
My Name Tag:
Not Available, login to update
[ Download CSV Export ]
Latest 25 internal transaction
[ Download CSV Export ]
Contract Name:
MinterFactory
Compiler Version
v0.8.4+commit.c7e474f2
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.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); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.4; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; interface IMain { struct MintInfo { address user; uint256 term; uint256 maturityTs; uint256 rank; uint256 amplifier; uint256 eaaRate; } function fee() external returns(uint); function claimRank(uint256 term) external payable; function claimMintReward() external payable; function userMints(address user) external view returns(MintInfo memory); function transfer(address to, uint256 amount) external returns (bool); function balanceOf(address account) external view returns (uint256); function getMintReward(uint256 cRank, uint256 term, uint256 maturityTs, uint256 amplifier, uint256 eeaRate) external view returns(uint); } contract Minter { address public owner; IMain main; uint public term; constructor(address user, address _main){ owner = user; main = IMain(_main); } function claimRank(uint256 _term) external { term = _term; main.claimRank(term); } function claimMintReward() external payable { uint fee = main.fee(); main.claimMintReward{value : fee}(); main.transfer(owner, main.balanceOf(address(this))); } function getUserMintInfo() public view returns(IMain.MintInfo memory){ return main.userMints(address(this)); } function getMintReward() external view returns(uint){ IMain.MintInfo memory r = getUserMintInfo(); return main.getMintReward(r.rank, r.term, r.maturityTs, r.amplifier, r.eaaRate); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.4; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "./Minter.sol"; //import "hardhat/console.sol"; contract MinterFactory { address public main; mapping(address => address[]) minters; constructor(address _main){ main = _main; } function minterFactory(uint amount, uint term) external { for (uint i = 0; i < amount; ++i) { Minter minter = new Minter(msg.sender, main); minters[msg.sender].push(address(minter)); minter.claimRank(term); } } function getUserMinters(address user) public view returns (address[] memory){ return minters[user]; } function getUserMinterInfo(address user) public view returns (IMain.MintInfo[] memory){ uint t = minters[user].length; IMain.MintInfo[] memory minterInfo = new IMain.MintInfo[](t); for( uint i = 0 ; i < t ; ++ i ){ Minter minter = Minter(minters[user][i]); minterInfo[i] = minter.getUserMintInfo(); } return minterInfo; } function claimRank(uint limit) external{ uint t = minters[msg.sender].length; uint j; for( uint i = t ; i > 0 ; -- i ){ if( j == limit ) break; Minter minter = Minter(minters[msg.sender][i-1]); IMain.MintInfo memory info = minter.getUserMintInfo(); if( info.maturityTs > 0 ){ continue; } minter.claimRank( minter.term() ); ++j; } } function claimMintReward(uint limit) external payable{ uint fee = IMain(main).fee(); uint t = minters[msg.sender].length; uint j; for( uint i = t ; i > 0 ; -- i ){ if( j == limit ) break; Minter minter = Minter(minters[msg.sender][i-1]); IMain.MintInfo memory info = minter.getUserMintInfo(); if( block.timestamp > info.maturityTs && info.rank > 0 ){ minter.claimMintReward{value : fee}(); ++j; } } } function getMintReward(address user) public view returns (uint[] memory){ uint t = minters[user].length; uint[] memory reward = new uint[](t); for( uint i = 0 ; i < t ; ++ i ){ Minter minter = Minter(minters[user][i]); reward[i] = minter.getMintReward(); } return reward; } }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_main","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"claimMintReward","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"claimRank","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getMintReward","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserMinterInfo","outputs":[{"components":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"term","type":"uint256"},{"internalType":"uint256","name":"maturityTs","type":"uint256"},{"internalType":"uint256","name":"rank","type":"uint256"},{"internalType":"uint256","name":"amplifier","type":"uint256"},{"internalType":"uint256","name":"eaaRate","type":"uint256"}],"internalType":"struct IMain.MintInfo[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserMinters","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"main","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"term","type":"uint256"}],"name":"minterFactory","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b506040516114ed3803806114ed83398101604081905261002f91610054565b600080546001600160a01b0319166001600160a01b0392909216919091179055610082565b600060208284031215610065578081fd5b81516001600160a01b038116811461007b578182fd5b9392505050565b61145c806100916000396000f3fe6080604052600436106100705760003560e01c8063dc2b539f1161004e578063dc2b539f146100e0578063dffeadd014610100578063f30bee1814610138578063f4e5063b1461016557600080fd5b8063218c044f14610075578063698787c4146100ab5780639ff054df146100c0575b600080fd5b34801561008157600080fd5b50610095610090366004610a7a565b610192565b6040516100a29190610b78565b60405180910390f35b6100be6100b9366004610b27565b610208565b005b3480156100cc57600080fd5b506100be6100db366004610b27565b61041f565b3480156100ec57600080fd5b506100be6100fb366004610b57565b61061b565b34801561010c57600080fd5b50600054610120906001600160a01b031681565b6040516001600160a01b0390911681526020016100a2565b34801561014457600080fd5b50610158610153366004610a7a565b610719565b6040516100a29190610bc5565b34801561017157600080fd5b50610185610180366004610a7a565b6108eb565b6040516100a29190610c46565b6001600160a01b0381166000908152600160209081526040918290208054835181840281018401909452808452606093928301828280156101fc57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116101de575b50505050509050919050565b60008060009054906101000a90046001600160a01b03166001600160a01b031663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561025957600080fd5b505af115801561026d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102919190610b3f565b33600090815260016020526040812054919250815b801561041857848214156102b957610418565b3360009081526001602081905260408220906102d59084610c7e565b815481106102f357634e487b7160e01b600052603260045260246000fd5b9060005260206000200160009054906101000a90046001600160a01b031690506000816001600160a01b03166382a86e2c6040518163ffffffff1660e01b815260040160c06040518083038186803b15801561034e57600080fd5b505afa158015610362573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103869190610a9d565b905080604001514211801561039f575060008160600151115b1561040557816001600160a01b03166352c7f8dc876040518263ffffffff1660e01b81526004016000604051808303818588803b1580156103df57600080fd5b505af11580156103f3573d6000803e3d6000fd5b50505050508361040290610cac565b93505b50508061041190610c95565b90506102a6565b5050505050565b3360009081526001602052604081205490815b8015610615578382141561044557610615565b3360009081526001602081905260408220906104619084610c7e565b8154811061047f57634e487b7160e01b600052603260045260246000fd5b9060005260206000200160009054906101000a90046001600160a01b031690506000816001600160a01b03166382a86e2c6040518163ffffffff1660e01b815260040160c06040518083038186803b1580156104da57600080fd5b505afa1580156104ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105129190610a9d565b604081015190915015610526575050610605565b816001600160a01b0316639ff054df836001600160a01b031663a10ffbed6040518163ffffffff1660e01b815260040160206040518083038186803b15801561056e57600080fd5b505afa158015610582573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a69190610b3f565b6040518263ffffffff1660e01b81526004016105c491815260200190565b600060405180830381600087803b1580156105de57600080fd5b505af11580156105f2573d6000803e3d6000fd5b505050508361060090610cac565b935050505b61060e81610c95565b9050610432565b50505050565b60005b82811015610714576000805460405133916001600160a01b03169061064290610a5d565b6001600160a01b03928316815291166020820152604001604051809103906000f080158015610675573d6000803e3d6000fd5b5033600090815260016020818152604080842080549384018155845292200180546001600160a01b0319166001600160a01b0384169081179091559051639ff054df60e01b81526004810186905291925090639ff054df90602401600060405180830381600087803b1580156106ea57600080fd5b505af11580156106fe573d6000803e3d6000fd5b50505050508061070d90610cac565b905061061e565b505050565b6001600160a01b0381166000908152600160205260408120546060918167ffffffffffffffff81111561075c57634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156107cf57816020015b6107bc6040518060c0016040528060006001600160a01b0316815260200160008152602001600081526020016000815260200160008152602001600081525090565b81526020019060019003908161077a5790505b50905060005b828110156108e3576001600160a01b038516600090815260016020526040812080548390811061081557634e487b7160e01b600052603260045260246000fd5b9060005260206000200160009054906101000a90046001600160a01b03169050806001600160a01b03166382a86e2c6040518163ffffffff1660e01b815260040160c06040518083038186803b15801561086e57600080fd5b505afa158015610882573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a69190610a9d565b8383815181106108c657634e487b7160e01b600052603260045260246000fd5b602002602001018190525050806108dc90610cac565b90506107d5565b509392505050565b6001600160a01b0381166000908152600160205260408120546060918167ffffffffffffffff81111561092e57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610957578160200160208202803683370190505b50905060005b828110156108e3576001600160a01b038516600090815260016020526040812080548390811061099d57634e487b7160e01b600052603260045260246000fd5b600091825260209182902001546040805163c833245160e01b815290516001600160a01b039092169350839263c833245192600480840193829003018186803b1580156109e957600080fd5b505afa1580156109fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a219190610b3f565b838381518110610a4157634e487b7160e01b600052603260045260246000fd5b602090810291909101015250610a5681610cac565b905061095d565b61073180610cf683390190565b8051610a7581610cdd565b919050565b600060208284031215610a8b578081fd5b8135610a9681610cdd565b9392505050565b600060c08284031215610aae578081fd5b60405160c0810181811067ffffffffffffffff82111715610add57634e487b7160e01b83526041600452602483fd5b604052610ae983610a6a565b81526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a08201528091505092915050565b600060208284031215610b38578081fd5b5035919050565b600060208284031215610b50578081fd5b5051919050565b60008060408385031215610b69578081fd5b50508035926020909101359150565b6020808252825182820181905260009190848201906040850190845b81811015610bb95783516001600160a01b031683529284019291840191600101610b94565b50909695505050505050565b602080825282518282018190526000919060409081850190868401855b82811015610c3957815180516001600160a01b0316855286810151878601528581015186860152606080820151908601526080808201519086015260a0908101519085015260c09093019290850190600101610be2565b5091979650505050505050565b6020808252825182820181905260009190848201906040850190845b81811015610bb957835183529284019291840191600101610c62565b600082821015610c9057610c90610cc7565b500390565b600081610ca457610ca4610cc7565b506000190190565b6000600019821415610cc057610cc0610cc7565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0381168114610cf257600080fd5b5056fe608060405234801561001057600080fd5b5060405161073138038061073183398101604081905261002f9161007c565b600080546001600160a01b039384166001600160a01b031991821617909155600180549290931691161790556100ae565b80516001600160a01b038116811461007757600080fd5b919050565b6000806040838503121561008e578182fd5b61009783610060565b91506100a560208401610060565b90509250929050565b610674806100bd6000396000f3fe6080604052600436106100555760003560e01c806352c7f8dc1461005a57806382a86e2c146100645780638da5cb5b146100d25780639ff054df1461010a578063a10ffbed1461012a578063c83324511461014e575b600080fd5b610062610163565b005b34801561007057600080fd5b50610079610357565b6040516100c9919081516001600160a01b031681526020808301519082015260408083015190820152606080830151908201526080808301519082015260a0918201519181019190915260c00190565b60405180910390f35b3480156100de57600080fd5b506000546100f2906001600160a01b031681565b6040516001600160a01b0390911681526020016100c9565b34801561011657600080fd5b5061006261012536600461060e565b610419565b34801561013657600080fd5b5061014060025481565b6040519081526020016100c9565b34801561015a57600080fd5b5061014061047f565b6001546040805163ddca3f4360e01b815290516000926001600160a01b03169163ddca3f4391600480830192602092919082900301818787803b1580156101a957600080fd5b505af11580156101bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101e19190610626565b9050600160009054906101000a90046001600160a01b03166001600160a01b03166352c7f8dc826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561023357600080fd5b505af1158015610247573d6000803e3d6000fd5b50506001546000546040516370a0823160e01b81523060048201526001600160a01b03928316955063a9059cbb94509116915083906370a082319060240160206040518083038186803b15801561029d57600080fd5b505afa1580156102b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102d59190610626565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b15801561031b57600080fd5b505af115801561032f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610353919061055d565b5050565b6103996040518060c0016040528060006001600160a01b0316815260200160008152602001600081526020016000815260200160008152602001600081525090565b60015460405163df28233160e01b81523060048201526001600160a01b039091169063df2823319060240160c06040518083038186803b1580156103dc57600080fd5b505afa1580156103f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104149190610584565b905090565b6002819055600154604051639ff054df60e01b8152600481018390526001600160a01b0390911690639ff054df90602401600060405180830381600087803b15801561046457600080fd5b505af1158015610478573d6000803e3d6000fd5b5050505050565b60008061048a610357565b60015460608201516020830151604080850151608086015160a087015192516311046b4160e21b8152600481019590955260248501939093526044840152606483019190915260848201529192506001600160a01b031690634411ad049060a40160206040518083038186803b15801561050357600080fd5b505afa158015610517573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061053b9190610626565b91505090565b80516001600160a01b038116811461055857600080fd5b919050565b60006020828403121561056e578081fd5b8151801515811461057d578182fd5b9392505050565b600060c08284031215610595578081fd5b60405160c0810181811067ffffffffffffffff821117156105c457634e487b7160e01b83526041600452602483fd5b6040526105d083610541565b81526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a08201528091505092915050565b60006020828403121561061f578081fd5b5035919050565b600060208284031215610637578081fd5b505191905056fea2646970667358221220f609cad6a1756f39b4e2be651ce61f02c3f9302cd40e8925414367831929ff5a64736f6c63430008040033a2646970667358221220a977c4497f1c63ec5318815ef465b70f58c901100c21dbd81a1eaa8fdb98b63664736f6c63430008040033000000000000000000000000a41a879bcfdd75983a987fd6b68fae37777e8b28
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000a41a879bcfdd75983a987fd6b68fae37777e8b28
-----Decoded View---------------
Arg [0] : _main (address): 0xa41a879bcfdd75983a987fd6b68fae37777e8b28
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000a41a879bcfdd75983a987fd6b68fae37777e8b28
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Validator ID :
0 FTM
Amount Staked
0
Amount Delegated
0
Staking Total
0
Staking Start Epoch
0
Staking Start Time
0
Proof of Importance
0
Origination Score
0
Validation Score
0
Active
0
Online
0
Downtime
0 s
Address | Amount | claimed Rewards | Created On Epoch | Created On |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.