Electrum 2.0 und höher verwendet BIP0032 intern. Ich möchte Code schreiben, der dieselben Adressen generiert. Ich finde online keine Informationen dazu.
Welche BIP32-Pfade werden zum Generieren von Adressen verwendet?
Es wird m/0/<n>
zum Empfangen von Adressen und m/1/<n>
zum Ändern von Adressen verwendet.
Hier ist ein Beispiel-Bitcoinj-Code zum Generieren von Empfangsadressen aus einem erweiterten öffentlichen Schlüssel.
String serialized_xpub = "xpub.....";
unsigned int address_num = 4;
NetworkParameters params = MainNetParams.get();
DeterministicKey root_xpub = DeterministicKey.deserializeB58(null, serialized_xpub, params);
DeterministicKey receiving = HDKeyDerivation.deriveChildKey(root_xpub, new ChildNumber(0, false));
DeterministicKey new_address_key = HDKeyDerivation.deriveChildKey(receiving, new ChildNumber(address_num, false));
String new_address = new_address_key.toAddress().toString();
Inspiriert von @NickODell answer habe ich ein weiteres Beispiel mit nodejs erstellt, das 5 Empfangsadressen und 5 Änderungsadressen ableitet.
Sie benötigen diese beiden Module: npm install bitcoinjs-lib --save
und npm install bip32-utils --save
und babel
für die es6
Unterstützung des Javascript-Codes.
import Bitcoin from 'bitcoinjs-lib';
import Bip32Utils from 'bip32-utils';
let hdNode = Bitcoin.HDNode.fromBase58('xpub...get.the.master.public.key.from.a.wallet.like.electrum...');
let receiving = hdNode.derive(0); // BIP32 m/0/<n> path (receiving addresses)
let receivingChain = new Bip32Utils.Chain(receiving);
for (var k = 0; k < 5; ++k) {
console.log(receivingChain.get());
receivingChain.next();
}
let change = hdNode.derive(1); // BIP32 m/1/<n> path (change addresses)
let changeChain = new Bip32Utils.Chain(change);
for (var k = 0; k < 5; ++k) {
console.log(changeChain.get());
changeChain.next();
}
Getestet in Elektrum mit einer echten Brieftasche.
Wenn Sie kein Wallet mit mehreren Konten haben, können Sie diese BIP32-Pfade verwenden, um Adressen zu generieren:
m/0/k
entspricht dem k-ten Schlüsselpaar der externen Kette des HDW, abgeleitet von Master m.
m/1/k
entspricht dem k-ten Schlüsselpaar der internen Kette des HDW, abgeleitet von Master m. (intern, bedeutet Änderung und andere interne Verwendungen)
Wenn Sie jedoch eine Brieftasche mit mehreren Konten verwenden möchten, z. B. eines für jeden Kunden, sind die Pfade eher wie folgt:
m/i/0/k
entspricht dem k-ten Schlüsselpaar der von Master m abgeleiteten externen Kontokette Nummer i des HDW.
m/i/1/k
entspricht dem k-ten Schlüsselpaar der vom Master m abgeleiteten internen Kette der Kontennummer i des HDW.
Dies ist das Standard-Wallet-Layout:
TL;DR:
BIP32 m/0/<n> path (receiving addresses) BIP32 m/1/<n> path (change addresses)
Vor einigen Tagen hatte ich genau die gleiche Frage, also beendete ich das Schreiben dieses kleinen nodejs-Moduls, das so ziemlich dasselbe tut, was Sie in der Antwort von @pedro_fp_simoes lesen können:
https://www.npmjs.com/package/xpub-generator Sie können es wie folgt verwenden:
import { XPubGenerator } from 'xpub-generator';
const g = new XPubGenerator('xpub....');
g.nthReceiving(1);
g.nthChange(1);
Zauberer von Ozzie
Nick Odell
Christopher Gurnee
Nick Odell
joe.js
Pedro Simões