如果当你按下一个按钮的时候,你有极其微弱的概率获得一笔巨额财富,或者你什么也没有获得。
而且按下这个按钮的成本几乎完全为零时,你会选择按下吗?
这个按钮的开发非常容易,你只需要理解 web3
私钥的密码学原理,就可以轻松开发出这个按钮。
📖阅读本文,你将
- 获取一个
demo
仓库。 - 了解
web3
hash
碰撞的原理,了解 【暴富抽奖器】 的本质以及web3
密钥安全的本质。 - 认识
wgami
中查询address
余额的接口。
1. 私钥和地址的海洋
在大部分 web3
链中,私钥是 64
位的十六进制字符串。
那么,它能容纳多少个不同的私钥呢?
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
私钥的密码学原理,我们很容易开发出【暴富抽奖器】。
- 在
web3
生成私钥是一件非常容易的事情,并且0成本。 - 在
web3
通过私钥生成address
是一件非常容易的事情,并且0成本。 - 你生成的
address
非常可能和另一个正在被使用的address
相同,一旦相同,你将有资格获取这个address
名下的所有token
。
(当然,这并不道德,能不能和做不做是两码事,本文只讨论技术层面)
因此,理论上每当你生成 1
个钱包地址的时候,你其实正在进行一次 【暴富抽奖】。
3. 【暴富抽奖器】的代码
先上 demo
: wagmi-demos.vercel.app/04-fortune-…
再上源码仓库:github.com/zhangshichu…
如果你阅读过我的上一篇文章 《web3实战课03:认识密钥和签名,批量创建账户》 你应该能知道如何快捷地批量生成 web3
私钥。
而本文只需要增加一个步骤:查询地址余额
。
import { usePublicClient } from "wagmi";
const balance = await client?.getBalance({
address: account.address,
});
非常容易。
4. 【暴富抽奖器】效果
用手机或者电脑打开页面,当你点击按钮的时候,你会批量创建 100
个 web3
账户,并查询其余额。
理论上,这其实是一种 【抽奖行为】,只不过概率非常感人罢了。
大概为:
1/ (10 ** 42)
这个数量级吧。
这是必然的,如果概率太高,web3
早就没有安全可言了。
继续贫穷吧,强盗没那么好当。
关于我
我是春哥,一个前端工程师。
目前正在学习 web3
领域。
如果你有任何问题,欢迎留言。
原文链接:https://juejin.cn/post/7355012708581933075 作者:摸鱼的春哥