用数据科学玩转GameFi【源码】

在这个教程中,我们将学习如何利用Data Science技能分析《Heroes & Empires》游戏的NFT数据以便 为自己制定更好的游戏策略,使用的技术栈包括Python、Web3.php和Pandas。

gamefi with data science

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
2
3
4
5
6
#import packages
from web3 import Web3

# geth_poa_middleware only needed for PoA networks like BSC
from web3.middleware import geth_poa_middleware
from web3.middleware import local_filter_middleware

注意:对于 BSC 连接,你需要 POA(权限证明)中间件。

4、在BscScan中查看游戏合约

前往BscScan查看游戏的合约,地址为0xf997d7ce19c4c9c49d7f0342bb905492d03ed113

gamefi with data science

在BscScan中输入合约地址,就可以获得如上屏幕。对于此处的示例,我们将检查Heroes & Empires的合约之一,该合约 通过“Summon”功能产生 NFT 资产。我想知道每天有多少英雄/NFT资产被召唤。如上图,每分钟几乎有 2-3 次召唤,这是 每天产生的大量 NFT。

5、搜索合约ABI

接下来,前往 BSCscan中的合约信息选项卡以获取合约ABI。合约应用二进制接口 ( ABI ) 是在以太坊生态系统中与合约交互 的标准方式,无论是从区块链外部还是合约到合约交互。数据根据其类型进行编码,如本规范中所述。编码不是自描述的,因此 需要一个模式才能解码。[1]

简而言之,我们需要 ABI来与合约和区块链对话

通常,合约开发者会发布 ABI 和合约源代码,以便在 BSCscan中获得绿色勾✔️。我们只需将 ABI 复制到我们的代码中即可获取 ABI, 如下图所示:

gamefi with data science

获取 ABI 后,在Python中使用合约地址和复制的 ABI 定义合约:

1
2
3
4
5
6
#Contract Details
SUMMON_ABI = """<COPIED ABI>"""
summon_address = Web3.toChecksumAddress("0xF997D7ce19c4C9c49d7f0342bb905492D03eD113")

#Define contract in web3.py
summon_contract = w3.eth.contract(address=summon_address, abi=SUMMON_ABI)

6、查看合约触发的事件

正如你在 Bsc Scan 中观察到的,在 Method 列中有一个单词“summon”。这是交易过程中发出的事件,你可以在solidity合约中 搜索该函数,如下所示:

gamefi with data science

函数“summon”执行(函数)发出了一个名为Summonhero的事件,该事件将被广播到区块链并让我们能够捕获它。要捕获事件,只需:

1
2
3
4
5
6
7
#To capture summonhero event in the past 1 day

block = w3.eth.get_block('latest')
daysAgo = 1
print(block.number)
block_filter = summon_contract.events.summonhero.createFilter(fromBlock=block.number-(28800*(daysAgo +1)), toBlock=block.number-(28800*(daysAgo)))
approval_events = block_filter.get_all_entries()

在上面的代码中,我们捕捉过去 1 天的召唤英雄事件。根据Ychart, BSC 的平均出块时间是 3 秒,这使得它每天大约有 28,800 个出块,因此我使用的变量是 28,800。当你在 BSC 中搜索 28,800 个 区块时,将需要一些时间来运行。如果在其他链上使用它,请确保更改块变量。

7、让数据科学发挥作用

获得数据后,就该展示你的数据科学技能了,将事件列表转换为data frame:

1
df = pd.DataFrame(approval_events)

最后,为了回答我的问题,获得我最喜欢的英雄 Specture 的几率是多少,我通过英雄名称对英雄召唤计数进行了可视化,并区分了召唤的类型(碎片和召唤)。 这是我获得的图表:

gamefi with data science

我发现,它并没有像游戏开发者所说的那样平均分配,我最喜欢的英雄——幽灵的获得率远低于其他英雄!😭看来我必须为 我的英雄使用更多的召唤卷轴或者在市场上以更高的价格购买它。

项目的完整代码可以在这里获取。

8、结束语

当你在玩 GameFi、交易数据、玩家行为、NFT 的稀有性,甚至游戏的趋势时能够以上帝视角查看,有很多潜在的优势。简而言之, 你可以根据数据预测需求和供应,并帮助你赢得比赛!

这就是数据科学家玩游戏的方式。😁😁