Skip to content

Commit 60875c3

Browse files
committed
Merge branch 'main' into pacaya-height-0-yg1
2 parents 494f122 + cad42a7 commit 60875c3

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+405
-87
lines changed

Diff for: .release-please-manifest.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"packages/bridge-ui": "2.13.0",
3-
"packages/docs-site": "1.22.1",
3+
"packages/docs-site": "1.23.0",
44
"packages/eventindexer": "0.13.0",
55
"packages/fork-diff": "0.6.1",
66
"packages/guardian-prover-health-check": "0.1.0",

Diff for: go.mod

+2-2
Original file line numberDiff line numberDiff line change
@@ -318,9 +318,9 @@ require (
318318
sigs.k8s.io/yaml v1.3.0 // indirect
319319
)
320320

321-
replace github.com/ethereum/go-ethereum v1.14.11 => github.com/taikoxyz/taiko-geth v1.12.1-0.20250205040456-832713781df8
321+
replace github.com/ethereum/go-ethereum v1.14.11 => github.com/taikoxyz/taiko-geth v1.12.1-0.20250206055938-7bf5c0d259f6
322322

323-
replace github.com/ethereum-optimism/optimism v1.7.4 => github.com/taikoxyz/optimism v0.0.0-20250128202721-1b986d622e1a
323+
replace github.com/ethereum-optimism/optimism v1.7.4 => github.com/taikoxyz/optimism v0.0.0-20250205084634-ae44cf8bc8e2
324324

325325
replace github.com/uber/jaeger-client-go => github.com/uber/jaeger-client-go v2.25.0+incompatible
326326

Diff for: go.sum

+4-4
Original file line numberDiff line numberDiff line change
@@ -886,10 +886,10 @@ github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d h1:vfofYNRScrDd
886886
github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d/go.mod h1:RRCYJbIwD5jmqPI9XoAFR0OcDxqUctll6zUj/+B4S48=
887887
github.com/taikoxyz/hive v0.0.0-20240827015317-405b241dd082 h1:ymZR+Y88LOnA8i3KeuJXK7hff2n7bpMIhONPJwpcA5w=
888888
github.com/taikoxyz/hive v0.0.0-20240827015317-405b241dd082/go.mod h1:RHnIu3EFehrWX3JhFAMQSXD5uz7l0xaNroTzXrap7EQ=
889-
github.com/taikoxyz/optimism v0.0.0-20250128202721-1b986d622e1a h1:33/0g4tyyoxFoengwPv6sEseEcEGITqfXbCyruSyXxY=
890-
github.com/taikoxyz/optimism v0.0.0-20250128202721-1b986d622e1a/go.mod h1:V0VCkKtCzuaJH6qcL75SRcbdlakM9LhurMEJUhO6VXA=
891-
github.com/taikoxyz/taiko-geth v1.12.1-0.20250205040456-832713781df8 h1:cgZhkcg8yi6CkhMQUX9Z/Au2qQFcDwm6isibeq/iMMM=
892-
github.com/taikoxyz/taiko-geth v1.12.1-0.20250205040456-832713781df8/go.mod h1:+l/fr42Mma+xBnhefL/+z11/hcmJ2egl+ScIVPjhc7E=
889+
github.com/taikoxyz/optimism v0.0.0-20250205084634-ae44cf8bc8e2 h1:iCyJ5rMAZdDpDrzYQvk4U/l9zrkDKDsnVGx/gz1rXv0=
890+
github.com/taikoxyz/optimism v0.0.0-20250205084634-ae44cf8bc8e2/go.mod h1:V0VCkKtCzuaJH6qcL75SRcbdlakM9LhurMEJUhO6VXA=
891+
github.com/taikoxyz/taiko-geth v1.12.1-0.20250206055938-7bf5c0d259f6 h1:oKDYVBu4PYxMhHSsTYl5NO80tA+R7Aq4/rn0gUQt0uM=
892+
github.com/taikoxyz/taiko-geth v1.12.1-0.20250206055938-7bf5c0d259f6/go.mod h1:+l/fr42Mma+xBnhefL/+z11/hcmJ2egl+ScIVPjhc7E=
893893
github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA=
894894
github.com/testcontainers/testcontainers-go v0.35.0 h1:uADsZpTKFAtp8SLK+hMwSaa+X+JiERHtd4sQAFmXeMo=
895895
github.com/testcontainers/testcontainers-go v0.35.0/go.mod h1:oEVBj5zrfJTrgjwONs1SsRbnBtH9OKl+IGl3UMcr2B4=

