案例:从FlipSide获取某一NFT collection的transfer记录。
语法:python,sql。
网络:FlipSide网页端需要梯子,但在使用API时最好不使用代理工具,否则可能出现proxy error。
文章结构:1)Transaction和Transfer的区别;2)Flipside简介;3)具体实现。
Transaction是指交易发起者向矿工提交的交易请求。下图为Azuki的某一transaction在Etherscan上的显示,‘From’地址是交易发起方(外部账户),‘To’地址是受到触发的合约(内部账户)。

Transfer是transaction中的一种事件,通常指token归属权的转移。在transfer中,‘from’地址为交易发生前token的持有人,‘to’地址为交易发生后token的拥有者。

网页功能:使用spl语句获取数据和简单的数据可视化。与dune和footprint很相似,但可以将查询数据导出csv。每个SELECT不能超过900s,查询结果只能显示100000行。
ShroomDK:在免费铸造API Key以后,可以使用操作性更强的语言(java、python和R)来调用数据库,具体使用可见开发者文档。该API的调用有非常宽松的限额,每天query执行的次数可达到10k。

下文将以‘获取Azuki的所有transfer’为例介绍FlipSide Python API的使用。
步骤一:在ShroomDK首页免费铸造API Key。
步骤二:安装shroomdk包 ⇒ pip install shroomdk
步骤三:使用API Key初始设置‘ShroomDK’。
from shroomdk import ShroomDK
sdk = ShroomDK("<Your API Key>")
步骤四:写调用数据库的sql语句。
nft_address = "0xED5AF388653567Af2F388E6224dC7C4b3241C544"
sql = f"""
SELECT
*
FROM ethereum.core.ez_nft_transfers
WHERE nft_address = LOWER('{nft_address}')
"""
注意:在写sql语句时,不能同时SELECT ‘*’ 和其他‘column_name’,否则会出现user error。因此,当出现user error可以尝试改动sql代码,也许是该形式的sql代码目前后端不支持。
步骤五:获取返回结果。
query_result_set = sdk.query(sql)
print(query_result_set.records) #records为list格式
Python SDK - Flipside Docs (flipsidecrypto.com)
如何使用SQL分析Web3中的数据 - BlockBeats (theblockbeats.info)
对于以上内容有想要交流或值得改进的地方,欢迎联系Cheng。
