链资讯 链资讯
Ctrl+D收藏链资讯
首页 > XLM > 正文

PIC:理解以太坊事件日志_matic币最新消息微博

作者:

时间:

开发者来说实际上都是至关重要的。通过触发事件不仅能将链上智能合约的交易通知给外界,还能让智能合约开发者对合约进行测试、保证合约安全。

接下来就帮助大家详细理解下关于以太坊的事件日志以及关于它所延伸出来的一些基础知识。

测试智能合约中的特定变量

索引变量以重建存储状态

监听事件用于改变前端状态

创建子图以更快地读取数据

2.2声明和触发事件

我们以官方ERC20合约代码为例,在IERC20.sol文件中通过event关键字进行声明。

我们可以把事件看作是一个特殊类型,上面的代码中我们创建了一个名为Transfer的事件,在该事件中有两种参数类型:有索引(indexed)和无索引。其中from和to参数是有索引的,而value参数是没有索引的。

在ERC20.sol的_transfer函数中通过emit关键字触发相应事件。

Lido DAO提议变更治理系统,引入面向质押者和LDO持有者的双重治理解决方案:6月18日消息,Lido DAO提议变更Lido治理系统,以“减少其代币持有者的现有治理范围”。虽然Lido DAO目前部署在以太坊上,但LDO持有者对其他链上的流动质押协议拥有治理权力,包括Polygon和Solana。

在该DAO当前的多链治理系统下,LDO持有者有与其他链相关的激励,“不一定与以太坊网络参与者的激励相一致,”Lido的智能合约开发者Sam Kozin在一篇博客文章中写道。

为了解决这个问题,Lido团队提出了一个双重治理解决方案,提议引入“一种针对质押者和LDO持有者之间不当激励的争议和解决机制”。(Blockworks)[2022/6/18 4:36:02]

通过日志我们可以将日志分为四个部分:

1、Address:地址。即发出事件的合约地址或者账户的地址。

2、Name:名字。即触发的事件名及其参数。

资产管理解决方案DeFiSaver上线MarkerDAO的steCRV金库:3月16日消息,资产管理解决方案DeFi Saver上线MarkerDAO的steCRV金库,用户可将Curve中的stETH/ETHLP代币作为MakerDAO的抵押品,同时获得LidoFinance的LDO代币奖励。[2022/3/16 14:00:15]

3、Topics:主题。即事件中有索引(indexed)的参数。

4、Data:数据。即事件中没有索引的参数。

3.2日志记录中的主题

上面我们有说到主题(Topics),接下来我们详细说下主题。

每个日志记录都包含「主题(topics)」和「数据(data)」。主题是32字节,用于描述事件中发生的事情。不同的操作码(LOG0LOG1LOG2LOG3LOG4)用以描述需要包含在日志记录中的主题数。

EVM中有5个操作码用于触发事件日志并创建日志记录,分别是LOG0,LOG1,LOG2,LOG3以及LOG4,它们用于描述智能合约中的事件,例如代币的转移、所有权的变更等。LOG1即包含了一个主题,而单个日志记录中最多可以包含的主题就是LOG4的四个主题。

Compound总法律顾问:DeFi领域对“抵押”概念的理解很差:Compound总法律顾问Jake Chervinsky发推称:“抵押(Collateralization)是许多DeFi协议正常运作的核心,但今天的情况表明,DeFi领域对这一概念的理解很差。抵押品是指用来清偿债务的特定财产,而不是用于承诺赔偿。”[2020/7/8]

Topics0通常为发生事件名称的签名,Topics1为第一个索引参数的值,Topics2为第二个索引参数的值。

该主题中Topics0的值为0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef,其事件为上一行Name的内容。

而我们对事件Transfer(address,address,uint256)进行keccak256加密后得到的结果和Name的值一样,说明Name的值的确为事件名称的签名。当然,有一个例外是没有事件签名的,那就是触发「匿名事件」时。

声音 | 联通尹正军:区块链底层技术等可以理解为数字经济的底层框架:金色财经报道,12月12日,区块链与数字经济高峰论坛暨2019第八届中关村大数据日上,联通大数据有限公司高级架构师尹正军演讲表示,区块链底层技术、P2P通信网络、大规模更高效的分布式存储计算技术、密码学等可以理解为数字经济的底层框架。数字经济类似于智慧城市,需要有一套科学、合理的度量标准。参考工信部的评价办法,数字经济分为基础指标和前瞻性指标,前瞻性指标包括5G、物联网、区块链等。[2019/12/14]

Topics1就是第一个索引参数的值,即form地址的值。Topics2就是第二个索引参数的值,即to地址的值。从内部调用分析也能看到的确是这样。

主题只能包含32个字节的数据,所以像可能超过32个字节的内容如数组、字符串等的内容不能用作主题,如果要尝试包含大于32个字节的数据,则该主题必须进过hash计算,所以超过32个字节后最好当做数据包含在日志记录中。

3.3日志记录中的数据

现场 | 中央民族大学邓建鹏:区块链公链应该是被监管并被监管理解的:金色财经现场报道,今日火币公链第二期技术创想会在韩国首尔举行,中央民族大学法学院教授邓建鹏(HTX战队)在会上分享了自己对打造可监管公链的思考:在中国,区块链公链应该是可被理解、公开透明、可被监管并被监管理解的。公链的法律责任承担主体问题、安全标准问题、金融行业基本规则遵守问题是可监管的几个方向。[2018/9/14]

日志记录除了主题,还有一部分内容就是数据,数据就是事件的非索引参数的ABI编码或者hash值,我们可以使用Dec或Hex查看数据data的值。

数据和主题都有各自的优劣:

