Skip to content

Commit

Permalink
feat(protocol): add lastSyncedBlockId for L2 DAO vote aggregation (#…
Browse files Browse the repository at this point in the history
…16654)

Co-authored-by: David <david@taiko.xyz>
  • Loading branch information
dantaik and davidtaikocha authored Apr 5, 2024
1 parent e787493 commit edbae8d
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 11 deletions.
4 changes: 2 additions & 2 deletions packages/protocol/contracts/L1/TaikoData.sol
Original file line number Diff line number Diff line change
Expand Up @@ -135,8 +135,8 @@ library TaikoData {
struct SlotA {
uint64 genesisHeight;
uint64 genesisTimestamp;
uint64 __reservedA1;
uint64 __reservedA2;
uint64 lastSyncedBlockId;
uint64 lastSynecdAt;
}

struct SlotB {
Expand Down
24 changes: 17 additions & 7 deletions packages/protocol/contracts/L1/TaikoL1.sol
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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
Expand Down
8 changes: 6 additions & 2 deletions packages/protocol/contracts/L1/libs/LibVerifying.sol
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
}
}
Expand All @@ -240,6 +240,7 @@ library LibVerifying {
}

function _syncChainData(
TaikoData.State storage _state,
TaikoData.Config memory _config,
IAddressResolver _resolver,
uint64 _lastVerifiedBlockId,
Expand All @@ -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
);
Expand Down

0 comments on commit edbae8d

Please sign in to comment.