コード例 #1
0
ファイル: vote.py プロジェクト: sajanrajdev/badger-system
def main():
    badger = connect_badger("deploy-final.json")
    digg = badger.digg
    admin = badger.devProxyAdmin
    multisig = badger.devMultisig
    contracts = badger.contracts_upgradeable
    deployer = badger.deployer

    expectedMultisig = "0xB65cef03b9B89f99517643226d76e286ee999e77"
    assert multisig == expectedMultisig

    safe = ApeSafe(badger.devMultisig.address)

    abi = Sett.abi

    diggToken = safe.contract(digg.token.address)
    bDigg = safe.contract_from_abi(
        badger.getSett("native.digg").address, "Sett", abi)
    rewardsEscrow = safe.contract_from_abi(badger.rewardsEscrow.address,
                                           "RewardsEscrow", RewardsEscrow.abi)
    teamVesting = safe.contract(badger.teamVesting.address)

    voting = safe.contract_from_abi(badger.daoBadgerTimelock.address,
                                    "IVoting", interface.IVoting.abi)
    aragon = AragonSystem()
    aragonVoting = aragon.getVotingAt(
        web3.toChecksumAddress("0xdc344bfb12522bf3fa58ef0d6b9a41256fc79a1b"))

    token_registry = registry.token_system()

    dev = accounts.at(badger.devMultisig.address, force=True)

    tokens = [
        token_registry.erc20_by_address(registry.tokens.farm),
        token_registry.erc20_by_address(registry.tokens.xSushi),
        token_registry.erc20_by_address(registry.curve.pools.sbtcCrv.token),
        token_registry.erc20_by_address(registry.curve.pools.renCrv.token),
        token_registry.erc20_by_address(registry.curve.pools.tbtcCrv.token),
        token_registry.erc20_by_address(registry.sushi.lpTokens.sushiWbtcWeth),
        token_registry.erc20_by_address(registry.tokens.dfd),
    ]

    snap = BalanceSnapshotter(tokens, [badger.devMultisig, badger.dao.agent])

    snap.snap(name="Before Transfers")

    for id in vote_ids:
        voting.vote(id, True, True)
        rewardsEscrow.call(aragonVoting, 0,
                           aragonVoting.vote.encode_input(id, True, True))
        teamVesting.call(aragonVoting, 0,
                         aragonVoting.vote.encode_input(id, True, True))

    snap.snap(name="After Transfers")
    snap.diff_last_two()

    safe_tx = safe.multisend_from_receipts()
    safe.preview(safe_tx)
    data = safe.print_transaction(safe_tx)
    safe.post_transaction(safe_tx)
コード例 #2
0
def main():
    badger = connect_badger()
    multisig = badger.devMultisig

    safe = ApeSafe(multisig.address)

    abi = Sett.abi
    bBadger = safe.contract_from_abi(
        badger.getSett("native.badger").address, "Sett", abi
    )

    usdcToken = safe.contract_from_abi(
        registry.tokens.usdc, "IERC20", interface.IERC20.abi
    )

    badgerToken = safe.contract_from_abi(
        badger.token.address, "IERC20", interface.IERC20.abi
    )

    wbtcToken = safe.contract_from_abi(
        registry.tokens.wbtc, "IERC20", interface.IERC20.abi
    )

    rewardsEscrow = safe.contract(badger.rewardsEscrow.address)

    # TODO: Do this in bBadger going forward - this is the way.
    # Approve treasury multi to stake
    # Deposit badger -> bBadger

    snap = BalanceSnapshotter(
        [badgerToken, usdcToken, wbtcToken],
        [multisig, badger.deployer, badger.rewardsEscrow],
    )

    opolis_dest = "0x27657399177403a891CC7A22Bd6F2C00621Db7b0"

    test_usdc = 1 * 10 ** 6
    full_usdc = 499999 * 10 ** 6
    full_badger = Wei("10163.59 ether")
    full_wbtc = 3.805754301 * 10 ** 8

    console.print("Sending Amounts")

    snap.snap(name="Before Transfers")

    usdcToken.transfer(opolis_dest, full_usdc)
    rewardsEscrow.approveRecipient(opolis_dest)
    rewardsEscrow.transfer(badger.token, opolis_dest, full_badger)
    # badgerToken.transfer(opolis_dest, full_badger)
    wbtcToken.transfer(opolis_dest, full_wbtc)

    snap.snap(name="After Transfers")
    snap.diff_last_two()

    safe_tx = safe.multisend_from_receipts()
    safe.preview(safe_tx)
    data = safe.print_transaction(safe_tx)
    safe.post_transaction(safe_tx)
コード例 #3
0
def main():
    badger = connect_badger()
    multisig = badger.paymentsMultisig

    safe = ApeSafe(multisig.address)

    payments = load_ltcc_recipients("data/ltcc_recipients.csv")
    payments.calc_totals()
    payments.print_recipients()

    abi = Sett.abi
    bBadger = safe.contract_from_abi(
        badger.getSett("native.badger").address, "Sett", abi
    )

    usdcToken = safe.contract_from_abi(
        registry.tokens.usdc, "IERC20", interface.IERC20.abi
    )
    badgerToken = safe.contract_from_abi(
        badger.token.address, "IERC20", interface.IERC20.abi
    )

    # TODO: Do this in bBadger going forward - this is the way.
    # Approve treasury multi to stake
    # Deposit badger -> bBadger

    snap = BalanceSnapshotter(
        [badgerToken, bBadger, usdcToken],
        [multisig, badger.deployer, badger.rewardsEscrow],
    )

    for recipient in payments.recipients:
        snap.add_account(recipient.address)

    snap.snap(name="Before bBadger Deposit")

    assert bBadger.approved(multisig)
    badger_total = payments.totals["badger"]
    assert badgerToken.balanceOf(multisig.address) >= badger_total
    bBadger_total = badger_to_bBadger(badger, badger_total)
    badgerToken.approve(bBadger, badger_total)

    assert badgerToken.allowance(multisig.address, bBadger.address) >= badger_total
    bBadger.deposit(badger_total)

    snap.snap(name="After bBadger Deposit")
    snap.diff_last_two()

    safe_tx = safe.multisend_from_receipts()
    safe.preview(safe_tx)
    data = safe.print_transaction(safe_tx)
    safe.post_transaction(safe_tx)
コード例 #4
0
def main():
    badger = connect_badger()
    multisig = badger.devMultisig

    safe = ApeSafe(multisig.address)

    payments = load_ltcc_recipients("scripts/actions/treasury/ltcc_recipients.csv")
    payments.print_recipients()

    abi = Sett.abi
    bBadger = safe.contract_from_abi(
        badger.getSett("native.badger").address, "Sett", abi
    )

    usdcToken = safe.contract_from_abi(registry.tokens.usdc, "IERC20", interface.IERC20.abi)
    badgerToken = safe.contract_from_abi(badger.token.address, "IERC20", interface.IERC20.abi)

    # TODO: Do this in bBadger going forward - this is the way. 
    # Approve treasury multi to stake
    # Deposit badger -> bBadger

    snap = BalanceSnapshotter(
        [badgerToken, bBadger, usdcToken], [multisig, badger.deployer, badger.rewardsEscrow]
    )

    for recipient in payments.recipients:
        snap.add_account(recipient.address)

    snap.snap(name="Before Transfers")

    for recipient in payments.recipients:
        bBadger_amount = badger_to_bBadger(badger, recipient.get_amount("badger"))
        console.print(recipient.address, recipient.get_amount("badger"), bBadger_amount)
        diff = bBadger_amount - bBadger.balanceOf(multisig)

        console.print(bBadger.balanceOf(multisig), diff)

        if bBadger.balanceOf(multisig) < bBadger_amount:
            assert diff < Wei("0.1 ether")
            bBadger_amount = bBadger.balanceOf(multisig)

        # tx = usdcToken.transfer(recipient.address, recipient.get_amount("usdc"))
        tx = bBadger.transfer(recipient.address, bBadger_amount)

    snap.snap(name="After Transfers")
    snap.diff_last_two()

    safe_tx = safe.multisend_from_receipts()
    safe.preview(safe_tx)
    data = safe.print_transaction(safe_tx)
    safe.post_transaction(safe_tx)
