예제 #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}"
    )