Cryo Explorer Ethereum Mainnet

Address Contract Verified

Address 0x306be8202a555a58ffDBbC371b4811D2Af946A7D
Balance 0 ETH
Nonce 1
Code Size 9207 bytes
Indexed Transactions 0
External Etherscan · Sourcify

Contract Bytecode

9207 bytes
0x608060405234801561000f575f80fd5b506004361061023e575f3560e01c806377279d1e11610135578063c1bb014f116100b4578063e086e5ec11610079578063e086e5ec1461053a578063e4a4b7b114610542578063e6ef73d614610555578063f2fde38b14610568578063ff5d626c1461057b575f80fd5b8063c1bb014f146104cc578063c2412676146104df578063caa56040146104f2578063cd09920514610505578063df1a9f3714610527575f80fd5b8063872c50ba116100fa578063872c50ba146104655780638da5cb5b1461046e578063ac3a56ac1461047e578063b48aa05e14610491578063b88be686146104b9575f80fd5b806377279d1e14610419578063774c78a714610438578063817b1cd21461044b5780638456cb5914610454578063869890381461045c575f80fd5b806329af9c25116101c15780635b5e4558116101865780635b5e4558146103b15780635c975abb146103c45780636088e93a146103d5578063648b5e32146103e85780636b130dc214610410575f80fd5b806329af9c25146103515780633f4ba83a146103645780634720594d1461036c57806352b817631461038b57806356b096161461039e575f80fd5b80630aa3d065116102075780630aa3d065146102f05780630c9471c7146102f9578063144fa6d71461030c57806319198a361461031f5780631d9bdeae1461033e575f80fd5b8062771c081461024257806303f35bce146102725780630564534c146102a457806306b091f9146102bb57806309ae8c22146102d0575b5f80fd5b600454610255906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b610294610280366004611ed4565b600d6020525f908152604090205460ff1681565b6040519015158152602001610269565b6102ad60075481565b604051908152602001610269565b6102ce6102c9366004611eef565b61058e565b005b6102e36102de366004611ed4565b61078e565b6040516102699190611f19565b6102ad600b5481565b6102ad610307366004611f5c565b610954565b6102ce61031a366004611ed4565b610ade565b6102ad61032d366004611f8e565b60106020525f908152604090205481565b6102ce61034c366004611fa5565b610b29565b600354610255906001600160a01b031681565b6102ce610b63565b6102ad61037a366004611f8e565b600f6020525f908152604090205481565b6102ce610399366004611fa5565b610b9f565b6102ce6103ac366004611ed4565b610bd3565b6102ad6103bf366004611eef565b610c1e565b5f54600160a01b900460ff16610294565b6102ce6103e3366004611eef565b610c48565b6103fb6103f6366004611eef565b610de7565b60408051928352602083019190915201610269565b6102ad60065481565b6102ad610427366004611ed4565b600e6020525f908152604090205481565b6102ce610446366004611fa5565b611098565b6102ad600a5481565b6102ce6110d2565b6102ad60095481565b6102ad60085481565b5f546001600160a01b0316610255565b6102ce61048c366004611fc5565b611112565b6104a461049f366004611f5c565b61117a565b6040516102699998979695949392919061200d565b6102ce6104c7366004611eef565b611304565b6102ce6104da3660046120ac565b611348565b600154610255906001600160a01b031681565b6102ce6105003660046120f7565b6118c1565b610294610513366004611ed4565b600c6020525f908152604090205460ff1681565b600254610255906001600160a01b031681565b6102ce611914565b6102ce610550366004611fa5565b6119ba565b600554610255906001600160a01b031681565b6102ce610576366004611ed4565b611de0565b6102ce610589366004611f8e565b611e8f565b5f546001600160a01b031633146105c05760405162461bcd60e51b81526004016105b79061212e565b60405180910390fd5b6001600160a01b03821661060e5760405162461bcd60e51b8152602060048201526015602482015274496e76616c696420746f6b656e206164647265737360581b60448201526064016105b7565b5f811161065d5760405162461bcd60e51b815260206004820181905260248201527f416d6f756e74206d7573742062652067726561746572207468616e207a65726f60448201526064016105b7565b6040516370a0823160e01b815230600482015282905f906001600160a01b038316906370a0823190602401602060405180830381865afa1580156106a3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106c79190612163565b9050808311156107195760405162461bcd60e51b815260206004820152601d60248201527f496e73756666696369656e7420636f6e74726163742062616c616e636500000060448201526064016105b7565b60405163a9059cbb60e01b8152336004820152602481018490526001600160a01b0383169063a9059cbb906044016020604051808303815f875af1158015610763573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610787919061217a565b5050505050565b60605f605a8161079f8260016121a9565b67ffffffffffffffff8111156107b7576107b76121bc565b6040519080825280602002602001820160405280156107e0578160200160208202803683370190505b5090505f5b82811161084f576001600160a01b0386165f908152601160209081526040808320848452909152902080549094501561083d57600182828151811061082c5761082c6121d0565b911515602092830291909101909101525b80610847816121e4565b9150506107e5565b505f805b8381116108995782818151811061086c5761086c6121d0565b6020026020010151156108875781610883816121e4565b9250505b80610891816121e4565b915050610853565b505f8167ffffffffffffffff8111156108b4576108b46121bc565b6040519080825280602002602001820160405280156108dd578160200160208202803683370190505b5090505f805b858111610947578481815181106108fc576108fc6121d0565b602002602001015115610935578083838151811061091c5761091c6121d0565b602090810291909101015281610931816121e4565b9250505b8061093f816121e4565b9150506108e3565b5090979650505050505050565b6001600160a01b0383165f908152601160209081526040808320858452909152812080541580610985575080548310155b806109b4575080838154811061099d5761099d6121d0565b5f91825260209091206008600990920201015460ff165b156109c2575f915050610ad7565b5f8184815481106109d5576109d56121d0565b905f5260205f20906009020190505f8160030154426109f491906121fc565b60068301546001600160a01b03165f818152600e60209081526040808320548b8452600f9092528220549394509192610a2e9083906121a9565b90505f612710828760010154610a44919061220f565b610a4e9190612226565b90508560040154421015610aa2575f8a815260106020526040902054610a769061271061220f565b85838860010154610a87919061220f565b610a91919061220f565b610a9b9190612226565b9750610aa6565b8097505b80888760050154610ab791906121a9565b1115610acf576005860154610acc90826121fc565b97505b505050505050505b9392505050565b5f546001600160a01b03163314610b075760405162461bcd60e51b81526004016105b79061212e565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b03163314610b525760405162461bcd60e51b81526004016105b79061212e565b5f9182526010602052604090912055565b5f546001600160a01b03163314610b8c5760405162461bcd60e51b81526004016105b79061212e565b610b9d5f805460ff60a01b19169055565b565b5f546001600160a01b03163314610bc85760405162461bcd60e51b81526004016105b79061212e565b600791909155600855565b5f546001600160a01b03163314610bfc5760405162461bcd60e51b81526004016105b79061212e565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0382165f9081526011602090815260408083208484529091529020545b92915050565b5f546001600160a01b03163314610c715760405162461bcd60e51b81526004016105b79061212e565b6001600160a01b038216610cc75760405162461bcd60e51b815260206004820152601c60248201527f496e76616c6964204e465420636f6e747261637420616464726573730000000060448201526064016105b7565b6040516331a9108f60e11b81526004810182905230906001600160a01b03841690636352211e90602401602060405180830381865afa158015610d0c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d309190612245565b6001600160a01b031614610d865760405162461bcd60e51b815260206004820152601e60248201527f436f6e747261637420646f6573206e6f74206f776e2074686973204e4654000060448201526064016105b7565b604051632142170760e11b81526001600160a01b038316906342842e0e90610db690309033908690600401612260565b5f604051808303815f87803b158015610dcd575f80fd5b505af1158015610ddf573d5f803e3d5ffd5b505050505050565b5f818152600f60205260408120548190819081805b6001600160a01b0388165f9081526011602090815260408083208a845290915290205481101561108a576001600160a01b0388165f9081526011602090815260408083208a84529091528120805483908110610e5a57610e5a6121d0565b905f5260205f209060090201604051806101200160405290815f82015481526020016001820154815260200160028201548152602001600382015481526020016004820154815260200160058201548152602001600682015f9054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001600782018054610eeb90612284565b80601f0160208091040260200160405190810160405280929190818152602001828054610f1790612284565b8015610f625780601f10610f3957610100808354040283529160200191610f62565b820191905f5260205f20905b815481529060010190602001808311610f4557829003601f168201915b50505091835250506008919091015460ff16151560209091015260608101519091505f90610f9090426121fc565b60c08301516001600160a01b0381165f908152600e6020526040812054929350909190610fbd82896121a9565b90505f612710828760200151610fd3919061220f565b610fdd9190612226565b90505f8660800151421015611032575f8e8152601060205260409020546110069061271061220f565b86848960200151611017919061220f565b611021919061220f565b61102b9190612226565b9050611035565b50805b5f8760a001518211611047575f611056565b60a088015161105690836121fc565b9050611062818d6121a9565b9b508760a001518a61107491906121a9565b99505060019097019650610dfc95505050505050565b509196919550909350505050565b5f546001600160a01b031633146110c15760405162461bcd60e51b81526004016105b79061212e565b5f918252600f602052604090912055565b5f546001600160a01b031633146110fb5760405162461bcd60e51b81526004016105b79061212e565b610b9d5f805460ff60a01b1916600160a01b179055565b5f546001600160a01b0316331461113b5760405162461bcd60e51b81526004016105b79061212e565b600280546001600160a01b039485166001600160a01b031991821617909155600380549385169382169390931790925560048054919093169116179055565b6001600160a01b0383165f9081526011602090815260408083208584529091528120805482918291829182918291829160609183918b106111ed5760405162461bcd60e51b815260206004820152600d60248201526c092dcecc2d8d2c840d2dcc8caf609b1b60448201526064016105b7565b5f818c81548110611200576112006121d0565b905f5260205f2090600902019050805f015481600101548260020154836003015484600401548560050154866006015f9054906101000a90046001600160a01b031687600701886008015f9054906101000a900460ff1681805461126390612284565b80601f016020809104026020016040519081016040528092919081815260200182805461128f90612284565b80156112da5780601f106112b1576101008083540402835291602001916112da565b820191905f5260205f20905b8154815290600101906020018083116112bd57829003601f168201915b505050505091509a509a509a509a509a509a509a509a509a50505093979b92969a50939750939750565b5f546001600160a01b0316331461132d5760405162461bcd60e51b81526004016105b79061212e565b6001600160a01b039091165f908152600e6020526040902055565b5f54600160a01b900460ff16156113945760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016105b7565b335f908152600c602052604090205460ff16156113f35760405162461bcd60e51b815260206004820152601a60248201527f4163636f756e7420697320666c6167676564206173207370616d00000000000060448201526064016105b7565b6007548410156114455760405162461bcd60e51b815260206004820152601c60248201527f416d6f756e742062656c6f77206d696e696d756d207374616b696e670000000060448201526064016105b7565b6008548411156114975760405162461bcd60e51b815260206004820152601c60248201527f416d6f756e742061626f7665206d6178696d756d207374616b696e670000000060448201526064016105b7565b5f838152600f60205260409020546114e95760405162461bcd60e51b8152602060048201526015602482015274496e76616c6964206c6f636b61626c65206461797360581b60448201526064016105b7565b6002546001600160a01b038281169116148061151257506003546001600160a01b038281169116145b8061152a57506004546001600160a01b038281169116145b61156c5760405162461bcd60e51b8152602060048201526013602482015272496e76616c6964204e4654206164647265737360681b60448201526064016105b7565b5f83815260106020526040908190205460015491516323b872dd60e01b815290916001600160a01b0316906323b872dd906115af90339030908a90600401612260565b6020604051808303815f875af11580156115cb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115ef919061217a565b506040516323b872dd60e01b81526001600160a01b038316906323b872dd9061162090339030908890600401612260565b5f604051808303815f87803b158015611637575f80fd5b505af1158015611649573d5f803e3d5ffd5b5050600254606092506001600160a01b03808616911603905061168a57506040805180820190915260078152664c6576656c203160c81b60208201526116f8565b6003546001600160a01b038085169116036116c357506040805180820190915260078152662632bb32b6101960c91b60208201526116f8565b6004546001600160a01b038085169116036116f857506040805180820190915260078152664c6576656c203360c81b60208201525b5f604051806101200160405280878152602001888152602001868152602001428152602001844261172991906121a9565b81525f60208083018290526001600160a01b0388811660408086019190915260608086018990526080958601859052338552601184528185208d865284528185208054600180820183559187529585902088516009909702019586559387015193850193909355850151600284015590840151600383015591830151600482015560a0830151600582015560c08301516006820180546001600160a01b031916919093161790915560e0820151919250829160078201906117ea9082612305565b5061010091909101516008909101805460ff1916911515919091179055335f908152600d602052604090205460ff1661184b5760098054905f61182c836121e4565b9091555050335f908152600d60205260409020805460ff191660011790555b86600a5f82825461185c91906121a9565b9091555050600b8054905f611870836121e4565b9091555050604080518881526020810188905242818301529051309133917f4e2ca0515ed1aef1395f66b5303bb5d6f1bf9d61a353fa53f73f8ac9973fa9f69181900360600190a350505050505050565b5f546001600160a01b031633146118ea5760405162461bcd60e51b81526004016105b79061212e565b6001600160a01b03919091165f908152600c60205260409020805460ff1916911515919091179055565b5f546001600160a01b0316331461193d5760405162461bcd60e51b81526004016105b79061212e565b47806119805760405162461bcd60e51b81526020600482015260126024820152714e6f2045544820746f20776974686472617760701b60448201526064016105b7565b5f80546040516001600160a01b039091169183156108fc02918491818181858888f193505050501580156119b6573d5f803e3d5ffd5b5050565b5f54600160a01b900460ff1615611a065760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016105b7565b335f908152600c602052604090205460ff1615611a585760405162461bcd60e51b815260206004820152601060248201526f4163636f756e74206973207370616d2160801b60448201526064016105b7565b335f908152601160209081526040808320858452909152902080548210611ab95760405162461bcd60e51b8152602060048201526015602482015274092dcecc2d8d2c840c8cae0dee6d2e840d2dcc8caf605b1b60448201526064016105b7565b5f818381548110611acc57611acc6121d0565b5f9182526020909120600990910201600881015490915060ff1615611b3e5760405162461bcd60e51b815260206004820152602260248201527f416c72656164792068617276657374656420666f722074686973206465706f736044820152611a5d60f21b60648201526084016105b7565b5f808260040154421015611c7a575f6127106006548560010154611b62919061220f565b611b6c9190612226565b9050808460010154611b7e91906121fc565b92509050808015611c015760015460055460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810185905291169063a9059cbb906044016020604051808303815f875af1158015611bdb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bff919061217a565b505b60015460405163a9059cbb60e01b8152336004820152602481018590526001600160a01b039091169063a9059cbb906044016020604051808303815f875af1158015611c4f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c73919061217a565b5050611cfa565b611c85338787610954565b60015460405163a9059cbb60e01b8152336004820152602481018390529193506001600160a01b03169063a9059cbb906044016020604051808303815f875af1158015611cd4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cf8919061217a565b505b600683015460028401546040516323b872dd60e01b81526001600160a01b03909216916323b872dd91611d339130913391600401612260565b5f604051808303815f87803b158015611d4a575f80fd5b505af1158015611d5c573d5f803e3d5ffd5b50505060088401805460ff19166001179055506005830180548391905f90611d859084906121a9565b90915550506002830154604080519182526020820184905281018290526060810187905233907f7baefe19499ec89bdfeffd0fc7335c9d0ea87f8ca40bb82c956184634ba170fd9060800160405180910390a2505050505050565b5f546001600160a01b03163314611e095760405162461bcd60e51b81526004016105b79061212e565b6001600160a01b038116611e6e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105b7565b5f80546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b03163314611eb85760405162461bcd60e51b81526004016105b79061212e565b600655565b6001600160a01b0381168114611ed1575f80fd5b50565b5f60208284031215611ee4575f80fd5b8135610ad781611ebd565b5f8060408385031215611f00575f80fd5b8235611f0b81611ebd565b946020939093013593505050565b602080825282518282018190525f9190848201906040850190845b81811015611f5057835183529284019291840191600101611f34565b50909695505050505050565b5f805f60608486031215611f6e575f80fd5b8335611f7981611ebd565b95602085013595506040909401359392505050565b5f60208284031215611f9e575f80fd5b5035919050565b5f8060408385031215611fb6575f80fd5b50508035926020909101359150565b5f805f60608486031215611fd7575f80fd5b8335611fe281611ebd565b92506020840135611ff281611ebd565b9150604084013561200281611ebd565b809150509250925092565b5f6101208b835260208b60208501528a60408501528960608501528860808501528760a085015260018060a01b03871660c08501528160e0850152855180838601525f92505b8083101561207257868301820151858401610140015291810191612053565b61014092505f83828701015282601f19601f830116860101935050505061209e61010083018415159052565b9a9950505050505050505050565b5f805f80608085870312156120bf575f80fd5b84359350602085013592506040850135915060608501356120df81611ebd565b939692955090935050565b8015158114611ed1575f80fd5b5f8060408385031215612108575f80fd5b823561211381611ebd565b91506020830135612123816120ea565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b5f60208284031215612173575f80fd5b5051919050565b5f6020828403121561218a575f80fd5b8151610ad7816120ea565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610c4257610c42612195565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f600182016121f5576121f5612195565b5060010190565b81810381811115610c4257610c42612195565b8082028115828204841417610c4257610c42612195565b5f8261224057634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215612255575f80fd5b8151610ad781611ebd565b6001600160a01b039384168152919092166020820152604081019190915260600190565b600181811c9082168061229857607f821691505b6020821081036122b657634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561230057805f5260205f20601f840160051c810160208510156122e15750805b601f840160051c820191505b81811015610787575f81556001016122ed565b505050565b815167ffffffffffffffff81111561231f5761231f6121bc565b6123338161232d8454612284565b846122bc565b602080601f831160018114612366575f841561234f5750858301515b5f19600386901b1c1916600185901b178555610ddf565b5f85815260208120601f198616915b8281101561239457888601518255948401946001909101908401612375565b50858210156123b157878501515f19600388901b60f8161c191681555b5050505050600190811b0190555056fea2646970667358221220aae67d37eebe07c682a9dd2af4b5b0cc25f8c980fc482c4ff9c9c9f571b522cc64736f6c63430008180033

