探索 CryptoKitties — 第二部分:CryptoMidwives

本文对 CryptoKitties 游戏中的经济机制进行了深入分析,特别是关于猫咪繁殖的过程以及经济中出现的新角色“CryptoMidwives”。通过数据分析,文章探讨了与繁殖相关的链上事件频率、经济激励、以及市场中的竞争情况,并提出了未来可能的研究方向。

探索 CryptoKitties — 第二部分:CryptoMidwives

这是关于从以太坊区块链中提取和分析数据的博客文章的第二部分。如果你已经阅读过 第一部分,可以跳过引言。)

引言

如果你正在阅读本篇文章,你可能已经听说过在过去几个月里在以太坊网络上引起每个人注意的游戏:CryptoKitties!

简而言之,这款游戏的内容包含收集虚拟猫。猫由游戏的玩家创建,玩家可以繁殖两只猫以生成新猫。每只猫都有自己的基因序列,决定了它们的身体特征。它们的基因组是父母基因加上一些随机性。在繁殖之外,由游戏背后的公司 Axiom Zen 创建的预定义特征猫的数量可达到 50,000。游戏中有猫的购买和出售市场,还有一个用于“租赁”猫进行繁殖的市场。你可以在 这里 阅读更多关于这款游戏的信息。

Block Science 是一家专注于去中心化经济系统设计与评估的技术研究和分析公司。分析 CryptoKitties 经济的各个方面似乎是一个很好的机会,既可以改进我们的数据提取工具,同时也可以获取一些来自实时(和生动!)去中心化应用的现实世界数据。

本博客文章分为两个部分:

  • 第一部分 涵盖了与从以太坊区块链中提取和转换数据相关的技术方面。
  • 第二部分(本文)包含了一些游戏数据的实际分析。

数据分析

我们开始分析,通过创建一个数据框,记录由三个 CryptoKitties 智能合约在区块 4605167 到 5374870 之间的所有日志条目:游戏的 核心机制出售拍卖繁殖拍卖(在那里玩家“租赁”他们的猫与其他猫繁殖)。从计数(图表 1),我们得出了两个有趣的发现:

图表 1 — CryptoKitties 事件的频率计数

  1. 怀孕事件的发生频率远高于 繁殖拍卖智能合约 的拍卖成功事件。这应该意味着大多数繁殖发生在属于同一玩家的猫之间,因为我们从游戏的源代码知道,每个成功的繁殖拍卖都会导致怀孕;
  2. 转移事件的发生频率仅比导致它的事件总和高出 6% — 从源代码中,我们知道每个创建或取消的拍卖、每次出生和每次销售都会导致一次转移。这意味着 6% 的转移是通过比官方智能合约更具其他机制完成的 — 比如玩家将猫赠送给朋友。我们应该会看到这一百分比上升,一旦在 CryptoKitties 基础上建立的新游戏变得受欢迎,玩家开始在挑战中“失去”他们的猫,或者一旦更多具有更高级交易功能的去中心化交易所出现,允许 CryptoKitties 上架。

生育猫咪的经济学

看到与新猫出生相关的经济成分存在,我们接着对这个过程进行更详细的研究。当两只猫繁殖时,会在怀孕猫上设置一个变量,指定怀孕将在哪个区块完成。然而,以太坊网络中没有内在的计时器允许代码在某个区块自动执行。这意味着必须有某人调用游戏智能合约中的一个函数来“出生”新猫。这个 giveBirth 函数的目的就是:当调用时,它会检查怀孕是否达到预期。这只有在调用 giveBirth 函数时,后代的基因才由一个闭源算法决定。为了降低玩家操控系统的可能性,开发者创建了一个激励机制,确保 giveBirth 能在怀孕完成后尽快被调用。

