web3实战课04:【暴富抽奖器】和它的密码学原理

如果当你按下一个按钮的时候,你有极其微弱的概率获得一笔巨额财富,或者你什么也没有获得。 而且按下这个按钮的成本几乎完全为零时,你会选择按下吗?

这个按钮的开发非常容易,你只需要理解 web3 私钥的密码学原理,就可以轻松开发出这个按钮。

📖阅读本文,你将

  1. 获取一个 demo 仓库。
  2. 了解 web3 hash 碰撞的原理,了解 【暴富抽奖器】 的本质以及 web3 密钥安全的本质。
  3. 认识 wgami 中查询 address 余额的接口。

1. 私钥和地址的海洋

在大部分 web3 链中,私钥是 64 位的十六进制字符串。

那么,它能容纳多少个不同的私钥呢?

js 复制代码
16 ** 64 = 1.1579209e+77

所以,一个 web3 链的私钥海洋,大概可以容纳 1.1579209e+77 个有效私钥吗?

答案是:

为什么?

因为最终决定一个密钥有效性的,还是其 address 钱包地址。

以【以太坊】为例,其钱包长度为 40 个十六进制字符。

钱包海洋的容量为 16 ** 40 = 1.46150164e+48

虽然私钥海洋的 1.1579209e+77 数量级,要远大于地址 1.46150164e+48 数量级。

但最终提供给验证方的,还是 address

因此我们可以认为:

如果私钥 A 和 私钥 B,生成的 address 相同,那么这两个私钥是重叠的。它们具备完全相同的密码学能力。

这也就是密码学中所谓的 Hash 碰撞原理。

2. 【暴富抽奖器】的原理是什么?

根据 web3 私钥的密码学原理,我们很容易开发出【暴富抽奖器】。

  1. web3 生成私钥是一件非常容易的事情,并且0成本。
  2. web3 通过私钥生成 address 是一件非常容易的事情,并且0成本。
  3. 你生成的 address 非常可能和另一个正在被使用的 address 相同,一旦相同,你将有资格获取这个 address 名下的所有 token

(当然,这并不道德,能不能和做不做是两码事,本文只讨论技术层面)

因此,理论上每当你生成 1 个钱包地址的时候,你其实正在进行一次 【暴富抽奖】。

3. 【暴富抽奖器】的代码

先上 demo: wagmi-demos.vercel.app/04-fortune-...

再上源码仓库:github.com/zhangshichu...

如果你阅读过我的上一篇文章 《web3实战课03:认识密钥和签名,批量创建账户》 你应该能知道如何快捷地批量生成 web3 私钥。

而本文只需要增加一个步骤:查询地址余额

js 复制代码
import { usePublicClient } from "wagmi";
const balance = await client?.getBalance({
  address: account.address,
});

非常容易。

4. 【暴富抽奖器】效果

用手机或者电脑打开页面,当你点击按钮的时候,你会批量创建 100web3 账户,并查询其余额。

理论上,这其实是一种 【抽奖行为】,只不过概率非常感人罢了。

大概为:

js 复制代码
1/ (10 ** 42) 

这个数量级吧。

这是必然的,如果概率太高,web3 早就没有安全可言了。

继续贫穷吧,强盗没那么好当。

关于我

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

目前正在学习 web3 领域。

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

相关推荐
孜然卷k6 分钟前
前端处理后端对象类型时间格式通用方法封装,前端JS处理JSON 序列化后的格式 java.time 包中的日期时间类
前端·json
幼儿园技术家10 分钟前
微信小程序实现用户进行推客的注册绑定
前端
gwcgwcjava13 分钟前
[技术积累]成熟的前端和后端开发框架
前端
bbsh209915 分钟前
SiteAzure:SetCookie 未设置Secure
前端·网络·安全·siteazure
Mintopia31 分钟前
计算机图形学环境贴图(Environment Mapping)教学指南
前端·javascript·计算机图形学
码农之王33 分钟前
(二)TypeScript前置编译配置
前端·后端·typescript
spmcor35 分钟前
css 之 Flexbox 的一生
前端·css
shenyan~35 分钟前
关于 WASM: WASM + JS 混合逆向流程
开发语言·javascript·wasm
Mintopia38 分钟前
Three.js 高级纹理(Advanced Textures):超越基础,打造沉浸式 3D 世界
前端·javascript·three.js
玄玄子38 分钟前
JS Promise
前端·javascript·程序员