Diff for: packages/docs-site/CHANGELOG.md

+8
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,13 @@
11
# Changelog
22

3+
## [1.23.0](https://github.com/taikoxyz/taiko-mono/compare/docs-site-v1.22.1...docs-site-v1.23.0) (2025-02-05)
4+
5+
6+
### Features
7+
8+
* **docs-site:** enhance some sections ([#18850](https://github.com/taikoxyz/taiko-mono/issues/18850)) ([61fff4e](https://github.com/taikoxyz/taiko-mono/commit/61fff4efe14611a81f3e42502f530dd5a3828174))
9+
* **protocol:** pacaya fork with simplified based rollup protocol ([#18535](https://github.com/taikoxyz/taiko-mono/issues/18535)) ([3d85f7c](https://github.com/taikoxyz/taiko-mono/commit/3d85f7ce0420392f4e28db4554ab540e1e5e079a))
10+
311
## [1.22.1](https://github.com/taikoxyz/taiko-mono/compare/docs-site-v1.22.0...docs-site-v1.22.1) (2025-01-29)
412

513

Diff for: packages/docs-site/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "docs-site",
33
"type": "module",
4-
"version": "1.22.1",
4+
"version": "1.23.0",
55
"scripts": {
66
"dev": "astro dev",
77
"start": "astro dev",

Diff for: packages/protocol/contracts/layer1/automata-attestation/AutomataDcapV3Attestation.sol

+8-4
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,8 @@ contract AutomataDcapV3Attestation is IAttestation, EssentialContract {
9292
external
9393
onlyOwner
9494
{
95-
for (uint256 i; i < serialNumBatch.length; ++i) {
95+
uint256 size = serialNumBatch.length;
96+
for (uint256 i; i < size; ++i) {
9697
if (serialNumIsRevoked[index][serialNumBatch[i]]) {
9798
continue;
9899
}
@@ -108,7 +109,8 @@ contract AutomataDcapV3Attestation is IAttestation, EssentialContract {
108109
external
109110
onlyOwner
110111
{
111-
for (uint256 i; i < serialNumBatch.length; ++i) {
112+
uint256 size = serialNumBatch.length;
113+
for (uint256 i; i < size; ++i) {
112114
if (!serialNumIsRevoked[index][serialNumBatch[i]]) {
113115
continue;
114116
}
@@ -208,7 +210,8 @@ contract AutomataDcapV3Attestation is IAttestation, EssentialContract {
208210
bool isvprodidMatched = quoteEnclaveReport.isvProdId == enclaveId.isvprodid;
209211

210212
bool tcbFound;
211-
for (uint256 i; i < enclaveId.tcbLevels.length; ++i) {
213+
uint256 size = enclaveId.tcbLevels.length;
214+
for (uint256 i; i < size; ++i) {
212215
EnclaveIdStruct.TcbLevel memory tcb = enclaveId.tcbLevels[i];
213216
if (tcb.tcb.isvsvn <= quoteEnclaveReport.isvSvn) {
214217
tcbFound = true;
@@ -231,7 +234,8 @@ contract AutomataDcapV3Attestation is IAttestation, EssentialContract {
231234
pure
232235
returns (bool, TCBInfoStruct.TCBStatus status)
233236
{
234-
for (uint256 i; i < tcb.tcbLevels.length; ++i) {
237+
uint256 size = tcb.tcbLevels.length;
238+
for (uint256 i; i < size; ++i) {
235239
TCBInfoStruct.TCBLevelObj memory current = tcb.tcbLevels[i];
236240
bool pceSvnIsHigherOrGreater = pck.sgxExtension.pcesvn >= current.pcesvn;
237241
bool cpuSvnsAreHigherOrGreater = _isCpuSvnHigherOrGreater(

Diff for: packages/protocol/contracts/layer1/automata-attestation/lib/PEMCertChainLib.sol

+2-1
Original file line numberDiff line numberDiff line change
@@ -240,8 +240,9 @@ contract PEMCertChainLib is IPEMCertChainLib {
240240
string memory contentSlice = LibString.slice(pemData, contentStart, endPos);
241241
string[] memory split = LibString.split(contentSlice, string(delimiter));
242242
string memory contentStr;
243+
uint256 size = split.length;
243244

244-
for (uint256 i; i < split.length; ++i) {
245+
for (uint256 i; i < size; ++i) {
245246
contentStr = LibString.concat(contentStr, split[i]);
246247
}
247248

Diff for: packages/protocol/contracts/layer1/automata-attestation/lib/QuoteV3Auth/V3Parser.sol

+2-1
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,8 @@ library V3Parser {
167167
}
168168

169169
function littleEndianDecode(bytes memory encoded) private pure returns (uint256 decoded) {
170-
for (uint256 i; i < encoded.length; ++i) {
170+
uint256 size = encoded.length;
171+
for (uint256 i; i < size; ++i) {
171172
uint256 digits = uint256(uint8(bytes1(encoded[i])));
172173
uint256 upperDigit = digits / 16;
173174
uint256 lowerDigit = digits % 16;

Diff for: packages/protocol/contracts/layer1/based/TaikoInbox.sol

+22-16
Original file line numberDiff line numberDiff line change
@@ -205,17 +205,18 @@ abstract contract TaikoInbox is EssentialContract, ITaikoInbox, ITaiko {
205205
(BatchMetadata[] memory metas, Transition[] memory trans) =
206206
abi.decode(_params, (BatchMetadata[], Transition[]));
207207

208-
require(metas.length != 0, NoBlocksToProve());
209-
require(metas.length == trans.length, ArraySizesMismatch());
208+
uint256 metasLength = metas.length;
209+
require(metasLength != 0, NoBlocksToProve());
210+
require(metasLength == trans.length, ArraySizesMismatch());
210211

211212
Stats2 memory stats2 = state.stats2;
212213
require(!stats2.paused, ContractPaused());
213214

214215
Config memory config = pacayaConfig();
215-
IVerifier.Context[] memory ctxs = new IVerifier.Context[](metas.length);
216+
IVerifier.Context[] memory ctxs = new IVerifier.Context[](metasLength);
216217

217218
bool hasConflictingProof;
218-
for (uint256 i; i < metas.length; ++i) {
219+
for (uint256 i; i < metasLength; ++i) {
219220
BatchMetadata memory meta = metas[i];
220221

221222
require(meta.batchId >= pacayaConfig().forkHeights.pacaya, ForkNotActivated());
@@ -298,8 +299,8 @@ abstract contract TaikoInbox is EssentialContract, ITaikoInbox, ITaiko {
298299

299300
// Emit the event
300301
{
301-
uint64[] memory batchIds = new uint64[](metas.length);
302-
for (uint256 i; i < metas.length; ++i) {
302+
uint64[] memory batchIds = new uint64[](metasLength);
303+
for (uint256 i; i < metasLength; ++i) {
303304
batchIds[i] = metas[i].batchId;
304305
}
305306

@@ -310,7 +311,7 @@ abstract contract TaikoInbox is EssentialContract, ITaikoInbox, ITaiko {
310311
_pause();
311312
emit Paused(verifier);
312313
} else {
313-
_verifyBatches(config, stats2, metas.length);
314+
_verifyBatches(config, stats2, metasLength);
314315
}
315316
}
316317

@@ -568,13 +569,15 @@ abstract contract TaikoInbox is EssentialContract, ITaikoInbox, ITaiko {
568569
if (_blobParams.blobHashes.length != 0) {
569570
blobHashes_ = _blobParams.blobHashes;
570571
} else {
571-
blobHashes_ = new bytes32[](_blobParams.numBlobs);
572-
for (uint256 i; i < _blobParams.numBlobs; ++i) {
572+
uint256 numBlobs = _blobParams.numBlobs;
573+
blobHashes_ = new bytes32[](numBlobs);
574+
for (uint256 i; i < numBlobs; ++i) {
573575
blobHashes_[i] = blobhash(_blobParams.firstBlobIndex + i);
574576
}
575577
}
576578

577-
for (uint256 i; i < blobHashes_.length; ++i) {
579+
uint256 bloblHashesLength = blobHashes_.length;
580+
for (uint256 i; i < bloblHashesLength; ++i) {
578581
require(blobHashes_[i] != 0, BlobNotFound());
579582
}
580583
hash_ = keccak256(abi.encode(_txListHash, blobHashes_));
@@ -751,6 +754,7 @@ abstract contract TaikoInbox is EssentialContract, ITaikoInbox, ITaiko {
751754
view
752755
returns (uint64 anchorBlockId_, uint64 lastBlockTimestamp_)
753756
{
757+
uint256 blocksLength = _params.blocks.length;
754758
unchecked {
755759
if (_params.anchorBlockId == 0) {
756760
anchorBlockId_ = uint64(block.number - 1);
@@ -774,7 +778,7 @@ abstract contract TaikoInbox is EssentialContract, ITaikoInbox, ITaiko {
774778
require(lastBlockTimestamp_ <= block.timestamp, TimestampTooLarge());
775779

776780
uint64 totalShift;
777-
for (uint256 i; i < _params.blocks.length; ++i) {
781+
for (uint256 i; i < blocksLength; ++i) {
778782
totalShift += _params.blocks[i].timeShift;
779783
}
780784

@@ -799,19 +803,21 @@ abstract contract TaikoInbox is EssentialContract, ITaikoInbox, ITaiko {
799803
);
800804
}
801805

802-
if (_params.signalSlots.length != 0) {
803-
require(_params.signalSlots.length <= _maxSignalsToReceive, TooManySignals());
806+
uint256 signalSlotsLength = _params.signalSlots.length;
807+
808+
if (signalSlotsLength != 0) {
809+
require(signalSlotsLength <= _maxSignalsToReceive, TooManySignals());
804810

805811
ISignalService signalService =
806812
ISignalService(resolve(LibStrings.B_SIGNAL_SERVICE, false));
807813

808-
for (uint256 i; i < _params.signalSlots.length; ++i) {
814+
for (uint256 i; i < signalSlotsLength; ++i) {
809815
require(signalService.isSignalSent(_params.signalSlots[i]), SignalNotSent());
810816
}
811817
}
812818

813-
require(_params.blocks.length != 0, BlockNotFound());
814-
require(_params.blocks.length <= _maxBlocksPerBatch, TooManyBlocks());
819+
require(blocksLength != 0, BlockNotFound());
820+
require(blocksLength <= _maxBlocksPerBatch, TooManyBlocks());
815821
}
816822

817823
// Memory-only structs ----------------------------------------------------------------------

Diff for: packages/protocol/contracts/layer1/hekla/HeklaTaikoToken.sol

+2-1
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,8 @@ contract HeklaTaikoToken is EssentialContract, ERC20SnapshotUpgradeable, ERC20Vo
155155
returns (bool)
156156
{
157157
if (recipients.length != amounts.length) revert TT_INVALID_PARAM();
158-
for (uint256 i; i < recipients.length; ++i) {
158+
uint256 size = recipients.length;
159+
for (uint256 i; i < size; ++i) {
159160
_transfer(msg.sender, recipients[i], amounts[i]);
160161
}
161162
return true;

Diff for: packages/protocol/contracts/layer1/token/TaikoToken.sol

+3-2
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,9 @@ contract TaikoToken is TaikoTokenBase {
3939
external
4040
returns (bool)
4141
{
42-
if (recipients.length != amounts.length) revert TT_INVALID_PARAM();
43-
for (uint256 i; i < recipients.length; ++i) {
42+
uint256 size = recipients.length;
43+
if (size != amounts.length) revert TT_INVALID_PARAM();
44+
for (uint256 i; i < size; ++i) {
4445
_transfer(msg.sender, recipients[i], amounts[i]);
4546
}
4647
return true;

Diff for: packages/protocol/contracts/layer1/verifiers/Risc0Verifier.sol

+2-1
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,8 @@ contract Risc0Verifier is EssentialContract, IVerifier {
7070
// First public input is the block proving program key
7171
publicInputs[0] = blockImageId;
7272
// All other inputs are the block program public inputs (a single 32 byte value)
73-
for (uint256 i; i < _ctxs.length; ++i) {
73+
uint256 size = _ctxs.length;
74+
for (uint256 i; i < size; ++i) {
7475
publicInputs[i + 1] = LibPublicInput.hashPublicInputs(
7576
_ctxs[i].transition, address(this), address(0), _ctxs[i].metaHash, taikoChainId
7677
);

Diff for: packages/protocol/contracts/layer1/verifiers/SP1Verifier.sol

+3-1
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,9 @@ contract SP1Verifier is EssentialContract, IVerifier {
6666
// First public input is the block proving program key
6767
publicInputs[0] = blockProvingProgram;
6868
// All other inputs are the block program public inputs (a single 32 byte value)
69-
for (uint256 i; i < _ctxs.length; ++i) {
69+
70+
uint256 size = _ctxs.length;
71+
for (uint256 i; i < size; ++i) {
7072
publicInputs[i + 1] = LibPublicInput.hashPublicInputs(
7173
_ctxs[i].transition, address(this), address(0), _ctxs[i].metaHash, taikoChainId
7274
);

Diff for: packages/protocol/contracts/layer1/verifiers/SgxVerifier.sol

+11-7
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,8 @@ contract SgxVerifier is EssentialContract, IVerifier {
107107
external
108108
onlyFromOwnerOrNamed(LibStrings.B_SGX_WATCHDOG)
109109
{
110-
for (uint256 i; i < _ids.length; ++i) {
110+
uint256 size = _ids.length;
111+
for (uint256 i; i < size; ++i) {
111112
uint256 idx = _ids[i];
112113

113114
require(instances[idx].addr != address(0), SGX_INVALID_INSTANCE());
@@ -151,18 +152,18 @@ contract SgxVerifier is EssentialContract, IVerifier {
151152
// 4 bytes + 20 bytes + 20 bytes + 65 bytes (signature) = 109
152153
require(_proof.length == 109, SGX_INVALID_PROOF());
153154

154-
uint32 id = uint32(bytes4(_proof[:4]));
155155
address oldInstance = address(bytes20(_proof[4:24]));
156156
address newInstance = address(bytes20(_proof[24:44]));
157-
bytes memory signature = _proof[44:];
158157

159158
// Collect public inputs
160-
bytes32[] memory publicInputs = new bytes32[](_ctxs.length + 2);
159+
uint256 size = _ctxs.length;
160+
bytes32[] memory publicInputs = new bytes32[](size + 2);
161161
// First public input is the current instance public key
162162
publicInputs[0] = bytes32(uint256(uint160(oldInstance)));
163163
publicInputs[1] = bytes32(uint256(uint160(newInstance)));
164+
164165
// All other inputs are the block program public inputs (a single 32 byte value)
165-
for (uint256 i; i < _ctxs.length; ++i) {
166+
for (uint256 i; i < size; ++i) {
166167
// TODO(Yue): For now this assumes the new instance public key to remain the same
167168
publicInputs[i + 2] = LibPublicInput.hashPublicInputs(
168169
_ctxs[i].transition, address(this), newInstance, _ctxs[i].metaHash, taikoChainId
@@ -171,8 +172,10 @@ contract SgxVerifier is EssentialContract, IVerifier {
171172

172173
bytes32 signatureHash = keccak256(abi.encodePacked(publicInputs));
173174
// Verify the blocks
175+
bytes memory signature = _proof[44:];
174176
require(oldInstance == ECDSA.recover(signatureHash, signature), SGX_INVALID_PROOF());
175177

178+
uint32 id = uint32(bytes4(_proof[:4]));
176179
require(_isInstanceValid(id, oldInstance), SGX_INVALID_INSTANCE());
177180

178181
if (newInstance != oldInstance && newInstance != address(0)) {
@@ -187,15 +190,16 @@ contract SgxVerifier is EssentialContract, IVerifier {
187190
private
188191
returns (uint256[] memory ids)
189192
{
190-
ids = new uint256[](_instances.length);
193+
uint256 size = _instances.length;
194+
ids = new uint256[](size);
191195

192196
uint64 validSince = uint64(block.timestamp);
193197

194198
if (!instantValid) {
195199
validSince += INSTANCE_VALIDITY_DELAY;
196200
}
197201

198-
for (uint256 i; i < _instances.length; ++i) {
202+
for (uint256 i; i < size; ++i) {
199203
require(!addressRegistered[_instances[i]], SGX_ALREADY_ATTESTED());
200204

201205
addressRegistered[_instances[i]] = true;

Diff for: packages/protocol/contracts/layer1/verifiers/SgxVerifierBase.sol

+5-3
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,8 @@ abstract contract SgxVerifierBase is EssentialContract {
111111
external
112112
onlyFromOwnerOrNamed(LibStrings.B_SGX_WATCHDOG)
113113
{
114-
for (uint256 i; i < _ids.length; ++i) {
114+
uint256 size = _ids.length;
115+
for (uint256 i; i < size; ++i) {
115116
uint256 idx = _ids[i];
116117

117118
require(instances[idx].addr != address(0), SGX_INVALID_INSTANCE());
@@ -129,15 +130,16 @@ abstract contract SgxVerifierBase is EssentialContract {
129130
internal
130131
returns (uint256[] memory ids)
131132
{
132-
ids = new uint256[](_instances.length);
133+
uint256 size = _instances.length;
134+
ids = new uint256[](size);
133135

134136
uint64 validSince = uint64(block.timestamp);
135137

136138
if (!instantValid) {
137139
validSince += INSTANCE_VALIDITY_DELAY;
138140
}
139141

140-
for (uint256 i; i < _instances.length; ++i) {
142+
for (uint256 i; i < size; ++i) {
141143
require(!addressRegistered[_instances[i]], SGX_ALREADY_ATTESTED());
142144

143145
addressRegistered[_instances[i]] = true;

Diff for: packages/protocol/contracts/layer1/verifiers/compose/ComposeVerifier.sol

+3-2
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,12 @@ abstract contract ComposeVerifier is EssentialContract, IVerifier {
3838
onlyFromNamed(LibStrings.B_TAIKO)
3939
{
4040
SubProof[] memory subProofs = abi.decode(_proof, (SubProof[]));
41-
address[] memory verifiers = new address[](subProofs.length);
41+
uint256 size = subProofs.length;
42+
address[] memory verifiers = new address[](size);
4243

4344
address verifier;
4445

45-
for (uint256 i; i < subProofs.length; ++i) {
46+
for (uint256 i; i < size; ++i) {
4647
require(subProofs[i].verifier != address(0), CV_INVALID_SUB_VERIFIER());
4748
require(subProofs[i].verifier > verifier, CV_INVALID_SUB_VERIFIER_ORDER());
4849

Diff for: packages/protocol/contracts/layer2/based/TaikoAnchor.sol

-1
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,6 @@ contract TaikoAnchor is EssentialContract, IBlockHashProvider, TaikoAnchorDeprec
8484
error L2_FORK_ERROR();
8585
error L2_INVALID_L1_CHAIN_ID();
8686
error L2_INVALID_L2_CHAIN_ID();
87-
error L2_INVALID_PARAM();
8887
error L2_INVALID_SENDER();
8988
error L2_PUBLIC_INPUT_HASH_MISMATCH();
9089
error L2_TOO_LATE();

0 commit comments

Comments
 (0)