Skip to content

Commit fdfe96f

Browse files
authored
Merge pull request #1398 from njgheorghita/ethpm-update-registry
Update web3.pm to use simple solidity registry implementation
2 parents de6a62f + e096f10 commit fdfe96f

File tree

7 files changed

+89
-383
lines changed

7 files changed

+89
-383
lines changed

ethpm/assets/registry/2.0.0a1.json

Lines changed: 1 addition & 0 deletions
Large diffs are not rendered by default.

tests/core/pm-module/conftest.py

Lines changed: 7 additions & 142 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
PyEVMBackend,
77
)
88
from eth_utils import (
9-
function_abi_to_4byte_selector,
109
to_bytes,
1110
)
1211

@@ -19,30 +18,19 @@
1918
)
2019
from web3 import Web3
2120
from web3.pm import (
22-
SolidityReferenceRegistry,
23-
VyperReferenceRegistry,
24-
)
25-
from web3.tools import (
26-
linker,
21+
SimpleRegistry,
2722
)
2823
from web3.tools.pytest_ethereum.deployer import (
2924
Deployer,
3025
)
3126

32-
VY_PACKAGE_ID_1 = to_bytes(hexstr='0xd059e8a6ea5a8bbf8dd097a7b8922316dcb7f024e8220b56d3c9e7188a6a7640') # noqa: E501
33-
VY_PACKAGE_ID_2 = to_bytes(hexstr='0x6df709a85698ad921462b8979547e3a873e22e1c73b1cb691f9376847fb2d402') # noqa: E501
34-
VY_PACKAGE_ID_3 = to_bytes(hexstr='0x80e41a42e3b8c3af0ea51c3fd50d481eef1367dd9d3797ba93d35dcf60660882') # noqa: E501
35-
VY_RELEASE_ID_1 = to_bytes(hexstr='0x595e26f1b2247bacc57e32807f8059e0b0837dd9c47e6946994196bd29c9ca97') # noqa: E501
36-
VY_RELEASE_ID_2 = to_bytes(hexstr='0x04592cb9ced5413e1b09e87b089bf696a05efb76ee87c8c41259635fac6d938a') # noqa: E501
37-
VY_RELEASE_ID_3 = to_bytes(hexstr='0xa06dbc51f8891894778ce03dc23d706d228c99789595758bd3dcac3a93f47f0a') # noqa: E501
38-
VY_RELEASE_ID_4 = to_bytes(hexstr='0x9c6f87dda6435b2506e81206b39ed782a44b92d826c24ab02bbded321b86e2ad') # noqa: E501
3927
SOL_PACKAGE_ID_1 = to_bytes(hexstr='0x60c5112b61159e6b42d54d945078394e9d5fc9c6ff0f3df78977006f8bbc06d4') # noqa: E501
4028
SOL_PACKAGE_ID_2 = to_bytes(hexstr='0xdbcfb0bd7115bf659350d77bb22bb889ca8294f61b0ca480f8a47bb8fc904cc9') # noqa: E501
4129
SOL_PACKAGE_ID_3 = to_bytes(hexstr='0xf3e4002c48a7f8f3485d62988317849c175340b66517c3b2993f725643eba84b') # noqa: E501
42-
SOL_RELEASE_ID_1 = to_bytes(hexstr='0x73835668f71c7ae85cbdcdbb5a9905fa420ffe85a847d283fa9beefcd56cacc4') # noqa: E501
43-
SOL_RELEASE_ID_2 = to_bytes(hexstr='0xe5ef0292a3b36b6ac2be07ee92df61be15e0b9f102df32cbe3f0c012ef69d462') # noqa: E501
44-
SOL_RELEASE_ID_3 = to_bytes(hexstr='0x1280148e0af5c47e95b41df15734d0726c7320fc4cf21efe3923fb047b53899d') # noqa: E501
45-
SOL_RELEASE_ID_4 = to_bytes(hexstr='0x7082e954e4fd6adf8a25c6cefe218f32ec66d8a197197f1d05aa67a65caf5111') # noqa: E501
30+
SOL_RELEASE_ID_1 = to_bytes(hexstr='0x13414014c4f3c0ee41f1ede8e612e0377ae741f3abaa8d22e84e6b3759334fe9') # noqa: E501
31+
SOL_RELEASE_ID_2 = to_bytes(hexstr='0x30cb63a88e721b461e294fa212af64f12e9500b3892e0e65fa70090ab63afb4d') # noqa: E501
32+
SOL_RELEASE_ID_3 = to_bytes(hexstr='0x73f5fafa3d9bd5080d9b27c092cd65fdbf7c8f982df4d5d0de22eb2cd56f4fcb') # noqa: E501
33+
SOL_RELEASE_ID_4 = to_bytes(hexstr='0x7fc4e4c04e1a4e5cba315f8fce216f8a77e1a1dd7c6539635555f95d1042667f') # noqa: E501
4634

