ETH Price: $3,245.96 (+2.55%)
Gas: 2 Gwei

Contract

0x8D0f9C9FA4c1b265cd5032FE6BA4FEfC9D94bAdb
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Deposit Eth203401382024-07-19 10:59:597 days ago1721386799IN
0x8D0f9C9F...C9D94bAdb
0.1 ETH0.001704065.70083735
Withdraw Eth203118472024-07-15 12:15:2311 days ago1721045723IN
0x8D0f9C9F...C9D94bAdb
0 ETH0.000495753.91189066
Withdraw Eth202193832024-07-02 14:19:2324 days ago1719929963IN
0x8D0f9C9F...C9D94bAdb
0 ETH0.001035858.17371274
Withdraw Eth201889672024-06-28 8:23:5928 days ago1719563039IN
0x8D0f9C9F...C9D94bAdb
0 ETH0.000519833.78141916
Withdraw Eth201689102024-06-25 13:11:3531 days ago1719321095IN
0x8D0f9C9F...C9D94bAdb
0 ETH0.001032487.17912299
Deposit Eth201323212024-06-20 10:23:5936 days ago1718879039IN
0x8D0f9C9F...C9D94bAdb
0.364 ETH0.001928656.45222068
Withdraw Eth201267832024-06-19 15:49:1137 days ago1718812151IN
0x8D0f9C9F...C9D94bAdb
0 ETH0.001071058.45227395
Deposit Eth199784142024-05-29 22:12:4757 days ago1717020767IN
0x8D0f9C9F...C9D94bAdb
0.0455 ETH0.002191487.33147965
Withdraw Eth199266092024-05-22 16:27:3565 days ago1716395255IN
0x8D0f9C9F...C9D94bAdb
0 ETH0.0026298618.28453494
Deposit Eth199246672024-05-22 9:56:1165 days ago1716371771IN
0x8D0f9C9F...C9D94bAdb
0.1 ETH0.001991266.66165012
Withdraw Eth198827442024-05-16 13:09:4771 days ago1715864987IN
0x8D0f9C9F...C9D94bAdb
0 ETH0.001000456.95579503
Withdraw Eth198678432024-05-14 11:06:5973 days ago1715684819IN
0x8D0f9C9F...C9D94bAdb
0 ETH0.000816376.44244154
Withdraw Eth198678382024-05-14 11:05:5973 days ago1715684759IN
0x8D0f9C9F...C9D94bAdb
0 ETH0.000767416.05608011
Withdraw Eth198678322024-05-14 11:04:4773 days ago1715684687IN
0x8D0f9C9F...C9D94bAdb
0 ETH0.000799096.3054977
Withdraw Eth198678252024-05-14 11:03:2373 days ago1715684603IN
0x8D0f9C9F...C9D94bAdb
0 ETH0.000916916.37500245
Deposit Eth198550752024-05-12 16:17:3575 days ago1715530655IN
0x8D0f9C9F...C9D94bAdb
0.001 ETH0.001454554.8661202
Withdraw Eth197675612024-04-30 10:34:4787 days ago1714473287IN
0x8D0f9C9F...C9D94bAdb
0 ETH0.0017267812.40709917
Withdraw Eth196614022024-04-15 14:07:47102 days ago1713190067IN
0x8D0f9C9F...C9D94bAdb
0 ETH0.0030383624.89134906
Propose Owner195145982024-03-25 22:58:23122 days ago1711407503IN
0x8D0f9C9F...C9D94bAdb
0 ETH0.0013263627.23532542
Set Loans Periph...195145002024-03-25 22:38:47122 days ago1711406327IN
0x8D0f9C9F...C9D94bAdb
0 ETH0.0013498440
Claim Ownership195144352024-03-25 22:25:35122 days ago1711405535IN
0x8D0f9C9F...C9D94bAdb
0 ETH0.0007951627.09909409
Withdraw Eth194478682024-03-16 13:51:23132 days ago1710597083IN
0x8D0f9C9F...C9D94bAdb
0 ETH0.0047127533.86454891
Withdraw Eth194325732024-03-14 10:11:35134 days ago1710411095IN
0x8D0f9C9F...C9D94bAdb
0 ETH0.005938848.64802456
Propose Owner193567342024-03-03 19:30:11144 days ago1709494211IN
0x8D0f9C9F...C9D94bAdb
0 ETH0.0032252266.22641761
Set Liquidations...193564172024-03-03 18:25:59144 days ago1709490359IN
0x8D0f9C9F...C9D94bAdb
0 ETH0.0028703685
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
203534642024-07-21 7:37:355 days ago1721547455
0x8D0f9C9F...C9D94bAdb
2.900227 ETH
203534642024-07-21 7:37:355 days ago1721547455
0x8D0f9C9F...C9D94bAdb
2.900227 ETH
203401382024-07-19 10:59:597 days ago1721386799
0x8D0f9C9F...C9D94bAdb
0.1 ETH
203333812024-07-18 12:23:238 days ago1721305403
0x8D0f9C9F...C9D94bAdb
0.90896 ETH
203333812024-07-18 12:23:238 days ago1721305403
0x8D0f9C9F...C9D94bAdb
0.90896 ETH
203331962024-07-18 11:46:118 days ago1721303171
0x8D0f9C9F...C9D94bAdb
1.11737097 ETH
203331962024-07-18 11:46:118 days ago1721303171
0x8D0f9C9F...C9D94bAdb
1.11737097 ETH
203301722024-07-18 1:36:598 days ago1721266619
0x8D0f9C9F...C9D94bAdb
0.32376452 ETH
203301722024-07-18 1:36:598 days ago1721266619
0x8D0f9C9F...C9D94bAdb
0.32376452 ETH
203226802024-07-17 0:31:599 days ago1721176319
0x8D0f9C9F...C9D94bAdb
0.576441 ETH
203226802024-07-17 0:31:599 days ago1721176319
0x8D0f9C9F...C9D94bAdb
0.576441 ETH
203219962024-07-16 22:15:119 days ago1721168111
0x8D0f9C9F...C9D94bAdb
5.22800989 ETH
203219962024-07-16 22:15:119 days ago1721168111
0x8D0f9C9F...C9D94bAdb
5.22800989 ETH
203118472024-07-15 12:15:2311 days ago1721045723
0x8D0f9C9F...C9D94bAdb
1.0877 ETH
203118472024-07-15 12:15:2311 days ago1721045723
0x8D0f9C9F...C9D94bAdb
1.0877 ETH
203105642024-07-15 7:57:1111 days ago1721030231
0x8D0f9C9F...C9D94bAdb
0.1 ETH
203105642024-07-15 7:57:1111 days ago1721030231
0x8D0f9C9F...C9D94bAdb
0.1 ETH
203049382024-07-14 13:07:3512 days ago1720962455
0x8D0f9C9F...C9D94bAdb
5.203 ETH
203049382024-07-14 13:07:3512 days ago1720962455
0x8D0f9C9F...C9D94bAdb
5.203 ETH
202737642024-07-10 4:39:3516 days ago1720586375
0x8D0f9C9F...C9D94bAdb
1.04141602 ETH
202737642024-07-10 4:39:3516 days ago1720586375
0x8D0f9C9F...C9D94bAdb
1.04141602 ETH
202718272024-07-09 22:09:5916 days ago1720562999
0x8D0f9C9F...C9D94bAdb
7.34678072 ETH
202718272024-07-09 22:09:5916 days ago1720562999
0x8D0f9C9F...C9D94bAdb
7.34678072 ETH
202475472024-07-06 12:44:5920 days ago1720269899
0x8D0f9C9F...C9D94bAdb
0.900137 ETH
202475472024-07-06 12:44:5920 days ago1720269899
0x8D0f9C9F...C9D94bAdb
0.900137 ETH
View All Internal Transactions
Loading...
Loading

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

Contract Name:
LendingPoolPeripheral

Compiler Version
vyper:0.3.7

Optimization Enabled:
N/A

Other Settings:
None license

Contract Source Code (Vyper language format)

# @version 0.3.7

"""
@title LendingPoolPeripheral
@author [Zharta](https://zharta.io/)
@notice The lending pool contract implements the lending pool logic. Each instance works with a corresponding loans contract to implement an isolated lending market.
@dev Uses a `LendingPoolCore` contract to store state
"""

# Interfaces

from vyper.interfaces import ERC20 as IERC20

interface ILendingPoolCore:
    def funds(arg0: address) -> InvestorFunds: view
    def fundsAvailable() -> uint256: view
    def fundsInvested() -> uint256: view
    def computeWithdrawableAmount(_lender: address) -> uint256: view
    def deposit(_lender: address, _payer: address, _amount: uint256) -> bool: nonpayable
    def withdraw(_lender: address, _wallet: address, _amount: uint256) -> bool: nonpayable
    def sendFunds(_to: address, _amount: uint256) -> bool: nonpayable
    def receiveFunds(_borrower: address, _amount: uint256, _rewardsAmount: uint256, _investedAmount: uint256) -> bool: nonpayable
    def transferProtocolFees(_borrower: address, _protocolWallet: address, _amount: uint256) -> bool: nonpayable

interface ILendingPoolLock:
    def investorLocks(arg0: address) -> InvestorLock: view
    def setInvestorLock(_lender: address, _amount: uint256, _lockPeriodEnd: uint256): nonpayable

interface ILiquidityControls:
    def lockPeriodDuration() -> uint256: view
    def lockPeriodEnabled() -> bool: view
    def withinPoolShareLimit(
        _lender: address,
        _amount: uint256,
        _lpPeripheralContractAddress: address,
        _lpCoreContractAddress: address,
        _fundsInvestable: uint256
    ) -> bool: view
    def outOfLockPeriod(_lender: address, _remainingAmount: uint256, _lpLockContractAddress: address) -> bool: view

interface IWETH:
    def deposit(): payable
    def withdraw(_amount: uint256): nonpayable

# Structs

struct InvestorFunds:
    currentAmountDeposited: uint256
    totalAmountDeposited: uint256
    totalAmountWithdrawn: uint256
    sharesBasisPoints: uint256
    activeForRewards: bool

struct InvestorLock:
    lockPeriodEnd: uint256
    lockPeriodAmount: uint256

# Events

event OwnerProposed:
    ownerIndexed: indexed(address)
    proposedOwnerIndexed: indexed(address)
    owner: address
    proposedOwner: address
    erc20TokenContract: address

event OwnershipTransferred:
    ownerIndexed: indexed(address)
    proposedOwnerIndexed: indexed(address)
    owner: address
    proposedOwner: address
    erc20TokenContract: address

event MaxCapitalEfficiencyChanged:
    erc20TokenContractIndexed: indexed(address)
    currentValue: uint256
    newValue: uint256
    erc20TokenContract: address

event ProtocolWalletChanged:
    erc20TokenContractIndexed: indexed(address)
    currentValue: address
    newValue: address
    erc20TokenContract: address

event ProtocolFeesShareChanged:
    erc20TokenContractIndexed: indexed(address)
    currentValue: uint256
    newValue: uint256
    erc20TokenContract: address

event LoansPeripheralAddressSet:
    erc20TokenContractIndexed: indexed(address)
    currentValue: address
    newValue: address
    erc20TokenContract: address

event LiquidationsPeripheralAddressSet:
    erc20TokenContractIndexed: indexed(address)
    currentValue: address
    newValue: address
    erc20TokenContract: address

event LiquidityControlsAddressSet:
    erc20TokenContractIndexed: indexed(address)
    currentValue: address
    newValue: address
    erc20TokenContract: address

event WhitelistStatusChanged:
    erc20TokenContractIndexed: indexed(address)
    value: bool
    erc20TokenContract: address

event WhitelistAddressAdded:
    erc20TokenContractIndexed: indexed(address)
    value: address
    erc20TokenContract: address

event WhitelistAddressRemoved:
    erc20TokenContractIndexed: indexed(address)
    value: address
    erc20TokenContract: address

event ContractStatusChanged:
    erc20TokenContractIndexed: indexed(address)
    value: bool
    erc20TokenContract: address

event InvestingStatusChanged:
    erc20TokenContractIndexed: indexed(address)
    value: bool
    erc20TokenContract: address

event ContractDeprecated:
    erc20TokenContractIndexed: indexed(address)
    erc20TokenContract: address

event Deposit:
    walletIndexed: indexed(address)
    wallet: address
    amount: uint256
    erc20TokenContract: address

event Withdrawal:
    walletIndexed: indexed(address)
    wallet: address
    amount: uint256
    erc20TokenContract: address

event FundsTransfer:
    walletIndexed: indexed(address)
    wallet: address
    amount: uint256
    erc20TokenContract: address

event FundsReceipt:
    walletIndexed: indexed(address)
    wallet: address
    amount: uint256
    rewardsPool: uint256
    rewardsProtocol: uint256
    investedAmount: uint256
    erc20TokenContract: address
    fundsOrigin: String[30]

event PaymentSent:
    walletIndexed: indexed(address)
    wallet: address
    amount: uint256

event PaymentReceived:
    walletIndexed: indexed(address)
    wallet: address
    amount: uint256


# Global variables

owner: public(address)
proposedOwner: public(address)

loansContract: public(address)
lendingPoolCoreContract: public(address)
lendingPoolLockContract: public(address)
erc20TokenContract: public(immutable(address))
liquidationsPeripheralContract: public(address)
liquidityControlsContract: public(address)

protocolWallet: public(address)
protocolFeesShare: public(uint256) # parts per 10000, e.g. 2.5% is represented by 250 parts per 10000

maxCapitalEfficienty: public(uint256) # parts per 10000, e.g. 2.5% is represented by 250 parts per 10000
isPoolActive: public(bool)
isPoolDeprecated: public(bool)
isPoolInvesting: public(bool)

whitelistEnabled: public(bool)
whitelistedAddresses: public(HashMap[address, bool])


##### INTERNAL METHODS - VIEW #####

@view
@internal
def _fundsAreAllowed(_owner: address, _spender: address, _amount: uint256) -> bool:
    amountAllowed: uint256 = IERC20(erc20TokenContract).allowance(_owner, _spender)
    return _amount <= amountAllowed


@pure
@internal
def _poolHasFundsToInvest(_fundsAvailable: uint256, _fundsInvested: uint256, _capitalEfficienty: uint256) -> bool:
    if _fundsAvailable + _fundsInvested == 0:
        return False
    
    return _fundsInvested * 10000 / (_fundsAvailable + _fundsInvested) < _capitalEfficienty


@view
@internal
def _poolHasFundsToInvestAfterDeposit(_amount: uint256) -> bool:
    fundsAvailable: uint256 = ILendingPoolCore(self.lendingPoolCoreContract).fundsAvailable() + _amount
    fundsInvested: uint256 = ILendingPoolCore(self.lendingPoolCoreContract).fundsInvested()

    return self._poolHasFundsToInvest(fundsAvailable, fundsInvested, self.maxCapitalEfficienty)


@view
@internal
def _poolHasFundsToInvestAfterPayment(_amount: uint256, _rewards: uint256) -> bool:
    fundsAvailable: uint256 = ILendingPoolCore(self.lendingPoolCoreContract).fundsAvailable() + _amount + _rewards
    fundsInvested: uint256 = ILendingPoolCore(self.lendingPoolCoreContract).fundsInvested() - _amount

    return self._poolHasFundsToInvest(fundsAvailable, fundsInvested, self.maxCapitalEfficienty)


@view
@internal
def _poolHasFundsToInvestAfterWithdraw(_amount: uint256) -> bool:
    fundsAvailable: uint256 = ILendingPoolCore(self.lendingPoolCoreContract).fundsAvailable() - _amount
    fundsInvested: uint256 = ILendingPoolCore(self.lendingPoolCoreContract).fundsInvested()
    
    return self._poolHasFundsToInvest(fundsAvailable, fundsInvested, self.maxCapitalEfficienty)


@view
@internal
def _poolHasFundsToInvestAfterInvestment(_amount: uint256) -> bool:
    fundsAvailable: uint256 = ILendingPoolCore(self.lendingPoolCoreContract).fundsAvailable() - _amount
    fundsInvested: uint256 = ILendingPoolCore(self.lendingPoolCoreContract).fundsInvested() + _amount
    
    return self._poolHasFundsToInvest(fundsAvailable, fundsInvested, self.maxCapitalEfficienty)


@view
@internal
def _maxFundsInvestable() -> uint256:
    fundsAvailable: uint256 = ILendingPoolCore(self.lendingPoolCoreContract).fundsAvailable()
    fundsInvested: uint256 = ILendingPoolCore(self.lendingPoolCoreContract).fundsInvested()

    fundsBuffer: uint256 = (fundsAvailable + fundsInvested) * (10000 - self.maxCapitalEfficienty) / 10000

    if fundsBuffer > fundsAvailable:
        return 0
    
    return fundsAvailable - fundsBuffer


@view
@internal
def _theoreticalMaxFundsInvestable(_amount: uint256) -> uint256:
    fundsAvailable: uint256 = ILendingPoolCore(self.lendingPoolCoreContract).fundsAvailable()
    fundsInvested: uint256 = ILendingPoolCore(self.lendingPoolCoreContract).fundsInvested()

    return (fundsAvailable + fundsInvested + _amount) * self.maxCapitalEfficienty / 10000


@view
@internal
def _computeLockPeriodEnd(_lender: address) -> uint256:
    lockPeriodEnd: uint256 = ILendingPoolLock(self.lendingPoolLockContract).investorLocks(_lender).lockPeriodEnd
    if lockPeriodEnd <= block.timestamp:
        lockPeriodEnd = block.timestamp + ILiquidityControls(self.liquidityControlsContract).lockPeriodDuration()
    return lockPeriodEnd


@view
@internal
def _computeLockPeriod(_lender: address, _amount: uint256) -> (uint256, uint256):
    investorLock: InvestorLock = ILendingPoolLock(self.lendingPoolLockContract).investorLocks(msg.sender)
    if investorLock.lockPeriodEnd <= block.timestamp:
        return block.timestamp + ILiquidityControls(self.liquidityControlsContract).lockPeriodDuration(), _amount
    else:
        return investorLock.lockPeriodEnd, investorLock.lockPeriodAmount + _amount

##### INTERNAL METHODS - WRITE #####


@internal
def _deposit(_amount: uint256, _payer: address):
    assert not self.isPoolDeprecated, "pool is deprecated, withdraw"
    assert self.isPoolActive, "pool is not active right now"
    assert _amount > 0, "_amount has to be higher than 0"

    assert ILiquidityControls(self.liquidityControlsContract).withinPoolShareLimit(
        msg.sender,
        _amount,
        self,
        self.lendingPoolCoreContract,
        self._theoreticalMaxFundsInvestable(_amount)
    ), "max pool share surpassed"

    if self.whitelistEnabled and not self.whitelistedAddresses[msg.sender]:
        raise "msg.sender is not whitelisted"

    if not self.isPoolInvesting and self._poolHasFundsToInvestAfterDeposit(_amount):
        self.isPoolInvesting = True

        log InvestingStatusChanged(
            erc20TokenContract,
            True,
            erc20TokenContract
        )

    lockPeriodEnd: uint256 = 0
    lockPeriodAmount: uint256 = 0
    lockPeriodEnd, lockPeriodAmount = self._computeLockPeriod(msg.sender, _amount)

    if not ILendingPoolCore(self.lendingPoolCoreContract).deposit(msg.sender, _payer, _amount):
        raise "error creating deposit"

    ILendingPoolLock(self.lendingPoolLockContract).setInvestorLock(msg.sender, lockPeriodAmount, lockPeriodEnd)

    log Deposit(msg.sender, msg.sender, _amount, erc20TokenContract)


@internal
def _withdraw(_amount: uint256, _receiver: address):
    assert _amount > 0, "_amount has to be higher than 0"
    
    withdrawableAmount: uint256 = ILendingPoolCore(self.lendingPoolCoreContract).computeWithdrawableAmount(msg.sender)
    assert withdrawableAmount >= _amount, "_amount more than withdrawable"
    assert ILiquidityControls(self.liquidityControlsContract).outOfLockPeriod(msg.sender, withdrawableAmount - _amount, self.lendingPoolLockContract), "withdraw within lock period"
    assert ILendingPoolCore(self.lendingPoolCoreContract).fundsAvailable() >= _amount, "available funds less than amount"

    if self.isPoolInvesting and not self._poolHasFundsToInvestAfterWithdraw(_amount):
        self.isPoolInvesting = False

        log InvestingStatusChanged(
            erc20TokenContract,
            False,
            erc20TokenContract
        )

    if not ILendingPoolCore(self.lendingPoolCoreContract).withdraw(msg.sender, _receiver, _amount):
        raise "error withdrawing funds"

    log Withdrawal(msg.sender, msg.sender, _amount, erc20TokenContract)


