示例#1
0
文件: main.py 项目: tangy-ong/brownie
    def _load_deployments(self) -> None:
        if CONFIG.network_type != "live" and not CONFIG.settings["dev_deployment_artifacts"]:
            return
        chainid = CONFIG.active_network["chainid"] if CONFIG.network_type == "live" else "dev"
        path = self._build_path.joinpath(f"deployments/{chainid}")
        path.mkdir(exist_ok=True)
        deployments = list(path.glob("*.json"))
        deployments.sort(key=lambda k: k.stat().st_mtime)
        deployment_map = self._load_deployment_map()
        for build_json in deployments:
            with build_json.open() as fp:
                build = json.load(fp)

            contract_name = build["contractName"]
            if contract_name not in self._containers:
                build_json.unlink()
                continue
            if "pcMap" in build:
                contract = ProjectContract(self, build, build_json.stem)
            else:
                contract = Contract.from_abi(  # type: ignore
                    contract_name, build_json.stem, build["abi"]
                )
                contract._project = self
            container = self._containers[contract_name]
            _add_contract(contract)
            container._contracts.append(contract)

            # update deployment map for the current chain
            instances = deployment_map.setdefault(chainid, {}).setdefault(contract_name, [])
            if build_json.stem in instances:
                instances.remove(build_json.stem)
            instances.insert(0, build_json.stem)

        self._save_deployment_map(deployment_map)
示例#2
0
文件: main.py 项目: thanos/brownie
 def _load_deployments(self) -> None:
     if not CONFIG["active_network"].get("persist", None):
         return
     network = CONFIG["active_network"]["name"]
     path = self._path.joinpath(f"build/deployments/{network}")
     path.mkdir(exist_ok=True)
     deployments = list(
         self._path.glob(
             f"build/deployments/{CONFIG['active_network']['name']}/*.json")
     )
     deployments.sort(key=lambda k: k.stat().st_mtime)
     for build_json in deployments:
         with build_json.open() as fp:
             build = json.load(fp)
         if build["contractName"] not in self._containers:
             build_json.unlink()
             continue
         if "pcMap" in build:
             contract = ProjectContract(self, build, build_json.stem)
         else:
             contract = Contract(  # type: ignore
                 build["contractName"], build_json.stem, build["abi"])
             contract._project = self
         container = self._containers[build["contractName"]]
         _add_contract(contract)
         container._contracts.append(contract)
示例#3
0
def bzx(accounts, interface, bZxProtocol, ProtocolSettings, LoanSettings, LoanMaintenance):
    bzxproxy = accounts[0].deploy(bZxProtocol)
    bzx = Contract.from_abi("bzx", address=bzxproxy.address, abi=interface.IBZx.abi, owner=accounts[0])
    _add_contract(bzx)
    
    bzx.replaceContract(accounts[0].deploy(ProtocolSettings).address)
    bzx.replaceContract(accounts[0].deploy(LoanSettings).address)
    bzx.replaceContract(accounts[0].deploy(LoanMaintenance).address)
    #bzx.replaceContract(accounts[0].deploy(LoanOpenings).address)
    #bzx.replaceContract(accounts[0].deploy(LoanClosings).address)
    
    return bzx
示例#4
0
def swap(
    alice,
    base_pool,
    factory,
    plain_implementations,
    meta_implementation_idx,
    coins,
    project,
    plain_pool_size,
    pool_type,
    is_meta_pool,
    web3,
):
    if not is_meta_pool:
        # modifies the factory so should be module scoped
        tx = factory.deploy_plain_pool(
            "Test Plain Pool",
            "TPP",
            coins + [ZERO_ADDRESS] * (4 - plain_pool_size),
            200,
            4000000,
            0,
            pool_type,
            {"from": alice},
        )
        return getattr(project, plain_implementations[pool_type]._name).at(
            tx.return_value)
    else:
        if factory.pool_count() != 0:
            return state._find_contract(factory.pool_list(0))

        tx = factory.deploy_metapool(
            base_pool,
            "Test Meta Pool",
            "TMP",
            coins[0],
            200,
            4000000,
            meta_implementation_idx,
            {"from": alice},
        )
        key = convert.to_address(
            HexBytes(web3.eth.get_code(tx.return_value))[10:30].hex())
        instance = Contract.from_abi("Meta Instance", tx.return_value,
                                     meta_contracts[key])
        instance._build["language"] = "Vyper"
        state._add_contract(instance)
        return instance