4735

4836
def setup_w3():
@@ -59,118 +47,14 @@ def setup_w3():
5947
return w3
6048

6149

62-
def solidity_registry_strategy():
63-
def set_authority(package):
64-
w3 = package.w3
65-
authority = package.deployments.get_instance("WhitelistAuthority").address
66-
package_registry = package.deployments.get_instance("PackageRegistry")
67-
package_db = package.deployments.get_instance("PackageDB")
68-
release_db = package.deployments.get_instance("ReleaseDB")
69-
txh_1 = package_registry.functions.setAuthority(authority).transact()
70-
w3.eth.waitForTransactionReceipt(txh_1)
71-
txh_2 = package_db.functions.setAuthority(authority).transact()
72-
w3.eth.waitForTransactionReceipt(txh_2)
73-
txh_3 = release_db.functions.setAuthority(authority).transact()
74-
w3.eth.waitForTransactionReceipt(txh_3)
75-
76-
def set_dependencies(package):
77-
w3 = package.w3
78-
package_db = package.deployments.get_instance("PackageDB").address
79-
release_db = package.deployments.get_instance("ReleaseDB").address
80-
release_validator = package.deployments.get_instance("ReleaseValidator").address
81-
package_registry = package.deployments.get_instance("PackageRegistry")
82-
txh_1 = package_registry.functions.setPackageDb(package_db).transact()
83-
w3.eth.waitForTransactionReceipt(txh_1)
84-
txh_2 = package_registry.functions.setReleaseDb(release_db).transact()
85-
w3.eth.waitForTransactionReceipt(txh_2)
86-
txh_3 = package_registry.functions.setReleaseValidator(
87-
release_validator
88-
).transact()
89-
w3.eth.waitForTransactionReceipt(txh_3)
90-
91-
def get_selector(deployments, contract, fn):
92-
function_abi = [
93-
x for x in deployments.get_instance(contract).abi if x["name"] == fn
94-
][0]
95-
return function_abi_to_4byte_selector(function_abi)
96-
97-
def set_permissions(package):
98-
w3 = package.w3
99-
deployments = package.deployments
100-
set_version = get_selector(deployments, "ReleaseDB", "setVersion")
101-
set_release = get_selector(deployments, "ReleaseDB", "setRelease")
102-
set_package = get_selector(deployments, "PackageDB", "setPackage")
103-
set_package_owner = get_selector(deployments, "PackageDB", "setPackageOwner")
104-
release = get_selector(deployments, "PackageRegistry", "release")
105-
transfer_package_owner = get_selector(
106-
deployments, "PackageRegistry", "transferPackageOwner"
107-
)
108-
package_db = package.deployments.get_instance("PackageDB").address
109-
release_db = package.deployments.get_instance("ReleaseDB").address
110-
package_registry = package.deployments.get_instance("PackageRegistry").address
111-
authority = package.deployments.get_instance("WhitelistAuthority")
112-
txh_1 = authority.functions.setCanCall(
113-
package_registry, release_db, set_release, True
114-
).transact()
115-
w3.eth.waitForTransactionReceipt(txh_1)
116-
txh_2 = authority.functions.setCanCall(
117-
package_registry, package_db, set_package, True
118-
).transact()
119-
w3.eth.waitForTransactionReceipt(txh_2)
120-
txh_3 = authority.functions.setCanCall(
121-
package_registry, package_db, set_package_owner, True
122-
).transact()
123-
w3.eth.waitForTransactionReceipt(txh_3)
124-
txh_4 = authority.functions.setAnyoneCanCall(
125-
release_db, set_version, True
126-
).transact()
127-
w3.eth.waitForTransactionReceipt(txh_4)
128-
txh_5 = authority.functions.setAnyoneCanCall(
129-
package_registry, release, True
130-
).transact()
131-
w3.eth.waitForTransactionReceipt(txh_5)
132-
txh_6 = authority.functions.setAnyoneCanCall(
133-
package_registry, transfer_package_owner, True
134-
).transact()
135-
w3.eth.waitForTransactionReceipt(txh_6)
136-
137-
strategy = linker.linker(
138-
linker.deploy("IndexedOrderedSetLib"),
139-
linker.link("PackageDB", "IndexedOrderedSetLib"),
140-
linker.link("ReleaseDB", "IndexedOrderedSetLib"),
141-
linker.deploy("PackageRegistry"),
142-
linker.deploy("WhitelistAuthority"),
143-
linker.deploy("PackageDB"),
144-
linker.deploy("ReleaseDB"),
145-
linker.deploy("ReleaseValidator"),
146-
linker.run_python(set_authority),
147-
linker.run_python(set_dependencies),
148-
linker.run_python(set_permissions),
149-
)
150-
return strategy
151-
152-
15350
def sol_registry(w3):
154-
manifest = json.loads((ASSETS_DIR / "registry" / "1.0.0.json").read_text())
155-
strategy = solidity_registry_strategy()
51+
manifest = json.loads((ASSETS_DIR / "registry" / "2.0.0a1.json").read_text())
15652
registry_package = Package(manifest, w3)
15753
registry_deployer = Deployer(registry_package)
158-
registry_deployer.register_strategy("PackageRegistry", strategy)
15954
deployed_registry_package = registry_deployer.deploy("PackageRegistry")
16055
assert isinstance(registry_package, Package)
16156
registry = deployed_registry_package.deployments.get_instance("PackageRegistry")
162-
return SolidityReferenceRegistry(registry.address, w3)
163-
164-
165-
def vy_registry(w3):
166-
registry_path = ASSETS_DIR / "vyper_registry"
167-
manifest = json.loads((registry_path / "0.1.0.json").read_text().rstrip('\n'))
168-
registry_package = Package(manifest, w3)
169-
registry_deployer = Deployer(registry_package)
170-
deployed_registry_package = registry_deployer.deploy("registry")
171-
registry_instance = deployed_registry_package.deployments.get_instance("registry")
172-
assert registry_instance.functions.owner().call() == w3.eth.defaultAccount
173-
return VyperReferenceRegistry(registry_instance.address, w3)
57+
return SimpleRegistry(registry.address, w3)
17458

