Commit 99d84f27 authored by Karl Floersch's avatar Karl Floersch

Fix decoding bug & start optimizing

parent 443c7d1f
...@@ -35,7 +35,7 @@ contract OVM_CanonicalTransactionChain is iOVM_CanonicalTransactionChain, OVM_Ba ...@@ -35,7 +35,7 @@ contract OVM_CanonicalTransactionChain is iOVM_CanonicalTransactionChain, OVM_Ba
uint256 constant public BATCH_CONTEXT_SIZE = 16; uint256 constant public BATCH_CONTEXT_SIZE = 16;
uint256 constant public BATCH_CONTEXT_LENGTH_POS = 12; uint256 constant public BATCH_CONTEXT_LENGTH_POS = 12;
uint256 constant public BATCH_CONTEXT_START_POS = 15; uint256 constant public BATCH_CONTEXT_START_POS = 15;
uint256 constant public TX_DATA_HEADER_SIZE = 15; uint256 constant public TX_DATA_HEADER_SIZE = 3;
/************* /*************
...@@ -278,31 +278,30 @@ contract OVM_CanonicalTransactionChain is iOVM_CanonicalTransactionChain, OVM_Ba ...@@ -278,31 +278,30 @@ contract OVM_CanonicalTransactionChain is iOVM_CanonicalTransactionChain, OVM_Ba
_validateBatchContext(context, nextQueueIndex); _validateBatchContext(context, nextQueueIndex);
for (uint32 j = 0; j < context.numSequencedTransactions; j++) { for (uint32 j = 0; j < context.numSequencedTransactions; j++) {
console.log("Iterating...");
console.log(j);
console.log(context.numSequencedTransactions);
console.log("Num sequenced");
console.log(context.numSequencedTransactions);
bytes memory txData = _getTransactionData(nextSequencerTransactionPosition); bytes memory txData = _getTransactionData(nextSequencerTransactionPosition);
leaves[transactionIndex] = _hashTransactionChainElement( bytes memory encodedChainElement = new bytes(12 + txData.length);
TransactionChainElement({ // assembly {
isSequenced: true, // let chainElementStart := add(encodedChainElement, 0x20)
queueIndex: 0, // mstore(chainElementStart, 1)
timestamp: context.timestamp, // mstore(add(chainElementStart, 0x20), 0)
blockNumber: context.blockNumber, // mstore(add(chainElementStart, 0x40), context.timestamp)
txData: txData // mstore(add(chainElementStart, 0x40), context.blockNumber)
}) // mstore(add(chainElementStart, 0x40), context.blockNumber)
// }
leaves[transactionIndex] = keccak256(
txData
); );
console.log("tx data & pos"); // leaves[transactionIndex] = keccak256('hello world');
console.logBytes(txData); // leaves[transactionIndex] = _hashTransactionChainElement(
console.log(nextSequencerTransactionPosition); // TransactionChainElement({
uint test; // isSequenced: true,
// queueIndex: 0,
// timestamp: context.timestamp,
// blockNumber: context.blockNumber,
// txData: txData
// })
// );
nextSequencerTransactionPosition += uint32(TX_DATA_HEADER_SIZE + txData.length); nextSequencerTransactionPosition += uint32(TX_DATA_HEADER_SIZE + txData.length);
console.log("TX_DATA_HEADER_SIZE");
console.log(TX_DATA_HEADER_SIZE);
console.log(txData.length);
console.log(nextSequencerTransactionPosition);
console.log("~~~");
numSequencerTransactionsProcessed++; numSequencerTransactionsProcessed++;
transactionIndex++; transactionIndex++;
} }
...@@ -382,25 +381,23 @@ contract OVM_CanonicalTransactionChain is iOVM_CanonicalTransactionChain, OVM_Ba ...@@ -382,25 +381,23 @@ contract OVM_CanonicalTransactionChain is iOVM_CanonicalTransactionChain, OVM_Ba
* @return _transactionData The transaction data for this particular element. * @return _transactionData The transaction data for this particular element.
*/ */
function _getTransactionData( function _getTransactionData(
uint _startPosition uint256 _startPosition
) )
internal internal
view view
returns ( returns (
bytes memory _transactionData bytes memory
) )
{ {
uint transactionSize; uint256 transactionSize;
assembly { assembly {
// 3 byte transactionSize // 3 byte transactionSize
transactionSize := shr(232, calldataload(_startPosition)) transactionSize := shr(232, calldataload(_startPosition))
}
// Initialize _transactionData at the free memory pointer 0x40 bytes memory _transactionData = new bytes(transactionSize);
_transactionData := mload(0x40) assembly {
// Store the length as the first word to conform with `bytes memory`
mstore(_transactionData, transactionSize)
// Store the rest of the transaction // Store the rest of the transaction
calldatacopy(add(_transactionData, 32), add(_startPosition, 3), transactionSize) calldatacopy(add(_transactionData, 0x20), add(_startPosition, 3), transactionSize)
} }
return _transactionData; return _transactionData;
} }
......
...@@ -520,10 +520,12 @@ describe.only('OVM_CanonicalTransactionChain', () => { ...@@ -520,10 +520,12 @@ describe.only('OVM_CanonicalTransactionChain', () => {
transactions: ['0x1234'], transactions: ['0x1234'],
}) })
console.log('\n~~~~ BEGINNGING TRASACTION IN QUESTION ~~~~')
const transactions = [] const transactions = []
const numTxs = 2 const numTxs = 200
for (let i = 0; i < numTxs; i++) { for (let i = 0; i < numTxs; i++) {
transactions.push('0x' + '1080111111111111111111111111111111111111111111111111111111111111') // transactions.push('0x' + '1080111111111111111111111111111111111111111111111111111111111111')
transactions.push('0x' + '10801111')
} }
const res = await appendSequencerBatch(OVM_CanonicalTransactionChain, { const res = await appendSequencerBatch(OVM_CanonicalTransactionChain, {
shouldStartAtBatch: 2, shouldStartAtBatch: 2,
...@@ -541,7 +543,7 @@ describe.only('OVM_CanonicalTransactionChain', () => { ...@@ -541,7 +543,7 @@ describe.only('OVM_CanonicalTransactionChain', () => {
const receipt = await res.wait() const receipt = await res.wait()
console.log(res) console.log(res)
console.log(receipt) console.log(receipt)
}) }).timeout(100000000)
it('should revert if expected start does not match current total batches', async () => { it('should revert if expected start does not match current total batches', async () => {
await expect( await expect(
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment