元宇宙非小号金色财经交流群社区官网

深入了解钱包层级,学习更高级的区块链应用技能

浏览:81|时间:2023-06-17 00:11:46
HD钱包优化算法决定只需提供根扩展私钥,整棵树的任意连接点的扩展私钥就可以被推算出来。

让我们一起看看如何使用JavaScript库bitcoinjs-lib来计算HD地址:

``` const bitcoin = require("bitcoinjs-lib"); let xprv = "xprv9s21ZrQH143K4EKMS3q1vbJo564QAbs98BfXQME6nk8UCrnXnv8vWg9qmtup3kTug96p5E3AvarBhPMScQDqMhEEm41rpYEdXBL8qzVZtwz", root = bitcoin.HDNode.fromBase58(xprv);

// m/0: var m_0 = root.derive(0); console.log("xprv m/0: " + m_0.toBase58()); console.log("xpub m/0: " + m_0.neutered().toBase58()); console.log("prv m/0: " + m_0.keyPair.toWIF()); console.log("pub m/0: " + m_0.keyPair.getAddress());

// m/1: var m_1 = root.derive(1); console.log("xprv m/1: " + m_1.toBase58()); console.log("xpub m/1: " + m_1.neutered().toBase58()); console.log("prv m/1: " + m_1.keyPair.toWIF()); console.log("pub m/1: " + m_1.keyPair.getAddress()); ```

注意,以“xprv”开头的字符是512位扩展私钥的Base58编号,编解码后的结果即为初始扩展私钥。

在没有“xprv”的情况下,可以立即推算出某一xpub的子公钥:

``` const bitcoin = require("bitcoinjs-lib"); let xprv = "xprv9s21ZrQH143K4EKMS3q1vbJo564QAbs98BfXQME6nk8UCrnXnv8vWg9qmtup3kTug96p5E3AvarBhPMScQDqMhEEm41rpYEdXBL8qzVZtwz", root = bitcoin.HDNode.fromBase58(xprv);

// m/0: let m_0 = root.derive(0), xprv_m_0 = m_0.toBase58(), xpub_m_0 = m_0.neutered().toBase58(); // Method 1: Get public address of m/0/99 from xprv of m/0: let pub_99a = bitcoin.HDNode.fromBase58(xprv_m_0).derive(99).getAddress();

// Method 2: Get public address of m/0/99 from xpub of m/0: let pub_99b = bitcoin.HDNode.fromBase58(xpub_m_0).derive(99).getAddress();

// Check if the two public addresses are the same: console.log(pub_99a); console.log(pub_99b); ```

但是无法从xpub推算出硬底化子公钥:

``` const bitcoin = require("bitcoinjs-lib"); let xprv = "xprv9s21ZrQH143K4EKMS3q1vbJo564QAbs98BfXQME6nk8UCrnXnv8vWg9qmtup3kTug96p5E3AvarBhPMScQDqMhEEm41rpYEdXBL8qzVZtwz", root = bitcoin.HDNode.fromBase58(xprv);

// m/0: let m_0 = root.derive(0), xprv_m_0 = m_0.toBase58(), xpub_m_0 = m_0.neutered().toBase58();

// Get public address of m/0/99 from xprv of m/0: let pub_99a = bitcoin.HDNode.fromBase58(xprv_m_0).deriveHardened(99).getAddress(); console.log(pub_99a);

// Get public address of m/0/99 from xpub of m/0: bitcoin.HDNode.fromBase58(xpub_m_0).deriveHardened(99).getAddress(); ```

BIP-44是比特币HD钱包的标准,它定义了一个简单的规范来派生私钥:

``` m / purpose' / coin_type' / account' / change / address_index ```

其中,“purpose”恒为“44”,“coin_type”由SLIP-44中定义,例如0对应BTC,2对应LTC,60对应ETH等。“account”表示客户的某个“帐户”,由客户指定的数据库索引。“change=0”表示外部买卖,“change=1”表示内部结构买卖。“address_index”是真正派生的数据库索引,从0到231。

例如,某个BTC钱包为客户创建的一组HD地址如下:

``` m/44'/0'/0'/0/0 m/44'/0'/0'/0/1 m/44'/0'/0'/0/2 m/44'/0'/0'/0/3 ... ```

如果这是以太币钱包,则其客户的HD地址如下:

``` m/44'/2'/0'/0/0 m/44'/2'/0'/0/1 m/44'/2'/0'/0/2 m/44'/2'/0'/0/3 ... ```

经过BIP-44标准化的HD钱包可以管理其它货币的全部方法。同一根扩展私钥在不同钱包上派生的一组地址完全相同。

区块 区块链 区块链应用 学习 钱包

  • 区块链应用分布式交易,区块链市场应用开发专属圈

    区块链应用分布式交易,区块链市场应用开发专属圈

    2022-04-08 11:41:19

    区块链是一种安全、分布式和恒定的数据库区块链应用 分布式交易,由分布式网络中的所有各方共享。简而言之,区块链是一种允许彼此不认识的人信任事件的共享记录的技术。数据存储在称为块的刚性结构中,它们通过哈希值链接(每个块包含时...

  • 开发者可以快速加入区块链应用开发,为用户带来安全快捷的应用

    开发者可以快速加入区块链应用开发,为用户带来安全快捷的应用

    2022-03-31 17:12:55

    1、低性能:早期区块链技术交易吞吐量小,低性能导致今天的区块链应用无法与传统的非区块链应用竞争,性能问题一直困扰着许多用户。2、同步数据缓慢:用户需要同步区块链中的所有数据。由于数据量大,同步效率低。3、非消费者友好:几...

  • 区块链企业已超1400家,运营商如何驱动区块链应用创新提速?

    区块链企业已超1400家,运营商如何驱动区块链应用创新提速?

    2021-10-18 17:17:58

    近日,ICT中国·2021高峰论坛之区块链运用学术研讨会在京举办。大会上所表示的数据统计表明,在我国区块链产业发展规划已获得充分进度,变成全世界区块链产业链发展前景最大的国家之一,2020年在我国区块链产业链规模化...

  • 区块链应用落地N种方式 作为功能组件的区块链

    区块链应用落地N种方式 作为功能组件的区块链

    2022-02-16 17:36:47

    区块链应用落地N种方式区块链作为一种分布式应用,必须与其他系统结构结合,包括其他分布式结构,甚至集中结构,从产业逻辑的角度,而不仅仅是从技术逻辑的角度,面对真实的业务场景需要构建信息系统结构,相互学习,匹配行业和业务逻辑...

本站分享的区块链、Web3.0元宇宙、NFT、数字藏品最新消息等相关数藏知识快讯NFR资讯新闻,与金色财经非小号巴比特星球前线Btc中国官网无关,本站资讯观点不作为投资依据,市场有风险,投资需谨慎!不提供社区论坛BBS微博微信交流群等相关币圈信息发布!
本站内容来源于互联网,如存在侵权及违规内容投诉邮箱( zztaobao@vip.qq.com )