From edbae8d42a3929db13965ce5b445449b6372fc6b Mon Sep 17 00:00:00 2001 From: Daniel Wang <99078276+dantaik@users.noreply.github.com> Date: Fri, 5 Apr 2024 14:53:42 +0800 Subject: [PATCH] feat(protocol): add `lastSyncedBlockId ` for L2 DAO vote aggregation (#16654) Co-authored-by: David --- packages/protocol/contracts/L1/TaikoData.sol | 4 ++-- packages/protocol/contracts/L1/TaikoL1.sol | 24 +++++++++++++------ .../contracts/L1/libs/LibVerifying.sol | 8 +++++-- 3 files changed, 25 insertions(+), 11 deletions(-) diff --git a/packages/protocol/contracts/L1/TaikoData.sol b/packages/protocol/contracts/L1/TaikoData.sol index ef19ea6b7f0..99b48b8b368 100644 --- a/packages/protocol/contracts/L1/TaikoData.sol +++ b/packages/protocol/contracts/L1/TaikoData.sol @@ -135,8 +135,8 @@ library TaikoData { struct SlotA { uint64 genesisHeight; uint64 genesisTimestamp; - uint64 __reservedA1; - uint64 __reservedA2; + uint64 lastSyncedBlockId; + uint64 lastSynecdAt; } struct SlotB { diff --git a/packages/protocol/contracts/L1/TaikoL1.sol b/packages/protocol/contracts/L1/TaikoL1.sol index 54412a0cc0a..6f76c668e00 100644 --- a/packages/protocol/contracts/L1/TaikoL1.sol +++ b/packages/protocol/contracts/L1/TaikoL1.sol @@ -57,8 +57,6 @@ contract TaikoL1 is EssentialContract, ITaikoL1, TaikoEvents, TaikoErrors { function init2() external onlyOwner reinitializer(2) { // reset some previously used slots for future reuse - state.slotA.__reservedA1 = 0; - state.slotA.__reservedA2 = 0; state.slotB.__reservedB1 = 0; state.slotB.__reservedB2 = 0; state.slotB.__reservedB3 = 0; @@ -170,15 +168,27 @@ contract TaikoL1 is EssentialContract, ITaikoL1, TaikoEvents, TaikoErrors { } /// @notice Gets the state variables of the TaikoL1 contract. - /// @return a_ State variables stored at SlotA. - /// @return b_ State variables stored at SlotB. + /// @dev This method can be deleted once node/client stops using it. + /// @return State variables stored at SlotA. + /// @return State variables stored at SlotB. function getStateVariables() public view - returns (TaikoData.SlotA memory a_, TaikoData.SlotB memory b_) + returns (TaikoData.SlotA memory, TaikoData.SlotB memory) { - a_ = state.slotA; - b_ = state.slotB; + return (state.slotA, state.slotB); + } + + /// @notice Gets SlotA + /// @return State variables stored at SlotA. + function slotA() public view returns (TaikoData.SlotA memory) { + return state.slotA; + } + + /// @notice Gets SlotB + /// @return State variables stored at SlotB. + function slotB() public view returns (TaikoData.SlotB memory) { + return state.slotB; } /// @inheritdoc ITaikoL1 diff --git a/packages/protocol/contracts/L1/libs/LibVerifying.sol b/packages/protocol/contracts/L1/libs/LibVerifying.sol index 71949ad03bc..9b533958398 100644 --- a/packages/protocol/contracts/L1/libs/LibVerifying.sol +++ b/packages/protocol/contracts/L1/libs/LibVerifying.sol @@ -228,8 +228,8 @@ library LibVerifying { // Update protocol level state variables _state.slotB.lastVerifiedBlockId = lastVerifiedBlockId; - // sync chain data - _syncChainData(_config, _resolver, lastVerifiedBlockId, stateRoot); + // Sync chain data + _syncChainData(_state, _config, _resolver, lastVerifiedBlockId, stateRoot); } } } @@ -240,6 +240,7 @@ library LibVerifying { } function _syncChainData( + TaikoData.State storage _state, TaikoData.Config memory _config, IAddressResolver _resolver, uint64 _lastVerifiedBlockId, @@ -254,6 +255,9 @@ library LibVerifying { ); if (_lastVerifiedBlockId > lastSyncedBlock + _config.blockSyncThreshold) { + _state.slotA.lastSyncedBlockId = _lastVerifiedBlockId; + _state.slotA.lastSynecdAt = uint64(block.timestamp); + signalService.syncChainData( _config.chainId, LibSignals.STATE_ROOT, _lastVerifiedBlockId, _stateRoot );