Итак, оказывается, я нашел ответ, потребовал немного чтения на странных ресурсах. Надеюсь, это вам поможет.
Во-первых, zca sh не совместим с SegWit, поэтому функция p2wpkh для этого не подойдет, вам следует использовать p2pkh. Вызов метода p2 sh здесь также избыточен, поэтому код будет выглядеть примерно так:
network = {
messagePrefix: '\x18ZCash Signed Message:\n',
bech32: 't1',
bip32: {
public: 0x0488b21e,
private: 0x0488ade4
},
pubKeyHash: 0x1cb8,
scriptHash: 0x1cbd,
wif: 0x80
};
payment= bjs.payments.p2pkh({ pubkey: bjs.bip32.fromBase58(xpub, network).derive(0).derive(pathNumber).publicKey, network });
address = payment.address;
Кроме того, библиотека bitcoinjs -lib не поддерживает альткойны в некоторых отношениях. В этом случае функция p2pkh использует toUint8 в своем ядре, так что вы можете в основном разветвить репо и обновить этот метод, чтобы использовать тип данных с более широкими границами, toUint16LE.
После этого функция вернет bitcoin адрес, но нам нужно zca sh. Мы можем легко преобразовать его, используя следующую функцию:
function baddrToTaddr(baddr_str) {
var baddr = bs58check.decode(baddr_str).slice(1); // discard type byte
var taddr = new Uint8Array(22);
taddr.set(baddr, 2);
taddr.set([0x1c,0xb8], 0); // set zcash type bytes
return bs58check.encode(Buffer.from(taddr));
}
Вот и все.