Verified Source Code Full Match

Compiler: v0.8.24+commit.e11b9ed9 EVM: shanghai Optimization: Yes (200 runs)
New_Avanta_NFT_Staking.sol 576 lines
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;

contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
}

interface IERC721 {
    function balanceOf(address owner) external view returns (uint256);

    function ownerOf(uint256 tokenId) external view returns (address);

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    function approve(address to, uint256 tokenId) external;

    function getApproved(uint256 tokenId) external view returns (address);

    function setApprovalForAll(address operator, bool _approved) external;

    function isApprovedForAll(address owner, address operator)
        external
        view
        returns (bool);

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}

interface IERC20 {
    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function transfer(address recipient, uint256 amount)
        external
        returns (bool);

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);
}

abstract contract Pausable is Context {
    bool private _paused;

    constructor() {
        _paused = false;
    }

    function paused() public view virtual returns (bool) {
        return _paused;
    }

    modifier whenNotPaused() {
        require(!_paused, "Pausable: paused");
        _;
    }

    function _pause() internal virtual {
        _paused = true;
    }

    function _unpause() internal virtual {
        _paused = false;
    }
}

contract Ownable is Context {
    address private _owner;

    constructor() {
        _owner = 0x0ceE8381e39f19a72B5091C81A053Fdf01099852;
    }

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function transferOwnership(address newOwner) public onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        _owner = newOwner;
    }
}

contract NFTStaking is Ownable, Pausable {
    IERC20 public Token;
    IERC721 public NFT_LEVEL1;
    IERC721 public NFT_LEVEL2;
    IERC721 public NFT_LEVEL3;

    // Address where tax fees are sent
    address public taxReceiver;

    // Deduction percentage (e.g., 2500 = 25.00%)
    uint256 public deductionPercentage = 2500;

    // Minimum amount required for staking (1 ether = 10^18 wei)
    uint256 public minStaking = 1 ether;

    // Maximum amount allowed for staking (60,000 ether = 60,000 * 10^18 wei)
    uint256 public maxStaking = 60_000 ether;

    // Total number of stakers
    uint256 public totalStakers;

    // Total amount of tokens staked
    uint256 public totalStaked;

    // Total number of NFTs staked
    uint256 public totalNFTStaked;

    // Mapping for spam addresses
    mapping(address => bool) public isSpam;

    // Mapping for new stakers
    mapping(address => bool) public newStakers;

    // Boost percentages for NFTs (e.g., 500 = 5.00%)
    mapping(address => uint256) public nftBoosts;

    mapping(uint256 => uint256) public APR_PERCENTAGE;
    mapping(uint256 => uint256) public TIME_STEP;
    mapping(address => mapping(uint256 => UserInfo[])) private Users;

    struct UserInfo {
        uint256 planDuration;
        uint256 amount;
        uint256 NFTids;
        uint256 startTime;
        uint256 endTime;
        uint256 withdrawn;
        address NFT;
        string userNFTIDsLevel;
        bool hasHarvested;
    }

    event Deposit(
        address indexed to,
        address indexed from,
        uint256 amount,
        uint256 day,
        uint256 time
    );
    event Harvest(
        address indexed user,
        uint256 NFT,
        uint256 harvestedAmount,
        uint256 totalDeduction,
        uint256 planDuration
    );

    constructor() {
        Token = IERC20(0x7Fd4Abc178a66E26711658763654A041940C75A9);
        NFT_LEVEL1 = IERC721(0x1Ed1df0dca15A7D26CCc1E80984719ea71De7cE4);
        NFT_LEVEL2 = IERC721(0x012B42fb9Bb510a049f66dec225D4a2466AFcae6);
        NFT_LEVEL3 = IERC721(0x8761Ca4aEdc30c4de6E56141161eb0874640925E);
        taxReceiver = owner();

        // Set NFT boost percentages for each level of NFTs
        nftBoosts[address(NFT_LEVEL1)] = 5_00; // Boost 5% for level 1 NFTs
        nftBoosts[address(NFT_LEVEL2)] = 10_00; // Boost 10% for level 2 NFTs
        nftBoosts[address(NFT_LEVEL3)] = 15_00; // Boost 15% for level 3 NFTs

        // Set APR (Annual Percentage Rate) values for different plan durations
        APR_PERCENTAGE[14] = 100_41; // 14-day lock: = 0.41%
        APR_PERCENTAGE[30] = 101_66; // 30-day lock: = 1.66%
        APR_PERCENTAGE[60] = 105_00; // 60-day lock: = 5 %
        APR_PERCENTAGE[90] = 112_50; // 90-day lock: = 12.5%

        // Set time steps for dividend calculations for each plan duration
        TIME_STEP[14] = 14 days; // Time step for 14-day plan
        TIME_STEP[30] = 30 days; // Time step for 30-day plan
        TIME_STEP[60] = 60 days; // Time step for 60-day plan
        TIME_STEP[90] = 90 days; // Time step for 90-day plan
    }

    function farm(
        uint256 _amount,
        uint256 _lockableDays,
        uint256 _tokenID,
        address _nftAddress
    ) external whenNotPaused {
        require(!isSpam[msg.sender], "Account is flagged as spam");
        require(_amount >= minStaking, "Amount below minimum staking");
        require(_amount <= maxStaking, "Amount above maximum staking");
        require(APR_PERCENTAGE[_lockableDays] > 0, "Invalid lockable days");
        require(
            NFT_LEVEL1 == IERC721(_nftAddress) ||
                NFT_LEVEL2 == IERC721(_nftAddress) ||
                NFT_LEVEL3 == IERC721(_nftAddress),
            "Invalid NFT address"
        );

        uint256 lockableDays = TIME_STEP[_lockableDays];

        Token.transferFrom(msg.sender, address(this), _amount);
        IERC721(_nftAddress).transferFrom(msg.sender, address(this), _tokenID);

        string memory nftLevel;
        if (NFT_LEVEL1 == IERC721(_nftAddress)) {
            nftLevel = "Level 1";
        } else if (NFT_LEVEL2 == IERC721(_nftAddress)) {
            nftLevel = "Level 2";
        } else if (NFT_LEVEL3 == IERC721(_nftAddress)) {
            nftLevel = "Level 3";
        }

        UserInfo memory userInfo = UserInfo({
            planDuration: _lockableDays,
            amount: _amount,
            NFTids: _tokenID,
            startTime: block.timestamp,
            endTime: block.timestamp + lockableDays,
            withdrawn: 0,
            NFT: _nftAddress,
            userNFTIDsLevel: nftLevel,
            hasHarvested: false
        });

        Users[msg.sender][_lockableDays].push(userInfo);

        if (!newStakers[msg.sender]) {
            totalStakers++;
            newStakers[msg.sender] = true;
        }
        totalStaked += _amount;
        totalNFTStaked++;

        emit Deposit(
            msg.sender,
            address(this),
            _amount,
            _lockableDays,
            block.timestamp
        );
    }

    function harvest(uint256 planDuration, uint256 index)
        external
        whenNotPaused
    {
        require(!isSpam[msg.sender], "Account is spam!");

        UserInfo[] storage userDeposits = Users[msg.sender][planDuration];
        require(index < userDeposits.length, "Invalid deposit index");

        UserInfo storage deposit = userDeposits[index];
        require(!deposit.hasHarvested, "Already harvested for this deposit");

        uint256 totalHarvestedAmount = 0;
        uint256 totalDeduction = 0;

        if (block.timestamp < deposit.endTime) {
            uint256 deduction = (deposit.amount * deductionPercentage) / 100_00;
            totalHarvestedAmount = deposit.amount - deduction;
            totalDeduction = deduction;

            if (totalDeduction > 0) {
                Token.transfer(taxReceiver, totalDeduction);
            }

            Token.transfer(msg.sender, totalHarvestedAmount);
        } else {
            totalHarvestedAmount = getUserDividends(
                msg.sender,
                planDuration,
                index
            );

            Token.transfer(msg.sender, totalHarvestedAmount);
        }

        IERC721(deposit.NFT).transferFrom(
            address(this),
            msg.sender,
            deposit.NFTids
        );

        deposit.hasHarvested = true;
        deposit.withdrawn += totalHarvestedAmount;

        emit Harvest(
            msg.sender,
            deposit.NFTids,
            totalHarvestedAmount,
            totalDeduction,
            planDuration
        );
    }

    function getUserDividends(
        address _user,
        uint256 _planDuration,
        uint256 index
    ) public view returns (uint256 totalDividends) {
        UserInfo[] storage userDeposits = Users[_user][_planDuration];

        if (
            userDeposits.length == 0 ||
            index >= userDeposits.length ||
            userDeposits[index].hasHarvested
        ) {
            return 0;
        }

        UserInfo storage selectedDeposit = userDeposits[index];
        uint256 timeElapsed = block.timestamp - selectedDeposit.startTime;

        address userNFT = selectedDeposit.NFT;
        uint256 boostPercentage = nftBoosts[userNFT];

        uint256 APR = APR_PERCENTAGE[_planDuration] + boostPercentage;

        uint256 maxDividends = (selectedDeposit.amount * APR) / 100_00;

        if (block.timestamp < selectedDeposit.endTime) {
            totalDividends =
                (selectedDeposit.amount * APR * timeElapsed) /
                (100_00 * TIME_STEP[_planDuration]);
        } else {
            totalDividends = maxDividends;
        }

        if (selectedDeposit.withdrawn + totalDividends > maxDividends) {
            totalDividends = maxDividends - selectedDeposit.withdrawn;
        }

        return totalDividends;
    }

    function futureRewards(address _add, uint256 _lockableDays)
        public
        view
        returns (uint256 reward, uint256 claimedAmount)
    {
        uint256 Reward = 0;
        uint256 apyPercent = APR_PERCENTAGE[_lockableDays];
        uint256 claimed = 0;

        for (uint256 z = 0; z < Users[_add][_lockableDays].length; z++) {
            UserInfo memory user = Users[_add][_lockableDays][z];
            uint256 elapsedTime = block.timestamp - user.startTime;
            address userNFT = user.NFT;
            uint256 boostPercentage = nftBoosts[userNFT];
            uint256 totalAPR = apyPercent + boostPercentage;
            uint256 maxAmount = (user.amount * totalAPR) / 100_00;
            uint256 currentReward;
            if (block.timestamp < user.endTime) {
                currentReward =
                    (user.amount * totalAPR * elapsedTime) /
                    (100_00 * TIME_STEP[_lockableDays]);
            } else {
                currentReward = maxAmount;
            }
            uint256 unclaimedReward = currentReward > user.withdrawn
                ? currentReward - user.withdrawn
                : 0;
            Reward += unclaimedReward;
            claimed += user.withdrawn;
        }

        return (Reward, claimed);
    }

    function getUserDepositInfo(
        address _user,
        uint256 _planDuration,
        uint256 _index
    )
        public
        view
        returns (
            uint256 planDuration,
            uint256 amount,
            uint256 NFTids,
            uint256 startTime,
            uint256 endTime,
            uint256 withdrawn,
            address NFT,
            string memory userNFTIDsLevel,
            bool hasHarvested
        )
    {
        UserInfo[] storage deposits = Users[_user][_planDuration];
        require(_index < deposits.length, "Invalid index");

        UserInfo storage deposit = deposits[_index];
        return (
            deposit.planDuration,
            deposit.amount,
            deposit.NFTids,
            deposit.startTime,
            deposit.endTime,
            deposit.withdrawn,
            deposit.NFT,
            deposit.userNFTIDsLevel,
            deposit.hasHarvested
        );
    }

    function getUserStakesCount(address _user, uint256 _planDuration)
        public
        view
        returns (uint256)
    {
        return Users[_user][_planDuration].length;
    }

    function getUserStakedPlans(address userAddress)
        external
        view
        returns (uint256[] memory)
    {
        UserInfo[] storage userDeposits;
        uint256 maxPlans = 90;
        bool[] memory hasStakedPlan = new bool[](maxPlans + 1);

        for (uint256 i = 0; i <= maxPlans; i++) {
            userDeposits = Users[userAddress][i];
            if (userDeposits.length > 0) {
                hasStakedPlan[i] = true;
            }
        }

        uint256 stakedPlanCount = 0;
        for (uint256 i = 0; i <= maxPlans; i++) {
            if (hasStakedPlan[i]) {
                stakedPlanCount++;
            }
        }

        uint256[] memory uniquePlans = new uint256[](stakedPlanCount);
        uint256 index = 0;
        for (uint256 i = 0; i <= maxPlans; i++) {
            if (hasStakedPlan[i]) {
                uniquePlans[index] = i;
                index++;
            }
        }

        return uniquePlans;
    }

    function withdrawTokens(address _tokenAddress, uint256 _amount)
        external
        onlyOwner
    {
        require(_tokenAddress != address(0), "Invalid token address");
        require(_amount > 0, "Amount must be greater than zero");

        IERC20 token = IERC20(_tokenAddress);
        uint256 contractBalance = token.balanceOf(address(this));
        require(_amount <= contractBalance, "Insufficient contract balance");

        token.transfer(msg.sender, _amount);
    }

    function withdrawNFT(IERC721 _nftContract, uint256 _tokenId)
        external
        onlyOwner
    {
        require(
            address(_nftContract) != address(0),
            "Invalid NFT contract address"
        );
        require(
            _nftContract.ownerOf(_tokenId) == address(this),
            "Contract does not own this NFT"
        );

        _nftContract.safeTransferFrom(address(this), msg.sender, _tokenId);
    }

    function withdrawETH() external onlyOwner {
        uint256 balance = address(this).balance;
        require(balance > 0, "No ETH to withdraw");
        payable(owner()).transfer(balance);
    }

    function setToken(IERC20 _token) external onlyOwner {
        Token = _token;
    }

    function pause() external onlyOwner {
        _pause();
    }

    function unpause() external onlyOwner {
        _unpause();
    }

    function setSpamStatus(address _address, bool _status) external onlyOwner {
        isSpam[_address] = _status;
    }

    function updateTaxReceiver(address _newTaxReceiver) external onlyOwner {
        taxReceiver = _newTaxReceiver;
    }

    function updateStakingLimits(uint256 _min, uint256 _max)
        external
        onlyOwner
    {
        minStaking = _min;
        maxStaking = _max;
    }

    function updateDeductionPercentage(uint256 _percentage) external onlyOwner {
        deductionPercentage = _percentage;
    }

    function setNftBoost(address nftAddress, uint256 boostPercentage)
        public
        onlyOwner
    {
        nftBoosts[nftAddress] = boostPercentage;
    }

    function setAPR_PERCENTAGE(uint256 _planDuration, uint256 _aprPercentage)
        public
        onlyOwner
    {
        APR_PERCENTAGE[_planDuration] = _aprPercentage;
    }

    function setTIME_STEP(uint256 _planDuration, uint256 _timeStep)
        public
        onlyOwner
    {
        TIME_STEP[_planDuration] = _timeStep;
    }

    function setNFTContracts(
        IERC721 _nftLevel1,
        IERC721 _nftLevel2,
        IERC721 _nftLevel3
    ) external onlyOwner {
        NFT_LEVEL1 = _nftLevel1;
        NFT_LEVEL2 = _nftLevel2;
        NFT_LEVEL3 = _nftLevel3;
    }
}

