ETH Price: $3,448.36 (-0.03%)
Gas: 6 Gwei

Contract

0x82E107d2b1Be4347b55FBba4a6fB99669dF3ceb1
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Enter In Pool185786662023-11-15 17:06:35250 days ago1700067995IN
0x82E107d2...69dF3ceb1
0 ETH0.0115421562.68960018
Policy Claim185712382023-11-14 16:08:35251 days ago1699978115IN
0x82E107d2...69dF3ceb1
0 ETH0.0090774758.34080383
Set Claim Assess...185712342023-11-14 16:07:47251 days ago1699978067IN
0x82E107d2...69dF3ceb1
0 ETH0.0017270256.26576131
Transfer Ownersh...185711442023-11-14 15:49:35252 days ago1699976975IN
0x82E107d2...69dF3ceb1
0 ETH0.001460950.83536464
Harvest185668742023-11-14 1:31:47252 days ago1699925507IN
0x82E107d2...69dF3ceb1
0 ETH0.0027708929.77858701
Leave From Pool ...185651592023-11-13 19:46:59252 days ago1699904819IN
0x82E107d2...69dF3ceb1
0 ETH0.0120777447.45527126
Harvest185647692023-11-13 18:28:47252 days ago1699900127IN
0x82E107d2...69dF3ceb1
0 ETH0.0052244556.14671741
Enter In Pool185486642023-11-11 12:23:11255 days ago1699705391IN
0x82E107d2...69dF3ceb1
0 ETH0.0047206220.05124519
Enter In Pool185383682023-11-10 1:49:11256 days ago1699580951IN
0x82E107d2...69dF3ceb1
0 ETH0.0068623237.2693267
Enter In Pool185383512023-11-10 1:45:47256 days ago1699580747IN
0x82E107d2...69dF3ceb1
0 ETH0.0070450938.26442223
Enter In Pool185182482023-11-07 6:19:23259 days ago1699337963IN
0x82E107d2...69dF3ceb1
0 ETH0.004882420.73843734
Harvest185156662023-11-06 21:38:35259 days ago1699306715IN
0x82E107d2...69dF3ceb1
0 ETH0.0031283533.62016735
Enter In Pool184790652023-11-01 18:32:11264 days ago1698863531IN
0x82E107d2...69dF3ceb1
0 ETH0.0103047943.77046489
Harvest184730162023-10-31 22:14:11265 days ago1698790451IN
0x82E107d2...69dF3ceb1
0 ETH0.0021638319.64443527
Leave From Pendi...184651472023-10-30 19:45:59266 days ago1698695159IN
0x82E107d2...69dF3ceb1
0 ETH0.0093567240.87407027
Enter In Pool184649822023-10-30 19:12:59266 days ago1698693179IN
0x82E107d2...69dF3ceb1
0 ETH0.0083192635.33678209
Harvest184600012023-10-30 2:28:47267 days ago1698632927IN
0x82E107d2...69dF3ceb1
0 ETH0.0010467311.24917672
Harvest184566592023-10-29 15:13:23268 days ago1698592403IN
0x82E107d2...69dF3ceb1
0 ETH0.0023112624.83891084
Harvest184530412023-10-29 3:03:35268 days ago1698548615IN
0x82E107d2...69dF3ceb1
0 ETH0.000992810.66953376
Enter In Pool184158602023-10-23 22:09:59273 days ago1698098999IN
0x82E107d2...69dF3ceb1
0 ETH0.0032885813.9692699
Harvest184103582023-10-23 3:39:35274 days ago1698032375IN
0x82E107d2...69dF3ceb1
0 ETH0.000918659.872744
Enter In Pool184009232023-10-21 19:59:11275 days ago1697918351IN
0x82E107d2...69dF3ceb1
0 ETH0.0019291210.47572738
Harvest184009142023-10-21 19:57:23275 days ago1697918243IN
0x82E107d2...69dF3ceb1
0 ETH0.000850249.13752815
Enter In Pool183813422023-10-19 2:15:35278 days ago1697681735IN
0x82E107d2...69dF3ceb1
0 ETH0.001059665.75503412
Harvest183813232023-10-19 2:11:35278 days ago1697681495IN
0x82E107d2...69dF3ceb1
0 ETH0.000586066.29835442
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0x1342b3dA...f959B362a
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
SingleSidedInsurancePool

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
Yes with 800 runs

Other Settings:
default evmVersion, GNU GPLv3 license
File 1 of 15 : SingleSidedInsurancePool.sol
// SPDX-License-Identifier: GPL-3.0

pragma solidity 0.8.0;

import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/security/ReentrancyGuard.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "./interfaces/ICapitalAgent.sol";
import "./interfaces/IExchangeAgent.sol";
import "./interfaces/IMigration.sol";
import "./interfaces/IRewarderFactory.sol";
import "./interfaces/IRiskPoolFactory.sol";
import "./interfaces/ISingleSidedInsurancePool.sol";
import "./interfaces/IRewarder.sol";
import "./interfaces/IRiskPool.sol";
import "./interfaces/ISyntheticSSIPFactory.sol";
import "./libraries/TransferHelper.sol";

