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

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

相关推荐
Bruce_Liuxiaowei1 小时前
网页版 DeepSeek “harness desktop“ WebGL 上下文创建失败排查实录
开发语言·javascript·webgl
utmhikari1 小时前
【AI原生】借助AI之力优化个人博客前端样式
前端·css·hexo·next·个人博客·ai-native·vibe coding
小凯在掘金2 小时前
为什么箭头函数不能作为构造函数?
前端·javascript
可乐鸡翅yeah_2 小时前
网页端 M3U8 播放器性能监控,怎么看播放卡顿指标
javascript·ffmpeg·音视频·safari·m3u8
可乐鸡翅yeah_2 小时前
M3U8 防盗链 URL‑Token 签名,新手开发实操避坑
开发语言·javascript·ios·音视频·safari
2603_965896622 小时前
JS原型与原型链|对象继承与实例底层原理
开发语言·javascript·原型模式
JustHappy3 小时前
「vConsole MCP🛠️」我让 AI 直接看见任何 H5 的日志和请求帮你 debug
前端·javascript·程序员
codeGoogle3 小时前
Vue3 UIKit 实战:把聊天、会话、主题和移动端适配全部封装好
前端
大龄秃头程序员4 小时前
iOS Method Swizzling 的工程化实践:如何处理多重交换与第三方冲突
前端
liangshanbo12154 小时前
Webpack 文件指纹面试题整理
前端·webpack·node.js