透过地址数据,提前看清链上的“危”与“机”

互联网 阅读 989 2022-03-18 19:27:00

引言:链上数据分析的流程可以从数据出发,来解读行为、意图乃至交易心理。

作者|Mabrary

责任编辑|小欧

链上数据的核心,是藏在每个链上地址内的数据

今天,我们从地址数据开始解读,由浅入深、按照从整体到细节的顺序,以“以太坊的工作原理”为基线,理解浏览器中的每个地址下的数据都代表什么?

首先 ,我们把地址数据中需要了解的概念,按照从浅到深的顺序分为三级,大家可以根据自己的基础有选择地阅读:

一级关键词:普通交易|合约交易

二级关键词:外部账户|内部账户|内部交易

三级关键词:Transfer|Transaction|事件|日志

一、以太坊交易类型

首先,以太坊中的交易可以大致分为两种:外部地址交易(图1)&合约交易(图2)。

图1:外部账户地址交易概览页

数据来源:OKLink以太坊浏览器

普通地址交易,是指仅涉及以太坊Ether的转移,不涉及合约的调用以及以太坊中其它资产的交易。

普通交易中的数据可以大概分为四大块:交易哈希、时间等归于交易索引(index),提供定位交易的信息。

交易金额具体是指Ether转移的数量,交易的发送方(sender)和接收方(receiver)互为本次交易中的交易对手。

Gas费的消耗是本次交易发送方需要承担的交易成本。

图2:0x513d和Metamask Router合约交易概览页

数据来源:OKLink以太坊浏览器

我们看到,涉及智能合约的浏览器交易概览页会多出三块内容:

(1) 以太坊执行交易的内部过程(内部交易);

(2) 资产转账的结果(资产转账);

(3) 合约执行的入参(输入数据);

相比普通交易,合约交易页顶部还多了两个标签(蓝色):内部交易和事件日志

那么,什么是内部交易?为什么普通地址之间的交易没有内部交易的标签?内部交易标签内呈现的信息如何解读?内部交易(Internal Transaction)和普通交易(Transaction)的区别在哪?

要回答上面前三个问题我们需要了解两个概念:外部账户&内部账户

二、外部账户&内部账户

以太坊的地址(账户)分为外部账户(即实体账户)和内部账户(即合约账户)两种。

用户通过手中的私钥访问外部地址,而内部地址不能被当作钱包直接访问,只能通过调用它们的函数使用。

外部账户就是以太坊以外世界的实体(人)想访问以太坊世界的代理,也是以太坊这个世界计算机的状态发生改变最初始的源头

我们知道以太坊状态的改变由交易(普通交易)发起,如果交易对手为一个智能合约,则交易中的输入数据(input)就会作为虚拟机执行合约时的入参触发合约方法。合约方法被调用执行后可能还会触发其它合约中的方法,如此形成一个链式反应,这些链式反应的中间过程即为内部交易

图3:链式反应

现在,我们再来看一下浏览器中的普通地址交易(图1),就明白为什么没有内部交易的标签项了——因为这是一个从外部账户到外部账户之间的转账,发送方没有在输入数据中附加代码,接收方也没有可执行的合约方法。

而图2的合约交易由0x514d的外部账户地址发起至0x881d的合约账户,发起方0x514d通过输入数据(input data)告诉合约0x881d所需调用的合约方法(function)以及方法所需传入的参数。

合约中的方法被调用后会继续调用其他合约中的方法。比如,在第一条内部交易中Metamask的Router合约会继续调用(call)接收方0x74de(Matic的合约地址)中的方法……最终形成一个调用链条,这就是我们所说的内部交易

图4:

0x513d和Metamask Router合约交易内部交易标签页(注:内部交易详情页记录的交易只涉及Ether的转移)

需要注意的是,由于以太坊区块链中只存储以太坊虚拟机(EVM)处理交易后的状态,并不存储计算过程。

所以,以上展示的内部交易信息并不存储在区块链中,而当中发生以太坊转账(红框)的结果则最终会更新在t+1的世界状态中。其中一部分执行结果会体现在“合约地址转账”里。

图5:Token Transfer部分

回过头来,我们再来回顾一下外部账户的概念。

虽然外部账户的行为有时并不直接导致以太坊世界状态的改变(外部账户余额的变化或合约账户状态的变化),但追踪这些变化的源头一定来自外部账户,而这时直接导致改变的原因就是合约方法的执行。

读到这里,大家在脑中可能已经积累了一些疑问:

我们经常会在一些描述中看到两个词:Transfer和Transaction,两个词都可以被翻译为转账,那它们有何不同呢?

上面提到的0x881d合约如何知道被调用了哪个合约方法?

