开发者来说实际上都是至关重要的。通过触发事件不仅能将链上智能合约的交易通知给外界,还能让智能合约开发者对合约进行测试、保证合约安全。
接下来就帮助大家详细理解下关于以太坊的事件日志以及关于它所延伸出来的一些基础知识。
测试智能合约中的特定变量
索引变量以重建存储状态
监听事件用于改变前端状态
创建子图以更快地读取数据
2.2声明和触发事件
我们以官方ERC20合约代码为例,在IERC20.sol文件中通过event关键字进行声明。
我们可以把事件看作是一个特殊类型,上面的代码中我们创建了一个名为Transfer的事件,在该事件中有两种参数类型:有索引(indexed)和无索引。其中from和to参数是有索引的,而value参数是没有索引的。
在ERC20.sol的_transfer函数中通过emit关键字触发相应事件。
Poly Network生态核心贡献者:建立统一的跨链安全模型有助于我们系统化理解互操作风险:4月15日消息,在2023香港Web3嘉年华跨链专场中,Poly Network生态核心贡献者Luke Liu认为,建立统一的跨链安全模型有助于我们系统化理解互操作风险。跨链的目标是标准化通信过程,保证一条链上的请求在另一条链上被正确、顺利地执行。各条链是不同的,但我们尽量建立起统一的风险模型,包括数据请求、通信、验证三个环节。经由数学(模型)抽象,区块链系统中的多链互操作包含应用、通信、共识等不同层的协同,这一套组合交互系统既依赖各组件的安全性,也考验各组件之间交互的安全性。建立起这样的(安全)框架可以帮助我们更系统性地理解互操作风险,而非根据个例归纳。[2023/4/15 14:05:26]
通过日志我们可以将日志分为四个部分:
1、Address:地址。即发出事件的合约地址或者账户的地址。
2、Name:名字。即触发的事件名及其参数。
观点:让用户能够真正理解隐私的重要性,才能推进产业发展:7月13日19:00,LatticeX中国区大使Jason、Oasis Network中国社区技术顾问Vic、Secret Network中国营销经理Kelvin、Findora内容负责人James参与了由ULink主办的“区块链技术不断前行的当下隐私充当着怎样的角色呢?”线上圆桌论坛。
Jason表示,区块链技术的公开、透明、不可篡改特性是把双刃剑,如果这个行业只有Token,隐私保护就是一个炒作的噱头,但如果区块链想要实现大规模使用,它承载的信息只会越来越多,数据之间的关联性会越来越多,这时数据的主权和保护问题便不可忽视,
Vic表示,滴滴事件给整个隐私行业带来了利好,从而推动用户对于整个隐私行业和数据保护意识的提升,让更多人意识到数据安全的重要性和必要性,也让更多的企业意识到数据获取需要在合法的范围内进行。
Kelvin表示,在DeFi世界中存在着抢先交易的问题,大型的抢购活动之前一些公司或个人就可以获取到大众的矿工费,从而利用机器人矿工费抢先完成交易,获取相应的利益,但这个隐私的暴露问题对于大多数人来说是不公平的。
James表示,我们需要通过现有案例分析、立法监管不断推进、大数据行业的自觉性、隐私从业者的推进与教育让用户能够真正理解隐私的重要性,才能推进产业发展。[2021/7/14 0:50:37]
3、Topics:主题。即事件中有索引(indexed)的参数。
声音 | Galaxy Digital创始人:不确定自己是否理解山寨币的涨势:Galaxy Digital创始人Michael Novogratz发推称:“我不确定我是否理解山寨币的涨势。我为那些靠它赚钱的人感到高兴。但我不确定有什么东西改变了。”[2020/1/16]
4、Data:数据。即事件中没有索引的参数。
3.2日志记录中的主题
上面我们有说到主题(Topics),接下来我们详细说下主题。
每个日志记录都包含「主题(topics)」和「数据(data)」。主题是32字节,用于描述事件中发生的事情。不同的操作码(LOG0LOG1LOG2LOG3LOG4)用以描述需要包含在日志记录中的主题数。
EVM中有5个操作码用于触发事件日志并创建日志记录,分别是LOG0,LOG1,LOG2,LOG3以及LOG4,它们用于描述智能合约中的事件,例如代币的转移、所有权的变更等。LOG1即包含了一个主题,而单个日志记录中最多可以包含的主题就是LOG4的四个主题。
声音 | 美联储埃文斯:加密货币Libra可以很快壮大起来 美联储需要理解其意义:美联储埃文斯:Facebook(FB.O)旗下加密货币Libra可以很快壮大起来,美联储需要理解其意义。[2019/9/25]
Topics0通常为发生事件名称的签名,Topics1为第一个索引参数的值,Topics2为第二个索引参数的值。
该主题中Topics0的值为0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef,其事件为上一行Name的内容。
而我们对事件Transfer(address,address,uint256)进行keccak256加密后得到的结果和Name的值一样,说明Name的值的确为事件名称的签名。当然,有一个例外是没有事件签名的,那就是触发「匿名事件」时。
Topics1就是第一个索引参数的值,即form地址的值。Topics2就是第二个索引参数的值,即to地址的值。从内部调用分析也能看到的确是这样。
前摩根士丹利驻香港执行董事:怀疑加密货币的比特币持有者应理解加密货币潜在的技术:据btcmanager消息,香港的加密货币企业家,前摩根士丹利驻香港执行董事Wayne Trench表示,所有因价格波动的不稳定性对加密货币持怀疑态度的比特币持有人,应该摒弃这一想法并理解加密货币潜在的技术。[2018/4/10]
主题只能包含32个字节的数据,所以像可能超过32个字节的内容如数组、字符串等的内容不能用作主题,如果要尝试包含大于32个字节的数据,则该主题必须进过hash计算,所以超过32个字节后最好当做数据包含在日志记录中。
3.3日志记录中的数据
日志记录除了主题,还有一部分内容就是数据,数据就是事件的非索引参数的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)
标签:TOPPICICSGASGameStop tokenized stock FTXPICKWorld Politicsgas币值得投资吗
11月18日消息,巴哈马证券委员会发布有关控制FTX巴哈马子公司FTXDigitalMarketsLtd的声明,该声明表示,巴哈马证券委员会在巴哈马最高法院作出的命令授权下执行监管权力.
1900/1/1 0:00:00原文作者:SoldmanGachs原文编译:深潮TechFlow几天前,我参加了Multicoin每月的LP电话会议.
1900/1/1 0:00:00企业使用许可区块链来加快业务流程、提高透明度并降低成本。企业级区块链的私有性质使其优于比特币等公共区块链,因为后者限制了数据可见性。企业正在使用区块链解决方案来提高业务运营效率.
1900/1/1 0:00:00就在几个月前,FTX似乎是加密货币世界的一个重大成功故事。不熟悉这个名字或行业?那我们就从头说起吧。FTX代表什么?FTX是“期货交易所”的缩写。什么是加密货币?它是以数字形式交易的货币.
1900/1/1 0:00:00Aptos见证了社会方面的兴趣尽管其生态系统发生变化,但其TVL继续下降与许多其他加密货币一样,Aptos也面临着FTX崩溃所产生的FUD的影响。然而,在过去的几天里,APT表现良好.
1900/1/1 0:00:00简单来说XLM的交易价格高于长期支撑位0.085美元。它遵循长期下行阻力线。XLM已从水平通道崩溃。点击输入图片描述Stellar(XLM)价格在长期支撑区域反弹,但没有显示出看涨逆转迹象.
1900/1/1 0:00:00