def test_join_migration2(chain, accounts, Joint): providerB = Contract("0xF878E59600124ca46a30193A3F76EDAc99591698") old_joint = Contract(providerB.joint()) providerA = Contract(old_joint.providerA()) gov = accounts.at(old_joint.governance(), force=True) old_joint.setRatio(1, {"from": gov, "gas_price": "1 gwei"}) old_joint.harvest({"from": gov}) old_joint.liquidatePosition({"from": gov}) old_joint.setReinvest(False, {"from": gov}) old_joint.harvest({"from": gov}) assert providerA.balanceOfWant() > 0 assert providerB.balanceOfWant() > 0 assert old_joint.balanceOfB() + old_joint.balanceOfA() == 0 assert old_joint.balanceOfStake() == 0 new_joint = Joint.deploy( old_joint.governance(), old_joint.strategist(), old_joint.keeper(), old_joint.tokenA(), old_joint.tokenB(), old_joint.router(), {"from": gov}, ) providerA.setJoint(new_joint, {"from": gov}) providerB.setJoint(new_joint, {"from": gov}) new_joint.setProviderA(providerA, {"from": gov}) new_joint.setProviderB(providerB, {"from": gov}) assert providerA.takeProfit() == False assert providerB.takeProfit() == False vaultA = Contract(providerA.vault()) vaultA.updateStrategyMaxDebtPerHarvest(providerA, 0, {"from": gov}) vaultB = Contract(providerB.vault()) vaultB.updateStrategyMaxDebtPerHarvest(providerB, 0, {"from": gov}) providerA.harvest({"from": gov}) providerB.harvest({"from": gov}) # Invest capital new_joint.harvest({"from": gov})
def main(): providerB = Contract("0xF878E59600124ca46a30193A3F76EDAc99591698") old_joint = Contract(providerB.joint()) providerA = Contract(old_joint.providerA()) gov = accounts.load( click.prompt("Account", type=click.Choice(accounts.load()))) old_joint.harvest({"from": gov, "gas_price": "1 gwei"}) old_joint.liquidatePosition({"from": gov, "gas_price": "1 gwei"}) old_joint.setReinvest(False, {"from": gov, "gas_price": "1 gwei"}) old_joint.harvest({"from": gov, "gas_price": "1 gwei"}) assert providerA.balanceOfWant() > 0 assert providerB.balanceOfWant() > 0 assert old_joint.balanceOfB() + old_joint.balanceOfA() == 0 assert old_joint.balanceOfStake() == 0 new_joint = Contract("0x201b41f69a4870323d8c9118e1d1b979939f8d45") providerA.setJoint(new_joint, {"from": gov, "gas_price": "1 gwei"}) providerB.setJoint(new_joint, {"from": gov, "gas_price": "1 gwei"}) new_joint.setProviderA(providerA, {"from": gov, "gas_price": "1 gwei"}) new_joint.setProviderB(providerB, {"from": gov, "gas_price": "1 gwei"}) assert providerA.takeProfit() == False assert providerB.takeProfit() == False vaultA = Contract(providerA.vault()) vaultA.updateStrategyMaxDebtPerHarvest(providerA, 0, { "from": gov, "gas_price": "1 gwei" }) vaultB = Contract(providerB.vault()) vaultB.updateStrategyMaxDebtPerHarvest(providerB, 0, { "from": gov, "gas_price": "1 gwei" }) providerA.harvest({"from": gov, "gas_price": "1 gwei"}) providerB.harvest({"from": gov, "gas_price": "1 gwei"}) # Invest capital new_joint.harvest({"from": gov, "gas_price": "1 gwei"})
def main(): providerB = Contract("0xF878E59600124ca46a30193A3F76EDAc99591698") old_joint = Contract(providerB.joint()) providerA = Contract(old_joint.providerA()) # gov = accounts.load(click.prompt("Account", type=click.Choice(accounts.load()))) gov = old_joint.governance() new_joint = Contract("0x3F770158A92Fb7649ffce4313F8b6B1B1941ad9c") old_joint.setProviderA(new_joint, {"from": gov, "gas_price": "1 gwei"}) old_joint.setProviderB(new_joint, {"from": gov, "gas_price": "1 gwei"}) old_joint.liquidatePosition({"from": gov, "gas_price": "1 gwei"}) old_joint.setReinvest(False, {"from": gov, "gas_price": "1 gwei"}) old_joint.harvest({"from": gov, "gas_price": "1 gwei"}) assert providerA.balanceOfWant() == 0 assert providerB.balanceOfWant() == 0 assert old_joint.balanceOfB() + old_joint.balanceOfA() == 0 assert old_joint.balanceOfStake() == 0 assert new_joint.balanceOfA() > 0 assert new_joint.balanceOfB() > 0 providerA.setJoint(new_joint, {"from": gov, "gas_price": "1 gwei"}) providerB.setJoint(new_joint, {"from": gov, "gas_price": "1 gwei"}) new_joint.setProviderA(providerA, {"from": gov, "gas_price": "1 gwei"}) new_joint.setProviderB(providerB, {"from": gov, "gas_price": "1 gwei"}) # Rebalance ftm_capital = Wei("46_000 ether") ice_capital = Wei("3996 ether") ftm_profit = (new_joint.balanceOfA() - ftm_capital) / 1e18 ice_profit = (new_joint.balanceOfB() - ice_capital) / 1e18 print( f"available FTM before sell: {new_joint.balanceOfA()/1e18} with profit: {ftm_profit}" ) print( f"available ICE before sell: {new_joint.balanceOfB()/1e18} with profit: {ice_profit}" ) new_joint.sellCapital( new_joint.tokenA(), new_joint.tokenB(), Wei("4_862 ether"), { "from": gov, "gas_price": "1 gwei" }, ) ftm_profit = (new_joint.balanceOfA() - ftm_capital) / 1e18 ice_profit = (new_joint.balanceOfB() - ice_capital) / 1e18 print( f"available FTM after sell: {new_joint.balanceOfA()/1e18} with profit: {ftm_profit}" ) print( f"available ICE after sell: {new_joint.balanceOfB()/1e18} with profit: {ice_profit}" ) # Return money to providers new_joint.setReinvest(False, {"from": gov, "gas_price": "1 gwei"}) new_joint.harvest({"from": gov, "gas_price": "1 gwei"}) # Providers state vaultA = Contract(providerA.vault()) vaultB = Contract(providerB.vault()) profitA_before = vaultA.strategies(providerA).dict()["totalGain"] profitB_before = vaultB.strategies(providerB).dict()["totalGain"] lossA_before = vaultA.strategies(providerA).dict()["totalLoss"] lossB_before = vaultB.strategies(providerB).dict()["totalLoss"] ppsA_before = vaultA.pricePerShare() ppsB_before = vaultB.pricePerShare() providerA.setTakeProfit(True, {"from": gov, "gas_price": "1 gwei"}) providerB.setTakeProfit(True, {"from": gov, "gas_price": "1 gwei"}) providerA.setInvestWant(False, {"from": gov, "gas_price": "1 gwei"}) providerB.setInvestWant(False, {"from": gov, "gas_price": "1 gwei"}) vaultA.updateStrategyDebtRatio(providerA, 0, { "from": gov, "gas_price": "1 gwei" }) vaultB.updateStrategyDebtRatio(providerB, 0, { "from": gov, "gas_price": "1 gwei" }) providerA.harvest({"from": gov, "gas_price": "1 gwei"}) providerB.harvest({"from": gov, "gas_price": "1 gwei"}) chain.sleep(60 * 60 * 8) chain.mine(1) # Providers state profitA_new = vaultA.strategies(providerA).dict()["totalGain"] profitB_new = vaultB.strategies(providerB).dict()["totalGain"] lossA_new = vaultA.strategies(providerA).dict()["totalLoss"] lossB_new = vaultB.strategies(providerB).dict()["totalLoss"] ppsA_new = vaultA.pricePerShare() ppsB_new = vaultB.pricePerShare() assert profitA_new - profitA_before > 0 assert profitB_new - profitB_before > 0 assert lossA_new - lossA_before == 0 assert lossB_new - lossB_before == 0 assert ppsA_new > ppsA_before assert ppsB_new > ppsB_before print( f"VaultA pps: {ppsA_new/1e18}, increase: {(ppsA_new-ppsA_before)/1e18}" ) print( f"VaultB pps: {ppsB_new/1e18}, increase: {(ppsB_new-ppsB_before)/1e18}" )
def main(): # gov = accounts.load(click.prompt("Account", type=click.Choice(accounts.load()))) # print(f"You are using: 'gov' [{gov}]") gov = accounts.at("0xC27DdC26F48724AD90E4d152940e4981af7Ed50d", force=True) providerA = Contract("0x572E2248841b6DB05b0303A243Dbb475d7010B0c") providerB = Contract("0x0Dbb0D0586CD7705636b820170811FE1378AB8dA") joint = Contract("0x3bE77c7707666a8656bD49D91B875F28cb803471") vaultA = Contract("0x36e7aF39b921235c4b01508BE38F27A535851a5c") vaultB = Contract("0x1E9eC284BA99E14436f809291eBF7dC8CCDB12e1") ftm = Contract("0x21be370D5312f44cB42ce377BC9b8a0cEF1A4C83") fusdt = Contract("0x049d68029688eAbF473097a2fC38ef61633A3C7A") boo = Contract("0x841FAD6EAe12c286d1Fd18d1d525DFfA75C7EFFE") ftm_capital = Wei( "12_364.532347266988 ether" ) # actualizar en cada iteracion - (26/04) 0xc5bc135e95655fb0601fbd1d63723c5a71140438e959d75bf29664be00851e79 fusdt_capital = Wei( "4_153.272242 ether" ) # actualizar en cada iteracion - (26/04) 0xc5bc135e95655fb0601fbd1d63723c5a71140438e959d75bf29664be00851e79 cg = CoinGeckoAPI() ret = cg.get_price(ids=["fantom", "tether"], vs_currencies="usd") ftm_profit_usd = ( -1012.5366144730546 ) # se carga con los datos de joint_status en fork, despues del joint_sell_reward fusdt_profit_usd = 1031.0654278269499 # se carga con los datos de joint_status en fork, despues del joint_sell_reward media_profit_lp = (ftm_profit_usd + fusdt_profit_usd) / 2 if fusdt_profit_usd > ftm_profit_usd: joint.liquidatePosition({"from": gov, "gas_price": "1 gwei"}) sell_fusdt_buy_ftm = (media_profit_lp - ftm_profit_usd) * ret["tether"]["usd"] joint.sellCapital( joint.tokenB(), joint.tokenA(), Wei(f"{sell_fusdt_buy_ftm} ether"), { "from": gov, "gas_price": "1 gwei", "gas_limit": 2_000_000 }, ) joint.distributeProfit({"from": gov, "gas_price": "1 gwei"}) ftm_profit = (joint.balanceOfA() - ftm_capital) / 1e18 ftm_gp = ftm_profit / (ftm_capital / 1e18) fusdt_profit = (joint.balanceOfB() / 1e6) - (fusdt_capital / 1e18) fusdt_gp = fusdt_profit / (fusdt_capital / 1e18) ftm_profit_usd = ret["fantom"]["usd"] * ftm_profit fusdt_profit_usd = ret["tether"]["usd"] * fusdt_profit print(f"") print(f"With fusdt profit > ftm profit. Sell Capital") print(f"jointStaked: {joint.balanceOfStake()}") print(f"Pending reward: {joint.pendingReward()/1e18} boo") print(f"ftm avail in joint {joint.balanceOfA()/1e18}") print(f"fusdt avail in joint {joint.balanceOfB()/1e6}") print(f"ftm avail in ProviderA {providerA.balanceOf()/1e18}") print(f"fusdt avail in ProviderB {providerB.balanceOf()/1e6}") print( f"ftm profit {ftm_profit} in providerA with usd value of {ftm_profit_usd}" ) print( f"ice profit {fusdt_profit} in providerB with usd value of {fusdt_profit_usd}" ) print(f"ftm GP {ftm_gp}") print(f"ice GP {fusdt_gp}") print(f"") elif fusdt_profit_usd < ftm_profit_usd: joint.liquidatePosition({"from": gov, "gas_price": "1 gwei"}) sell_ftm_buy_fusdt = (media_profit_lp - fusdt_profit_usd) * ret["fantom"]["usd"] joint.sellCapital( joint.tokenA(), joint.tokenB(), Wei(f"{sell_ftm_buy_fusdt} ether"), { "from": gov, "gas_price": "1 gwei", "gas_limit": 2_000_000 }, ) joint.distributeProfit({"from": gov, "gas_price": "1 gwei"}) ftm_profit = (joint.balanceOfA() - ftm_capital) / 1e18 ftm_gp = ftm_profit / (ftm_capital / 1e18) fusdt_profit = (joint.balanceOfB() / 1e6) - (fusdt_capital / 1e18) fusdt_gp = fusdt_profit / (fusdt_capital / 1e18) ftm_profit_usd = ret["fantom"]["usd"] * ftm_profit fusdt_profit_usd = ret["tether"]["usd"] * fusdt_profit print(f"") print(f"With fusdt profit < ftm profit. Sell Capital") print(f"jointStaked: {joint.balanceOfStake()}") print(f"Pending reward: {joint.pendingReward()/1e18} boo") print(f"ftm avail in joint {joint.balanceOfA()/1e18}") print(f"fusdt avail in joint {joint.balanceOfB()/1e6}") print(f"ftm avail in ProviderA {providerA.balanceOf()/1e18}") print(f"fusdt avail in ProviderB {providerB.balanceOf()/1e6}") print( f"ftm profit {ftm_profit} in providerA with usd value of {ftm_profit_usd}" ) print( f"ice profit {fusdt_profit} in providerB with usd value of {fusdt_profit_usd}" ) print(f"ftm GP {ftm_gp}") print(f"ice GP {fusdt_gp}") print(f"")