以太坊系地址衍生算法分层确定性生成逻辑

文章目录

  • 一、前言
    • 1.1 衍生算法生成的私钥
    • 1.2 随机生成的私钥
  • 二、私钥生成及私钥提取
    • 2.1 golang如何使用衍生算法生成私钥,然后为用户生成地址
      • 2.1.1 实现步骤
      • 2.1.2 golang代码示例
      • 2.1.3 代码说明
    • 2.2 地址交易时,如何提取地址私钥
      • 2.2.1 私钥恢复说明
      • 2.2.2 golang代码通过助记词恢复私钥示例
      • 2.2.3 代码说明
  • 三、将地址衍生算法应用到中心化钱包中
    • 3.1 将地址衍生算法应用到中心化钱包中
      • 3.1.1 架构设计
        • 3.1.1.1 安全的地址生成方式
        • 3.1.1.2 安全转账流程设计
        • 3.1.1.3 大规模用户管理
        • 3.1.1.4 安全监控和风控设计
      • 3.1.2 使用公钥验证地址身份信息(是否为钱包系统生成)
        • 3.1.2.1 为什么要存储公钥信息
        • 3.1.2.2 golang 通过公钥校验地址是否伪造
    • 3.2 使用主私钥恢复子私钥
      • 3.2.1 主私钥的作用
      • 3.2.1 主私钥恢复子私钥的具体流程
      • 3.2.1 golang使用主私钥恢复子私钥
  • 四、秘钥路径及BIP44
    • 4.1 BIP44 结构概览
    • 4.2 BIP44 路径结构的详细说明
    • 4.3 BIP44 路径实例:以太坊地址生成
    • 4.4 BIP44 的应用场景
  • 五、 为什么:每个account下的address_index不要超过20个?
    • 5.1 建议address_index不要超过20个的原因
    • 5.2 什么是自动扫描和恢复地址?
      • 5.2.1 钱包的扫描和恢复流程
      • 5.2.2 为什么“自动扫描和恢复”重要?
      • 5.2.3 如果每个account下的address_index生成了非常多,会影响钱包使用吗?
  • 六、根据每个address_index根据建议20个,如果我需要上千万个地址,那么应该如何实现?
    • 6.1 实现思路
    • 6.2 golang实现批量生成和管理地址
    • 6.3 除了增加更多的account,还会有其它的解决方式吗?
      • 6.3.1 增加地址的扫描深度
      • 6.3.2 分区索引(Sharded Indexing)
      • 6.3.3 分区索引 代码如何实现
      • 6.3.4 根据address_index 派生地址和 根据 userID 派生地址 的区别是什么?

一、前言

在中心化钱包中,区块链地址的私钥一般通过衍生算法生成,而不是直接通过简单的随机生成。这是因为衍生算法生成的私钥可以通过种子或主密钥管理,更适合多账户管理和增强安全性。

1.1 衍生算法生成的私钥

常见的中心化钱包多采用HD(分层确定性)钱包标准,比如 BIP32、BIP39 和 BIP44 等。通过这些标准:

主私钥或种子:钱包会生成一个主私钥或种子,这个种子通过密码学算法生成,然后可以衍生出一系列私钥。
私钥衍生路径:使用类似m/44’/60’/0’/0/0的路径规则,可以为每个用户、每条链或每个账户生成独立的私钥。
优点只需备份一个种子或主密钥,即可恢复所有私钥,大大简化了备份过程,提高了安全性。

1.2 随机生成的私钥

直接随机生成私钥的方式在一些单账户钱包中可能会使用,但在中心化钱包中很少见。这种方式管理多个账户的私钥较为繁琐,不适合规模化管理。

总结

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/886291.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端怎么获取视口大小

方式一:使用 window.innerWidth 和 window.innerHeight 这两个属性分别返回浏览器窗口的视口宽度和高度(单位为像素),包括滚动条占用的空间(如果有的话)。 例如: const viewportWidth window.…

D3 可以加载的数据格式有哪些?(12种)

D3.js 支持多种数据格式,这些格式涵盖了从简单的表格数据到复杂的地理数据。以下是一些常见的数据格式及其加载方法: D3.js 数据加载方法 d3.blob(input, init) 用途: 加载二进制数据,返回一个 Blob 对象。参数: input: 数据源 URL。init: …

stm32在linux环境下的开发与调试

环境安装 注:文末提供一键脚本 下载安装stm32cubeclt 下载地址为:https://www.st.com/en/development-tools/stm32cubeclt.html 选择 linux版本下载安装 安装好后默认在家目录st下 > $ ls ~/st/stm32cubeclt_1.16.0 …

Go语言中的类型

Go语言是一种静态类型的编程语言,这意味着每个变量和表达式在编译时都有确定的类型。Go提供了丰富的内置类型,包括基本数据类型、复合数据类型和引用类型等。本文将详细介绍Go中的各种类型,并提供实例说明。 基本数据类型 布尔型&#xff0…

【从零开始的LeetCode-算法】3270. 求出数字答案

给你三个 正 整数 num1 &#xff0c;num2 和 num3 。 数字 num1 &#xff0c;num2 和 num3 的数字答案 key 是一个四位数&#xff0c;定义如下&#xff1a; 一开始&#xff0c;如果有数字 少于 四位数&#xff0c;给它补 前导 0 。答案 key 的第 i 个数位&#xff08;1 < …

⾃动化运维利器 Ansible-变量