示例#5
0
 def _load_deployments(self) -> None:
     if CONFIG.network_type != "live":
         return
     chainid = CONFIG.active_network["chainid"]
     path = self._path.joinpath(f"build/deployments/{chainid}")
     path.mkdir(exist_ok=True)
     deployments = list(path.glob("*.json"))
     deployments.sort(key=lambda k: k.stat().st_mtime)
     for build_json in deployments:
         with build_json.open() as fp:
             build = json.load(fp)
         if build["contractName"] not in self._containers:
             build_json.unlink()
             continue
         if "pcMap" in build:
             contract = ProjectContract(self, build, build_json.stem)
         else:
             contract = Contract(  # type: ignore
                 build["contractName"], build_json.stem, build["abi"])
             contract._project = self
         container = self._containers[build["contractName"]]
         _add_contract(contract)
         container._contracts.append(contract)
def sovryn(accounts, interface, sovrynProtocol, ProtocolSettings, LoanSettings,
           LoanMaintenance, WRBTC, SUSD, RBTC, TestSovrynSwap, priceFeeds):
    sovrynproxy = accounts[0].deploy(sovrynProtocol)
    sovryn = Contract.from_abi("sovryn",
                               address=sovrynproxy.address,
                               abi=interface.ISovryn.abi,
                               owner=accounts[0])
    _add_contract(sovryn)

    sovryn.replaceContract(accounts[0].deploy(ProtocolSettings).address)
    sovryn.replaceContract(accounts[0].deploy(LoanSettings).address)
    sovryn.replaceContract(accounts[0].deploy(LoanMaintenance).address)
    #sovryn.replaceContract(accounts[0].deploy(LoanOpenings).address)
    #sovryn.replaceContract(accounts[0].deploy(LoanClosings).address)

    sovrynSwapSimulator = accounts[0].deploy(TestSovrynSwap, priceFeeds)
    sovryn.setSovrynSwapContractRegistryAddress(sovrynSwapSimulator.address)
    sovryn.setSupportedTokens([SUSD.address, RBTC.address, WRBTC.address],
                              [True, True, True])

    sovryn.setWrbtcToken(WRBTC.address)

    return sovryn
def deployProtocol(acct, tokens, medianizerAddress):

    constants = shared.Constants()

    print("Deploying sovrynProtocol.")
    sovrynproxy = acct.deploy(sovrynProtocol)
    sovryn = Contract.from_abi("sovryn",
                               address=sovrynproxy.address,
                               abi=interface.ISovryn.abi,
                               owner=acct)
    _add_contract(sovryn)

    print("Deploying PriceFeeds.")
    #feeds = acct.deploy(PriceFeedsLocal, tokens.wrbtc.address, sovryn.address)
    priceFeedMoC = acct.deploy(PriceFeedsMoC, medianizerAddress)
    #2nd address should actually be the protocol token address, not the protocol address
    feeds = acct.deploy(PriceFeeds, tokens.wrbtc.address, sovryn.address,
                        tokens.susd.address)
    feeds.setPriceFeed([tokens.wrbtc.address], [priceFeedMoC.address])

    print("Deploying ProtocolSettings.")
    settings = acct.deploy(ProtocolSettings)
    print("Calling replaceContract.")
    sovryn.replaceContract(settings.address)

    print("Deploying Swaps.")
    swaps = acct.deploy(SwapsImplSovrynSwap)
    #do not deploy the sovryn swap mockup on mainnet
    if network.show_active() == "development":
        sovrynSwapSimulator = acct.deploy(TestSovrynSwap, feeds.address)
        sovryn.setSovrynSwapContractRegistryAddress(
            sovrynSwapSimulator.address)
    sovryn.setSupportedTokens([tokens.susd.address, tokens.wrbtc.address],
                              [True, True])

    print("Calling setPriceFeedContract.")
    sovryn.setPriceFeedContract(feeds.address  # priceFeeds
                                )

    print("Calling setSwapsImplContract.")
    sovryn.setSwapsImplContract(swaps.address  # swapsImpl
                                )

    sovryn.setFeesController(acct.address)
    sovryn.setWrbtcToken(tokens.wrbtc.address)
    # needs to be replaced with an actual reward token address
    sovryn.setProtocolTokenAddress(sovryn.address)

    ## LoanSettings
    print("Deploying LoanSettings.")
    loanSettings = acct.deploy(LoanSettings)
    print("Calling replaceContract.")
    sovryn.replaceContract(loanSettings.address)

    ## LoanOpenings
    print("Deploying LoanOpenings.")
    loanOpenings = acct.deploy(LoanOpenings)
    print("Calling replaceContract.")
    sovryn.replaceContract(loanOpenings.address)

    ## LoanMaintenance
    print("Deploying LoanMaintenance.")
    loanMaintenance = acct.deploy(LoanMaintenance)
    print("Calling replaceContract.")
    sovryn.replaceContract(loanMaintenance.address)

    ## LoanClosings
    print("Deploying LoanClosings.")
    loanClosings = acct.deploy(LoanClosings)
    print("Calling replaceContract.")
    sovryn.replaceContract(loanClosings.address)

    return sovryn