17559

17660
def release_packages(registry):
@@ -214,13 +98,9 @@ def release_packages(registry):
21498
# Tests are written against the sample packages released in `release_packages()` above, if more
21599
# tests are needed, they should take into account the releases that exist on a "loaded registry".
216100
W3 = setup_w3()
217-
FRESH_VY_REGISTRY = vy_registry(W3)
218101
FRESH_SOL_REGISTRY = sol_registry(W3)
219-
LOADED_VY_REGISTRY = release_packages(vy_registry(W3))
220102
LOADED_SOL_REGISTRY = release_packages(sol_registry(W3))
221-
VY_PKG_IDS = (VY_PACKAGE_ID_1, VY_PACKAGE_ID_2, VY_PACKAGE_ID_3)
222103
SOL_PKG_IDS = (SOL_PACKAGE_ID_1, SOL_PACKAGE_ID_2, SOL_PACKAGE_ID_3)
223-
VY_RLS_IDS = (VY_RELEASE_ID_1, VY_RELEASE_ID_2, VY_RELEASE_ID_3, VY_RELEASE_ID_4)
224104
SOL_RLS_IDS = (SOL_RELEASE_ID_1, SOL_RELEASE_ID_2, SOL_RELEASE_ID_3, SOL_RELEASE_ID_4)
225105

226106

@@ -229,26 +109,11 @@ def w3():
229109
return W3
230110

231111

