惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

W
WeLiveSecurity
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Hacker News - Newest:
Hacker News - Newest: "LLM"
Cloudbric
Cloudbric
V
Visual Studio Blog
L
LangChain Blog
A
About on SuperTechFans
B
Blog
T
Tenable Blog
罗磊的独立博客
Hacker News: Ask HN
Hacker News: Ask HN
Blog — PlanetScale
Blog — PlanetScale
博客园 - 三生石上(FineUI控件)
The Register - Security
The Register - Security
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
P
Palo Alto Networks Blog
U
Unit 42
WordPress大学
WordPress大学
D
Darknet – Hacking Tools, Hacker News & Cyber Security
N
News and Events Feed by Topic
T
Threat Research - Cisco Blogs
C
Check Point Blog
Security Latest
Security Latest
M
MIT News - Artificial intelligence
Application and Cybersecurity Blog
Application and Cybersecurity Blog
宝玉的分享
宝玉的分享
P
Proofpoint News Feed
NISL@THU
NISL@THU
Forbes - Security
Forbes - Security
S
Securelist
Security Archives - TechRepublic
Security Archives - TechRepublic
Hugging Face - Blog
Hugging Face - Blog
aimingoo的专栏
aimingoo的专栏
Latest news
Latest news
GbyAI
GbyAI
T
Troy Hunt's Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
L
LINUX DO - 热门话题
V2EX - 技术
V2EX - 技术
小众软件
小众软件
Google DeepMind News
Google DeepMind News
K
Kaspersky official blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
O
OpenAI News
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
N
Netflix TechBlog - Medium
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Google DeepMind News
Google DeepMind News
P
Proofpoint News Feed

smallyu的博客

为什么买的加密货币一定要去中心化 RISC-V 虚拟机无法代替 EVM 虚拟机 Polkadot 的 Existential Deposit 机制错在哪里 利息,套利,交易策略,金融市场 LayerZero 从来不挑战比特币的地位 默认参数引起的以太坊节点运行错误 硬件钱包与资产安全 预测市场比币圈更赌场 为什么去中心化的跨链桥不可能实现 我对于 AI 时代的答案 不要投资任何隐私币 区块链技术世界的三大真理 以太坊 AA 钱包的致命问题是什么 基于 AI 语义执行的 MCP 区块链的设计 一个集成 Geth 和 CometBFT 的兼容层 我的加密货币定投策略(二) DeFi 基础: 理解 AMM 定价机制 Go 语言 GMP 调度器的原理是什么 Web3 项目分析计划 对 Psyche Network 项目的分析 continuation 教程: 理解 CPS 如何开发一个比特币符文(Runes)协议 比特币脚本开发教程 我从王垠的计算机科学视频班学到了什么 区块链技术面试题(2025年版) Rust 语言容易让新手困惑的一个“过度优化” Solana 智能合约开发教程 (1) 尝试开发一个最小 EVM 虚拟机 基于 ZK 的链上身份系统设计 一个 Web3 打赏系统的设计 鼓吹 Cursor 的人技术能力都差 关于 Code Review 的礼节 假如启动一个新的以太坊 PoS 网络 发行加密货币的最好方式 所有 BFT 共识的区块链都是中心化的 对 2025 年区块链行业的预测 Restaking 项目的经济难题 如何看懂任意区块链项目的技术架构 为什么不要做以太坊的二次开发 为什么不要做智能合约开发和 DeFi 开发 我的加密货币定投策略(一) PoS 类型的区块链如何处理分叉 Ethereum Casper 为什么需要 EIP-7251 区块链中的 PBFT 不需要第二次投票 开发者的思维方式 发币的核心要点 炒币投资的小 tips 为什么说 PoW 比 PoS 更加去中心化 牛市对普通人来说意味着什么 如何健康地远程工作 为什么比特币不用概率加密函数 程序员的 “服从权威” 心理 区块链技术面试题 如何区分公有链和联盟链 对 Layer 2 项目创业想法的回复 对区块链共识机制的理解 Pebbling Game 鹅卵石游戏 PDP 文件证明的局限性 不要小瞧 ChatGPT 为什么炒币不是一个好主意 一种在区块链上生成随机数的机制 为什么以太坊的私钥计算不可逆 关于以太坊的私钥碰撞 Proof of Storage/Space/Replication 的区别 Proofs of Retrievability 文件证明的含义 对 S-PDP 文件证明的示例和解释 我的加密货币交易机器人 对区块链行业的见闻 随机确认块的共识机制 VRF + BFT 共识引起交易失败的问题 为什么要重视编程思想 对 Web 3.0 的理解 GitBook 好用吗? 一种区块链节点存储扩容的方式 一种基于“自我中心主义”的共识机制 链表常见算法题及解析 基于 Multi-Linked List 的区块链设想 理解哈希函数与序列化 联盟链比公有链差在哪儿 在 Dijkstra 算法中保存路径 为什么数字货币使用区块链是政治问题 区块链:下一代数字身份认证体系的基石 网页技术能实现 3D 建模吗? 给区块链一个定义 从 Erlang 开始了解 Actor 模型 一种侧边导航栏的交互方式 Rust 的 ownership 是什么? Haskell 中的 Monad 是什么? 浅析 Libra 背后的区块链技术 对区块链的理性认识 Rust 基础语法概述 基于 Java 的爬虫框架 WebCollector Kotlin:简化版的 Scala JavaScript 有关联数组吗? 主流编程语言的异常处理机制 Go 语言基本语法 Scala 语法基础 用 Scala 改写 Java 浅度实践 Python 获取海贼王更新信息 HTML5 音乐可视化
“猜均值的2/3” dApp 游戏设计
2022-12-27 · via smallyu的博客

2022-12-27

猜均值的2/3 是一个经典的博弈游戏,现在把它改造成运行在区块链上的 dApp 游戏,这是游戏的基本规则:

  1. 玩家支付 任意金额 参与游戏
  2. 计算所有用户支付的 金额总和
  3. 计算 金额总和 平均值的 2/3 作为 胜利数字
  4. 玩家支付的 任意金额 最接近 胜利数字 则获胜

游戏的奖励规则是:

  1. 获胜者获得本轮游戏所有用户支付的 金额总和
  2. 合约在每轮游戏抽取 金额总和 的 1% 作为服务费

一个重要的问题是,每轮游戏多少玩家参与?或者说每轮游戏什么时候结束?关于游戏结束的规则是这样:

  1. 每一轮游戏,当玩家参与的时候,可以知道玩家是第 n 个参与的
  2. 生成一个随机数 x(10<=x<=100)
  3. 根据 nx,生成一个随机数的边界 l, r = n-x, n+x
  4. [l, r] 的区间内生成一个随机数 y
  5. 如果 y == n,本轮游戏结束

还有一点补充规则:

  1. 如果一个用户多次参与游戏,以第一次参与结果为准
  2. 如果多个用户支付的 任意金额 相同,第一个参与的用户获胜

上面是这个游戏的全部规则。

结束游戏的规则有点复杂,举一个具体的数值,比如有一个玩家,是第 n=50 个参与进游戏的,然后生成了一个随机数 x=10,那么生成的随机数边界就是 l, r = 45, 55。在范围 [45, 55] 中再生成一个随机数,如果正好是 50,本轮游戏结束。

为什么要这样做?因为区块链上的数据是公开的。在原版的“猜均值的2/3”游戏中,玩家选择的数字,相互是保密的。但在区块链上很难做到这一点。所以这里提出的 dApp 版本游戏规则,至少有两点和原版规则不同:

  • 玩家参与游戏支付的金额是无限制的,可以是 0,也可以无限大,而原版规则有上限
  • 玩家数量是不确定的,原版规则是知道有几名玩家参与

这样差异的设计都是因为,区块链上的数据是公开的,所以要引入一些随机的机制。如果没有随机结束的机制,在玩家数量确定的情况下,越是后面参与的玩家,越有优势,因为可以根据前面参与玩家的记录,推算出自己用哪个数字参与更有可能获胜。

当然,最后参与的玩家并不一定有能力扭转局势,尤其是在参与数值有上限的情况下。但如果玩家数量是随机的,就不存在“后面参与的玩家”一说,因为谁都不知道游戏什么时候结束,谁是最后一个玩家。所以即使玩家能够支付出扭转局势的金额,也会被后面的玩家拉下来。

至于原版游戏要求参与数值为整数,dApp 版本的参与数值可以没有限制,可以是小数。是因为原版游戏是人为给出参与数值,而 dApp 版本可以在计算机上自由输入,并且结果是智能合约计算的,不限制精度也没有影响。

然后解释一下游戏结束的规则。这个规则的效果是,能在大多数情况下,让游戏在参与人数为 [10, 100] 的区间内结束。这个区间对应 规则 9x 的范围。

这个规则可以这样理解,每个用户都拥有能力结束游戏,但是能力是随机的,最高 1/10,最低 1/100。如果拥有 1/10 的能力,就是有 1/10 的可能性让游戏结束。

假设所有用户都拥有最高的能力 1/10,那么游戏大概率会在 10 个人参与后结束。每个人触发“游戏结束”这个事件的概率是独立的,不管多少人参与都是 1/10。参与的人数越多,结束的可能性越大,因为不结束的可能性是 9/10 的人数次方。

假设所有用户都拥有最低的能力 1/100,那么游戏大概率会在 100 个人参与后结束。

所以 规则 9x 的范围大概就限定了参与人数的范围。当然,这里的人数范围 [10, 100] 不是严格的概率计算。

按照上面定义的游戏结束规则,这里模拟了 10 万次运行的结果,记录下游戏会在“有多少个玩家参与”的时候结束,代码在这里:guessavg/emulate_tool

这个图的横坐标是参与游戏的玩家数量,纵坐标是在对应的数量上,游戏结束的次数。比如在接近 1 的位置上,有 2500 次,说明在 10 万次游戏中,有 2500 次 1 个玩家参与就结束了。

如果次数不够直观的话,可以看这个比例的图,每个数字上结束的比例不超过 2.5%。越靠前的位置,游戏结束的可能性越大,因为每次都是从 0 开始,前面的位置结束游戏的机会更多一点。

这个比例统计图更能够说明结果,游戏有接近 20% 的概率在参与人数小于 10 的情况下结束,有接近 70% 的概率在参与人数为 [10, 100] 的范围内结束。参与人数大于 300 才结束游戏的概率,只有 0.07%。

虽然这个规则形成的结果,概率上不是完整的正态分布,但是基本上能够满足一开始的需求,也就是让游戏在随机的时间点结束,并且结束的时间不会很离谱,不会导致参与人数太少或者太多,而且还提供了一定的小概率,允许参与人数达到 500 左右。

相信这会是一个合理的设计。

更新(2025.04.22)

一年多前,我写过一个 《“猜均值的2/3” dApp 游戏设计》的设想。

偶然想起来,现在有了功能强大的 ChatGPT 的帮助,让这个游戏在实现上变得简单,合约和前端页面都可以轻松完成。今天只用了 2 个小时,就完成了这个网页的 Demo。

可以通过这个页面访问游戏:https://guessavg.oiia.network/

有几点需要说明:

  1. 目前这个 dApp 小游戏运行在 Oiia Network 上,合约地址 0x6eb07...BA8F1
  2. 参加游戏实际上就是调用合约的函数,同时给合约转账一笔钱,例如交易 0x1bfb2...10936
  3. 合约代码在仓库 guessavg/contract,理论上可以部署到任意网络,因为 OIIA 不要钱,我就拿来用了。
  4. 前端代码仓库在 guessavg/game,和合约代码配合使用。
  5. OIIA 可以在 faucet 领到一些 https://faucet.oiia.network/
  6. 这个私钥有 10 个 OIIA,也能拿来玩一下。但是从游戏机制上,是不允许相同地址重复参与的,需要先把 OIIA 转到陌生地址才行。 fdf0aec857f3ac4fe146e0d00fb3a7a729646a081719df3f4e168a541a21893b
  7. 前端网页在添加 Oiia 网络到 Metamask 的时候,会报错,但实际上成功了,我没有深入排查原因。一个月前相同的代码还没报错来着。
  8. Oiia Network 随时会消失。
  9. 只是玩玩……

更新(2025.05.06)

Oiia Network 今天起就完全停止运行了,因为我不想为没有人用的网络付服务器费用了。现在这个猜均值的游戏 Demo 已经转移部署到 Base 网络上。

  1. 游戏 Demo 地址:https://guessavg.github.io/game/
  2. Base 上的合约地址:0x4BbeE...868D2
  3. 需要 Base 网络上的 ETH 参与游戏。
  4. 游戏降低了难度,只需要两三个玩家就会结束一轮游戏。