def deployProtocol():
    global deploys, bzx, tokens, constants, addresses, thisNetwork, acct

    thisNetwork = network.show_active()

    if thisNetwork == "development":
        acct = accounts[0]
    elif thisNetwork == "sandbox":
        acct = accounts.load('mainnet_deployer')
    elif thisNetwork == "testnet":
        acct = accounts.load("rskdeployer")
    else:
        acct = accounts.load('testnet_deployer')
    print("Loaded account",acct)

    constants = shared.Constants()
    addresses = shared.Addresses()

    tokens = Munch()
    if thisNetwork == "development" or thisNetwork == "testnet":
        print("Deploying Tokens.")
        tokens.weth = acct.deploy(TestWeth) ## 0x3194cBDC3dbcd3E11a07892e7bA5c3394048Cc87
        tokens.dai = acct.deploy(TestToken, "DAI", "DAI", 18, 1e50)
        tokens.link = acct.deploy(TestToken, "LINK", "LINK", 18, 1e50)
    '''elif thisNetwork == "kovan":
        tokens.weth = Contract.from_abi("WETH", address=addresses.kovan.WETHTokenAddress, abi=IWethERC20.abi, owner=acct)
        tokens.dai = Contract.from_abi("DAI", address=addresses.kovan.DAITokenAddress, abi=IWethERC20.abi, owner=acct)
        tokens.link = Contract.from_abi("LINK", address=addresses.kovan.LINKTokenAddress, abi=IWethERC20.abi, owner=acct)'''

    ### DEPLOYMENT START ###

    if deploys.bZxProtocol is True:
        print("Deploying bZxProtocol.")
        bzxproxy = acct.deploy(bZxProtocol)
        bzx = Contract.from_abi("bzx", address=bzxproxy.address, abi=interface.IBZx.abi, owner=acct)
        _add_contract(bzx)
    else:
        if "bZxProtocol" in addresses[thisNetwork]:
            bzx = Contract.from_abi("bzx", address=addresses[thisNetwork].bZxProtocol, abi=interface.IBZx.abi, owner=acct)
            _add_contract(bzx)
        else:
            raise ValueError('bZxProtocol deployment missing!')

    ## PriceFeeds
    if deploys.PriceFeeds is True:
        print("Deploying PriceFeeds.")
        if thisNetwork == "development"  or thisNetwork == "testnet":        
            feeds = acct.deploy(PriceFeedsLocal)

            print("Calling setRates x3.")
            feeds.setRates(
                tokens.weth.address,
                tokens.link.address,
                54.52e18
            )
            feeds.setRates(
                tokens.weth.address,
                tokens.dai.address,
                200e18
            )
            feeds.setRates(
                tokens.link.address,
                tokens.dai.address,
                3.692e18
            )
        else:
            if thisNetwork == "kovan":
                feeds = acct.deploy(PriceFeedsTestnets)
                
                print("Calling setDecimals.")
                feeds.setDecimals(
                    [
                        "0xd0A1E359811322d97991E03f863a0C30C2cF029C", # WETH
                        "0xC4375B7De8af5a38a93548eb8453a498222C4fF2", # SAI
                        "0x4F96Fe3b7A6Cf9725f59d353F723c1bDb64CA6Aa", # DAI
                        "0xad67cB4d63C9da94AcA37fDF2761AaDF780ff4a2", # KNC
                        "0xe3e682A8Fc7EFec410E4099cc09EfCC0743C634a"  # BZRX
                    ]
                )

                print("Calling setPriceFeed.")
                feeds.setPriceFeed(
                    [
                        "0xC4375B7De8af5a38a93548eb8453a498222C4fF2", # SAI
                        "0x4F96Fe3b7A6Cf9725f59d353F723c1bDb64CA6Aa", # DAI
                        "0xad67cB4d63C9da94AcA37fDF2761AaDF780ff4a2"  # KNC
                    ],
                    [
                        "0x6F47077D3B6645Cb6fb7A29D280277EC1e5fFD90", # SAI - (sharing DAI feed)
                        "0x6F47077D3B6645Cb6fb7A29D280277EC1e5fFD90", # DAI
                        "0x0893AaF58f62279909F9F6FF2E5642f53342e77F"  # KNC
                    ],
                )
            elif thisNetwork == "sandbox":
                feeds = acct.deploy(PriceFeeds)
                
                print("Calling setDecimals.")
                feeds.setDecimals(
                    [
                        "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", # WETH
                        "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", # USDC
                        "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", # SAI
                        "0x2260fac5e5542a773aa44fbcfedf7c193bc2c599", # WBTC
                        "0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2", # MKR
                        "0xdd974d5c2e2928dea5f71b9825b8b646686bd200", # KNC
                        "0x1985365e9f78359a9b6ad760e32412f4a445e862", # REP
                        "0x0d8775f648430679a709e98d2b0cb6250d2887ef", # BAT
                        "0xe41d2489571d322189246dafa5ebde1f4699f498", # ZRX
                        "0x514910771af9ca656af840dff83e8264ecf986ca", # LINK
                        "0x57ab1ec28d129707052df4df418d58a2d46d5f51", # SUSD
                        "0x6b175474e89094c44da98b954eedeac495271d0f", # DAI
                        "0xdac17f958d2ee523a2206206994597c13d831ec7", # USDT (Tether)
                        "0x1c74cFF0376FB4031Cd7492cD6dB2D66c3f2c6B9"  # BZRX
                    ]
                )

                print("Calling setPriceFeed.")
                feeds.setPriceFeed(
                    [
                        "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", # USDC
                        "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", # SAI
                        "0x2260fac5e5542a773aa44fbcfedf7c193bc2c599", # WBTC
                        "0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2", # MKR
                        "0xdd974d5c2e2928dea5f71b9825b8b646686bd200", # KNC
                        "0x1985365e9f78359a9b6ad760e32412f4a445e862", # REP
                        "0x0d8775f648430679a709e98d2b0cb6250d2887ef", # BAT
                        "0xe41d2489571d322189246dafa5ebde1f4699f498", # ZRX
                        "0x514910771af9ca656af840dff83e8264ecf986ca", # LINK
                        "0x57ab1ec28d129707052df4df418d58a2d46d5f51", # SUSD
                        "0x6b175474e89094c44da98b954eedeac495271d0f", # DAI
                        "0xdac17f958d2ee523a2206206994597c13d831ec7", # USDT (Tether)
                        "0x0000000000000000000000000000000000000001"  # Fast Gas / Gwei
                    ],
                    [
                        "0xdE54467873c3BCAA76421061036053e371721708", # USDC
                        "0x037E8F2125bF532F3e228991e051c8A7253B642c", # SAI - (sharing DAI feed)
                        "0x0133Aa47B6197D0BA090Bf2CD96626Eb71fFd13c", # WBTC
                        "0xda3d675d50ff6c555973c4f0424964e1f6a4e7d3", # MKR
                        "0xd0e785973390fF8E77a83961efDb4F271E6B8152", # KNC
                        "0xb8b513d9cf440C1b6f5C7142120d611C94fC220c", # REP
                        "0x9b4e2579895efa2b4765063310Dc4109a7641129", # BAT
                        "0xA0F9D94f060836756FFC84Db4C78d097cA8C23E8", # ZRX
                        "0xeCfA53A8bdA4F0c4dd39c55CC8deF3757aCFDD07", # LINK
                        "0x6d626Ff97f0E89F6f983dE425dc5B24A18DE26Ea", # SUSD
                        "0x037E8F2125bF532F3e228991e051c8A7253B642c", # DAI
                        "0xa874fe207DF445ff19E7482C746C4D3fD0CB9AcE", # USDT (Tether)
                        "0xA417221ef64b1549575C977764E651c9FAB50141"  # Fast Gas / Gwei
                    ]
                )

    else:
        if "PriceFeeds" in addresses[thisNetwork]:
            feeds = Contract.from_abi("feeds", address=addresses[thisNetwork].PriceFeeds, abi=PriceFeeds.abi, owner=acct)
        else:
            raise ValueError('PriceFeeds deployment missing!')

    ## SwapImpl
    if deploys.SwapsImpl is True:
        print("Deploying Swaps.")
        if thisNetwork == "development"  or thisNetwork == "testnet":
            swaps = acct.deploy(SwapsImplLocal)
        else:
            swaps = acct.deploy(SwapsImplKyber)

    else:
        if "SwapsImpl" in addresses[thisNetwork]:
            swaps = Contract.from_abi("swaps", address=addresses[thisNetwork].SwapsImpl, abi=SwapsImplKyber.abi, owner=acct)
        else:
            raise ValueError('SwapsImpl deployment missing!')


    '''
    ## ProtocolMigration
    if deploys.ProtocolMigration is True:
        print("Deploying ProtocolMigration.")
        migration = acct.deploy(ProtocolMigration)
        print("Calling replaceContract.")
        bzx.replaceContract(migration.address)

        migration = Contract.from_abi("migration", address=bzx.address, abi=migration.abi, owner=acct)
        if thisNetwork == "kovan":
            print("Calling setLegacyOracles.")
            migration.setLegacyOracles(
                [
                    "0xa09dd6ff595041a85d406168a3ee2324e58cffa0",
                    "0x5d940c359165a8d4647cc8a237dcef8b0c6b60de",
                    "0x199bc31317a7d1505a5d13d4e4d4433c8644813b",
                ],
                [
                    "0xa09dd6ff595041a85d406168a3ee2324e58cffa0",
                    "0xa09dd6ff595041a85d406168a3ee2324e58cffa0",
                    "0xa09dd6ff595041a85d406168a3ee2324e58cffa0",
                ]
            )
        elif thisNetwork == "sandbox":
            print("Calling setLegacyOracles.")
            migration.setLegacyOracles(
                [
                    "0x7bc672a622620d531f9eb30de89daec31a4240fa",
                    "0xf257246627f7cb036ae40aa6cfe8d8ce5f0eba63",
                    "0x4c1974e5ff413c6e061ae217040795aaa1748e8b",
                    "0xc5c4554dc5ff2076206b5b3e1abdfb77ff74788b",
                    "0x53ef0Ad05972c348E352E0E22e734F616679Ce54",
                ],
                [
                    "0x7bc672a622620d531f9eb30de89daec31a4240fa",
                    "0x7bc672a622620d531f9eb30de89daec31a4240fa",
                    "0x7bc672a622620d531f9eb30de89daec31a4240fa",
                    "0x7bc672a622620d531f9eb30de89daec31a4240fa",
                    "0x7bc672a622620d531f9eb30de89daec31a4240fa",
                ]
            )
    '''

    ## ProtocolSettings
    if deploys.ProtocolSettings is True:
        print("Deploying ProtocolSettings.")
        settings = acct.deploy(ProtocolSettings)
        print("Calling replaceContract.")
        bzx.replaceContract(settings.address)

        print("Calling setPriceFeedContract.")
        bzx.setPriceFeedContract(
            feeds.address # priceFeeds
        )

        print("Calling setSwapsImplContract.")
        bzx.setSwapsImplContract(
            swaps.address  # swapsImpl
        )

        if thisNetwork == "kovan":
            print("Calling setLoanPool.")
            bzx.setLoanPool(
                [
                    "0x0afBFCe9DB35FFd1dFdF144A788fa196FD08EFe9", # iETH
                    "0xA1e58F3B1927743393b25f261471E1f2D3D9f0F6", # iSAI
                    "0xd40C0e7230c5bde65B61B5EDDc3E973f76Aff252", # iDAI
                    "0x988F40e4B07aC9b5e78533282Ba14a57440827e8"  # iKNC
                ],
                [
                    "0xd0A1E359811322d97991E03f863a0C30C2cF029C", # WETH
                    "0xC4375B7De8af5a38a93548eb8453a498222C4fF2", # SAI
                    "0x4F96Fe3b7A6Cf9725f59d353F723c1bDb64CA6Aa", # DAI
                    "0xad67cB4d63C9da94AcA37fDF2761AaDF780ff4a2"  # KNC
                ]
            )

            print("Calling setSupportedTokens.")
            bzx.setSupportedTokens(
                [
                    "0xd0A1E359811322d97991E03f863a0C30C2cF029C", # WETH
                    "0xC4375B7De8af5a38a93548eb8453a498222C4fF2", # SAI
                    "0x4F96Fe3b7A6Cf9725f59d353F723c1bDb64CA6Aa", # DAI
                    "0xad67cB4d63C9da94AcA37fDF2761AaDF780ff4a2", # KNC
                    "0xe3e682A8Fc7EFec410E4099cc09EfCC0743C634a"  # BZRX
                ],
                [
                    True,
                    True,
                    True,
                    True
                ]
            )
        elif thisNetwork == "sandbox":
            print("Calling setLoanPool.")
            bzx.setLoanPool(
                [
                    "0x77f973FCaF871459aa58cd81881Ce453759281bC", # iETH
                    "0xF013406A0B1d544238083DF0B93ad0d2cBE0f65f", # iUSDC
                    "0x14094949152EDDBFcd073717200DA82fEd8dC960", # iSAI
                    "0xBA9262578EFef8b3aFf7F60Cd629d6CC8859C8b5", # iWBTC
                    "0x1cC9567EA2eB740824a45F8026cCF8e46973234D", # iKNC
                    "0xBd56E9477Fc6997609Cf45F84795eFbDAC642Ff1", # iREP
                    "0xA8b65249DE7f85494BC1fe75F525f568aa7dfa39", # iBAT
                    "0xA7Eb2bc82df18013ecC2A6C533fc29446442EDEe", # iZRX
                    "0x1D496da96caf6b518b133736beca85D5C4F9cBc5", # iLINK
                    "0x49f4592e641820e928f9919ef4abd92a719b4b49", # iSUSD
                    "0x493c57c4763932315a328269e1adad09653b9081", # iDAI
                    "0x8326645f3aa6de6420102fdb7da9e3a91855045b"  # iUSDT
                ],
                [
                    "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", # WETH
                    "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", # USDC
                    "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", # SAI
                    "0x2260fac5e5542a773aa44fbcfedf7c193bc2c599", # WBTC
                    "0xdd974d5c2e2928dea5f71b9825b8b646686bd200", # KNC
                    "0x1985365e9f78359a9b6ad760e32412f4a445e862", # REP
                    "0x0d8775f648430679a709e98d2b0cb6250d2887ef", # BAT
                    "0xe41d2489571d322189246dafa5ebde1f4699f498", # ZRX
                    "0x514910771af9ca656af840dff83e8264ecf986ca", # LINK
                    "0x57ab1ec28d129707052df4df418d58a2d46d5f51", # SUSD
                    "0x6b175474e89094c44da98b954eedeac495271d0f", # DAI
                    "0xdac17f958d2ee523a2206206994597c13d831ec7"  # USDT (Tether)
                ]
            )

            print("Calling setSupportedTokens.")
            bzx.setSupportedTokens(
                [
                    "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", # WETH
                    "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", # USDC
                    "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359", # SAI
                    "0x2260fac5e5542a773aa44fbcfedf7c193bc2c599", # WBTC
                    "0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2", # MKR
                    "0xdd974d5c2e2928dea5f71b9825b8b646686bd200", # KNC
                    "0x1985365e9f78359a9b6ad760e32412f4a445e862", # REP
                    "0x0d8775f648430679a709e98d2b0cb6250d2887ef", # BAT
                    "0xe41d2489571d322189246dafa5ebde1f4699f498", # ZRX
                    "0x514910771af9ca656af840dff83e8264ecf986ca", # LINK
                    "0x57ab1ec28d129707052df4df418d58a2d46d5f51", # SUSD
                    "0x6b175474e89094c44da98b954eedeac495271d0f", # DAI
                    "0xdac17f958d2ee523a2206206994597c13d831ec7", # USDT (Tether)
                    "0x1c74cFF0376FB4031Cd7492cD6dB2D66c3f2c6B9"  # BZRX
                ],
                [
                    True, # WETH
                    True, # USDC
                    True, # SAI
                    True, # WBTC
                    True, # MKR
                    True, # KNC
                    True, # REP
                    True, # BAT
                    True, # ZRX
                    True, # LINK
                    True, # SUSD
                    True, # DAI
                    True  # USDT (Tether)
                ]
            )

        bzx.setFeesController(acct.address)

    ## LoanSettings
    if deploys.LoanSettings is True:
        print("Deploying LoanSettings.")
        loanSettings = acct.deploy(LoanSettings)
        print("Calling replaceContract.")
        bzx.replaceContract(loanSettings.address)

    ## LoanOpenings
    if deploys.LoanOpenings is True:
        print("Deploying LoanOpenings.")
        loanOpenings = acct.deploy(LoanOpenings)
        print("Calling replaceContract.")
        bzx.replaceContract(loanOpenings.address)

    ## LoanMaintenance
    if deploys.LoanMaintenance is True:
        print("Deploying LoanMaintenance.")
        loanMaintenance = acct.deploy(LoanMaintenance)
        print("Calling replaceContract.")
        bzx.replaceContract(loanMaintenance.address)

    ## LoanClosings
    if deploys.LoanClosings is True:
        print("Deploying LoanClosings.")
        loanClosings = acct.deploy(LoanClosings)
        print("Calling replaceContract.")
        bzx.replaceContract(loanClosings.address)
