@ -25,12 +25,14 @@ contract('MerkleProof', function (accounts) {
const proof = merkleTree . getHexProof ( leaf ) ;
expect ( await this . merkleProof . verify ( proof , root , leaf ) ) . to . equal ( true ) ;
expect ( await this . merkleProof . verifyCalldata ( proof , root , leaf ) ) . to . equal ( true ) ;
// For demonstration, it is also possible to create valid proofs for certain 64-byte values *not* in elements:
const noSuchLeaf = keccak256 (
Buffer . concat ( [ keccak256 ( elements [ 0 ] ) , keccak256 ( elements [ 1 ] ) ] . sort ( Buffer . compare ) ) ,
) ;
expect ( await this . merkleProof . verify ( proof . slice ( 1 ) , root , noSuchLeaf ) ) . to . equal ( true ) ;
expect ( await this . merkleProof . verifyCalldata ( proof . slice ( 1 ) , root , noSuchLeaf ) ) . to . equal ( true ) ;
} ) ;
it ( 'returns false for an invalid Merkle proof' , async function ( ) {
@ -47,6 +49,7 @@ contract('MerkleProof', function (accounts) {
const badProof = badMerkleTree . getHexProof ( badElements [ 0 ] ) ;
expect ( await this . merkleProof . verify ( badProof , correctRoot , correctLeaf ) ) . to . equal ( false ) ;
expect ( await this . merkleProof . verifyCalldata ( badProof , correctRoot , correctLeaf ) ) . to . equal ( false ) ;
} ) ;
it ( 'returns false for a Merkle proof of invalid length' , async function ( ) {
@ -61,6 +64,7 @@ contract('MerkleProof', function (accounts) {
const badProof = proof . slice ( 0 , proof . length - 5 ) ;
expect ( await this . merkleProof . verify ( badProof , root , leaf ) ) . to . equal ( false ) ;
expect ( await this . merkleProof . verifyCalldata ( badProof , root , leaf ) ) . to . equal ( false ) ;
} ) ;
} ) ;
@ -93,7 +97,7 @@ contract('MerkleProof', function (accounts) {
it ( 'revert with invalid multi proof #1' , async function ( ) {
const fill = Buffer . alloc ( 32 ) ; // This could be anything, we are reconstructing a fake branch
const leaves = [ 'a' , 'b' , 'c' , 'd' ] . map ( keccak256 ) . sort ( Buffer . compare ) ;
const badLeave = keccak256 ( 'e' ) ;
const badLeaf = keccak256 ( 'e' ) ;
const merkleTree = new MerkleTree ( leaves , keccak256 , { sort : true } ) ;
const root = merkleTree . getRoot ( ) ;
@ -101,7 +105,7 @@ contract('MerkleProof', function (accounts) {
await expectRevert (
this . merkleProof . multiProofVerify (
root ,
[ leaves [ 0 ] , badLeave ] , // A, E
[ leaves [ 0 ] , badLeaf ] , // A, E
[ leaves [ 1 ] , fill , merkleTree . layers [ 1 ] [ 1 ] ] ,
[ false , false , false ] ,
) ,
@ -112,7 +116,7 @@ contract('MerkleProof', function (accounts) {
it ( 'revert with invalid multi proof #2' , async function ( ) {
const fill = Buffer . alloc ( 32 ) ; // This could be anything, we are reconstructing a fake branch
const leaves = [ 'a' , 'b' , 'c' , 'd' ] . map ( keccak256 ) . sort ( Buffer . compare ) ;
const badLeave = keccak256 ( 'e' ) ;
const badLeaf = keccak256 ( 'e' ) ;
const merkleTree = new MerkleTree ( leaves , keccak256 , { sort : true } ) ;
const root = merkleTree . getRoot ( ) ;
@ -120,7 +124,7 @@ contract('MerkleProof', function (accounts) {
await expectRevert (
this . merkleProof . multiProofVerify (
root ,
[ badLeave , leaves [ 0 ] ] , // A, E
[ badLeaf , leaves [ 0 ] ] , // A, E
[ leaves [ 1 ] , fill , merkleTree . layers [ 1 ] [ 1 ] ] ,
[ false , false , false , false ] ,
) ,