Skip to content
This repository was archived by the owner on Mar 1, 2024. It is now read-only.

Commit 0289ceb

Browse files
authored
Merge pull request #331 from maticnetwork/fix-merkle-patricia-library
Fix merkle patricia library
2 parents a1dd3be + 3479217 commit 0289ceb

File tree

3 files changed

+24
-15
lines changed

3 files changed

+24
-15
lines changed

contracts/common/lib/MerklePatriciaProof.sol

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -69,12 +69,12 @@ library MerklePatriciaProof {
6969
);
7070
pathPtr += 1;
7171
} else if (currentNodeList.length == 2) {
72-
pathPtr += _nibblesToTraverse(
72+
uint256 traversed = _nibblesToTraverse(
7373
RLPReader.toBytes(currentNodeList[0]),
7474
path,
7575
pathPtr
7676
);
77-
if (pathPtr == path.length) {
77+
if (pathPtr + traversed == path.length) {
7878
//leaf node
7979
if (
8080
keccak256(RLPReader.toBytes(currentNodeList[1])) ==
@@ -87,17 +87,11 @@ library MerklePatriciaProof {
8787
}
8888

8989
//extension node
90-
if (
91-
_nibblesToTraverse(
92-
RLPReader.toBytes(currentNodeList[0]),
93-
path,
94-
pathPtr
95-
) ==
96-
0
97-
) {
90+
if (traversed == 0) {
9891
return false;
9992
}
10093

94+
pathPtr += traversed;
10195
nodeKey = bytes32(RLPReader.toUintStrict(currentNodeList[1]));
10296
} else {
10397
return false;

test/helpers/proofs.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -190,8 +190,8 @@ export function getReceiptBytes(receipt) {
190190
utils.toBuffer(
191191
receipt.status !== undefined && receipt.status != null
192192
? receipt.status
193-
? 1
194-
: 0
193+
? '0x1'
194+
: '0x'
195195
: receipt.root
196196
),
197197
utils.toBuffer(receipt.cumulativeGasUsed),

test/helpers/utils.js

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -326,7 +326,12 @@ export function startExit(
326326
ethUtils.bufferToHex(reference.receiptsRoot),
327327
ethUtils.bufferToHex(reference.receipt),
328328
ethUtils.bufferToHex(rlp.encode(reference.receiptParentNodes)),
329-
ethUtils.bufferToHex(rlp.encode(reference.path)), // branch mask,
329+
ethUtils.bufferToHex(
330+
Buffer.concat([
331+
Buffer.from('00', 'hex'),
332+
reference.path
333+
])
334+
), // branch mask,
330335
logIndex
331336
])
332337
),
@@ -399,7 +404,12 @@ export function startExitForErc20PredicateLegacy(
399404
ethUtils.bufferToHex(reference.receiptsRoot),
400405
ethUtils.bufferToHex(reference.receipt),
401406
ethUtils.bufferToHex(rlp.encode(reference.receiptParentNodes)),
402-
ethUtils.bufferToHex(rlp.encode(reference.path)), // branch mask,
407+
ethUtils.bufferToHex(
408+
Buffer.concat([
409+
Buffer.from('00', 'hex'),
410+
reference.path
411+
])
412+
), // branch mask,
403413
logIndex
404414
])
405415
),
@@ -490,7 +500,12 @@ export function buildReferenceTxPayload(input) {
490500
ethUtils.bufferToHex(reference.receiptsRoot),
491501
ethUtils.bufferToHex(reference.receipt),
492502
ethUtils.bufferToHex(rlp.encode(reference.receiptParentNodes)),
493-
ethUtils.bufferToHex(rlp.encode(reference.path)), // branch mask,
503+
ethUtils.bufferToHex(
504+
Buffer.concat([
505+
Buffer.from('00', 'hex'),
506+
reference.path
507+
])
508+
), // branch mask,
494509
logIndex
495510
]
496511
}

0 commit comments

Comments
 (0)