def escrow_package(deployer, w3, ethpm_spec_dir): escrow_manifest = ethpm_spec_dir / "examples" / "escrow" / "v3.json" escrow_deployer = deployer(escrow_manifest) escrow_strategy = linker.linker( linker.deploy("SafeSendLib"), linker.link("Escrow", "SafeSendLib"), linker.deploy("Escrow", w3.eth.accounts[0]), ) escrow_deployer.register_strategy("Escrow", escrow_strategy) return escrow_deployer.deploy("Escrow")
def solidity_registry_strategy(): def set_authority(package): w3 = package.w3 authority = package.deployments.get_instance( "WhitelistAuthority").address package_registry = package.deployments.get_instance("PackageRegistry") package_db = package.deployments.get_instance("PackageDB") release_db = package.deployments.get_instance("ReleaseDB") txh_1 = package_registry.functions.setAuthority(authority).transact() w3.eth.waitForTransactionReceipt(txh_1) txh_2 = package_db.functions.setAuthority(authority).transact() w3.eth.waitForTransactionReceipt(txh_2) txh_3 = release_db.functions.setAuthority(authority).transact() w3.eth.waitForTransactionReceipt(txh_3) def set_dependencies(package): w3 = package.w3 package_db = package.deployments.get_instance("PackageDB").address release_db = package.deployments.get_instance("ReleaseDB").address release_validator = package.deployments.get_instance( "ReleaseValidator").address package_registry = package.deployments.get_instance("PackageRegistry") txh_1 = package_registry.functions.setPackageDb(package_db).transact() w3.eth.waitForTransactionReceipt(txh_1) txh_2 = package_registry.functions.setReleaseDb(release_db).transact() w3.eth.waitForTransactionReceipt(txh_2) txh_3 = package_registry.functions.setReleaseValidator( release_validator).transact() w3.eth.waitForTransactionReceipt(txh_3) def get_selector(deployments, contract, fn): function_abi = [ x for x in deployments.get_instance(contract).abi if x["name"] == fn ][0] return function_abi_to_4byte_selector(function_abi) def set_permissions(package): w3 = package.w3 deployments = package.deployments set_version = get_selector(deployments, "ReleaseDB", "setVersion") set_release = get_selector(deployments, "ReleaseDB", "setRelease") set_package = get_selector(deployments, "PackageDB", "setPackage") set_package_owner = get_selector(deployments, "PackageDB", "setPackageOwner") release = get_selector(deployments, "PackageRegistry", "release") transfer_package_owner = get_selector(deployments, "PackageRegistry", "transferPackageOwner") package_db = package.deployments.get_instance("PackageDB").address release_db = package.deployments.get_instance("ReleaseDB").address package_registry = package.deployments.get_instance( "PackageRegistry").address authority = package.deployments.get_instance("WhitelistAuthority") txh_1 = authority.functions.setCanCall(package_registry, release_db, set_release, True).transact() w3.eth.waitForTransactionReceipt(txh_1) txh_2 = authority.functions.setCanCall(package_registry, package_db, set_package, True).transact() w3.eth.waitForTransactionReceipt(txh_2) txh_3 = authority.functions.setCanCall(package_registry, package_db, set_package_owner, True).transact() w3.eth.waitForTransactionReceipt(txh_3) txh_4 = authority.functions.setAnyoneCanCall(release_db, set_version, True).transact() w3.eth.waitForTransactionReceipt(txh_4) txh_5 = authority.functions.setAnyoneCanCall(package_registry, release, True).transact() w3.eth.waitForTransactionReceipt(txh_5) txh_6 = authority.functions.setAnyoneCanCall(package_registry, transfer_package_owner, True).transact() w3.eth.waitForTransactionReceipt(txh_6) strategy = linker.linker( linker.deploy("IndexedOrderedSetLib"), linker.link("PackageDB", "IndexedOrderedSetLib"), linker.link("ReleaseDB", "IndexedOrderedSetLib"), linker.deploy("PackageRegistry"), linker.deploy("WhitelistAuthority"), linker.deploy("PackageDB"), linker.deploy("ReleaseDB"), linker.deploy("ReleaseValidator"), linker.run_python(set_authority), linker.run_python(set_dependencies), linker.run_python(set_permissions), ) return strategy