def deploy(web3: Web3, contract_identifier: str, *, constructor_args=()) -> Contract: return deploy_compiled_contract( abi=contract_assets[contract_identifier]["abi"], bytecode=contract_assets[contract_identifier]["bytecode"], web3=web3, constructor_args=constructor_args, )
def proxy_beacon(owner_key, contract_assets, web3, upgradeable_implementation): return deploy_compiled_contract( abi=contract_assets["ProxyBeacon"]["abi"], bytecode=contract_assets["ProxyBeacon"]["bytecode"], constructor_args=(upgradeable_implementation.address, ), web3=web3, private_key=owner_key, )
def beacon_with_currency_network(web3, owned_currency_network, contract_assets, owner_key): return deploy_compiled_contract( abi=contract_assets["ProxyBeacon"]["abi"], bytecode=contract_assets["ProxyBeacon"]["bytecode"], constructor_args=(owned_currency_network.address, ), web3=web3, private_key=owner_key, )
def proxy( owner_key, contract_assets, web3, upgradeable_implementation, upgradeable_initialized_value, proxy_beacon, ): implementation_init_data = upgradeable_implementation.encodeABI( "init", (upgradeable_initialized_value, )) return deploy_compiled_contract( abi=contract_assets["AdministrativeProxy"]["abi"], bytecode=contract_assets["AdministrativeProxy"]["bytecode"], constructor_args=(proxy_beacon.address, implementation_init_data), web3=web3, private_key=owner_key, )
def proxy_factory(deploy_contract, contract_assets, web3, chain_id): """Returns a proxy factory deployed at a deterministic address""" # We need to create a new account that never sent a transaction # to make sure the create1 address of the factory does not depend on other tests or fixtures aribtrary_key = f"0x{'12345678'*8}" new_account = web3.eth.account.from_key(aribtrary_key) assert web3.eth.getTransactionCount(new_account.address) == 0 web3.eth.sendTransaction({"to": new_account.address, "value": 1 * 10**18}) proxy_factory = deploy_compiled_contract( abi=contract_assets["IdentityProxyFactory"]["abi"], bytecode=contract_assets["IdentityProxyFactory"]["bytecode"], constructor_args=(chain_id, ), web3=web3, private_key=new_account.key, ) return proxy_factory
def deploy( contract_name, *, web3: Web3, transaction_options: Dict = None, private_key: bytes = None, constructor_args=(), ): if transaction_options is None: transaction_options = {} contract_interface = contracts[contract_name] return deploy_compiled_contract( abi=contract_interface["abi"], bytecode=contract_interface["bytecode"], web3=web3, transaction_options=transaction_options, private_key=private_key, constructor_args=constructor_args, )