contract SingleSidedInsurancePool is ISingleSidedInsurancePool, ReentrancyGuard, Ownable {
    address public claimAssessor;
    address private exchangeAgent;
    address public migrateTo;
    address public capitalAgent;
    address public syntheticSSIP;

    uint256 public LOCK_TIME = 10 days;
    uint256 public constant ACC_UNO_PRECISION = 1e18;
    uint256 public STAKING_START_TIME;

    address public rewarder;
    address public override riskPool;
    struct PoolInfo {
        uint128 lastRewardBlock;
        uint128 accUnoPerShare;
        uint256 unoMultiplierPerBlock;
    }

    struct UserInfo {
        uint256 lastWithdrawTime;
        uint256 rewardDebt;
        uint256 amount;
    }

    mapping(address => UserInfo) public userInfo;

    PoolInfo public poolInfo;

    event RiskPoolCreated(address indexed _SSIP, address indexed _pool);
    event StakedInPool(address indexed _staker, address indexed _pool, uint256 _amount);
    event LeftPool(address indexed _staker, address indexed _pool, uint256 _requestAmount);
    event LogUpdatePool(uint128 _lastRewardBlock, uint256 _lpSupply, uint256 _accUnoPerShare);
    event Harvest(address indexed _user, address indexed _receiver, uint256 _amount);
    event LogSetExchangeAgent(address indexed _exchangeAgent);
    event LogLeaveFromPendingSSIP(
        address indexed _user,
        address indexed _riskPool,
        uint256 _withdrawLpAmount,
        uint256 _withdrawUnoAmount
    );
    event PolicyClaim(address indexed _user, uint256 _claimAmount);
    event LogLpTransferInSSIP(address indexed _from, address indexed _to, uint256 _amount);
    event LogCreateRewarder(address indexed _SSIP, address indexed _rewarder, address _currency);
    event LogCreateSyntheticSSIP(address indexed _SSIP, address indexed _syntheticSSIP, address indexed _lpToken);
    event LogCancelWithdrawRequest(address indexed _user, uint256 _cancelAmount, uint256 _cancelAmountInUno);
    event LogMigrate(address indexed _user, address indexed _migrateTo, uint256 _migratedAmount);
    event LogSetCapitalAgent(address indexed _SSIP, address indexed _capitalAgent);
    event LogSetRewardMultiplier(address indexed _SSIP, uint256 _rewardPerBlock);
    event LogSetClaimAssessor(address indexed _SSIP, address indexed _claimAssessor);
    event LogSetMigrateTo(address indexed _SSIP, address indexed _migrateTo);
    event LogSetMinLPCapital(address indexed _SSIP, uint256 _minLPCapital);
    event LogSetLockTime(address indexed _SSIP, uint256 _lockTime);
    event LogSetStakingStartTime(address indexed _SSIP, uint256 _startTime);

    constructor(
        address _claimAssessor,
        address _exchangeAgent,
        address _capitalAgent,
        address _multiSigWallet
    ) {
        require(_claimAssessor != address(0), "UnoRe: zero claimAssessor address");
        require(_exchangeAgent != address(0), "UnoRe: zero exchangeAgent address");
        require(_capitalAgent != address(0), "UnoRe: zero capitalAgent address");
        require(_multiSigWallet != address(0), "UnoRe: zero multisigwallet address");
        exchangeAgent = _exchangeAgent;
        claimAssessor = _claimAssessor;
        capitalAgent = _capitalAgent;
        transferOwnership(_multiSigWallet);
    }

    modifier onlyClaimAssessor() {
        require(msg.sender == claimAssessor, "UnoRe: Forbidden");
        _;
    }

    modifier isStartTime() {
        require(block.timestamp >= STAKING_START_TIME, "UnoRe: not available time");
        _;
    }

    function setExchangeAgent(address _exchangeAgent) external onlyOwner {
        require(_exchangeAgent != address(0), "UnoRe: zero address");
        exchangeAgent = _exchangeAgent;
        emit LogSetExchangeAgent(_exchangeAgent);
    }

    function setCapitalAgent(address _capitalAgent) external onlyOwner {
        require(_capitalAgent != address(0), "UnoRe: zero address");
        capitalAgent = _capitalAgent;
        emit LogSetCapitalAgent(address(this), _capitalAgent);
    }

    function setRewardMultiplier(uint256 _rewardMultiplier) external onlyOwner {
        require(_rewardMultiplier > 0, "UnoRe: zero value");
        poolInfo.unoMultiplierPerBlock = _rewardMultiplier;
        emit LogSetRewardMultiplier(address(this), _rewardMultiplier);
    }

    function setClaimAssessor(address _claimAssessor) external onlyOwner {
        require(_claimAssessor != address(0), "UnoRe: zero address");
        claimAssessor = _claimAssessor;
        emit LogSetClaimAssessor(address(this), _claimAssessor);
    }

    function setMigrateTo(address _migrateTo) external onlyOwner {
        require(_migrateTo != address(0), "UnoRe: zero address");
        migrateTo = _migrateTo;
        emit LogSetMigrateTo(address(this), _migrateTo);
    }

    function setMinLPCapital(uint256 _minLPCapital) external onlyOwner {
        require(_minLPCapital > 0, "UnoRe: not allow zero value");
        IRiskPool(riskPool).setMinLPCapital(_minLPCapital);
        emit LogSetMinLPCapital(address(this), _minLPCapital);
    }

    function setLockTime(uint256 _lockTime) external onlyOwner {
        require(_lockTime > 0, "UnoRe: not allow zero lock time");
        LOCK_TIME = _lockTime;
        emit LogSetLockTime(address(this), _lockTime);
    }

    function setStakingStartTime(uint256 _startTime) external onlyOwner {
        STAKING_START_TIME = _startTime + block.timestamp;
        emit LogSetStakingStartTime(address(this), STAKING_START_TIME);
    }

    /**
     * @dev create Risk pool with UNO from SSIP owner
     */
    function createRiskPool(
        string calldata _name,
        string calldata _symbol,
        address _factory,
        address _currency,
        uint256 _rewardMultiplier,
        uint256 _SCR
    ) external onlyOwner nonReentrant {
        require(riskPool == address(0), "UnoRe: risk pool created already");
        require(_factory != address(0), "UnoRe: zero factory address");
        riskPool = IRiskPoolFactory(_factory).newRiskPool(_name, _symbol, address(this), _currency);
        poolInfo.lastRewardBlock = uint128(block.number);
        poolInfo.accUnoPerShare = 0;
        poolInfo.unoMultiplierPerBlock = _rewardMultiplier;
        ICapitalAgent(capitalAgent).addPool(address(this), _currency, _SCR);
        emit RiskPoolCreated(address(this), riskPool);
    }

    function createRewarder(
        address _operator,
        address _factory,
        address _currency
    ) external onlyOwner nonReentrant {
        require(_factory != address(0), "UnoRe: rewarder factory no exist");
        require(_operator != address(0), "UnoRe: zero operator address");
        rewarder = IRewarderFactory(_factory).newRewarder(_operator, _currency, address(this));
        emit LogCreateRewarder(address(this), rewarder, _currency);
    }

    function createSyntheticSSIP(address _multiSigWallet, address _factory) external onlyOwner nonReentrant {
        require(_multiSigWallet != address(0), "UnoRe: zero owner address");
        require(_factory != address(0), "UnoRe:zero factory address");
        require(riskPool != address(0), "UnoRe:zero LP token address");
        syntheticSSIP = ISyntheticSSIPFactory(_factory).newSyntheticSSIP(_multiSigWallet, riskPool);
        emit LogCreateSyntheticSSIP(address(this), syntheticSSIP, riskPool);
    }

    function migrate() external nonReentrant {
        require(migrateTo != address(0), "UnoRe: zero address");
        _harvest(msg.sender);
        uint256 lpPrice = IRiskPool(riskPool).lpPriceUno();
        uint256 amount = userInfo[msg.sender].amount;
        bool isUnLocked = block.timestamp - userInfo[msg.sender].lastWithdrawTime > LOCK_TIME;
        uint256 migratedAmount = IRiskPool(riskPool).migrateLP(msg.sender, migrateTo, isUnLocked);
        ICapitalAgent(capitalAgent).SSIPPolicyCaim((amount * lpPrice) / 1e18, 0, false);
        IMigration(migrateTo).onMigration(msg.sender, amount, "");
        userInfo[msg.sender].amount = 0;
        userInfo[msg.sender].rewardDebt = 0;
        emit LogMigrate(msg.sender, migrateTo, migratedAmount);
    }

    function pendingUno(address _to) external view returns (uint256 pending) {
        uint256 tokenSupply = IERC20(riskPool).totalSupply();
        uint128 accUnoPerShare = poolInfo.accUnoPerShare;
        if (block.number > poolInfo.lastRewardBlock && tokenSupply != 0) {
            uint256 blocks = block.number - uint256(poolInfo.lastRewardBlock);
            uint256 unoReward = blocks * poolInfo.unoMultiplierPerBlock;
            accUnoPerShare = accUnoPerShare + uint128((unoReward * ACC_UNO_PRECISION) / tokenSupply);
        }
        uint256 userBalance = userInfo[_to].amount;
        pending = (userBalance * uint256(accUnoPerShare)) / ACC_UNO_PRECISION - userInfo[_to].rewardDebt;
    }

    function updatePool() public override {
        if (block.number > poolInfo.lastRewardBlock) {
            uint256 tokenSupply = IERC20(riskPool).totalSupply();
            if (tokenSupply > 0) {
                uint256 blocks = block.number - uint256(poolInfo.lastRewardBlock);
                uint256 unoReward = blocks * poolInfo.unoMultiplierPerBlock;
                poolInfo.accUnoPerShare = poolInfo.accUnoPerShare + uint128(((unoReward * ACC_UNO_PRECISION) / tokenSupply));
            }
            poolInfo.lastRewardBlock = uint128(block.number);
            emit LogUpdatePool(poolInfo.lastRewardBlock, tokenSupply, poolInfo.accUnoPerShare);
        }
    }

    function enterInPool(uint256 _amount) external payable override isStartTime nonReentrant {
        require(_amount != 0, "UnoRe: ZERO Value");
        updatePool();
        address token = IRiskPool(riskPool).currency();
        uint256 lpPriceUno = IRiskPool(riskPool).lpPriceUno();
        if (token == address(0)) {
            require(msg.value >= _amount, "UnoRe: insufficient paid");
            if (msg.value > _amount) {
                TransferHelper.safeTransferETH(msg.sender, msg.value - _amount);
            }
            TransferHelper.safeTransferETH(riskPool, _amount);
        } else {
            TransferHelper.safeTransferFrom(token, msg.sender, riskPool, _amount);
        }
        IRiskPool(riskPool).enter(msg.sender, _amount);
        userInfo[msg.sender].rewardDebt =
            userInfo[msg.sender].rewardDebt +
            ((_amount * 1e18 * uint256(poolInfo.accUnoPerShare)) / lpPriceUno) /
            ACC_UNO_PRECISION;
        userInfo[msg.sender].amount = userInfo[msg.sender].amount + ((_amount * 1e18) / lpPriceUno);
        ICapitalAgent(capitalAgent).SSIPStaking(_amount);
        emit StakedInPool(msg.sender, riskPool, _amount);
    }

    /**
     * @dev WR will be in pending for 10 days at least
     */
    function leaveFromPoolInPending(uint256 _amount) external override isStartTime nonReentrant {
        _harvest(msg.sender);
        require(ICapitalAgent(capitalAgent).checkCapitalByMCR(address(this), _amount), "UnoRe: minimum capital underflow");
        // Withdraw desired amount from pool
        uint256 amount = userInfo[msg.sender].amount;
        uint256 lpPriceUno = IRiskPool(riskPool).lpPriceUno();
        (uint256 pendingAmount, , ) = IRiskPool(riskPool).getWithdrawRequest(msg.sender);
        require(amount - pendingAmount >= _amount * 1e18 / lpPriceUno, "UnoRe: withdraw amount overflow");
        IRiskPool(riskPool).leaveFromPoolInPending(msg.sender, _amount);

        userInfo[msg.sender].lastWithdrawTime = block.timestamp;
        emit LeftPool(msg.sender, riskPool, _amount);
    }

    /**
     * @dev user can submit claim again and receive his funds into his wallet after 10 days since last WR.
     */
    function leaveFromPending() external override isStartTime nonReentrant {
        require(block.timestamp - userInfo[msg.sender].lastWithdrawTime >= LOCK_TIME, "UnoRe: Locked time");
        _harvest(msg.sender);
        uint256 amount = userInfo[msg.sender].amount;
        (uint256 pendingAmount, , uint256 pendingAmountInUNO) = IRiskPool(riskPool).getWithdrawRequest(msg.sender);
        ICapitalAgent(capitalAgent).SSIPWithdraw(pendingAmountInUNO);

        uint256 accumulatedUno = (amount * uint256(poolInfo.accUnoPerShare)) / ACC_UNO_PRECISION;
        userInfo[msg.sender].rewardDebt =
            accumulatedUno -
            ((pendingAmount * uint256(poolInfo.accUnoPerShare)) / ACC_UNO_PRECISION);
        (uint256 withdrawAmount, uint256 withdrawAmountInUNO) = IRiskPool(riskPool).leaveFromPending(msg.sender);
        userInfo[msg.sender].amount = amount - withdrawAmount;
        emit LogLeaveFromPendingSSIP(msg.sender, riskPool, withdrawAmount, withdrawAmountInUNO);
    }

    function lpTransfer(
        address _from,
        address _to,
        uint256 _amount
    ) external override nonReentrant {
        require(msg.sender == address(riskPool), "UnoRe: not allow others transfer");
        if (_from != syntheticSSIP && _to != syntheticSSIP) {
            _harvest(_from);
            uint256 amount = userInfo[_from].amount;
            (uint256 pendingAmount, , ) = IRiskPool(riskPool).getWithdrawRequest(_from);
            require(amount - pendingAmount >= _amount, "UnoRe: balance overflow");
            uint256 accumulatedUno = (amount * uint256(poolInfo.accUnoPerShare)) / ACC_UNO_PRECISION;
            userInfo[_from].rewardDebt = accumulatedUno - ((_amount * uint256(poolInfo.accUnoPerShare)) / ACC_UNO_PRECISION);
            userInfo[_from].amount = amount - _amount;

            userInfo[_to].rewardDebt =
                userInfo[_to].rewardDebt +
                ((_amount * uint256(poolInfo.accUnoPerShare)) / ACC_UNO_PRECISION);
            userInfo[_to].amount = userInfo[_to].amount + _amount;

            emit LogLpTransferInSSIP(_from, _to, _amount);
        }
    }

    function harvest(address _to) external override isStartTime nonReentrant {
        _harvest(_to);
    }

    function _harvest(address _to) private {
        updatePool();
        uint256 amount = userInfo[_to].amount;
        uint256 accumulatedUno = (amount * uint256(poolInfo.accUnoPerShare)) / ACC_UNO_PRECISION;
        uint256 _pendingUno = accumulatedUno - userInfo[_to].rewardDebt;

        // Effects
        userInfo[msg.sender].rewardDebt = accumulatedUno;
        uint256 rewardAmount = 0;

        if (rewarder != address(0) && _pendingUno != 0) {
            rewardAmount = IRewarder(rewarder).onReward(_to, _pendingUno);
        }

        emit Harvest(msg.sender, _to, rewardAmount);
    }

    function cancelWithdrawRequest() external nonReentrant {
        (uint256 cancelAmount, uint256 cancelAmountInUno) = IRiskPool(riskPool).cancelWithrawRequest(msg.sender);
        emit LogCancelWithdrawRequest(msg.sender, cancelAmount, cancelAmountInUno);
    }

    function policyClaim(
        address _to,
        uint256 _amount,
        uint256 _policyId,
        bool _isFinished
    ) external onlyClaimAssessor isStartTime nonReentrant {
        require(_to != address(0), "UnoRe: zero address");
        require(_amount > 0, "UnoRe: zero amount");
        uint256 realClaimAmount = IRiskPool(riskPool).policyClaim(_to, _amount);
        ICapitalAgent(capitalAgent).SSIPPolicyCaim(realClaimAmount, _policyId, _isFinished);
        emit PolicyClaim(_to, realClaimAmount);
    }

    function getStakedAmountPerUser(address _to) external view returns (uint256 unoAmount, uint256 lpAmount) {
        lpAmount = userInfo[_to].amount;
        uint256 lpPriceUno = IRiskPool(riskPool).lpPriceUno();
        unoAmount = (lpAmount * lpPriceUno) / 1e18;
    }

    /**
     * @dev get withdraw request amount in pending per user in UNO
     */
    function getWithdrawRequestPerUser(address _user)
        external
        view
        returns (
            uint256 pendingAmount,
            uint256 pendingAmountInUno,
            uint256 originUnoAmount,
            uint256 requestTime
        )
    {
        uint256 lpPriceUno = IRiskPool(riskPool).lpPriceUno();
        (pendingAmount, requestTime, originUnoAmount) = IRiskPool(riskPool).getWithdrawRequest(_user);
        pendingAmountInUno = (pendingAmount * lpPriceUno) / 1e18;
    }

    /**
     * @dev get total withdraw request amount in pending for the risk pool in UNO
     */
    function getTotalWithdrawPendingAmount() external view returns (uint256) {
        return IRiskPool(riskPool).getTotalWithdrawRequestAmount();
    }
}