def deployLoanToken():
    global deploys, bzx, tokens, constants, addresses, thisNetwork, acct

    thisNetwork = network.show_active()

    if thisNetwork != "testnet":
        raise Exception("Only RSK testnet supported")
    else:  ## thisNetwork == "testnet":
        acct = accounts.load("rskdeployer")
        #careful: hardcoded
        collateralToken = "0x48f7B0E6f3994Ae486a86F03BEbbEA8ae5D3b2f5"

    print("Loaded account", acct)

    print(
        "Deploying LoanTokenLogicStandard   - careful: hardcoded bZx and WEth contracts."
    )
    loanTokenLogic = acct.deploy(LoanTokenLogicStandard)
    _add_contract(loanTokenLogic)

    print("Deploying LoanTokenSettingsLowerAdmin ")
    loanTokenSettings = acct.deploy(LoanTokenSettingsLowerAdmin)
    _add_contract(loanTokenSettings)

    print(
        "Deploying loan token using the loan logic as target for delegate calls"
    )
    loanToken = acct.deploy(LoanToken, loanTokenLogic.address)
    _add_contract(loanToken)

    print("Initialize loanTokenAddress ")
    calldata = loanToken.initialize(
        "0x48f7B0E6f3994Ae486a86F03BEbbEA8ae5D3b2f5", "DAI", "DAI")
    # note: copied initialize  function from token settings to loan token - might cause problems later on
    loanTokenAddress = loanToken.loanTokenAddress()
    print(loanTokenAddress)

    #setting the logic ABI for the loan token contract
    #loanToken = Contract.from_abi("loanToken", address=loanToken.address, abi=LoanTokenSettingsLowerAdmin.abi, owner=acct)
    loanToken = Contract.from_abi("loanToken",
                                  address=loanToken.address,
                                  abi=LoanTokenLogicStandard.abi,
                                  owner=acct)

    print("Setting up Fulcrum.")

    constants = shared.Constants()
    params = []

    data = [
        b"0x0",  ## id
        False,  ## active
        str(acct),  ## owner
        constants.ZERO_ADDRESS,  ## loanToken
        collateralToken,  ## collateralToken. 
        Wei("20 ether"),  ## minInitialMargin
        Wei("15 ether"),  ## maintenanceMargin
        0  ## fixedLoanTerm
    ]

    params.append(data)

    #configure the token settings
    calldata = loanTokenSettings.setupMarginLoanParams.encode_input(params)

    #print(calldata)

    #set the setting contract address at the loan token logic contract (need to load the logic ABI in line 171 to work)
    tx = loanToken.updateSettings(loanTokenSettings.address, calldata,
                                  {"from": acct})
    print(tx.info())
