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

📖阅读本文,你将

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

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

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

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

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

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

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

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

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

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

就不具体展开了。

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

2、私钥与签名

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

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

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

如图:【常规的签名过程】
web3实战课03:认识密钥和签名,批量创建账户

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

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

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

如图:

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

3、批量创建账户

3.1 创建私钥的 API

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

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

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

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

import { generatePrivateKey } from 'viem/accounts'

const pk = generatePrivateKey()

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

import {
privateKeyToAccount } from 'viem/accounts'

const account = privateKeyToAccount(pk)

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

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

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

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

4、demo地址和源码

源码:github.com/zhangshichu…

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

关于我

我是春哥,一个前端工程师。
目前正在学习 web3 领域。
如果你有任何问题,欢迎留言。

原文链接:https://juejin.cn/post/7354171319348150335 作者:摸鱼的春哥

(0)
上一篇 2024年4月7日 上午10:21
下一篇 2024年4月7日 上午10:32

相关推荐

发表回复

登录后才能评论