web3实战课03:认识密钥和签名,批量创建账户

📖阅读本文,你将

  1. 获取一个 demo 仓库和演示地址
  2. 比较粗浅草率地理解 web3 中主流的私钥、公钥、地址、签名等概念。
  3. 简单写一个 批量创建账户 的 demo

1. 为什么有了私钥,就有了一切

web3 领域,如果一个人获得了你的 私钥,那么实际上,它就拥有了你在这个钱包里的一切资产。

因为,在 web3 领域里,其他的一切身份证明都是基于 私钥 产生的。(当然,这里是把"助记词"也当做私钥的一种)

总体来说,通常步骤如下:

  1. 生成一个私钥
  2. 私钥 生成 公钥
  3. 公钥 生成 地址

但具体到某个链上,私钥到钱包地址的过程,是存在差异的。

以【以太坊】为例,通常步骤如下:

但是 BTCSOLANA 在具体的生成细节上和以太坊有差异。

就不具体展开了。

但无论那种链,从私钥可以生成公钥、地址这一过程,都是一样的。

2、私钥与签名

私钥除了生成钱包地址,另一个重要作用是签名。

签名是用来证明你是你,而不是别人。

传统的签名过程,往往是签名者持有私钥、验证者持有公钥,然后签名者用自己的私钥对信息进行签名,验证者用公钥解密签名,如果解密内容与原信息一致,则验证通过。

如图:【常规的签名过程】

web3 领域里,签名过程与传统的签名过程不同。

以太坊 为例,它的签名过程分为如下几部:

  1. 私钥生成公钥,公钥生成钱包地址。(本文第一节已详细论述)
  2. 验证者把签名信息发送给签名者,签名者用自己的私钥对(签名信息 + 随机数 nonce)进行签名,并把签名结果和随机数 nonce 发送给验证者。
  3. 验证者得到签名后,使用 初始内容 + 签名结果 + nonce 反推出若干个可能的公钥。
  4. 验证以上公钥生成的地址,是否与签名者的地址一致。

如图:

3、批量创建账户

3.1 创建私钥的 API

上面说过,私钥是一个随机字符串,但不同链的私钥长度并不一定一致,此处我们先以 以太坊 为例,介绍如何快捷创建一个私钥。

众所周知,wagmi 是对 viemhooks 封装。其天然 peerDependency 依赖 viem

因此,在 wagmi 项目里,我们可以直接引入 viem。(因为你必然依赖了它)

因此,你可以使用如下 API 创建私钥:

js 复制代码
import { generatePrivateKey } from 'viem/accounts'

const pk = generatePrivateKey()

3.2 从私钥到地址(账户信息)的 API

js 复制代码
import {
privateKeyToAccount } from 'viem/accounts'

const account = privateKeyToAccount(pk)

这部分到了写代码的部分,反而是最简单的,因为 viem 已经封装好了。

但真正需要我们关注的,是 私钥公钥地址签名 之间的关系。

demo 中,我实现了以下效果:

4、demo地址和源码

源码:github.com/zhangshichu...

demo: wagmi-demos.vercel.app/03-batch-cr...

关于我

我是春哥,一个前端工程师。

目前正在学习 web3 领域。

如果你有任何问题,欢迎留言。

相关推荐
小堂子这厢有礼了23 分钟前
Chet.QuartzNet.UI v2.3.0 大更新!表格重构 + 系统配置 + 分析页全面升级!
前端·后端·ui·重构·c#·vue
触底反弹29 分钟前
⚡ Promise.all 性能优化:让 Agent 的工具调用飞起来
javascript·人工智能·后端
程序员爱钓鱼34 分钟前
Rust 控制流 if 详解:条件判断与 if 表达式
前端·后端·rust
心中有国也有家1 小时前
AtomGit Flutter 鸿蒙客户端:错误处理与优雅降级策略
android·javascript·flutter·华为·harmonyos
Listen·Rain1 小时前
Vue3中computed详解
前端·javascript·vue.js
kyle~2 小时前
Swagger ---基于 描述文件 生成 交互式API文档 的工具
前端·后端·规格说明书·说明文档
meilindehuzi_a9 小时前
从零理解并实现 RAG:用 LangChain.js 构建语义检索问答系统
开发语言·javascript·langchain
世界哪有真情10 小时前
拿人类意识卡 AI?等于用 bug 验收正式产品
前端·人工智能·后端
鱼樱前端10 小时前
别再自己拼凑了!这款 Vue 3.5+ 严肃产品级组件库,把 AI 对话、工作流和复杂数据全包了!
javascript·vue.js·github
Listen·Rain11 小时前
Vue3:setup详解
前端·javascript·vue.js