示例#10
0
def deployLoanToken(acct, sovryn, loanTokenAddress, loanTokenSymbol,
                    loanTokenName, collateralAddress, wrbtcAddress):

    print("Deploying LoanTokenLogicStandard")
    if (loanTokenSymbol == 'iWRBTC'):
        loanTokenLogic = acct.deploy(LoanTokenLogicWrbtc)
    else:
        loanTokenLogic = acct.deploy(LoanTokenLogicStandard)
    _add_contract(loanTokenLogic)

    print("Deploying LoanTokenSettingsLowerAdmin for above loan token")
    loanTokenSettings = acct.deploy(LoanTokenSettingsLowerAdmin)
    _add_contract(loanTokenSettings)

    print(
        "Deploying loan token using the loan logic as target for delegate calls"
    )
    loanToken = acct.deploy(LoanToken, acct.address, loanTokenLogic.address,
                            sovryn.address, wrbtcAddress)
    _add_contract(loanToken)

    print("Initialize loanTokenAddress ")
    calldata = loanToken.initialize(
        loanTokenAddress, loanTokenName,
        loanTokenSymbol)  #symbol and name might be mixed up
    # note: copied initialize  function from token settings to loan token - might cause problems later on
    loanTokenAddr = loanToken.loanTokenAddress()
    print(loanTokenAddr)

    #setting the logic ABI for the loan token contract
    #loanToken = Contract.from_abi("loanToken", address=loanToken.address, abi=LoanTokenSettingsLowerAdmin.abi, owner=acct)
    loanToken = Contract.from_abi("loanToken",
                                  address=loanToken.address,
                                  abi=LoanTokenLogicStandard.abi,
                                  owner=acct)
    print("Setting up pool params on protocol.")

    sovryn.setLoanPool([loanToken.address], [loanTokenAddress])

    print("Setting up margin pool params on loan token.")

    constants = shared.Constants()
    params = []

    data = [
        b"0x0",  ## id
        False,  ## active
        str(acct),  ## owner
        constants.ZERO_ADDRESS,  ## loanToken -> will be overwritten
        collateralAddress,  ## collateralToken.
        Wei("20 ether"),  ## minInitialMargin -> 20% (allows up to 5x leverage)
        Wei("15 ether"),  ## maintenanceMargin -> 15%, below liquidation
        0  ## fixedLoanTerm -> will be overwritten with 28 days
    ]

    params.append(data)

    #configure the token settings
    calldata = loanTokenSettings.setupLoanParams.encode_input(params, False)

    #set the setting contract address at the loan token logic contract (need to load the logic ABI in line 171 to work)
    tx = loanToken.updateSettings(loanTokenSettings.address, calldata,
                                  {"from": acct})
    #print(tx.info())

    print("Setting up torque pool params")

    params = []

    data = [
        b"0x0",  ## id
        False,  ## active
        str(acct),  ## owner
        constants.ZERO_ADDRESS,  ## loanToken -> will be overwritten
        collateralAddress,  ## collateralToken.
        Wei("50 ether"),  ## minInitialMargin -> 20% (allows up to 5x leverage)
        Wei("15 ether"),  ## maintenanceMargin -> 15%, below liquidation
        0  ## fixedLoanTerm -> will be overwritten with 28 days
    ]

    params.append(data)

    #configure the token settings
    calldata = loanTokenSettings.setupLoanParams.encode_input(params, True)

    #print(calldata)

    #set the setting contract address at the loan token logic contract (need to load the logic ABI in line 171 to work)
    tx = loanToken.updateSettings(loanTokenSettings.address, calldata,
                                  {"from": acct})
    #print(tx.info())

    print("setting up interest rates")

    setupLoanTokenRates(acct, loanToken.address, loanTokenSettings.address,
                        loanTokenLogic.address)

    return (loanToken, loanTokenSettings)