File 2 of 15 : Ownable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "../utils/Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _setOwner(_msgSender());
    }

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the 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 virtual onlyOwner {
        _setOwner(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 virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 3 of 15 : ReentrancyGuard.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and make it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

File 4 of 15 : IERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.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);
}

File 5 of 15 : Context.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

File 6 of 15 : ICapitalAgent.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.0;

interface ICapitalAgent {
    function addPool(
        address _ssip,
        address _currency,
        uint256 _scr
    ) external;

    function setPolicy(address _policy) external;

    function SSIPWithdraw(uint256 _withdrawAmount) external;

    function SSIPStaking(uint256 _stakingAmount) external;

    function SSIPPolicyCaim(
        uint256 _withdrawAmount,
        uint256 _policyId,
        bool _isFinished
    ) external;

    function checkCapitalByMCR(address _pool, uint256 _withdrawAmount) external view returns (bool);

    function checkCoverageByMLR(uint256 _coverageAmount) external view returns (bool);

    function policySale(uint256 _coverageAmount) external;

    function updatePolicyStatus(uint256 _policyId) external;
}

File 7 of 15 : IExchangeAgent.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.0;

interface IExchangeAgent {
    function USDC_TOKEN() external view returns (address);

    function getTokenAmountForUSDC(address _token, uint256 _usdtAmount) external view returns (uint256);

    function getETHAmountForUSDC(uint256 _usdtAmount) external view returns (uint256);

    function getETHAmountForToken(address _token, uint256 _tokenAmount) external view returns (uint256);

    function getTokenAmountForETH(address _token, uint256 _ethAmount) external view returns (uint256);

    function getNeededTokenAmount(
        address _token0,
        address _token1,
        uint256 _token0Amount
    ) external view returns (uint256);

    function convertForToken(
        address _token0,
        address _token1,
        uint256 _token0Amount
    ) external returns (uint256);

    function convertForETH(address _token, uint256 _convertAmount) external returns (uint256);
}

File 8 of 15 : IMigration.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.0;

