Ejemplo n.º 1
0
def main():
    deployer = accounts.at('0xB593d82d53e2c187dc49673709a6E9f806cdC835',
                           force=True)
    # deployer = accounts.load('gh')

    # deploy safeboxes
    safebox_eth = SafeBoxETH.deploy(
        '0x41c84c0e2EE0b740Cf0d31F63f3B6F627DC6b393',
        'Interest Bearing Ether v2', 'ibETHv2', {'from': deployer})
    safebox_dai = SafeBox.deploy('0x8e595470Ed749b85C6F7669de83EAe304C2ec68F',
                                 'Interest Bearing Dai Stablecoin v2',
                                 'ibDAIv2', {'from': deployer})
    safebox_usdt = SafeBox.deploy('0x48759F220ED983dB51fA7A8C0D2AAb8f3ce4166a',
                                  'Interest Bearing Tether USD v2', 'ibUSDTv2',
                                  {'from': deployer})
    safebox_usdc = SafeBox.deploy('0x76Eb2FE28b36B3ee97F3Adae0C69606eeDB2A37c',
                                  'Interest Bearing USD Coin v2', 'ibUSDCv2',
                                  {'from': deployer})
    safebox_yfi = SafeBox.deploy('0xFa3472f7319477c9bFEcdD66E4B948569E7621b9',
                                 'Interest Bearing yearn.finance v2',
                                 'ibYFIv2', {'from': deployer})

    # add banks
    usdt = interface.IERC20Ex('0xdAC17F958D2ee523a2206206994597C13D831ec7')
    usdc = interface.IERC20Ex('0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48')
    yfi = interface.IERC20Ex('0x0bc529c00C6401aEF6D220BE8C6Ea1667F6Ad93e')

    cyusdt = '0x48759F220ED983dB51fA7A8C0D2AAb8f3ce4166a'
    cyusdc = '0x76Eb2FE28b36B3ee97F3Adae0C69606eeDB2A37c'
    cyyfi = '0xFa3472f7319477c9bFEcdD66E4B948569E7621b9'

    bank = HomoraBank.at('0x5f5Cd91070960D13ee549C9CC47e7a4Cd00457bb')
    bank.addBank(usdt, cyusdt, {'from': deployer})
    bank.addBank(usdc, cyusdc, {'from': deployer})
Ejemplo n.º 2
0
def main():
    deployer = accounts.at('0xB593d82d53e2c187dc49673709a6E9f806cdC835',
                           force=True)
    # deployer = accounts.load('gh')

    # deploy safeboxes
    safebox_eth = SafeBoxETH.deploy(
        '0x41c84c0e2EE0b740Cf0d31F63f3B6F627DC6b393',
        'Interest Bearing Ether v2', 'ibETHv2', {'from': deployer})
    safebox_dai = SafeBox.deploy('0x8e595470Ed749b85C6F7669de83EAe304C2ec68F',
                                 'Interest Bearing Dai Stablecoin v2',
                                 'ibDAIv2', {'from': deployer})
    safebox_usdt = SafeBox.deploy('0x48759F220ED983dB51fA7A8C0D2AAb8f3ce4166a',
                                  'Interest Bearing Tether USD v2', 'ibUSDTv2',
                                  {'from': deployer})
    safebox_usdc = SafeBox.deploy('0x76Eb2FE28b36B3ee97F3Adae0C69606eeDB2A37c',
                                  'Interest Bearing USD Coin v2', 'ibUSDCv2',
                                  {'from': deployer})
    safebox_yfi = SafeBox.deploy('0xFa3472f7319477c9bFEcdD66E4B948569E7621b9',
                                 'Interest Bearing yearn.finance v2',
                                 'ibYFIv2', {'from': deployer})
def main():
    admin = accounts[0]
    alice = accounts[1]
    bob = accounts[2]

    weth = interface.IERC20Ex('0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2')
    cyweth = interface.IERC20Ex('0x41c84c0e2ee0b740cf0d31f63f3b6f627dc6b393')

    homora = HomoraBank.deploy({'from': admin})

    safebox = SafeBoxETH.deploy(cyweth, 'ibETHv2', 'ibETHv2', {'from': admin})

    # set up funds to alice
    mint_tokens(weth, alice)
    mint_tokens(weth, bob)

    weth.approve(cyweth, 2**256-1, {'from': bob})

    #################################################################
    # check decimals

    assert safebox.decimals() == cyweth.decimals(), 'incorrect decimals'

    #################################################################
    # deposit
    print('====================================')
    print('Case 1. deposit')

    prevETHAlice = alice.balance()
    prevWETHBob = weth.balanceOf(bob)
    prevIBETHAlice = safebox.balanceOf(alice)
    prevcyWETHBob = cyweth.balanceOf(bob)

    alice_amt = 10**18
    bob_amt = 10**18
    safebox.deposit({'from': alice, 'value': alice_amt})
    chain.mine(20)
    cyweth.mint(bob_amt, {'from': bob})

    curETHAlice = alice.balance()
    curWETHBob = weth.balanceOf(bob)
    curIBETHAlice = safebox.balanceOf(alice)
    curcyWETHBob = cyweth.balanceOf(bob)

    print('∆ eth alice', curETHAlice - prevETHAlice)
    print('∆ weth bob', curWETHBob - prevWETHBob)
    print('∆ ibETH bal alice', curIBETHAlice - prevIBETHAlice)
    print('∆ cyWETH bal bob', curcyWETHBob - prevcyWETHBob)
    print('calculated ibETH alice', alice_amt * 10**18 // cyweth.exchangeRateStored())
    print('calculated ibETH bob', bob_amt * 10**18 // cyweth.exchangeRateStored())

    assert curETHAlice - prevETHAlice == -alice_amt, 'incorrect alice amount'
    assert curWETHBob - prevWETHBob == -bob_amt, 'incorrect bob amount'
    assert almostEqual(curIBETHAlice - prevIBETHAlice, curcyWETHBob - prevcyWETHBob)

    chain.mine(200)

    #################################################################
    # alice withdraws 1/3 & 2/3. bob withdraws all.
    print('====================================')
    print('Case 2. withdraw')

    alice_withdraw_1 = safebox.balanceOf(alice) // 3
    alice_withdraw_2 = safebox.balanceOf(alice) - alice_withdraw_1
    bob_withdraw = cyweth.balanceOf(bob) // 3

    prevETHAlice = alice.balance()
    prevWETHBob = weth.balanceOf(bob)
    prevIBETHAlice = safebox.balanceOf(alice)
    prevcyWETHBob = cyweth.balanceOf(bob)

    safebox.withdraw(alice_withdraw_1, {'from': alice})
    chain.mine(20)
    cyweth.redeem(bob_withdraw, {'from': bob})

    curETHAlice = alice.balance()
    curWETHBob = weth.balanceOf(bob)
    curIBETHAlice = safebox.balanceOf(alice)
    curcyWETHBob = cyweth.balanceOf(bob)

    print('∆ eth alice', curETHAlice - prevETHAlice)
    print('∆ weth bob', curWETHBob - prevWETHBob)
    print('∆ ibETH bal alice', curIBETHAlice - prevIBETHAlice)
    print('∆ cyWETH bal bob', curcyWETHBob - prevcyWETHBob)

    assert almostEqual(curETHAlice - prevETHAlice, alice_amt //
                       3), 'incorrect alice withdraw eth amount'
    assert almostEqual(curWETHBob - prevWETHBob, bob_amt // 3), 'incorrect bob withdraw eth amount'
    assert almostEqual(curIBETHAlice - prevIBETHAlice, curcyWETHBob -
                       prevcyWETHBob), 'incorrect withdraw amount'

    chain.mine(20)

    prevETHAlice = alice.balance()
    prevIBETHAlice = safebox.balanceOf(alice)

    safebox.withdraw(alice_withdraw_2, {'from': alice})

    curETHAlice = alice.balance()
    curIBETHAlice = safebox.balanceOf(alice)

    print('∆ eth alice', curETHAlice - prevETHAlice)
    print('∆ ibETH bal alice', curIBETHAlice - prevIBETHAlice)

    assert almostEqual(curETHAlice - prevETHAlice, alice_amt * 2 //
                       3), 'incorrect second withdraw'