比特幣行情 比特幣行情
Ctrl+D 比特幣行情
ads
首頁 > ADA > Info

區塊鏈:理解以太坊事件日志-ODAILY

Author:

Time:1900/1/1 0:00:00

前言

當你在區塊鏈瀏覽器上查詢交易時,是否只是查看概覽和內部交易?那么事件日志呢?是否在不起眼的角落被你忽略了。

交易事件日志對于用戶以及開發者來說實際上都是至關重要的。通過觸發事件不僅能將鏈上智能合約的交易通知給外界,還能讓智能合約開發者對合約進行測試、保證合約安全。

接下來就幫助大家詳細理解下關于以太坊的事件日志以及關于它所延伸出來的一些基礎知識。

事件

2.1什么是事件?

事件,是能方便地調用以太坊虛擬機日志功能的接口。

而Solidity事件就是EVM的日志功能之上的抽象。應用程序可以通過以太坊客戶端的RPC接口訂閱和監聽這些事件,允許我們打印在區塊鏈上的信息。

所以通過Solidity事件,我們可以做到:

測試智能合約中的特定變量

索引變量以重建存儲狀態

監聽事件用于改變前端狀態

創建子圖以更快地讀取數據

2.2聲明和觸發事件

我們以官方ERC20合約代碼為例,在IERC20.sol文件中通過event關鍵字進行聲明。

我們可以把事件看作是一個特殊類型,上面的代碼中我們創建了一個名為Transfer的事件,在該事件中有兩種參數類型:有索引(indexed)和無索引。其中from和to參數是有索引的,而value參數是沒有索引的。

在ERC20.sol的_transfer函數中通過emit關鍵字觸發相應事件。

CZ:FUD是可理解的正常市場行為,目前Binance平臺資金流向已扭轉為凈流入:12月14日消息,Binance 創始人CZ 在 CZ AMA 中就近期市場中出現 Binance 相關 FUD 的問題發表看法表示:雖然 FTX 的崩潰為用戶帶來了恐懼,但這不意味著所有交易平臺都有問題。客戶希望現在把錢從 Binance 取走,那么他們就可以去提,他們也隨時可以再次回來參與交易,這是用戶的自由。Binance 擁有充足的現金儲備,所有用戶資產都是 1:1 獲得儲備支持的。目前我們已經看到了有資金在回流入 Binance,所以我認為本次 FUD 只是市場上很正常的一個行為,Binance 作為市場參與者有責任保持穩定。[2022/12/14 21:44:49]

日志

3.1什么是日志?

在以太坊中,日志是用來存儲事件。當事件被調用時,會觸發參數存儲到交易的日志中。其不能被智能合約訪問,但是可以提供關于交易和區塊中發送的信息。

我們隨意點開一條交易(0x477ed7208127bea597142622d52df46d3e4967835bd3609995581eb5aaeeec3e),查看其日志Logs。

通過日志我們可以將日志分為四個部分:

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的四個主題。

Topics0通常為發生事件名稱的簽名,Topics1為第一個索引參數的值,Topics2為第二個索引參數的值。

該主題中Topics0的值為0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef,其事件為上一行Name的內容。

孟巖:數字資產是理解 DeFi 的一把鑰匙:9月10日20:30,火幣研究院重磅打造的“區塊鏈百家講壇”2.0版本正式開播,本期邀請到數字資產研究院副院長、通證思維實驗室發起人孟巖做客直播間,和大家一起聊聊“資產上鏈:產業區塊鏈與DeFi的橋梁和升級路徑”。

孟巖表示:“數字資產是理解DeFi的一把鑰匙。在DeFi當中,數字資產與智能合約同等重要,甚至更加重要。充分理解在DeFi中數字資產的性質,以及是如何產生的、流轉、背后的價值、如何使用和銷毀,都會幫助你深刻理解DeFi。”

據悉,“區塊鏈百家講壇”是由國內頂尖的區塊鏈研究機構火幣研究院推出的精品課程,既是初學入門區塊鏈技術的第一堂課,也是深化進階區塊鏈知識的不二之選。[2020/9/10]

而我們對事件Transfer(address,address,uint256)進行keccak256加密后得到的結果和Name的值一樣,說明Name的值的確為事件名稱的簽名。當然,有一個例外是沒有事件簽名的,那就是觸發「匿名事件」時。

