Beispiel #1
0
def margin_trading_sov_reward_payment(accounts, loanToken, underlyingToken,
                                      collateralToken, chain, SOV, FeesEvents):
    # preparation
    loan_token_sent = 1e18
    underlyingToken.mint(loanToken.address, loan_token_sent * 3)
    trader = accounts[0]
    underlyingToken.mint(trader, loan_token_sent)
    underlyingToken.approve(loanToken.address, loan_token_sent)
    value = 0

    # send the transaction
    leverage_amount = 2e18
    collateral_sent = 0
    sov_initial_balance = SOV.balanceOf(trader)
    tx = loanToken.marginTrade(
        "0",  #loanId  (0 for new loans)
        leverage_amount,  # leverageAmount
        loan_token_sent,  #loanTokenSent
        collateral_sent,  # no collateral token sent
        collateralToken.address,  #collateralTokenAddress
        trader,  #trader,
        b'',  #loanDataBytes (only required with ether)
        {'value': value})

    tx.info()

    chain.sleep(10 * 24 * 60 * 60)
    chain.mine(1)

    constants = shared.Constants()
    loan_id = constants.ZERO_32  # is zero because is a new loan
    verify_sov_reward_payment(tx, FeesEvents, SOV, trader, loan_id,
                              sov_initial_balance, 1)
Beispiel #2
0
def margin_trading_sending_collateral_tokens_sov_reward_payment(
        trader, loanToken, collateralToken, collateralTokenSent,
        leverageAmount, value, chain, FeesEvents, SOV):
    sov_initial_balance = SOV.balanceOf(trader)
    tx = loanToken.marginTrade(
        "0",  # loanId  (0 for new loans)
        leverageAmount,  # leverageAmount
        0,  # loanTokenSent
        collateralTokenSent,
        collateralToken.address,  # collateralTokenAddress
        trader,  # trader,
        b'',  # loanDataBytes (only required with ether),
        {
            'from': trader,
            'value': value
        })

    tx.info()

    chain.sleep(10 * 24 * 60 * 60)
    chain.mine(1)

    constants = shared.Constants()
    loan_id = constants.ZERO_32  # is zero because is a new loan
    verify_sov_reward_payment(tx, FeesEvents, SOV, trader, loan_id,
                              sov_initial_balance, 1)
def deployLoanToken():
    global deploys, bzx, tokens, constants, addresses, thisNetwork, acct

    thisNetwork = network.show_active()

    if thisNetwork != "testnet":
        raise Exception("Only RSK testnet supported")
    else:  ## thisNetwork == "testnet":
        acct = accounts.load("rskdeployer")
        #careful: hardcoded
        collateralToken = "0x48f7B0E6f3994Ae486a86F03BEbbEA8ae5D3b2f5"

    print("Loaded account", acct)

    print(
        "Deploying LoanTokenLogicStandard   - careful: hardcoded bZx and WEth contracts."
    )
    loanTokenLogic = acct.deploy(LoanTokenLogicStandard)
    _add_contract(loanTokenLogic)

    print("Deploying LoanTokenSettingsLowerAdmin ")
    loanTokenSettings = acct.deploy(LoanTokenSettingsLowerAdmin)
    _add_contract(loanTokenSettings)

    print(
        "Deploying loan token using the loan logic as target for delegate calls"
    )
    loanToken = acct.deploy(LoanToken, loanTokenLogic.address)
    _add_contract(loanToken)

    print("Initialize loanTokenAddress ")
    calldata = loanToken.initialize(
        "0x48f7B0E6f3994Ae486a86F03BEbbEA8ae5D3b2f5", "DAI", "DAI")
    # note: copied initialize  function from token settings to loan token - might cause problems later on
    loanTokenAddress = loanToken.loanTokenAddress()
    print(loanTokenAddress)

    #setting the logic ABI for the loan token contract
    #loanToken = Contract.from_abi("loanToken", address=loanToken.address, abi=LoanTokenSettingsLowerAdmin.abi, owner=acct)
    loanToken = Contract.from_abi("loanToken",
                                  address=loanToken.address,
                                  abi=LoanTokenLogicStandard.abi,
                                  owner=acct)

    print("Setting up Fulcrum.")

    constants = shared.Constants()
    params = []

    data = [
        b"0x0",  ## id
        False,  ## active
        str(acct),  ## owner
        constants.ZERO_ADDRESS,  ## loanToken
        collateralToken,  ## collateralToken. 
        Wei("20 ether"),  ## minInitialMargin
        Wei("15 ether"),  ## maintenanceMargin
        0  ## fixedLoanTerm
    ]

    params.append(data)

    #configure the token settings
    calldata = loanTokenSettings.setupMarginLoanParams.encode_input(params)

    #print(calldata)

    #set the setting contract address at the loan token logic contract (need to load the logic ABI in line 171 to work)
    tx = loanToken.updateSettings(loanTokenSettings.address, calldata,
                                  {"from": acct})
    print(tx.info())