由于这个 giveBirth() 函数包含一个随机元素,因此在期望的出生时间之后不久(在 250 个区块内,约 30 分钟)快速调用它是至关重要的。如果调用花费的时间更长,会使恶意用户能够“重滚”其基因组合的随机元素,从而获得相对于其他繁殖者的不公平优势。为了防止这种情况发生,我们允许任何人调用 giveBirth(),并将所有生产费用提供给首先成功生产新小猫的调用者。 ( 来源

提到的 250 个区块的截止日期表明,CryptoKitties 使用预期出生区块之前的区块哈希作为确定新小猫基因的熵来源。区块哈希只能在 EVM 访问到 256 个区块内可用 (~250)。在此之后,对 blockhash 的调用将返回零。这意味着如果没有外部代理的激励,玩家可以模拟新猫的出生,如果他们不喜欢结果,可以等待 256 个区块后再尝试一次。

更新 (2018年8月19日): 最近发布的 Erays 论文 让我们相信,这种经济激励比我们最初认为的更为重要。根据论文,如果出生发生在 256 个区块周期之后,CryptoKitties 不会使用 '零' 作为熵的来源,而是使用当前区块号。意味着攻击者不仅会获得一次重新抽样的机会,还可以通过在不同区块模拟新猫的出生获得任意次数的重新抽样。

因此,该游戏从每次繁殖(称为 birthing fee)中收取费用,并允许任何以太坊账户通过在指定区块(或之后)上调用怀孕猫的 giveBirth 函数来索取该费用。新猫依然属于怀孕猫的所有者。但是,任何人都可以给已结束怀孕期的猫生产小猫,并获得相应的补偿。

这导致了 “CryptoMidwives” 的出现,正如 Michael Zargham 称之为:即使他们自己不是游戏的玩家,始终在 CryptoKitties 经济中履行着关键功能的代理。这个概念并不仅限于 CryptoKitties,还可以推广为“CryptoServices” — 一种设计模式,调用智能合约特定函数的账户将获得奖励。

// 将余额费用发送给使生产发生的人。
msg.sender.send(autoBirthFee);

事件日志数据集向我们展示,绝大多数出生事件由少数几个账户引起。在游戏历史的早期,与 AxiomZen 相关的账户是唯一进行生育猫咪的账户。随着时间的推移,其他账户开始调用 giveBirth 方法。我们还可以看到,只有少数助产士占据了大多数的出生数量:图表 2 中橙色区域代表每 1000 个区块内的前 5 大账户(共计 151 个账户)。除了在区块 4,700,000 附近的一个峰值外,AxiomZen 和前五名的调用者始终占据大多数的出生事件。

图表 2 — 随时间变化的有效调用 giveBirth 的组成,按交易发起者区分

AxiomZen 的活动峰值得到良好的解释,与 Ethereum 交易的平均 gas 价格上升的时刻相吻合。这是可以预期的,因为提高生产成本使其对外部代理的吸引力降低。为了应对 12 月的网络拥堵,AxiomZen 提高了生育费用 从 0.002 ether 到 0.015 ether,持续了几天,后来又 降低到 0.008 ether,在 1 月的高峰期间保持良好。

来源: https://etherscan.io/chart/gasprice

当我们通过生成事件的交易信息丰富事件日志数据集时,一般来说 CryptoMidwives 并不是直接调用游戏合约中的 giveBirth 函数,而是通过一个中介智能合约进行。这允许他们通过单个事务向闭源智能合约发送请求,而后者会根据指示调用 giveBirth 函数多次。见交易 0x6cc717fc… 的例子。

图表 3 — 随时间变化的有效调用 giveBirth 的组成,按交易接收者区分

利用区块链上可用的数据,我们甚至可以查看这些代理的收入和盈利能力。让我们聚焦 2018 年的前 10 名 CryptoMidwives。账户 0x05be6e… 是出生数量排名第一的账户,明显领先竞争者。账户 0xa21037…(属于 AxiomZen)在第八位,这很好,因为他们应该只作为最后的手段。

图表 4 — 2018 年前 10 名 CryptoMidwives 所交付的猫咪数量

自 12 月 11 日起,成功生产的奖励为 0.008 ETH。凭借这一信息,我们可以计算出前 10 名 CryptoMidwives 的收入。

图表 5 — 2018 年前 10 名 CryptoMidwives 的收入

然而,生育 CryptoKitties 的费用是有开支的。此外,这一市场竞争激烈!许多尝试调用 giveBirth 的事务“到达得太晚” — 意味着当交易被矿工处理时,猫已经不再怀孕,因为之前处理了另一笔交易。这些迟到的交易消耗的 gas 少,但仍可能在费用上产生可观的开销。将所有这些费用从奖励中扣除后,我们得到了每个助产士的利润。有趣的是,账户 0x80cfd2…,在收入中排名第六,在这一表现指标下脱颖而出。显然他们一定找到了一种方法来节省费用,无论是通过智能合约设计,还是更好地把握其交易广播的时机,或者更好地选择 gas 价格,或这几者的结合。

图表 6 — 2018 年前 10 名 CryptoMidwives 的利润

为了研究智能合约设计的假设,我们创建了一个称为“代码效率”的指标。这是每消耗的 gas 交付猫咪的数量的简单比率。如果我们查看 2018 年前助产士所使用的智能合约的平均代码效率的标准化值(图表 7),我们会看到它们之间几乎没有差异。

图表 7 — 2018 年前 CryptoMidwives 所使用的智能合约的代码效率

如果我们不再以 gas 使用情况来定义效率,而是以利润(每只生育猫咪的利润)来定义效率,我们会看到账户 0x80cfd2 的效率要远低于账户 0x05be6e(图表 8)。如果假设代码效率相似,这将意味着 0x80cfd2 支付的交易 gas 价格较高,因此能赢得每次竞争的生育比赛。

图表 8 — 2018 年前 CryptoMidwives 的效率

较高的 gas 价格可以解释账户 0x80cfd2 较高的盈利能力 — 它可能使他们赢得了每场生育竞争。实际上,来自账户 0x80cfd2 的每一笔交易都导致一只或多只猫咪的出生。账户 0x05be6e 就没有这样的情况,后者有大量交易到其智能合约而没有生育任何猫。

图表 9 — 帐户 0x05be6e 和 0x80cfd2 的交易直方图,按出生猫咪数量划分

然而,账户 0x05be6e 所造成的费用,导致没有猫出生的情况,不仅仅是由在 gas 竞价中失败的交易造成的。似乎他们的主要智能合约 0x39243a 需要某种周期性交互,而这在 gas 支出方面非常昂贵。请看例如交易 0xcc0f970e。如果没有这些交易,0x05be6e 不仅不会在收入排名中名列前茅,也会在盈利能力方面名列前茅。

更新 (2018年5月25日): 进一步分析表明,像 0xcc0f970e 这样交易使得助产士智能合约能够在生育猫咪的交易中节省 gas,使用“存储退款” — 这一技巧与 GasToken 相同。我要感谢 Ricardo 帮助我理清这一点。账户 0x80cfd2 使用的合约似乎也利用了这些退款,但使用了不同的账户来保存存储数据 ( 0x3a91b4… )。更准确的盈利能力分析需要考虑属于单个代理的账户和智能合约的集群。

你可以在我们的 GitHub 页面 找到这些分析的源代码

结论

为了确保猫咪尽快出生而创造的经济激励似乎工作得很好。出生事件集中在少数账户中表明,机器人已被创建,以确保尽快给猫咪生产。但是,似乎一旦从更智能的助产士合约中获取的效率不再提高,这些机器人就必须在 gas 竞价中展开竞争。因此,最终相当大一部分生育费用很可能会落入矿工手中。

无论如何,生育费用使得 CryptoKitties 的游戏比没有这个机制时更为昂贵。作为第一款在以太坊网络上获得重大关注的游戏,CryptoKitties 未来肯定会继续激励许多开发者。将来看看新游戏将如何应对这种挑战,将是非常有趣的。

未来工作

与许多分析案例一样,这一分析引发了更多问题。请在评论区留下你的问题和反馈!我们将在未来的文章中继续研究这个数据集。

图表 10 — 2018 年前 10 名 CryptoMidwives 的交易热图,按账户和智能合约划分。你看到了什么?

特别感谢 Block Science 团队的研究、洞见和审查。

  • 原文链接: medium.com/block-science...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
markusbkoch
markusbkoch
江湖只有他的大名,没有他的介绍。