3

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

 2 years ago
source link: http://blog.hubwiz.com/2022/04/16/gamefi-data-science/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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

gamefi with data science

用熟悉的语言学习 以太坊DApp开发Java | Php | Python | .Net / C# | Golang | Node.JS | Flutter / Dart

1、什么是 GameFi?🎮

🎮 GameFi,更广为人知的即玩即赚 (P2E) 游戏,在游戏和Crypto领域都是一个相当新的术语。它引用了以经济和金融为设计的 游戏。

大多数 GameFi 都依赖智能合约来执行,其中主要涉及 Solidity 合约。这些合约帮助游戏创建游戏内货币(ERC-20 Tokens)、 游戏内物品或 NFT(ERC-721 Tokens),以及一些(主要由服务器处理)的游戏逻辑,例如交易和交换物品. 当涉及到智能合约时,它们将继承区块链的好处,例如透明度、可追溯性、数据完整性和格式标准化。这些好处为使用数据科学知识 探索和解锁的可能性创造了另一个维度。

在本文中,我将展示如何利用数据科学知识在 GameFi 中创造更多优​​势。让我们像数据科学家一样玩游戏!向他们展示数据的力量。💡

最近在玩一款名为《英雄与帝国》的游戏,它是一款结合了休闲RPG独特元素和自走棋战术的Play-2-Earn策略游戏, 与区块链技术相连接。

在这款游戏中,玩家可以通过游戏中的动作召唤英雄(或 NFT)。游戏中有8种35种以上的英雄,通过“召唤”获得的几率是随机的。

所以我很好奇,得到我最喜欢的英雄的几率是多少。📜

幸运的是,为了回答我的问题,我可以基于区块链的透明特性提取合约的所有 NFT 信息。

本项目所需python包:

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 分钟。

我们使用付费服务的原因有多种,例如速度、集成或容量,具体取决于项目的性质。

#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 定义合约:

#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的事件,该事件将被广播到区块链并让我们能够捕获它。要捕获事件,只需:

#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:

df = pd.DataFrame(approval_events)

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

gamefi with data science

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

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

8、结束语

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

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK