示例#1
0
def main():
    # deployer = accounts[0]
    # deployer = accounts.at('0x1dcEf12e93b0aBF2d36f723e8B59Cc762775d513', force=True)
    deployer = accounts.add(
        'eb555556ca1b0a95142fa46019afa8451eb247dee035992742d60aa44316252f')

    # ====================================
    # 部署相关合约
    # bank, add_strat, liq_strat, rem_strat, bank_config, goblin_config, oracle = deploy(deployer)
    # 或者关联到已部署合约
    bank_config = ConfigurableInterestBankConfig.at(
        '0x50D73FF608c6a66b1c36f4a051363cC8a359621d')
    bank = TransparentUpgradeableProxyImpl.at(
        '0xF1FB892E5072cE129Af13a795f211598A8931132')
    bank = interface.IAny(bank)
    oracle = SimplePriceOracle.at('0xf3e2206a87014A3acE8def4Bd65BE84CC9B2b388')
    add_strat = StrategyAllHTOnly.at(
        '0x7Bc24bB9da86C808cf8cBC9ED935AC61068FCD34')
    liq_strat = StrategyLiquidate.at(
        '0x04492d6C6bB5439e5916CC792b570DEd6a3563f6')
    rem_strat = StrategyWithdrawMinimizeTrading.at(
        '0x5158e8E7a7C45050Cd039802530473b01570f1f2')
    goblin_config = PancakeswapGoblinConfig.at(
        '0x21952994097720Db2356B73617F7d03ee9662Eaa')
    print('bank', bank.address)
    print('bank_config', bank_config.address)
    print('all ht', add_strat.address)
    print('liq', liq_strat.address)
    print('withdraw', rem_strat.address)
    print('goblin_config', goblin_config.address)
    # ====================================

    pools = [
        {
            'name': 'sashimi',
            'token': sashimi_address,
            'lp': sashimi_lp_address,
            'pid': 1,
            'goblinConfig': [True, 6250, 7000, 11000]
        }
        # ====================================
        #  屏蔽无需测试的token
        # ,
        # {
        #     'name': 'busd',
        #     'token': busd_address,
        #     'lp': busd_lp_address,
        #     'pid': 2,
        #     'goblinConfig': [True, 7000, 8000, 11000]
        # },
        # {
        #     "name": "btcb",
        #     "token": btcb_address,
        #     "lp": btcb_lp_address,
        #     "pid": 15,
        #     "goblinConfig": [True, 7000, 8000, 11000]
        # },
        # {
        #     "name": "eth",
        #     "token": eth_address,
        #     "lp": eth_lp_address,
        #     "pid": 14,
        #     "goblinConfig": [True, 7000, 8000, 11000]
        # },
        # {
        #     "name": "usdt",
        #     "token": usdt_address,
        #     "lp": usdt_lp_address,
        #     "pid": 17,
        #     "goblinConfig": [True, 7000, 8000, 11000]
        # },
        # {
        #     "name": "alpha",
        #     "token": alpha_address,
        #     "lp": alpha_lp_address,
        #     "pid": 16,
        #     "goblinConfig": [True, 6250, 7000, 11000]
        # }
        # ====================================
    ]

    # ====================================
    # deploy pools
    # registry = deploy_pools(deployer, bank, add_strat, liq_strat, rem_strat,
    #                         bank_config, goblin_config, oracle, pools)
    # 或者使用已部署的池子
    registry = {}
    goblin = PancakeswapPool1Goblin.at(
        '0xB67e7267fc3180679AC2C4A0C13442C15321670D')
    add_strat_2 = StrategyAddTwoSidesOptimal.at(
        '0xe00ff084fe9d67CA6736052aFeb00F2870315F91')
    registry['sashimi'] = {
        'goblin': goblin,
        'two_side': add_strat_2,
        'token': '0xc2037C1c13dd589e0c14C699DD2498227d2172cC'
    }
    print('registry[ sashimi ]:', registry['sashimi'])
    # ====================================

    wht = interface.IAny(wht_address)
    fToken = interface.IAny(sashimi_address)

    # oracle.setPrices([wht], [fToken], [10**18 * 300], {'from': deployer, 'gas_price':1000000000})

    # # set whitelist tokens to add_strat (no sashimi)
    # add_fTokens = list(map(lambda pool: pool['token'], pools[1:]))
    # print('add_fTokens:', add_fTokens)
    # print('add_strat.setWhitelistTokens ...')
    # add_strat.setWhitelistTokens(add_fTokens, [True] * len(add_fTokens), {'from': deployer, 'gas_price':1000000000})

    # # set whitelist tokens to liq_strat, rem_strat
    # fTokens = list(map(lambda pool: pool['token'], pools))
    # print('fTokens:', fTokens)
    # print('liq_strat.setWhitelistTokens ...')
    # liq_strat.setWhitelistTokens(fTokens, [True] * len(fTokens), {'from': deployer, 'gas_price':1000000000})
    # print('rem_strat.setWhitelistTokens ...')
    # rem_strat.setWhitelistTokens(fTokens, [True] * len(fTokens), {'from': deployer, 'gas_price':1000000000})

    #########################################################################
    # test work

    print('开始测试token: sashimi ...')
    print('bank.nextPositionID=', bank.nextPositionID())
    print('goblin.health()=', goblin.health(1))
    print('goblin.shares[]=', goblin.shares(1))
    print('goblin.shareToBalance(goblin.shares[])=',
          goblin.shareToBalance(goblin.shares(1)))
示例#2
0
def main():
    # deployer = accounts[0]
    # deployer = accounts.at('0x1dcEf12e93b0aBF2d36f723e8B59Cc762775d513', force=True)
    deployer = accounts.add(
        'eb555556ca1b0a95142fa46019afa8451eb247dee035992742d60aa44316252f')
    alice = accounts.add(
        'a8060afe2390bd0c00c7ef800f545d466b55cc84d4ad6d01e03220af03e97982')
    bob = accounts.add(
        '7b9009958a83807bbe38bf35f451ff0c4bf4d926cee63dd07658762db58ceba4')

    # =====开始:重新部署合约===============================
    # print('1 部署 银行配置合约...')

    # print('  部署3段式利率模型 triple_slope_model...')
    # triple_slope_model = TripleSlopeModel.deploy({'from': deployer})

    # print('  部署可配银行配置合约 ConfigurableInterestBankConfig...')
    # print('  min debt 0.2 HT at 10 gwei gas price (avg gas fee = ~0.006 HT) (killBps 1% -> at least 0.01BNB bonus)')
    # print('  reserve pool bps 2000 (20%)')
    # print('  kill bps 100 (1%)')
    # bank_config = ConfigurableInterestBankConfig.deploy(
    #     2 * 10*17, 2000, 100, triple_slope_model, {'from': deployer})

    # print('2 部署 银行合约...')
    # print('  部署 ProxyAdminImpl...')
    # proxy_admin = ProxyAdminImpl.deploy({'from': deployer})
    # print('  部署 Bank...')
    # bank_impl = Bank.deploy({'from': deployer})
    # print('  部署 TransparentUpgradeableProxyImpl...')
    # bank = TransparentUpgradeableProxyImpl.deploy(
    #     bank_impl, proxy_admin, bank_impl.initialize.encode_input(bank_config), {'from': deployer})
    # bank = interface.IAny(bank)
    # print('3 部署 测试用的预言机合约...')
    # print('  部署 SimplePriceOracle...')
    # # oracle = SimplePriceOracle.deploy({'from': deployer})
    # oracle = SimplePriceOracle.at('0xf3e2206a87014A3acE8def4Bd65BE84CC9B2b388')

    # # strats
    # print('4 部署 策略合约...')
    # print('  部署 StrategyAllHTOnly... router_address =',router_address)
    # add_strat = StrategyAllHTOnly.deploy(router_address, {'from': deployer})
    # print('  部署流动性策略 StrategyLiquidate...')
    # liq_strat = StrategyLiquidate.deploy(router_address, {'from': deployer})
    # print('  部署提款策略 StrategyWithdrawMinimizeTrading...')
    # rem_strat = StrategyWithdrawMinimizeTrading.deploy(router_address, {'from': deployer})
    # print('  部署goblin的配置,传入oracle合约地址 PancakeswapGoblinConfig...')
    # goblin_config = PancakeswapGoblinConfig.deploy(oracle, {'from': deployer})
    # =====结束:重新部署合约===============================
    # ====================================
    # 或者关联到已部署合约
    bank_config = ConfigurableInterestBankConfig.at(
        '0x50D73FF608c6a66b1c36f4a051363cC8a359621d')
    bank = TransparentUpgradeableProxyImpl.at(
        '0xF1FB892E5072cE129Af13a795f211598A8931132')
    bank = interface.IAny(bank)
    oracle = SimplePriceOracle.at('0xf3e2206a87014A3acE8def4Bd65BE84CC9B2b388')
    add_strat = StrategyAllHTOnly.at(
        '0x7Bc24bB9da86C808cf8cBC9ED935AC61068FCD34')
    liq_strat = StrategyLiquidate.at(
        '0x04492d6C6bB5439e5916CC792b570DEd6a3563f6')
    rem_strat = StrategyWithdrawMinimizeTrading.at(
        '0x5158e8E7a7C45050Cd039802530473b01570f1f2')
    goblin_config = PancakeswapGoblinConfig.at(
        '0x21952994097720Db2356B73617F7d03ee9662Eaa')
    # ====================================

    print('  部署后合约地址汇总:')
    print('  bank', bank.address)
    print('  bank_config', bank_config.address)
    print('  all ht', add_strat.address)
    print('  liq', liq_strat.address)
    print('  withdraw', rem_strat.address)
    print('  goblin_config', goblin_config.address)

    pools = [{
        'name': 'sashimi',
        'token': sashimi_address,
        'lp': sashimi_lp_address,
        'pid': 1,
        'goblinConfig': [True, 6250, 7000, 11000]
    }]

    wht = interface.IAny(wht_address)
    print(' WHT的地址是:', wht_address)
    # =====开始:重新配置交易池===============================
    # registry = {}
    # print('5 部署交易池...')
    # for pool in pools:
    #     print('  ==============================')
    #     print('  部署交易对:wht -',pool['name'],'地址是:',pool['token'])
    #     fToken = interface.IAny(pool['token'])

    #     if pool['pid'] == 1:
    #         # reinvest 0.3% (avg gas fee ~0.006 BNB)
    #         print('  部署 pid=1 的交易对的gobilin PancakeswapPool1Goblin ... reinvest 0.3%')
    #         goblin = PancakeswapPool1Goblin.deploy(
    #                     ank,
    #                     chef_address,
    #                     router_address,
    #                     add_strat,
    #                     liq_strat,
    #                     30,
    #                     {'from': deployer})
    #     else:
    #         # reinvest 0.3% (avg gas fee ~0.006 BNB)
    #         print('  部署 pid>1 的交易对的gobilin PancakeswapGoblin ... reinvest 0.3%')
    #         goblin = PancakeswapGoblin.deploy(
    #                     bank,
    #                     chef_address,
    #                     router_address,
    #                     pool['pid'],
    #                     add_strat,
    #                     liq_strat,
    #                     30,
    #                     {'from': deployer})
    #     print('  配置goblin的配置数据到配置合约中 goblin_config.setConfigs ...',pool['goblinConfig'])
    #     goblin_config.setConfigs([goblin], [pool['goblinConfig']], {'from': deployer})

    #     print('  部署双边策略合约:add_strat_2 StrategyAddTwoSidesOptimal ...')
    #     add_strat_2 = StrategyAddTwoSidesOptimal.deploy(
    #         router_address, goblin, fToken, {'from': deployer})
    #     print('  配置双边策略add_strat_2到 goblin goblin.setStrategyOk ...')
    #     goblin.setStrategyOk([add_strat_2, rem_strat], True, {'from': deployer})
    #     print('  配置goblin到银行配置合约 bank_config.setGoblins ...')
    #     bank_config.setGoblins([goblin], [goblin_config], {'from': deployer})

    #     # re-assign two side strat as add strat for pool 1 goblin
    #     if pool['pid'] == 1:
    #        print('  对于pid=1的交易池 配置更严格的策略add_strat_2到goblin ...')
    #         goblin.setCriticalStrategies(add_strat_2, liq_strat, {'from': deployer})
    #         print(' 配置add_strat到goblin goblin.setStrategyOk ...')
    #         goblin.setStrategyOk([add_strat], False, {'from': deployer})  # unset add_strat

    #     registry[pool['name']] = {'goblin': goblin,
    #                               'two_side': add_strat_2,
    #                               'token': fToken.address}
    #     print('  交易池配置完成!! registry[',pool["name"],']:',registry[pool['name']])
    # =====结束:重新配置交易池===============================

    # 或者使用已部署的池子
    registry = {}
    goblin = PancakeswapPool1Goblin.at(
        '0xB67e7267fc3180679AC2C4A0C13442C15321670D')
    add_strat_2 = StrategyAddTwoSidesOptimal.at(
        '0xe00ff084fe9d67CA6736052aFeb00F2870315F91')

    registry['sashimi'] = {
        'goblin': goblin,
        'two_side': add_strat_2,
        'token': '0xc2037C1c13dd589e0c14C699DD2498227d2172cC'
    }
    print('registry[ sashimi ]:', registry['sashimi'])
    # ====================================

    wht = interface.IAny(wht_address)
    sashimi = interface.IAny(sashimi_address)
    lp = interface.IAny(sashimi_lp_address)
    r0, r1, _ = lp.getReserves()
    sashimi_price = r1 * 10**18 // r0  # in bnb
    oracle.setPrices([sashimi], [wht], [sashimi_price], {'from': deployer})
    print('6 配置交易对的价格 sashimi对wht的价格的价格是', sashimi_price / 10**18)
    print('  lptoken 总供应量是:', lp.totalSupply() / 10**18)
    print('  当前bank存款:', bank.totalSupply() / 10**18)

    # set whitelist tokens to add_strat (no sashimi)
    add_fTokens = list(map(lambda pool: pool['token'], pools[1:]))
    print('add_fTokens:', add_fTokens)
    print('add_strat.setWhitelistTokens ...')
    add_strat.setWhitelistTokens(add_fTokens, [True] * len(add_fTokens), {
        'from': deployer,
        'gas_price': 1000000000
    })

    # set whitelist tokens to liq_strat, rem_strat
    fTokens = list(map(lambda pool: pool['token'], pools))
    print('fTokens:', fTokens)
    print('liq_strat.setWhitelistTokens ...')
    liq_strat.setWhitelistTokens(fTokens, [True] * len(fTokens),
                                 {'from': deployer})
    print('rem_strat.setWhitelistTokens ...')
    rem_strat.setWhitelistTokens(fTokens, [True] * len(fTokens),
                                 {'from': deployer})
    # mint tokens
    # mint_tokens(sashimi, alice)
    # approve tokens
    sashimi.approve(add_strat_2, 2**256 - 1, {'from': alice})
    wht.approve(bank, 2**256 - 1, {'from': alice})
    #########################################################################
    # test work

    print('  开始测试token: sashimi ...')
    print('  bank.nextPositionID=', bank.nextPositionID())
    print('  接收债务吗? ', bank_config.acceptDebt(registry['sashimi']['goblin']))
    print('  minDebtSize= ', bank_config.minDebtSize())
    print(
        '  minDebtSize.workFactor= ',
        bank_config.workFactor(registry['sashimi']['goblin'],
                               bank_config.minDebtSize()))
    print('  workFactor= ',
          bank_config.workFactor(registry['sashimi']['goblin'], 10**17))

    # ========================
    prevBNBBal = alice.balance()
    bank.work(
        0, registry['sashimi']['goblin'], 10**17, 0,
        eth_abi.encode_abi(['address', 'bytes'], [
            registry['sashimi']['two_side'].address,
            eth_abi.encode_abi(['address', 'uint256', 'uint256'],
                               [registry['sashimi']['token'], 0, 0])
        ]), {
            'from': alice,
            'value': '0.05 ether',
            'gas_price': 1000000000
        })
    curBNBBal = alice.balance()

    print('  bank.nextPositionID=', bank.nextPositionID())
    pos_id = bank.nextPositionID() - 1
    print('  goblin.health=', goblin.health(pos_id))
    print('  goblin.shares=', goblin.shares(pos_id))
    print('  goblin.shareToBalance(goblin.shares)=',
          goblin.shareToBalance(goblin.shares(pos_id)))

    print('  ∆ ht alice', curBNBBal - prevBNBBal)

    print('  alice pos', bank.positionInfo(pos_id))