@@ -37,12 +37,15 @@ contract TaikoWrapper is EssentialContract, IProposeBatch {
37
37
/// @dev Event emitted when a forced inclusion is processed.
38
38
event ForcedInclusionProcessed (IForcedInclusionStore.ForcedInclusion);
39
39
40
- /// @dev Error thrown when the forced inclusion params are invalid.
41
- error InvalidForcedInclusionParams ();
42
- /// @dev Error thrown when the oldest forced inclusion is due.
40
+ error NoBlocks ();
41
+ error InvalidBlockTxs ();
42
+ error InvalidBlobHashesSize ();
43
+ error InvalidBlobHash ();
44
+ error InvalidBlobByteOffset ();
45
+ error InvalidBlobByteSize ();
43
46
error OldestForcedInclusionDue ();
44
47
45
- uint16 public constant MIN_FORCED_TXS_PER_FORCED_INCLUSION = 512 ;
48
+ uint16 public constant MIN_TXS_PER_FORCED_INCLUSION = 512 ;
46
49
47
50
uint256 [50 ] private __gap;
48
51
@@ -70,30 +73,37 @@ contract TaikoWrapper is EssentialContract, IProposeBatch {
70
73
if (bytesX.length == 0 ) {
71
74
require (! store.isOldestForcedInclusionDue (), OldestForcedInclusionDue ());
72
75
} else {
73
- IForcedInclusionStore.ForcedInclusion memory inclusion =
74
- store.consumeOldestForcedInclusion (msg .sender );
75
-
76
- ITaikoInbox.BatchParams memory params = abi.decode (bytesX, (ITaikoInbox.BatchParams));
77
-
78
- uint256 numBlocks = params.blocks.length ;
79
- require (numBlocks != 0 , InvalidForcedInclusionParams ());
80
- for (uint256 i; i < numBlocks; ++ i) {
81
- require (
82
- params.blocks[i].numTransactions >= MIN_FORCED_TXS_PER_FORCED_INCLUSION,
83
- InvalidForcedInclusionParams ()
84
- );
85
- }
86
-
87
- params.blobParams.blobHashes = new bytes32 [](1 );
88
- params.blobParams.blobHashes[0 ] = inclusion.blobHash;
89
- params.blobParams.byteOffset = inclusion.blobByteOffset;
90
- params.blobParams.byteSize = inclusion.blobByteSize;
91
-
92
- inbox.proposeBatch (abi.encode (params), "" );
93
- emit ForcedInclusionProcessed (inclusion);
76
+ _validateForcedInclusionParams (store, bytesX);
77
+ inbox.proposeBatch (bytesX, "" );
94
78
}
95
79
96
80
// Propose the normal batch after the potential forced inclusion batch.
97
81
return inbox.proposeBatch (bytesY, _txList);
98
82
}
83
+
84
+ function _validateForcedInclusionParams (
85
+ IForcedInclusionStore _store ,
86
+ bytes memory _bytesX
87
+ )
88
+ internal
89
+ {
90
+ IForcedInclusionStore.ForcedInclusion memory inclusion =
91
+ _store.consumeOldestForcedInclusion (msg .sender );
92
+
93
+ ITaikoInbox.BatchParams memory p = abi.decode (_bytesX, (ITaikoInbox.BatchParams));
94
+
95
+ uint256 numBlocks = p.blocks.length ;
96
+ require (numBlocks != 0 , NoBlocks ());
97
+
98
+ for (uint256 i; i < numBlocks; ++ i) {
99
+ require (p.blocks[i].numTransactions >= MIN_TXS_PER_FORCED_INCLUSION, InvalidBlockTxs ());
100
+ }
101
+
102
+ require (p.blobParams.blobHashes.length == 1 , InvalidBlobHashesSize ());
103
+ require (p.blobParams.blobHashes[0 ] == inclusion.blobHash, InvalidBlobHash ());
104
+ require (p.blobParams.byteOffset == inclusion.blobByteOffset, InvalidBlobByteOffset ());
105
+ require (p.blobParams.byteSize == inclusion.blobByteSize, InvalidBlobByteSize ());
106
+
107
+ emit ForcedInclusionProcessed (inclusion);
108
+ }
99
109
}
0 commit comments