Wallet
從nodejs中的種子片語生成多個公共比特幣接收地址(HD錢包)
我想為每個新使用者為我的比特幣錢包生成一個新的接收地址。轉移到所有這些地址的比特幣應該會在我的比特幣錢包中收到。我不想在伺服器上公開我的私鑰或種子。我發現這就是 HD 錢包的工作方式,所以我嘗試了這個。
const bip39 = require('bip39') const bitcoin = require('bitcoinjs-lib') //ver 3.0.2 let phrase = 'width humor wheat sad obscure outer ancient grab edit labor record express devote humble recipe occur refuse tooth original fluid learn scheme fuel assault'; let seedBuffer = bip39.mnemonicToSeedSync(phrase) // <Buffer 85 19 18 81 cf 0e cc f7 9c 5d 61 ...... let masterNode = bitcoin.HDNode.fromSeedBuffer(seedBuffer) // Deriving the first account based on BIP44 let account0 = masterNode.derivePath("m/44'/0'/0'") let xpubString = account0.neutered().toBase58() console.log(xpubString) let address0FromXpub = bitcoin.HDNode.fromBase58(xpubString) let address0 = address0FromXpub.derivePath("0/0").keyPair.getAddress() let address1 = address0FromXpub.derivePath("0/1").keyPair.getAddress() let address2 = address0FromXpub.derivePath("0/2").keyPair.getAddress() let address3 = address0FromXpub.derivePath("0/3").keyPair.getAddress() // address0.toBase58() console.log("address0",address0) console.log("address1",address1) console.log("address2",address2) console.log("address3",address3)
但我嘗試將比特幣發送到生成的地址,但沒有收到?如果有人可以幫忙。
如果你想在 nodejs 中做比特幣的事情,我推薦使用 bcoin:
回購:https ://github.com/bcoin-org/bcoin
文件、指南:https ://bcoin.io
它有一個完全驗證的全節點實現、SPV 實現和 BIP44 錢包,供 Purse.io 和其他幾個接受比特幣的商家用於這個確切的案例:每個客戶都有一個專用賬戶,錢包可以跟踪每個人的餘額。使用者,每次使用目前接收時生成新地址(la BIP44)
您可以使用僅限手錶的錢包設置您的伺服器以報告傳入的存款,並保持私鑰離線或更安全的本地機器上。
例子:
在安全或離線機器上:
$ bcoin --daemon $ bwallet-cli mkwallet --witness=true --id=HOT $ bwallet-cli --if=HOT account get default { "name": "default", "initialized": true, "witness": false, "watchOnly": false, .. "accountKey": "tpubDD3BFBuLYg2cspeDSWZgo9qv4qYi7KQF5oov8theqbFRUFqXPmsowPqAY1PQqnEdUe5JrFqf8ZGWLwEQEKB5WjJjxgMwcXmFuu1XDrG4RSr", .. }
在“熱”生產伺服器上:
$ bcoin --daemon $ bwallet-cli mkwallet --id=WATCH --watch-only=true --account-key=tpubDD3BFBuLYg2cspeDSWZgo9qv4qYi7KQF5oov8theqbFRUFqXPmsowPqAY1PQqnEdUe5JrFqf8ZGWLwEQEKB5WjJjxgMwcXmFuu1XDrG4RSr $ bwallet-cli --id=WATCH address default { "name": "default", "account": 0, "branch": 0, "index": 1, "witness": false, "nested": false, "publicKey": "026f1afcab2942fd932760557943b287957bb8aa6ebe0f8dc64fa25862e23d52a2", "script": null, "program": null, "type": "pubkeyhash", "address": "mjdcszSLXHd6awrnM4bgJiFEbTFZdyw7de" }
…等等
從這裡您可以使用 API 呼叫來創建交易模板並在離線機器上對其進行簽名。
如果您對執行比特幣的替代植入感到不安,您仍然可以在熱伺服器上執行 bitcoind 並在其後面執行 bcoin(即使在 SPV 模式下),將 bitcoind 作為它的
--only=
對等點,就像比特幣核心防火牆(編輯)
生成靜態地址
'use strict'; const bcoin = require('bcoin'); const m = bcoin.Mnemonic.fromPhrase( 'abandon abandon abandon abandon abandon abandon' + ' abandon abandon abandon abandon abandon about'); const master = bcoin.HDPrivateKey.fromMnemonic(m); const key0 = master.derivePath("m'/44'/0'/0'/0/0"); const ring0 = new bcoin.KeyRing({privateKey: key0}); console.log(ring0)
將輸出:
{ witness: false, nested: false, publicKey: '03aaeb52dd7494c361049de67cc680e83ebcbbbdbeb13637d92cd845f70308af5e', script: null, program: null, type: 'pubkeyhash', address: '1LqBGSKuX5yYUonjxT5qGfpUsXKYYWeabA' }
您可以使用https://iancoleman.io/bip39/從該助記詞片語中驗證這是地址 0,當然,因為該片語非常不安全,並且被開發人員在主網上測試(嘆氣)使用,因此該地址有幾筆交易:<https://blockstream.info/address/1LqBGSKuX5yYUonjxT5qGfpUsXKYYWeabA>