2014-02-25 69 views
1

我試圖驗證使用node.js JavaScript的dogecoin地址。狗狗幣地址驗證,在nodejs

但我仍然試圖理解,算法。

我目前的node.js版本是v0.10.22

從什麼我能理解(糾正我,如果我錯了)它是一種多吉幣地址是從比特幣地址沒有什麼不同。

所以我儘量做到以下幾點

  1. Base58解碼地址解碼地址的SHA256的返回結果的
  2. 計算SHA256(兩次SHA256)
  3. 做的比較前4個字節SHA256結果與最後4個字節解碼後的地址(我想我犯了一個錯誤在這裏)的..

時我試圖寫這給JavaScript的base58解碼的結果是正確的,當我嘗試從解碼值的緩衝區,它會引發錯誤指向該值正確

var decodedHex = new Buffer(decodedBase58Result,'hex')

上述投一個錯誤,如果我做decodedBase58Result.toString()這將會使腳本繼續編號,但不會返回預期的結果。

那麼,有沒有解決這個問題? ,而不依賴於第三方的API調用


更新: 我研究了很多,我發現了一個客戶端驗證,用一小段代碼,我做了一個NPM包

這驗證地址,而不依賴於任何第三方API /服務電話。

+0

你能舉一個有效的狗幣地址的例子嗎? – alex

+0

@alex一個狗幣地址'DBKh7QAP9gkXncVK32jtfae4QXChPwsyKH'及其base58解碼值'5.868133917508844e + 59' – Gntem

+0

[node-dogecoin](https://www.npmjs.org/package/node-dogecoin)公開'validateaddress'命令。您可以使用它,但我不確定這是否屬於「第三方api電話」。 –

回答

1

decodedBase58Result對於DBKh7QAP9gkXncVK32jtfae4QXChPwsyKH將是1e43d1c5e88853622efe39e7a838cebf01cf3029589a614274

crypto.createHash('sha256').update(crypto.createHash('sha256').update((new Buffer('1e43d1c5e88853622efe39e7a838cebf01cf3029589a614274', 'hex')).slice(0,21)).digest('buffer')).digest('buffer') 
<SlowBuffer 9a 61 42 74 97 0b 64 ae 2e 7f d6 f8 b1 81 90 12 f3 5e 3a 0b a1 f4 f2 c2 47 fe 20 7e 4f a1 27 25> 

比較最後4個字節的地址 - ...9a614274 - 用得到的哈希 - 9a614274...,如果你得到一個匹配,地址是有效的。

所以不,它和比特幣一樣,代碼示例是here

5.868133917508844e+59是一個解碼爲整數的地址。與它的問題是,JavaScript使用52位來表示整數,但你有200位地址。所以你使用的解碼器不能在這裏工作。

+0

unfornaturally沒有一個腳本或模塊在node.js做這base58解碼正確,雖然我現在明白這個概念它的硬,甚至像npm中的大整數模塊,來實現這一點。 Python示例看起來很簡單..無論如何,我會圍繞bash示例包裝一些東西。 – Gntem

4

我寫了一個模塊(coinstring)來做到這一點。它是CryptoCoinJS項目的一部分,它有很多可以使用的組件。它的使用方法非常簡單:

npm install --save [email protected] 

例子:

var coinstring = require('coinstring'); 

//0x1E => for public Dogecoin addresses 
var isValid = coinstring.validate(0x1E, 'DBKh7QAP9gkXncVK32jtfae4QXChPwsyKH'); 
console.log(isValid); // => true 

這個工程在瀏覽器也是如此。希望這可以幫助。

+0

很有意思 – Gntem