@internal
def _sendFunds(_to: address, _receiver: address, _amount: uint256):
    assert not self.isPoolDeprecated, "pool is deprecated"
    assert self.isPoolActive, "pool is inactive"
    assert self.isPoolInvesting, "max capital eff reached"
    assert msg.sender == self.loansContract, "msg.sender is not the loans addr"
    assert _to != empty(address), "_to is the zero address"
    assert _amount > 0, "_amount has to be higher than 0"
    assert _amount <= self._maxFundsInvestable(), "insufficient liquidity"

    if self.isPoolInvesting and not self._poolHasFundsToInvestAfterInvestment(_amount):
        self.isPoolInvesting = False

        log InvestingStatusChanged(
            erc20TokenContract,
            False,
            erc20TokenContract
        )

    if not ILendingPoolCore(self.lendingPoolCoreContract).sendFunds(_receiver, _amount):
        raise "error sending funds in LPCore"

    log FundsTransfer(_to, _to, _amount, erc20TokenContract)


@internal
def _receiveFunds(_borrower: address, _payer: address, _amount: uint256, _rewardsAmount: uint256):
    assert msg.sender == self.loansContract, "msg.sender is not the loans addr"
    assert _borrower != empty(address), "_borrower is the zero address"
    assert _amount + _rewardsAmount > 0, "amount should be higher than 0"

    rewardsProtocol: uint256 = _rewardsAmount * self.protocolFeesShare / 10000
    rewardsPool: uint256 = _rewardsAmount - rewardsProtocol

    self._transferReceivedFunds(_borrower, _payer, _amount, rewardsPool, rewardsProtocol, _amount, "loan")


@internal
def _transferReceivedFunds(
    _borrower: address,
    _payer: address,
    _amount: uint256,
    _rewardsPool: uint256,
    _rewardsProtocol: uint256,
    _investedAmount: uint256,
    _origin: String[30]
):
    if not self.isPoolInvesting and self._poolHasFundsToInvestAfterPayment(_amount, _rewardsPool):
        self.isPoolInvesting = True

        log InvestingStatusChanged(
            erc20TokenContract,
            True,
            erc20TokenContract
        )

    if not ILendingPoolCore(self.lendingPoolCoreContract).receiveFunds(_payer, _amount, _rewardsPool, _investedAmount):
        raise "error receiving funds in LPCore"
    
    if _rewardsProtocol > 0:
        if not ILendingPoolCore(self.lendingPoolCoreContract).transferProtocolFees(_payer, self.protocolWallet, _rewardsProtocol):
            raise "error transferring protocol fees"

    log FundsReceipt(
        _borrower,
        _borrower,
        _amount,
        _rewardsPool,
        _rewardsProtocol,
        _investedAmount,
        erc20TokenContract,
        _origin
    )


@internal
def _receiveFundsFromLiquidation(
    _borrower: address,
    _payer: address,
    _amount: uint256,
    _rewardsAmount: uint256,
    _distributeToProtocol: bool,
    _investedAmount: uint256,
    _origin: String[30]
):
    assert msg.sender == self.liquidationsPeripheralContract, "msg.sender is not the BN addr"
    assert _borrower != empty(address), "_borrower is the zero address"
    assert _amount + _rewardsAmount > 0, "amount should be higher than 0"

    rewardsProtocol: uint256 = 0
    rewardsPool: uint256 = 0
    if _distributeToProtocol:
        rewardsProtocol = _rewardsAmount * self.protocolFeesShare / 10000
        rewardsPool = _rewardsAmount - rewardsProtocol
    else:
        rewardsPool = _rewardsAmount

    self._transferReceivedFunds(_borrower, _payer, _amount, rewardsPool, rewardsProtocol, _investedAmount, _origin)


@internal
def _unwrap_and_send(_to: address, _amount: uint256):
    IWETH(erc20TokenContract).withdraw(_amount)
    send(_to, _amount)
    log PaymentSent(_to, _to, _amount)


@internal
def _wrap_and_approve(_to: address, _amount: uint256):
    IWETH(erc20TokenContract).deposit(value=_amount)
    log PaymentSent(erc20TokenContract, erc20TokenContract, _amount)
    IERC20(erc20TokenContract).approve(_to, _amount)


##### EXTERNAL METHODS - VIEW #####

@view
@external
def maxFundsInvestable() -> uint256:
    return self._maxFundsInvestable()


@view
@external
def theoreticalMaxFundsInvestable() -> uint256:
    return self._theoreticalMaxFundsInvestable(0)


@view
@external
def theoreticalMaxFundsInvestableAfterDeposit(_amount: uint256) -> uint256:
    return self._theoreticalMaxFundsInvestable(_amount)


@view
@external
def lenderFunds(_lender: address) -> InvestorFunds:
    return ILendingPoolCore(self.lendingPoolCoreContract).funds(_lender)

@view
@external
def lockedAmount(_lender: address) -> uint256:
    if not ILiquidityControls(self.liquidityControlsContract).lockPeriodEnabled():
        return 0

    lockPeriod: InvestorLock = ILendingPoolLock(self.lendingPoolLockContract).investorLocks(_lender)
    if lockPeriod.lockPeriodEnd < block.timestamp:
        return 0
    return lockPeriod.lockPeriodAmount


##### EXTERNAL METHODS - NON-VIEW #####

@external
def __init__(
    _lendingPoolCoreContract: address,
    _lendingPoolLockContract: address,
    _erc20TokenContract: address,
    _protocolWallet: address,
    _protocolFeesShare: uint256,
    _maxCapitalEfficienty: uint256,
    _whitelistEnabled: bool
):
    assert _lendingPoolCoreContract != empty(address), "address is the zero address"
    assert _erc20TokenContract != empty(address), "address is the zero address"
    assert _protocolWallet != empty(address), "address is the zero address"
    assert _protocolFeesShare <= 10000, "fees share exceeds 10000 bps"
    assert _maxCapitalEfficienty <= 10000, "capital eff exceeds 10000 bps"

    self.owner = msg.sender
    self.lendingPoolCoreContract = _lendingPoolCoreContract
    self.lendingPoolLockContract = _lendingPoolLockContract
    erc20TokenContract = _erc20TokenContract
    self.protocolWallet = _protocolWallet
    self.protocolFeesShare = _protocolFeesShare
    self.maxCapitalEfficienty = _maxCapitalEfficienty
    self.isPoolActive = True
    
    if _whitelistEnabled:
        self.whitelistEnabled = _whitelistEnabled


@external
@payable
def __default__():
    assert msg.sender == erc20TokenContract, "msg.sender is not the WETH addr"
    log PaymentReceived(msg.sender, msg.sender, msg.value)


@external
def proposeOwner(_address: address):
    assert msg.sender == self.owner, "msg.sender is not the owner"
    assert _address != empty(address), "_address it the zero address"
    assert self.owner != _address, "proposed owner addr is the owner"
    assert self.proposedOwner != _address, "proposed owner addr is the same"

    self.proposedOwner = _address

    log OwnerProposed(
        self.owner,
        _address,
        self.owner,
        _address,
        erc20TokenContract
    )


@external
def claimOwnership():
    assert msg.sender == self.proposedOwner, "msg.sender is not the proposed"

    log OwnershipTransferred(
        self.owner,
        self.proposedOwner,
        self.owner,
        self.proposedOwner,
        erc20TokenContract
    )

    self.owner = self.proposedOwner
    self.proposedOwner = empty(address)


@external
def changeMaxCapitalEfficiency(_value: uint256):
    assert msg.sender == self.owner, "msg.sender is not the owner"
    assert _value <= 10000, "capital eff exceeds 10000 bps"
    assert _value != self.maxCapitalEfficienty, "new value is the same"

    log MaxCapitalEfficiencyChanged(
        erc20TokenContract,
        self.maxCapitalEfficienty,
        _value,
        erc20TokenContract
    )

    self.maxCapitalEfficienty = _value


@external
def changeProtocolWallet(_address: address):
    assert msg.sender == self.owner, "msg.sender is not the owner"
    assert _address != empty(address), "_address is the zero address"
    assert _address != self.protocolWallet, "new value is the same"

    log ProtocolWalletChanged(
        erc20TokenContract,
        self.protocolWallet,
        _address,
        erc20TokenContract
    )

    self.protocolWallet = _address


@external
def changeProtocolFeesShare(_value: uint256):
    assert msg.sender == self.owner, "msg.sender is not the owner"
    assert _value <= 10000, "fees share exceeds 10000 bps"
    assert _value != self.protocolFeesShare, "new value is the same"

    log ProtocolFeesShareChanged(
        erc20TokenContract,
        self.protocolFeesShare,
        _value,
        erc20TokenContract
    )

    self.protocolFeesShare = _value


@external
def setLoansPeripheralAddress(_address: address):
    assert msg.sender == self.owner, "msg.sender is not the owner"
    assert _address != empty(address), "_address is the zero address"
    assert _address.is_contract, "_address is not a contract"
    assert _address != self.loansContract, "new value is the same"

    log LoansPeripheralAddressSet(
        erc20TokenContract,
        self.loansContract,
        _address,
        erc20TokenContract
    )

    self.loansContract = _address


@external
def setLiquidationsPeripheralAddress(_address: address):
    assert msg.sender == self.owner, "msg.sender is not the owner"
    assert _address != empty(address), "_address is the zero address"
    assert _address.is_contract, "_address is not a contract"
    assert _address != self.liquidationsPeripheralContract, "new value is the same"

    log LiquidationsPeripheralAddressSet(
        erc20TokenContract,
        self.liquidationsPeripheralContract,
        _address,
        erc20TokenContract
    )

    self.liquidationsPeripheralContract = _address