interface IMigration {
    function onMigration(
        address who_,
        uint256 amount_,
        bytes memory data_
    ) external;
}

File 9 of 15 : IRewarder.sol
// SPDX-License-Identifier: MIT

pragma solidity 0.8.0;

interface IRewarder {
    function currency() external view returns (address);

    function onReward(address to, uint256 unoAmount) external payable returns (uint256);
}

File 10 of 15 : IRewarderFactory.sol
// SPDX-License-Identifier: GPL-3.0
pragma solidity 0.8.0;

interface IRewarderFactory {
    function newRewarder(
        address _operator,
        address _currency,
        address _pool
    ) external returns (address);
}

File 11 of 15 : IRiskPool.sol
// SPDX-License-Identifier: GPL-3.0
pragma solidity 0.8.0;

interface IRiskPool {
    function enter(address _from, uint256 _amount) external;

    function leaveFromPoolInPending(address _to, uint256 _amount) external;

    function leaveFromPending(address _to) external returns (uint256, uint256);

    function cancelWithrawRequest(address _to) external returns (uint256, uint256);

    function policyClaim(address _to, uint256 _amount) external returns (uint256 realClaimAmount);

    function migrateLP(
        address _to,
        address _migrateTo,
        bool _isUnLocked
    ) external returns (uint256);

    function setMinLPCapital(uint256 _minLPCapital) external;

    function currency() external view returns (address);

    function getTotalWithdrawRequestAmount() external view returns (uint256);

    function getWithdrawRequest(address _to)
        external
        view
        returns (
            uint256,
            uint256,
            uint256
        );

    function lpPriceUno() external view returns (uint256);
}

File 12 of 15 : IRiskPoolFactory.sol
// SPDX-License-Identifier: GPL-3.0
pragma solidity 0.8.0;

interface IRiskPoolFactory {
    function newRiskPool(
        string calldata _name,
        string calldata _symbol,
        address _pool,
        address _currency
    ) external returns (address);
}

File 13 of 15 : ISingleSidedInsurancePool.sol
// SPDX-License-Identifier: GPL-3.0
pragma solidity 0.8.0;

interface ISingleSidedInsurancePool {
    function updatePool() external;

    function enterInPool(uint256 _amount) external payable;

    function leaveFromPoolInPending(uint256 _amount) external;

    function leaveFromPending() external;

    function harvest(address _to) external;

    function lpTransfer(
        address _from,
        address _to,
        uint256 _amount
    ) external;

    function riskPool() external view returns (address);
}

File 14 of 15 : ISyntheticSSIPFactory.sol
// SPDX-License-Identifier: GPL-3.0
pragma solidity 0.8.0;

interface ISyntheticSSIPFactory {
    function newSyntheticSSIP(address _multiSigWallet, address _lpToken) external returns (address);
}

File 15 of 15 : TransferHelper.sol
// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity 0.8.0;

// from Uniswap TransferHelper library
library TransferHelper {
    function safeApprove(
        address token,
        address to,
        uint256 value
    ) internal {
        // bytes4(keccak256(bytes('approve(address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), "TransferHelper::safeApprove: approve failed");
    }

    function safeTransfer(
        address token,
        address to,
        uint256 value
    ) internal {
        // bytes4(keccak256(bytes('transfer(address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), "TransferHelper::safeTransfer: transfer failed");
    }

    function safeTransferFrom(
        address token,
        address from,
        address to,
        uint256 value
    ) internal {
        // bytes4(keccak256(bytes('transferFrom(address,address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), "TransferHelper::transferFrom: transferFrom failed");
    }

    function safeTransferETH(address to, uint256 value) internal {
        (bool success, ) = to.call{value: value}(new bytes(0));
        require(success, "TransferHelper::safeTransferETH: ETH transfer failed");
    }
}