⾃动化运维利器Ansible-变量 一、变量命名规则二、变量的类型2.1 全局变量2.3 剧本变量2.4 资产变量2.5 facts变量2.6 注册变量 三、变量的优先级 按顺序食用&#xff0c;口味更佳 ( 1 ) ⾃动化运维利器Ansible-基础 ( 2 ) ⾃动化运维利器 Ansible-Playbook ( 3 ) ⾃动化运维利…

蓝桥杯每日真题 - 第12天

题目&#xff1a;&#xff08;数三角&#xff09; 题目描述&#xff08;14届 C&C B组E题&#xff09; 解题思路&#xff1a; 给定 n 个点的坐标&#xff0c;计算其中可以组成 等腰三角形 的三点组合数量。 核心条件&#xff1a;等腰三角形的定义是三角形的三条边中至少有…

项目技术栈-解决方案-注册中心

项目技术栈-解决方案-注册中心 ZookeeperEureka、Nacos、Consul和Etcd参考文章 服务注册中心&#xff08;Registry&#xff09;&#xff1a;用于保存 RPC Server 的注册信息&#xff0c;当 RPC Server 节点发生变更时&#xff0c;Registry 会同步变更&#xff0c;RPC Client 感…

uniapp适配暗黑模式配置plus.nativeUI.setUIStyle适配DarkMode配置

uniapp适配暗黑模式配置 目录 uniapp适配暗黑模式配置setUIStyleDarkMode 适配app-plus manifest.json配置theme.json配置pages.json配置页面切换代码实现同步手机暗黑配置额外适配 参考官方文档&#xff1a;https://uniapp.dcloud.net.cn/tutorial/darkmode.html 主要用到api…

Wireshark中的length栏位

注&#xff1a;Ethernet II的最小data length为46&#xff0c;如果小于&#xff0c;会补全到46. 1.指定网卡抓取的&#xff0c;链路为ethernet。 IPv4 Ethernet II 长度为 14 bytes - L1ipv4 header中的length包括header和payload的总长度 - L2wireshark中length表示抓取的pac…

Spring 4.3 源码导读

Spring Framework 是一个功能强大的开源框架&#xff0c;广泛用于企业级 Java 应用程序开发。Spring 4.3 是一个成熟的版本&#xff0c;提供了丰富的功能和模块。以下是对 Spring 4.3 源码的一些关键部分的导读&#xff0c;帮助你更好地理解其架构和设计理念。 1. 源码获取 从…

前端开发迈向全栈之路:规划与技能

一、前端开发与全栈开发的差异 前端开发主要负责构建和实现网页、Web 应用程序和移动应用的用户界面。其工作重点在于网页设计和布局&#xff0c;使用 HTML 和 CSS 技术定义页面的结构、样式和布局&#xff0c;同时运用前端框架和库如 React、Angular 或 Vue.js 等构建交互式和…

后端总指挥---文件接口

为了方便编写项目时前后端的连接&#xff0c;在这里引进文件接口的概念&#xff0c;通常包含以下几个部分&#xff1a; 功能请求路径请求方式传输的数据类型请求入参数据样本响应的出参响应成功后的数据样本 这样前端编程与后端编程 可以根据文件接口这个文档来分别编写前后端&…

ISUP协议视频平台EasyCVR视频设备轨迹回放平台智慧农业视频远程监控管理方案

在当今快速发展的农业领域&#xff0c;智慧农业已成为推动农业现代化、助力乡村全面振兴的新手段和新动能。随着信息技术的持续进步和城市化进程的加快&#xff0c;智慧农业对于监控安全和智能管理的需求日益增长。 视频设备轨迹回放平台EasyCVR作为智慧农业视频远程监控管理方…

通过wsl配置Qt的中文开发环境

本文列举了一些在WSL上配置Qt编译环境中遇到的一些问题及解决方案 关键词: Win10 22HUbuntu18.04xfce桌面交叉编译arm64qt / qtcreator中文输入及显示标题 安装qt,qtcreatorqt.qpa.screen: QXcbConnection: Could not connect to displayld: cannot find -lGLqmake: could no…

前端web

题目&#xff1a;制作带有下拉悬停菜单的导航栏 效果图 一、先制作菜单栏 <body> <div id"menu"> <div id"container"> <div class"item">游戏1 <div cla…

PostgreSQL 跨数据库访问

有这样的一个业务场景。有一个表对象在数据库 A 中&#xff0c;但是在同一个实例的数据库 B 中我想访问位于 A 库中的这个对象&#xff0c;那么有什么好的方法可以实现呢。 假设在数据库 cloud_test 中有如下的对象&#xff0c;现在想在数据库 cloud_health 中访问这个对象。 …

《应用概率统计》

《应用概率统计》主要有综合报告、学术论文、应用研究、应用简报、教学研究、学术活动报道、书评、新书介绍等栏目。 一、《应用概率统计》是中国数学会概率统计学会主办的全国性学术刊物&#xff0c;主要刊登概率论与数理统计的理论和应用两方面有创造性的学术论文&#xff0c…

Vue之插槽(slot)

插槽是vue中的一个非常强大且灵活的功能&#xff0c;在写组件时&#xff0c;可以为组件的使用者预留一些可以自定义内容的占位符。通过插槽&#xff0c;可以极大提高组件的客服用和灵活性。 插槽大体可以分为三类&#xff1a;默认插槽&#xff0c;具名插槽和作用域插槽。 下面…

unity3d————Resources异步加载

知识点一&#xff1a;Resources异步加载是什么&#xff1f; 在Unity中&#xff0c;资源加载可以分为同步加载和异步加载两种方式。同步加载会在主线程中直接进行&#xff0c;如果加载的资源过大&#xff0c;可能会导致程序卡顿&#xff0c;因为从硬盘读取数据到内存并进行处理…