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

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

相关推荐
大怪v12 小时前
AI抢饭?前端佬:我要验牌!
前端·人工智能·程序员
新酱爱学习12 小时前
字节外包一年,我的技术成长之路
前端·程序员·年终总结
小兵张健12 小时前
开源 playwright-pool 会话池来了
前端·javascript·github
IT_陈寒15 小时前
Python开发者必知的5大性能陷阱:90%的人都踩过的坑!
前端·人工智能·后端
codingWhat15 小时前
介绍一个手势识别库——AlloyFinger
前端·javascript·vue.js
Lee川15 小时前
深度拆解:基于面向对象思维的“就地编辑”组件全模块解析
javascript·架构
代码老中医15 小时前
2026年CSS彻底疯了:这6个新特性让我删掉了三分之一JS代码
前端
进击的尘埃15 小时前
Web Worker 与 OffscreenCanvas:把主线程从重活里解放出来
javascript
不会敲代码115 小时前
Zustand:轻量级状态管理,从入门到实践
前端·typescript
踩着两条虫15 小时前
VTJ.PRO 双向代码转换原理揭秘
前端·vue.js·人工智能