Contract Address Details

0x8D18254d5395c52569869ffE9e5E143Fb6E5173e

Contract Name
LongTermPledge
Creator
0x523009–fcc29c at 0x6bc65b–edb726
Balance
0 NMT
Tokens
Fetching tokens...
Transactions
0 Transactions
Transfers
0 Transfers
Gas Used
Fetching gas used...
Last Balance Update
12807006
Contract name:
LongTermPledge




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




Optimization runs
200
EVM Version
default




Verified at
2024-05-09T07:23:03.356588Z

Contract source code

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

interface IPledge {
    function upadeNodesStake(
        address[] calldata addrs,
        uint256[] calldata uints,
        uint256 expiredTime,
        string calldata chain
    ) external;
    function nodeAddrSta(address nodeAddr) external view returns (bool);
    function nodeChainAmount(string memory chain, address nodeAddr) external view returns (uint256);
}

abstract contract Initializable {
    /**
     * @dev Indicates that the contract has been initialized.
     */
    bool private _initialized;

    /**
     * @dev Indicates that the contract is in the process of being initialized.
     */
    bool private _initializing;

    /**
     * @dev Modifier to protect an initializer function from being invoked twice.
     */
    modifier initializer() {
        require(_initializing || !_initialized, "Initializable: contract is already initialized");

        bool isTopLevelCall = !_initializing;
        if (isTopLevelCall) {
            _initializing = true;
            _initialized = true;
        }

        _;

        if (isTopLevelCall) {
            _initializing = false;
        }
    }

    function _disableInitializers() internal {
        _initialized = true;
    }
}

