web3 6.20.2__py3-none-any.whl → 7.0.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (270) hide show
  1. ens/__init__.py +13 -2
  2. ens/_normalization.py +2 -17
  3. ens/async_ens.py +33 -21
  4. ens/base_ens.py +3 -1
  5. ens/ens.py +16 -11
  6. ens/exceptions.py +16 -29
  7. ens/specs/nf.json +1 -1
  8. ens/specs/normalization_spec.json +1 -1
  9. ens/utils.py +52 -63
  10. web3/__init__.py +20 -24
  11. web3/_utils/abi.py +115 -271
  12. web3/_utils/async_transactions.py +7 -4
  13. web3/_utils/batching.py +217 -0
  14. web3/_utils/blocks.py +6 -2
  15. web3/_utils/caching.py +128 -5
  16. web3/_utils/compat/__init__.py +2 -3
  17. web3/_utils/contract_sources/compile_contracts.py +1 -1
  18. web3/_utils/contract_sources/contract_data/arrays_contract.py +3 -3
  19. web3/_utils/contract_sources/contract_data/bytes_contracts.py +5 -5
  20. web3/_utils/contract_sources/contract_data/constructor_contracts.py +7 -7
  21. web3/_utils/contract_sources/contract_data/contract_caller_tester.py +3 -3
  22. web3/_utils/contract_sources/contract_data/emitter_contract.py +3 -3
  23. web3/_utils/contract_sources/contract_data/event_contracts.py +5 -5
  24. web3/_utils/contract_sources/contract_data/extended_resolver.py +3 -3
  25. web3/_utils/contract_sources/contract_data/fallback_function_contract.py +3 -3
  26. web3/_utils/contract_sources/contract_data/function_name_tester_contract.py +3 -3
  27. web3/_utils/contract_sources/contract_data/math_contract.py +3 -3
  28. web3/_utils/contract_sources/contract_data/offchain_lookup.py +3 -3
  29. web3/_utils/contract_sources/contract_data/offchain_resolver.py +3 -3
  30. web3/_utils/contract_sources/contract_data/panic_errors_contract.py +3 -3
  31. web3/_utils/contract_sources/contract_data/payable_tester.py +3 -3
  32. web3/_utils/contract_sources/contract_data/receive_function_contracts.py +5 -5
  33. web3/_utils/contract_sources/contract_data/reflector_contracts.py +3 -3
  34. web3/_utils/contract_sources/contract_data/revert_contract.py +3 -3
  35. web3/_utils/contract_sources/contract_data/simple_resolver.py +3 -3
  36. web3/_utils/contract_sources/contract_data/storage_contract.py +3 -3
  37. web3/_utils/contract_sources/contract_data/string_contract.py +3 -3
  38. web3/_utils/contract_sources/contract_data/tuple_contracts.py +5 -5
  39. web3/_utils/contracts.py +130 -236
  40. web3/_utils/datatypes.py +5 -1
  41. web3/_utils/decorators.py +13 -23
  42. web3/_utils/empty.py +1 -1
  43. web3/_utils/encoding.py +16 -12
  44. web3/_utils/ens.py +2 -1
  45. web3/_utils/error_formatters_utils.py +5 -3
  46. web3/_utils/events.py +66 -69
  47. web3/_utils/fee_utils.py +1 -3
  48. web3/_utils/filters.py +24 -22
  49. web3/_utils/formatters.py +2 -2
  50. web3/_utils/http.py +5 -3
  51. web3/_utils/http_session_manager.py +303 -0
  52. web3/_utils/math.py +14 -15
  53. web3/_utils/method_formatters.py +34 -36
  54. web3/_utils/module.py +2 -1
  55. web3/_utils/module_testing/__init__.py +0 -3
  56. web3/_utils/module_testing/eth_module.py +695 -643
  57. web3/_utils/module_testing/module_testing_utils.py +61 -34
  58. web3/_utils/module_testing/persistent_connection_provider.py +56 -25
  59. web3/_utils/module_testing/utils.py +258 -0
  60. web3/_utils/module_testing/web3_module.py +438 -17
  61. web3/_utils/normalizers.py +13 -11
  62. web3/_utils/rpc_abi.py +5 -32
  63. web3/_utils/threads.py +8 -7
  64. web3/_utils/transactions.py +14 -12
  65. web3/_utils/type_conversion.py +5 -1
  66. web3/_utils/validation.py +17 -17
  67. web3/auto/gethdev.py +7 -2
  68. web3/beacon/__init__.py +6 -1
  69. web3/beacon/async_beacon.py +9 -5
  70. web3/beacon/{main.py → beacon.py} +7 -5
  71. web3/contract/__init__.py +7 -0
  72. web3/contract/async_contract.py +47 -46
  73. web3/contract/base_contract.py +183 -158
  74. web3/contract/contract.py +49 -43
  75. web3/contract/utils.py +203 -59
  76. web3/datastructures.py +79 -31
  77. web3/eth/__init__.py +7 -0
  78. web3/eth/async_eth.py +39 -51
  79. web3/eth/base_eth.py +17 -10
  80. web3/eth/eth.py +30 -68
  81. web3/exceptions.py +108 -82
  82. web3/gas_strategies/time_based.py +8 -6
  83. web3/geth.py +1 -254
  84. web3/main.py +75 -122
  85. web3/manager.py +316 -146
  86. web3/method.py +38 -31
  87. web3/middleware/__init__.py +67 -89
  88. web3/middleware/attrdict.py +36 -49
  89. web3/middleware/base.py +174 -0
  90. web3/middleware/buffered_gas_estimate.py +20 -21
  91. web3/middleware/filter.py +157 -117
  92. web3/middleware/formatting.py +124 -108
  93. web3/middleware/gas_price_strategy.py +20 -32
  94. web3/middleware/names.py +29 -26
  95. web3/middleware/proof_of_authority.py +68 -0
  96. web3/middleware/pythonic.py +2 -2
  97. web3/middleware/signing.py +74 -89
  98. web3/middleware/stalecheck.py +52 -79
  99. web3/middleware/validation.py +5 -13
  100. web3/module.py +54 -10
  101. web3/providers/__init__.py +10 -6
  102. web3/providers/async_base.py +117 -39
  103. web3/providers/auto.py +3 -3
  104. web3/providers/base.py +89 -33
  105. web3/providers/eth_tester/__init__.py +5 -0
  106. web3/providers/eth_tester/defaults.py +1 -64
  107. web3/providers/eth_tester/main.py +99 -31
  108. web3/providers/eth_tester/middleware.py +45 -73
  109. web3/providers/ipc.py +42 -46
  110. web3/providers/{websocket/websocket.py → legacy_websocket.py} +32 -7
  111. web3/providers/persistent/__init__.py +22 -0
  112. web3/providers/persistent/async_ipc.py +153 -0
  113. web3/providers/{persistent.py → persistent/persistent.py} +106 -25
  114. web3/providers/persistent/persistent_connection.py +84 -0
  115. web3/providers/{websocket → persistent}/request_processor.py +94 -32
  116. web3/providers/persistent/utils.py +43 -0
  117. web3/providers/{websocket/websocket_v2.py → persistent/websocket.py} +29 -28
  118. web3/providers/rpc/__init__.py +11 -0
  119. web3/providers/rpc/async_rpc.py +171 -0
  120. web3/providers/rpc/rpc.py +179 -0
  121. web3/providers/rpc/utils.py +92 -0
  122. web3/testing.py +4 -4
  123. web3/tools/benchmark/main.py +22 -22
  124. web3/tools/benchmark/node.py +2 -8
  125. web3/tools/benchmark/reporting.py +2 -2
  126. web3/tools/benchmark/utils.py +1 -1
  127. web3/tracing.py +9 -5
  128. web3/types.py +30 -107
  129. web3/utils/__init__.py +58 -5
  130. web3/utils/abi.py +575 -10
  131. web3/utils/async_exception_handling.py +19 -7
  132. web3/utils/caching.py +32 -13
  133. web3/utils/exception_handling.py +7 -5
  134. {web3-6.20.2.dist-info → web3-7.0.0.dist-info}/LICENSE +1 -1
  135. web3-7.0.0.dist-info/METADATA +112 -0
  136. web3-7.0.0.dist-info/RECORD +167 -0
  137. {web3-6.20.2.dist-info → web3-7.0.0.dist-info}/WHEEL +1 -1
  138. {web3-6.20.2.dist-info → web3-7.0.0.dist-info}/top_level.txt +0 -1
  139. ethpm/__init__.py +0 -20
  140. ethpm/_utils/__init__.py +0 -0
  141. ethpm/_utils/backend.py +0 -93
  142. ethpm/_utils/cache.py +0 -44
  143. ethpm/_utils/chains.py +0 -119
  144. ethpm/_utils/contract.py +0 -35
  145. ethpm/_utils/deployments.py +0 -145
  146. ethpm/_utils/ipfs.py +0 -116
  147. ethpm/_utils/protobuf/__init__.py +0 -0
  148. ethpm/_utils/protobuf/ipfs_file_pb2.py +0 -33
  149. ethpm/_utils/registry.py +0 -29
  150. ethpm/assets/__init__.py +0 -0
  151. ethpm/assets/ens/v3.json +0 -1
  152. ethpm/assets/escrow/with_bytecode_v3.json +0 -1
  153. ethpm/assets/ipfs_file.proto +0 -32
  154. ethpm/assets/owned/output_v3.json +0 -1
  155. ethpm/assets/owned/with_contract_type_v3.json +0 -1
  156. ethpm/assets/registry/contracts/Authority.sol +0 -156
  157. ethpm/assets/registry/contracts/IndexedOrderedSetLib.sol +0 -106
  158. ethpm/assets/registry/contracts/PackageDB.sol +0 -225
  159. ethpm/assets/registry/contracts/PackageRegistry.sol +0 -361
  160. ethpm/assets/registry/contracts/PackageRegistryInterface.sol +0 -97
  161. ethpm/assets/registry/contracts/ReleaseDB.sol +0 -309
  162. ethpm/assets/registry/contracts/ReleaseValidator.sol +0 -152
  163. ethpm/assets/registry/solc_input.json +0 -1
  164. ethpm/assets/registry/solc_output.json +0 -1
  165. ethpm/assets/registry/v3.json +0 -1
  166. ethpm/assets/safe-math-lib/v3-strict-no-deployments.json +0 -1
  167. ethpm/assets/simple-registry/contracts/Ownable.sol +0 -63
  168. ethpm/assets/simple-registry/contracts/PackageRegistry.sol +0 -373
  169. ethpm/assets/simple-registry/contracts/PackageRegistryInterface.sol +0 -96
  170. ethpm/assets/simple-registry/solc_input.json +0 -33
  171. ethpm/assets/simple-registry/solc_output.json +0 -1
  172. ethpm/assets/simple-registry/v3.json +0 -1
  173. ethpm/assets/standard-token/output_v3.json +0 -1
  174. ethpm/assets/standard-token/with_bytecode_v3.json +0 -1
  175. ethpm/assets/vyper_registry/0.1.0.json +0 -1
  176. ethpm/assets/vyper_registry/registry.vy +0 -216
  177. ethpm/assets/vyper_registry/registry_with_delete.vy +0 -244
  178. ethpm/backends/__init__.py +0 -0
  179. ethpm/backends/base.py +0 -43
  180. ethpm/backends/http.py +0 -108
  181. ethpm/backends/ipfs.py +0 -219
  182. ethpm/backends/registry.py +0 -154
  183. ethpm/constants.py +0 -17
  184. ethpm/contract.py +0 -187
  185. ethpm/dependencies.py +0 -58
  186. ethpm/deployments.py +0 -80
  187. ethpm/ethpm-spec/examples/escrow/1.0.0-pretty.json +0 -146
  188. ethpm/ethpm-spec/examples/escrow/1.0.0.json +0 -1
  189. ethpm/ethpm-spec/examples/escrow/contracts/Escrow.sol +0 -32
  190. ethpm/ethpm-spec/examples/escrow/contracts/SafeSendLib.sol +0 -20
  191. ethpm/ethpm-spec/examples/escrow/v3-pretty.json +0 -171
  192. ethpm/ethpm-spec/examples/escrow/v3.json +0 -1
  193. ethpm/ethpm-spec/examples/owned/1.0.0-pretty.json +0 -21
  194. ethpm/ethpm-spec/examples/owned/1.0.0.json +0 -1
  195. ethpm/ethpm-spec/examples/owned/contracts/Owned.sol +0 -12
  196. ethpm/ethpm-spec/examples/owned/v3-pretty.json +0 -27
  197. ethpm/ethpm-spec/examples/owned/v3.json +0 -1
  198. ethpm/ethpm-spec/examples/piper-coin/1.0.0-pretty.json +0 -31
  199. ethpm/ethpm-spec/examples/piper-coin/1.0.0.json +0 -1
  200. ethpm/ethpm-spec/examples/piper-coin/v3-pretty.json +0 -21
  201. ethpm/ethpm-spec/examples/piper-coin/v3.json +0 -1
  202. ethpm/ethpm-spec/examples/safe-math-lib/1.0.0-pretty.json +0 -85
  203. ethpm/ethpm-spec/examples/safe-math-lib/1.0.0.json +0 -1
  204. ethpm/ethpm-spec/examples/safe-math-lib/contracts/SafeMathLib.sol +0 -24
  205. ethpm/ethpm-spec/examples/safe-math-lib/v3-pretty.json +0 -117
  206. ethpm/ethpm-spec/examples/safe-math-lib/v3.json +0 -1
  207. ethpm/ethpm-spec/examples/standard-token/1.0.0-pretty.json +0 -55
  208. ethpm/ethpm-spec/examples/standard-token/1.0.0.json +0 -1
  209. ethpm/ethpm-spec/examples/standard-token/contracts/AbstractToken.sol +0 -20
  210. ethpm/ethpm-spec/examples/standard-token/contracts/StandardToken.sol +0 -84
  211. ethpm/ethpm-spec/examples/standard-token/v3-pretty.json +0 -460
  212. ethpm/ethpm-spec/examples/standard-token/v3.json +0 -1
  213. ethpm/ethpm-spec/examples/transferable/1.0.0-pretty.json +0 -21
  214. ethpm/ethpm-spec/examples/transferable/1.0.0.json +0 -1
  215. ethpm/ethpm-spec/examples/transferable/contracts/Transferable.sol +0 -14
  216. ethpm/ethpm-spec/examples/transferable/v3-pretty.json +0 -27
  217. ethpm/ethpm-spec/examples/transferable/v3.json +0 -1
  218. ethpm/ethpm-spec/examples/wallet/1.0.0-pretty.json +0 -120
  219. ethpm/ethpm-spec/examples/wallet/1.0.0.json +0 -1
  220. ethpm/ethpm-spec/examples/wallet/contracts/Wallet.sol +0 -41
  221. ethpm/ethpm-spec/examples/wallet/v3-pretty.json +0 -181
  222. ethpm/ethpm-spec/examples/wallet/v3.json +0 -1
  223. ethpm/ethpm-spec/examples/wallet-with-send/1.0.0-pretty.json +0 -135
  224. ethpm/ethpm-spec/examples/wallet-with-send/1.0.0.json +0 -1
  225. ethpm/ethpm-spec/examples/wallet-with-send/contracts/WalletWithSend.sol +0 -18
  226. ethpm/ethpm-spec/examples/wallet-with-send/v3-pretty.json +0 -207
  227. ethpm/ethpm-spec/examples/wallet-with-send/v3.json +0 -1
  228. ethpm/ethpm-spec/spec/package.spec.json +0 -379
  229. ethpm/ethpm-spec/spec/v3.spec.json +0 -483
  230. ethpm/exceptions.py +0 -68
  231. ethpm/package.py +0 -438
  232. ethpm/tools/__init__.py +0 -4
  233. ethpm/tools/builder.py +0 -930
  234. ethpm/tools/checker.py +0 -312
  235. ethpm/tools/get_manifest.py +0 -19
  236. ethpm/uri.py +0 -141
  237. ethpm/validation/__init__.py +0 -0
  238. ethpm/validation/manifest.py +0 -146
  239. ethpm/validation/misc.py +0 -39
  240. ethpm/validation/package.py +0 -80
  241. ethpm/validation/uri.py +0 -163
  242. web3/_utils/contract_sources/contract_data/address_reflector.py +0 -29
  243. web3/_utils/miner.py +0 -88
  244. web3/_utils/module_testing/go_ethereum_personal_module.py +0 -323
  245. web3/_utils/request.py +0 -265
  246. web3/middleware/abi.py +0 -11
  247. web3/middleware/async_cache.py +0 -99
  248. web3/middleware/cache.py +0 -374
  249. web3/middleware/exception_handling.py +0 -49
  250. web3/middleware/exception_retry_request.py +0 -188
  251. web3/middleware/fixture.py +0 -190
  252. web3/middleware/geth_poa.py +0 -81
  253. web3/middleware/normalize_request_parameters.py +0 -11
  254. web3/middleware/simulate_unmined_transaction.py +0 -43
  255. web3/pm.py +0 -602
  256. web3/providers/async_rpc.py +0 -99
  257. web3/providers/rpc.py +0 -98
  258. web3/providers/websocket/__init__.py +0 -11
  259. web3/providers/websocket/websocket_connection.py +0 -42
  260. web3/tools/__init__.py +0 -4
  261. web3/tools/pytest_ethereum/__init__.py +0 -0
  262. web3/tools/pytest_ethereum/_utils.py +0 -145
  263. web3/tools/pytest_ethereum/deployer.py +0 -48
  264. web3/tools/pytest_ethereum/exceptions.py +0 -22
  265. web3/tools/pytest_ethereum/linker.py +0 -128
  266. web3/tools/pytest_ethereum/plugins.py +0 -33
  267. web3-6.20.2.dist-info/METADATA +0 -103
  268. web3-6.20.2.dist-info/RECORD +0 -283
  269. web3-6.20.2.dist-info/entry_points.txt +0 -2
  270. /web3/_utils/{function_identifiers.py → abi_element_identifiers.py} +0 -0
