Просмотр исходного кода

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

Francisco Giordano 7 лет назад
Родитель
Сommit
06666be93a
2 измененных файлов с 6 добавлено и 16 удалено
  1. 3 13
      contracts/MerkleProof.sol
  2. 3 3
      test/helpers/merkleTree.js

+ 3 - 13
contracts/MerkleProof.sol

@@ -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)

+ 3 - 3
test/helpers/merkleTree.js

@@ -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) {