diff --git a/packages/contracts/contracts/optimistic-ethereum/OVM/chain/OVM_CanonicalTransactionChain.sol b/packages/contracts/contracts/optimistic-ethereum/OVM/chain/OVM_CanonicalTransactionChain.sol
index 1b0acc852c41c1bfc1df17379c6d52e359426248..9df6f9820c07ba42a84b1d9518d7df03f995e5df 100644
--- a/packages/contracts/contracts/optimistic-ethereum/OVM/chain/OVM_CanonicalTransactionChain.sol
+++ b/packages/contracts/contracts/optimistic-ethereum/OVM/chain/OVM_CanonicalTransactionChain.sol
@@ -34,7 +34,7 @@ contract OVM_CanonicalTransactionChain is iOVM_CanonicalTransactionChain, Lib_Ad
     uint256 constant internal BATCH_CONTEXT_LENGTH_POS = 12;
     uint256 constant internal BATCH_CONTEXT_START_POS = 15;
     uint256 constant internal TX_DATA_HEADER_SIZE = 3;
-    uint256 constant internal BYTES_TILL_TX_DATA = 66;
+    uint256 constant internal BYTES_TILL_TX_DATA = 65;
 
 
     /*************
@@ -548,10 +548,14 @@ contract OVM_CanonicalTransactionChain is iOVM_CanonicalTransactionChain, Lib_Ad
         assembly {
             let chainElementStart := add(chainElement, 0x20)
 
+            // Set the first byte equal to `1` to indicate this is a sequencer chain element.
+            // This distinguishes sequencer ChainElements from queue ChainElements because
+            // all queue ChainElements are ABI encoded and the first byte of ABI encoded
+            // elements is always zero
             mstore8(chainElementStart, 1)
 
-            mstore(add(chainElementStart, 2), ctxTimestamp)
-            mstore(add(chainElementStart, 34), ctxBlockNumber)
+            mstore(add(chainElementStart, 1), ctxTimestamp)
+            mstore(add(chainElementStart, 33), ctxBlockNumber)
 
             calldatacopy(add(chainElementStart, BYTES_TILL_TX_DATA), add(_nextTransactionPtr, 3), _txDataLength)
             
@@ -586,12 +590,16 @@ contract OVM_CanonicalTransactionChain is iOVM_CanonicalTransactionChain, Lib_Ad
         assembly {
             let chainElementStart := add(chainElement, 0x20)
 
+            // Set the first byte equal to `1` to indicate this is a sequencer chain element.
+            // This distinguishes sequencer ChainElements from queue ChainElements because
+            // all queue ChainElements are ABI encoded and the first byte of ABI encoded
+            // elements is always zero
             mstore8(chainElementStart, 1)
 
-            mstore(add(chainElementStart, 2), ctxTimestamp)
-            mstore(add(chainElementStart, 34), ctxBlockNumber)
+            mstore(add(chainElementStart, 1), ctxTimestamp)
+            mstore(add(chainElementStart, 33), ctxBlockNumber)
 
-            pop(staticcall(gas(), 0x04, add(txData, 0x20), txDataLength, add(chainElementStart, 66), txDataLength))
+            pop(staticcall(gas(), 0x04, add(txData, 0x20), txDataLength, add(chainElementStart, BYTES_TILL_TX_DATA), txDataLength))
 
             leafHash := keccak256(chainElementStart, add(BYTES_TILL_TX_DATA, txDataLength))
         }
diff --git a/packages/contracts/test/contracts/OVM/chain/OVM_CanonicalTransactionChain.spec.ts b/packages/contracts/test/contracts/OVM/chain/OVM_CanonicalTransactionChain.spec.ts
index 994deecd9554c7748535499aa6dc93bb8cde0409..ff4013817f148067b202708f8b18f0d9585affd6 100644
--- a/packages/contracts/test/contracts/OVM/chain/OVM_CanonicalTransactionChain.spec.ts
+++ b/packages/contracts/test/contracts/OVM/chain/OVM_CanonicalTransactionChain.spec.ts
@@ -41,7 +41,7 @@ const getSequencerLeafHash = (
   data: string
 ): string => {
   return keccak256(
-    '0x0100' +
+    '0x01' +
       remove0x(BigNumber.from(timestamp).toHexString()).padStart(64, '0') +
       remove0x(BigNumber.from(blockNumber).toHexString()).padStart(64, '0') +
       remove0x(data)