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)
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)
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
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
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())
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)