Contract Overview
My Name Tag:
Not Available, login to update
[ Download CSV Export ]
Contract Name:
KlimaStaking
Compiler Version
v0.7.5+commit.eb77ed08
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2021-10-17 */ /** *Submitted for verification at Etherscan.io on 2021-06-12 */ // SPDX-License-Identifier: AGPL-3.0-or-later pragma solidity 0.7.5; 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; } } interface IERC20 { function decimals() external view returns (uint8); /** * @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); } library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies in extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.3._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.3._ */ function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } function addressToString(address _address) internal pure returns(string memory) { bytes32 _bytes = bytes32(uint256(_address)); bytes memory HEX = "0123456789abcdef"; bytes memory _addr = new bytes(42); _addr[0] = '0'; _addr[1] = 'x'; for(uint256 i = 0; i < 20; i++) { _addr[2+i*2] = HEX[uint8(_bytes[i + 12] >> 4)]; _addr[3+i*2] = HEX[uint8(_bytes[i + 12] & 0x0f)]; } return string(_addr); } } library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove(IERC20 token, address spender, uint256 value) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require((value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero"); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } interface IOwnable { function manager() external view returns (address); function renounceManagement() external; function pushManagement( address newOwner_ ) external; function pullManagement() external; } contract Ownable is IOwnable { address internal _owner; address internal _newOwner; event OwnershipPushed(address indexed previousOwner, address indexed newOwner); event OwnershipPulled(address indexed previousOwner, address indexed newOwner); constructor () { _owner = msg.sender; emit OwnershipPushed( address(0), _owner ); } function manager() public view override returns (address) { return _owner; } modifier onlyManager() { require( _owner == msg.sender, "Ownable: caller is not the owner" ); _; } function renounceManagement() public virtual override onlyManager() { emit OwnershipPushed( _owner, address(0) ); _owner = address(0); } function pushManagement( address newOwner_ ) public virtual override onlyManager() { require( newOwner_ != address(0), "Ownable: new owner is the zero address"); emit OwnershipPushed( _owner, newOwner_ ); _newOwner = newOwner_; } function pullManagement() public virtual override { require( msg.sender == _newOwner, "Ownable: must be new owner to pull"); emit OwnershipPulled( _owner, _newOwner ); _owner = _newOwner; } } interface IsKLIMA { function rebase( uint256 klimaProfit_, uint epoch_) external returns (uint256); function circulatingSupply() external view returns (uint256); function balanceOf(address who) external view returns (uint256); function gonsForBalance( uint amount ) external view returns ( uint ); function balanceForGons( uint gons ) external view returns ( uint ); function index() external view returns ( uint ); } interface IWarmup { function retrieve( address staker_, uint amount_ ) external; } interface IDistributor { function distribute() external returns ( bool ); } contract KlimaStaking is Ownable { using SafeMath for uint256; using SafeERC20 for IERC20; address public immutable KLIMA; address public immutable sKLIMA; struct Epoch { uint length; uint number; uint endBlock; uint distribute; } Epoch public epoch; address public distributor; address public locker; uint public totalBonus; address public warmupContract; uint public warmupPeriod; constructor ( address _KLIMA, address _sKLIMA, uint _epochLength, uint _firstEpochNumber, uint _firstEpochBlock ) { require( _KLIMA != address(0) ); KLIMA = _KLIMA; require( _sKLIMA != address(0) ); sKLIMA = _sKLIMA; epoch = Epoch({ length: _epochLength, number: _firstEpochNumber, endBlock: _firstEpochBlock, distribute: 0 }); } struct Claim { uint deposit; uint gons; uint expiry; bool lock; // prevents malicious delays } mapping( address => Claim ) public warmupInfo; /** @notice stake KLIMA to enter warmup @param _amount uint @return bool */ function stake( uint _amount, address _recipient ) external returns ( bool ) { rebase(); IERC20( KLIMA ).safeTransferFrom( msg.sender, address(this), _amount ); Claim memory info = warmupInfo[ _recipient ]; require( !info.lock, "Deposits for account are locked" ); warmupInfo[ _recipient ] = Claim ({ deposit: info.deposit.add( _amount ), gons: info.gons.add( IsKLIMA( sKLIMA ).gonsForBalance( _amount ) ), expiry: epoch.number.add( warmupPeriod ), lock: false }); IERC20( sKLIMA ).safeTransfer( warmupContract, _amount ); return true; } /** @notice retrieve sKLIMA from warmup @param _recipient address */ function claim ( address _recipient ) public { Claim memory info = warmupInfo[ _recipient ]; if ( epoch.number >= info.expiry && info.expiry != 0 ) { delete warmupInfo[ _recipient ]; IWarmup( warmupContract ).retrieve( _recipient, IsKLIMA( sKLIMA ).balanceForGons( info.gons ) ); } } /** @notice forfeit sKLIMA in warmup and retrieve KLIMA */ function forfeit() external { Claim memory info = warmupInfo[ msg.sender ]; delete warmupInfo[ msg.sender ]; IWarmup( warmupContract ).retrieve( address(this), IsKLIMA( sKLIMA ).balanceForGons( info.gons ) ); IERC20( KLIMA ).safeTransfer( msg.sender, info.deposit ); } /** @notice prevent new deposits to address (protection from malicious activity) */ function toggleDepositLock() external { warmupInfo[ msg.sender ].lock = !warmupInfo[ msg.sender ].lock; } /** @notice redeem sKLIMA for KLIMA @param _amount uint @param _trigger bool */ function unstake( uint _amount, bool _trigger ) external { if ( _trigger ) { rebase(); } IERC20( sKLIMA ).safeTransferFrom( msg.sender, address(this), _amount ); IERC20( KLIMA ).safeTransfer( msg.sender, _amount ); } /** @notice returns the sKLIMA index, which tracks rebase growth @return uint */ function index() public view returns ( uint ) { return IsKLIMA( sKLIMA ).index(); } /** @notice trigger rebase if epoch over */ function rebase() public { if( epoch.endBlock <= block.number ) { IsKLIMA( sKLIMA ).rebase( epoch.distribute, epoch.number ); epoch.endBlock = epoch.endBlock.add( epoch.length ); epoch.number++; if ( distributor != address(0) ) { IDistributor( distributor ).distribute(); } uint balance = contractBalance(); uint staked = IsKLIMA( sKLIMA ).circulatingSupply(); if( balance <= staked ) { epoch.distribute = 0; } else { epoch.distribute = balance.sub( staked ); } } } /** @notice returns contract KLIMA holdings, including bonuses provided @return uint */ function contractBalance() public view returns ( uint ) { return IERC20( KLIMA ).balanceOf( address(this) ).add( totalBonus ); } /** @notice provide bonus to locked staking contract @param _amount uint */ function giveLockBonus( uint _amount ) external { require( msg.sender == locker ); totalBonus = totalBonus.add( _amount ); IERC20( sKLIMA ).safeTransfer( locker, _amount ); } /** @notice reclaim bonus from locked staking contract @param _amount uint */ function returnLockBonus( uint _amount ) external { require( msg.sender == locker ); totalBonus = totalBonus.sub( _amount ); IERC20( sKLIMA ).safeTransferFrom( locker, address(this), _amount ); } enum CONTRACTS { DISTRIBUTOR, WARMUP, LOCKER } /** @notice sets the contract address for LP staking @param _contract address */ function setContract( CONTRACTS _contract, address _address ) external onlyManager() { if( _contract == CONTRACTS.DISTRIBUTOR ) { // 0 distributor = _address; } else if ( _contract == CONTRACTS.WARMUP ) { // 1 require( warmupContract == address( 0 ), "Warmup cannot be set more than once" ); warmupContract = _address; } else if ( _contract == CONTRACTS.LOCKER ) { // 2 require( locker == address(0), "Locker cannot be set more than once" ); locker = _address; } } /** * @notice set warmup period for new stakers * @param _warmupPeriod uint */ function setWarmup( uint _warmupPeriod ) external onlyManager() { warmupPeriod = _warmupPeriod; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_KLIMA","type":"address"},{"internalType":"address","name":"_sKLIMA","type":"address"},{"internalType":"uint256","name":"_epochLength","type":"uint256"},{"internalType":"uint256","name":"_firstEpochNumber","type":"uint256"},{"internalType":"uint256","name":"_firstEpochBlock","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipPulled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipPushed","type":"event"},{"inputs":[],"name":"KLIMA","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"distributor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"epoch","outputs":[{"internalType":"uint256","name":"length","type":"uint256"},{"internalType":"uint256","name":"number","type":"uint256"},{"internalType":"uint256","name":"endBlock","type":"uint256"},{"internalType":"uint256","name":"distribute","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"forfeit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"giveLockBonus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"index","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"locker","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pullManagement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner_","type":"address"}],"name":"pushManagement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rebase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceManagement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"returnLockBonus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sKLIMA","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum KlimaStaking.CONTRACTS","name":"_contract","type":"uint8"},{"internalType":"address","name":"_address","type":"address"}],"name":"setContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_warmupPeriod","type":"uint256"}],"name":"setWarmup","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_recipient","type":"address"}],"name":"stake","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleDepositLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalBonus","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bool","name":"_trigger","type":"bool"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"warmupContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"warmupInfo","outputs":[{"internalType":"uint256","name":"deposit","type":"uint256"},{"internalType":"uint256","name":"gons","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"bool","name":"lock","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"warmupPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60c060405234801561001057600080fd5b506040516119d13803806119d1833981810160405260a081101561003357600080fd5b50805160208201516040808401516060850151608090950151600080546001600160a01b031916331780825593519596949592949391926001600160a01b0392909216917fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba908290a36001600160a01b0385166100af57600080fd5b6001600160601b0319606086901b166080526001600160a01b0384166100d457600080fd5b6001600160601b0319606094851b1660a0526040805160808101825284815260208101849052908101829052600094018490526002929092556003556004556005555060805160601c60a05160601c61184b6101866000398061040b52806105a55280610686528061080c5280610a0f5280610b1b5280610dc25280610e2f5280610f8a528061117552806112bd5250806109195280610cd25280610df752806110aa528061125c525061184b6000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c80638f077b83116100de578063c9f464ff11610097578063e3ed12a011610071578063e3ed12a01461039e578063ed4acaa8146103a6578063f3d86e4a146103ae578063f62ae76a146103b657610173565b8063c9f464ff14610371578063d7b96d4e1461038e578063deac361a1461039657610173565b80638f077b83146102fe578063900cf0cf146103065780639ebea88c14610334578063a8dd07dc14610359578063af14052c14610361578063bfe109281461036957610173565b806358d0c5171161013057806358d0c517146102295780635a96ac0a146102315780636746f4c2146102395780637acb775714610287578063865e6fd3146102c75780638b7afe2e146102f657610173565b806303c2367014610178578063089208d8146101975780631e83409a1461019f5780632986c0e5146101c557806346f68ee9146101df578063481c6a7514610205575b600080fd5b6101956004803603602081101561018e57600080fd5b50356103d3565b005b610195610437565b610195600480360360208110156101b557600080fd5b50356001600160a01b03166104ce565b6101cd610682565b60408051918252519081900360200190f35b610195600480360360208110156101f557600080fd5b50356001600160a01b031661070e565b61020d6107fb565b604080516001600160a01b039092168252519081900360200190f35b61020d61080a565b61019561082e565b61025f6004803603602081101561024f57600080fd5b50356001600160a01b03166108d8565b6040805194855260208501939093528383019190915215156060830152519081900360800190f35b6102b36004803603604081101561029d57600080fd5b50803590602001356001600160a01b0316610902565b604080519115158252519081900360200190f35b610195600480360360408110156102dd57600080fd5b50803560ff1690602001356001600160a01b0316610b4e565b6101cd610cc8565b610195610d74565b61030e610d98565b604080519485526020850193909352838301919091526060830152519081900360800190f35b6101956004803603604081101561034a57600080fd5b50803590602001351515610da7565b6101cd610e1e565b610195610e24565b61020d611032565b6101956004803603602081101561038757600080fd5b5035611041565b61020d611093565b6101cd6110a2565b61020d6110a8565b61020d6110cc565b6101956110db565b610195600480360360208110156103cc57600080fd5b5035611285565b6007546001600160a01b031633146103ea57600080fd5b6008546103f790826112e7565b600855600754610434906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116911683611348565b50565b6000546001600160a01b03163314610484576040805162461bcd60e51b815260206004820181905260248201526000805160206117cc833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba908390a3600080546001600160a01b0319169055565b6104d6611713565b506001600160a01b0381166000908152600b6020908152604091829020825160808101845281548152600182015492810192909252600281015492820183905260039081015460ff16151560608301525490911180159061053a5750604081015115155b1561067e576001600160a01b038083166000908152600b602090815260408083208381556001810184905560028101939093556003909201805460ff19169055600954848201518351637965d56d60e01b8152600481019190915292519084169363c3a2a6659387937f000000000000000000000000000000000000000000000000000000000000000090921692637965d56d92602480840193919291829003018186803b1580156105eb57600080fd5b505afa1580156105ff573d6000803e3d6000fd5b505050506040513d602081101561061557600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b039093166004840152602483019190915251604480830192600092919082900301818387803b15801561066557600080fd5b505af1158015610679573d6000803e3d6000fd5b505050505b5050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632986c0e56040518163ffffffff1660e01b815260040160206040518083038186803b1580156106dd57600080fd5b505afa1580156106f1573d6000803e3d6000fd5b505050506040513d602081101561070757600080fd5b5051905090565b6000546001600160a01b0316331461075b576040805162461bcd60e51b815260206004820181905260248201526000805160206117cc833981519152604482015290519081900360640190fd5b6001600160a01b0381166107a05760405162461bcd60e51b81526004018080602001828103825260268152602001806117616026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba91a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031690565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001546001600160a01b031633146108775760405162461bcd60e51b81526004018080602001828103825260228152602001806117aa6022913960400191505060405180910390fd5b600154600080546040516001600160a01b0393841693909116917faa151555690c956fc3ea32f106bb9f119b5237a061eaa8557cff3e51e3792c8d91a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b600b6020526000908152604090208054600182015460028301546003909301549192909160ff1684565b600061090c610e24565b6109416001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633308661139f565b610949611713565b506001600160a01b0382166000908152600b602090815260409182902082516080810184528154815260018201549281019290925260028101549282019290925260039091015460ff1615801560608301526109ec576040805162461bcd60e51b815260206004820152601f60248201527f4465706f7369747320666f72206163636f756e7420617265206c6f636b656400604482015290519081900360640190fd5b604080516080810190915281518190610a0590876112e7565b8152602001610aa87f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631bd39674886040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610a7157600080fd5b505afa158015610a85573d6000803e3d6000fd5b505050506040513d6020811015610a9b57600080fd5b50516020850151906112e7565b8152600a54600354602090920191610abf916112e7565b8152600060209182018190526001600160a01b038681168252600b8352604091829020845181559284015160018401559083015160028301556060909201516003909101805460ff1916911515919091179055600954610b44917f00000000000000000000000000000000000000000000000000000000000000008116911686611348565b5060019392505050565b6000546001600160a01b03163314610b9b576040805162461bcd60e51b815260206004820181905260248201526000805160206117cc833981519152604482015290519081900360640190fd5b6000826002811115610ba957fe5b1415610bcf57600680546001600160a01b0319166001600160a01b03831617905561067e565b6001826002811115610bdd57fe5b1415610c4b576009546001600160a01b031615610c2b5760405162461bcd60e51b81526004018080602001828103825260238152602001806117876023913960400191505060405180910390fd5b600980546001600160a01b0319166001600160a01b03831617905561067e565b6002826002811115610c5957fe5b141561067e576007546001600160a01b031615610ca75760405162461bcd60e51b815260040180806020018281038252602381526020018061173e6023913960400191505060405180910390fd5b600780546001600160a01b0383166001600160a01b03199091161790555050565b6000610d6f6008547f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015610d3d57600080fd5b505afa158015610d51573d6000803e3d6000fd5b505050506040513d6020811015610d6757600080fd5b5051906112e7565b905090565b336000908152600b60205260409020600301805460ff19811660ff90911615179055565b60025460035460045460055484565b8015610db557610db5610e24565b610dea6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633308561139f565b61067e6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163384611348565b60085481565b6004544310611030577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663058ecdb46002600301546002600101546040518363ffffffff1660e01b81526004018083815260200182815260200192505050602060405180830381600087803b158015610ea557600080fd5b505af1158015610eb9573d6000803e3d6000fd5b505050506040513d6020811015610ecf57600080fd5b5050600254600454610ee0916112e7565b6004556003805460010190556006546001600160a01b031615610f7a57600660009054906101000a90046001600160a01b03166001600160a01b031663e4fc6b6d6040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610f4d57600080fd5b505af1158015610f61573d6000803e3d6000fd5b505050506040513d6020811015610f7757600080fd5b50505b6000610f84610cc8565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639358928b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610fe157600080fd5b505afa158015610ff5573d6000803e3d6000fd5b505050506040513d602081101561100b57600080fd5b5051905080821161102057600060055561067e565b61102a82826113ff565b60055550505b565b6006546001600160a01b031681565b6000546001600160a01b0316331461108e576040805162461bcd60e51b815260206004820181905260248201526000805160206117cc833981519152604482015290519081900360640190fd5b600a55565b6007546001600160a01b031681565b600a5481565b7f000000000000000000000000000000000000000000000000000000000000000081565b6009546001600160a01b031681565b6110e3611713565b50336000818152600b602081815260408084208151608081018352815481526001820180548286019081526002840180548487015260038501805460ff8116151560608701529a8a5297875293889055908790559590915560ff1990951690925560095492518251637965d56d60e01b8152600481019190915291516001600160a01b039384169363c3a2a6659330937f000000000000000000000000000000000000000000000000000000000000000090921692637965d56d92602480840193919291829003018186803b1580156111bb57600080fd5b505afa1580156111cf573d6000803e3d6000fd5b505050506040513d60208110156111e557600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b039093166004840152602483019190915251604480830192600092919082900301818387803b15801561123557600080fd5b505af1158015611249573d6000803e3d6000fd5b5050825161043492506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691503390611348565b6007546001600160a01b0316331461129c57600080fd5b6008546112a990826113ff565b600855600754610434906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169116308461139f565b600082820183811015611341576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261139a908490611441565b505050565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526113f9908590611441565b50505050565b600061134183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506114f2565b6060611496826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166115899092919063ffffffff16565b80519091501561139a578080602001905160208110156114b557600080fd5b505161139a5760405162461bcd60e51b815260040180806020018281038252602a8152602001806117ec602a913960400191505060405180910390fd5b600081848411156115815760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561154657818101518382015260200161152e565b50505050905090810190601f1680156115735780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b606061159884846000856115a0565b949350505050565b60606115ab8561170d565b6115fc576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b6020831061163b5780518252601f19909201916020918201910161161c565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461169d576040519150601f19603f3d011682016040523d82523d6000602084013e6116a2565b606091505b509150915081156116b65791506115989050565b8051156116c65780518082602001fd5b60405162461bcd60e51b815260206004820181815286516024840152865187939192839260440191908501908083836000831561154657818101518382015260200161152e565b3b151590565b6040518060800160405280600081526020016000815260200160008152602001600015158152509056fe4c6f636b65722063616e6e6f7420626520736574206d6f7265207468616e206f6e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573735761726d75702063616e6e6f7420626520736574206d6f7265207468616e206f6e63654f776e61626c653a206d757374206265206e6577206f776e657220746f2070756c6c4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a2646970667358221220026047705bb10bd9fcc718f60dff11865c4e608321420fe789a8195f3179ac7b64736f6c634300070500330000000000000000000000004e78011ce80ee02d2c3e649fb657e45898257815000000000000000000000000b0c22d8d350c67420f06f48936654f567c73e8c80000000000000000000000000000000000000000000000000000000000002d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000136e3b2
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000004e78011ce80ee02d2c3e649fb657e45898257815000000000000000000000000b0c22d8d350c67420f06f48936654f567c73e8c80000000000000000000000000000000000000000000000000000000000002d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000136e3b2
-----Decoded View---------------
Arg [0] : _KLIMA (address): 0x4e78011ce80ee02d2c3e649fb657e45898257815
Arg [1] : _sKLIMA (address): 0xb0c22d8d350c67420f06f48936654f567c73e8c8
Arg [2] : _epochLength (uint256): 11520
Arg [3] : _firstEpochNumber (uint256): 0
Arg [4] : _firstEpochBlock (uint256): 20374450
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000004e78011ce80ee02d2c3e649fb657e45898257815
Arg [1] : 000000000000000000000000b0c22d8d350c67420f06f48936654f567c73e8c8
Arg [2] : 0000000000000000000000000000000000000000000000000000000000002d00
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [4] : 000000000000000000000000000000000000000000000000000000000136e3b2
Deployed ByteCode Sourcemap
21012:6281:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25779:206;;;;;;;;;;;;;;;;-1:-1:-1;25779:206:0;;:::i;:::-;;19709:159;;;:::i;23067:341::-;;;;;;;;;;;;;;;;-1:-1:-1;23067:341:0;-1:-1:-1;;;;;23067:341:0;;:::i;24551:97::-;;;:::i;:::-;;;;;;;;;;;;;;;;19876:261;;;;;;;;;;;;;;;;-1:-1:-1;19876:261:0;-1:-1:-1;;;;;19876:261:0;;:::i;19482:90::-;;;:::i;:::-;;;;-1:-1:-1;;;;;19482:90:0;;;;;;;;;;;;;;21159:31;;;:::i;20145:221::-;;;:::i;22135:45::-;;;;;;;;;;;;;;;;-1:-1:-1;22135:45:0;-1:-1:-1;;;;;22135:45:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22303:658;;;;;;;;;;;;;;;;-1:-1:-1;22303:658:0;;;;;;-1:-1:-1;;;;;22303:658:0;;:::i;:::-;;;;;;;;;;;;;;;;;;26499:570;;;;;;;;;;;;;;;;-1:-1:-1;26499:570:0;;;;;;;;-1:-1:-1;;;;;26499:570:0;;:::i;25524:142::-;;;:::i;23918:119::-;;;:::i;21320:18::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24163:270;;;;;;;;;;;;;;;;-1:-1:-1;24163:270:0;;;;;;;;;:::i;21410:22::-;;;:::i;24720:679::-;;;:::i;21347:26::-;;;:::i;27179:111::-;;;;;;;;;;;;;;;;-1:-1:-1;27179:111:0;;:::i;21382:21::-;;;:::i;21477:24::-;;;:::i;21122:30::-;;;:::i;21441:29::-;;;:::i;23495:311::-;;;:::i;26100:227::-;;;;;;;;;;;;;;;;-1:-1:-1;26100:227:0;;:::i;25779:206::-;25861:6;;-1:-1:-1;;;;;25861:6:0;25847:10;:20;25838:31;;;;;;25893:10;;:25;;25909:7;25893:14;:25::i;:::-;25880:10;:38;25960:6;;25929:48;;-1:-1:-1;;;;;25937:6:0;25929:29;;;25960:6;25968:7;25929:29;:48::i;:::-;25779:206;:::o;19709:159::-;19623:6;;-1:-1:-1;;;;;19623:6:0;19633:10;19623:20;19614:67;;;;;-1:-1:-1;;;19614:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19614:67:0;;;;;;;;;;;;;;;19826:1:::1;19810:6:::0;;19793:37:::1;::::0;-1:-1:-1;;;;;19810:6:0;;::::1;::::0;19793:37:::1;::::0;19826:1;;19793:37:::1;19858:1;19841:19:::0;;-1:-1:-1;;;;;;19841:19:0::1;::::0;;19709:159::o;23067:341::-;23123:17;;:::i;:::-;-1:-1:-1;;;;;;23143:24:0;;;;;;:10;:24;;;;;;;;;23123:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23183:12;23123:44;;-1:-1:-1;23183:27:0;;;:47;;-1:-1:-1;23214:11:0;;;;:16;;23183:47;23178:223;;;-1:-1:-1;;;;;23255:24:0;;;;;;;:10;:24;;;;;;;;23248:31;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;23248:31:0;;;23303:14;;23376:9;;;;23342:45;;-1:-1:-1;;;23342:45:0;;;;;;;;;;;23303:14;;;;23294:34;;23267:10;;23351:6;23342:32;;;;;;:45;;;;;23255:24;;23342:45;;;;;;:32;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23342:45:0;23294:95;;;-1:-1:-1;;;;;;23294:95:0;;;;;;;-1:-1:-1;;;;;23294:95:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;23294:95:0;;;;;;;-1:-1:-1;23294:95:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23178:223;23067:341;;:::o;24551:97::-;24590:4;24624:6;-1:-1:-1;;;;;24615:23:0;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24615:25:0;;-1:-1:-1;24551:97:0;:::o;19876:261::-;19623:6;;-1:-1:-1;;;;;19623:6:0;19633:10;19623:20;19614:67;;;;;-1:-1:-1;;;19614:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19614:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;19979:23:0;::::1;19970:75;;;;-1:-1:-1::0;;;19970:75:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20078:6;::::0;;20061:36:::1;::::0;-1:-1:-1;;;;;20061:36:0;;::::1;::::0;20078:6;::::1;::::0;20061:36:::1;::::0;::::1;20108:9;:21:::0;;-1:-1:-1;;;;;;20108:21:0::1;-1:-1:-1::0;;;;;20108:21:0;;;::::1;::::0;;;::::1;::::0;;19876:261::o;19482:90::-;19531:7;19558:6;-1:-1:-1;;;;;19558:6:0;19482:90;:::o;21159:31::-;;;:::o;20145:221::-;20229:9;;-1:-1:-1;;;;;20229:9:0;20215:10;:23;20206:71;;;;-1:-1:-1;;;20206:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20318:9;;;20310:6;;20293:36;;-1:-1:-1;;;;;20318:9:0;;;;20310:6;;;;20293:36;;;20349:9;;;20340:18;;-1:-1:-1;;;;;;20340:18:0;-1:-1:-1;;;;;20349:9:0;;;20340:18;;;;;;20145:221::o;22135:45::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22303:658::-;22373:4;22391:8;:6;:8::i;:::-;22412:70;-1:-1:-1;;;;;22420:5:0;22412:32;22446:10;22466:4;22473:7;22412:32;:70::i;:::-;22495:17;;:::i;:::-;-1:-1:-1;;;;;;22515:24:0;;;;;;:10;:24;;;;;;;;;22495:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22550:56;;;;;-1:-1:-1;;;22550:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;22646:216;;;;;;;;;22673:12;;22646:216;;22673:27;;22691:7;22673:16;:27::i;:::-;22646:216;;;;22717:60;22741:6;-1:-1:-1;;;;;22732:32:0;;22766:7;22732:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22732:43:0;;22717:9;;;;:13;:60::i;:::-;22646:216;;22814:12;;22796;;22646:216;;;;;22796:32;;:16;:32::i;:::-;22646:216;;22845:5;22646:216;;;;;;;-1:-1:-1;;;;;22619:24:0;;;;;:10;:24;;;;;;;:243;;;;;;;;22646:216;22619:243;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;22619:243:0;;;;;;;;;;22906:14;;22875:56;;22883:6;22875:29;;;22906:14;22922:7;22875:29;:56::i;:::-;-1:-1:-1;22949:4:0;;22303:658;-1:-1:-1;;;22303:658:0:o;26499:570::-;19623:6;;-1:-1:-1;;;;;19623:6:0;19633:10;19623:20;19614:67;;;;;-1:-1:-1;;;19614:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19614:67:0;;;;;;;;;;;;;;;26612:21:::1;26599:9;:34;;;;;;;;;26595:467;;;26656:11;:22:::0;;-1:-1:-1;;;;;;26656:22:0::1;-1:-1:-1::0;;;;;26656:22:0;::::1;;::::0;;26595:467:::1;;;26714:16;26701:9;:29;;;;;;;;;26696:366;;;26762:14;::::0;-1:-1:-1;;;;;26762:14:0::1;:30:::0;26753:80:::1;;;;-1:-1:-1::0;;;26753:80:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26848:14;:25:::0;;-1:-1:-1;;;;;;26848:25:0::1;-1:-1:-1::0;;;;;26848:25:0;::::1;;::::0;;26696:366:::1;;;26909:16;26896:9;:29;;;;;;;;;26891:171;;;26957:6;::::0;-1:-1:-1;;;;;26957:6:0::1;:20:::0;26948:70:::1;;;;-1:-1:-1::0;;;26948:70:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27033:6;:17:::0;;-1:-1:-1;;;;;27033:17:0;::::1;-1:-1:-1::0;;;;;;27033:17:0;;::::1;;::::0;;26499:570;;:::o;25524:142::-;25573:4;25598:60;25646:10;;25606:5;-1:-1:-1;;;;;25598:25:0;;25633:4;25598:42;;;;;;;;;;;;;-1:-1:-1;;;;;25598:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25598:42:0;;:46;:60::i;:::-;25591:67;;25524:142;:::o;23918:119::-;24012:10;24000:24;;;;:10;:24;;;;;:29;;;;-1:-1:-1;;23967:62:0;;24000:29;;;;23999:30;23967:62;;;23918:119::o;21320:18::-;;;;;;;;;;:::o;24163:270::-;24236:8;24231:51;;;24262:8;:6;:8::i;:::-;24292:71;-1:-1:-1;;;;;24300:6:0;24292:33;24327:10;24347:4;24354:7;24292:33;:71::i;:::-;24374:51;-1:-1:-1;;;;;24382:5:0;24374:28;24404:10;24416:7;24374:28;:51::i;21410:22::-;;;;:::o;24720:679::-;24760:14;;24778:12;-1:-1:-1;24756:636:0;;24819:6;-1:-1:-1;;;;;24810:24:0;;24836:5;:16;;;24854:5;:12;;;24810:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;24922:5:0;:12;24902:14;;:34;;:18;:34::i;:::-;24885:14;:51;24951:12;:14;;:12;:14;;;24987:11;;-1:-1:-1;;;;;24987:11:0;:25;24982:108;;25048:11;;;;;;;;;-1:-1:-1;;;;;25048:11:0;-1:-1:-1;;;;;25034:38:0;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;24982:108:0;25106:12;25121:17;:15;:17::i;:::-;25106:32;;25153:11;25176:6;-1:-1:-1;;;;;25167:35:0;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25167:37:0;;-1:-1:-1;25225:17:0;;;25221:160;;25283:1;25264:16;:20;25221:160;;;25344:21;:7;25357:6;25344:11;:21::i;:::-;25325:16;:40;24756:636;;;24720:679::o;21347:26::-;;;-1:-1:-1;;;;;21347:26:0;;:::o;27179:111::-;19623:6;;-1:-1:-1;;;;;19623:6:0;19633:10;19623:20;19614:67;;;;;-1:-1:-1;;;19614:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19614:67:0;;;;;;;;;;;;;;;27254:12:::1;:28:::0;27179:111::o;21382:21::-;;;-1:-1:-1;;;;;21382:21:0;;:::o;21477:24::-;;;;:::o;21122:30::-;;;:::o;21441:29::-;;;-1:-1:-1;;;;;21441:29:0;;:::o;23495:311::-;23534:17;;:::i;:::-;-1:-1:-1;23566:10:0;23554:24;;;;:10;:24;;;;;;;;23534:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23596:24;;;;;;23589:31;;;;;;;;;;;;-1:-1:-1;;23589:31:0;;;;;;23642:14;;23718:9;;23684:45;;-1:-1:-1;;;23684:45:0;;;;;;;;;;;-1:-1:-1;;;;;23642:14:0;;;;23633:34;;23677:4;;23693:6;23684:32;;;;;;:45;;;;;23554:24;;23684:45;;;;;;:32;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23684:45:0;23633:98;;;-1:-1:-1;;;;;;23633:98:0;;;;;;;-1:-1:-1;;;;;23633:98:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;23633:98:0;;;;;;;-1:-1:-1;23633:98:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;23784:12:0;;23742:56;;-1:-1:-1;;;;;;23750:5:0;23742:28;;-1:-1:-1;23772:10:0;;23742:28;:56::i;26100:227::-;26184:6;;-1:-1:-1;;;;;26184:6:0;26170:10;:20;26161:31;;;;;;26216:10;;:25;;26232:7;26216:14;:25::i;:::-;26203:10;:38;26287:6;;26252:67;;-1:-1:-1;;;;;26260:6:0;26252:33;;;26287:6;26303:4;26310:7;26252:33;:67::i;407:181::-;465:7;497:5;;;521:6;;;;513:46;;;;;-1:-1:-1;;;513:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;579:1;407:181;-1:-1:-1;;;407:181:0:o;15784:177::-;15894:58;;;-1:-1:-1;;;;;15894:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15894:58:0;-1:-1:-1;;;15894:58:0;;;15867:86;;15887:5;;15867:19;:86::i;:::-;15784:177;;;:::o;15969:205::-;16097:68;;;-1:-1:-1;;;;;16097:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16097:68:0;-1:-1:-1;;;16097:68:0;;;16070:96;;16090:5;;16070:19;:96::i;:::-;15969:205;;;;:::o;871:136::-;929:7;956:43;960:1;963;956:43;;;;;;;;;;;;;;;;;:3;:43::i;18089:761::-;18513:23;18539:69;18567:4;18539:69;;;;;;;;;;;;;;;;;18547:5;-1:-1:-1;;;;;18539:27:0;;;:69;;;;;:::i;:::-;18623:17;;18513:95;;-1:-1:-1;18623:21:0;18619:224;;18765:10;18754:30;;;;;;;;;;;;;;;-1:-1:-1;18754:30:0;18746:85;;;;-1:-1:-1;;;18746:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1310:192;1396:7;1432:12;1424:6;;;;1416:29;;;;-1:-1:-1;;;1416:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1468:5:0;;;1310:192::o;9843:196::-;9946:12;9978:53;10001:6;10009:4;10015:1;10018:12;9978:22;:53::i;:::-;9971:60;9843:196;-1:-1:-1;;;;9843:196:0:o;11434:979::-;11564:12;11597:18;11608:6;11597:10;:18::i;:::-;11589:60;;;;;-1:-1:-1;;;11589:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;11723:12;11737:23;11764:6;-1:-1:-1;;;;;11764:11:0;11784:8;11795:4;11764:36;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11764:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11722:78;;;;11815:7;11811:595;;;11846:10;-1:-1:-1;11839:17:0;;-1:-1:-1;11839:17:0;11811:595;11960:17;;:21;11956:439;;12223:10;12217:17;12284:15;12271:10;12267:2;12263:19;12256:44;12171:148;12359:20;;-1:-1:-1;;;12359:20:0;;;;;;;;;;;;;;;;;12366:12;;12359:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6923:422;7290:20;7329:8;;;6923:422::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o
Swarm Source
ipfs://026047705bb10bd9fcc718f60dff11865c4e608321420fe789a8195f3179ac7b
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.