コード例 #5
0
def main():
    badger = connect_badger("deploy-final.json")
    digg = badger.digg
    admin = badger.devProxyAdmin
    multisig = badger.devMultisig
    contracts = badger.contracts_upgradeable
    deployer = badger.deployer

    expectedMultisig = "0xB65cef03b9B89f99517643226d76e286ee999e77"
    assert multisig == expectedMultisig

    safe = ApeSafe(badger.devMultisig.address)

    abi = Sett.abi

    diggToken = safe.contract(digg.token.address)
    bDigg = safe.contract_from_abi(
        badger.getSett("native.digg").address, "Sett", abi)
    rewardsEscrow = safe.contract(badger.rewardsEscrow.address)

    snap = BalanceSnapshotter(
        [diggToken, bDigg],
        [badger.devMultisig, badger.deployer, badger.rewardsEscrow])

    snap.snap(name="Before Transfers")

    ppfs = bDigg.getPricePerFullShare()
    digg_to_deposit = 10 * (10**18) // (10**9)
    console.print("digg_to_deposit", digg_to_deposit, ppfs)

    # Transfer assets to multisig
    rewardsEscrow.transfer(diggToken, badger.devMultisig, digg_to_deposit)

    snap.snap(name="After Transfers")
    snap.diff_last_two()

    # Deposit bDigg
    diggToken.approve(bDigg.address, digg_to_deposit)
    tx = bDigg.deposit(digg_to_deposit)
    print(tx.events)

    snap.snap(name="After Deposits")
    snap.diff_last_two()

    safe_tx = safe.multisend_from_receipts()
    safe.preview(safe_tx)
    data = safe.print_transaction(safe_tx)
    safe.post_transaction(safe_tx)
コード例 #6
0
def main():
    safe = ApeSafe('0xD089cc83f5B803993E266ACEB929e52A993Ca2C8')
    agent_address = '0x3e40d73eb977dc6a537af587d48316fee66e9c8c'

    eth_spent = 0

    for cover in unslashed_covers:
        print("Calc cover for ", cover["policy_name"])
        eth_to_cover = cover["damage_eth_covered"]

        if eth_to_cover == 0:
            continue

        um = safe.contract(cover["marketAddress"])
        ut = interface.ERC20(cover["premiumToken"])

        deposit_delta = um.coverToPremiumTokens(
            eth_to_cover * 1e18) * um.premiumTokenPrice18eRatio() / 1e18

        print("Cover for", eth_to_cover, " ETH")
        print("ETH required to make deposit: ", deposit_delta / 1e18)

        premium_balance_before = ut.balanceOf(agent_address)
        um.depositPremium({'value': deposit_delta})
        premium_balance_after = ut.balanceOf(agent_address)
        print("Premium tokens delta: ",
              (premium_balance_after - premium_balance_before) / 1e18)
        print("Premium tokens balance after: ", (premium_balance_after) / 1e18)
        print("ETH amount", Wei(deposit_delta), deposit_delta / 1e18)

        eth_spent += deposit_delta

    print("total ETH to spend", eth_spent / 1e18)

    safe_tx = safe.multisend_from_receipts()
    print("safe tx preview:")
    safe.preview(safe_tx)

    sys.stdout.write('Are you sure (y/n)? ')

    if not prompt_bool():
        print('Aborting')
        return

    safe.post_transaction(safe_tx)

    print("safe tx sent!")
コード例 #7
0
def main():
    badger = connect_badger("deploy-final.json")
    digg = badger.digg
    admin = badger.devProxyAdmin
    multisig = badger.devMultisig
    contracts = badger.contracts_upgradeable
    deployer = badger.deployer

    expectedMultisig = "0xB65cef03b9B89f99517643226d76e286ee999e77"
    assert multisig == expectedMultisig

    recipient = accounts.at("0x8Ea8a668f89a9A203d37D8a1E27e38De5bEb8380",
                            force=True)

    safe = ApeSafe(badger.devMultisig.address)

    abi = Sett.abi

    badgerToken = safe.contract(badger.token.address)
    diggToken = safe.contract(digg.token.address)
    bBadger = safe.contract_from_abi(
        badger.getSett("native.badger").address, "Sett", abi)
    bDigg = safe.contract_from_abi(
        badger.getSett("native.digg").address, "Sett", abi)

    snap = BalanceSnapshotter(
        [badgerToken, diggToken, bBadger, bDigg],
        [badger.devMultisig, badger.deployer, badger.rewardsEscrow, recipient],
    )

    snap.snap(name="Before Transfers", print=True)

    bBadger_amount = Wei("4585.501571219566358195 ether")
    bDigg_amount = Wei("6.96203478522210066 ether")

    # Transfer receieved amounts to badger deployer for transfer over bridge
    bBadger.transfer(recipient, bBadger_amount)
    bDigg.transfer(recipient, bDigg_amount)

    snap.snap(name="After Transfers")
    snap.diff_last_two()

    safe_tx = safe.multisend_from_receipts()
    safe.preview(safe_tx)
    data = safe.print_transaction(safe_tx)
    safe.post_transaction(safe_tx)
