change MerkleProof interface to take array of bytes32 (#879)

pull/800/merge
Francisco Giordano 7 years ago committed by GitHub
parent 915f74c5f6
commit 06666be93a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 16
      contracts/MerkleProof.sol
  2. 6
      test/helpers/merkleTree.js

@ -14,21 +14,11 @@ library MerkleProof {
* @param _root Merkle root
* @param _leaf Leaf of Merkle tree
*/
function verifyProof(bytes _proof, bytes32 _root, bytes32 _leaf) public pure returns (bool) {
// Check if proof length is a multiple of 32
if (_proof.length % 32 != 0) {
return false;
}
bytes32 proofElement;
function verifyProof(bytes32[] _proof, bytes32 _root, bytes32 _leaf) public pure returns (bool) {
bytes32 computedHash = _leaf;
for (uint256 i = 32; i <= _proof.length; i += 32) {
// solium-disable-next-line security/no-inline-assembly
assembly {
// Load the current element of the proof
proofElement := mload(add(_proof, i))
}
for (uint256 i = 0; i < _proof.length; i++) {
bytes32 proofElement = _proof[i];
if (computedHash < proofElement) {
// Hash(current computed hash + current element of the proof)

@ -79,7 +79,7 @@ export default class MerkleTree {
getHexProof (el) {
const proof = this.getProof(el);
return this.bufArrToHex(proof);
return this.bufArrToHexArr(proof);
}
getPairElement (idx, layer) {
@ -117,12 +117,12 @@ export default class MerkleTree {
});
}
bufArrToHex (arr) {
bufArrToHexArr (arr) {
if (arr.some(el => !Buffer.isBuffer(el))) {
throw new Error('Array is not an array of buffers');
}
return '0x' + arr.map(el => el.toString('hex')).join('');
return arr.map(el => '0x' + el.toString('hex'));
}
sortAndConcat (...args) {

Loading…
Cancel
Save