예제 #1
0
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})
예제 #2
0
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"})
예제 #3
0
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}"
    )
예제 #4
0
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"")