contract Ownable is Initializable{
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    function __Ownable_init_unchained() internal initializer {
        address msgSender = msg.sender;
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(isOwner(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Returns true if the caller is the current owner.
     */
    function isOwner() public view returns (bool) {
        return msg.sender == _owner;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public onlyOwner {
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     */
    function _transferOwnership(address newOwner) internal {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

contract LongTermPledge is Ownable{
    bool private reentrancyLock;
    IPledge public pledgeContract;
    uint256 public lockPeriod;
    uint256 public stakeTokenNum;         
    mapping(uint256 => StakeTokenMsg) public stakeTokenMsg;  
    mapping(address => uint256[]) private stakeList;
    

    event StakeToken(uint256 indexed _stakeIndex, address _userAddr, address _nodeAddr, uint256 _amount, uint256 _time,  uint256 _lockTime, address _token);
    event CancleStakeToken(uint256 indexed _stakeIndex, address indexed _userAddr, address _nodeAddr, uint256 _time);
    event UpdateLockPeriod(uint256 time);
    

    struct StakeTokenMsg {
        address userAddr;
        address nodeAddr;
        uint256 start;
        uint256 lockTime;
        uint256 end;
        uint256 tokenAmount;
        address tokenAddr;
    }

    modifier nonReentrant() {
        require(!reentrancyLock);
        reentrancyLock = true;
        _;
        reentrancyLock = false;
    }

    constructor(){_disableInitializers();}

    function init(address _pledgeContract) external initializer{
        __Ownable_init_unchained();
        __LongTermPledge_init_unchained(_pledgeContract);
    }

    function __LongTermPledge_init_unchained(address _pledgeContract) internal initializer{
        pledgeContract = IPledge(_pledgeContract);
        lockPeriod = 182 days;
        reentrancyLock = false;
    }

    function updateLockPeriod(uint256 _lockPeriod) external onlyOwner{
        lockPeriod = _lockPeriod;
        emit UpdateLockPeriod(_lockPeriod);
    }
    
    function stake(address _nodeAddr, address _token, uint256 _amount) payable external nonReentrant(){
        address _sender = msg.sender;
        _amount = msg.value;
        require(_token == address(0), "token error");
        require(_amount >= 1e16, "value error");
        require(pledgeContract.nodeAddrSta(_nodeAddr), "nodeAddr error");
        uint256 _nodeStakeNum = pledgeContract.nodeChainAmount("Netmind", _nodeAddr) + _amount;
        address[] memory _addrArray = new address[](1) ;
        _addrArray[0] = _nodeAddr;
        uint256[] memory _stakeAmount = new uint256[](1);
        _stakeAmount[0] = _nodeStakeNum;
        pledgeContract.upadeNodesStake(_addrArray, _stakeAmount, block.timestamp+10, "Netmind");
        uint256 _stakeTokenNum = ++stakeTokenNum;
        uint256 _lockTime = block.timestamp + lockPeriod;
        stakeTokenMsg[_stakeTokenNum] = StakeTokenMsg(_sender, _nodeAddr, block.timestamp, _lockTime, 0, _amount, _token);
        stakeList[_sender].push(_stakeTokenNum);
        emit StakeToken(_stakeTokenNum, _sender, _nodeAddr, _amount, block.timestamp, _lockTime,_token);
    }

    function cancleStake(uint256[] calldata _indexs) external nonReentrant(){
        address _sender = msg.sender;
        for (uint256 i = 0; i < _indexs.length; i++) {
            uint256 _stakeTokenMark = _indexs[i];
            if (_stakeTokenMark > 0){
                StakeTokenMsg storage _stakeTokenMsg = stakeTokenMsg[_stakeTokenMark];
                require(_stakeTokenMsg.userAddr == _sender, "sender error");
                require(_stakeTokenMsg.lockTime < block.timestamp, "lockTime error");
                require(_stakeTokenMsg.end == 0, "The Stake has been redeemed");
                _stakeTokenMsg.end = block.timestamp;
                payable(_stakeTokenMsg.userAddr).transfer(_stakeTokenMsg.tokenAmount);
                uint256 _nodeStakeNum = pledgeContract.nodeChainAmount("Netmind", _stakeTokenMsg.nodeAddr) - _stakeTokenMsg.tokenAmount;
                address[] memory _addrArray = new address[](1) ;
                _addrArray[0] = _stakeTokenMsg.nodeAddr;
                uint256[] memory _stakeAmount = new uint256[](1);
                _stakeAmount[0] = _nodeStakeNum;
                pledgeContract.upadeNodesStake(_addrArray, _stakeAmount, block.timestamp+10, "Netmind");
                emit CancleStakeToken(_stakeTokenMark, _sender, _stakeTokenMsg.nodeAddr, block.timestamp);
            }
        }
    }
    
    function getStakeList(address addr) public view returns(uint256[] memory){
        return stakeList[addr];
    }



}
        

Contract ABI

[{"type":"constructor","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"cancleStake","inputs":[{"type":"uint256[]","name":"_indexs","internalType":"uint256[]"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256[]","name":"","internalType":"uint256[]"}],"name":"getStakeList","inputs":[{"type":"address","name":"addr","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"init","inputs":[{"type":"address","name":"_pledgeContract","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isOwner","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"lockPeriod","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"owner","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IPledge"}],"name":"pledgeContract","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"renounceOwnership","inputs":[]},{"type":"function","stateMutability":"payable","outputs":[],"name":"stake","inputs":[{"type":"address","name":"_nodeAddr","internalType":"address"},{"type":"address","name":"_token","internalType":"address"},{"type":"uint256","name":"_amount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"userAddr","internalType":"address"},{"type":"address","name":"nodeAddr","internalType":"address"},{"type":"uint256","name":"start","internalType":"uint256"},{"type":"uint256","name":"lockTime","internalType":"uint256"},{"type":"uint256","name":"end","internalType":"uint256"},{"type":"uint256","name":"tokenAmount","internalType":"uint256"},{"type":"address","name":"tokenAddr","internalType":"address"}],"name":"stakeTokenMsg","inputs":[{"type":"uint256","name":"","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"stakeTokenNum","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferOwnership","inputs":[{"type":"address","name":"newOwner","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"updateLockPeriod","inputs":[{"type":"uint256","name":"_lockPeriod","internalType":"uint256"}]},{"type":"event","name":"CancleStakeToken","inputs":[{"type":"uint256","name":"_stakeIndex","indexed":true},{"type":"address","name":"_userAddr","indexed":true},{"type":"address","name":"_nodeAddr","indexed":false},{"type":"uint256","name":"_time","indexed":false}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"type":"address","name":"previousOwner","indexed":true},{"type":"address","name":"newOwner","indexed":true}],"anonymous":false},{"type":"event","name":"StakeToken","inputs":[{"type":"uint256","name":"_stakeIndex","indexed":true},{"type":"address","name":"_userAddr","indexed":false},{"type":"address","name":"_nodeAddr","indexed":false},{"type":"uint256","name":"_amount","indexed":false},{"type":"uint256","name":"_time","indexed":false},{"type":"uint256","name":"_lockTime","indexed":false},{"type":"address","name":"_token","indexed":false}],"anonymous":false},{"type":"event","name":"UpdateLockPeriod","inputs":[{"type":"uint256","name":"time","indexed":false}],"anonymous":false}]
            

Deployed ByteCode

0x6080604052600436106100c25760003560e01c80638f32d59b1161007f578063bf6eac2f11610059578063bf6eac2f1461020a578063e473f8a71461021d578063f2fde38b146102c3578063ff64d810146102e357600080fd5b80638f32d59b1461019957806391db7b0d146101ca578063acce5f3d146101ea57600080fd5b806319ab453c146100c75780633fd8b02f146100e9578063557e6cfe14610112578063715018a61461014a57806385d4f0551461015f5780638da5cb5b14610175575b600080fd5b3480156100d357600080fd5b506100e76100e2366004611006565b610310565b005b3480156100f557600080fd5b506100ff60025481565b6040519081526020015b60405180910390f35b34801561011e57600080fd5b50600154610132906001600160a01b031681565b6040516001600160a01b039091168152602001610109565b34801561015657600080fd5b506100e7610397565b34801561016b57600080fd5b506100ff60035481565b34801561018157600080fd5b506000546201000090046001600160a01b0316610132565b3480156101a557600080fd5b506000546201000090046001600160a01b031633146040519015158152602001610109565b3480156101d657600080fd5b506100e76101e5366004611028565b610418565b3480156101f657600080fd5b506100e7610205366004611041565b610483565b6100e76102183660046110b6565b610826565b34801561022957600080fd5b50610282610238366004611028565b600460208190526000918252604090912080546001820154600283015460038401549484015460058501546006909501546001600160a01b03948516969385169592949192911687565b604080516001600160a01b03988916815296881660208801528601949094526060850192909252608084015260a083015290911660c082015260e001610109565b3480156102cf57600080fd5b506100e76102de366004611006565b610d24565b3480156102ef57600080fd5b506103036102fe366004611006565b610d60565b604051610109919061112d565b600054610100900460ff1680610329575060005460ff16155b61034e5760405162461bcd60e51b815260040161034590611140565b60405180910390fd5b600054610100900460ff16158015610370576000805461ffff19166101011790555b610378610dcc565b61038182610e81565b8015610393576000805461ff00191690555b5050565b6000546201000090046001600160a01b031633146103c75760405162461bcd60e51b81526004016103459061118e565b60008054604051620100009091046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a36000805462010000600160b01b0319169055565b6000546201000090046001600160a01b031633146104485760405162461bcd60e51b81526004016103459061118e565b60028190556040518181527ffa4546b9a95580d08eebcf7a95f651c534a1fe2ad1b2f3b30210b1568e0fd12a9060200160405180910390a150565b600054600160b01b900460ff161561049a57600080fd5b6000805460ff60b01b1916600160b01b17815533905b828110156108135760008484838181106104cc576104cc6111c3565b905060200201359050600081111561080057600081815260046020526040902080546001600160a01b038581169116146105375760405162461bcd60e51b815260206004820152600c60248201526b39b2b73232b91032b93937b960a11b6044820152606401610345565b4281600301541061057b5760405162461bcd60e51b815260206004820152600e60248201526d3637b1b5aa34b6b29032b93937b960911b6044820152606401610345565b6004810154156105cd5760405162461bcd60e51b815260206004820152601b60248201527f546865205374616b6520686173206265656e2072656465656d656400000000006044820152606401610345565b426004820155805460058201546040516001600160a01b039092169181156108fc0291906000818181858888f19350505050158015610610573d6000803e3d6000fd5b5060058101546001805490830154604051633c0f3f0360e11b8152600093926001600160a01b039081169263781e7e069261065192909116906004016111d9565b602060405180830381865afa15801561066e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610692919061121a565b61069c9190611249565b6040805160018082528183019092529192506000919060208083019080368337505050600184015481519192506001600160a01b03169082906000906106e4576106e46111c3565b6001600160a01b0392909216602092830291909101909101526040805160018082528183019092526000918160200160208202803683370190505090508281600081518110610735576107356111c3565b60209081029190910101526001546001600160a01b03166346defac5838361075e42600a611262565b6040518463ffffffff1660e01b815260040161077c93929190611275565b600060405180830381600087803b15801561079657600080fd5b505af11580156107aa573d6000803e3d6000fd5b505050506001840154604080516001600160a01b0392831681524260208201529189169187917f32f0115ad5ecbe61fc028c71d04d7b8dd093bcb7785a110e450a491002ac6f6a910160405180910390a3505050505b508061080b81611304565b9150506104b0565b50506000805460ff60b01b191690555050565b600054600160b01b900460ff161561083d57600080fd5b506000805460ff60b01b1916600160b01b17905534336001600160a01b038316156108985760405162461bcd60e51b815260206004820152600b60248201526a3a37b5b2b71032b93937b960a91b6044820152606401610345565b662386f26fc100008210156108dd5760405162461bcd60e51b815260206004820152600b60248201526a3b30b63ab29032b93937b960a91b6044820152606401610345565b600154604051636157c81f60e01b81526001600160a01b03868116600483015290911690636157c81f90602401602060405180830381865afa158015610927573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094b919061131d565b6109885760405162461bcd60e51b815260206004820152600e60248201526d3737b232a0b232391032b93937b960911b6044820152606401610345565b600154604051633c0f3f0360e11b815260009184916001600160a01b039091169063781e7e06906109bd9089906004016111d9565b602060405180830381865afa1580156109da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109fe919061121a565b610a089190611262565b60408051600180825281830190925291925060009190602080830190803683370190505090508581600081518110610a4257610a426111c3565b6001600160a01b0392909216602092830291909101909101526040805160018082528183019092526000918160200160208202803683370190505090508281600081518110610a9357610a936111c3565b60209081029190910101526001546001600160a01b03166346defac58383610abc42600a611262565b6040518463ffffffff1660e01b8152600401610ada93929190611275565b600060405180830381600087803b158015610af457600080fd5b505af1158015610b08573d6000803e3d6000fd5b505050506000600360008154610b1d90611304565b9190508190559050600060025442610b359190611262565b90506040518060e00160405280876001600160a01b031681526020018a6001600160a01b0316815260200142815260200182815260200160008152602001888152602001896001600160a01b03168152506004600084815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160020155606082015181600301556080820151816004015560a0820151816005015560c08201518160060160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555090505060056000876001600160a01b03166001600160a01b03168152602001908152602001600020829080600181540180825580915050600190039060005260206000200160009091909190915055817f0138c1552d21687e076c0ce8ae6632cc57a4076d85dcce2a083f4cf50ce29e96878b8a42868e604051610d04969594939291906001600160a01b039687168152948616602086015260408501939093526060840191909152608083015290911660a082015260c00190565b60405180910390a250506000805460ff60b01b1916905550505050505050565b6000546201000090046001600160a01b03163314610d545760405162461bcd60e51b81526004016103459061118e565b610d5d81610f1c565b50565b6001600160a01b038116600090815260056020908152604091829020805483518184028101840190945280845260609392830182828015610dc057602002820191906000526020600020905b815481526020019060010190808311610dac575b50505050509050919050565b600054610100900460ff1680610de5575060005460ff16155b610e015760405162461bcd60e51b815260040161034590611140565b600054610100900460ff16158015610e23576000805461ffff19166101011790555b6000805462010000600160b01b03191633620100008102919091178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015610d5d576000805461ff001916905550565b600054610100900460ff1680610e9a575060005460ff16155b610eb65760405162461bcd60e51b815260040161034590611140565b600054610100900460ff16158015610ed8576000805461ffff19166101011790555b600180546001600160a01b0319166001600160a01b03841617905562eff1006002556000805460ff60b01b191690558015610393576000805461ff00191690555050565b6001600160a01b038116610f815760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610345565b600080546040516001600160a01b03808516936201000090930416917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b80356001600160a01b038116811461100157600080fd5b919050565b60006020828403121561101857600080fd5b61102182610fea565b9392505050565b60006020828403121561103a57600080fd5b5035919050565b6000806020838503121561105457600080fd5b823567ffffffffffffffff8082111561106c57600080fd5b818501915085601f83011261108057600080fd5b81358181111561108f57600080fd5b8660208260051b85010111156110a457600080fd5b60209290920196919550909350505050565b6000806000606084860312156110cb57600080fd5b6110d484610fea565b92506110e260208501610fea565b9150604084013590509250925092565b600081518084526020808501945080840160005b8381101561112257815187529582019590820190600101611106565b509495945050505050565b60208152600061102160208301846110f2565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60408152600061120060408301600781526613995d1b5a5b9960ca1b602082015260400190565b6001600160a01b0393909316602092909201919091525090565b60006020828403121561122c57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561125c5761125c611233565b92915050565b8082018082111561125c5761125c611233565b6080808252845190820181905260009060209060a0840190828801845b828110156112b75781516001600160a01b031684529284019290840190600101611292565b505050838103828501526112cb81876110f2565b91505083604084015282810360608401526112fa81600781526613995d1b5a5b9960ca1b602082015260400190565b9695505050505050565b60006001820161131657611316611233565b5060010190565b60006020828403121561132f57600080fd5b8151801515811461102157600080fdfea2646970667358221220a79f99fd1a8d88f2b78d71ba53f1484f04d0859fdd22901a794e6a51d244b30664736f6c63430008120033