UNPKG

bip86

Version:

BIP86 - Derives taproot addresses from seed, xprv/xpub and tprv/tpub in javascript

96 lines (79 loc) 4.8 kB
const BIP86 = require('../src/index'); function init(networks, slip44, pub_types, isTestnet) { let mnemonic = BIP86.entropyToMnemonic('00000000000000000000000000000000') let network; if(networks) { if (isTestnet) { network = networks.mainnet; } else { network = networks.testnet; } } let root = new BIP86.fromMnemonic(mnemonic, '', isTestnet, slip44, pub_types, network); let child0 = root.deriveAccount(0); let account0 = new BIP86.fromXPrv(child0, pub_types, networks); return { root, child0, account0 }; } function initFromZpub(networks, slip44, pub_types, isTestnet) { let xpub = 'tpubDE9d2eQdaQrwREoNYVm63BH1TQz5XYizB3rMxeJpFsfxxzXzNGCrguxaip9shs9TLahkfvgQPNWdKXvWqCqWgKk5SxT9wuFtLQg7RQvRsTV' return new BIP86.fromXPub(xpub, pub_types, networks); } let data, account1; describe('account0', () => { beforeEach(() => { data = init(); }); it("Generates correct rootPublic and rootPrivate", () => { expect(data.root.getRootPrivateKey()).toEqual('xprv9s21ZrQH143K3GJpoapnV8SFfukcVBSfeCficPSGfubmSFDxo1kuHnLisriDvSnRRuL2Qrg5ggqHKNVpxR86QEC8w35uxmGoggxtQTPvfUu'); expect(data.root.getRootPublicKey()).toEqual('xpub661MyMwAqRbcFkPHucMnrGNzDwb6teAX1RbKQmqtEF8kK3Z7LZ59qafCjB9eCRLiTVG3uxBxgKvRgbubRhqSKXnGGb1aoaqLrpMBDrVxga8'); }); it("Generates correct root = m/86'/0'/0'", () => { expect(data.account0.getAccountPrivateKey()).toEqual('xprv9xgqHN7yz9MwCkxsBPN5qetuNdQSUttZNKw1dcYTV4mkaAFiBVGQziHs3NRSWMkCzvgjEe3n9xV8oYywvM8at9yRqyaZVz6TYYhX98VjsUk'); expect(data.account0.getAccountPublicKey()).toEqual('xpub6BgBgsespWvERF3LHQu6CnqdvfEvtMcQjYrcRzx53QJjSxarj2afYWcLteoGVky7D3UKDP9QyrLprQ3VCECoY49yfdDEHGCtMMj92pReUsQ'); }); it("Generates correct first receiving address = m/86'/0'/0'/0/0", () => { expect(data.account0.getPrivateKey(0)).toEqual('KyRv5iFPHG7iB5E4CqvMzH3WFJVhbfYK4VY7XAedd9Ys69mEsPLQ'); expect(data.account0.getPublicKey(0)).toEqual('03cc8a4bc64d897bddc5fbc2f670f7a8ba0b386779106cf1223c6fc5d7cd6fc115'); expect(data.account0.getAddress(0)).toEqual('bc1p5cyxnuxmeuwuvkwfem96lqzszd02n6xdcjrs20cac6yqjjwudpxqkedrcr'); }); it("Generates correct second receiving address = m/86'/0'/0'/0/1", () => { expect(data.account0.getPrivateKey(1)).toEqual('L1jhNnZZAAAppoSYQuaAQEj935VpmishMomuWXgJ3Qy5HNqkhhus'); expect(data.account0.getPublicKey(1)).toEqual('0283dfe85a3151d2517290da461fe2815591ef69f2b18a2ce63f01697a8b313145'); expect(data.account0.getAddress(1)).toEqual('bc1p4qhjn9zdvkux4e44uhx8tc55attvtyu358kutcqkudyccelu0was9fqzwh'); }); it("Generates correct first change address = m/86'/0'/0'/1/0", () => { expect(data.account0.getPrivateKey(0, true)).toEqual('KzsCLFtWKpeNKMHFyHKT8vGRuGQxEY8CQjgLcEj14C8xK2PyEFeN'); expect(data.account0.getPublicKey(0, true)).toEqual('02399f1b2f4393f29a18c937859c5dd8a77350103157eb880f02e8c08214277cef'); expect(data.account0.getAddress(0, true)).toEqual('bc1p3qkhfews2uk44qtvauqyr2ttdsw7svhkl9nkm9s9c3x4ax5h60wqwruhk7'); }); }); describe('account1', () => { beforeEach(() => { account1 = initFromZpub(); }); it("Generates correct root = m/86'/1'/0'", () => { expect(account1.getAccountPublicKey()).toEqual('tpubDE9d2eQdaQrwREoNYVm63BH1TQz5XYizB3rMxeJpFsfxxzXzNGCrguxaip9shs9TLahkfvgQPNWdKXvWqCqWgKk5SxT9wuFtLQg7RQvRsTV'); }); it("Generates correct first receiving address = m/86'/1'/0'/0/0", () => { expect(account1.getPublicKey(0)).toEqual('026f7b861432127845aac3f0685f03359d73c5009929cfa88920aaba8419e0d3fc'); expect(account1.getAddress(0)).toEqual('tb1pw9d6svmf4zsl27qnz76fcmz9yxpeqsz0xqsed59pdh68lr4ud5vsjk506u'); }); it("Generates correct second receiving address = m/86'/1'/0'/0/1", () => { expect(account1.getPublicKey(1)).toEqual('02be3a48320efd83fb3c80c961a06b25c3049f63a0b0d9009c27ecbbca80fb2d85'); expect(account1.getAddress(1)).toEqual('tb1p8969s4chlgj6jncd0qyqv77cha00uk7v6nnm4pzpr67u7p4jkgsqemy6yq'); }); it("Generates correct first change address = m/86'/1'/0'/1/0", () => { expect(account1.getPublicKey(0, true)).toEqual('03ee397d520b5a9e59b0813eed5f84274af42ba2fa074cd5c68ad01b1b1521ecb1'); expect(account1.getAddress(0, true)).toEqual('tb1pk9v0nuu0cr78c9lmrl22crdjwtxhsr0ekjuv9p8hkjquwtnknxdqprjpjh'); }); it("Generates correct second change address = m/86'/1'/0'/1/1", () => { expect(account1.getPublicKey(1, true)).toEqual('0367ca30afae9d9b5374c9d34b0dc684044bf04a19c9a299b1d68bd6da173c9ccb'); expect(account1.getAddress(1, true)).toEqual('tb1pyxakgvcv6cq2zakm599zuxs7mljfww0fj9k00w3z9e5g8uf4gujqxwws6a'); }); }); describe('network specific', () => { it("Creates BTC network data", () => { let data = init(); expect(data.account0.getAddress(0)).toEqual('bc1p5cyxnuxmeuwuvkwfem96lqzszd02n6xdcjrs20cac6yqjjwudpxqkedrcr'); }); });