Settings
{
  "evmVersion": "istanbul",
  "libraries": {},
  "metadata": {
    "bytecodeHash": "ipfs",
    "useLiteralContent": true
  },
  "optimizer": {
    "enabled": true,
    "runs": 800
  },
  "remappings": [],
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_claimAssessor","type":"address"},{"internalType":"address","name":"_exchangeAgent","type":"address"},{"internalType":"address","name":"_capitalAgent","type":"address"},{"internalType":"address","name":"_multiSigWallet","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_user","type":"address"},{"indexed":true,"internalType":"address","name":"_receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"Harvest","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_staker","type":"address"},{"indexed":true,"internalType":"address","name":"_pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"_requestAmount","type":"uint256"}],"name":"LeftPool","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_user","type":"address"},{"indexed":false,"internalType":"uint256","name":"_cancelAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_cancelAmountInUno","type":"uint256"}],"name":"LogCancelWithdrawRequest","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_SSIP","type":"address"},{"indexed":true,"internalType":"address","name":"_rewarder","type":"address"},{"indexed":false,"internalType":"address","name":"_currency","type":"address"}],"name":"LogCreateRewarder","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_SSIP","type":"address"},{"indexed":true,"internalType":"address","name":"_syntheticSSIP","type":"address"},{"indexed":true,"internalType":"address","name":"_lpToken","type":"address"}],"name":"LogCreateSyntheticSSIP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_user","type":"address"},{"indexed":true,"internalType":"address","name":"_riskPool","type":"address"},{"indexed":false,"internalType":"uint256","name":"_withdrawLpAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_withdrawUnoAmount","type":"uint256"}],"name":"LogLeaveFromPendingSSIP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"LogLpTransferInSSIP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_user","type":"address"},{"indexed":true,"internalType":"address","name":"_migrateTo","type":"address"},{"indexed":false,"internalType":"uint256","name":"_migratedAmount","type":"uint256"}],"name":"LogMigrate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_SSIP","type":"address"},{"indexed":true,"internalType":"address","name":"_capitalAgent","type":"address"}],"name":"LogSetCapitalAgent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_SSIP","type":"address"},{"indexed":true,"internalType":"address","name":"_claimAssessor","type":"address"}],"name":"LogSetClaimAssessor","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_exchangeAgent","type":"address"}],"name":"LogSetExchangeAgent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_SSIP","type":"address"},{"indexed":false,"internalType":"uint256","name":"_lockTime","type":"uint256"}],"name":"LogSetLockTime","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_SSIP","type":"address"},{"indexed":true,"internalType":"address","name":"_migrateTo","type":"address"}],"name":"LogSetMigrateTo","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_SSIP","type":"address"},{"indexed":false,"internalType":"uint256","name":"_minLPCapital","type":"uint256"}],"name":"LogSetMinLPCapital","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_SSIP","type":"address"},{"indexed":false,"internalType":"uint256","name":"_rewardPerBlock","type":"uint256"}],"name":"LogSetRewardMultiplier","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_SSIP","type":"address"},{"indexed":false,"internalType":"uint256","name":"_startTime","type":"uint256"}],"name":"LogSetStakingStartTime","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint128","name":"_lastRewardBlock","type":"uint128"},{"indexed":false,"internalType":"uint256","name":"_lpSupply","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_accUnoPerShare","type":"uint256"}],"name":"LogUpdatePool","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_user","type":"address"},{"indexed":false,"internalType":"uint256","name":"_claimAmount","type":"uint256"}],"name":"PolicyClaim","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_SSIP","type":"address"},{"indexed":true,"internalType":"address","name":"_pool","type":"address"}],"name":"RiskPoolCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_staker","type":"address"},{"indexed":true,"internalType":"address","name":"_pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"StakedInPool","type":"event"},{"inputs":[],"name":"ACC_UNO_PRECISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LOCK_TIME","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STAKING_START_TIME","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cancelWithdrawRequest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"capitalAgent","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimAssessor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_currency","type":"address"}],"name":"createRewarder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_currency","type":"address"},{"internalType":"uint256","name":"_rewardMultiplier","type":"uint256"},{"internalType":"uint256","name":"_SCR","type":"uint256"}],"name":"createRiskPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_multiSigWallet","type":"address"},{"internalType":"address","name":"_factory","type":"address"}],"name":"createSyntheticSSIP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"enterInPool","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"getStakedAmountPerUser","outputs":[{"internalType":"uint256","name":"unoAmount","type":"uint256"},{"internalType":"uint256","name":"lpAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalWithdrawPendingAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getWithdrawRequestPerUser","outputs":[{"internalType":"uint256","name":"pendingAmount","type":"uint256"},{"internalType":"uint256","name":"pendingAmountInUno","type":"uint256"},{"internalType":"uint256","name":"originUnoAmount","type":"uint256"},{"internalType":"uint256","name":"requestTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"harvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"leaveFromPending","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"leaveFromPoolInPending","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"lpTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"migrate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"migrateTo","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"pendingUno","outputs":[{"internalType":"uint256","name":"pending","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_policyId","type":"uint256"},{"internalType":"bool","name":"_isFinished","type":"bool"}],"name":"policyClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"poolInfo","outputs":[{"internalType":"uint128","name":"lastRewardBlock","type":"uint128"},{"internalType":"uint128","name":"accUnoPerShare","type":"uint128"},{"internalType":"uint256","name":"unoMultiplierPerBlock","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewarder","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"riskPool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_capitalAgent","type":"address"}],"name":"setCapitalAgent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_claimAssessor","type":"address"}],"name":"setClaimAssessor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_exchangeAgent","type":"address"}],"name":"setExchangeAgent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_lockTime","type":"uint256"}],"name":"setLockTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_migrateTo","type":"address"}],"name":"setMigrateTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minLPCapital","type":"uint256"}],"name":"setMinLPCapital","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rewardMultiplier","type":"uint256"}],"name":"setRewardMultiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_startTime","type":"uint256"}],"name":"setStakingStartTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"syntheticSSIP","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"updatePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"lastWithdrawTime","type":"uint256"},{"internalType":"uint256","name":"rewardDebt","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"view","type":"function"}]

Deployed Bytecode

0x6080604052600436106102855760003560e01c806393b6b86c11610153578063c4e5dacf116100cb578063e08c5de11161007f578063e3161ddd11610064578063e3161ddd1461069b578063e3824a38146106b0578063f2fde38b146106c357610285565b8063e08c5de114610666578063e19e71681461068657610285565b8063cd87c83c116100b0578063cd87c83c14610627578063dba6f9621461063c578063dcc3e06e1461065157610285565b8063c4e5dacf146105fd578063c6e899151461061257610285565b8063af16d6e011610122578063bc8f882811610107578063bc8f8828146105a8578063c2eb8eb9146105bd578063c3dcfcf1146105dd57610285565b8063af16d6e01461055a578063ba6194571461057a57610285565b806393b6b86c146104f057806398c6e76014610510578063a3bdd63214610525578063ae04d45d1461053a57610285565b80635a2f3d09116102015780638395206c116101b55780638da5cb5b1161019a5780638da5cb5b146104965780638fd3ab80146104ab5780639336f406146104c057610285565b80638395206c1461046157806389919b711461048157610285565b8063715018a6116101e6578063715018a61461040c578063736ec05c14610421578063780d115e1461044157610285565b80635a2f3d09146103c85780635d90bad9146103ec57610285565b806318a00d8e116102585780631b600ca21161023d5780631b600ca214610364578063413d9c3a1461038457806342198160146103a657610285565b806318a00d8e1461030c5780631959a0021461032c57610285565b80630bd075a11461028a5780630e5c011e146102ac5780630e9ae420146102cc578063157f71ed146102ec575b600080fd5b34801561029657600080fd5b506102aa6102a53660046131ae565b6106e3565b005b3480156102b857600080fd5b506102aa6102c7366004612fa4565b61078d565b3480156102d857600080fd5b506102aa6102e7366004613065565b6107e8565b3480156102f857600080fd5b506102aa610307366004612fa4565b610ae0565b34801561031857600080fd5b506102aa610327366004612fa4565b610b91565b34801561033857600080fd5b5061034c610347366004612fa4565b610c40565b60405161035b93929190613a2d565b60405180910390f35b34801561037057600080fd5b506102aa61037f366004612fe3565b610c61565b34801561039057600080fd5b50610399610e1d565b60405161035b91906139fe565b3480156103b257600080fd5b506103bb610e23565b60405161035b9190613291565b3480156103d457600080fd5b506103dd610e32565b60405161035b939291906139b7565b3480156103f857600080fd5b506102aa6104073660046131ae565b610e50565b34801561041857600080fd5b506102aa610ecf565b34801561042d57600080fd5b506102aa61043c366004612fa4565b610f1a565b34801561044d57600080fd5b506102aa61045c3660046130a5565b610fcb565b34801561046d57600080fd5b506102aa61047c3660046131ae565b6111be565b34801561048d57600080fd5b506103996114d9565b3480156104a257600080fd5b506103bb6114e5565b3480156104b757600080fd5b506102aa6114f4565b3480156104cc57600080fd5b506104e06104db366004612fa4565b6117c9565b60405161035b9493929190613a43565b3480156104fc57600080fd5b506102aa61050b3660046131ae565b611907565b34801561051c57600080fd5b506103bb611a01565b34801561053157600080fd5b50610399611a10565b34801561054657600080fd5b506102aa6105553660046131ae565b611a92565b34801561056657600080fd5b506102aa61057536600461301b565b611b28565b34801561058657600080fd5b5061059a610595366004612fa4565b611cc2565b60405161035b929190613a1f565b3480156105b457600080fd5b506102aa611d7d565b3480156105c957600080fd5b506102aa6105d8366004612fa4565b61208c565b3480156105e957600080fd5b506102aa6105f836600461310a565b61213d565b34801561060957600080fd5b506103bb61236c565b34801561061e57600080fd5b506103bb61237b565b34801561063357600080fd5b506103bb61238a565b34801561064857600080fd5b50610399612399565b34801561065d57600080fd5b506103bb61239f565b34801561067257600080fd5b50610399610681366004612fa4565b6123ae565b34801561069257600080fd5b506102aa612518565b3480156106a757600080fd5b506102aa612613565b6102aa6106be3660046131ae565b6127a8565b3480156106cf57600080fd5b506102aa6106de366004612fa4565b612b6d565b6106eb612bde565b6001600160a01b03166106fc6114e5565b6001600160a01b03161461072b5760405162461bcd60e51b8152600401610722906137ce565b60405180910390fd5b6000811161074b5760405162461bcd60e51b815260040161072290613618565b600d81905560405130907fbd1dd13c6a5b4a28ebd27fdcb8fdd01aba6bbb9f67599306248f465bcdf9817f906107829084906139fe565b60405180910390a250565b6008544210156107af5760405162461bcd60e51b8152600401610722906138dd565b600260005414156107d25760405162461bcd60e51b815260040161072290613914565b60026000556107e081612be2565b506001600055565b6002600054141561080b5760405162461bcd60e51b815260040161072290613914565b6002600055600a546001600160a01b0316331461083a5760405162461bcd60e51b815260040161072290613982565b6006546001600160a01b0384811691161480159061086657506006546001600160a01b03838116911614155b15610ad65761087483612be2565b6001600160a01b038084166000908152600b602052604080822060020154600a549151631665744b60e11b815290939190911690632ccae896906108bc908890600401613291565b60606040518083038186803b1580156108d457600080fd5b505afa1580156108e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090c9190613201565b5050905082818361091d9190613ae0565b101561093b5760405162461bcd60e51b815260040161072290613575565b600c54600090670de0b6b3a76400009061096590600160801b90046001600160801b031685613ac1565b61096f9190613aa1565b600c54909150670de0b6b3a76400009061099990600160801b90046001600160801b031686613ac1565b6109a39190613aa1565b6109ad9082613ae0565b6001600160a01b0387166000908152600b60205260409020600101556109d38484613ae0565b6001600160a01b0387166000908152600b6020526040902060020155600c54670de0b6b3a764000090610a1690600160801b90046001600160801b031686613ac1565b610a209190613aa1565b6001600160a01b0386166000908152600b6020526040902060010154610a469190613a89565b6001600160a01b0386166000908152600b60205260409020600181019190915560020154610a75908590613a89565b6001600160a01b038087166000818152600b602052604090819020600201939093559151908816907fabc254a3e8b16a8605ce22e693a6e493e375434011c1a7ff082d09e2a84ad12190610aca9088906139fe565b60405180910390a35050505b5050600160005550565b610ae8612bde565b6001600160a01b0316610af96114e5565b6001600160a01b031614610b1f5760405162461bcd60e51b8152600401610722906137ce565b6001600160a01b038116610b455760405162461bcd60e51b815260040161072290613416565b600280546001600160a01b0319166001600160a01b03831690811790915560405130907f073f9d6137d7fa6d64859eb388090b7e90a768c36e707e4404e1fa6485b5c91e90600090a350565b610b99612bde565b6001600160a01b0316610baa6114e5565b6001600160a01b031614610bd05760405162461bcd60e51b8152600401610722906137ce565b6001600160a01b038116610bf65760405162461bcd60e51b815260040161072290613416565b600380546001600160a01b0319166001600160a01b0383169081179091556040517fbdca3ec80f8567aeaf30c6168374c798baf11902e9b21c2b8ba3186ffd13012290600090a250565b600b6020526000908152604090208054600182015460029092015490919083565b610c69612bde565b6001600160a01b0316610c7a6114e5565b6001600160a01b031614610ca05760405162461bcd60e51b8152600401610722906137ce565b60026000541415610cc35760405162461bcd60e51b815260040161072290613914565b60026000556001600160a01b038216610cee5760405162461bcd60e51b8152600401610722906136f4565b6001600160a01b038116610d145760405162461bcd60e51b81526004016107229061344d565b600a546001600160a01b0316610d3c5760405162461bcd60e51b8152600401610722906136bd565b600a54604051631a8a8b3b60e11b81526001600160a01b0380841692633515167692610d6e92879216906004016132a5565b602060405180830381600087803b158015610d8857600080fd5b505af1158015610d9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc09190612fc7565b600680546001600160a01b0319166001600160a01b039283161790819055600a5460405190831692919091169030907e1129b9865226cebad4acf884618ae0607fff06758062b050509602db7065f090600090a450506001600055565b60075481565b6005546001600160a01b031681565b600c54600d546001600160801b0380831692600160801b9004169083565b610e58612bde565b6001600160a01b0316610e696114e5565b6001600160a01b031614610e8f5760405162461bcd60e51b8152600401610722906137ce565b610e994282613a89565b600881905560405130917fa8aa08cc14eef7b97ab4cd52f37082e23f7526bccc98cf91e6a1d412494b90519161078291906139fe565b610ed7612bde565b6001600160a01b0316610ee86114e5565b6001600160a01b031614610f0e5760405162461bcd60e51b8152600401610722906137ce565b610f186000612d74565b565b610f22612bde565b6001600160a01b0316610f336114e5565b6001600160a01b031614610f595760405162461bcd60e51b8152600401610722906137ce565b6001600160a01b038116610f7f5760405162461bcd60e51b815260040161072290613416565b600480546001600160a01b0319166001600160a01b03831690811790915560405130907f877238238dbd7134e89b00809ea73fabb50da117ace807a6b31c733bbf55d36990600090a350565b6002546001600160a01b03163314610ff55760405162461bcd60e51b81526004016107229061383a565b6008544210156110175760405162461bcd60e51b8152600401610722906138dd565b6002600054141561103a5760405162461bcd60e51b815260040161072290613914565b60026000556001600160a01b0384166110655760405162461bcd60e51b815260040161072290613416565b600083116110855760405162461bcd60e51b815260040161072290613686565b600a5460405163172500a160e11b81526000916001600160a01b031690632e4a0142906110b8908890889060040161332a565b602060405180830381600087803b1580156110d257600080fd5b505af11580156110e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061110a91906131c6565b60055460405163fb6cb84760e01b81529192506001600160a01b03169063fb6cb8479061113f90849087908790600401613a07565b600060405180830381600087803b15801561115957600080fd5b505af115801561116d573d6000803e3d6000fd5b50505050846001600160a01b03167f6420c9536b9a539410a930b1fd8d115dc296d8b71426dcc0ab64f2f736b7d59f826040516111aa91906139fe565b60405180910390a250506001600055505050565b6008544210156111e05760405162461bcd60e51b8152600401610722906138dd565b600260005414156112035760405162461bcd60e51b815260040161072290613914565b600260005561121133612be2565b60055460405163c139b04f60e01b81526001600160a01b039091169063c139b04f90611243903090859060040161332a565b60206040518083038186803b15801561125b57600080fd5b505afa15801561126f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061129391906130ee565b6112af5760405162461bcd60e51b81526004016107229061372b565b336000908152600b6020908152604080832060020154600a548251627a9fd960e91b815292519194936001600160a01b039091169263f53fb2009260048083019392829003018186803b15801561130557600080fd5b505afa158015611319573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061133d91906131c6565b600a54604051631665744b60e11b81529192506000916001600160a01b0390911690632ccae89690611373903390600401613291565b60606040518083038186803b15801561138b57600080fd5b505afa15801561139f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c39190613201565b505090508184670de0b6b3a76400006113dc9190613ac1565b6113e69190613aa1565b6113f08285613ae0565b101561140e5760405162461bcd60e51b815260040161072290613484565b600a546040516323de6d9560e11b81526001600160a01b03909116906347bcdb2a90611440903390889060040161332a565b600060405180830381600087803b15801561145a57600080fd5b505af115801561146e573d6000803e3d6000fd5b5050336000818152600b602052604090819020429055600a5490516001600160a01b0390911693509091507f940a14c75c418e7230a2e65567722d2dda5a6713cf71b369bd0fa219fdc1ac5e906114c69088906139fe565b60405180910390a3505060016000555050565b670de0b6b3a764000081565b6001546001600160a01b031690565b600260005414156115175760405162461bcd60e51b815260040161072290613914565b60026000556004546001600160a01b03166115445760405162461bcd60e51b815260040161072290613416565b61154d33612be2565b600a5460408051627a9fd960e91b815290516000926001600160a01b03169163f53fb200916004808301926020929190829003018186803b15801561159157600080fd5b505afa1580156115a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115c991906131c6565b336000908152600b6020526040812060028101546007549154939450926115f09042613ae0565b600a5460048054604051633613302f60e01b81529490931194506000936001600160a01b0392831693633613302f9361163293339392909116918891016132e2565b602060405180830381600087803b15801561164c57600080fd5b505af1158015611660573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061168491906131c6565b6005549091506001600160a01b031663fb6cb847670de0b6b3a76400006116ab8787613ac1565b6116b59190613aa1565b6000806040518463ffffffff1660e01b81526004016116d693929190613a07565b600060405180830381600087803b1580156116f057600080fd5b505af1158015611704573d6000803e3d6000fd5b50506004805460405163ed59344b60e01b81526001600160a01b03909116935063ed59344b9250611739913391889101613343565b600060405180830381600087803b15801561175357600080fd5b505af1158015611767573d6000803e3d6000fd5b5050336000818152600b6020526040808220600281018390556001019190915560045490516001600160a01b0390911693509091507ff0fee1f70845d356d6a3e0baa0944ce846437b6469ea89416dad2cd7067919a4906114c69085906139fe565b6000806000806000600a60009054906101000a90046001600160a01b03166001600160a01b031663f53fb2006040518163ffffffff1660e01b815260040160206040518083038186803b15801561181f57600080fd5b505afa158015611833573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061185791906131c6565b600a54604051631665744b60e11b81529192506001600160a01b031690632ccae89690611888908990600401613291565b60606040518083038186803b1580156118a057600080fd5b505afa1580156118b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d89190613201565b9196509093509150670de0b6b3a76400006118f38287613ac1565b6118fd9190613aa1565b9350509193509193565b61190f612bde565b6001600160a01b03166119206114e5565b6001600160a01b0316146119465760405162461bcd60e51b8152600401610722906137ce565b600081116119665760405162461bcd60e51b81526004016107229061394b565b600a546040516324edae1b60e21b81526001600160a01b03909116906393b6b86c906119969084906004016139fe565b600060405180830381600087803b1580156119b057600080fd5b505af11580156119c4573d6000803e3d6000fd5b50505050306001600160a01b03167f353ac2778fe09bc60cf3070bb11d548faf4037e4217a06977c16463087474aab8260405161078291906139fe565b6004546001600160a01b031681565b600a546040805163e95aa8d360e01b815290516000926001600160a01b03169163e95aa8d3916004808301926020929190829003018186803b158015611a5557600080fd5b505afa158015611a69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a8d91906131c6565b905090565b611a9a612bde565b6001600160a01b0316611aab6114e5565b6001600160a01b031614611ad15760405162461bcd60e51b8152600401610722906137ce565b60008111611af15760405162461bcd60e51b815260040161072290613760565b600781905560405130907f2c2c43c64e937ae35257af782c222986dc5adb4f56dc0881594e79bf83658d8c906107829084906139fe565b611b30612bde565b6001600160a01b0316611b416114e5565b6001600160a01b031614611b675760405162461bcd60e51b8152600401610722906137ce565b60026000541415611b8a5760405162461bcd60e51b815260040161072290613914565b60026000556001600160a01b038216611bb55760405162461bcd60e51b815260040161072290613871565b6001600160a01b038316611bdb5760405162461bcd60e51b81526004016107229061364f565b6040516369ee745160e01b81526001600160a01b038316906369ee745190611c0b908690859030906004016132bf565b602060405180830381600087803b158015611c2557600080fd5b505af1158015611c39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c5d9190612fc7565b600980546001600160a01b0319166001600160a01b03928316179081905560405191169030907f6c409a36847a0a3870deae25f656f4300d45957d2643fc27faab145e19cfcf1b90611cb0908590613291565b60405180910390a35050600160005550565b6001600160a01b038082166000908152600b6020908152604080832060020154600a548251627a9fd960e91b81529251949591948694919092169263f53fb2009260048083019392829003018186803b158015611d1e57600080fd5b505afa158015611d32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d5691906131c6565b9050670de0b6b3a7640000611d6b8284613ac1565b611d759190613aa1565b925050915091565b600854421015611d9f5760405162461bcd60e51b8152600401610722906138dd565b60026000541415611dc25760405162461bcd60e51b815260040161072290613914565b60026000908155600754338252600b602052604090912054611de49042613ae0565b1015611e025760405162461bcd60e51b8152600401610722906135e1565b611e0b33612be2565b336000818152600b602052604080822060020154600a549151631665744b60e11b8152909383926001600160a01b031691632ccae89691611e4e91600401613291565b60606040518083038186803b158015611e6657600080fd5b505afa158015611e7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e9e9190613201565b600554604051632da26abb60e11b81529395509093506001600160a01b031691635b44d5769150611ed39084906004016139fe565b600060405180830381600087803b158015611eed57600080fd5b505af1158015611f01573d6000803e3d6000fd5b5050600c5460009250670de0b6b3a76400009150611f2f90600160801b90046001600160801b031686613ac1565b611f399190613aa1565b600c54909150670de0b6b3a764000090611f6390600160801b90046001600160801b031685613ac1565b611f6d9190613aa1565b611f779082613ae0565b336000818152600b602052604080822060010193909355600a54925163b20ecd1560e01b8152909283926001600160a01b039091169163b20ecd1591611fbf91600401613291565b6040805180830381600087803b158015611fd857600080fd5b505af1158015611fec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061201091906131de565b909250905061201f8287613ae0565b336000818152600b60205260409081902060020192909255600a5491516001600160a01b03909216917fced2424eb51507abd1611ac0d9893e5bc6b6d0a0596b53f86d24d31fc75a5d60906120779086908690613a1f565b60405180910390a35050600160005550505050565b612094612bde565b6001600160a01b03166120a56114e5565b6001600160a01b0316146120cb5760405162461bcd60e51b8152600401610722906137ce565b6001600160a01b0381166120f15760405162461bcd60e51b815260040161072290613416565b600580546001600160a01b0319166001600160a01b03831690811790915560405130907fdf8e7a62b39a2ec070924d5c5dce9a1957d75476af59af5a7e7ce2ee48bc777490600090a350565b612145612bde565b6001600160a01b03166121566114e5565b6001600160a01b03161461217c5760405162461bcd60e51b8152600401610722906137ce565b6002600054141561219f5760405162461bcd60e51b815260040161072290613914565b6002600055600a546001600160a01b0316156121cd5760405162461bcd60e51b8152600401610722906135ac565b6001600160a01b0384166121f35760405162461bcd60e51b815260040161072290613797565b604051630d98e31f60e01b81526001600160a01b03851690630d98e31f90612229908b908b908b908b9030908b9060040161336b565b602060405180830381600087803b15801561224357600080fd5b505af1158015612257573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061227b9190612fc7565b600a80546001600160a01b0319166001600160a01b03928316179055600c80546fffffffffffffffffffffffffffffffff1916436001600160801b0390811691909117169055600d839055600554604051633f14eb6160e11b8152911690637e29d6c2906122f190309087908690600401613306565b600060405180830381600087803b15801561230b57600080fd5b505af115801561231f573d6000803e3d6000fd5b5050600a546040516001600160a01b0390911692503091507f184d7691bf4a73930a21086fa1bdf0ee3075421531a60730288325fd5838021790600090a350506001600055505050505050565b600a546001600160a01b031681565b6002546001600160a01b031681565b6006546001600160a01b031681565b60085481565b6009546001600160a01b031681565b600080600a60009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156123ff57600080fd5b505afa158015612413573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061243791906131c6565b600c549091506001600160801b03600160801b8204811691164311801561245d57508115155b156124bc57600c5460009061247b906001600160801b031643613ae0565b600d5490915060009061248e9083613ac1565b9050836124a3670de0b6b3a764000083613ac1565b6124ad9190613aa1565b6124b79084613a5e565b925050505b6001600160a01b0384166000908152600b602052604090206002810154600190910154670de0b6b3a76400006124fb6001600160801b03851684613ac1565b6125059190613aa1565b61250f9190613ae0565b95945050505050565b6002600054141561253b5760405162461bcd60e51b815260040161072290613914565b60026000908155600a546040516306e6829960e51b815282916001600160a01b03169063dcd0532090612572903390600401613291565b6040805180830381600087803b15801561258b57600080fd5b505af115801561259f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125c391906131de565b91509150336001600160a01b03167f09c6481cb228ea7f61ceb67c8e708038eb74bbb68cfcc54a9cfca199087ecfb78383604051612602929190613a1f565b60405180910390a250506001600055565b600c546001600160801b0316431115610f1857600a54604080516318160ddd60e01b815290516000926001600160a01b0316916318160ddd916004808301926020929190829003018186803b15801561266b57600080fd5b505afa15801561267f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126a391906131c6565b9050801561273357600c546000906126c4906001600160801b031643613ae0565b600d549091506000906126d79083613ac1565b9050826126ec670de0b6b3a764000083613ac1565b6126f69190613aa1565b600c546127139190600160801b90046001600160801b0316613a5e565b600c80546001600160801b03928316600160801b02921691909117905550505b600c80546fffffffffffffffffffffffffffffffff1916436001600160801b0390811691909117918290556040517f982b813c7d00a9ffce9441ba40f429b2e4a35068d75532f496d0c63585c2fa689261279d92818116928692600160801b9004909116906139db565b60405180910390a150565b6008544210156127ca5760405162461bcd60e51b8152600401610722906138dd565b600260005414156127ed5760405162461bcd60e51b815260040161072290613914565b60026000558061280f5760405162461bcd60e51b815260040161072290613803565b612817612613565b600a546040805163e5a6b10f60e01b815290516000926001600160a01b03169163e5a6b10f916004808301926020929190829003018186803b15801561285c57600080fd5b505afa158015612870573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128949190612fc7565b90506000600a60009054906101000a90046001600160a01b03166001600160a01b031663f53fb2006040518163ffffffff1660e01b815260040160206040518083038186803b1580156128e657600080fd5b505afa1580156128fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061291e91906131c6565b90506001600160a01b038216612984578234101561294e5760405162461bcd60e51b8152600401610722906138a6565b8234111561296957612969336129648534613ae0565b612dc6565b600a5461297f906001600160a01b031684612dc6565b61299e565b600a5461299e90839033906001600160a01b031686612e58565b600a54604051637e348b7d60e01b81526001600160a01b0390911690637e348b7d906129d0903390879060040161332a565b600060405180830381600087803b1580156129ea57600080fd5b505af11580156129fe573d6000803e3d6000fd5b5050600c54670de0b6b3a76400009250839150600160801b90046001600160801b0316612a2b8684613ac1565b612a359190613ac1565b612a3f9190613aa1565b612a499190613aa1565b336000908152600b6020526040902060010154612a669190613a89565b336000908152600b602052604090206001015580612a8c84670de0b6b3a7640000613ac1565b612a969190613aa1565b336000908152600b6020526040902060020154612ab39190613a89565b336000908152600b602052604090819020600201919091556005549051638be5a39f60e01b81526001600160a01b0390911690638be5a39f90612afa9086906004016139fe565b600060405180830381600087803b158015612b1457600080fd5b505af1158015612b28573d6000803e3d6000fd5b5050600a546040516001600160a01b0390911692503391507fd3dba7b5565b16b7749db7d1938410a636e3c7a6ea46ed8ce7e259e19f2f3b9f90611cb09087906139fe565b612b75612bde565b6001600160a01b0316612b866114e5565b6001600160a01b031614612bac5760405162461bcd60e51b8152600401610722906137ce565b6001600160a01b038116612bd25760405162461bcd60e51b8152600401610722906133b9565b612bdb81612d74565b50565b3390565b612bea612613565b6001600160a01b0381166000908152600b6020526040812060020154600c54909190670de0b6b3a764000090612c3090600160801b90046001600160801b031684613ac1565b612c3a9190613aa1565b6001600160a01b0384166000908152600b602052604081206001015491925090612c649083613ae0565b336000908152600b60205260408120600101849055600954919250906001600160a01b031615801590612c9657508115155b15612d225760095460405163186e465160e31b81526001600160a01b039091169063c372328890612ccd908890869060040161332a565b602060405180830381600087803b158015612ce757600080fd5b505af1158015612cfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d1f91906131c6565b90505b846001600160a01b0316336001600160a01b03167fa0306f61d3fafe13787b78e276cb6b644382854a66cb46daae14227d3ec2679783604051612d6591906139fe565b60405180910390a35050505050565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b604080516000808252602082019092526001600160a01b038416908390604051612df09190613258565b60006040518083038185875af1925050503d8060008114612e2d576040519150601f19603f3d011682016040523d82523d6000602084013e612e32565b606091505b5050905080612e535760405162461bcd60e51b815260040161072290613518565b505050565b600080856001600160a01b03166323b872dd868686604051602401612e7f93929190613306565b6040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051612ecd9190613258565b6000604051808303816000865af19150503d8060008114612f0a576040519150601f19603f3d011682016040523d82523d6000602084013e612f0f565b606091505b5091509150818015612f39575080511580612f39575080806020019051810190612f3991906130ee565b612f555760405162461bcd60e51b8152600401610722906134bb565b505050505050565b60008083601f840112612f6e578182fd5b50813567ffffffffffffffff811115612f85578182fd5b602083019150836020828501011115612f9d57600080fd5b9250929050565b600060208284031215612fb5578081fd5b8135612fc081613b0d565b9392505050565b600060208284031215612fd8578081fd5b8151612fc081613b0d565b60008060408385031215612ff5578081fd5b823561300081613b0d565b9150602083013561301081613b0d565b809150509250929050565b60008060006060848603121561302f578081fd5b833561303a81613b0d565b9250602084013561304a81613b0d565b9150604084013561305a81613b0d565b809150509250925092565b600080600060608486031215613079578283fd5b833561308481613b0d565b9250602084013561309481613b0d565b929592945050506040919091013590565b600080600080608085870312156130ba578081fd5b84356130c581613b0d565b9350602085013592506040850135915060608501356130e381613b22565b939692955090935050565b6000602082840312156130ff578081fd5b8151612fc081613b22565b60008060008060008060008060c0898b031215613125578384fd5b883567ffffffffffffffff8082111561313c578586fd5b6131488c838d01612f5d565b909a50985060208b0135915080821115613160578586fd5b5061316d8b828c01612f5d565b909750955050604089013561318181613b0d565b9350606089013561319181613b0d565b979a969950949793969295929450505060808201359160a0013590565b6000602082840312156131bf578081fd5b5035919050565b6000602082840312156131d7578081fd5b5051919050565b600080604083850312156131f0578182fd5b505080516020909101519092909150565b600080600060608486031215613215578283fd5b8351925060208401519150604084015190509250925092565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b60008251815b81811015613278576020818601810151858301520161325e565b818111156132865782828501525b509190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b0393841681529183166020830152909116604082015260600190565b6001600160a01b039384168152919092166020820152901515604082015260600190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b03929092168252602082015260606040820181905260009082015260800190565b60006080825261337f60808301888a61322e565b828103602084015261339281878961322e565b9150506001600160a01b038085166040840152808416606084015250979650505050505050565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201527f6464726573730000000000000000000000000000000000000000000000000000606082015260800190565b60208082526013908201527f556e6f52653a207a65726f206164647265737300000000000000000000000000604082015260600190565b6020808252601a908201527f556e6f52653a7a65726f20666163746f72792061646472657373000000000000604082015260600190565b6020808252601f908201527f556e6f52653a20776974686472617720616d6f756e74206f766572666c6f7700604082015260600190565b60208082526031908201527f5472616e7366657248656c7065723a3a7472616e7366657246726f6d3a20747260408201527f616e7366657246726f6d206661696c6564000000000000000000000000000000606082015260800190565b60208082526034908201527f5472616e7366657248656c7065723a3a736166655472616e736665724554483a60408201527f20455448207472616e73666572206661696c6564000000000000000000000000606082015260800190565b60208082526017908201527f556e6f52653a2062616c616e6365206f766572666c6f77000000000000000000604082015260600190565b6020808252818101527f556e6f52653a207269736b20706f6f6c206372656174656420616c7265616479604082015260600190565b60208082526012908201527f556e6f52653a204c6f636b65642074696d650000000000000000000000000000604082015260600190565b60208082526011908201527f556e6f52653a207a65726f2076616c7565000000000000000000000000000000604082015260600190565b6020808252601c908201527f556e6f52653a207a65726f206f70657261746f72206164647265737300000000604082015260600190565b60208082526012908201527f556e6f52653a207a65726f20616d6f756e740000000000000000000000000000604082015260600190565b6020808252601b908201527f556e6f52653a7a65726f204c5020746f6b656e20616464726573730000000000604082015260600190565b60208082526019908201527f556e6f52653a207a65726f206f776e6572206164647265737300000000000000604082015260600190565b6020808252818101527f556e6f52653a206d696e696d756d206361706974616c20756e646572666c6f77604082015260600190565b6020808252601f908201527f556e6f52653a206e6f7420616c6c6f77207a65726f206c6f636b2074696d6500604082015260600190565b6020808252601b908201527f556e6f52653a207a65726f20666163746f727920616464726573730000000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526011908201527f556e6f52653a205a45524f2056616c7565000000000000000000000000000000604082015260600190565b60208082526010908201527f556e6f52653a20466f7262696464656e00000000000000000000000000000000604082015260600190565b6020808252818101527f556e6f52653a20726577617264657220666163746f7279206e6f206578697374604082015260600190565b60208082526018908201527f556e6f52653a20696e73756666696369656e7420706169640000000000000000604082015260600190565b60208082526019908201527f556e6f52653a206e6f7420617661696c61626c652074696d6500000000000000604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6020808252601b908201527f556e6f52653a206e6f7420616c6c6f77207a65726f2076616c75650000000000604082015260600190565b6020808252818101527f556e6f52653a206e6f7420616c6c6f77206f7468657273207472616e73666572604082015260600190565b6001600160801b039384168152919092166020820152604081019190915260600190565b6001600160801b0393841681526020810192909252909116604082015260600190565b90815260200190565b92835260208301919091521515604082015260600190565b918252602082015260400190565b9283526020830191909152604082015260600190565b93845260208401929092526040830152606082015260800190565b60006001600160801b03808316818516808303821115613a8057613a80613af7565b01949350505050565b60008219821115613a9c57613a9c613af7565b500190565b600082613abc57634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615613adb57613adb613af7565b500290565b600082821015613af257613af2613af7565b500390565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0381168114612bdb57600080fd5b8015158114612bdb57600080fdfea264697066735822122081df25ce0c02811c2ccad34ff1c89f4520fb5f189cda4b52a368f6a69198289064736f6c63430008000033

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
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.