首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于使用Zcash的xpub和path自动派生地址的问题

关于使用Zcash的xpub和path自动派生地址的问题
EN

Stack Overflow用户
提问于 2020-04-23 00:38:37
回答 1查看 233关注 0票数 0

我目前正在为我的公司开发一个API,它利用xpub和path来生成地址。

问题是,我设法为我们需要的所有加密货币做到了这一点,除了Zcash。我们使用的是trezor硬件钱包,而Trezor connect对我们不起作用,因为我们需要将流与设备本身分离。

一般来说,我对所有其他硬币都使用bitcoinjs库,但是我不能为zcash派生正确的地址格式。花了相当多的时间搜索github的问题,但没有运气。一句帮助就太好了,谢谢大家!我的代码目前看起来像这样:

代码语言:javascript
复制
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;
EN

回答 1

Stack Overflow用户

发布于 2020-04-23 20:06:51

所以,事实证明我找到了答案,需要阅读一些奇怪的资源。希望这能对你有所帮助。

首先,zcash不兼容SegWit,因此p2wpkh函数不适用于此,您应该使用p2pkh。p2sh方法调用在这里也是多余的,因此代码将如下所示:

代码语言:javascript
复制
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。我们可以通过使用以下函数轻松地转换它:

代码语言:javascript
复制
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));
}

就这样。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61370364

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档