Topics1就是第一個索引參數的值,即form地址的值。Topics2就是第二個索引參數的值,即to地址的值。從內部調用分析也能看到的確是這樣。

主題只能包含32個字節的數據,所以像可能超過32個字節的內容如數組、字符串等的內容不能用作主題,如果要嘗試包含大于32個字節的數據,則該主題必須進過hash計算,所以超過32個字節后最好當做數據包含在日志記錄中。

分析 | 63%機構受訪者認為高級管理人員對區塊鏈缺乏理解:據cointelegraph報道,市場研究公司PollRight代全球區塊鏈業務委員會(GBBC)對機構投資者的調查顯示,63%的受訪者認為高級業務主管對區塊鏈技術的理解不足。據報道,PollRight采訪了71家機構投資者,包括私募股權基金、對沖基金和養老基金。此外,30%的受訪者認為他們對新興技術的了解是“平均水平”,其余7%的受訪者認為高級管理人員對區塊鏈的理解是“好的”。此外,76%的受訪者表示并不認為大公司的高級業務主管致力于區塊鏈,但預計2019年區塊鏈技術的全球支出將增加108%。33%的受訪者認為,在兩年內,區塊鏈在金融服務和銀行業務中的應用將大幅增加。[2019/1/23]

3.3日志記錄中的數據

日志記錄除了主題,還有一部分內容就是數據,數據就是事件的非索引參數的ABI編碼或者hash值,我們可以使用Dec或Hex查看數據data的值。

數據和主題都有各自的優劣:

主題是可以搜索到的,數據不能搜索到。

數據比主題所需要的gas少。

由于主題是帶有索引的參數,所以我們可以直接在日志中進行搜索,而數據是ABI編碼或hash值,所以不能直接搜索。

根據黃皮書我們可以找到日志的相關gas成本,日志的基礎費用是375gas,每個主題也是375gas,而數據字節的成本是8gas。

聲音 | Samson Mow:很難理解為何質疑Liquid網絡不是真正的側鏈:據Bitcoinist消息,Blockstream首席戰略官Samson Mow近日表示,很難理解為何會有人質疑Liquid網絡并不是真正的側鏈。Liquid網絡與兩種數字貨幣錨定,并且其數據可在其他鏈上被驗證。[2018/10/13]

我們可以通過黃皮書知道日志的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)

Tags:區塊鏈NANANCNCE區塊鏈技術適合女生嗎Steer FinancePoo FinanceIBNB Finance

ADA
區塊鏈:區塊鏈安全8月報:安全事件超42起,損失約2.44億美元-ODAILY

*1.前言* 八月,web3.0方面安全事件數量依舊高居不下,沒有下降趨勢。根據知道創宇區塊鏈安全實驗室數據顯示:該月發生的安全事件超42起,和上月基本持平,造成的損失總金額共計約2.44億美元.

1900/1/1 0:00:00
NFT:預言機:鏈接加密世界與現實世界的橋梁-ODAILY

區塊鏈是獨立于現實世界運行的系統。加密世界的數據在鏈上產生,也在鏈上繼續被使用。鏈外世界的數據無法直接傳遞到區塊鏈上.

1900/1/1 0:00:00
DAO:JZL Capital行業周報第50期:穩定幣不斷流出,市場持續低迷-ODAILY

一、行業動態總結 上周加密市場仍處于縮量的窄幅震蕩,不管是每股上周二的上漲還是周三的暴跌,加密市場基本都是巋然不動,不同于以往的納指波動放大器,當前的加密市場頗有納指波動縮小器的表現.

1900/1/1 0:00:00
BIT:Bitfinex一周簡報(1121-1127)-ODAILY

BitfinexAlpha|隨著比特幣的波動,FTX的危機變得更加異乎尋常通貨膨脹的粘性是金融市場緊張情緒的根源。盡管上周PPI數據略為正面,但人們普遍認為,現在結束持續通脹還為時過早.

1900/1/1 0:00:00
RON:波場TRON賬戶總數突破1.15億-ODAILY

區塊鏈瀏覽器TRONSCAN最新數據顯示,截至10月9日,波場TRON賬戶總數達到115,020,054,正式突破1.15億.

1900/1/1 0:00:00
EDO:Qredo通過SOC2 II類機構托管最高合規標準-ODAILY

2023年1月10日—Qredo很高興地宣布,它最近通過了服務組織的系統和組織控制(SOC)2II類審核.

1900/1/1 0:00:00
ads