我目前正在为我的公司开发一个API,它利用xpub和path来生成地址。
问题是,我设法为我们需要的所有加密货币做到了这一点,除了Zcash。我们使用的是trezor硬件钱包,而Trezor connect对我们不起作用,因为我们需要将流与设备本身分离。
一般来说,我对所有其他硬币都使用bitcoinjs库,但是我不能为zcash派生正确的地址格式。花了相当多的时间搜索github的问题,但没有运气。一句帮助就太好了,谢谢大家!我的代码目前看起来像这样:
xpub = process.env.ZEC_PUB_KEY;
network = {
messagePrefix: '\x18ZCash Signed Message:\n',
bech32: 't1',
bip32: {
public: 0x0488b21e,
private: 0x0488ade4
},
pubKeyHash: 0x1cb8,
scriptHash: 0x1cbd,
wif: 0x80
};
p2wpkh = bjs.payments.p2wpkh({ pubkey: bjs.bip32.fromBase58(xpub, network).derive(0).derive(pathNumber).publicKey, network });
payment = bjs.payments.p2sh({ redeem: p2wpkh, network });
address = payment.address;发布于 2020-04-23 20:06:51
所以,事实证明我找到了答案,需要阅读一些奇怪的资源。希望这能对你有所帮助。
首先,zcash不兼容SegWit,因此p2wpkh函数不适用于此,您应该使用p2pkh。p2sh方法调用在这里也是多余的,因此代码将如下所示:
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库在某些方面不支持altcoins。在本例中,p2pkh函数在其核心中利用了toUint8,因此基本上可以派生存储库并更新该方法,以使用范围更广的数据类型toUint16LE。
之后,该函数将返回一个比特币地址,但我们需要zcash。我们可以通过使用以下函数轻松地转换它:
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));
}就这样。
https://stackoverflow.com/questions/61370364
复制相似问题