From f355e0091c2458fab09e20879151ad65c106d59c Mon Sep 17 00:00:00 2001 From: Daniel Wang Date: Mon, 19 Feb 2024 12:47:37 +0800 Subject: [PATCH] option to disable block reuse --- packages/protocol/contracts/L1/TaikoData.sol | 2 ++ packages/protocol/contracts/L1/TaikoErrors.sol | 1 + packages/protocol/contracts/L1/TaikoL1.sol | 1 + packages/protocol/contracts/L1/libs/LibProposing.sol | 5 ++++- 4 files changed, 8 insertions(+), 1 deletion(-) diff --git a/packages/protocol/contracts/L1/TaikoData.sol b/packages/protocol/contracts/L1/TaikoData.sol index 2330cb0d120..bdf9a1372dd 100644 --- a/packages/protocol/contracts/L1/TaikoData.sol +++ b/packages/protocol/contracts/L1/TaikoData.sol @@ -42,6 +42,8 @@ library TaikoData { uint24 blobExpiry; // True if EIP-4844 is enabled for DA bool blobAllowedForDA; + // True if blob can be reused + bool blobReuseEnabled; // --------------------------------------------------------------------- // Group 3: Proof related configs // --------------------------------------------------------------------- diff --git a/packages/protocol/contracts/L1/TaikoErrors.sol b/packages/protocol/contracts/L1/TaikoErrors.sol index 79d3b8c3be3..c874b3561cd 100644 --- a/packages/protocol/contracts/L1/TaikoErrors.sol +++ b/packages/protocol/contracts/L1/TaikoErrors.sol @@ -28,6 +28,7 @@ abstract contract TaikoErrors { error L1_BLOB_NOT_FOUND(); error L1_BLOB_NOT_REUSEABLE(); error L1_BLOB_NOT_USED(); + error L1_BLOB_REUSE_DISALBED(); error L1_BLOCK_MISMATCH(); error L1_CHAIN_DATA_NOT_RELAYED(); error L1_INVALID_BLOCK_ID(); diff --git a/packages/protocol/contracts/L1/TaikoL1.sol b/packages/protocol/contracts/L1/TaikoL1.sol index 9b4e9a5494c..79e63874472 100644 --- a/packages/protocol/contracts/L1/TaikoL1.sol +++ b/packages/protocol/contracts/L1/TaikoL1.sol @@ -219,6 +219,7 @@ contract TaikoL1 is EssentialContract, ITaikoL1, ITierProvider, TaikoEvents, Tai blockMaxTxListBytes: 120_000, blobExpiry: 24 hours, blobAllowedForDA: false, + blobReuseEnabled: false, livenessBond: 250e18, // 250 Taiko token // ETH deposit related. ethDepositRingBufferSize: 1024, diff --git a/packages/protocol/contracts/L1/libs/LibProposing.sol b/packages/protocol/contracts/L1/libs/LibProposing.sol index a4ae28e4859..4852521bb52 100644 --- a/packages/protocol/contracts/L1/libs/LibProposing.sol +++ b/packages/protocol/contracts/L1/libs/LibProposing.sol @@ -46,6 +46,7 @@ library LibProposing { error L1_BLOB_FOR_DA_DISABLED(); error L1_BLOB_NOT_FOUND(); error L1_BLOB_NOT_REUSEABLE(); + error L1_BLOB_REUSE_DISALBED(); error L1_INVALID_HOOK(); error L1_INVALID_PARAM(); error L1_INVALID_PROVER(); @@ -139,6 +140,8 @@ library LibProposing { if (!config.blobAllowedForDA) revert L1_BLOB_FOR_DA_DISABLED(); if (params.blobHash != 0) { + if (!config.blobReuseEnabled) revert L1_BLOB_REUSE_DISALBED(); + // We try to reuse an old blob if (!isBlobReusable(state, config, params.blobHash)) { revert L1_BLOB_NOT_REUSEABLE(); @@ -156,7 +159,7 @@ library LibProposing { // Depends on the blob data price, it may not make sense to // cache the blob which costs 20,000 (sstore) + 631 (event) // extra gas. - if (params.cacheBlobForReuse) { + if (config.blobReuseEnabled && params.cacheBlobForReuse) { state.reusableBlobs[meta.blobHash] = block.timestamp; emit BlobCached(meta.blobHash); }