主题是可以搜索到的,数据不能搜索到。

数据比主题所需要的gas少。

由于主题是带有索引的参数,所以我们可以直接在日志中进行搜索,而数据是ABI编码或hash值,所以不能直接搜索。

根据黄皮书我们可以找到日志的相关gas成本,日志的基础费用是375gas,每个主题也是375gas,而数据字节的成本是8gas。

我们可以通过黄皮书知道日志的gas费用非常便宜,一个ERC20代币转账事件的成本最多只花费1756gas,而标准以太币的转账需要花费21000gas。当然了,前面说的只是日志记录操作自身的成本,智能合约开发中不能单纯值计算日志记录操作的成本,但在开发中,我们可以仅在状态变量中保存智能合约所需要使用的数据,其他的就用事件来处理,这样能省下很多的gas费用。

?触发事件

接下来以一个实例进行说明触发事件,下面的代码实现了符合ERC20标准的代币合约所使用的转账事件。

由于上面不是一个「匿名事件」,所以第一个主题将包含事件的签名。

然后我们看一下该事件的参数,其中from和_to地址都是有索引的,value值是没有索引的。所以_from和_to地址会被当成主题,而_value值会被当成数据。

在3.3节中我们说到过主题能被搜索,而数据不能,所以我们能在日志中搜索from地址和_to地址值的相关转账日志,却不能够搜索到转账金额为_value值的转账日志。由于该事件具有3个主题,所以该日志记录操作将使用LOG3操作码。

那如果我们想要找到数据的内容呢?这里就需要知道操作码在EVM中的参数。LOG3虽然包含3个主题,在EVM中却有5个参数。

如果要读取数据的内容,通过以下的方式就可以从内存中读取事件数据了。

钓鱼

5.1事件在钓鱼中的使用

前面介绍了那么多日志事件,那这些是如何和钓鱼联系到一起的呢?攻击者一般会通过日志事件伪装成交易所或者名人等给受害者转币,受害者看到是交易所或者名人转来的代币则放松警惕,此时攻击者会引导受害者到有钓鱼代币的池子中,受害者看到该代币交易价值极高,会立刻授权进行交易,而此时就陷入了攻击者设置的圈套,攻击者会让受害者授权从而盗取走受害者钱包中的钱。

下图就是之前发生的一起钓鱼事件,攻击者伪装成币安热钱包给其他人转钓鱼代币。

我们可以在BSC浏览器上通过标签找到官方地址。

通过查询,发现BinanceHotWallet6地址正是0x8894e0a0c962cb723c1976a4421c95949be2d4e3。

由于浏览器记录是根据事件来的,所以说topics1的值即sender的值就是0x8894e0a0c962cb723c1976a4421c95949be2d4e3。

5.2复现

下面是BEP20的伪代码,以BNBChain主网为例进行复现,攻击者创建一个名为「PhishingToken」的钓鱼代币。。

如下图所示,新增Binance参数其值为?0x8894E0a0c962CB723c1976a4421c95949bE2D4E3。

然后,我们要修改如下图红色标记代码,将emit触发事件中的sender地址修改为Binance。

部署好合约后调用transfer函数将钓鱼代币转发给受害者。

查看交易信息,发现这里的from地址并不是攻击者的地址0x95E2Ea34dEB5C0954B91a47f459770D20568A15B,而是Binance:HotWallet6的地址0x8894E0a0c962CB723c1976a4421c95949bE2D4E3。

查看Logs日志,Topics1记录的sender地址同样也是BinanceHotWallet6地址,而?Topics2记录的recipient就是受害者的地址了。

参考文献

Solidity中文文档

Solidity中的事件和日志

UnderstandingeventlogsontheEthereumblockchain

以太坊黄皮书(2022-08-22)

标签:PICICSMATICTICPICALunaticsmatic币最新消息微博MATICBULL

XLM热门资讯
稳定币:Glassnode:FTX 的衰落_KBTC

随着FTX交易所的毁灭性崩溃,数字资产行业经历了自MtGox以来最令人震惊的托管人破产。在本报告中,我们分析了FTX银行挤兑,自我托管寻求安全,以及比特币最强手的反应.

比特币:比特币长期持有者如何应对其的价格暴跌?_比特币交易软件

萨尔瓦多总统NayibBukele已承诺从11月18日星期五开始以每天一枚硬币的速度购买比特币。gz呺Web3团子比特币价格在11月9日跌至15,653美元,这是自2020年11月以来的最低点.

ATIC:ZT ETF板即將上線MATIC 5倍杠杆产品_Altimatum

親愛的ZT用戶: 為滿足廣大用戶的交易需求,ZT的ETF專區即將上線MATIC5L,MATIC5S並開啟MATIC5L/USDT,MATIC5S/USDT交易對.

加密货币:FTX崩溃,是加密货币的终结吗?_加密货币行情怎么样

FTX的崩溃对加密货币的声誉和愿景造成了灾难性的打击。如果想加入圈子,欢迎私信!所有资讯平台均为工种号——Crypto杰瑞坠落是艰难而迅速的.

FTX:《华盛顿邮报》:在FTX崩盘,SBF兄弟曾为预防大流行病倾注千万资金_SLICE币

原文标题:《BeforeFTXcollapse,founderpouredmillionsintopandemicprevention》原文作者:DanDiamond原文编译:倩雯.

HAI:Chainalysis出现在FTX债权人名单中,但未披露索赔金额_hxchain

11月18日消息,在提交给美国特拉华州破产法院的文件中,区块链分析机构Chainalysis出现在FTX债权人名单中,该文件要求Chainalysis将相关材料发送给其律师.