译文出自:登链翻译计划
译者:Tiny熊
序言:先阅读一下以太坊虚拟机,可能会有所帮助,在本文中,我会跳过基础知识直接研究。
在传统编程中,应用程序经常使用日志来捕获和描述特定时刻的情况。这些日志通常用于调试应用程序,检测特定事件或将日志中发生的事情通知查看者。事实证明,在编写智能合约或与智能合约进行交互时,日志也非常有用!那么以太坊是如何做的呢?
以太坊上的日志
EVM当前有5个操作码用于触发事件日志:LOG0,LOG1_,LOG2,_LOG3和LOG4。
这些操作码可用于创建“日志记录”。日志记录就是用于描述智能合约中的事件,例如代币转移、所有权变更等。
以太坊黄皮书-拜占庭版本69351d5(2018-12-10)
每个日志记录都包含“主题(topics)”和“数据”。主题是32字节(256位)的“词”,用于描述事件中发生的事情。不同的操作码(LOG0…LOG4)来描述需要包含在日志记录中的主题数。例如,“LOG1”包括“一个主题”,而“LOG4”包括“四个主题”。因此,单个日志记录中可以包含的最大主题数是四个。
马斯克称盖茨对AI理解有限:3月28日消息,据媒体报道,在一位推特用户关于比尔·盖茨参与OpenAI以及对AI总体看好的推文下,埃隆·马斯克回复称还记得与盖茨的早期会面。马斯克表示,盖茨当时对AI的理解有限,现在依然如此。[2023/3/28 13:30:28]
以太坊日志记录中的主题
日志记录的第一部分由一组主题组成。这些主题用于描述事件。第一个主题通常为事件名称及其参数类型(uint256,string等)签名(keccak256哈希)。一个例外是触发“匿名事件”没有事件签名。由于主题只能容纳32个字节的数据,因此无法将数组或字符串等的内容用作主题。而是应将其作为数据包括在日志记录中,而不是作为主题。如果要尝试包含大于32个字节的主题,则该主题需要被hash计算。因此,仅当你知道原始输入时,才可以知道此哈希表示的内容。
总之,主题应该仅用于需要搜索查询(例如:地址)的数据。可以将主题视为事件的索引键,它们都映射到相同的值,接下来将讨论。
以太坊日志记录中的数据
日志记录的第二部分包含额外的数据。主题和数据在一起组成日志记录,主题和数据每自有其优点和缺点。例如,主题是可搜索的,但数据却不能。而数据比主题“便宜得多”。此外,尽管主题最多有4个,但数据却没有限制,这意味着它可以包括大量或复杂数据,例如数组或字符串。因此,事件数据(如果有)可以视为_值_。
声音 | 美联储埃文斯:加密货币Libra可以很快壮大起来 美联储需要理解其意义:美联储埃文斯:Facebook(FB.O)旗下加密货币Libra可以很快壮大起来,美联储需要理解其意义。[2019/9/25]
让我们看一些示例,看看主题,数据和日志记录是如何使用的。
触发事件
以下实现了ERC20的代币合约,使用了Transfer事件:
由于这不是匿名事件,因此第一个主题将包括事件签名:
现在,让我们看一下此Solidity事件的参数(from_,to,_value):
由于前两个参数声明为indexed,因此被视为主题。最后一个参数没有indexed,它将作为数据(而不是单独的主题)。这意味着我们可以进行这样的搜索:查找所有从地址0x0000...到地址0x0000…的转账日志,或者是“所有转账到地址0x0000…的日志”,但没法搜索“转账金额为x的转账。我们知道了此事件将具有3个主题,这意味着此日志记录操作将使用LOG3操作码。
现在,我们只需要了解如何包含数据(即最后的参数)即可。LOG3需要5个参数:
声音 | 德勤咨询区块链主管:建立必要的治理比理解和实现区块链技术更为困难:据华尔街日报报道,德勤咨询区块链主管Geoff Lougheed表示:理解和实现区块链技术通常比建立必要的治理更容易。希望在企业间建立区块链的领导者往往无法召集一个团队来决定利益相关者将如何操作区块链、定义其规则、设置治理指南,以及创建一个整体组织结构。但这些因素对于区块链的开发是不可或缺的,因为它们阐明了成员及其提供的信息之间如何互动。[2019/5/1]
LOG3(memoryStart,memoryLength,topic1,topic2,topic3)
通过以下方式从内存中读取事件数据:
memory
幸运的是,像Solidity,Vyper或Bamboo这样的高级智能合约程序设计语言将为我们处理将事件数据写入内存的过程,我们可以在触发日志时直接将数据作为参数传递。
检索事件日志
通过使用web3JavaScript库,可用于与本地或远程以太坊节点进行交互,我们能够订阅新的事件日志:
动态 | 美国德克萨斯州寻求由区块链提供支持的ID管理解决方案:9月17日消息,德克萨斯州奥斯汀市一直致力于为遇到无家可归者的人们开发区块链驱动的身份识别系统。该倡议被称为MyPass,计划中的最终产品是一个平台,将个人记录和id的数字副本收集在一个手机号码或电子邮件地址下,使实体副本冗余。一个人与不同服务的所有交互都可以使用区块链记录在一个台账上,而不是在多个由个人管理的数据库之间存储数据,在每次交互发生时,由经过验证的机构和个人组成的机构和个人验证每个交互。这个想法来自于在难民营中实施的类似项目,比如世界粮食计划署在约旦的建筑项目。[2018/9/17]
每当发生新的SAI代币转账时,此代码都会通知我们,接收到事件通知,这对很多应用程序都很有用。例如,一旦你在以太坊地址上收到代币,钱包界面就可以提醒你。
日志的gas成本
根据黄皮书、日志的基础成本是375gas。另外每个的主题需要额外支付375gas的费用。最后,每个字节的数据需要8个gas。
这实际上是很便宜!可以计算一下一个ERC-20代币转移事件的成本。首先,基本成本为375gas。其次,“转移”事件包含3个主题,这是另外的375_3=1125gas。最后,我们为所包含的每个数据字节添加8gas。由于数据仅包含ERC-20转账的数量,最大为32字节,因此用于记录日志数据所需的最大gas量为8_32=256gas。这总计要花费1756gas的总gas成本。作为对比参考,标准的以太币(非代币)转账要花费21000gas,是事件成本的十倍以上了!
Qtum量子链帅初:区块链作为技术变革和组织理念变革的结合体 很难被大众理解:Qtum量子链创始人帅初今日在全球第一区块链社群 “三点钟区块链”中说,2014年之前,在这个行业里面基本上没有区块链的说法,从2009年至2014年,行业从业者使用的都是比特币或者加密货币的名词,2014年以后,由于“币” 具备很强的金融属性,很难与主流社会融合,因此行业慢慢使用区块链技术(Blockchain Technology)来抽象出加密货币背后所使用的技术集合,作为一个中性词汇,开始慢慢走入主流视野。
区块链网络本身是一套复杂的软件系统和软件工程,所采用的数学原理,密码学原理,网络架构,共识机制,经济学模型,如果没有经过高等教育理工科背景的培养,是难以理解的。[2018/2/19]
如果我们假设gas价格为1gwei,那么操作的总成本将为1756gwei,相当于0.000001756ETH。如果以太坊的当前价格在200美元左右,那么总计为$0.0003512。请记住,这是在全球范围内将数据永久存储的费用。
声明:这只是日志记录操作本身的成本。任何以太坊交易至少需要21000gas,并且交易的输入数据每字节最多花费16gas。通常,要转账和日志记录ERC-20代币,费用在40,000–60,000gas。
结论
日志是一种以少量价格将少量数据存储在以太坊区块链上的优雅方法。具体来说,事件日志有助于让其他人知道发生了什么事情,而无需他们单独查询合约。
参考文献
Wood,G.(2014)。以太坊:一个安全的去中心化通用交易账本
以太坊基金会Solidity文档
Web3文档
本翻译由CellNetwork赞助支持。
来源:https://medium.com/mycrypto/understanding-event-logs-on-the-ethereum-blockchain-f4ae7ba50378
参考资料
登链翻译计划:https://github.com/lbc-team/Pioneer
Tiny熊:https://learnblockchain.cn/people/15
以太坊虚拟机:https://medium.com/mycrypto/the-ethereum-virtual-machine-how-does-it-work-9abac2b7c9e
以太坊黄皮书:https://ethereum.github.io/yellowpaper/paper.pdf
keccak256:https://en.wikipedia.org/wiki/SHA-3
Solidity:https://learnblockchain.cn/docs/solidity/
Vyper:https://github.com/ethereum/vyper
Bamboo:https://github.com/cornellblockchain/bamboo
web3:https://learnblockchain.cn/docs/web3.js/
Wood,G.(2014)。以太坊:一个安全的去中心化通用交易账本:https://ethereum.github.io/yellowpaper/paper.pdf
以太坊基金会Solidity文档:https://solidity.readthedocs.io/en/latest/
Web3文档:https://learnblockchain.cn/docs/web3.js/
CellNetwork:https://www.cellnetwork.io/?utm_souce=learnblockchain
本文来源于非小号媒体平台:
登链社区
现已在非小号资讯平台发布105篇作品,
非小号开放平台欢迎币圈作者入驻
入驻指南:
/apply_guide/
本文网址:
/news/9558537.html
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表非小号的观点或立场
上一篇:
币安为何推出第三条链?这对BNB意味着什么?
yieldfarming为用户提供了一种新的方式,通过使用无许可流动性协议持有加密货币来获得回报。它允许任何人使用基于以太坊区块链构建的去中心化的“货币乐高”生态系统来赚取被动收入.
1900/1/1 0:00:008月31日,根据币安最新行情显示,YFI最高触及39690USDT,目前价格基本稳定在33000USDT左右,至此,YFI成为2020年第一个万倍币,用时仅43天.
1900/1/1 0:00:00Gate.io将于2020年12月21日16:00上线Frax(FRAX)交易。Frax是一个分数算法稳定币.
1900/1/1 0:00:00从ETH的历史走势,看FIL未来发展趋势历史总是惊人的相似这句话,颇具真理意义。正如世界经济的走势,发展中国家在达到发达国家经济水平的时候,必然也会经历相应的市场经济变动.
1900/1/1 0:00:00任何在交易过程中产生的不必要攫取都是一种税收,最终会被开源世界中的「复制粘贴型」竞争驱逐出去。原文标题:《观点|协议作为价值攫取最小化的交易协调者》作者:ChrisBurniske,加密货币投资.
1900/1/1 0:00:00早春三月,虽然加密货币市场仍处于熊市寒冬,区块链行业却不断传出令人振奋的消息:以太坊完成旨在将Pow共识机制切换为PoS的君士坦丁堡硬分叉,Cosmos的主网CosmosHub正式上线.
1900/1/1 0:00:00