## Testnet addresses fail in explorers

1

I've generated a testnet address like this:

const btc = require('bitcoinjs-lib');
const bip32 = require('bip32');
const bip39 = require('bip39');

var root = bip32.fromSeed(
bip39.mnemonicToSeedSync('my-twelve-word-seed...'),
btc.networks.testnet
);
var pubkey = root.derivePath("m/44'/1'/0'/0/0").publicKey;


and for my troubles I end up with this value: 14kwGTShacA5hT4uAes7dkNvreuHXuRRf7

however, when I test that with BlockCypher (or Blockchain.com or some other explorer), it doesn't seem to recognise it:

curl https://api.blockcypher.com/v1/btc/test3/addrs/14kwGTShacA5hT4uAes7dkNvreuHXuRRf7/balance


yields

{"error": "Address 14kwGTShacA5hT4uAes7dkNvreuHXuRRf7 incompatible with current block chain: BTC.test3"}

notice that according to BIP44 the derivation path for testnet coins is m/44'/1' vs. m/44/0' for mainnet

so what is wrong here?

A chain explorer can only know about addresses which have actually been used in a transaction which has been broadcast over the network. Have you tried sending some testnet coins to the address you generated? – Mark H – 2020-01-09T08:13:58.100

no, but I should be able to get a zero balance. the problem isn't with whether the address has been used. it's a format problem – ekkis – 2020-01-09T21:29:28.343

2

You are on the right track. The address is derived correctly, it is just not encoded with the right version.

You need to add the testnet network version to the btc.payments.p2pkh call as well.

Something like this should work:

console.log(btc.payments.p2pkh({pubkey, network: btc.networks.testnet}).address);


The address should then start with m... instead of 1....