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 领域。

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

相关推荐
晚烛5 小时前
实战前瞻:构建高可靠、强协同的 Flutter + OpenHarmony 智慧教育平台
javascript·flutter·html
快乐肚皮6 小时前
一文了解XSS攻击:分类、原理与全方位防御方案
java·前端·xss
保护我方头发丶6 小时前
ESP-wifi-蓝牙
前端·javascript·数据库
想学后端的前端工程师6 小时前
【Flutter跨平台开发实战指南:从零到上线-web技术栈】
前端·flutter
老王Bingo6 小时前
Qwen Code + Chrome DevTools MCP,让爬虫、数据采集、自动化测试效率提升 100 倍
前端·爬虫·chrome devtools
董世昌416 小时前
什么是扩展运算符?有什么使用场景?
开发语言·前端·javascript
Yaru117 小时前
Vue 3.6 预览版特性
javascript·vue.js
来杯三花豆奶7 小时前
Vue 3.0 Mixins 详解:从基础到迁移的全面指南
前端·javascript·vue.js
想学后端的前端工程师7 小时前
【React性能优化实战指南:从入门到精通-web技术栈】
前端·react.js·性能优化
白兰地空瓶7 小时前
React Hooks 深度理解:useState / useEffect 如何管理副作用与内存
前端·react.js