232-
@pytest.fixture
233-
def empty_vy_registry():
234-
return FRESH_VY_REGISTRY
235-
236-
237112
@pytest.fixture
238113
def empty_sol_registry():
239114
return FRESH_SOL_REGISTRY
240115

241116

242-
@pytest.fixture
243-
def loaded_vy_registry():
244-
return LOADED_VY_REGISTRY, VY_PKG_IDS, VY_RLS_IDS
245-
246-
247117
@pytest.fixture
248118
def loaded_sol_registry():
249119
return LOADED_SOL_REGISTRY, SOL_PKG_IDS, SOL_RLS_IDS
250-
251-
252-
@pytest.fixture
253-
def registry_getter(request):
254-
return request.getfixturevalue(request.param)

tests/core/pm-module/test_ens_integration.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
InvalidAddress,
1313
)
1414
from web3.pm import (
15-
VyperReferenceRegistry,
15+
SimpleRegistry,
1616
)
1717

1818

@@ -131,7 +131,7 @@ def test_web3_ens(ens):
131131
w3 = ens.web3
132132
ns = ENS.fromWeb3(w3, ens.ens.address)
133133
w3.ens = ns
134-
registry = VyperReferenceRegistry.deploy_new_instance(w3)
134+
registry = SimpleRegistry.deploy_new_instance(w3)
135135
w3.ens.setup_address('tester.eth', registry.address)
136136
actual_addr = ens.address('tester.eth')
137137
w3.pm.set_registry('tester.eth')

tests/core/pm-module/test_registry.py

Lines changed: 23 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,29 @@
1-
import pytest
2-
31
from eth_utils import (
42
is_address,
53
)
64

75
from web3.pm import (
8-
ERCRegistry,
9-
VyperReferenceRegistry,
6+
ERC1319Registry,
7+
SimpleRegistry,
108
)
119

1210

13-
def test_vyper_registry_deploy_new_instance(w3):
14-
registry = VyperReferenceRegistry.deploy_new_instance(w3)
15-
assert isinstance(registry, ERCRegistry)
16-
assert isinstance(registry, VyperReferenceRegistry)
11+
def test_simple_registry_deploy_new_instance(w3):
12+
registry = SimpleRegistry.deploy_new_instance(w3)
13+
assert isinstance(registry, SimpleRegistry)
14+
assert isinstance(registry, ERC1319Registry)
1715
assert is_address(registry.address)
1816

1917

