Solidity迁移Flow Cadence指南13-Flow 1000+合约大数据分析

这篇具有很好参考价值的文章主要介绍了Solidity迁移Flow Cadence指南13-Flow 1000+合约大数据分析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

熟读唐诗三百首,不会做诗也会吟,Flow合约哪里读?自然是链上了,Flow的链上合约都是开源的,只要知道合约地址,都可以直接使用API获得具体的合约代码。本节就把flow链上的主要合约下载下来,然后分析,哪些可以读,哪些可以抄@#¥@#¥

数据来源

本文主要分析合约账号数据,在以太坊中,可以通过地址的code类型来判断是否为合约地址,Flow中也是类似的,Flow账号的数据结构如下所示:

message Account {

  bytes address

  uint64 balance

  bytes code

  repeated AccountKey keys

  map<string, bytes> contracts

}

因此,我们也可以通过获取account.contracts或者account.code(新版逐步取消),看是否包含合约代码即可。但有个问题是, Flow中的账号已有800+万,遍历会比较慢,而且获取账号地址列表也较为困难。因此,我们综合采用了多个方法,尽可能获得更多的合约地址。

首先是搜索网上已有的合约地址列表,如alchemy就收集了不少:

https://github.com/alchemyplatform/alchemy-flow-contracts

再者就是要遍历区块了,flow区块的数据结构大致是这样的:

合约大数据分析,flow cadence编程,区块链

 

图 1 flow 区块的数据结构

以太坊的区块中,就是交易一层数据结构,而flow链上,多了一个Collection层,其下包含了交易数据。我们可以从交易中获得发送方等三个地址,以及交易参数中的地址类型,来收集flow的地址,然后判断是否包含合约代码即可。

合约大数据分析,flow cadence编程,区块链

 

图2 从交易数据中收集flow地址

另外,我们可以搜索或监听合约创建事件(event),来收集合约地址,在flow的API中,可以通过GetEventsForHeightRange来获得合约的事件信息,flow中合约创建的事件为flow.AccountContractAdded,事件的数据结构如下:

message Event {

  string type

  bytes transaction_id

  uint32 transaction_index

  uint32 event_index

  bytes payload

}

一个具体的合约创建事件如下所示:

合约大数据分析,flow cadence编程,区块链

 

图3 合约创建事件

我们只需要通过上述方式,收集尽可能多的合约账号,就可以通过合约账号的contracts/code属性来获得合约代码。

我们把目前收集到的合约,都放到了flow.study上。

本节到此结束。。。。。。。。。

但。。。。。。。笔者是做大数据的,应该是会flow cadence的码农里面,大数据学的最好的之一:)这里就show一下技能,用大数据算法分析flow的合约生态,让大家更清楚的看看什么值得抄,flow的应用生态还缺少啥,等等。

Flow合约生态分析

分析一个区块链的应用生态,最直接的方法,就是分析其中的用户交互关系,一般都使用网络分析方法,整体可视化的展示用户之间,以及应用和用户的交互情况。

在以太坊的世界里,不管是以太坊转账,还是合约调用,都是From地址到to地址的“交易”进行的。而flow的世界里,交易并没有明确的From地址和To地址关系对,因此,做网络化分析相对麻烦一点点。

以太坊的交易数据和flow的交易数据对比图如下所示:

合约大数据分析,flow cadence编程,区块链

 

 

图4 以太坊的交易数据和flow的交易数据对比

https://flowscan.org/transaction/5bad75980b70b2f239b3dc255a9e08952685d80714a0620bcc865dfcada1eb17

网络分析,只需要两个点的连接关系即可,以太坊的中,只需要分析用户to地址到from地址的转账交易,或者所有to地址为合约地址的调用交易即可。

但面向资源的flow中,所有的操作都是账号之间的“资源转移”操作,交易中的合约引用只是起到一个数据规范的作用,其实和部署的合约账号已经没有关系了。但为了分析flow的用户行为,我们也按照以太坊的两种模式进行数据分析:

一种是仿照以太坊的转账关系,分析用户之间的关系。我们对应的分析flow token的转账行为关系,只需忽略合约交易通道,直接用转账的源地址和目标地址构建一条连接即可。具体通过搜索监听A.1654653399040a61.FlowToken合约的TokensWithdrawn和TokensDeposited事件即可,其中TokensWithdrawn的数据中地址为源地址,TokensDeposited数据中的地址为目标地址,从一个交易id中发出的一对TokensWithdrawn和TokensDeposited事件就构成一个交易对。具体如上图1中的两个地址关系图。

一种是分析用户和合约的关系。我们只考虑主动发起调用的用户(Proposer)地址和合约地址的关系即可。但有一个问题,就是我们上面提到的,flow的交易中数据中是没有明确的To地址的,以太坊的交易数据和flow的交易详细数据结构对比如下图所示:

合约大数据分析,flow cadence编程,区块链

 

图5 以太坊交易数据结构和flow交易数据结构详细对比

如上图所示,以太坊交易中有明确的交易目标地址,如果是合约调用,目标地址就是合约地址,但在flow的交易数据中,并没有这个数据。

因此,如果要获取用户和合约的交互关系,还是需要基于事件进行分析,我们还是搜索监听合约相关的事件,因为监听事件输入type要求的格式为

type: A.{contract address}.{contract name}.{event name}

我们有了contract address和contract name,就需要从合约代码中正则匹配所有的event name即可。

获得事件后,事件的数据结构中是包含交易id/transaction_id的,因此, 可以根据交易id获得交易发起的地址(Proposer)即可,具体流程如下:

合约大数据分析,flow cadence编程,区块链 

图6 建立合约和用户的连接

之所以这样曲折一些,主要是因为flow的交易没有明确的To地址,交易数据中也不包含对应的event事件信息,只能通过合约event包含的交易id,倒推出调用合约的用户地址,从而建立起合约和调用者地址的关联关系。这也是flow交易和以太坊交易最明显的不同之处。

上述两类分析都使用无向连接,也就是不考虑连接的方向。

我们截取了了2022年6月12日之前60万个区块的数据,也就是一周左右的区块数据进行分析,在此期间flow token的交易对共有约90万个,用户调用合约共有约1000万(包括引用的合约)。具体分析的时候,我们各自随机抽取5 万个连接,进行分析处理。

基于flow token的用户行为网络图如下所示:

合约大数据分析,flow cadence编程,区块链

 

图7 基于flow token的转账行为构建网络关系图(基于Force Atlas算法/Gephi构建)

从上图中可以看到,Flow token发送行为,集中在4个主要的地址上,最多的就是0x34ac358b9819f79d,这个是合约NFTKred的地址。

基于合约的调用行为网络图如下所示:

合约大数据分析,flow cadence编程,区块链

 

图8 基于合约调用交互的用户为行为网络关系图(基于Force Atlas算法/Gephi构建)

可以发现,合约的交互,也是集中于几个主要的合约,最主要的就是下面最大的一个关联组,大家也可以猜猜具体是哪个合约。这个其实就是NFT标准合约0x1d7e57aa55817448(MetadataViews/NonFungibleToken), 其他几个大的分组也是以几个知名NFT合约为中心的。

从上面两个图可以发现,目前flow的应用生态相对还是比较中心化,基本上Top5的合约,就占了大部分的交易量。因此,Flow生态还是大有可为的。

类别分析

除了对合约的调用关系进行分析外,我们还对合约的文本进行了分析。

首先是基本的分类情况,主要基于合约的继承关系相关的关键词进行分析,具体如下图所示:

合约大数据分析,flow cadence编程,区块链

 

图9 Flow cadence合约分类

可以看到,目前flow线上合约中,有38%都是明确的NFT合约(继承NonFungibleToken),48%则是基于NFT/Token合约更复杂的应用。

我们还对合约的文本内容进行了分析,也就是分析合约的每一个单词,看看合约的“语义”组成大致是样的,也就是大数据领域中的“聚类”算法。相应的分析结果如下所示:

合约大数据分析,flow cadence编程,区块链

 

图10 flow cadence线上合约聚类分析图

从上图中可以看到,合约代码被大数据算法自动分成了2个类别,而左上的类别,从其对应的词云图可以看到,明显就是NFT类别,而右下的类别,则就是一般的Token类别。这也进一步说明了,Flow上的应用生态目前还相对比较单一,主要还是集中于NFT的应用。

什么值得抄

根据合约调用关系图,可以很方面的计算每个合约的Pagerank影响力排名值,Pagerank主要用来计算互联网上网站的影响力,用于计算合约的影响力也是类似的原理,具体的Top 10排名合约如下表所示:

地址

包含合约

连接数

pageranks值

0x1d7e57aa55817448

MetadataViews/NonFungibleToken

2236

0.155469

0xecfad18ba9582d4f

JoyrideAccounts/JoyrideMultiToken

1332

0.093722

0x058ab2d5d9808702

BLUES

356

0.024977

0x34ac358b9819f79d

NFTKred

348

0.02441

0x8f3e345219de6fed

NFL

341

0.023987

0x1e3c78c6d580273b

LNVCT

348

0.023852

0xa8d1a60acba12a20

TMNFT

336

0.023018

0xe3ac5e6a6b6c63db

TMB2B

317

0.022325

0xf233dcee88fe0abe

FungibleToken

243

0.015557

0xc1e4f4f4c4257510

