Skip to content

Commit 65045a8

Browse files
committed
chore(gateway-contracts): use timestamp instead of block number
1 parent f8ee029 commit 65045a8

File tree

15 files changed

+554
-532
lines changed

15 files changed

+554
-532
lines changed

gateway-contracts/contracts/CoprocessorContexts.sol

Lines changed: 31 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { ECDSA } from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol";
77
import { Strings } from "@openzeppelin/contracts/utils/Strings.sol";
88
import "./shared/Pausable.sol";
99
import { ContextLifecycle } from "./libraries/ContextLifecycle.sol";
10-
import { CoprocessorContext, CoprocessorContextBlockPeriods } from "./shared/Structs.sol";
10+
import { CoprocessorContext, CoprocessorContextTimePeriods } from "./shared/Structs.sol";
1111
import { ContextStatus } from "./shared/Enums.sol";
1212
import { UUPSUpgradeableEmptyProxy } from "./shared/UUPSUpgradeableEmptyProxy.sol";
1313

@@ -49,12 +49,12 @@ contract CoprocessorContexts is ICoprocessorContexts, Ownable2StepUpgradeable, U
4949
mapping(uint256 contextId => mapping(address coprocessorSignerAddress => bool isCoprocessorSigner)) isCoprocessorSigner;
5050
/// @notice The coprocessors' signer address list per context
5151
mapping(uint256 contextId => address[] coprocessorSignerAddresses) coprocessorSignerAddresses;
52-
/// @notice The block number at which the coprocessor context is activated
53-
mapping(uint256 contextId => uint256 activationBlockNumber) coprocessorContextActivationBlockNumber;
54-
/// @notice The block number at which the coprocessor context is deactivated
55-
mapping(uint256 contextId => uint256 deactivatedBlockNumber) coprocessorContextDeactivatedBlockNumber;
56-
/// @notice The suspended block period for the coprocessor context
57-
mapping(uint256 contextId => uint256 suspendedBlockPeriod) coprocessorContextSuspendedBlockPeriod;
52+
/// @notice The block timestamp at which the coprocessor context is activated
53+
mapping(uint256 contextId => uint256 activationBlockTimestamp) coprocessorContextActivationBlockTimestamp;
54+
/// @notice The block timestamp at which the coprocessor context is deactivated
55+
mapping(uint256 contextId => uint256 deactivatedBlockTimestamp) coprocessorContextDeactivatedBlockTimestamp;
56+
/// @notice The suspended time period for the coprocessor context
57+
mapping(uint256 contextId => uint256 suspendedTimePeriod) coprocessorContextSuspendedTimePeriod;
5858
}
5959

6060
// Storage location has been computed using the following command:
@@ -185,7 +185,7 @@ contract CoprocessorContexts is ICoprocessorContexts, Ownable2StepUpgradeable, U
185185
function addCoprocessorContext(
186186
uint256 featureSet,
187187
Coprocessor[] calldata coprocessors,
188-
CoprocessorContextBlockPeriods calldata blockPeriods
188+
CoprocessorContextTimePeriods calldata timePeriods
189189
) external virtual onlyOwner {
190190
CoprocessorContextsStorage storage $ = _getCoprocessorContextsStorage();
191191
// This will revert if there is no active coprocessor context. Although this should never
@@ -204,7 +204,7 @@ contract CoprocessorContexts is ICoprocessorContexts, Ownable2StepUpgradeable, U
204204
);
205205

206206
// Emit the event that indicates that a valid coprocessor context has been suggested to be added.
207-
emit NewCoprocessorContext(activeCoprocessorContext, newCoprocessorContext, blockPeriods);
207+
emit NewCoprocessorContext(activeCoprocessorContext, newCoprocessorContext, timePeriods);
208208

209209
// Set the coprocessor context to the generating state
210210
// This currently has no implications on the coprocessor contexts, except that it will check
@@ -217,18 +217,17 @@ contract CoprocessorContexts is ICoprocessorContexts, Ownable2StepUpgradeable, U
217217
// Directly pre-activate the coprocessor context
218218
ContextLifecycle.setPreActivation($.coprocessorContextLifecycle, newCoprocessorContext.contextId);
219219

220-
// Define the activation block number for the new coprocessor context
221-
uint256 activationBlockNumber = block.number + blockPeriods.preActivationBlockPeriod;
222-
$.coprocessorContextActivationBlockNumber[newCoprocessorContext.contextId] = activationBlockNumber;
220+
// Define the activation block timestamp for the new coprocessor context
221+
uint256 activationBlockTimestamp = block.timestamp + timePeriods.preActivationTimePeriod;
222+
$.coprocessorContextActivationBlockTimestamp[newCoprocessorContext.contextId] = activationBlockTimestamp;
223223