コード例 #8
0
def main():
    safe_address = '0xD089cc83f5B803993E266ACEB929e52A993Ca2C8'
    safe = ApeSafe(safe_address)
    agent_address = '0x3e40d73eb977dc6a537af587d48316fee66e9c8c'
    should_send = False

    for cover in unslashed_covers:
        request_tokens = interface.ERC20(cover["premiumToken"])
        ut = safe.contract(cover["premiumToken"])

        balance = request_tokens.balanceOf(safe_address)

        if balance > 0:
          print('got tokens', balance, cover["premiumToken"], ut.balanceOf(safe_address))
          ut.transfer(agent_address, balance, {'gas_limit': 100000})
          should_send = True

    safe_tx = safe.multisend_from_receipts()

    print('gas', safe.estimate_gas(safe_tx))

    if not should_send:
      print("nothing to send to agent!")
      return


    print("safe tx preview:")
    safe.preview(safe_tx)

    sys.stdout.write('Are you sure (y/n)? ')

    if not prompt_bool():
        print('Aborting')
        return

    safe.post_transaction(safe_tx)
コード例 #9
0
def main():
    badger = connect_badger()
    
    safe = ApeSafe(badger.opsMultisig.address)

    nft = safe.contract_from_abi(
        badger_nft_address, "IBadgerERC1155", interface.IBadgerERC1155.abi
    )
    assert nft.totalSupply(nft_id) == 210

    print(len(third_set))

    for recipient in third_set:
        nft.safeTransferFrom(badger.opsMultisig.address, recipient, nft_id, 1, "0x")
        console.print(recipient, nft.balanceOf(recipient, nft_id))
        assert nft.balanceOf(recipient, nft_id) == 1

    print("Remaining After Transfer", nft.balanceOf(badger.opsMultisig, nft_id))

    safe_tx = safe.multisend_from_receipts()
    safe.preview(safe_tx)
    data = safe.print_transaction(safe_tx)

    safe.post_transaction(safe_tx)
コード例 #10
0
def main():
    badger = connect_badger()
    digg = badger.digg
    safe = ApeSafe(badger.paymentsMultisig.address)

    abi = Sett.abi

    badgerToken = safe.contract(badger.token.address)
    diggToken = safe.contract(digg.token.address)
    bBadger = safe.contract_from_abi(
        badger.getSett("native.badger").address, "Sett", abi)
    bDigg = safe.contract_from_abi(
        badger.getSett("native.digg").address, "Sett", abi)
    rewardsEscrow = safe.contract(badger.rewardsEscrow.address)

    badger_usd = fetch_usd_price(badger.token.address)
    eth_usd = fetch_usd_price_eth()

    # USD Denominated
    # badger_to_send = Wei(str(total_usd / badger_usd) + " ether")

    # Badger Denominated
    badger_to_send = Wei("5970.744318 ether")

    table = []
    table.append(["badger", badger_to_send, badger_usd])
    table.append(["eth", 0, eth_usd])
    print(tabulate(table, headers=["asset", "to send", "$ price"]))

    snap = BalanceSnapshotter(
        [badgerToken, bBadger],
        [badger.devMultisig, badger.deployer, badger.rewardsEscrow],
    )

    snap.snap(name="Before Transfers")

    # Transfer assets to multisig
    # rewardsEscrow.transfer(badgerToken, safe, badger_to_send)

    snap.snap(name="After Transfers")
    snap.diff_last_two()

    # Deposit bBadger
    badgerToken.approve(bBadger.address, badger_to_send)
    bBadgerBefore = bBadger.balanceOf(safe)
    tx = bBadger.deposit(badger_to_send)
    bBadgerAfter = bBadger.balanceOf(badger.devMultisig)
    print(
        "bBadger to transfer",
        bBadgerAfter - bBadgerBefore,
        val(bBadgerAfter - bBadgerBefore),
    )
    # bBadger.transfer(badger.paymentsMultisig, bBadgerAfter - bBadgerBefore)
    print(tx.events)

    snap.snap(name="After Deposits")
    snap.diff_last_two()

    safe_tx = safe.multisend_from_receipts()
    safe.preview(safe_tx)
    data = safe.print_transaction(safe_tx)
    safe.post_transaction(safe_tx)
コード例 #11
0
def main():
    badger = connect_badger("deploy-final.json")
    digg = badger.digg

    tx_data = {
        "to":
        "0x8D29bE29923b68abfDD21e541b9374737B49cdAD",
        "data":
        "0x8d80ff0a000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000009fe00b65cef03b9b89f99517643226d76e286ee999e7700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024694e80c300000000000000000000000000000000000000000000000000000000000000010019d099670a21bc0a8211a89b84cedf59abb4377f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064beabacc80000000000000000000000003472a5a71965499acd81997a54bba8d852c6e53d000000000000000000000000b65cef03b9b89f99517643226d76e286ee999e7700000000000000000000000000000000000000000000017c5d213c7a8f712f400019d099670a21bc0a8211a89b84cedf59abb4377f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064beabacc8000000000000000000000000798d1be841a82a273720ce31c822c61a67a601c3000000000000000000000000b65cef03b9b89f99517643226d76e286ee999e7700000000000000000000000000000000000000000000000000000001b69e2595003472a5a71965499acd81997a54bba8d852c6e53d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044095ea7b3000000000000000000000000d9e1ce17f2641f24ae83637ab66a2cca9c378b9f000000000000000000000000000000000000000000000068bce40cf18444c28000d9e1ce17f2641f24ae83637ab66a2cca9c378b9f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001244a25d94a000000000000000000000000000000000000000000000002b01ee2a20a8a2a90000000000000000000000000000000000000000000000068bce40cf18444c28000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000b65cef03b9b89f99517643226d76e286ee999e7700000000000000000000000000000000000000000000000000000000604be4d100000000000000000000000000000000000000000000000000000000000000030000000000000000000000003472a5a71965499acd81997a54bba8d852c6e53d0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c599000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2003472a5a71965499acd81997a54bba8d852c6e53d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044095ea7b300000000000000000000000019d97d8fa813ee2f51ad4b4e04ea08baf4dffc28000000000000000000000000000000000000000000000113a03d2f890b2c6cc00019d97d8fa813ee2f51ad4b4e04ea08baf4dffc2800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024b6b55f25000000000000000000000000000000000000000000000113a03d2f890b2c6cc000798d1be841a82a273720ce31c822c61a67a601c300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044095ea7b30000000000000000000000007e7e112a68d8d2e221e11047a72ffc1065c38e1a00000000000000000000000000000000000000000000000000000001b69e2595007e7e112a68d8d2e221e11047a72ffc1065c38e1a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000246c361865000000000000000000000000b65cef03b9b89f99517643226d76e286ee999e77007e7e112a68d8d2e221e11047a72ffc1065c38e1a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024b6b55f2500000000000000000000000000000000000000000000000000000001b69e25950019d97d8fa813ee2f51ad4b4e04ea08baf4dffc2800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044095ea7b3000000000000000000000000d9e1ce17f2641f24ae83637ab66a2cca9c378b9f0000000000000000000000000000000000000000000000e203f5dc3c00323a8000d9e1ce17f2641f24ae83637ab66a2cca9c378b9f00000000000000000000000000000000000000000000000777723ca5ab7fcb9000000000000000000000000000000000000000000000000000000000000000c4f305d71900000000000000000000000019d97d8fa813ee2f51ad4b4e04ea08baf4dffc280000000000000000000000000000000000000000000000e203f5dc3c00323a800000000000000000000000000000000000000000000000e203f5dc3c00323a8000000000000000000000000000000000000000000000000777723ca5ab7fcb90000000000000000000000000b65cef03b9b89f99517643226d76e286ee999e7700000000000000000000000000000000000000000000000000000000604be4db007e7e112a68d8d2e221e11047a72ffc1065c38e1a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044095ea7b3000000000000000000000000d9e1ce17f2641f24ae83637ab66a2cca9c378b9f00000000000000000000000000000000000000000000000048ada1feff60844a00d9e1ce17f2641f24ae83637ab66a2cca9c378b9f00000000000000000000000000000000000000000000000777723ca5ab7fcb9000000000000000000000000000000000000000000000000000000000000000c4f305d7190000000000000000000000007e7e112a68d8d2e221e11047a72ffc1065c38e1a00000000000000000000000000000000000000000000000048ada1feff60844a00000000000000000000000000000000000000000000000048ada1feff60844a00000000000000000000000000000000000000000000000777723ca5ab7fcb90000000000000000000000000b65cef03b9b89f99517643226d76e286ee999e7700000000000000000000000000000000000000000000000000000000604be4dd0000",
    }

    sushiBbadgerPair = "0x0a54d4b378c8dbfc7bc93be50c85debafdb87439"
    sushiBDiggPair = "0xf9440fedc72a0b8030861dcdac39a75b544e7a3c"

    sushiswap = SushiswapSystem()

    pair = interface.IUniswapV2Pair(sushiBbadgerPair)
    console.print({
        "getReserves": pair.getReserves(),
        "token0": pair.token0(),
        "token1": pair.token1(),
        "price0CumulativeLast": pair.price0CumulativeLast(),
        "price1CumulativeLast": pair.price1CumulativeLast(),
    })

    pair = interface.IUniswapV2Pair(sushiBDiggPair)
    console.print({
        "getReserves": pair.getReserves(),
        "token0": pair.token0(),
        "token1": pair.token1(),
        "price0CumulativeLast": pair.price0CumulativeLast(),
        "price1CumulativeLast": pair.price1CumulativeLast(),
    })

    usd_amount = 500000

    weth = interface.IERC20(registry.tokens.weth)

    console.log("..Before Safe")

    safe = ApeSafe(badger.devMultisig.address)
    ops_safe = ApeSafe(badger.opsMultisig.address)

    console.log("..After Safe Setup")

    # multi = GnosisSafe(badger.devMultisig)

    # multi.execute(
    #     MultisigTxMetadata(description="Run TX"),
    #     {"to": tx_data["to"], "data": tx_data["data"], "operation": 1},
    # )

    after = get_token_balances(
        [
            badger.token,
            digg.token,
            interface.IERC20(registry.tokens.usdc),
            interface.IERC20(sushiBbadgerPair),
            interface.IERC20(sushiBDiggPair),
        ],
        [badger.devMultisig],
    )
    after.print()

    pair = interface.IUniswapV2Pair(sushiBbadgerPair)
    console.print({
        "getReserves": pair.getReserves(),
        "token0": pair.token0(),
        "token1": pair.token1(),
        "price0CumulativeLast": pair.price0CumulativeLast(),
        "price1CumulativeLast": pair.price1CumulativeLast(),
    })

    pair = interface.IUniswapV2Pair(sushiBDiggPair)
    console.print({
        "getReserves": pair.getReserves(),
        "token0": pair.token0(),
        "token1": pair.token1(),
        "price0CumulativeLast": pair.price0CumulativeLast(),
        "price1CumulativeLast": pair.price1CumulativeLast(),
    })

    router = safe.contract(sushiswap.router.address)
    rewardsEscrow = safe.contract(badger.rewardsEscrow.address)
    badgerToken = safe.contract(badger.token.address)
    diggToken = safe.contract(digg.token.address)

    digg_to_lp = Wei("8.4 gwei")

    usd_per_side = 250000

    # TODO: Use banteg's nice value calc script.

    badger_usd = fetch_usd_price(badger.token.address)
    digg_usd = fetch_usd_price(digg.token.address)
    eth_usd = fetch_usd_price_eth()

    console.log(eth_usd)

    badger_to_swap = Wei(str(95000 / badger_usd) + " ether")
    badger_to_lp = Wei(str(usd_per_side / badger_usd) + " ether")
    digg_to_lp = Wei(str(usd_per_side / digg_usd) + " gwei")
    eth_out = Wei(str(usd_per_side / eth_usd) + " ether")

    console.print({
        "badger_to_swap": badger_to_swap,
        "badger_to_lp": badger_to_lp,
        "digg_to_lp": digg_to_lp,
        "eth_out": eth_out,
        "badger_usd": badger_usd,
        "digg_usd": digg_usd,
        "eth_usd": eth_usd,
    })

    badger_to_get_from_escrow = badger_to_swap + badger_to_lp

    # Get 250k worth of bBadger + $90k Amount to swap to ETH
    rewardsEscrow.transfer(badger.token, badger.devMultisig,
                           badger_to_get_from_escrow)

    # Get 250k worth of bDigg
    rewardsEscrow.transfer(digg.token, badger.devMultisig, digg_to_lp)

    # Sell badger for 90k USD
    exact_eth = Wei(str(90000 / eth_usd) + " ether")

    console.print("exact_eth", exact_eth)

    assert badger.token.balanceOf(badger.devMultisig) >= badger_to_swap

    print("a")

    badgerToken.approve(sushiswap.router.address, badger_to_swap)

    print("b")

    assert (badger.token.allowance(badger.devMultisig,
                                   sushiswap.router.address) == badger_to_swap)

    router.swapTokensForExactETH(
        exact_eth,
        int(badger_to_swap * 1.02),
        [badger.token, registry.tokens.wbtc, registry.tokens.weth],
        badger.devMultisig,
        chain.time() + 200000,
    )

    print("d")

    after = get_token_balances([badger.token, digg.token],
                               [badger.devMultisig])
    after.print()

    # Deposit Badger for bBadger
    # Deposit DIGG for bDigg

    bBadger_address = badger.getSett("native.badger").address
    bDigg_address = badger.getSett("native.digg").address

    console.print(bBadger_address, bDigg_address)

    abi = Sett.abi

    bBadger = safe.contract_from_abi(bBadger_address, "Sett", abi)
    bDigg = safe.contract_from_abi(bDigg_address, "Sett", abi)

    badgerToken.approve(bBadger.address, badger_to_lp)

    print(bBadger)
    console.print(bBadger)
    bBadger.deposit(badger_to_lp)

    diggToken.approve(bDigg.address, digg_to_lp)
    bDigg.approveContractAccess(badger.devMultisig)

    tx = bDigg.deposit(digg_to_lp)
    console.print(tx.events)

    # tx = bDigg.withdraw(bDigg.balanceOf(badger.devMultisig))
    # console.print(tx.events)

    after = get_token_balances(
        [
            badger.token,
            digg.token,
            interface.IERC20(bDigg.address),
            interface.IERC20(bBadger.address),
        ],
        [badger.devMultisig],
    )
    after.print()

    # Seed pools: 250k worth of bToken, 250k worth of ETH

    tokenA = bBadger

    amountA = (badger_to_lp * 10**18) / bBadger.getPricePerFullShare()
    amountB = eth_out

    # TODO: Set the amount of ETH to what is required.

    after = get_token_balances(
        [
            badger.token,
            digg.token,
            interface.IERC20(bDigg.address),
            interface.IERC20(bBadger.address),
            interface.IERC20(sushiBbadgerPair),
            interface.IERC20(sushiBDiggPair),
        ],
        [badger.devMultisig],
    )
    after.print()

    safe_tx = safe.multisend_from_receipts()
    safe.preview(safe_tx)
    data = safe.print_transaction(safe_tx)
    safe.post_transaction(safe_tx)
    """
    How do we get exactly 250k worth of each asset?
    Calculate how much you need to get 250k

    ===== Normal Assets =====
    250k / USD price of asset 

    ===== For bTokens =====
    How much original token to get: 250k / USD price of underlying asset 
    bToken will handle itself
    """

    tokenA.approve(sushiswap.router, amountA)
    console.print(
        "addLiquidityETH",
        {
            "tokenA": tokenA.address,
            "amountA": amountA,
            "amountB": amountB,
            "badger ppfs": bBadger.getPricePerFullShare(),
            "original supply": Wei("4000 gwei"),
            "current supply": digg.token.totalSupply(),
        },
    )

    router.addLiquidityETH(
        tokenA.address,
        amountA,
        int(amountA * 0.95),
        int(eth_out * 0.95),
        badger.devMultisig,
        chain.time() + 200000,
        {"value": eth_out},
    )

    tokenA = bDigg

    amountA = ((digg_to_lp * 10**9) * 10**18) / bDigg.getPricePerFullShare()
    amountA = amountA * (Wei("4000 gwei")) / digg.token.totalSupply()

    print("expected bDigg", amountA)

    amountA = bDigg.balanceOf(badger.devMultisig)

    print("actual bDigg", amountA)

    tokenA.approve(sushiswap.router, amountA)
    console.print(
        "addLiquidityETH",
        {
            "tokenA": tokenA.address,
            "amountA": amountA,
            "amountB": amountB,
            "digg ppfs": bDigg.getPricePerFullShare(),
        },
    )

    router.addLiquidityETH(
        tokenA.address,
        amountA,
        int(amountA * 0.95),
        int(eth_out * 0.95),
        badger.devMultisig,
        chain.time() + 200000,
        {"value": eth_out},
    )

    after = get_token_balances(
        [
            badger.token,
            digg.token,
            interface.IERC20(bDigg.address),
            interface.IERC20(bBadger.address),
            interface.IERC20(sushiBbadgerPair),
            interface.IERC20(sushiBDiggPair),
        ],
        [badger.devMultisig],
    )
    after.print()

    safe_tx = safe.multisend_from_receipts()
    safe.preview(safe_tx)
    data = safe.print_transaction(safe_tx)
    safe.post_transaction(safe_tx)

    pair = interface.IUniswapV2Pair(sushiBbadgerPair)
    console.print({
        "getReserves": pair.getReserves(),
        "token0": pair.token0(),
        "token1": pair.token1(),
        "price0CumulativeLast": pair.price0CumulativeLast(),
        "price1CumulativeLast": pair.price1CumulativeLast(),
    })

    pair = interface.IUniswapV2Pair(sushiBDiggPair)
    console.print({
        "getReserves": pair.getReserves(),
        "token0": pair.token0(),
        "token1": pair.token1(),
        "price0CumulativeLast": pair.price0CumulativeLast(),
        "price1CumulativeLast": pair.price1CumulativeLast(),
    })

    safe.post_transaction(safe_tx)

    pair = interface.IUniswapV2Pair(sushiBbadgerPair)
    console.print({
        "getReserves": pair.getReserves(),
        "token0": pair.token0(),
        "token1": pair.token1(),
        "price0CumulativeLast": pair.price0CumulativeLast(),
        "price1CumulativeLast": pair.price1CumulativeLast(),
    })

    pair = interface.IUniswapV2Pair(sushiBDiggPair)
    console.print({
        "getReserves": pair.getReserves(),
        "token0": pair.token0(),
        "token1": pair.token1(),
        "price0CumulativeLast": pair.price0CumulativeLast(),
        "price1CumulativeLast": pair.price1CumulativeLast(),
    })
コード例 #12
0
ファイル: deposit_bBadger.py プロジェクト: zhm/badger-system
def main():
    badger = connect_badger("deploy-final.json")
    digg = badger.digg
    admin = badger.devProxyAdmin
    multisig = badger.devMultisig
    contracts = badger.contracts_upgradeable
    deployer = badger.deployer

    expectedMultisig = "0xB65cef03b9B89f99517643226d76e286ee999e77"
    assert multisig == expectedMultisig

    safe = ApeSafe(badger.devMultisig.address)

    abi = Sett.abi

    badgerToken = safe.contract(badger.token.address)
    diggToken = safe.contract(digg.token.address)
    bBadger = safe.contract_from_abi(
        badger.getSett("native.badger").address, "Sett", abi)
    bDigg = safe.contract_from_abi(
        badger.getSett("native.digg").address, "Sett", abi)
    rewardsEscrow = safe.contract(badger.rewardsEscrow.address)

    badger_usd = fetch_usd_price(badger.token.address)
    eth_usd = fetch_usd_price_eth()

    # USD Denominated
    # badger_to_send = Wei(str(total_usd / badger_usd) + " ether")

    # Badger denominated
    badger_to_send = Wei("5970.744318 ether")

    table = []
    table.append(["badger", badger_to_send, badger_usd])
    table.append(["eth", 0, eth_usd])
    print(tabulate(table, headers=["asset", "to send", "$ price"]))

    snap = BalanceSnapshotter(
        [badgerToken, bBadger],
        [badger.devMultisig, badger.deployer, badger.rewardsEscrow])

    snap.snap(name="Before Transfers")

    # Transfer assets to multisig
    rewardsEscrow.transfer(badgerToken, badger.devMultisig, badger_to_send)

    snap.snap(name="After Transfers")
    snap.diff_last_two()

    # Deposit bBadger
    badgerToken.approve(bBadger.address, badger_to_send)
    bBadgerBefore = bBadger.balanceOf(badger.devMultisig)
    tx = bBadger.deposit(badger_to_send)
    bBadgerAfter = bBadger.balanceOf(badger.devMultisig)
    print("bBadger to transfer", bBadgerAfter - bBadgerBefore,
          val(bBadgerAfter - bBadgerBefore))
    # bBadger.transfer(badger.treasuryMultisig, bBadgerAfter - bBadgerBefore)
    print(tx.events)

    snap.snap(name="After Deposits")
    snap.diff_last_two()

    safe_tx = safe.multisend_from_receipts()
    safe.preview(safe_tx)
    data = safe.print_transaction(safe_tx)
    safe.post_transaction(safe_tx)