在这个教程中,我们将学习如何利用Data Science技能分析《Heroes & Empires》游戏的NFT数据以便 为自己制定更好的游戏策略,使用的技术栈包括Python、Web3.php和Pandas。
1、什么是 GameFi?🎮
🎮 GameFi,更广为人知的即玩即赚 (P2E) 游戏,在游戏和Crypto领域都是一个相当新的术语。它引用了以经济和金融为设计的 游戏。
大多数 GameFi 都依赖智能合约来执行,其中主要涉及 Solidity 合约。这些合约帮助游戏创建游戏内货币(ERC-20 Tokens)、 游戏内物品或 NFT(ERC-721 Tokens),以及一些(主要由服务器处理)的游戏逻辑,例如交易和交换物品. 当涉及到智能合约时,它们将继承区块链的好处,例如透明度、可追溯性、数据完整性和格式标准化。这些好处为使用数据科学知识 探索和解锁的可能性创造了另一个维度。
在本文中,我将展示如何利用数据科学知识在 GameFi 中创造更多优势。让我们像数据科学家一样玩游戏!向他们展示数据的力量。💡
2、背景
最近在玩一款名为《英雄与帝国》的游戏,它是一款结合了休闲RPG独特元素和自走棋战术的Play-2-Earn策略游戏, 与区块链技术相连接。
在这款游戏中,玩家可以通过游戏中的动作召唤英雄(或 NFT)。游戏中有8种35种以上的英雄,通过“召唤”获得的几率是随机的。
所以我很好奇,得到我最喜欢的英雄的几率是多少。📜
幸运的是,为了回答我的问题,我可以基于区块链的透明特性提取合约的所有 NFT 信息。
本项目所需python包:
1 | pip install web3 |
Web3.py是一个为与以太坊区块链交互而构建的 Python 库,它是 Web 3.0 中数据科学的主要包。
3、连接到 BSC
在本项目中,我们将使用 BSC(Binance Smart Chain)链,因为Heroes & Empires是基于 BSC 链的。但是,这种技术 可以应用于多个链。
有两种方法可以连接到 BSC,第一种是使用你自己的节点,这涉及大量的技术和繁琐的工作。第二种方法是使用第三方或社区 通过 JSON-RPC Endpoint 设置的现有节点。对于 BSC 链,我们可以使用:
- BSC 端点- 免费 ( https://bsc-dataseed.binance.org )
- Moralis -免费/付费
- Quicknode-免费/付费
注:BSC 端点在测试网和主网上的速率限制为 10K/5 分钟。
我们使用付费服务的原因有多种,例如速度、集成或容量,具体取决于项目的性质。
1 | #import packages |
注意:对于 BSC 连接,你需要 POA(权限证明)中间件。
4、在BscScan中查看游戏合约
前往BscScan查看游戏的合约,地址为0xf997d7ce19c4c9c49d7f0342bb905492d03ed113
:
在BscScan中输入合约地址,就可以获得如上屏幕。对于此处的示例,我们将检查Heroes & Empires的合约之一,该合约 通过“Summon”功能产生 NFT 资产。我想知道每天有多少英雄/NFT资产被召唤。如上图,每分钟几乎有 2-3 次召唤,这是 每天产生的大量 NFT。
5、搜索合约ABI
接下来,前往 BSCscan中的合约信息选项卡以获取合约ABI。合约应用二进制接口 ( ABI ) 是在以太坊生态系统中与合约交互 的标准方式,无论是从区块链外部还是合约到合约交互。数据根据其类型进行编码,如本规范中所述。编码不是自描述的,因此 需要一个模式才能解码。[1]
简而言之,我们需要 ABI来与合约和区块链对话
通常,合约开发者会发布 ABI 和合约源代码,以便在 BSCscan中获得绿色勾✔️。我们只需将 ABI 复制到我们的代码中即可获取 ABI, 如下图所示:
获取 ABI 后,在Python中使用合约地址和复制的 ABI 定义合约:
1 | #Contract Details |
6、查看合约触发的事件
正如你在 Bsc Scan 中观察到的,在 Method 列中有一个单词“summon”。这是交易过程中发出的事件,你可以在solidity合约中 搜索该函数,如下所示:
函数“summon”执行(函数)发出了一个名为Summonhero的事件,该事件将被广播到区块链并让我们能够捕获它。要捕获事件,只需:
1 | #To capture summonhero event in the past 1 day |
在上面的代码中,我们捕捉过去 1 天的召唤英雄事件。根据Ychart, BSC 的平均出块时间是 3 秒,这使得它每天大约有 28,800 个出块,因此我使用的变量是 28,800。当你在 BSC 中搜索 28,800 个 区块时,将需要一些时间来运行。如果在其他链上使用它,请确保更改块变量。
7、让数据科学发挥作用
获得数据后,就该展示你的数据科学技能了,将事件列表转换为data frame:
1 | df = pd.DataFrame(approval_events) |
最后,为了回答我的问题,获得我最喜欢的英雄 Specture 的几率是多少,我通过英雄名称对英雄召唤计数进行了可视化,并区分了召唤的类型(碎片和召唤)。 这是我获得的图表:
我发现,它并没有像游戏开发者所说的那样平均分配,我最喜欢的英雄——幽灵的获得率远低于其他英雄!😭看来我必须为 我的英雄使用更多的召唤卷轴或者在市场上以更高的价格购买它。
项目的完整代码可以在这里获取。
8、结束语
当你在玩 GameFi、交易数据、玩家行为、NFT 的稀有性,甚至游戏的趋势时能够以上帝视角查看,有很多潜在的优势。简而言之, 你可以根据数据预测需求和供应,并帮助你赢得比赛!
这就是数据科学家玩游戏的方式。😁😁