224-
// Store the suspended block period for the previous coprocessor context
224+
// Store the suspended time period for the previous coprocessor context
225225
// This value will be considered once the new coprocessor context is activated and the old one
226226
// is suspended
227-
$.coprocessorContextSuspendedBlockPeriod[activeCoprocessorContext.contextId] = blockPeriods
228-
.suspendedBlockPeriod;
227+
$.coprocessorContextSuspendedTimePeriod[activeCoprocessorContext.contextId] = timePeriods.suspendedTimePeriod;
229228

230229
// Emit the event that indicates that the new coprocessor context has been pre-activated
231-
emit PreActivateCoprocessorContext(newCoprocessorContext, activationBlockNumber);
230+
emit PreActivateCoprocessorContext(newCoprocessorContext, activationBlockTimestamp);
232231
}
233232

234233
/**
@@ -242,17 +241,18 @@ contract CoprocessorContexts is ICoprocessorContexts, Ownable2StepUpgradeable, U
242241
uint256 preActivationContextId = $.coprocessorContextLifecycle.preActivationContextId;
243242
if (
244243
preActivationContextId != 0 &&
245-
block.number >= $.coprocessorContextActivationBlockNumber[preActivationContextId]
244+
block.timestamp >= $.coprocessorContextActivationBlockTimestamp[preActivationContextId]
246245
) {
247246
uint256 activeContextId = getActiveCoprocessorContextId();
248247

249-
// Define the deactivation block number for the current active coprocessor context
250-
uint256 deactivatedBlockNumber = block.number + $.coprocessorContextSuspendedBlockPeriod[activeContextId];
251-
$.coprocessorContextDeactivatedBlockNumber[activeContextId] = deactivatedBlockNumber;
248+
// Define the deactivation block timestamp for the current active coprocessor context
249+
uint256 deactivatedBlockTimestamp = block.timestamp +
250+
$.coprocessorContextSuspendedTimePeriod[activeContextId];
251+
$.coprocessorContextDeactivatedBlockTimestamp[activeContextId] = deactivatedBlockTimestamp;
252252

253253
// Set the current active coprocessor context to the suspended state
254254
ContextLifecycle.setSuspended($.coprocessorContextLifecycle, activeContextId);
255-
emit SuspendCoprocessorContext(activeContextId, deactivatedBlockNumber);
255+
emit SuspendCoprocessorContext(activeContextId, deactivatedBlockTimestamp);
256256

257257
// Set the new active coprocessor context
258258
ContextLifecycle.setActive($.coprocessorContextLifecycle, preActivationContextId);
@@ -261,7 +261,10 @@ contract CoprocessorContexts is ICoprocessorContexts, Ownable2StepUpgradeable, U
261261

262262
// Check if there is a suspended coprocessor context and if it is time to deactivate it
263263
uint256 suspendedContextId = _getSuspendedCoprocessorContextId();
264-
if (suspendedContextId != 0 && block.number >= $.coprocessorContextDeactivatedBlockNumber[suspendedContextId]) {
264+
if (
265+
suspendedContextId != 0 &&
266+
block.timestamp >= $.coprocessorContextDeactivatedBlockTimestamp[suspendedContextId]
267+
) {
265268
ContextLifecycle.setDeactivated($.coprocessorContextLifecycle, suspendedContextId);
266269
emit DeactivateCoprocessorContext(suspendedContextId);
267270
}
@@ -354,23 +357,23 @@ contract CoprocessorContexts is ICoprocessorContexts, Ownable2StepUpgradeable, U
354357
}
355358

356359
/**
357-
* @dev See {ICoprocessorContexts-getCoprocessorContextActivationBlockNumber}.
360+
* @dev See {ICoprocessorContexts-getCoprocessorContextActivationBlockTimestamp}.
358361
*/
359-
function getCoprocessorContextActivationBlockNumber(
362+
function getCoprocessorContextActivationBlockTimestamp(
360363
uint256 contextId
361364
) external view virtual ensureContextInitialized(contextId) returns (uint256) {
362365
CoprocessorContextsStorage storage $ = _getCoprocessorContextsStorage();
363-
return $.coprocessorContextActivationBlockNumber[contextId];
366+
return $.coprocessorContextActivationBlockTimestamp[contextId];
364367
}
365368

366369
/**
367-
* @dev See {ICoprocessorContexts-getCoprocessorContextDeactivatedBlockNumber}.
370+
* @dev See {ICoprocessorContexts-getCoprocessorContextDeactivatedBlockTimestamp}.
368371
*/
369-
function getCoprocessorContextDeactivatedBlockNumber(
372+
function getCoprocessorContextDeactivatedBlockTimestamp(
370373
uint256 contextId
371374
) external view virtual ensureContextInitialized(contextId) returns (uint256) {
372375
CoprocessorContextsStorage storage $ = _getCoprocessorContextsStorage();
373-
return $.coprocessorContextDeactivatedBlockNumber[contextId];
376+
return $.coprocessorContextDeactivatedBlockTimestamp[contextId];
374377
}
375378

376379
/**

gateway-contracts/contracts/interfaces/ICoprocessorContexts.sol

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// SPDX-License-Identifier: BSD-3-Clause-Clear
22
pragma solidity ^0.8.24;
33

4-
import { Coprocessor, CoprocessorContextBlockPeriods, CoprocessorContext } from "../shared/Structs.sol";
4+
import { Coprocessor, CoprocessorContextTimePeriods, CoprocessorContext } from "../shared/Structs.sol";
55
import { ContextStatus } from "../shared/Enums.sol";
66

77
/**
@@ -27,27 +27,27 @@ interface ICoprocessorContexts {
2727
* track coprocessor context updates.
2828
* @param activeCoprocessorContext The current active coprocessor context.
2929
* @param newCoprocessorContext The new coprocessor context.
30-
* @param blockPeriods The block periods for the new coprocessor context.
30+
* @param timePeriods The time periods for the new coprocessor context.
3131
*/
3232
event NewCoprocessorContext(
3333
CoprocessorContext activeCoprocessorContext,
3434
CoprocessorContext newCoprocessorContext,
35-
CoprocessorContextBlockPeriods blockPeriods
35+
CoprocessorContextTimePeriods timePeriods
3636
);
3737

3838
/**
3939
* @notice Emitted when a new coprocessor context gets pre-activated.
4040
* @param newCoprocessorContext The new coprocessor context.
41-
* @param activationBlockNumber The block number at which the coprocessor context will be activated.
41+
* @param activationBlockTimestamp The block timestamp at which the coprocessor context will be activated.
4242
*/
43-
event PreActivateCoprocessorContext(CoprocessorContext newCoprocessorContext, uint256 activationBlockNumber);
43+
event PreActivateCoprocessorContext(CoprocessorContext newCoprocessorContext, uint256 activationBlockTimestamp);
4444

4545
/**
4646
* @notice Emitted when a coprocessor context gets suspended.
4747
* @param contextId The ID of the coprocessor context.
48-
* @param deactivatedBlockNumber The block number at which the coprocessor context will be deactivated.
48+
* @param deactivatedBlockTimestamp The block timestamp at which the coprocessor context will be deactivated.
4949
*/
50-
event SuspendCoprocessorContext(uint256 contextId, uint256 deactivatedBlockNumber);
50+
event SuspendCoprocessorContext(uint256 contextId, uint256 deactivatedBlockTimestamp);
5151

5252
/**
5353
* @notice Emitted when a coprocessor context gets activated.
@@ -191,12 +191,12 @@ interface ICoprocessorContexts {
191191
* @notice Add a new coprocessor context.
192192
* @param featureSet The feature set.
193193
* @param coprocessors The set of coprocessors representing the coprocessor context.
194-
* @param blockPeriods The block periods.
194+
* @param timePeriods The time periods.
195195
*/
196196
function addCoprocessorContext(
197197
uint256 featureSet,
198198
Coprocessor[] calldata coprocessors,
199-
CoprocessorContextBlockPeriods calldata blockPeriods
199+
CoprocessorContextTimePeriods calldata timePeriods
200200
) external;
201201

202202
/**
@@ -249,18 +249,18 @@ interface ICoprocessorContexts {
249249
function isCoprocessorContextActiveOrSuspended(uint256 contextId) external view returns (bool);
250250

251251
/**
252-
* @notice Get the block number at which the coprocessor context is activated.
252+
* @notice Get the block timestamp at which the coprocessor context is activated.
253253
* @param contextId The coprocessor context ID.
254-
* @return The activation block number.
254+
* @return The activation block timestamp.
255255
*/
256-
function getCoprocessorContextActivationBlockNumber(uint256 contextId) external view returns (uint256);
256+
function getCoprocessorContextActivationBlockTimestamp(uint256 contextId) external view returns (uint256);
257257

258258
/**
259-
* @notice Get the block number at which the coprocessor context is deactivated.
259+
* @notice Get the block timestamp at which the coprocessor context is deactivated.
260260
* @param contextId The coprocessor context ID.
261-
* @return The deactivation block number.
261+
* @return The deactivation block timestamp.
262262
*/
263-
function getCoprocessorContextDeactivatedBlockNumber(uint256 contextId) external view returns (uint256);
263+
function getCoprocessorContextDeactivatedBlockTimestamp(uint256 contextId) external view returns (uint256);
264264

265265
/**
266266
* @notice Get the coprocessor majority threshold for a coprocessor context.

gateway-contracts/contracts/mocks/CoprocessorContextsMock.sol

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,12 @@ contract CoprocessorContextsMock {
99
event NewCoprocessorContext(
1010
CoprocessorContext activeCoprocessorContext,
1111
CoprocessorContext newCoprocessorContext,
12-
CoprocessorContextBlockPeriods blockPeriods
12+
CoprocessorContextTimePeriods timePeriods
1313
);
1414

15-
event PreActivateCoprocessorContext(CoprocessorContext newCoprocessorContext, uint256 activationBlockNumber);
15+
event PreActivateCoprocessorContext(CoprocessorContext newCoprocessorContext, uint256 activationBlockTimestamp);
1616

17-
event SuspendCoprocessorContext(uint256 contextId, uint256 deactivatedBlockNumber);
17+
event SuspendCoprocessorContext(uint256 contextId, uint256 deactivatedBlockTimestamp);
1818

1919
event ActivateCoprocessorContext(uint256 contextId);
2020

@@ -36,22 +36,22 @@ contract CoprocessorContextsMock {
3636
function addCoprocessorContext(
3737
uint256 featureSet,
3838
Coprocessor[] calldata coprocessors,
39-
CoprocessorContextBlockPeriods calldata blockPeriods
39+
CoprocessorContextTimePeriods calldata timePeriods
4040
) external {
4141
CoprocessorContext memory activeCoprocessorContext;
4242
CoprocessorContext memory newCoprocessorContext;
43-
uint256 activationBlockNumber;
43+
uint256 activationBlockTimestamp;
4444

45-
emit NewCoprocessorContext(activeCoprocessorContext, newCoprocessorContext, blockPeriods);
45+
emit NewCoprocessorContext(activeCoprocessorContext, newCoprocessorContext, timePeriods);
4646

47-
emit PreActivateCoprocessorContext(newCoprocessorContext, activationBlockNumber);
47+
emit PreActivateCoprocessorContext(newCoprocessorContext, activationBlockTimestamp);
4848
}
4949

5050
function refreshCoprocessorContextStatuses() external {
5151
uint256 contextId;
52-
uint256 deactivatedBlockNumber;
52+
uint256 deactivatedBlockTimestamp;
5353

54-
emit SuspendCoprocessorContext(contextId, deactivatedBlockNumber);
54+
emit SuspendCoprocessorContext(contextId, deactivatedBlockTimestamp);
5555

5656
emit ActivateCoprocessorContext(contextId);
5757

gateway-contracts/contracts/shared/Structs.sol

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -43,12 +43,12 @@ struct CoprocessorContext {
4343
Coprocessor[] coprocessors;
4444
}
4545

46-
/// @notice Struct that represents the block periods for a coprocessor context
47-
struct CoprocessorContextBlockPeriods {
48-
/// @notice The block period for the pre-activation period (before activating the coprocessor context)
49-
uint256 preActivationBlockPeriod;
50-
/// @notice The block period for the suspended period (before deactivating the previous coprocessor context)
51-
uint256 suspendedBlockPeriod;
46+
/// @notice Struct that represents the time periods for a coprocessor context
47+
struct CoprocessorContextTimePeriods {
48+
/// @notice The time period for the pre-activation period (before activating the coprocessor context)
49+
uint256 preActivationTimePeriod;
50+
/// @notice The time period for the suspended period (before deactivating the previous coprocessor context)
51+
uint256 suspendedTimePeriod;
5252
}
5353

5454
/// @notice Struct that represents a custodian

gateway-contracts/docs/getting-started/contracts/coprocessor_contexts.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ The complete lifecycle of a coprocessor context is represented in the following
9494

9595
### Automatic status refresh
9696

97-
Coprocessor context statuses that need to be updated based on the current block number are refreshed using the `refreshCoprocessorContextStatuses` function. This function can be called by anyone, but most importantly, it is called by any of the following functions as a pre-hook modifier:
97+
Coprocessor context statuses that need to be updated based on the current block timestamp are refreshed using the `refreshCoprocessorContextStatuses` function. This function can be called by anyone, but most importantly, it is called by any of the following functions as a pre-hook modifier:
9898

9999
- in `CiphertextCommits` contract:
100100
- `addCiphertextMaterial`

0 commit comments

Comments
 (0)