TopShotMarketV2/TopShotMarketV3

172

0.011008

好吧,多看看这些合约就行啦。看合约代码的方式为:

Flow View Source

其中0xecfad18ba9582d4f就是合约地址文章来源地址https://www.toymoban.com/news/detail-778454.html

到了这里,关于Solidity迁移Flow Cadence指南13-Flow 1000+合约大数据分析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Solidity——在合约中创建合约

    在以太坊链上,除了用户可以创建智能合约,智能合约同样也可以创建新的智能合约。两种常见的创建合约的方式: 计算合约地址的预测值: 使用 keccak256 哈希函数计算合约的初始化代码(包括合约的字节码和构造函数的参数)的哈希值。 从创建者地址(通常是工厂合约的

    2024年02月03日
    浏览(44)
  • solidity实现智能合约教程(3)-空投合约

    猛戳订阅学习专栏🍁🍁 👉 solidity系列合约源码+解析 👈 🍁🍁 空投就是一种营销策略,通过空投活动将某种数字货币或代币分发给用户,通常需要用户完成一项简单的任务,如分享新闻、介绍朋友或拥有某种数字货币,目前也被广泛应用于宣传新币种,在数字货币市场中

    2024年02月07日
    浏览(75)
  • 【Solidity】智能合约案例——①食品溯源合约

    目录 一、合约源码分析: 二、合约整体流程:       1.部署合约       2.管理角色       3.食品信息管理       4.食品溯源管理         Producer.sol:生产者角色的管理合约,功能为:添加新的生产者地址、移除生产者地址、判断角色地址是否被授权         Di

    2024年02月08日
    浏览(51)
  • 【solidity三】Solidity中继承、创建合约和外部调用、合约事件event、solidity中元祖的使用、new、delete关键字的使用、solisity创建合约和外部调用

    - 最重要的两个全局变量 msg.sender 每一次和以太坊交互时都会产生一笔交易,这笔交易的执行人就是msg.sender。简而言之:谁调用的,msg.sender就是谁,每笔交易的msg.sender都可以不同。举例: 部署合约的时候,msg.sender就是部署的账户。 调用setMessage时,msg.sender就是调用账户。

    2024年02月03日
    浏览(43)
  • 【Solidity】智能合约案例——③版权保护合约

    目录 一、合约源码分析: 二、合约整体流程:         1.部署合约:         2.添加实体:          3.查询实体         4.审核版权:         5.版权转让         Copyright.sol:主合约,定义了版权局的实体,功能为:审核版权         Opus.sol:定义两个实体:作者和作

    2024年02月04日
    浏览(47)
  • 【Solidity】智能合约案例——②供应链金融合约

    目录 一、合约源码分析: 二、合约整体流程:         1.部署合约:         2.添加实体         3.发送交易存证            ①.银行向公司交易(公司向银行提供交易存证)            ②.公司向银行交易(银行向公司提供交易存证)            ③.公司向公司交易

    2024年02月06日
    浏览(38)
  • solidity进阶第四课——在合约中创建新合约

    在以太坊上,用户(外部用户)可以创建智能合约,智能合约同样也可以创建新的智能合约。去中心化交易所uniswap就是利用工厂合约(Factory)创建了无数个币对合约(Pair)。这一讲将讲如何在合约中创建合约。 create和create2 有两种方法可以在合约中创建合约,create和create

    2024年02月01日
    浏览(39)
  • Solidity智能合约开发 — 3.4-抽象智能合约和接口

    假如一个智能合约中至少一个函数缺省实现时,即某个函数缺少{}中的内容,这个智能合约就当做抽象智能合约。 当我们有一个函数没想好怎么写时,必须将该合约标为 abstract ,不然编译会报错;另外,未实现的函数需要加 virtual ,以便子合约重写。抽象智能合约是将智能合

    2024年02月12日
    浏览(45)
  • solidity函数签名的实现-solidity实现智能合约教程(8)

    猛戳订阅学习专栏🍁🍁 👉 solidity系列合约源码+解析 👈 🍁🍁 函数选择器: solidity调用函数时,calldata的前4个字节为指定要调用的函数,这4个字节称为函数选择器。 以下面的代码为例。它通过地址addr的调用合约的transfer方法。 abi.encodeWithSignature(…)返回的前4个字节是函数

    2024年02月16日
    浏览(50)
  • Solidity 智能合约入门

    将一个数据放置在链上 我们对代码进行逐行分析,首先第一行 第一行表明此段代码是被GPL-3.0所授权。默认情况下,在发布源代码时加入机器可读许可证说明是很重要的。 GPL(GNU General Public License Versions) GPL协议一般还可以分为GPL2.0和GPL3.0两种,而GPL3.0是更新一代的开源标准

    2024年02月02日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包