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

📖阅读本文,你将

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

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

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

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

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

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

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

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

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

就不具体展开了。

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

2、私钥与签名

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

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

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

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

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

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

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

如图:

3、批量创建账户

3.1 创建私钥的 API

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

众所周知,wagmi 是对 viem 的 hooks 封装。其天然 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 领域。

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

相关推荐
量化分析码农27 分钟前
股票历史数据的复权参数对照:多级别返回的字段与数值差异
java·javascript·后端
亿元程序员2 小时前
太牛了!这AI做出来的游戏,居然还能变现!
前端
hellice2 小时前
闪传 FlashDrop 实战:我用 300 行 Node 代码做了个「4 位取件码」临时文件中转站
前端·产品
用户0829773260052 小时前
RTX 5500 MIG 踩坑记录:切分之后模型跑不起来,排错整整一下午
前端
Lank_M2 小时前
AI 放大后的图更清楚,但它不能当原图入库
前端
Swot2 小时前
SvelteKit 数据流研究:`+page.js` 和 `+page.server.js` 到底谁在跑,数据又去了哪儿
前端·后端
用户4147679304152 小时前
Windows 触摸屏上 Swiper 轮播滑不动?可能是内部滚动容器抢走了你的手势
前端
张明君644512 小时前
从一个 Referer 引发的 403,到 SSR 服务失稳:Astro 流式渲染与缓存失效分析
前端
律宏阔2 小时前
微信小程序 + Taro + TDesign 去掉 [&&&],让普通 Tailwind 类接管局部样式
前端·微信小程序·taro
费曼学习法2 小时前
把 3 个内部服务封装成 MCP Server 的工程复盘:进程模型、超时与错误契约
前端