-
Notifications
You must be signed in to change notification settings - Fork 480
Expand file tree
/
Copy pathReleaseManager.sol
More file actions
111 lines (93 loc) · 3.75 KB
/
Copy pathReleaseManager.sol
File metadata and controls
111 lines (93 loc) · 3.75 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
// SPDX-License-Identifier: BUSL-1.1
pragma solidity ^0.8.27;
import "@openzeppelin-upgrades/contracts/proxy/utils/Initializable.sol";
import "../mixins/PermissionControllerMixin.sol";
import "../mixins/SemVerMixin.sol";
import "./ReleaseManagerStorage.sol";
contract ReleaseManager is Initializable, ReleaseManagerStorage, PermissionControllerMixin, SemVerMixin {
using OperatorSetLib for OperatorSet;
/**
*
* INITIALIZING FUNCTIONS
*
*/
constructor(
IPermissionController _permissionController,
string memory _version
) PermissionControllerMixin(_permissionController) SemVerMixin(_version) {
_disableInitializers();
}
/**
*
* EXTERNAL FUNCTIONS
*
*/
/// @inheritdoc IReleaseManager
function publishRelease(
OperatorSet calldata operatorSet,
Release calldata release
) external checkCanCall(operatorSet.avs) returns (uint256 releaseId) {
Release[] storage releases = _operatorSetReleases[operatorSet.key()];
require(bytes(_operatorSetMetadataURI[operatorSet.key()]).length != 0, MustPublishMetadataURI());
require(release.upgradeByTime == 0 || release.upgradeByTime >= block.timestamp, InvalidUpgradeByTime());
// New release id is the length of the array before this call.
releaseId = releases.length;
// Increment total releases for this operator set.
releases.push(release);
emit ReleasePublished(operatorSet, releaseId, release);
}
/// @inheritdoc IReleaseManager
function publishMetadataURI(
OperatorSet calldata operatorSet,
string calldata metadataURI
) external checkCanCall(operatorSet.avs) {
require(bytes(metadataURI).length != 0, InvalidMetadataURI());
_operatorSetMetadataURI[operatorSet.key()] = metadataURI;
emit MetadataURIPublished(operatorSet, metadataURI);
}
/**
*
* VIEW FUNCTIONS
*
*/
/// @inheritdoc IReleaseManager
function getTotalReleases(
OperatorSet memory operatorSet
) public view returns (uint256) {
return _operatorSetReleases[operatorSet.key()].length;
}
/// @inheritdoc IReleaseManager
function getRelease(OperatorSet memory operatorSet, uint256 releaseId) external view returns (Release memory) {
return _operatorSetReleases[operatorSet.key()][releaseId];
}
/// @inheritdoc IReleaseManager
function getLatestRelease(
OperatorSet memory operatorSet
) external view returns (uint256, Release memory) {
Release[] storage releases = _operatorSetReleases[operatorSet.key()];
require(releases.length > 0, NoReleases());
uint256 latestReleaseId = releases.length - 1;
return (latestReleaseId, releases[latestReleaseId]);
}
/// @inheritdoc IReleaseManager
function getLatestUpgradeByTime(
OperatorSet memory operatorSet
) external view returns (uint32) {
Release[] storage releases = _operatorSetReleases[operatorSet.key()];
require(releases.length > 0, NoReleases());
uint256 latestReleaseId = releases.length - 1;
return releases[latestReleaseId].upgradeByTime;
}
/// @inheritdoc IReleaseManager
function isValidRelease(OperatorSet memory operatorSet, uint256 releaseId) external view returns (bool) {
uint256 totalReleases = getTotalReleases(operatorSet);
require(totalReleases > 0, NoReleases());
return releaseId == totalReleases - 1;
}
/// @inheritdoc IReleaseManager
function getMetadataURI(
OperatorSet memory operatorSet
) external view returns (string memory) {
return _operatorSetMetadataURI[operatorSet.key()];
}
}