From 20169a56ee192d6ea34fc0c948c256d40991ea98 Mon Sep 17 00:00:00 2001 From: Luk Lu Date: Sun, 23 Feb 2020 10:46:19 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=B9=E8=BF=9B=20isSecword=20=E9=98=B2?= =?UTF-8?q?=E6=AD=A2=E6=95=B0=E9=87=8F=E4=B8=8D=E5=AF=B9=E5=AF=BC=E8=87=B4?= =?UTF-8?q?=20bitcore-mnemonics=20=E5=BC=82=E5=B8=B8=E3=80=82=E6=94=B9?= =?UTF-8?q?=E8=BF=9B=20isAddress=20=E6=8A=8A=20prefix=20=E4=B9=9F=E7=BA=B3?= =?UTF-8?q?=E5=85=A5=20TIC=E5=9C=B0=E5=9D=80=E7=9A=84=E6=A0=A1=E9=AA=8C?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + dump.rdb | Bin 444 -> 0 bytes index.js | 18 +++++++++++------- 3 files changed, 12 insertions(+), 7 deletions(-) delete mode 100644 dump.rdb diff --git a/.gitignore b/.gitignore index 46dd5c4..d7e9ceb 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ package-lock.json .svn ~* .gitattributes +dump.rdb diff --git a/dump.rdb b/dump.rdb deleted file mode 100644 index 54b72000f402406ef0d256ad6f7b31a3ed8b51e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 444 zcmZvXOHRUI0EB-@5HymIn6O~Mq8m42`k=JGE8-(y4Mac`6pjCjQcG!V3nIotco$>h zj(7r(px!_dH#HHfZduG?X7Xh+wcVY)I?wYkSaKOPyzG#;kp@qx!^)?(K4!CDdoE6DC-9hV^s_t*q{gReyZ;=b){^=x7mF1Xt^*JXy@ z_1oO0AWG|@MP4^FZI1A&h&xE>KpCn$>|j~uMM;EtsuD~I#ZVB5D#=vAs-zMqs#Fme zggJy5#1yr;J1)T;BB3$f8dk5&(qYl`M6K`OA>A2y`psBrmUN?@P6Gf|Lq!0HVbnu? z!j@jZ+h=qZ;v>Otm;_zhPOesl>X9%u8kc2Db51ZCDc5FgKCZooI7qsTu)hCyw(cWh zMo!NXAeEXk`0+cY4?MK3Y-_OD5@E4il`F@#)a;vi)}T;m4$Mqu4*Cj$ht@(^%w{p| J(Vad`jUS|piz)yB diff --git a/index.js b/index.js index 76be726..a831062 100644 --- a/index.js +++ b/index.js @@ -67,7 +67,10 @@ module.exports = { } , isSecword(secword){ - return Secword.isValid(secword) + if (typeof secword==='string' && 12===secword.split(/ +/)) + return Secword.isValid(secword) + else + return false } , isSeckey(seckey){ @@ -357,7 +360,7 @@ module.exports = { case 'devnet': prefix='74'; break; // Base58: 0x90 => d, Base 64: d=0x1d=0b00011101 => 0b 011101xx = 0x74~77 default: prefix='4c' } - let checksum = this.hash(this.hash(position)).slice(0,6) // 添加 checksum 使得能够检测大小写错误。注意,不包含 prefix,这样更纯粹、专注。 + let checksum = this.hash(this.hash(prefix+position)).slice(0,6) // 添加 checksum 使得能够检测大小写错误。[todo] 校验码里要不要包含 prefix? // address = this.hex2eip55(prefix + position + checksum) // 前缀1节,位置20节,校验3节,共24节=48字符(能够完全转化为8个色彩),再转eip55。 address = this.hex2b64u(prefix + position + checksum) // 实际采用 b64u (named by luk.lu as base 64 for url), 共 32字符。 return address @@ -384,16 +387,17 @@ module.exports = { } , isAddress(address){ - if (/^0x[\da-fA-F]{40}$/.test(address)){ + if (/^(0x)?[\da-fA-F]{40}$/.test(address)){ return 'ETH' - }else if (/^[123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{26,34}$/.test(address) // 格式合法 - && this.b58c2hex(address)){ // 内容合法 + }else if (/^[123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{26,34}$/.test(address)){ // 格式合法 + let prefixedPosition = this.b58c2hex(address) + if (prefixedPosition && prefixedPosition.length===42) // 内容合法 return 'BTC' }else if (/^[Ttd][0-9a-zA-Z\-_]{31}$/.test(address)){ // 格式合法 let b64 = address.replace('-', '+').replace('_', '/') let hex = Buffer.from(b64, 'base64').toString('hex') - let [all, prefix, position, checksum] = hex.match(/^([\da-fA-F]{2})([\da-fA-F]{40})([\da-fA-F]{6})$/) - return this.hash(this.hash(position)).slice(0,6) === checksum + let [all, prefix, position, checksum] = hex.match(/^([\da-fA-F]{2})([\da-fA-F]{40})([\da-fA-F]{6})$/) // 内容合法 + return this.hash(this.hash(prefix+position)).slice(0,6) === checksum // [todo] 校验码里要不要包含 prefix? } return null }