def deployProtocol():
    global bzx, tokens, constants, addresses, thisNetwork, acct

    thisNetwork = network.show_active()

    if thisNetwork == "development":
        acct = accounts[0]
    elif thisNetwork == "testnet":
        acct = accounts.load("rskdeployer")
    else:
        raise Exception("network not supported")

    constants = shared.Constants()

    tokens = Munch()

    print("Deploying bZxProtocol.")
    bzxproxy = acct.deploy(bZxProtocol)
    bzx = Contract.from_abi("bzx",
                            address=bzxproxy.address,
                            abi=interface.IBZx.abi,
                            owner=acct)
    _add_contract(bzx)

    print("Deploying test tokens.")
    tokens.weth = acct.deploy(
        TestWeth)  ## 0x3194cBDC3dbcd3E11a07892e7bA5c3394048Cc87
    tokens.susd = acct.deploy(TestToken, "SUSD", "SUSD", 18, 1e50)
    tokens.rbtc = acct.deploy(TestToken, "RBTC", "RBTC", 18, 1e50)

    print("Deploying PriceFeeds.")
    feeds = acct.deploy(PriceFeedsLocal)

    print("Calling setRates.")
    feeds.setRates(
        tokens.rbtc.address,
        tokens.susd.address,
        1e22  #1btc = 10000 susd
    )

    print("Deploying Swaps.")
    swaps = acct.deploy(SwapsImplLocal)

    print("Deploying ProtocolSettings.")
    settings = acct.deploy(ProtocolSettings)
    print("Calling replaceContract.")
    bzx.replaceContract(settings.address)

    print("Calling setPriceFeedContract.")
    bzx.setPriceFeedContract(feeds.address  # priceFeeds
                             )

    print("Calling setSwapsImplContract.")
    bzx.setSwapsImplContract(swaps.address  # swapsImpl
                             )

    bzx.setFeesController(acct.address)

    ## LoanSettings
    print("Deploying LoanSettings.")
    loanSettings = acct.deploy(LoanSettings)
    print("Calling replaceContract.")
    bzx.replaceContract(loanSettings.address)

    ## LoanOpenings
    print("Deploying LoanOpenings.")
    loanOpenings = acct.deploy(LoanOpenings)
    print("Calling replaceContract.")
    bzx.replaceContract(loanOpenings.address)

    ## LoanMaintenance
    print("Deploying LoanMaintenance.")
    loanMaintenance = acct.deploy(LoanMaintenance)
    print("Calling replaceContract.")
    bzx.replaceContract(loanMaintenance.address)

    ## LoanClosings
    print("Deploying LoanClosings.")
    loanClosings = acct.deploy(LoanClosings)
    print("Calling replaceContract.")
    bzx.replaceContract(loanClosings.address)