From e968ea686f51200f1b3e959cb154350b29aba17c Mon Sep 17 00:00:00 2001 From: Nova Date: Fri, 28 Dec 2018 23:30:35 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=A0=E5=85=A5=E9=BB=98=E5=85=8B=E6=A0=B9?= =?UTF-8?q?=E8=AE=A1=E7=AE=97=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- index.js | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/index.js b/index.js index 66c8207..6ec0471 100644 --- a/index.js +++ b/index.js @@ -364,6 +364,36 @@ module.exports = { return null } , + getMerkleRoot:function(todoHashList, option){ + //深拷贝传入数组,防止引用对象被改变 + let hashList = [...todoHashList] + if(!Array.isArray(hashList)) + return null + var border = hashList.length; + if(border == 0) + return this.hash('') + if(border == 1) + return this.hash(hashList[0]); + while(1){ + let i = 1,j = 0; + for(; i < border; i = i + 2){ + hashList[j] = this.hash(hashList[i - 1] + hashList[i]); + if(border == 2){ + return hashList[0]; + } + if(i + 1 == border) break; + j = j + 1; + if(i + 2 == border){ + i = i + 1; + hashList[j] = this.hash(hashList[i]); + break; + } + } + border = j + 1; + } + return hashList + } + , distanceSig:function(hash, sig){ // hash为64hex字符,sig为128hex字符。返回用hex表达的距离。 if (this.isSignature(sig) && this.isHash(hash)){ var hashSig=this.hash(sig) // 把签名也转成32字节的哈希,同样长度方便比较