Read Contract

APR_PERCENTAGE 0x4720594d → uint256
NFT_LEVEL1 0xdf1a9f37 → address
NFT_LEVEL2 0x29af9c25 → address
NFT_LEVEL3 0x00771c08 → address
TIME_STEP 0x19198a36 → uint256
Token 0xc2412676 → address
deductionPercentage 0x6b130dc2 → uint256
futureRewards 0x648b5e32 → uint256, uint256
getUserDepositInfo 0xb48aa05e → uint256, uint256, uint256, uint256, uint256, uint256, address, string, bool
getUserDividends 0x0c9471c7 → uint256
getUserStakedPlans 0x09ae8c22 → uint256[]
getUserStakesCount 0x5b5e4558 → uint256
isSpam 0xcd099205 → bool
maxStaking 0x872c50ba → uint256
minStaking 0x0564534c → uint256
newStakers 0x03f35bce → bool
nftBoosts 0x77279d1e → uint256
owner 0x8da5cb5b → address
paused 0x5c975abb → bool
taxReceiver 0xe6ef73d6 → address
totalNFTStaked 0x0aa3d065 → uint256
totalStaked 0x817b1cd2 → uint256
totalStakers 0x86989038 → uint256

Write Contract 17 functions

These functions modify contract state and require a wallet transaction to execute.

farm 0xc1bb014f
uint256 _amount
uint256 _lockableDays
uint256 _tokenID
address _nftAddress
harvest 0xe4a4b7b1
uint256 planDuration
uint256 index
pause 0x8456cb59
No parameters
setAPR_PERCENTAGE 0x774c78a7
uint256 _planDuration
uint256 _aprPercentage
setNFTContracts 0xac3a56ac
address _nftLevel1
address _nftLevel2
address _nftLevel3
setNftBoost 0xb88be686
address nftAddress
uint256 boostPercentage
setSpamStatus 0xcaa56040
address _address
bool _status
setTIME_STEP 0x1d9bdeae
uint256 _planDuration
uint256 _timeStep
setToken 0x144fa6d7
address _token
transferOwnership 0xf2fde38b
address newOwner
unpause 0x3f4ba83a
No parameters
updateDeductionPercentage 0xff5d626c
uint256 _percentage
updateStakingLimits 0x52b81763
uint256 _min
uint256 _max
updateTaxReceiver 0x56b09616
address _newTaxReceiver
withdrawETH 0xe086e5ec
No parameters
withdrawNFT 0x6088e93a
address _nftContract
uint256 _tokenId
withdrawTokens 0x06b091f9
address _tokenAddress
uint256 _amount

Recent Transactions

No transactions found for this address