More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 27 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
Withdraw | 11709558 | 1255 days ago | IN | 0 ETH | 0.00164155 | ||||
Withdraw | 11542947 | 1281 days ago | IN | 0 ETH | 0.00295479 | ||||
Withdraw | 11520524 | 1284 days ago | IN | 0 ETH | 0.00197837 | ||||
Withdraw | 11513705 | 1285 days ago | IN | 0 ETH | 0.0025641 | ||||
Withdraw | 11510407 | 1286 days ago | IN | 0 ETH | 0.00374273 | ||||
Withdraw | 11510266 | 1286 days ago | IN | 0 ETH | 0.00377556 | ||||
Unstake | 11506255 | 1286 days ago | IN | 0 ETH | 0.00307611 | ||||
Unstake | 11497928 | 1287 days ago | IN | 0 ETH | 0.00363436 | ||||
Unstake | 11497492 | 1288 days ago | IN | 0 ETH | 0.00284825 | ||||
Unstake | 11497492 | 1288 days ago | IN | 0 ETH | 0.00284825 | ||||
Unstake | 11497328 | 1288 days ago | IN | 0 ETH | 0.00700099 | ||||
Unstake | 11497295 | 1288 days ago | IN | 0 ETH | 0.00620918 | ||||
Unstake | 11497212 | 1288 days ago | IN | 0 ETH | 0.00394767 | ||||
Unstake | 11497207 | 1288 days ago | IN | 0 ETH | 0.00427237 | ||||
Unstake | 11497191 | 1288 days ago | IN | 0 ETH | 0.00256342 | ||||
Stake | 11459809 | 1293 days ago | IN | 0 ETH | 0.0042392 | ||||
Stake | 11458554 | 1293 days ago | IN | 0 ETH | 0.00417985 | ||||
Stake | 11458380 | 1294 days ago | IN | 0 ETH | 0.00978084 | ||||
Stake | 11458376 | 1294 days ago | IN | 0 ETH | 0.00937958 | ||||
Stake | 11458357 | 1294 days ago | IN | 0 ETH | 0.00806036 | ||||
Stake | 11458244 | 1294 days ago | IN | 0 ETH | 0.00720268 | ||||
Stake | 11458238 | 1294 days ago | IN | 0 ETH | 0.0067225 | ||||
Stake | 11458236 | 1294 days ago | IN | 0 ETH | 0.00861049 | ||||
Stake | 11458179 | 1294 days ago | IN | 0 ETH | 0.0067911 | ||||
Stake | 11458172 | 1294 days ago | IN | 0 ETH | 0.00685748 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
StakingImpl
Compiler Version
v0.7.4+commit.3f05b770
Contract Source Code (Solidity Standard Json-Input format)
// Copyright 2020 Cartesi Pte. Ltd. // SPDX-License-Identifier: Apache-2.0 // Licensed under the Apache License, Version 2.0 (the "License"); you may not use // this file except in compliance with the License. You may obtain a copy of the // License at http://www.apache.org/licenses/LICENSE-2.0 // Unless required by applicable law or agreed to in writing, software distributed // under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR // CONDITIONS OF ANY KIND, either express or implied. See the License for the // specific language governing permissions and limitations under the License. /// @title Cartesi Staking /// @author Felipe Argento pragma solidity ^0.7.0; import "@openzeppelin/contracts/math/SafeMath.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "./Staking.sol"; contract StakingImpl is Staking { using SafeMath for uint256; IERC20 private ctsi; uint256 timeToStake; // time it takes for deposited tokens to become staked. uint256 timeToRelease; // time it takes from witdraw signal to tokens to be unlocked. mapping(address => uint256) staked; // amount of money being staked. mapping(address => MaturationStruct) maturing; // deposits waiting to be staked. mapping(address => MaturationStruct) releasing; // money waiting for withdraw. struct MaturationStruct { uint256 amount; uint256 timestamp; } /// @notice constructor /// @param _ctsiAddress address of compatible ERC20 /// @param _timeToStake time it takes for deposited tokens to become staked. /// @param _timeToRelease time it takes from unstake to tokens being unlocked. constructor( address _ctsiAddress, uint256 _timeToStake, uint256 _timeToRelease ) { ctsi = IERC20(_ctsiAddress); timeToStake = _timeToStake; timeToRelease = _timeToRelease; } function stake(uint256 _amount) public override { require(_amount > 0, "amount cant be zero"); // pointers to releasing/maturing structs MaturationStruct storage r = releasing[msg.sender]; MaturationStruct storage m = maturing[msg.sender]; // check if there are mature coins to be staked if (m.timestamp.add(timeToStake) <= block.timestamp) { staked[msg.sender] = staked[msg.sender].add(m.amount); m.amount = 0; } // first move tokens from releasing pool to maturing // then transfer from wallet if (r.amount >= _amount) { r.amount = (r.amount).sub(_amount); } else { // transfer stake to contract // from: msg.sender // to: this contract // value: _amount - releasing[msg.sender].amount ctsi.transferFrom(msg.sender, address(this), _amount.sub(r.amount)); r.amount = 0; } m.amount = (m.amount).add(_amount); m.timestamp = block.timestamp; emit Stake( msg.sender, m.amount, block.timestamp.add(timeToStake) ); } function unstake(uint256 _amount) public override { require(_amount > 0, "amount cant be zero"); // pointers to releasing/maturing structs MaturationStruct storage r = releasing[msg.sender]; MaturationStruct storage m = maturing[msg.sender]; if (m.amount >= _amount) { m.amount = (m.amount).sub(_amount); } else { // safemath.sub guarantees that _amount <= m.amount + staked amount staked[msg.sender] = staked[msg.sender].sub(_amount.sub(m.amount)); m.amount = 0; } // update releasing amount r.amount = (r.amount).add(_amount); r.timestamp = block.timestamp; emit Unstake( msg.sender, r.amount, block.timestamp.add(timeToRelease) ); } function withdraw(uint256 _amount) public override { // pointer to releasing struct MaturationStruct storage r = releasing[msg.sender]; require(_amount > 0, "amount cant be zero"); require( r.timestamp.add(timeToRelease) <= block.timestamp, "tokens are not yet ready to be released" ); r.amount = (r.amount).sub(_amount, "not enough tokens waiting to be released;"); // withdraw tokens // from: this contract // to: msg.sender // value: bet total withdraw value on toWithdraw ctsi.transfer(msg.sender, _amount); emit Withdraw(msg.sender, _amount); } // getters function getMaturingTimestamp( address _userAddress ) public view override returns (uint256) { return maturing[_userAddress].timestamp.add(timeToStake); } function getMaturingBalance( address _userAddress ) public view override returns (uint256) { MaturationStruct storage m = maturing[_userAddress]; if (m.timestamp.add(timeToStake) <= block.timestamp) { return 0; } return m.amount; } function getReleasingBalance( address _userAddress ) public view override returns (uint256) { return releasing[_userAddress].amount; } function getReleasingTimestamp( address _userAddress ) public view override returns (uint256) { return releasing[_userAddress].timestamp.add(timeToRelease); } function getStakedBalance(address _userAddress) public view override returns (uint256) { MaturationStruct storage m = maturing[_userAddress]; // if there are mature deposits, treat them as staked if (m.timestamp.add(timeToStake) <= block.timestamp) { return staked[_userAddress].add(m.amount); } return staked[_userAddress]; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.7.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.7.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @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 `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, 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 `sender` to `recipient` 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 sender, address recipient, uint256 amount) external returns (bool); /** * @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); }
// Copyright 2020 Cartesi Pte. Ltd. // SPDX-License-Identifier: Apache-2.0 // Licensed under the Apache License, Version 2.0 (the "License"); you may not use // this file except in compliance with the License. You may obtain a copy of the // License at http://www.apache.org/licenses/LICENSE-2.0 // Unless required by applicable law or agreed to in writing, software distributed // under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR // CONDITIONS OF ANY KIND, either express or implied. See the License for the // specific language governing permissions and limitations under the License. /// @title Interface staking contract pragma solidity ^0.7.0; interface Staking { /// @notice Returns total amount of tokens counted as stake /// @param _userAddress user to retrieve staked balance from /// @return finalized staked of _userAddress function getStakedBalance( address _userAddress) external view returns (uint256); /// @notice Returns the timestamp when next deposit can be finalized /// @return timestamp of when finalizeStakes() is callable function getMaturingTimestamp(address _userAddress) external view returns (uint256); /// @notice Returns the timestamp when next withdraw can be finalized /// @return timestamp of when finalizeWithdraw() is callable function getReleasingTimestamp(address _userAddress) external view returns (uint256); /// @notice Returns the balance waiting/ready to be matured /// @return amount that will get staked after finalization function getMaturingBalance(address _userAddress) external view returns (uint256); /// @notice Returns the balance waiting/ready to be released /// @return amount that will get withdrew after finalization function getReleasingBalance(address _userAddress) external view returns (uint256); /// @notice Deposit CTSI to be staked. The money will turn into staked /// balance after timeToStake days /// @param _amount The amount of tokens that are gonna be deposited. function stake(uint256 _amount) external; /// @notice Remove tokens from staked balance. The money can /// be released after timeToRelease seconds, if the /// function withdraw is called. /// @param _amount The amount of tokens that are gonna be unstaked. function unstake(uint256 _amount) external; /// @notice Transfer tokens to user's wallet. /// @param _amount The amount of tokens that are gonna be transferred. function withdraw(uint256 _amount) external; // events /// @notice CTSI tokens were deposited, they count as stake after _maturationDate /// @param user address of msg.sender /// @param amount amount deposited for staking /// @param maturationDate date when the stake can be finalized event Stake( address indexed user, uint256 amount, uint256 maturationDate ); /// @notice Unstake tokens, moving them to releasing structure /// @param user address of msg.sender /// @param amount amount of tokens to be released /// @param maturationDate date when the tokens can be withdrew event Unstake( address indexed user, uint256 amount, uint256 maturationDate ); /// @notice Withdraw process was finalized /// @param user address of msg.sender /// @param amount amount of tokens withdrawn event Withdraw( address indexed user, uint256 amount ); }
{ "evmVersion": "istanbul", "libraries": {}, "metadata": { "bytecodeHash": "ipfs", "useLiteralContent": true }, "optimizer": { "enabled": true, "runs": 200 }, "remappings": [], "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_ctsiAddress","type":"address"},{"internalType":"uint256","name":"_timeToStake","type":"uint256"},{"internalType":"uint256","name":"_timeToRelease","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maturationDate","type":"uint256"}],"name":"Stake","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maturationDate","type":"uint256"}],"name":"Unstake","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[{"internalType":"address","name":"_userAddress","type":"address"}],"name":"getMaturingBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_userAddress","type":"address"}],"name":"getMaturingTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_userAddress","type":"address"}],"name":"getReleasingBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_userAddress","type":"address"}],"name":"getReleasingTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_userAddress","type":"address"}],"name":"getStakedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b5060405161099b38038061099b8339818101604052606081101561003357600080fd5b5080516020820151604090920151600080546001600160a01b039093166001600160a01b0319909316929092179091556001919091556002556109208061007b6000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c806367ba9b911161005b57806367ba9b91146101275780638e9f04b51461014d5780639a05154514610173578063a694fc3a1461019957610088565b80632e17de781461008d5780632e1a7d4d146100ac5780633a02a42d146100c9578063419be62414610101575b600080fd5b6100aa600480360360208110156100a357600080fd5b50356101b6565b005b6100aa600480360360208110156100c257600080fd5b50356102da565b6100ef600480360360208110156100df57600080fd5b50356001600160a01b031661046b565b60408051918252519081900360200190f35b6100ef6004803603602081101561011757600080fd5b50356001600160a01b03166104e9565b6100ef6004803603602081101561013d57600080fd5b50356001600160a01b031661052b565b6100ef6004803603602081101561016357600080fd5b50356001600160a01b031661055c565b6100ef6004803603602081101561018957600080fd5b50356001600160a01b0316610577565b6100aa600480360360208110156101af57600080fd5b50356105a0565b60008111610201576040805162461bcd60e51b8152602060048201526013602482015272616d6f756e742063616e74206265207a65726f60681b604482015290519081900360640190fd5b33600090815260056020908152604080832060049092529091208054831161023657805461022f9084610760565b8155610273565b805461025d90610247908590610760565b3360009081526003602052604090205490610760565b3360009081526003602052604081209190915581555b815461027f90846107a9565b808355426001840181905560025433927ff960dbf9e5d0682f7a298ed974e33a28b4464914b7a2bfac12ae419a9afeb2809290916102bd91906107a9565b6040805192835260208301919091528051918290030190a2505050565b33600090815260056020526040902081610331576040805162461bcd60e51b8152602060048201526013602482015272616d6f756e742063616e74206265207a65726f60681b604482015290519081900360640190fd5b4261034b60025483600101546107a990919063ffffffff16565b11156103885760405162461bcd60e51b815260040180806020018281038252602781526020018061089b6027913960400191505060405180910390fd5b6103ae826040518060600160405280602981526020016108c26029913983549190610803565b8155600080546040805163a9059cbb60e01b81523360048201526024810186905290516001600160a01b039092169263a9059cbb926044808401936020939083900390910190829087803b15801561040557600080fd5b505af1158015610419573d6000803e3d6000fd5b505050506040513d602081101561042f57600080fd5b505060408051838152905133917f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364919081900360200190a25050565b6001600160a01b03811660009081526004602052604081206001805490820154429161049791906107a9565b116104c85780546001600160a01b0384166000908152600360205260409020546104c0916107a9565b9150506104e4565b50506001600160a01b0381166000908152600360205260409020545b919050565b6001600160a01b03811660009081526004602052604081206001805490820154429161051591906107a9565b116105245760009150506104e4565b5492915050565b6002546001600160a01b038216600090815260056020526040812060010154909161055691906107a9565b92915050565b6001600160a01b031660009081526005602052604090205490565b600180546001600160a01b038316600090815260046020526040812090920154610556916107a9565b600081116105eb576040805162461bcd60e51b8152602060048201526013602482015272616d6f756e742063616e74206265207a65726f60681b604482015290519081900360640190fd5b33600090815260056020908152604080832060049092529091206001805490820154429161061991906107a9565b1161064f57805433600090815260036020526040902054610639916107a9565b3360009081526003602052604081209190915581555b8154831161066a5781546106639084610760565b8255610717565b60005482546001600160a01b03909116906323b872dd9033903090610690908890610760565b6040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050602060405180830381600087803b1580156106e657600080fd5b505af11580156106fa573d6000803e3d6000fd5b505050506040513d602081101561071057600080fd5b5050600082555b805461072390846107a9565b8082554260018084018290555433927f5af417134f72a9d41143ace85b0a26dce6f550f894f2cbc1eeee8810603d91b69290916102bd91906107a9565b60006107a283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610803565b9392505050565b6000828201838110156107a2576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600081848411156108925760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561085757818101518382015260200161083f565b50505050905090810190601f1680156108845780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50505090039056fe746f6b656e7320617265206e6f742079657420726561647920746f2062652072656c65617365646e6f7420656e6f75676820746f6b656e732077616974696e6720746f2062652072656c65617365643ba2646970667358221220367bc7cf46a969a3ec5e9382167315f2b2a6addc1b34b11dca969db22c0ae13364736f6c63430007040033000000000000000000000000491604c0fdf08347dd1fa4ee062a822a5dd06b5d0000000000000000000000000000000000000000000000000000000000001c20000000000000000000000000000000000000000000000000000000000002a300
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100885760003560e01c806367ba9b911161005b57806367ba9b91146101275780638e9f04b51461014d5780639a05154514610173578063a694fc3a1461019957610088565b80632e17de781461008d5780632e1a7d4d146100ac5780633a02a42d146100c9578063419be62414610101575b600080fd5b6100aa600480360360208110156100a357600080fd5b50356101b6565b005b6100aa600480360360208110156100c257600080fd5b50356102da565b6100ef600480360360208110156100df57600080fd5b50356001600160a01b031661046b565b60408051918252519081900360200190f35b6100ef6004803603602081101561011757600080fd5b50356001600160a01b03166104e9565b6100ef6004803603602081101561013d57600080fd5b50356001600160a01b031661052b565b6100ef6004803603602081101561016357600080fd5b50356001600160a01b031661055c565b6100ef6004803603602081101561018957600080fd5b50356001600160a01b0316610577565b6100aa600480360360208110156101af57600080fd5b50356105a0565b60008111610201576040805162461bcd60e51b8152602060048201526013602482015272616d6f756e742063616e74206265207a65726f60681b604482015290519081900360640190fd5b33600090815260056020908152604080832060049092529091208054831161023657805461022f9084610760565b8155610273565b805461025d90610247908590610760565b3360009081526003602052604090205490610760565b3360009081526003602052604081209190915581555b815461027f90846107a9565b808355426001840181905560025433927ff960dbf9e5d0682f7a298ed974e33a28b4464914b7a2bfac12ae419a9afeb2809290916102bd91906107a9565b6040805192835260208301919091528051918290030190a2505050565b33600090815260056020526040902081610331576040805162461bcd60e51b8152602060048201526013602482015272616d6f756e742063616e74206265207a65726f60681b604482015290519081900360640190fd5b4261034b60025483600101546107a990919063ffffffff16565b11156103885760405162461bcd60e51b815260040180806020018281038252602781526020018061089b6027913960400191505060405180910390fd5b6103ae826040518060600160405280602981526020016108c26029913983549190610803565b8155600080546040805163a9059cbb60e01b81523360048201526024810186905290516001600160a01b039092169263a9059cbb926044808401936020939083900390910190829087803b15801561040557600080fd5b505af1158015610419573d6000803e3d6000fd5b505050506040513d602081101561042f57600080fd5b505060408051838152905133917f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364919081900360200190a25050565b6001600160a01b03811660009081526004602052604081206001805490820154429161049791906107a9565b116104c85780546001600160a01b0384166000908152600360205260409020546104c0916107a9565b9150506104e4565b50506001600160a01b0381166000908152600360205260409020545b919050565b6001600160a01b03811660009081526004602052604081206001805490820154429161051591906107a9565b116105245760009150506104e4565b5492915050565b6002546001600160a01b038216600090815260056020526040812060010154909161055691906107a9565b92915050565b6001600160a01b031660009081526005602052604090205490565b600180546001600160a01b038316600090815260046020526040812090920154610556916107a9565b600081116105eb576040805162461bcd60e51b8152602060048201526013602482015272616d6f756e742063616e74206265207a65726f60681b604482015290519081900360640190fd5b33600090815260056020908152604080832060049092529091206001805490820154429161061991906107a9565b1161064f57805433600090815260036020526040902054610639916107a9565b3360009081526003602052604081209190915581555b8154831161066a5781546106639084610760565b8255610717565b60005482546001600160a01b03909116906323b872dd9033903090610690908890610760565b6040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050602060405180830381600087803b1580156106e657600080fd5b505af11580156106fa573d6000803e3d6000fd5b505050506040513d602081101561071057600080fd5b5050600082555b805461072390846107a9565b8082554260018084018290555433927f5af417134f72a9d41143ace85b0a26dce6f550f894f2cbc1eeee8810603d91b69290916102bd91906107a9565b60006107a283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610803565b9392505050565b6000828201838110156107a2576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600081848411156108925760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561085757818101518382015260200161083f565b50505050905090810190601f1680156108845780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50505090039056fe746f6b656e7320617265206e6f742079657420726561647920746f2062652072656c65617365646e6f7420656e6f75676820746f6b656e732077616974696e6720746f2062652072656c65617365643ba2646970667358221220367bc7cf46a969a3ec5e9382167315f2b2a6addc1b34b11dca969db22c0ae13364736f6c63430007040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000491604c0fdf08347dd1fa4ee062a822a5dd06b5d0000000000000000000000000000000000000000000000000000000000001c20000000000000000000000000000000000000000000000000000000000002a300
-----Decoded View---------------
Arg [0] : _ctsiAddress (address): 0x491604c0FDF08347Dd1fa4Ee062a822A5DD06B5D
Arg [1] : _timeToStake (uint256): 7200
Arg [2] : _timeToRelease (uint256): 172800
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000491604c0fdf08347dd1fa4ee062a822a5dd06b5d
Arg [1] : 0000000000000000000000000000000000000000000000000000000000001c20
Arg [2] : 000000000000000000000000000000000000000000000000000000000002a300
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $0.163995 | 5,500 | $901.97 |
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.