@@ -1,309 +0,0 @@
1
- pragma solidity ^0.4.24;
2
- pragma experimental "v0.5.0";
3
-
4
-
5
- import {IndexedOrderedSetLib} from "./IndexedOrderedSetLib.sol";
6
- import {Authorized} from "./Authority.sol";
7
-
8
-
9
- /// @title Database contract for a package index.
10
- /// @author Tim Coulter <tim.coulter@consensys.net>, Piper Merriam <pipermerriam@gmail.com>
11
- contract ReleaseDB is Authorized {
12
- using IndexedOrderedSetLib for IndexedOrderedSetLib.IndexedOrderedSet;
13
-
14
- struct Release {
15
- bool exists;
16
- uint createdAt;
17
- uint updatedAt;
18
- bytes32 nameHash;
19
- bytes32 versionHash;
20
- string manifestURI;
21
- }
22
-
23
- // Release Data: (releaseId => value)
24
- mapping (bytes32 => Release) _recordedReleases;
25
- mapping (bytes32 => bool) _removedReleases;
26
- IndexedOrderedSetLib.IndexedOrderedSet _allReleaseIds;
27
- mapping (bytes32 => IndexedOrderedSetLib.IndexedOrderedSet) _releaseIdsByNameHash;
28
-
29
- // Version Data: (versionHash => value)
30
- mapping (bytes32 => string) _recordedVersions;
31
- mapping (bytes32 => bool) _versionExists;
32
-
33
- // Events
34
- event ReleaseCreate(bytes32 indexed releaseId);
35
- event ReleaseUpdate(bytes32 indexed releaseId);
36
- event ReleaseDelete(bytes32 indexed releaseId, string reason);
37
-
38
- /*
39
- * Modifiers
40
- */
41
- modifier onlyIfVersionExists(bytes32 versionHash) {
42
- require(versionExists(versionHash), "escape:ReleaseDB:version-not-found");
43
- _;
44
- }
45
-
46
- modifier onlyIfReleaseExists(bytes32 releaseId) {
47
- require(releaseExists(releaseId), "escape:ReleaseDB:release-not-found");
48
- _;
49
- }
50
-
51
- //
52
- // +-------------+
53
- // | Write API |
54
- // +-------------+
55
- //
56
-
57
- /// @dev Creates or updates a release for a package. Returns success.
58
- /// @param nameHash The name hash of the package.
59
- /// @param versionHash The version hash for the release version.
60
- /// @param manifestURI The URI for the release manifest for this release.
61
- function setRelease(
62
- bytes32 nameHash,
63
- bytes32 versionHash,
64
- string manifestURI
65
- )
66
- public
67
- auth
68
- returns (bool)
69
- {
70
- bytes32 releaseId = hashRelease(nameHash, versionHash);
71
-
72
- Release storage release = _recordedReleases[releaseId];
73
-
74
- // If this is a new version push it onto the array of version hashes for
75
- // this package.
76
- if (release.exists) {
77
- emit ReleaseUpdate(releaseId);
78
- } else {
79
- // Populate the basic release data.
80
- release.exists = true;
81
- release.createdAt = block.timestamp; // solium-disable-line security/no-block-members
82
- release.nameHash = nameHash;
83
- release.versionHash = versionHash;
84
-
85
- // Push the release hash into the array of all release hashes.
86
- _allReleaseIds.add(releaseId);
87
- _releaseIdsByNameHash[nameHash].add(releaseId);
88
-
89
- emit ReleaseCreate(releaseId);
90
- }
91
-
92
- // Record the last time the release was updated.
93
- release.updatedAt = block.timestamp; // solium-disable-line security/no-block-members
94
-
95
- // Save the release manifest URI
96
- release.manifestURI = manifestURI;
97
-
98
- return true;
99
- }
100
-
101
- /// @dev Removes a release from a package. Returns success.
102
- /// @param releaseId The release hash to be removed
103
- /// @param reason Explanation for why the removal happened.
104
- function removeRelease(bytes32 releaseId, string reason)
105
- public
106
- auth
107
- onlyIfReleaseExists(releaseId)
108
- returns (bool)
109
- {
110
- bytes32 nameHash;
111
- bytes32 versionHash;
112
-
113
- (nameHash, versionHash,,) = getReleaseData(releaseId);
114
-
115
- // Zero out the release data.
116
- delete _recordedReleases[releaseId];
117
- delete _recordedVersions[versionHash];
118
-
119
- // Remove the release hash from the list of all release hashes
120
- _allReleaseIds.remove(releaseId);
121
- _releaseIdsByNameHash[nameHash].remove(releaseId);
122
-
123
- // Add the release hash to the map of removed releases
124
- _removedReleases[releaseId] = true;
125
-
126
- // Log the removal.
127
- emit ReleaseDelete(releaseId, reason);
128
-
129
- return true;
130
- }
131
-
132
-
133
- /// @dev Adds the given version to the local version database. Returns the versionHash for the provided version.
134
- /// @param version Version string (ex: '1.0.0')
135
- function setVersion(string version)
136
- public
137
- auth
138
- returns (bytes32)
139
- {
140
- bytes32 versionHash = hashVersion(version);
141
-
142
- if (!_versionExists[versionHash]) {
143
- _recordedVersions[versionHash] = version;
144
- _versionExists[versionHash] = true;
145
- }
146
- return versionHash;
147
- }
148
-
149
- //
150
- // +------------+
151
- // | Read API |
152
- // +------------+
153
- //
154
-
155
- /// @dev Returns a slice of the array of all releases hashes for the named package.
156
- /// @param offset The starting index for the slice.
157
- /// @param limit The length of the slice
158
- function getAllReleaseIds(bytes32 nameHash, uint _offset, uint limit)
159
- public
160
- view
161
- returns (
162
- bytes32[] releaseIds,
163
- uint offset
164
- )
165
- {
166
- bytes32[] memory hashes; // Release ids to return
167
- uint cursor = _offset; // Index counter to traverse DB array
168
- uint remaining; // Counter to collect `limit` packages
169
- uint totalReleases = getNumReleasesForNameHash(nameHash); // Total number of packages in registry
170
-
171
- // Is request within range?
172
- if (cursor < totalReleases){
173
-
174
- // Get total remaining records
175
- remaining = totalReleases - cursor;
176
-
177
- // Number of records to collect is lesser of `remaining` and `limit`
178
- if (remaining > limit ){
179
- remaining = limit;
180
- }
181
-
182
- // Allocate return array
183
- hashes = new bytes32[](remaining);
184
-
185
- // Collect records. (IndexedOrderedSet manages deletions.)
186
- while(remaining > 0){
187
- bytes32 hash = getReleaseIdForNameHash(nameHash, cursor);
188
- hashes[remaining - 1] = hash;
189
- remaining--;
190
- cursor++;
191
- }
192
- }
193
- return (hashes, cursor);
194
- }
195
-
196
- /// @dev Get the total number of releases
197
- /// @param nameHash the name hash to lookup.
198
- function getNumReleasesForNameHash(bytes32 nameHash)
199
- public
200
- view
201
- returns (uint)
202
- {
203
- return _releaseIdsByNameHash[nameHash].size();
204
- }
205
-
206
- /// @dev Release hash for a Package at a given index
207
- /// @param nameHash the name hash to lookup.
208
- /// @param idx The index of the release hash to retrieve.
209
- function getReleaseIdForNameHash(bytes32 nameHash, uint idx)
210
- public
211
- view
212
- returns (bytes32)
213
- {
214
- return _releaseIdsByNameHash[nameHash].get(idx);
215
- }
216
-
217
- /// @dev Query the existence of a release at the provided version for a package. Returns boolean indicating whether such a release exists.
218
- /// @param releaseId The release hash to query.
219
- function releaseExists(bytes32 releaseId)
220
- public
221
- view
222
- returns (bool)
223
- {
224
- return _recordedReleases[releaseId].exists;
225
- }
226
-
227
- /// @dev Query the past existence of a release at the provided version for a package. Returns boolean indicating whether such a release ever existed.
228
- /// @param releaseHash The release hash to query.
229
- function releaseExisted(bytes32 releaseHash)
230
- public
231
- view
232
- returns (bool)
233
- {
234
- return _removedReleases[releaseHash];
235
- }
236
-
237
- /// @dev Query the existence of the provided version in the recorded versions. Returns boolean indicating whether such a version exists.
238
- /// @param versionHash the version hash to check.
239
- function versionExists(bytes32 versionHash)
240
- public
241
- view
242
- returns (bool)
243
- {
244
- return _versionExists[versionHash];
245
- }
246
-
247
- /// @dev Returns the releaseData for the given release has a package.
248
- /// @param releaseId The release hash.
249
- function getReleaseData(bytes32 releaseId)
250
- public
251
- view
252
- onlyIfReleaseExists(releaseId)
253
- returns (
254
- bytes32 nameHash,
255
- bytes32 versionHash,
256
- uint createdAt,
257
- uint updatedAt
258
- )
259
- {
260
- Release storage release = _recordedReleases[releaseId];
261
- return (release.nameHash, release.versionHash, release.createdAt, release.updatedAt);
262
- }
263
-
264
- /// @dev Returns string version identifier from the version of the given release hash.
265
- /// @param versionHash the version hash
266
- function getVersion(bytes32 versionHash)
267
- public
268
- view
269
- onlyIfVersionExists(versionHash)
270
- returns (string)
271
- {
272
- return _recordedVersions[versionHash];
273
- }
274
-
275
- /// @dev Returns the URI of the release manifest for the given release hash.
276
- /// @param releaseId Release hash
277
- function getManifestURI(bytes32 releaseId)
278
- public
279
- view
280
- onlyIfReleaseExists(releaseId)
281
- returns (string)
282
- {
283
- return _recordedReleases[releaseId].manifestURI;
284
- }
285
-
286
- /*
287
- * Hash Functions
288
- */
289
- /// @dev Returns version hash for the given semver version.
290
- /// @param version Version string
291
- function hashVersion(string version)
292
- public
293
- pure
294
- returns (bytes32)
295
- {
296
- return keccak256(abi.encodePacked(version));
297
- }
298
-
299
- /// @dev Returns release hash for the given release
300
- /// @param nameHash The name hash of the package name.
301
- /// @param versionHash The version hash for the release version.
302
- function hashRelease(bytes32 nameHash, bytes32 versionHash)
303
- public
304
- pure
305
- returns (bytes32)
306
- {
307
- return keccak256(abi.encodePacked(nameHash, versionHash));
308
- }
309
- }
@@ -1,152 +0,0 @@
1
- pragma solidity ^0.4.24;
2
- pragma experimental "v0.5.0";
3
-
4
- import {PackageDB} from "./PackageDB.sol";
5
- import {ReleaseDB} from "./ReleaseDB.sol";
6
-
7
- /// @title Database contract for a package index.
8
- /// @author Piper Merriam <pipermerriam@gmail.com>
9
- contract ReleaseValidator {
10
- /// @dev Runs validation on all of the data needed for releasing a package. Returns success.
11
- /// @param packageDb The address of the PackageDB
12
- /// @param releaseDb The address of the ReleaseDB
13
- /// @param callerAddress The address which is attempting to create the release.
14
- /// @param name The name of the package.
15
- /// @param version The version string of the package (ex: `1.0.0`)
16
- /// @param manifestURI The URI of the release manifest.
17
- function validateRelease(
18
- PackageDB packageDb,
19
- ReleaseDB releaseDb,
20
- address callerAddress,
21
- string name,
22
- string version,
23
- string manifestURI
24
- )
25
- public
26
- view
27
- returns (bool)
28
- {
29
- if (address(packageDb) == 0x0){
30
- // packageDb address is null
31
- revert("escape:ReleaseValidator:package-db-not-set");
32
- } else if (address(releaseDb) == 0x0){
33
- // releaseDb address is null
34
- revert("escape:ReleaseValidator:release-db-not-set");
35
- } else if (!validateAuthorization(packageDb, callerAddress, name)) {
36
- // package exists and msg.sender is not the owner not the package owner.
37
- revert("escape:ReleaseValidator:caller-not-authorized");
38
- } else if (!validateIsNewRelease(packageDb, releaseDb, name, version)) {
39
- // this version has already been released.
40
- revert("escape:ReleaseValidator:version-previously-published");
41
- } else if (!validatePackageName(packageDb, name)) {
42
- // invalid package name.
43
- revert("escape:ReleaseValidator:invalid-package-name");
44
- } else if (!validateStringIdentifier(manifestURI)) {
45
- // disallow empty release manifest URI
46
- revert("escape:ReleaseValidator:invalid-manifest-uri");
47
- } else if (!validateStringIdentifier(version)) {
48
- // disallow version 0.0.0
49
- revert("escape:ReleaseValidator:invalid-release-version");
50
- }
51
- return true;
52
- }
53
-
54
- /// @dev Validate whether the callerAddress is authorized to make this release.
55
- /// @param packageDb The address of the PackageDB
56
- /// @param callerAddress The address which is attempting to create the release.
57
- /// @param name The name of the package.
58
- function validateAuthorization(
59
- PackageDB packageDb,
60
- address callerAddress,
61
- string name
62
- )
63
- public
64
- view
65
- returns (bool)
66
- {
67
- bytes32 nameHash = packageDb.hashName(name);
68
- if (!packageDb.packageExists(nameHash)) {
69
- return true;
70
- }
71
- address packageOwner;
72
-
73
- (packageOwner,,) = packageDb.getPackageData(nameHash);
74
-
75
- if (packageOwner == callerAddress) {
76
- return true;
77
- }
78
- return false;
79
- }
80
-
81
- /// @dev Validate that the version being released has not already been released.
82
- /// @param packageDb The address of the PackageDB
83
- /// @param releaseDb The address of the ReleaseDB
84
- /// @param name The name of the package.
85
- /// @param version The version string for the release
86
- function validateIsNewRelease(
87
- PackageDB packageDb,
88
- ReleaseDB releaseDb,
89
- string name,
90
- string version
91
- )
92
- public
93
- view
94
- returns (bool)
95
- {
96
- bytes32 nameHash = packageDb.hashName(name);
97
- bytes32 versionHash = releaseDb.hashVersion(version);
98
- bytes32 releaseHash = releaseDb.hashRelease(nameHash, versionHash);
99
- return !releaseDb.releaseExists(releaseHash) && !releaseDb.releaseExisted(releaseHash);
100
- }
101
-
102
- uint constant DIGIT_0 = uint(bytes1("0"));
103
- uint constant DIGIT_9 = uint(bytes1("9"));
104
- uint constant LETTER_a = uint(bytes1("a"));
105
- uint constant LETTER_z = uint(bytes1("z"));
106
- bytes1 constant DASH = bytes1("-");
107
-
108
- /// @dev Returns boolean whether the provided package name is valid.
109
- /// @param packageDb The address of the PackageDB
110
- /// @param name The name of the package.
111
- function validatePackageName(PackageDB packageDb, string name)
112
- public
113
- view
114
- returns (bool)
115
- {
116
- bytes32 nameHash = packageDb.hashName(name);
117
-
118
- if (packageDb.packageExists(nameHash)) {
119
- // existing names are always valid.
120
- return true;
121
- }
122
-
123
- if (bytes(name).length < 2 || bytes(name).length > 255) {
124
- return false;
125
- }
126
- for (uint i = 0; i < bytes(name).length; i++) {
127
- if (bytes(name)[i] == DASH && i > 0) {
128
- continue;
129
- } else if (i > 0 && uint(bytes(name)[i]) >= DIGIT_0 && uint(bytes(name)[i]) <= DIGIT_9) {
130
- continue;
131
- } else if (uint(bytes(name)[i]) >= LETTER_a && uint(bytes(name)[i]) <= LETTER_z) {
132
- continue;
133
- } else {
134
- return false;
135
- }
136
- }
137
- return true;
138
- }
139
-
140
- /// @dev Returns boolean whether the input string has a length
141
- /// @param value The string to validate.
142
- function validateStringIdentifier(string value)
143
- public
144
- pure
145
- returns (bool)
146
- {
147
- if (bytes(value).length == 0) {
148
- return false;
149
- }
150
- return true;
151
- }
152
- }
@@ -1 +0,0 @@
1
- {"language": "Solidity", "settings": {"outputSelection": {"*": {"*": ["abi", "evm.bytecode.object", "evm.deployedBytecode", "metadata", "devdoc"]}}}, "sources": {"PackageRegistryInterface.sol": {"urls": ["/Users/nickgheorghita/ethereum/ethpm-cli/projects/registry/contracts/PackageRegistryInterface.sol"]}, "PackageRegistry.sol": {"urls": ["/Users/nickgheorghita/ethereum/ethpm-cli/projects/registry/contracts/PackageRegistry.sol"]}, "PackageDB.sol": {"urls": ["/Users/nickgheorghita/ethereum/ethpm-cli/projects/registry/contracts/PackageDB.sol"]}, "ReleaseDB.sol": {"urls": ["/Users/nickgheorghita/ethereum/ethpm-cli/projects/registry/contracts/ReleaseDB.sol"]}, "Authority.sol": {"urls": ["/Users/nickgheorghita/ethereum/ethpm-cli/projects/registry/contracts/Authority.sol"]}, "ReleaseValidator.sol": {"urls": ["/Users/nickgheorghita/ethereum/ethpm-cli/projects/registry/contracts/ReleaseValidator.sol"]}, "IndexedOrderedSetLib.sol": {"urls": ["/Users/nickgheorghita/ethereum/ethpm-cli/projects/registry/contracts/IndexedOrderedSetLib.sol"]}}}