第三个标签事件日志(Log)是什么?它的作用在哪里?它们都会记录在区块链上吗?

我们一个一个来回答~

三、交易和事件

1. Transfer和Transaction有何不同?

Transfer通常指资产归属权的转移,可以分为原生资产的转账和其它标准资产的转账(如ERC20、ERC721等);而Transaction是指交易的发起者,也就是from地址(外部账户),向矿工提交的交易请求,如果被矿工成功纳入到区块中并完成共识,则该笔交易生效,否则会被告知交易失败。

那发起者提交的交易到底包含哪些信息呢?这就需要我们了解一个交易是如何在链上发生的。

图6:Transaction数据组成

我们重点解释第三部分。这部分从程序执行逻辑上是交易发送者输入以太坊虚拟机执行此交易的初始信息:虚拟机操作对象(接收方 To)、从交易发送方转移到操作对象的资产(Value),以及虚拟机运行时入参(input)。

其中 To 为空时,意味着虚拟机无可操作对象,此时虚拟机将利用 input 内容部署一个新合约。

2. 下面我们还是以上面的合约交易(图2)为例回答第二个问题:0x881d合约如何知道被调用了哪个合约方法?

这需要我们对入参进行解析。输入数据去除0x后的前八位代表合约方法识别符(5f575529),后边数据为方法所需的参数。

其中,合约方法识别符为合约方法经过SHA-3哈希算法后保留前八个字符得到的。

因此,虽然我们不知道合约源码,但是根据前八位的识别符,我们可以在其它已知方法源码的记录中匹配到该方法

swap(string aggregatorId, address tokenFrom, uint256 amount, bytes data)。

由于智能合约中的方法经常会被复用其他合约中,因此同一个方法(识别符)可能对应多个合约。

图7:输入数据解析

3. 第三个标签事件日志(Log)是什么?它的作用在哪里?它们都会记录在区块链上吗?

在一个合约源码中,不仅会定义合约方法(function),还会定义事件event abc()和提交事件emit abc(),执行过提交的事件就会被记录在日志中,最后日志会被记录在一个调用合约的交易的receipt函数中。

我们以SushiSwap的合约0x7f8F7Dd53D1F3ac1052565e3ff451D7fE666a311的源码为例,他们定义了Sync事件,还会提交该事件并记录在日志中。

图8:SushiSwap合约部分源码

然而,在日志中存储事件并不是为了日后可以被智能合约访问,**智能合约是不能监听(listen)到日志中的数据的。**事实上,事件用于通知外面的用户区块链上发生的事情

例如,当你在以太坊地址上收到一笔资产时,钱包的接口就会为你推送一条到账提醒,这实际上是钱包的前段接口监听到了链上发生的一个事件。

由于事件提交事件的代码在合约源码中,它的执行也是以去中心化的方式进行,且最终被保存在区块链上。因此,日志中的数据是可信的。

另一个开发者使用事件的原因是日志是一种更便宜的存储方式,日志中存储数据的成本大约是8 gas/byte,而在合约变量中存储数据的成本为625 gas/byte。

图9:

0x513d和Metamask Router合约交易事件日志标签页

为了描述事件,一条日志通常会包含几个有索引(Indexed)的Topic,和没有索引的Data。

其中,Topic0为通常包含发生事件名称的签名(keccak256哈希值),包括其参数的类型(uint256,字符串等)。还是以上面0x513d和Metamask Router合约交易为例,红字部分的日志中记录了在执行SushiSwap合约时在日志中记录的事件。

[Topic0]:

0x1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1

就是将事件Sync (uint112 reserve0, uint112 reserve1)运行Keccak256算法得到的。另外,…1f0f和…d552是事件中的两个参数。

我们调取了OKLink全节点一整年的事件日志(2021.3.15-2022.3.16),我们看到Transfer的事件是最多的,上面分析的Sync事件排名第三~

图10:事件方法排名

四、小结

本篇文章,我们从两种交易类型的概览入手,分析了外部账户地址之间的交易数据和外部账户地址触发的合约方法执行过程。两种交易都包含交易索引、对手方、交易金额和成本。

此外合约交易中,合约方法的调用过程除了在发起方和接收方之间的一次会被区块链记录,其它合约内部的调用过程均不上链,只有执行的结果和提交事件会被记录在区块链中。

由此可见,读懂链上数据不仅有助于帮助交易者从特定行为和意图进行分析,还能预测市场整体的心理状态和心理预期....

内容源自:欧科云链学院,部分内容与原篇略有调整。

免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
上一篇:春招零距离|就在明天!解锁4大关键词,提前GET空宣精彩 下一篇:获利逾170万美元!链上天眼复盘元宇宙项目Paraluni黑客攻击全过程

您可能感兴趣