@@ -9,27 +9,28 @@ contract CannonRegistry is Storage, Ownable, UUPSImplementation {
9
9
error Unauthorized ();
10
10
error InvalidUrl (string url );
11
11
error InvalidName (bytes32 name );
12
+ error TooManyTags ();
12
13
13
14
event PackagePublish (bytes32 indexed name , bytes32 indexed version , bytes32 [] indexed tags , string url , address owner );
14
15
15
16
uint public constant MIN_PACKAGE_NAME_LENGTH = 3 ;
16
17
17
- function upgradeTo (address newImplementation ) public override onlyOwner {
18
- _upgradeTo (newImplementation );
18
+ function upgradeTo (address _newImplementation ) public override onlyOwner {
19
+ _upgradeTo (_newImplementation );
19
20
}
20
21
21
- function validatePackageName (bytes32 name ) public pure returns (bool ) {
22
+ function validatePackageName (bytes32 _name ) public pure returns (bool ) {
22
23
// each character must be in the supported charset
23
24
24
25
for (uint i = 0 ; i < 32 ; i++ ) {
25
- if (name [i] == bytes1 (0 )) {
26
+ if (_name [i] == bytes1 (0 )) {
26
27
// must be long enough
27
28
if (i < MIN_PACKAGE_NAME_LENGTH) {
28
29
return false ;
29
30
}
30
31
31
32
// last character cannot be `-`
32
- if (name [i - 1 ] == "- " ) {
33
+ if (_name [i - 1 ] == "- " ) {
33
34
return false ;
34
35
}
35
36
@@ -38,10 +39,10 @@ contract CannonRegistry is Storage, Ownable, UUPSImplementation {
38
39
39
40
// must be in valid character set
40
41
if (
41
- (name [i] < "0 " || name [i] > "9 " ) &&
42
- (name [i] < "a " || name [i] > "z " ) &&
42
+ (_name [i] < "0 " || _name [i] > "9 " ) &&
43
+ (_name [i] < "a " || _name [i] > "z " ) &&
43
44
// first character cannot be `-`
44
- (i == 0 || name [i] != "- " )
45
+ (i == 0 || _name [i] != "- " )
45
46
) {
46
47
return false ;
47
48
}
@@ -51,79 +52,84 @@ contract CannonRegistry is Storage, Ownable, UUPSImplementation {
51
52
}
52
53
53
54
function publish (
54
- bytes32 _name ,
55
- bytes32 _version ,
56
- bytes32 [] memory _tags ,
57
- string memory _url
55
+ bytes32 _packageName ,
56
+ bytes32 _packageVersionName ,
57
+ bytes32 [] memory _packageTags ,
58
+ string memory _packageVersionUrl
58
59
) external {
59
- Store storage s = _store ();
60
+ if (_packageTags.length > 5 ) {
61
+ revert TooManyTags ();
62
+ }
60
63
61
- if (bytes (_url ).length == 0 ) {
62
- revert InvalidUrl (_url );
64
+ if (bytes (_packageVersionUrl ).length == 0 ) {
65
+ revert InvalidUrl (_packageVersionUrl );
63
66
}
64
67
65
- if (s.owners[_name] != address (0 ) && s.owners[_name] != msg .sender ) {
68
+ Package storage _p = _store ().packages[_packageName];
69
+
70
+ if (_p.owner != address (0 ) && _p.owner != msg .sender ) {
66
71
revert Unauthorized ();
67
72
}
68
73
69
- if (s.owners[_name] == address (0 )) {
70
- if (! validatePackageName (_name )) {
71
- revert InvalidName (_name );
74
+ if (_p.owner == address (0 )) {
75
+ if (! validatePackageName (_packageName )) {
76
+ revert InvalidName (_packageName );
72
77
}
73
78
74
- s.owners[_name] = msg .sender ;
75
- s.packages.push (_name);
79
+ _p.owner = msg .sender ;
76
80
}
77
81
78
- if (bytes (s.urls[_name][_version ]).length == 0 ) {
79
- s .versions[_name] .push (_version );
82
+ if (bytes (_p.versionUrls[_packageVersionName ]).length == 0 ) {
83
+ _p .versions.push (_packageVersionName );
80
84
}
81
85
82
- s.urls[_name][_version] = _url ;
86
+ _p.versionUrls[_packageVersionName] = _packageVersionUrl ;
83
87
84
- for (uint i = 0 ; i < _tags.length ; i++ ) {
85
- s.urls[_name][_tags[i]] = _url;
88
+ for (uint i = 0 ; i < _packageTags.length ; i++ ) {
89
+ bytes32 _tag = _packageTags[i];
90
+
91
+ if (bytes (_p.versionUrls[_tag]).length == 0 ) {
92
+ _p.versions.push (_tag);
93
+ }
94
+
95
+ _p.versionUrls[_tag] = _packageVersionUrl;
86
96
}
87
97
88
- emit PackagePublish (_name, _version, _tags, _url , msg .sender );
98
+ emit PackagePublish (_packageName, _packageVersionName, _packageTags, _packageVersionUrl , msg .sender );
89
99
}
90
100
91
- function nominatePackageOwner (bytes32 _name , address _newOwner ) external {
92
- Store storage s = _store ();
101
+ function nominatePackageOwner (bytes32 _packageName , address _newPackageOwner ) external {
102
+ Package storage _p = _store ().packages[_packageName] ;
93
103
94
- if (s.owners[_name] != msg .sender ) {
104
+ if (_p.owner != msg .sender ) {
95
105
revert Unauthorized ();
96
106
}
97
107
98
- s .nominatedOwner[_name] = _newOwner ;
108
+ _p .nominatedOwner = _newPackageOwner ;
99
109
}
100
110
101
- function acceptPackageOwnership (bytes32 _name ) external {
102
- Store storage s = _store ();
111
+ function acceptPackageOwnership (bytes32 _packageName ) external {
112
+ Package storage _p = _store ().packages[_packageName] ;
103
113
104
- address newOwner = s .nominatedOwner[_name] ;
114
+ address newOwner = _p .nominatedOwner;
105
115
106
116
if (msg .sender != newOwner) {
107
117
revert Unauthorized ();
108
118
}
109
119
110
- s.owners[_name] = newOwner;
111
- s.nominatedOwner[_name] = address (0 );
112
- }
113
-
114
- function getPackageNominatedOwner (bytes32 _protocolName ) external view returns (address ) {
115
- return _store ().nominatedOwner[_protocolName];
120
+ _p.owner = newOwner;
121
+ _p.nominatedOwner = address (0 );
116
122
}
117
123
118
- function getPackages ( ) external view returns (bytes32 [] memory ) {
119
- return _store ().packages;
124
+ function getPackageNominatedOwner ( bytes32 _packageName ) external view returns (address ) {
125
+ return _store ().packages[_packageName].nominatedOwner ;
120
126
}
121
127
122
- function getPackageVersions (bytes32 _protocolName ) external view returns (bytes32 [] memory ) {
123
- return _store ().versions[_protocolName] ;
128
+ function getPackageVersions (bytes32 _packageName ) external view returns (bytes32 [] memory ) {
129
+ return _store ().packages[_packageName].versions ;
124
130
}
125
131
126
- function getPackageUrl (bytes32 _protocolName , bytes32 _protocolVersion ) external view returns (string memory ) {
127
- return _store ().urls[_protocolName][_protocolVersion ];
132
+ function getPackageUrl (bytes32 _packageName , bytes32 _packageVersionName ) external view returns (string memory ) {
133
+ return _store ().packages[_packageName].versionUrls[_packageVersionName ];
128
134
}
129
135
}
0 commit comments