Beispiel #4
0
def deployLoanToken(acct, sovryn, loanTokenAddress, loanTokenSymbol,
                    loanTokenName, collateralAddress, wrbtcAddress):

    print("Deploying LoanTokenLogicStandard")
    if (loanTokenSymbol == 'iWRBTC'):
        loanTokenLogic = acct.deploy(LoanTokenLogicWrbtc)
    else:
        loanTokenLogic = acct.deploy(LoanTokenLogicStandard)
    _add_contract(loanTokenLogic)

    print("Deploying LoanTokenSettingsLowerAdmin for above loan token")
    loanTokenSettings = acct.deploy(LoanTokenSettingsLowerAdmin)
    _add_contract(loanTokenSettings)

    print(
        "Deploying loan token using the loan logic as target for delegate calls"
    )
    loanToken = acct.deploy(LoanToken, acct.address, loanTokenLogic.address,
                            sovryn.address, wrbtcAddress)
    _add_contract(loanToken)

    print("Initialize loanTokenAddress ")
    calldata = loanToken.initialize(
        loanTokenAddress, loanTokenName,
        loanTokenSymbol)  #symbol and name might be mixed up
    # note: copied initialize  function from token settings to loan token - might cause problems later on
    loanTokenAddr = loanToken.loanTokenAddress()
    print(loanTokenAddr)

    #setting the logic ABI for the loan token contract
    #loanToken = Contract.from_abi("loanToken", address=loanToken.address, abi=LoanTokenSettingsLowerAdmin.abi, owner=acct)
    loanToken = Contract.from_abi("loanToken",
                                  address=loanToken.address,
                                  abi=LoanTokenLogicStandard.abi,
                                  owner=acct)
    print("Setting up pool params on protocol.")

    sovryn.setLoanPool([loanToken.address], [loanTokenAddress])

    print("Setting up margin pool params on loan token.")

    constants = shared.Constants()
    params = []

    data = [
        b"0x0",  ## id
        False,  ## active
        str(acct),  ## owner
        constants.ZERO_ADDRESS,  ## loanToken -> will be overwritten
        collateralAddress,  ## collateralToken.
        Wei("20 ether"),  ## minInitialMargin -> 20% (allows up to 5x leverage)
        Wei("15 ether"),  ## maintenanceMargin -> 15%, below liquidation
        0  ## fixedLoanTerm -> will be overwritten with 28 days
    ]

    params.append(data)

    #configure the token settings
    calldata = loanTokenSettings.setupLoanParams.encode_input(params, False)

    #set the setting contract address at the loan token logic contract (need to load the logic ABI in line 171 to work)
    tx = loanToken.updateSettings(loanTokenSettings.address, calldata,
                                  {"from": acct})
    #print(tx.info())

    print("Setting up torque pool params")

    params = []

    data = [
        b"0x0",  ## id
        False,  ## active
        str(acct),  ## owner
        constants.ZERO_ADDRESS,  ## loanToken -> will be overwritten
        collateralAddress,  ## collateralToken.
        Wei("50 ether"),  ## minInitialMargin -> 20% (allows up to 5x leverage)
        Wei("15 ether"),  ## maintenanceMargin -> 15%, below liquidation
        0  ## fixedLoanTerm -> will be overwritten with 28 days
    ]

    params.append(data)

    #configure the token settings
    calldata = loanTokenSettings.setupLoanParams.encode_input(params, True)

    #print(calldata)

    #set the setting contract address at the loan token logic contract (need to load the logic ABI in line 171 to work)
    tx = loanToken.updateSettings(loanTokenSettings.address, calldata,
                                  {"from": acct})
    #print(tx.info())

    print("setting up interest rates")

    setupLoanTokenRates(acct, loanToken.address, loanTokenSettings.address,
                        loanTokenLogic.address)

    return (loanToken, loanTokenSettings)
def deployProtocol():
    global bzx, tokens, constants, addresses, thisNetwork, acct

    thisNetwork = network.show_active()

    if thisNetwork == "development":
        acct = accounts[0]
    elif thisNetwork == "testnet":
        acct = accounts.load("rskdeployer")
    else:
        raise Exception("network not supported")

    constants = shared.Constants()

    tokens = Munch()

    print("Deploying bZxProtocol.")
    bzxproxy = acct.deploy(bZxProtocol)
    bzx = Contract.from_abi("bzx",
                            address=bzxproxy.address,
                            abi=interface.IBZx.abi,
                            owner=acct)
    _add_contract(bzx)

    print("Deploying test tokens.")
    tokens.weth = acct.deploy(
        TestWeth)  ## 0x3194cBDC3dbcd3E11a07892e7bA5c3394048Cc87
    tokens.susd = acct.deploy(TestToken, "SUSD", "SUSD", 18, 1e50)
    tokens.rbtc = acct.deploy(TestToken, "RBTC", "RBTC", 18, 1e50)

    print("Deploying PriceFeeds.")
    feeds = acct.deploy(PriceFeedsLocal)

    print("Calling setRates.")
    feeds.setRates(
        tokens.rbtc.address,
        tokens.susd.address,
        1e22  #1btc = 10000 susd
    )

    print("Deploying Swaps.")
    swaps = acct.deploy(SwapsImplLocal)

    print("Deploying ProtocolSettings.")
    settings = acct.deploy(ProtocolSettings)
    print("Calling replaceContract.")
    bzx.replaceContract(settings.address)

    print("Calling setPriceFeedContract.")
    bzx.setPriceFeedContract(feeds.address  # priceFeeds
                             )

    print("Calling setSwapsImplContract.")
    bzx.setSwapsImplContract(swaps.address  # swapsImpl
                             )

    bzx.setFeesController(acct.address)

    ## LoanSettings
    print("Deploying LoanSettings.")
    loanSettings = acct.deploy(LoanSettings)
    print("Calling replaceContract.")
    bzx.replaceContract(loanSettings.address)

    ## LoanOpenings
    print("Deploying LoanOpenings.")
    loanOpenings = acct.deploy(LoanOpenings)
    print("Calling replaceContract.")
    bzx.replaceContract(loanOpenings.address)

    ## LoanMaintenance
    print("Deploying LoanMaintenance.")
    loanMaintenance = acct.deploy(LoanMaintenance)
    print("Calling replaceContract.")
    bzx.replaceContract(loanMaintenance.address)

    ## LoanClosings
    print("Deploying LoanClosings.")
    loanClosings = acct.deploy(LoanClosings)
    print("Calling replaceContract.")
    bzx.replaceContract(loanClosings.address)