@@ -28,7 +28,7 @@ abstract contract Distributor is IDistributor, CodeIndexer, ERC165 {
28
28
}
29
29
30
30
using EnumerableSet for EnumerableSet.Bytes32Set;
31
- EnumerableSet.Bytes32Set private distirbutionsSet ;
31
+ EnumerableSet.Bytes32Set private distributionsSet ;
32
32
mapping (address instance = > uint256 instanceId ) private instanceIds;
33
33
mapping (uint256 instance = > bytes32 distributorsId ) public distributionOf;
34
34
mapping (bytes32 distributorsId = > DistributionComponent distirbution ) public distributionComponents;
@@ -38,7 +38,7 @@ abstract contract Distributor is IDistributor, CodeIndexer, ERC165 {
38
38
uint256 public numInstances;
39
39
// @inheritdoc IDistributor
40
40
function getDistributions () external view returns (bytes32 [] memory ) {
41
- return distirbutionsSet .values ();
41
+ return distributionsSet .values ();
42
42
}
43
43
// @inheritdoc IDistributor
44
44
function getDistributionId (address instance ) external view virtual returns (bytes32 ) {
@@ -58,36 +58,44 @@ abstract contract Distributor is IDistributor, CodeIndexer, ERC165 {
58
58
address repository ,
59
59
address initializer ,
60
60
LibSemver.VersionRequirement memory requirement
61
- ) internal {
61
+ ) internal virtual returns ( bytes32 distributorId ) {
62
62
if (! ERC165Checker .supportsInterface (address (repository), type (IRepository).interfaceId)) {
63
63
revert InvalidRepository (repository);
64
64
}
65
- bytes32 distributorId = keccak256 (abi.encode (repository, initializer));
65
+ distributorId = keccak256 (abi.encode (repository, initializer));
66
66
if (LibSemver.toUint256 (requirement.version) == 0 ) {
67
67
revert InvalidVersionRequested (distributorId, LibSemver.toString (requirement.version));
68
68
}
69
- _newDistriubutionRecord (distributorId, repository, initializer);
69
+ _newDistributionRecord (distributorId, repository, initializer);
70
70
versionRequirements[distributorId] = requirement;
71
71
emit VersionChanged (distributorId, requirement, requirement);
72
72
}
73
73
74
- function _newDistriubutionRecord (bytes32 distributorId , address source , address initializer ) private {
75
- if (distirbutionsSet.contains (distributorId)) revert DistributionExists (distributorId);
76
- distirbutionsSet.add (distributorId);
74
+ function calculateDistributorId (address repository , address initializer ) public pure returns (bytes32 ) {
75
+ return keccak256 (abi.encode (repository, initializer));
76
+ }
77
+
78
+ function calculateDistributorId (bytes32 sourceId , address initializer ) public pure returns (bytes32 ) {
79
+ return keccak256 (abi.encode (sourceId, initializer));
80
+ }
81
+
82
+ function _newDistributionRecord (bytes32 distributorId , address source , address initializer ) private {
83
+ if (distributionsSet.contains (distributorId)) revert DistributionExists (distributorId);
84
+ distributionsSet.add (distributorId);
77
85
distributionComponents[distributorId] = DistributionComponent (source, initializer);
78
86
emit DistributionAdded (distributorId, source, initializer);
79
87
}
80
- function _addDistribution (bytes32 id , address initializerAddress ) internal {
88
+ function _addDistribution (bytes32 id , address initializerAddress ) internal virtual returns ( bytes32 distributorId ) {
81
89
ICodeIndex codeIndex = getContractsIndex ();
82
90
address distributionLocation = codeIndex.get (id);
83
91
if (distributionLocation == address (0 )) revert DistributionNotFound (id);
84
- bytes32 distributorsId = keccak256 (abi.encode (id, initializerAddress));
85
- _newDistriubutionRecord (distributorsId , distributionLocation, initializerAddress);
92
+ distributorId = keccak256 (abi.encode (id, initializerAddress));
93
+ _newDistributionRecord (distributorId , distributionLocation, initializerAddress);
86
94
}
87
95
88
96
function _removeDistribution (bytes32 distributorsId ) internal virtual {
89
- if (! distirbutionsSet .contains (distributorsId)) revert DistributionNotFound (distributorsId);
90
- distirbutionsSet .remove (distributorsId);
97
+ if (! distributionsSet .contains (distributorsId)) revert DistributionNotFound (distributorsId);
98
+ distributionsSet .remove (distributorsId);
91
99
delete distributionComponents[distributorsId];
92
100
delete versionRequirements[distributorsId];
93
101
emit DistributionRemoved (distributorsId);
@@ -101,7 +109,7 @@ abstract contract Distributor is IDistributor, CodeIndexer, ERC165 {
101
109
bytes32 distributorsId ,
102
110
bytes memory args
103
111
) internal virtual returns (address [] memory instances , bytes32 distributionName , uint256 distributionVersion ) {
104
- if (! distirbutionsSet .contains (distributorsId)) revert DistributionNotFound (distributorsId);
112
+ if (! distributionsSet .contains (distributorsId)) revert DistributionNotFound (distributorsId);
105
113
DistributionComponent memory distributionComponent = distributionComponents[distributorsId];
106
114
LibSemver.VersionRequirement memory versionRequirement = versionRequirements[distributorsId];
107
115
@@ -182,7 +190,7 @@ abstract contract Distributor is IDistributor, CodeIndexer, ERC165 {
182
190
if (
183
191
distributorsId != bytes32 (0 ) &&
184
192
getInstanceId (target) == instanceId &&
185
- distirbutionsSet .contains (distributorsId)
193
+ distributionsSet .contains (distributorsId)
186
194
) {
187
195
// ToDo: This check could be based on DistributionOf, hence allowing cross-instance calls
188
196
// Use layerConfig to allow client to configure requirement for the call
@@ -209,7 +217,7 @@ abstract contract Distributor is IDistributor, CodeIndexer, ERC165 {
209
217
address target = config.length > 0 ? abi.decode (config, (address )) : msg .sender ;
210
218
bytes32 distributorsId = distributionOf[getInstanceId (maybeInstance)];
211
219
uint256 instanceId = getInstanceId (maybeInstance);
212
- if ((getInstanceId (target) != getInstanceId (maybeInstance)) && distirbutionsSet .contains (distributorsId)) {
220
+ if ((getInstanceId (target) != getInstanceId (maybeInstance)) && distributionsSet .contains (distributorsId)) {
213
221
revert InvalidInstance (maybeInstance);
214
222
}
215
223
if (! LibSemver.compare (instanceVersions[instanceId], versionRequirements[distributorsId])) {
@@ -222,7 +230,7 @@ abstract contract Distributor is IDistributor, CodeIndexer, ERC165 {
222
230
}
223
231
224
232
function _changeVersion (bytes32 distributionId , LibSemver.VersionRequirement memory newRequirement ) internal {
225
- if (! distirbutionsSet .contains (distributionId)) revert DistributionNotFound (distributionId);
233
+ if (! distributionsSet .contains (distributionId)) revert DistributionNotFound (distributionId);
226
234
LibSemver.VersionRequirement memory oldRequirement = versionRequirements[distributionId];
227
235
if (LibSemver.toUint256 (oldRequirement.version) == 0 ) {
228
236
revert UniversionedDistribution (distributionId);
0 commit comments