@external
def setLiquidityControlsAddress(_address: address):
    assert msg.sender == self.owner, "msg.sender is not the owner"
    assert _address != empty(address), "_address is the zero address"
    assert _address.is_contract, "_address is not a contract"
    assert _address != self.liquidityControlsContract, "new value is the same"

    log LiquidityControlsAddressSet(
        erc20TokenContract,
        self.liquidityControlsContract,
        _address,
        erc20TokenContract
    )

    self.liquidityControlsContract = _address


@external
def changeWhitelistStatus(_flag: bool):
    assert msg.sender == self.owner, "msg.sender is not the owner"
    assert self.whitelistEnabled != _flag, "new value is the same"

    self.whitelistEnabled = _flag

    log WhitelistStatusChanged(
        erc20TokenContract,
        _flag,
        erc20TokenContract
    )


@external
def addWhitelistedAddress(_address: address):
    assert msg.sender == self.owner, "msg.sender is not the owner"
    assert _address != empty(address), "_address is the zero address"
    assert self.whitelistEnabled, "whitelist is disabled"
    assert not self.whitelistedAddresses[_address], "address is already whitelisted"

    self.whitelistedAddresses[_address] = True

    log WhitelistAddressAdded(
        erc20TokenContract,
        _address,
        erc20TokenContract
    )


@external
def removeWhitelistedAddress(_address: address):
    assert msg.sender == self.owner, "msg.sender is not the owner"
    assert _address != empty(address), "_address is the zero address"
    assert self.whitelistEnabled, "whitelist is disabled"
    assert self.whitelistedAddresses[_address], "address is not whitelisted"

    self.whitelistedAddresses[_address] = False

    log WhitelistAddressRemoved(
        erc20TokenContract,
        _address,
        erc20TokenContract
    )


@external
def changePoolStatus(_flag: bool):
    assert msg.sender == self.owner, "msg.sender is not the owner"

    self.isPoolActive = _flag
  
    if not _flag:
        self.isPoolInvesting = False

        log InvestingStatusChanged(
            erc20TokenContract,
            False,
            erc20TokenContract
        )

    if _flag and not self.isPoolInvesting and self._poolHasFundsToInvestAfterWithdraw(0):
        self.isPoolInvesting = True

        log InvestingStatusChanged(
            erc20TokenContract,
            True,
            erc20TokenContract
        )

    log ContractStatusChanged(
        erc20TokenContract,
        _flag,
        erc20TokenContract
    )


@external
def deprecate():
    assert msg.sender == self.owner, "msg.sender is not the owner"
    assert not self.isPoolDeprecated, "pool is already deprecated"

    self.isPoolDeprecated = True
    self.isPoolActive = False
    self.isPoolInvesting = False

    log ContractStatusChanged(
        erc20TokenContract,
        False,
        erc20TokenContract
    )

    log InvestingStatusChanged(
        erc20TokenContract,
        False,
        erc20TokenContract
    )

    log ContractDeprecated(
        erc20TokenContract,
        erc20TokenContract
    )


@external
def deposit(_amount: uint256):

    """
    @notice Deposits the given amount of the ERC20 in the lending pool
    @dev Logs the `Deposit` event
    @param _amount Value to deposit
    """

    assert self._fundsAreAllowed(msg.sender, self.lendingPoolCoreContract, _amount), "not enough funds allowed"
    self._deposit(_amount, msg.sender)



@external
@payable
def depositEth():

    """
    @notice Deposits the sent amount in the lending pool
    @dev Logs the `Deposit` event
    """

    log PaymentReceived(msg.sender, msg.sender, msg.value)

    self._wrap_and_approve(self.lendingPoolCoreContract, msg.value)
    self._deposit(msg.value, self)


@external
def withdraw(_amount: uint256):
    """
    @notice Withdrawals the given amount of ERC20 from the lending pool
    @dev Logs the `Withdrawal` and, if it changes the pools investing status, the `InvestingStatusChanged` events
    @param _amount Value to withdraw
    """
    self._withdraw(_amount, msg.sender)


@external
def withdrawEth(_amount: uint256):
    """
    @notice Withdrawals the given amount of ETH from the lending pool
    @dev Logs the `Withdrawal` and, if it changes the pools investing status, the `InvestingStatusChanged` events
    @param _amount Value to withdraw in wei
    """
    self._withdraw(_amount, self)
    self._unwrap_and_send(msg.sender, _amount)



@external
def sendFunds(_to: address, _amount: uint256):
    """
    @notice Sends funds in the pool ERC20 to a borrower as part of a loan creation
    @dev Logs the `FundsTransfer` and, if it changes the pools investing status, the `InvestingStatusChanged` events
    @param _to The wallet address to transfer the funds to
    @param _amount Value to transfer
    """

    self._sendFunds(_to, _to, _amount)


@external
def sendFundsEth(_to: address, _amount: uint256):
    """
    @notice Sends funds in ETH to a borrower as part of a loan creation
    @dev Logs the `FundsTransfer` and, if it changes the pools investing status, the `InvestingStatusChanged` events
    @param _to The wallet address to transfer the funds to
    @param _amount Value to transfer in wei
    """

    self._sendFunds(_to, self, _amount)
    self._unwrap_and_send(_to, _amount)


@payable
@external
def receiveFundsEth(_borrower: address, _amount: uint256, _rewardsAmount: uint256):

    """
    @notice Receive funds in ETH from a borrower as part of a loan payment
    @dev Logs the `FundsReceipt` and, if it changes the pools investing status, the `InvestingStatusChanged` events
    @param _borrower The wallet address to receive the funds from
    @param _amount Value of the loans principal to receive in wei
    @param _rewardsAmount Value of the loans interest (including the protocol fee share) to receive in wei
    """

    _received_amount: uint256 = msg.value
    assert _received_amount > 0, "amount should be higher than 0"
    assert _received_amount == _amount + _rewardsAmount, "recv amount not match partials"

    log PaymentReceived(msg.sender, msg.sender, _amount + _rewardsAmount)

    self._wrap_and_approve(self.lendingPoolCoreContract, _received_amount)
    self._receiveFunds(_borrower, self, _amount, _rewardsAmount)


@external
def receiveFunds(_borrower: address, _amount: uint256, _rewardsAmount: uint256):

    """
    @notice Receive funds in the pool ERC20 from a borrower as part of a loan payment
    @dev Logs the `FundsReceipt` and, if it changes the pools investing status, the `InvestingStatusChanged` events
    @param _borrower The wallet address to receive the funds from
    @param _amount Value of the loans principal to receive
    @param _rewardsAmount Value of the loans interest (including the protocol fee share) to receive
    """

    assert self._fundsAreAllowed(_borrower, self.lendingPoolCoreContract, _amount + _rewardsAmount), "insufficient liquidity"
    self._receiveFunds(_borrower, _borrower, _amount, _rewardsAmount)


@external
def receiveFundsFromLiquidation(
    _borrower: address,
    _amount: uint256,
    _rewardsAmount: uint256,
    _distributeToProtocol: bool,
    _investedAmount: uint256,
    _origin: String[30]
):

    """
    @notice Receive funds from a liquidation in the pool ERC20
    @dev Logs the `FundsReceipt` and, if it changes the pools investing status, the `InvestingStatusChanged` events
    @param _borrower The wallet address to receive the funds from
    @param _amount Value of the loans principal to receive
    @param _rewardsAmount Value of the rewards after liquidation (including the protocol fee share) to receive
    @param _distributeToProtocol Wether to distribute the protocol fees or not
    @param _origin Identification of the liquidation method
    """

    assert self._fundsAreAllowed(_borrower, self.lendingPoolCoreContract, _amount + _rewardsAmount), "insufficient liquidity"
    self._receiveFundsFromLiquidation(_borrower, _borrower, _amount, _rewardsAmount, _distributeToProtocol, _investedAmount, _origin)


@payable
@external
def receiveFundsFromLiquidationEth(
    _borrower: address,
    _amount: uint256,
    _rewardsAmount: uint256,
    _distributeToProtocol: bool,
    _investedAmount: uint256,
    _origin: String[30]
):

    """
    @notice Receive funds from a liquidation in ETH
    @dev Logs the `FundsReceipt` and, if it changes the pools investing status, the `InvestingStatusChanged` events
    @param _borrower The wallet address to receive the funds from
    @param _amount Value of the loans principal to receive in wei
    @param _rewardsAmount Value of the rewards after liquidation (including the protocol fee share) to receive in wei
    @param _distributeToProtocol Wether to distribute the protocol fees or not
    @param _origin Identification of the liquidation method
    """

    receivedAmount: uint256 = msg.value

    assert receivedAmount == _amount + _rewardsAmount, "recv amount not match partials"

    log PaymentReceived(msg.sender, msg.sender, receivedAmount)

    self._wrap_and_approve(self.lendingPoolCoreContract, receivedAmount)
    self._receiveFundsFromLiquidation(_borrower, self, _amount, _rewardsAmount, _distributeToProtocol, _investedAmount, _origin)

Contract Security Audit

Contract ABI

