一、分析背景

2021年已经接近尾声,回顾今年的 crypto currency 市场,在大洋彼岸,NFT 无疑是最具热点的话题和方向。随着 OpenSea 等平台的崛起,市面上的 NFT 项目也层出不穷。

众所周知,NFT 项目强依赖于社区与热点,那么我们如何评估一个 NFT 项目的优劣,如何才能为投资行为提供强有力的支撑依据呢?

在本文中,笔者分享一下前段时间与加密货币行业某一级市场 VC 合作的 NFT 相关的数据分析实践。

二、评估指标介绍

评估一个NFT项目的好坏无疑是看这个项目的活跃程度、大众接受程度、社区的繁荣程度,如果这些直观的标准都是 high level,那么无疑是一个较好的 NFT 项目。

依赖直观标准的缺点是无法对其进行有效量化,我们试图通过链上数据分析寻找更有数据支撑与说服力的评估指标。在本文中,我们介绍其中一个 NFT 评估指标实例——玩家重合度指标,该评估指标基于以下假设:

        ▪ NFT 存在蓝筹项目,这些蓝筹项目的参与者具有一定的参考价值

        ▪ NFT 赛道存在活跃玩家,这些活跃玩家会发掘新的 NFT 并及时参与进去

        ▪ 如果NFT 项目的玩家中,活跃玩家占比较多,说明项目质量不错

我们希望这个指标可以给定一个 NFT 项目的合约地址,输出该 NFT 项目玩家中,NFT 熟练玩家(或者说是活跃玩家)的占比,从而模糊评估该项目在整个 NFT 市场上的社区、参与质量。

在下面的章节,笔者会 step by step 介绍如何从链上数据获取到该指标的整个过程。

三、需要关注哪些交易?

首先我们应该知道需要关注哪些交易才能定位到 NFT 的交易者。以 Ape 为例,该项目是基于 ERC-721 代币标准构建的:

图片

因此,我们需要关注 ERC721 代币每次转账的发送方和接收方,这两个地址就是我们可以认定的 “NFT交易者”。具体一点,我们需要关注 transferFrom 合约方法的调用,并将 transferFrom 的 from 和 to 地址抽取出来。

为了实现这个需求,我们需要考虑两种情况:一种是交易者直接与 Ape 合约进行交互,一种是通过合约 call 的方式与 Ape 合约进行交互。

 - 直接与 Ape 合约交互

如交易:

0xff9a1b806e26ca45b4ce45a05929aa1759c913162b4a98b16ddc12db015002a1,可以看到用户直接和 Ape 合约进行交互:

图片

这种场景下,我们只需要利用 ABI 解析出交易中的 input data 即可,利用 web3.py 可以很容易做到这一点:
 


contract = w3.eth.contract(address=nft_addr, abi=abi)
txs = get_all_transactions(nft_addr)

# 0x23b872dd => transferFrom
if tx['tx']['input'].startswith("0x23b872dd"):
    func_obj, func_params = contract.decode_function_input(tx['tx']["input"])
    nft_traders.append({
        'sender': func_params['from'],
        'receiver': func_params['to'],
    })

 - 合约 call 调用与 Ape 交互

除了直接与 Ape 交互,实际上很多交易行为是通过其他合约调用 Ape 相关方法实现的,比如在 OpenSea 中交易 Ape NFT,交易id:0x0000c29cdda9857072510fc52adf701d4cc7d769f3d00704c062fc399d731bb4

图片

可以看到,用户通过和 OpenSea 合约进行交互来交易 Ape NFT,而在以太坊交易中不会存储合约之间的调用关系与相关细节,对于这种合约调用分析,我们需要依赖 trace 节点获取 call tracing 数据,进而分析调用关系:

从 tracing 结果来看,最终 OpenSea 合约还是调用了 Ape 合约的 ERC-721 标准方法来完成 NFT 转移:

图片

对于这种合约调用的交易,我们可以分析该交易的 event log 来获取 NFT 交易者信息,如 ERC-721 约定了 Transfer 事件,在每次 NFT 换手时均会被 emit,因此我们就不需要对交易进行 trace 也能通过 event 获取交易者信息。

通过 web3.py 也可以轻松完成解析:

tx_receipt = w3.eth.get_transaction_receipt(txid)
logs = tx_receipt['logs']
logs = tx_receipt['logs']
logs_num = len(logs)
for i in range(logs_num):
    ret = contract.events.Transfer().processLog(logs[i])
    # parse the logs
    try:
        ret = contract.events.Transfer().processLog(logs[i])
        nft_traders.append({
            'sender': ret['args']['from'],
            'receiver': ret['args']['to']
        })
    except Exception as e:
        continue

四、基础数据建设

在我们内部,需要经常应对这种类型的数据分析需求,从而满足传统的资金溯源、普通 ERC-20 转账,到 Dex、NFT 交易分析等需求。

在建设基础数据层时,我们需要对主网每个交易进行解析、tracing 出 call stack、对合约交易的 input data 进行 ABI 解码、对event进行ABI解码,再进行清洗、格式化等操作,最终将以上数据入库。

图片

有了基础数据层建设,我们可以直接执行查询定位到相关交易,不需要临时性遍历全部区块中的交易。

五、NFT项目评估

通过对蓝筹 NFT 项目、待评估 NFT 项目进行交易分析,我们获取到了两个数据集:

    ▪  蓝筹项目交易者列表

    ▪  待评估项目交易者列表

该列表保存三个字段:sender、receiver、txid 即可。

有了以上数据,我们不仅可以获得玩家重合度数据,也可以回答出以下问题:

    ▪  待评估 NFT 项目的玩家总数是多少?

    ▪  待评估 NFT 项目与蓝筹项目的交易活跃度差距是多少?

    ▪  待评估 NFT 项目中,玩家和蓝筹项目的重合度是多少?

    ▪  待评估 NFT 项目中,是否存在交易刷量行为?

利用这些基础数据,与链上资金溯源、链上真人地址识别等技术相结合,我们甚至可以反推出 NFT 项目的市值管理策略,从而从更深层次去评估目标项目的优劣。

六、总结

本文介绍了如何通过链上数据分析目标 NFT 项目,包括基础数据、交易解析、指标分析思路等。区块链有透明化、交易活动公开化等特点,通过定制化的数据分析的方式,我们可以快速发现加密货币市场的潜流,从而为我们的决策提供更有力的佐证。

原文:

链上数据分析—NFT 项目质量评估

Logo

为所有Web3兴趣爱好者提供学习成长、分享交流、生态实践、资源工具等服务,作为Anome Land原住民可不断优先享受各种福利,共同打造全球最大的Web3 UGC游戏平台。

更多推荐