bitcoinjs-lib/test/integration/addresses.js

118 lines
4.5 KiB
JavaScript
Raw Permalink Normal View History

2018-07-23 09:45:01 +02:00
const { describe, it } = require('mocha')
2018-06-25 08:24:37 +02:00
const assert = require('assert')
const bitcoin = require('../../')
2019-04-07 15:27:16 +02:00
const dhttp = require('./_regtest').dhttp
2019-01-01 13:24:26 +01:00
const TESTNET = bitcoin.networks.testnet
2018-06-05 09:21:43 +02:00
describe('bitcoinjs-lib (addresses)', () => {
it('can generate a random address [and support the retrieval of transactions for that address (via 3PBP)', async () => {
2019-01-01 13:24:26 +01:00
const keyPair = bitcoin.ECPair.makeRandom()
2018-06-27 05:54:47 +02:00
const { address } = bitcoin.payments.p2pkh({ pubkey: keyPair.publicKey })
2019-01-01 13:24:26 +01:00
// bitcoin P2PKH addresses start with a '1'
assert.strictEqual(address.startsWith('1'), true)
2019-04-07 15:27:16 +02:00
const result = await dhttp({
2019-01-01 13:24:26 +01:00
method: 'GET',
url: 'https://blockchain.info/rawaddr/' + address
})
2019-04-07 15:27:16 +02:00
// random private keys [probably!] have no transactions
assert.strictEqual(result.n_tx, 0)
assert.strictEqual(result.total_received, 0)
assert.strictEqual(result.total_sent, 0)
})
it('can import an address via WIF', () => {
const keyPair = bitcoin.ECPair.fromWIF('KwDiBf89QgGbjEhKnhXJuH7LrciVrZi3qYjgd9M7rFU73sVHnoWn')
2018-06-27 05:54:47 +02:00
const { address } = bitcoin.payments.p2pkh({ pubkey: keyPair.publicKey })
assert.strictEqual(address, '1BgGZ9tcN4rm9KBzDn7KprQz87SZ26SAMH')
})
it('can generate a P2SH, pay-to-multisig (2-of-3) address', () => {
2018-06-27 05:54:47 +02:00
const pubkeys = [
'026477115981fe981a6918a6297d9803c4dc04f328f22041bedff886bbc2962e01',
'02c96db2302d19b43d4c69368babace7854cc84eb9e061cde51cfa77ca4a22b8b9',
'03c6103b3b83e4a24a0e33a4df246ef11772f9992663db0c35759a5e2ebf68d8e9'
2018-06-27 05:54:47 +02:00
].map((hex) => Buffer.from(hex, 'hex'))
const { address } = bitcoin.payments.p2sh({
redeem: bitcoin.payments.p2ms({ m: 2, pubkeys })
})
assert.strictEqual(address, '36NUkt6FWUi3LAWBqWRdDmdTWbt91Yvfu7')
})
it('can generate a SegWit address', () => {
const keyPair = bitcoin.ECPair.fromWIF('KwDiBf89QgGbjEhKnhXJuH7LrciVrZi3qYjgd9M7rFU73sVHnoWn')
2018-06-27 05:54:47 +02:00
const { address } = bitcoin.payments.p2wpkh({ pubkey: keyPair.publicKey })
assert.strictEqual(address, 'bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t4')
})
it('can generate a SegWit address (via P2SH)', () => {
const keyPair = bitcoin.ECPair.fromWIF('KwDiBf89QgGbjEhKnhXJuH7LrciVrZi3qYjgd9M7rFU73sVHnoWn')
2018-06-27 05:54:47 +02:00
const { address } = bitcoin.payments.p2sh({
redeem: bitcoin.payments.p2wpkh({ pubkey: keyPair.publicKey })
})
assert.strictEqual(address, '3JvL6Ymt8MVWiCNHC7oWU6nLeHNJKLZGLN')
})
it('can generate a P2WSH (SegWit), pay-to-multisig (3-of-4) address', () => {
2018-06-27 05:54:47 +02:00
const pubkeys = [
'026477115981fe981a6918a6297d9803c4dc04f328f22041bedff886bbc2962e01',
'02c96db2302d19b43d4c69368babace7854cc84eb9e061cde51cfa77ca4a22b8b9',
'023e4740d0ba639e28963f3476157b7cf2fb7c6fdf4254f97099cf8670b505ea59',
'03c6103b3b83e4a24a0e33a4df246ef11772f9992663db0c35759a5e2ebf68d8e9'
2018-06-27 05:54:47 +02:00
].map((hex) => Buffer.from(hex, 'hex'))
const { address } = bitcoin.payments.p2wsh({
redeem: bitcoin.payments.p2ms({ m: 3, pubkeys })
})
assert.strictEqual(address, 'bc1q75f6dv4q8ug7zhujrsp5t0hzf33lllnr3fe7e2pra3v24mzl8rrqtp3qul')
})
it('can generate a P2SH(P2WSH(...)), pay-to-multisig (2-of-2) address', () => {
2018-06-27 05:54:47 +02:00
const pubkeys = [
'026477115981fe981a6918a6297d9803c4dc04f328f22041bedff886bbc2962e01',
'02c96db2302d19b43d4c69368babace7854cc84eb9e061cde51cfa77ca4a22b8b9'
2018-06-27 05:54:47 +02:00
].map((hex) => Buffer.from(hex, 'hex'))
const { address } = bitcoin.payments.p2sh({
redeem: bitcoin.payments.p2wsh({
redeem: bitcoin.payments.p2ms({ m: 2, pubkeys })
})
})
assert.strictEqual(address, '3P4mrxQfmExfhxqjLnR2Ah4WES5EB1KBrN')
})
2019-01-01 13:24:26 +01:00
// examples using other network information
it('can generate a Testnet address', () => {
2019-01-01 13:24:26 +01:00
const keyPair = bitcoin.ECPair.makeRandom({ network: TESTNET })
const { address } = bitcoin.payments.p2pkh({ pubkey: keyPair.publicKey, network: TESTNET })
2019-01-01 01:41:00 +01:00
2019-01-07 08:33:57 +01:00
// bitcoin testnet P2PKH addresses start with a 'm' or 'n'
assert.strictEqual(address.startsWith('m') || address.startsWith('n'), true)
})
it('can generate a Litecoin address', () => {
2019-01-01 13:24:26 +01:00
// WARNING: although possible, bitcoinjs is NOT necessarily compatible with Litecoin
const LITECOIN = {
messagePrefix: '\x19Litecoin Signed Message:\n',
bip32: {
public: 0x019da462,
private: 0x019d9cfe
},
pubKeyHash: 0x30,
scriptHash: 0x32,
wif: 0xb0
}
const keyPair = bitcoin.ECPair.makeRandom({ network: LITECOIN })
2018-06-27 05:54:47 +02:00
const { address } = bitcoin.payments.p2pkh({ pubkey: keyPair.publicKey, network: LITECOIN })
2019-01-01 13:24:26 +01:00
assert.strictEqual(address.startsWith('L'), true)
})
})