[{"name":"OwnerProposed","inputs":[{"name":"ownerIndexed","type":"address","indexed":true},{"name":"proposedOwnerIndexed","type":"address","indexed":true},{"name":"owner","type":"address","indexed":false},{"name":"proposedOwner","type":"address","indexed":false},{"name":"erc20TokenContract","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"OwnershipTransferred","inputs":[{"name":"ownerIndexed","type":"address","indexed":true},{"name":"proposedOwnerIndexed","type":"address","indexed":true},{"name":"owner","type":"address","indexed":false},{"name":"proposedOwner","type":"address","indexed":false},{"name":"erc20TokenContract","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"MaxCapitalEfficiencyChanged","inputs":[{"name":"erc20TokenContractIndexed","type":"address","indexed":true},{"name":"currentValue","type":"uint256","indexed":false},{"name":"newValue","type":"uint256","indexed":false},{"name":"erc20TokenContract","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"ProtocolWalletChanged","inputs":[{"name":"erc20TokenContractIndexed","type":"address","indexed":true},{"name":"currentValue","type":"address","indexed":false},{"name":"newValue","type":"address","indexed":false},{"name":"erc20TokenContract","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"ProtocolFeesShareChanged","inputs":[{"name":"erc20TokenContractIndexed","type":"address","indexed":true},{"name":"currentValue","type":"uint256","indexed":false},{"name":"newValue","type":"uint256","indexed":false},{"name":"erc20TokenContract","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"LoansPeripheralAddressSet","inputs":[{"name":"erc20TokenContractIndexed","type":"address","indexed":true},{"name":"currentValue","type":"address","indexed":false},{"name":"newValue","type":"address","indexed":false},{"name":"erc20TokenContract","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"LiquidationsPeripheralAddressSet","inputs":[{"name":"erc20TokenContractIndexed","type":"address","indexed":true},{"name":"currentValue","type":"address","indexed":false},{"name":"newValue","type":"address","indexed":false},{"name":"erc20TokenContract","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"LiquidityControlsAddressSet","inputs":[{"name":"erc20TokenContractIndexed","type":"address","indexed":true},{"name":"currentValue","type":"address","indexed":false},{"name":"newValue","type":"address","indexed":false},{"name":"erc20TokenContract","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"WhitelistStatusChanged","inputs":[{"name":"erc20TokenContractIndexed","type":"address","indexed":true},{"name":"value","type":"bool","indexed":false},{"name":"erc20TokenContract","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"WhitelistAddressAdded","inputs":[{"name":"erc20TokenContractIndexed","type":"address","indexed":true},{"name":"value","type":"address","indexed":false},{"name":"erc20TokenContract","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"WhitelistAddressRemoved","inputs":[{"name":"erc20TokenContractIndexed","type":"address","indexed":true},{"name":"value","type":"address","indexed":false},{"name":"erc20TokenContract","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"ContractStatusChanged","inputs":[{"name":"erc20TokenContractIndexed","type":"address","indexed":true},{"name":"value","type":"bool","indexed":false},{"name":"erc20TokenContract","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"InvestingStatusChanged","inputs":[{"name":"erc20TokenContractIndexed","type":"address","indexed":true},{"name":"value","type":"bool","indexed":false},{"name":"erc20TokenContract","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"ContractDeprecated","inputs":[{"name":"erc20TokenContractIndexed","type":"address","indexed":true},{"name":"erc20TokenContract","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"Deposit","inputs":[{"name":"walletIndexed","type":"address","indexed":true},{"name":"wallet","type":"address","indexed":false},{"name":"amount","type":"uint256","indexed":false},{"name":"erc20TokenContract","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"Withdrawal","inputs":[{"name":"walletIndexed","type":"address","indexed":true},{"name":"wallet","type":"address","indexed":false},{"name":"amount","type":"uint256","indexed":false},{"name":"erc20TokenContract","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"FundsTransfer","inputs":[{"name":"walletIndexed","type":"address","indexed":true},{"name":"wallet","type":"address","indexed":false},{"name":"amount","type":"uint256","indexed":false},{"name":"erc20TokenContract","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"FundsReceipt","inputs":[{"name":"walletIndexed","type":"address","indexed":true},{"name":"wallet","type":"address","indexed":false},{"name":"amount","type":"uint256","indexed":false},{"name":"rewardsPool","type":"uint256","indexed":false},{"name":"rewardsProtocol","type":"uint256","indexed":false},{"name":"investedAmount","type":"uint256","indexed":false},{"name":"erc20TokenContract","type":"address","indexed":false},{"name":"fundsOrigin","type":"string","indexed":false}],"anonymous":false,"type":"event"},{"name":"PaymentSent","inputs":[{"name":"walletIndexed","type":"address","indexed":true},{"name":"wallet","type":"address","indexed":false},{"name":"amount","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"PaymentReceived","inputs":[{"name":"walletIndexed","type":"address","indexed":true},{"name":"wallet","type":"address","indexed":false},{"name":"amount","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"stateMutability":"view","type":"function","name":"maxFundsInvestable","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"theoreticalMaxFundsInvestable","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"theoreticalMaxFundsInvestableAfterDeposit","inputs":[{"name":"_amount","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"lenderFunds","inputs":[{"name":"_lender","type":"address"}],"outputs":[{"name":"","type":"tuple","components":[{"name":"currentAmountDeposited","type":"uint256"},{"name":"totalAmountDeposited","type":"uint256"},{"name":"totalAmountWithdrawn","type":"uint256"},{"name":"sharesBasisPoints","type":"uint256"},{"name":"activeForRewards","type":"bool"}]}]},{"stateMutability":"view","type":"function","name":"lockedAmount","inputs":[{"name":"_lender","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"nonpayable","type":"constructor","inputs":[{"name":"_lendingPoolCoreContract","type":"address"},{"name":"_lendingPoolLockContract","type":"address"},{"name":"_erc20TokenContract","type":"address"},{"name":"_protocolWallet","type":"address"},{"name":"_protocolFeesShare","type":"uint256"},{"name":"_maxCapitalEfficienty","type":"uint256"},{"name":"_whitelistEnabled","type":"bool"}],"outputs":[]},{"stateMutability":"payable","type":"fallback"},{"stateMutability":"nonpayable","type":"function","name":"proposeOwner","inputs":[{"name":"_address","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"claimOwnership","inputs":[],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"changeMaxCapitalEfficiency","inputs":[{"name":"_value","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"changeProtocolWallet","inputs":[{"name":"_address","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"changeProtocolFeesShare","inputs":[{"name":"_value","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"setLoansPeripheralAddress","inputs":[{"name":"_address","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"setLiquidationsPeripheralAddress","inputs":[{"name":"_address","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"setLiquidityControlsAddress","inputs":[{"name":"_address","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"changeWhitelistStatus","inputs":[{"name":"_flag","type":"bool"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"addWhitelistedAddress","inputs":[{"name":"_address","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"removeWhitelistedAddress","inputs":[{"name":"_address","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"changePoolStatus","inputs":[{"name":"_flag","type":"bool"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"deprecate","inputs":[],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"deposit","inputs":[{"name":"_amount","type":"uint256"}],"outputs":[]},{"stateMutability":"payable","type":"function","name":"depositEth","inputs":[],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"withdraw","inputs":[{"name":"_amount","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"withdrawEth","inputs":[{"name":"_amount","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"sendFunds","inputs":[{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"sendFundsEth","inputs":[{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"outputs":[]},{"stateMutability":"payable","type":"function","name":"receiveFundsEth","inputs":[{"name":"_borrower","type":"address"},{"name":"_amount","type":"uint256"},{"name":"_rewardsAmount","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"receiveFunds","inputs":[{"name":"_borrower","type":"address"},{"name":"_amount","type":"uint256"},{"name":"_rewardsAmount","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"receiveFundsFromLiquidation","inputs":[{"name":"_borrower","type":"address"},{"name":"_amount","type":"uint256"},{"name":"_rewardsAmount","type":"uint256"},{"name":"_distributeToProtocol","type":"bool"},{"name":"_investedAmount","type":"uint256"},{"name":"_origin","type":"string"}],"outputs":[]},{"stateMutability":"payable","type":"function","name":"receiveFundsFromLiquidationEth","inputs":[{"name":"_borrower","type":"address"},{"name":"_amount","type":"uint256"},{"name":"_rewardsAmount","type":"uint256"},{"name":"_distributeToProtocol","type":"bool"},{"name":"_investedAmount","type":"uint256"},{"name":"_origin","type":"string"}],"outputs":[]},{"stateMutability":"view","type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"proposedOwner","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"loansContract","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"lendingPoolCoreContract","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"lendingPoolLockContract","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"erc20TokenContract","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"liquidationsPeripheralContract","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"liquidityControlsContract","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"protocolWallet","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"protocolFeesShare","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"maxCapitalEfficienty","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"isPoolActive","inputs":[],"outputs":[{"name":"","type":"bool"}]},{"stateMutability":"view","type":"function","name":"isPoolDeprecated","inputs":[],"outputs":[{"name":"","type":"bool"}]},{"stateMutability":"view","type":"function","name":"isPoolInvesting","inputs":[],"outputs":[{"name":"","type":"bool"}]},{"stateMutability":"view","type":"function","name":"whitelistEnabled","inputs":[],"outputs":[{"name":"","type":"bool"}]},{"stateMutability":"view","type":"function","name":"whitelistedAddresses","inputs":[{"name":"arg0","type":"address"}],"outputs":[{"name":"","type":"bool"}]}]

Deployed Bytecode

0x6003361161000c576122b7565b60003560e01c63439370b1811861007d5760043610613f5a57337f45fdc265dc29885b9a485766b03e70978440d38c7c328ee0a14fa40c76c6af54336102c052346102e05260406102c0a260035460405234606052610069613e86565b3461014052306101605261007b6129a6565b005b6312d8f916811861020f5760643610613f5a576004358060a01c613f5a5761048052346104a0526104a05161011257601e6104c0527f616d6f756e742073686f756c6420626520686967686572207468616e203000006104e0526104c0506104c051806104e001601f826000031636823750506308c379a06104805260206104a052601f19601f6104c051011660440161049cfd5b602435604435808201828110613f5a57905090506104a051181561019657601e6104c0527f7265637620616d6f756e74206e6f74206d61746368207061727469616c7300006104e0526104c0506104c051806104e001601f826000031636823750506308c379a06104805260206104a052601f19601f6104c051011660440161049cfd5b337f45fdc265dc29885b9a485766b03e70978440d38c7c328ee0a14fa40c76c6af54336104c052602435604435808201828110613f5a57905090506104e05260406104c0a26003546040526104a0516060526101f0613e86565b6104805161038052306103a052604060246103c03761020d6139db565b005b63243ee75d81186103765760e43610613f5a576004358060a01c613f5a576104c0526064358060011c613f5a576104e05260a435600401601e813511613f5a5780358061050052602082018035610520525050503461054052602435604435808201828110613f5a57905090506105405118156102ec57601e610560527f7265637620616d6f756e74206e6f74206d61746368207061727469616c7300006105805261056050610560518061058001601f826000031636823750506308c379a061052052602061054052601f19601f61056051011660440161053cfd5b337f45fdc265dc29885b9a485766b03e70978440d38c7c328ee0a14fa40c76c6af54336105605261054051610580526040610560a260035460405261054051606052610336613e86565b6104c05161038052306103a052604060246103c0376104e0516104005260843561042052610500518061044052610520516104605250610374613bf5565b005b63172b8500811861039e5760043610613f5a5734613f5a57602061039a60c06126dd565b60c0f35b632b90f8da81186103cb5760043610613f5a5734613f5a57602060006040526103c760e06127bc565b60e0f35b63ef595e5981186103f95760243610613f5a5734613f5a5760206004356040526103f560e06127bc565b60e0f35b633a89ced181186104865760243610613f5a576004358060a01c613f5a5760405234613f5a5760a060035463e2ae93fb60605260405160805260a060606024607c845afa61044c573d600060003e3d6000fd5b60a03d10613f5a57606051610120526080516101405260a0516101605260c0516101805260e0518060011c613f5a576101a0526101209050f35b63a153e70881186105625760243610613f5a576004358060a01c613f5a5760405234613f5a57600654635fd05249606052602060606004607c845afa6104d1573d600060003e3d6000fd5b60203d10613f5a576060518060011c613f5a5760a05260a09050516104fe57600060c052602060c0610560565b60045463ebdef1d360a05260405160c052604060a0602460bc845afa610529573d600060003e3d6000fd5b60403d10613f5a5760a09050805160605260208101516080525042606051101561055b57600060a052602060a0610560565b602060805bf35b63b5ed298a81186107715760243610613f5a576004358060a01c613f5a5760405234613f5a576000543318156105ef57601b6060527f6d73672e73656e646572206973206e6f7420746865206f776e6572000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b60405161065357601c6060527f5f6164647265737320697420746865207a65726f20616464726573730000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b604051600054186106bb5760206060527f70726f706f736564206f776e6572206164647220697320746865206f776e657260805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b6040516001541861072357601f6060527f70726f706f736564206f776e65722061646472206973207468652073616d650060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b6040516001556040516000547fb4c8aadbed5e1d6c2b41b85b2a233853a33c3f9284159abad98bf7d24d5a6f746000546060526040516080526020613f6c60003960005160a05260606060a3005b634e71e0c881186108435760043610613f5a5734613f5a576001543318156107f057601e6040527f6d73672e73656e646572206973206e6f74207468652070726f706f736564000060605260405060405180606001601f826000031636823750506308c379a06000526020602052601f19601f6040510116604401601cfd5b6001546000547fd5b903f8ba0e47f8a7bfe27b5098230bd3900b46d8b430e37480be7096ca7f6d6000546040526001546060526020613f6c60003960005160805260606040a36001546000556000600155005b63521dafde81186109e65760243610613f5a5734613f5a576000543318156108c257601b6040527f6d73672e73656e646572206973206e6f7420746865206f776e6572000000000060605260405060405180606001601f826000031636823750506308c379a06000526020602052601f19601f6040510116604401601cfd5b612710600435111561092b57601d6040527f6361706974616c2065666620657863656564732031303030302062707300000060605260405060405180606001601f826000031636823750506308c379a06000526020602052601f19601f6040510116604401601cfd5b600954600435186109935760156040527f6e65772076616c7565206973207468652073616d65000000000000000000000060605260405060405180606001601f826000031636823750506308c379a06000526020602052601f19601f6040510116604401601cfd5b6020613f6c6000396000517fb491624c5a1516b49b90734511615a87e4ded5220ea4f9dffbc445e1e729feb06009546040526004356060526020613f6c60003960005160805260606040a2600435600955005b6302df8fb28118610b925760243610613f5a576004358060a01c613f5a5760405234613f5a57600054331815610a7357601b6060527f6d73672e73656e646572206973206e6f7420746865206f776e6572000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b604051610ad757601c6060527f5f6164647265737320697320746865207a65726f20616464726573730000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b60075460405118610b3f5760156060527f6e65772076616c7565206973207468652073616d65000000000000000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b6020613f6c6000396000517f1ea3347149c73008cd0d341805c3c18b7038965560c1190774d3c4de398390bb6007546060526040516080526020613f6c60003960005160a05260606060a2604051600755005b6302888a2b8118610d355760243610613f5a5734613f5a57600054331815610c1157601b6040527f6d73672e73656e646572206973206e6f7420746865206f776e6572000000000060605260405060405180606001601f826000031636823750506308c379a06000526020602052601f19601f6040510116604401601cfd5b6127106004351115610c7a57601c6040527f666565732073686172652065786365656473203130303030206270730000000060605260405060405180606001601f826000031636823750506308c379a06000526020602052601f19601f6040510116604401601cfd5b60085460043518610ce25760156040527f6e65772076616c7565206973207468652073616d65000000000000000000000060605260405060405180606001601f826000031636823750506308c379a06000526020602052601f19601f6040510116604401601cfd5b6020613f6c6000396000517f7890aed53fbf779ec76f35fb1fc7e05b091dd1fed9b766e73fcabe4f45c5010d6008546040526004356060526020613f6c60003960005160805260606040a2600435600855005b632305fe468118610f465760243610613f5a576004358060a01c613f5a5760405234613f5a57600054331815610dc257601b6060527f6d73672e73656e646572206973206e6f7420746865206f776e6572000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b604051610e2657601c6060527f5f6164647265737320697320746865207a65726f20616464726573730000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b6040513b610e8b57601a6060527f5f61646472657373206973206e6f74206120636f6e747261637400000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b60025460405118610ef35760156060527f6e65772076616c7565206973207468652073616d65000000000000000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b6020613f6c6000396000517f0524dd63c4e156d7c3f5cc18e87c0474a724ea2d75c277bab3dc95390ba5e4d16002546060526040516080526020613f6c60003960005160a05260606060a2604051600255005b63dfe5cf4e81186111575760243610613f5a576004358060a01c613f5a5760405234613f5a57600054331815610fd357601b6060527f6d73672e73656e646572206973206e6f7420746865206f776e6572000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b60405161103757601c6060527f5f6164647265737320697320746865207a65726f20616464726573730000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b6040513b61109c57601a6060527f5f61646472657373206973206e6f74206120636f6e747261637400000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b600554604051186111045760156060527f6e65772076616c7565206973207468652073616d65000000000000000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b6020613f6c6000396000517fd5cf3817f09a159f02f30e9ca8842239c472b01ce4ee28c5bd3dae53f1ed71b96005546060526040516080526020613f6c60003960005160a05260606060a2604051600555005b637eefa48781186113685760243610613f5a576004358060a01c613f5a5760405234613f5a576000543318156111e457601b6060527f6d73672e73656e646572206973206e6f7420746865206f776e6572000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b60405161124857601c6060527f5f6164647265737320697320746865207a65726f20616464726573730000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b6040513b6112ad57601a6060527f5f61646472657373206973206e6f74206120636f6e747261637400000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b600654604051186113155760156060527f6e65772076616c7565206973207468652073616d65000000000000000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b6020613f6c6000396000517fc9dff19604a1a239924a95245890bf12b12dec6ce9529c14a187ffae033d63b06006546060526040516080526020613f6c60003960005160a05260606060a2604051600655005b63d2013c9281186114aa5760243610613f5a576004358060011c613f5a5760405234613f5a576000543318156113f557601b6060527f6d73672e73656e646572206973206e6f7420746865206f776e6572000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b604051600d541861145d5760156060527f6e65772076616c7565206973207468652073616d65000000000000000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b604051600d556020613f6c6000396000517fc216c05736611219062f8c847b62cd125972df155448dab8f40dbe52478c667f6040516060526020613f6c60003960005160805260406060a2005b6329975b4381186116cc5760243610613f5a576004358060a01c613f5a5760405234613f5a5760005433181561153757601b6060527f6d73672e73656e646572206973206e6f7420746865206f776e6572000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b60405161159b57601c6060527f5f6164647265737320697320746865207a65726f20616464726573730000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b600d546115ff5760156060527f77686974656c6973742069732064697361626c6564000000000000000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b600e6040516020526000526040600020541561167257601e6060527f6164647265737320697320616c72656164792077686974656c6973746564000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b6001600e6040516020526000526040600020556020613f6c6000396000517f9a314065097149d1b802249c3157f5702a763e7debf83186e71de8961465c3416040516060526020613f6c60003960005160805260406060a2005b63530cd5ab81186118ed5760243610613f5a576004358060a01c613f5a5760405234613f5a5760005433181561175957601b6060527f6d73672e73656e646572206973206e6f7420746865206f776e6572000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b6040516117bd57601c6060527f5f6164647265737320697320746865207a65726f20616464726573730000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b600d546118215760156060527f77686974656c6973742069732064697361626c6564000000000000000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b600e60405160205260005260406000205461189357601a6060527f61646472657373206973206e6f742077686974656c697374656400000000000060805260605060605180608001601f826000031636823750506308c379a06020526020604052601f19601f6060510116604401603cfd5b6000600e6040516020526000526040600020556020613f6c6000396000517fc409716545a0317597926477653ff23c349850a362ee8114c355e9f031cadb176040516060526020613f6c60003960005160805260406060a2005b6308ef62178118611aaf5760243610613f5a576004358060011c613f5a576101405234613f5a5760005433181561198457601b610160527f6d73672e73656e646572206973206e6f7420746865206f776e657200000000006101805261016050610160518061018001601f826000031636823750506308c379a061012052602061014052601f19601f61016051011660440161013cfd5b61014051600a55610140516119e0576000600c556020613f6c6000396000517f9136d07d94f43079b2383d0eba9b902ae8e9daaf38292d3d4645fc53d650ecd26000610160526020613f6c600039600051610180526040610160a25b610140516119ef576000611a12565b600c54611a0f57600060a052611a06610160612582565b61016051611a12565b60005b15611a64576001600c556020613f6c6000396000517f9136d07d94f43079b2383d0eba9b902ae8e9daaf38292d3d4645fc53d650ecd26001610180526020613f6c6000396000516101a0526040610180a25b6020613f6c6000396000517ff1f3fb69901207764e1ded1276f81ef0e7d27d4c937f4290a397554a78b942f261014051610160526020613f6c600039600051610180526040610160a2005b630fcc0c288118611c6b5760043610613f5a5734613f5a57600054331815611b2e57601b6040527f6d73672e73656e646572206973206e6f7420746865206f776e6572000000000060605260405060405180606001601f826000031636823750506308c379a06000526020602052601f19601f6040510116604401601cfd5b600b5415611b9357601a6040527f706f6f6c20697320616c7265616479206465707265636174656400000000000060605260405060405180606001601f826000031636823750506308c379a06000526020602052601f19601f6040510116604401601cfd5b6001600b556000600a556000600c556020613f6c6000396000517ff1f3fb69901207764e1ded1276f81ef0e7d27d4c937f4290a397554a78b942f260006040526020613f6c60003960005160605260406040a26020613f6c6000396000517f9136d07d94f43079b2383d0eba9b902ae8e9daaf38292d3d4645fc53d650ecd260006040526020613f6c60003960005160605260406040a26020613f6c6000396000517fdd10c817d080a89ad8dd5d6c365f18b6eed6b4c4c66bd37933429277d3ae3da76020613f6c60003960005160405260206040a2005b63b6b55f258118611d225760243610613f5a5734613f5a5733604052600354606052600435608052611c9e6102c0612357565b6102c051611d0c5760186102e0527f6e6f7420656e6f7567682066756e647320616c6c6f7765640000000000000000610300526102e0506102e0518061030001601f826000031636823750506308c379a06102a05260206102c052601f19601f6102e05101166044016102bcfd5b600435610140523361016052611d206129a6565b005b632e1a7d4d8118611d505760243610613f5a5734613f5a57600435610140523361016052611d4e612e57565b005b63c311d0498118611d905760243610613f5a5734613f5a57600435610140523061016052611d7c612e57565b33604052600435606052611d8e613dfc565b005b636f64234e8118611dd85760443610613f5a576004358060a01c613f5a576102605234613f5a576102605161014052610260516101605260243561018052611dd6613279565b005b638396b88a8118611e325760443610613f5a576004358060a01c613f5a576102605234613f5a576102605161014052306101605260243561018052611e1b613279565b61026051604052602435606052611e30613dfc565b005b6315e7c65a8118611f185760643610613f5a576004358060a01c613f5a576104805234613f5a5761048051604052600354606052602435604435808201828110613f5a5790509050608052611e886104a0612357565b6104a051611ef65760166104c0527f696e73756666696369656e74206c6971756964697479000000000000000000006104e0526104c0506104c051806104e001601f826000031636823750506308c379a06104805260206104a052601f19601f6104c051011660440161049cfd5b6104805161038052610480516103a052604060246103c037611f166139db565b005b63d484551181186120515760e43610613f5a576004358060a01c613f5a576104c0526064358060011c613f5a576104e05260a435600401601e813511613f5a57803580610500526020820180356105205250505034613f5a576104c051604052600354606052602435604435808201828110613f5a5790509050608052611fa0610540612357565b6105405161200e576016610560527f696e73756666696369656e74206c6971756964697479000000000000000000006105805261056050610560518061058001601f826000031636823750506308c379a061052052602061054052601f19601f61056051011660440161053cfd5b6104c051610380526104c0516103a052604060246103c0376104e051610400526084356104205261050051806104405261052051610460525061204f613bf5565b005b638da5cb5b81186120755760043610613f5a5734613f5a5760005460405260206040f35b63d153b60c81186120995760043610613f5a5734613f5a5760015460405260206040f35b6399c91fc481186120bd5760043610613f5a5734613f5a5760025460405260206040f35b63a6def0a081186120e15760043610613f5a5734613f5a5760035460405260206040f35b632c57b1fb81186121055760043610613f5a5734613f5a5760045460405260206040f35b63856e848881186121315760043610613f5a5734613f5a576020613f6c60003960005160405260206040f35b638f00990681186121555760043610613f5a5734613f5a5760055460405260206040f35b63bfe767ea81186121795760043610613f5a5734613f5a5760065460405260206040f35b6306d6e63f811861219d5760043610613f5a5734613f5a5760075460405260206040f35b63afda13e981186121c15760043610613f5a5734613f5a5760085460405260206040f35b63af3f081c81186121e55760043610613f5a5734613f5a5760095460405260206040f35b63df868ed381186122095760043610613f5a5734613f5a57600a5460405260206040f35b63e76977e8811861222d5760043610613f5a5734613f5a57600b5460405260206040f35b63ab8f5b3c81186122515760043610613f5a5734613f5a57600c5460405260206040f35b6351fb012d81186122755760043610613f5a5734613f5a57600d5460405260206040f35b6306c933d881186122b55760243610613f5a576004358060a01c613f5a5760405234613f5a57600e60405160205260005260406000205460605260206060f35b505b6020613f6c60003960005133181561232657601f6040527f6d73672e73656e646572206973206e6f7420746865205745544820616464720060605260405060405180606001601f826000031636823750506308c379a06000526020602052601f19601f6040510116604401601cfd5b337f45fdc265dc29885b9a485766b03e70978440d38c7c328ee0a14fa40c76c6af54336040523460605260406040a2005b6020613f6c60003960005163dd62ed3e60c05260405160e05260605161010052602060c0604460dc845afa612391573d600060003e3d6000fd5b60203d10613f5a5760c090505160a05260a0516080511115815250565b604051606051808201828110613f5a57905090506123d057600081525061240e565b608051606051612710810281612710820418613f5a579050604051606051808201828110613f5a57905090508015613f5a5780820490509050108152505b565b600354634fe0bd1e60e052602060e0600460fc845afa612435573d600060003e3d6000fd5b60203d10613f5a5760e090505160a051808201828110613f5a579050905060c052600354630c042367610100526020610100600461011c845afa61247e573d600060003e3d6000fd5b60203d10613f5a5761010090505160e05260c05160405260e0516060526009546080526124ac6101006123ae565b61010051815250565b600354634fe0bd1e610100526020610100600461011c845afa6124dd573d600060003e3d6000fd5b60203d10613f5a5761010090505160a051808201828110613f5a579050905060c051808201828110613f5a579050905060e052600354630c042367610120526020610120600461013c845afa612538573d600060003e3d6000fd5b60203d10613f5a5761012090505160a051808203828111613f5a57905090506101005260e051604052610100516060526009546080526125796101206123ae565b61012051815250565b600354634fe0bd1e60e052602060e0600460fc845afa6125a7573d600060003e3d6000fd5b60203d10613f5a5760e090505160a051808203828111613f5a579050905060c052600354630c042367610100526020610100600461011c845afa6125f0573d600060003e3d6000fd5b60203d10613f5a5761010090505160e05260c05160405260e05160605260095460805261261e6101006123ae565b61010051815250565b600354634fe0bd1e60e052602060e0600460fc845afa61264c573d600060003e3d6000fd5b60203d10613f5a5760e090505160a051808203828111613f5a579050905060c052600354630c042367610100526020610100600461011c845afa612695573d600060003e3d6000fd5b60203d10613f5a5761010090505160a051808201828110613f5a579050905060e05260c05160405260e0516060526009546080526126d46101006123ae565b61010051815250565b600354634fe0bd1e606052602060606004607c845afa612702573d600060003e3d6000fd5b60203d10613f5a576060905051604052600354630c042367608052602060806004609c845afa612737573d600060003e3d6000fd5b60203d10613f5a576080905051606052604051606051808201828110613f5a579050905060095480612710036127108111613f5a579050808202811583838304141715613f5a57905090506127108104905060805260405160805111156127a25760008152506127ba565b604051608051808203828111613f5a57905090508152505b565b600354634fe0bd1e608052602060806004609c845afa6127e1573d600060003e3d6000fd5b60203d10613f5a576080905051606052600354630c04236760a052602060a0600460bc845afa612816573d600060003e3d6000fd5b60203d10613f5a5760a0905051608052606051608051808201828110613f5a5790509050604051808201828110613f5a5790509050600954808202811583838304141715613f5a5790509050612710810490508152505661287c573d600060003e3d6000fd5b60403d10613f5a57608090505160605242606051116128da57426006546337f5c136608052602060806004609c845afa6128bb573d600060003e3d6000fd5b60203d10613f5a576080905051808201828110613f5a57905090506060525b606051815250565b60045463ebdef1d360c0523360e052604060c0602460dc845afa61290b573d600060003e3d6000fd5b60403d10613f5a5760c090508051608052602081015160a0525042608051111561295757608051815260a051606051808201828110613f5a57905090506020820152506129a4566129a4565b426006546337f5c13660c052602060c0600460dc845afa61297d573d600060003e3d6000fd5b60203d10613f5a5760c0905051808201828110613f5a579050905081526060516020820152505b565b600b5415612a1457601c610180527f706f6f6c20697320646570726563617465642c207769746864726177000000006101a0526101805061018051806101a001601f826000031636823750506308c379a061014052602061016052601f19601f61018051011660440161015cfd5b600a54612a8157601c610180527f706f6f6c206973206e6f7420616374697665207269676874206e6f77000000006101a0526101805061018051806101a001601f826000031636823750506308c379a061014052602061016052601f19601f61018051011660440161015cfd5b61014051612aef57601f610180527f5f616d6f756e742068617320746f20626520686967686572207468616e2030006101a0526101805061018051806101a001601f826000031636823750506308c379a061014052602061016052601f19601f61018051011660440161015cfd5b60065463a1cdb11a6101a052336101c052610140516101e05230610200526003546102205261014051604052612b266101806127bc565b610180516102405260206101a060a46101bc845afa612b4a573d600060003e3d6000fd5b60203d10613f5a576101a0518060011c613f5a5761026052610260905051612bd2576018610280527f6d617820706f6f6c2073686172652073757270617373656400000000000000006102a0526102805061028051806102a001601f826000031636823750506308c379a061024052602061026052601f19601f61028051011660440161025cfd5b600d54612be0576000612bf1565b600e33602052600052604060002054155b15612c5c57601d610180527f6d73672e73656e646572206973206e6f742077686974656c69737465640000006101a0526101805061018051806101a001601f826000031636823750506308c379a061014052602061016052601f19601f61018051011660440161015cfd5b600c54612c7e576101405160a052612c75610180612410565b61018051612c81565b60005b15612cd3576001600c556020613f6c6000396000517f9136d07d94f43079b2383d0eba9b902ae8e9daaf38292d3d4645fc53d650ecd260016101a0526020613f6c6000396000516101c05260406101a0a25b604036610180373360405261014051606052612cf06101c06128e2565b6101c080516101805260208101516101a05250600354638340f5496101c052336101e0526101605161020052610140516102205260206101c060646101dc6000855af1612d42573d600060003e3d6000fd5b60203d10613f5a576101c0518060011c613f5a5761024052610240905051612dca576016610260527f6572726f72206372656174696e67206465706f736974000000000000000000006102805261026050610260518061028001601f826000031636823750506308c379a061022052602061024052601f19601f61026051011660440161023cfd5b60045463daa77c396101c052336101e0526101a051610200526101805161022052803b15613f5a5760006101c060646101dc6000855af1612e10573d600060003e3d6000fd5b50337f364bb76a44233df8584c690de6da7810626a5e77192f3ebc942c35bcb1add24f336101c052610140516101e0526020613f6c6000396000516102005260606101c0a2565b61014051612ec557601f610180527f5f616d6f756e742068617320746f20626520686967686572207468616e2030006101a0526101805061018051806101a001601f826000031636823750506308c379a061014052602061016052601f19601f61018051011660440161015cfd5b60035463679a613c6101a052336101c05260206101a060246101bc845afa612ef2573d600060003e3d6000fd5b60203d10613f5a576101a09050516101805261014051610180511015612f7857601e6101a0527f5f616d6f756e74206d6f7265207468616e20776974686472617761626c6500006101c0526101a0506101a051806101c001601f826000031636823750506308c379a061016052602061018052601f19601f6101a051011660440161017cfd5b600654632381cbd46101a052336101c0526101805161014051808203828111613f5a57905090506101e0526004546102005260206101a060646101bc845afa612fc6573d600060003e3d6000fd5b60203d10613f5a576101a0518060011c613f5a576102205261022090505161304e57601b610240527f77697468647261772077697468696e206c6f636b20706572696f6400000000006102605261024050610240518061026001601f826000031636823750506308c379a061020052602061022052601f19601f61024051011660440161021cfd5b61014051600354634fe0bd1e6101a05260206101a060046101bc845afa61307a573d600060003e3d6000fd5b60203d10613f5a576101a090505110156130f45760206101e0527f617661696c61626c652066756e6473206c657373207468616e20616d6f756e74610200526101e0506101e0518061020001601f826000031636823750506308c379a06101a05260206101c052601f19601f6101e05101166044016101bcfd5b600c5461310257600061311a565b6101405160a0526131146101a0612582565b6101a051155b1561316c576000600c556020613f6c6000396000517f9136d07d94f43079b2383d0eba9b902ae8e9daaf38292d3d4645fc53d650ecd260006101c0526020613f6c6000396000516101e05260406101c0a25b60035463d9caed126101a052336101c052610160516101e052610140516102005260206101a060646101bc6000855af16131ab573d600060003e3d6000fd5b60203d10613f5a576101a0518060011c613f5a5761022052610220905051613233576017610240527f6572726f72207769746864726177696e672066756e64730000000000000000006102605261024050610240518061026001601f826000031636823750506308c379a061020052602061022052601f19601f61024051011660440161021cfd5b337ff695acaf5d7d7346d00d5877a9b12de569a2d4957907b6dac09986f9070ddefd336101a052610140516101c0526020613f6c6000396000516101e05260606101a0a2565b600b54156132e75760126101a0527f706f6f6c206973206465707265636174656400000000000000000000000000006101c0526101a0506101a051806101c001601f826000031636823750506308c379a061016052602061018052601f19601f6101a051011660440161017cfd5b600a546133545760106101a0527f706f6f6c20697320696e616374697665000000000000000000000000000000006101c0526101a0506101a051806101c001601f826000031636823750506308c379a061016052602061018052601f19601f6101a051011660440161017cfd5b600c546133c15760176101a0527f6d6178206361706974616c2065666620726561636865640000000000000000006101c0526101a0506101a051806101c001601f826000031636823750506308c379a061016052602061018052601f19601f6101a051011660440161017cfd5b6002543318156134315760206101a0527f6d73672e73656e646572206973206e6f7420746865206c6f616e7320616464726101c0526101a0506101a051806101c001601f826000031636823750506308c379a061016052602061018052601f19601f6101a051011660440161017cfd5b6101405161349f5760176101a0527f5f746f20697320746865207a65726f20616464726573730000000000000000006101c0526101a0506101a051806101c001601f826000031636823750506308c379a061016052602061018052601f19601f6101a051011660440161017cfd5b6101805161350d57601f6101a0527f5f616d6f756e742068617320746f20626520686967686572207468616e2030006101c0526101a0506101a051806101c001601f826000031636823750506308c379a061016052602061018052601f19601f6101a051011660440161017cfd5b6135186101a06126dd565b6101a05161018051111561358c5760166101c0527f696e73756666696369656e74206c6971756964697479000000000000000000006101e0526101c0506101c051806101e001601f826000031636823750506308c379a06101805260206101a052601f19601f6101c051011660440161019cfd5b600c5461359a5760006135b2565b6101805160a0526135ac6101a0612627565b6101a051155b15613604576000600c556020613f6c6000396000517f9136d07d94f43079b2383d0eba9b902ae8e9daaf38292d3d4645fc53d650ecd260006101c0526020613f6c6000396000516101e05260406101c0a25b600354636f64234e6101a052610160516101c052610180516101e05260206101a060446101bc6000855af161363e573d600060003e3d6000fd5b60203d10613f5a576101a0518060011c613f5a57610200526102009050516136c657601d610220527f6572726f722073656e64696e672066756e647320696e204c50436f72650000006102405261022050610220518061024001601f826000031636823750506308c379a06101e052602061020052601f19601f6102205101166044016101fcfd5b610140517fef265aa5ba98d1c64ea9531227080a274c7f2e0adbfb9a36869e5dc6abcab581610140516101a052610180516101c0526020613f6c6000396000516101e05260606101a0a2565b600c5461373b576101a05160a0526101c05160c0526137326102606124b5565b6102605161373e565b60005b15613790576001600c556020613f6c6000396000517f9136d07d94f43079b2383d0eba9b902ae8e9daaf38292d3d4645fc53d650ecd26001610280526020613f6c6000396000516102a0526040610280a25b60035463286ed8f06102605261018051610280526101a0516102a0526101c0516102c052610200516102e0526020610260608461027c6000855af16137da573d600060003e3d6000fd5b60203d10613f5a57610260518060011c613f5a576103005261030090505161386257601f610320527f6572726f7220726563656976696e672066756e647320696e204c50436f7265006103405261032050610320518061034001601f826000031636823750506308c379a06102e052602061030052601f19601f6103205101166044016102fcfd5b6101e05115613934576003546397f5e6fc6102605261018051610280526007546102a0526101e0516102c0526020610260606461027c6000855af16138ac573d600060003e3d6000fd5b60203d10613f5a57610260518060011c613f5a576102e0526102e0905051613934576020610300527f6572726f72207472616e7366657272696e672070726f746f636f6c20666565736103205261030050610300518061032001601f826000031636823750506308c379a06102c05260206102e052601f19601f6103005101166044016102dcfd5b610160517f4e4b33f1df73b91c2a0524eadc8bf09d5f9d41c52697eac2dd50b5848cf2807b60e061016051610260526101a051610280526101c0516102a0526101e0516102c052610200516102e0526020613f6c6000396000516103005280610320528061026001610220518082526020820161024051815250508051806020830101601f82600003163682375050601f19601f82516020010116905081019050610260a2565b600254331815613a4b576020610400527f6d73672e73656e646572206973206e6f7420746865206c6f616e7320616464726104205261040050610400518061042001601f826000031636823750506308c379a06103c05260206103e052601f19601f6104005101166044016103dcfd5b61038051613ab957601d610400527f5f626f72726f77657220697320746865207a65726f20616464726573730000006104205261040050610400518061042001601f826000031636823750506308c379a06103c05260206103e052601f19601f6104005101166044016103dcfd5b6103c0516103e051808201828110613f5a5790509050613b3957601e610400527f616d6f756e742073686f756c6420626520686967686572207468616e203000006104205261040050610400518061042001601f826000031636823750506308c379a06103c05260206103e052601f19601f6104005101166044016103dcfd5b6103e051600854808202811583838304141715613f5a579050905061271081049050610400526103e05161040051808203828111613f5a57905090506104205261038051610160526103a051610180526103c0516101a052610420516101c052610400516101e0526103c051610200526004610440527f6c6f616e00000000000000000000000000000000000000000000000000000000610460526104408051806102205260208201805161024052505050613bf3613712565b565b600554331815613c6557601d610480527f6d73672e73656e646572206973206e6f742074686520424e20616464720000006104a0526104805061048051806104a001601f826000031636823750506308c379a061044052602061046052601f19601f61048051011660440161045cfd5b61038051613cd357601d610480527f5f626f72726f77657220697320746865207a65726f20616464726573730000006104a0526104805061048051806104a001601f826000031636823750506308c379a061044052602061046052601f19601f61048051011660440161045cfd5b6103c0516103e051808201828110613f5a5790509050613d5357601e610480527f616d6f756e742073686f756c6420626520686967686572207468616e203000006104a0526104805061048051806104a001601f826000031636823750506308c379a061044052602061046052601f19601f61048051011660440161045cfd5b6040366104803761040051613d6f576103e0516104a052613db0565b6103e051600854808202811583838304141715613f5a579050905061271081049050610480526103e05161048051808203828111613f5a57905090506104a0525b61038051610160526103a051610180526103c0516101a0526104a0516101c052610480516101e0526104205161020052610440518061022052610460516102405250613dfa613712565b565b6020613f6c600039600051632e1a7d4d60805260605160a052803b15613f5a57600060806024609c6000855af1613e38573d600060003e3d6000fd5b5060006000600060006060516040516000f115613f5a576040517fd52bd61f7c422d441e024604f4517878fd3305d6acf0fe37baef23ed21af6bc960405160805260605160a05260406080a2565b6020613f6c60003960005163d0e30db0608052803b15613f5a57600060806004609c606051855af1613ebd573d600060003e3d6000fd5b506020613f6c6000396000517fd52bd61f7c422d441e024604f4517878fd3305d6acf0fe37baef23ed21af6bc96020613f6c60003960005160805260605160a05260406080a26020613f6c60003960005163095ea7b360805260405160a05260605160c052602060806044609c6000855af1613f3e573d600060003e3d6000fd5b60203d10613f5a576080518060011c613f5a5760e05260e05050565b600080fda165767970657283000307000b000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2

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  ]
[ 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.