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)
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())
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)