20-
def test_vyper_registry_auth(w3):
21-
registry = VyperReferenceRegistry.deploy_new_instance(w3)
22-
assert registry.owner() == w3.eth.accounts[0]
23-
registry.transfer_owner(w3.eth.accounts[1])
24-
assert registry.owner() == w3.eth.accounts[1]
25-
26-
27-
@pytest.mark.parametrize(
28-
"registry_getter", ["empty_vy_registry", "empty_sol_registry"], indirect=True
29-
)
30-
def test_registry_releases_properly(registry_getter):
31-
registry = registry_getter
32-
release_id_1 = registry._release(
18+
def test_registry_releases_properly(empty_sol_registry):
19+
release_id_1 = empty_sol_registry._release(
3320
"package", "1.0.0", "ipfs://Qme4otpS88NV8yQi8TfTP89EsQC5bko3F5N1yhRoi6cwGV"
3421
)
35-
release_id_2 = registry._release(
22+
release_id_2 = empty_sol_registry._release(
3623
"package1", "1.0.1", "ipfs://Qme4otpS88NV8yQi8TfTP89EsQC5bko3F5N1yhRoi6cwGZ"
3724
)
38-
release_data_1 = registry._get_release_data(release_id_1)
39-
release_data_2 = registry._get_release_data(release_id_2)
25+
release_data_1 = empty_sol_registry._get_release_data(release_id_1)
26+
release_data_2 = empty_sol_registry._get_release_data(release_id_2)
4027
assert release_data_1[0] == "package"
4128
assert release_data_1[1] == "1.0.0"
4229
assert release_data_1[2] == "ipfs://Qme4otpS88NV8yQi8TfTP89EsQC5bko3F5N1yhRoi6cwGV"
@@ -45,11 +32,8 @@ def test_registry_releases_properly(registry_getter):
4532
assert release_data_2[2] == "ipfs://Qme4otpS88NV8yQi8TfTP89EsQC5bko3F5N1yhRoi6cwGZ"
4633

4734

48-
@pytest.mark.parametrize(
49-
"registry_getter", ["loaded_vy_registry", "loaded_sol_registry"], indirect=True
50-
)
51-
def test_registry_get_all_package_ids_and_get_package_name(registry_getter):
52-
registry, expected_ids, _ = registry_getter
35+
def test_registry_get_all_package_ids_and_get_package_name(loaded_sol_registry):
36+
registry, expected_ids, _ = loaded_sol_registry
5337
package_ids = registry._get_all_package_ids()
5438
assert len(package_ids) == 6
5539
assert package_ids[0] == expected_ids[0]
@@ -60,11 +44,8 @@ def test_registry_get_all_package_ids_and_get_package_name(registry_getter):
6044
assert registry._get_package_name(package_ids[2]) == "package2"
6145

6246

63-
@pytest.mark.parametrize(
64-
"registry_getter", ["loaded_vy_registry", "loaded_sol_registry"], indirect=True
65-
)
66-
def test_registry_get_release_id_and_get_all_release_ids(registry_getter):
67-
registry, _, expected_ids = registry_getter
47+
def test_registry_get_release_id_and_get_all_release_ids(loaded_sol_registry):
48+
registry, _, expected_ids = loaded_sol_registry
6849
release_ids = registry._get_all_release_ids("package")
6950
assert len(release_ids) == 6
7051
assert release_ids[:3] == expected_ids[:3]
@@ -73,40 +54,28 @@ def test_registry_get_release_id_and_get_all_release_ids(registry_getter):
7354
assert registry._get_release_id("package", "1.0.2") == expected_ids[2]
7455

7556

76-
@pytest.mark.parametrize(
77-
"registry_getter", ["loaded_vy_registry", "loaded_sol_registry"], indirect=True
78-
)
79-
def test_registry_num_package_ids(registry_getter):
80-
registry, _, _ = registry_getter
57+
def test_registry_num_package_ids(loaded_sol_registry):
58+
registry, _, _ = loaded_sol_registry
8159
assert registry._num_package_ids() == 6
8260

8361

84-
@pytest.mark.parametrize(
85-
"registry_getter", ["loaded_vy_registry", "loaded_sol_registry"], indirect=True
86-
)
87-
def test_registry_num_release_ids(registry_getter):
88-
registry, _, _ = registry_getter
62+
def test_registry_num_release_ids(loaded_sol_registry):
63+
registry, _, _ = loaded_sol_registry
8964
assert registry._num_release_ids("package") == 6
9065
assert registry._num_release_ids("package1") == 1
9166
assert registry._num_release_ids("package2") == 1
9267

9368

94-
@pytest.mark.parametrize(
95-
"registry_getter", ["loaded_vy_registry", "loaded_sol_registry"], indirect=True
96-
)
97-
def test_registry_generate_release_id(registry_getter):
98-
registry, _, expected_ids = registry_getter
69+
def test_registry_generate_release_id(loaded_sol_registry):
70+
registry, _, expected_ids = loaded_sol_registry
9971
assert registry._generate_release_id("package", "1.0.0") == expected_ids[0]
10072
assert registry._generate_release_id("package", "1.0.1") == expected_ids[1]
10173
assert registry._generate_release_id("package", "1.0.2") == expected_ids[2]
10274
assert registry._generate_release_id("does-not-exist", "1.0.0") == expected_ids[3]
10375

10476

105-
@pytest.mark.parametrize(
106-
"registry_getter", ["loaded_vy_registry", "loaded_sol_registry"], indirect=True
107-
)
108-
def test_registry_get_release_data(registry_getter):
109-
registry, _, release_ids = registry_getter
77+
def test_registry_get_release_data(loaded_sol_registry):
78+
registry, _, release_ids = loaded_sol_registry
11079
release_data_1 = registry._get_release_data(release_ids[0])
11180
release_data_2 = registry._get_release_data(release_ids[1])
11281
release_data_3 = registry._get_release_data(release_ids[2])

0 commit comments

Comments
 (0)