加密貨幣交易所 加密貨幣交易所
Ctrl+D 加密貨幣交易所
ads

理解以太坊事件日志_區塊鏈:ICS

Author:

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

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

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

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

一、 什么是事件

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

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

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

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

索引變量以重建存儲狀態

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

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

二、聲明和觸發事件

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

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

在 ERC20.sol 的 _transfer 函數中通過 emit 關鍵字觸發相應事件(之前的版本里并不需要使用 emit)。

Zcash官方:已接到Liquid的Zcash摘牌通知 理解監管要求并期待重新上市:7月23日,Zcash開發公司Electric Coin Company(ECC)官方發布推文稱,已接到數字貨幣交易平臺Liquid的通知,Zcash和其他28種代幣將被摘牌。而這是Liquid申請新加坡經營許可證的程序的一部分。ECC認為,Liquid的決定是出于快速獲得執照的審慎考慮。但同時ECC也稱,Zcash完全兼容AML/CFT規定,包括適用于新加坡交易所的規定。目前不知道還有沒有其他交易所采取類似的行動。但如果交易所希望更好地了解Zcash如何適應監管框架,以及交易所如何履行其反洗錢義務,Zcash將始終提供幫助。最后,ECC表示,期待在不久的將來Zcash在新加坡重新上市。據悉,Liquid成立于2014年,在日本、新加坡、越南和菲律賓設有辦事處。[2020/7/23]

一、什么是日志

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

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

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

1、Address: 地址。即發出事件的合約地址或者賬戶的地址。

2、Name: 名字。即觸發的事件名及其參數。

3、Topics: 主題。即事件中有索引 (indexed) 的參數。

CJ子公司推出區塊鏈食品管理解決方案:CJ旗下非上市子公司CJ Olive Networks在28日宣布將推出“ Factory One HACCP”解決方案,Factory One HACCP可自動監視、記錄和管理食品制造過程中的關鍵管理流程(CCP),通過應用區塊鏈技術來防止數據偽造和篡改,從而提高安全性和可靠性。(韓聯社)[2020/4/28]

4、Data: 數據。即事件中沒有索引的參數。

二、日志記錄中的主題

上面我們有說到主題 (Topics),接下來我們詳細說下主題。

每個日志記錄都包含「主題 (topics)」和「數據 (data)」。主題是 32 字節(256 位),用于描述事件中發生的事情。不同的操作碼 (LOG0 LOG1 LOG2 LOG3 LOG4) 用以描述需要包含在日志記錄中的主題數。

EVM 中有 5 個操作碼用于觸發事件日志并創建日志記錄,分別是 LOG0,LOG1,LOG2,LOG3 以及 LOG4,它們用于描述智能合約中的事件,例如代幣的轉移、所有權的變更等。LOG1 即包含了一個主題,而單個日志記錄中最多可以包含的主題就是 LOG4 的四個主題。

Topics0 通常為發生事件名稱的簽名(keccak256 的哈希值),包括其參數的類型(address,uint256 等),Topics1 為第一個索引參數的值,Topics2 為第二個索引參數的值。

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

聲音 | 安永:超過三分之二的亞太公司缺乏對區塊鏈解決方案的理解:據businesstimes報道,安永會計師事務所(Ernst&Young,EY)在一個實時區塊鏈直播中調查發現,在區塊鏈解決方案方面,超過三分之二或68%的亞太公司對其應用缺乏了解和教育。安永周二表示,缺乏理解和教育是董事會和高管在采用區塊鏈解決方案時面臨的最大障礙。此外,大約三分之二或66%的受訪者認為,在將區塊鏈應用于組織之前,他們需要更好地了解區塊鏈的可能性,風險和好處。此次調查共有576名亞太地區參與者,其中13.7%來自新加坡。[2019/7/16]

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

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

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

三、日志記錄中的數據

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

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

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

聲音 | 嘉楠耘智聯席董事長:研究區塊鏈需借助比特幣來加深理解:嘉楠耘智聯席董事長孔劍平在17日的行業會議上發表演講,表示目前區塊鏈處于探索階段。作為比特幣的底層技術,現階段研究區塊鏈,還需要借助比特幣來加深對其理解。孔劍平同時呼吁,未涉足區塊鏈領域或與之相關領域的投資者理性投資,避免淪為韭菜。[2018/10/17]

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

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

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

我們可以通過黃皮書知道日志的 gas 費用非常便宜,一個 ERC20 代幣轉賬事件的成本最多只花費 1756 gas(日志基礎的 375 gas,轉賬事件 3 個主題的 375 * 3 =1125 gas,數據字節最大的 32 字節為 8 * 32 = 256 gas),而標準以太幣的轉賬需要花費 21000 gas。當然了,前面說的只是日志記錄操作自身的成本,智能合約開發中不能單純值計算日志記錄操作的成本,但在開發中,我們可以僅在狀態變量中保存智能合約所需要使用的數據,其他的就用事件來處理,這樣能省下很多的 gas 費用。

接下來以一個實例進行說明觸發事件,下面的代碼實現了符合 ERC20 標準的代幣合約所使用的轉賬事件。

聲音 | 趙東:所謂“操縱”只是個人理解:據 IMEOS 報道。趙東今日在其朋友圈發文稱,之前我發表的關于EOS的言論可能給大家造成一些誤會,所以我刪掉了。Bitfinex的CEO Jean Louis從來沒有“確認”或者\"說過”EOS團隊操縱過市場。所謂“操縱”只是我趙東的個人理解。[2018/7/21]

由于上面不是一個「匿名事件」,所以第一個主題將包含事件的簽名(簽名時只需要參數的類型)。

然后我們看一下該事件的參數,其中 from 和 _to 地址都是有索引的,value 值是沒有索引的。所以 _from 和 _to 地址會被當成主題,而 _value 值會被當成數據。

在 3.3 節中我們說到過主題能被搜索,而數據不能,所以我們能在日志中搜索 from 地址和 _to 地址值的相關轉賬日志,卻不能夠搜索到轉賬金額為 _value 值的轉賬日志。由于該事件具有 3 個主題(事件的簽名,from,_to),所以該日志記錄操作將使用 LOG3 操作碼。

那如果我們想要找到數據的內容呢?這里就需要知道操作碼在 EVM 中的參數。LOG3 雖然包含 3 個主題,在 EVM 中卻有 5 個參數。

如果要讀取數據的內容,通過以下的方式就可以從內存中讀取事件數據了。

一、事件在釣魚中的使用

前面介紹了那么多日志事件,那這些是如何和釣魚聯系到一起的呢?攻擊者一般會通過日志事件偽裝成交易所或者名人等給受害者轉幣(該幣無實際交易價值,是釣魚代幣),受害者看到是交易所或者名人轉來的代幣則放松警惕,此時攻擊者會引導受害者到有釣魚代幣的池子中,受害者看到該代幣交易價值極高,會立刻授權進行交易,而此時就陷入了攻擊者設置的圈套,攻擊者會讓受害者授權從而盜取走受害者錢包中的錢。

下圖就是之前發生的一起釣魚事件,攻擊者偽裝成幣安熱錢包給其他人轉釣魚代幣。

我們可以在 BSC 瀏覽器上通過標簽找到官方地址。

通過查詢,發現 Binance Hot Wallet 6 地址正是 0x8894e0a0c962cb723c1976a4421c95949be2d4e3

由于瀏覽器記錄是根據事件來的,所以說 topics1 的值即 sender 的值就是 0x8894e0a0c962cb723c1976a4421c95949be2d4e3

二、復現

下下面是 BEP20 的偽代碼,以 BNB Chain 主網為例進行復現,攻擊者創建一個名為「Phishing Token」的釣魚代幣。

如下圖所示,新增 Binance 參數其值為 0x8894E0a0c962CB723c1976a4421c95949bE2D4E3

然后,我們要修改如下圖紅色標記代碼,將 emit 觸發事件中的 sender 地址修改為 Binance。

部署好合約(https://bscscan.com/address/0x7c08aa19b8da2c14591506d7d3c385fc702e0630)后調用 transfer 函數將釣魚代幣轉發給受害者。

查看交易信息,發現這里的 from 地址并不是攻擊者的地址 0x95E2Ea34dEB5C0954B91a47f459770D20568A15B,而是 Binance: Hot Wallet 6 的地址 0x8894E0a0c962CB723c1976a4421c95949bE2D4E3

查看 Logs 日志,Topics1 記錄的 sender 地址同樣也是 Binance Hot Wallet 6 地址,而  Topics2 記錄的 recipient 就是受害者的地址了。

細節決定成敗,不要認為事件日志是微不足道的滄海一粟。在區塊鏈世界越是細節的地方越容易被黑客攻擊利用,往往需要更加謹慎小心。同時需要注意的是,我們也不能因為日志所展示出來的內容掉入騙子設計好的騙局中。再次提醒大家,不要隨意點擊陌生鏈接,更不要隨意授權他人。當我們更加深入理解事件日志的時候,才能更好的防止自己上當受騙。

知道創宇區塊鏈安全實驗室

企業專欄

閱讀更多

金色早8點

金色財經 Willis

Zixi

鏈茶館

道說區塊鏈

Dorahacks

PANews

老雅痞

Web3筆記

TalentDAO

區塊律動BlockBeats

Tags:區塊鏈PICGASICS區塊鏈的未來發展前景肖磊PICKLE幣Togashi InuAICS

fil幣價格今日行情
要短期回報也要長期發展 從基本原則進行Token設計_KEN:Ampleforth Governance Token

原文標題:《要短期回報也要長期發展,從基本原則進行代幣設計》在過去的兩年里,許多協議已經建立了Token經濟學模型,很多一心賺錢的項目方為了讓投資者們一股腦的把錢放進來.

1900/1/1 0:00:00
穩定幣戰爭持續升溫:穩定幣市場格局發生了怎樣的變化_USD:SDD價格

穩定幣的戰爭正在暗地里升溫,特別是在危機之后。首先,我們先來看看 Near 的 $USN 和 Huobi 的$HUSD 的崩潰。USN 作為一個算法穩定幣在 7 個月前剛剛推出.

1900/1/1 0:00:00
工信部:將加快工業元宇宙創新應用和數字化生態構建_元宇宙:NEWS

11月17日,2022中國互聯網大會工業元宇宙論壇在深圳舉行。工信部信息技術發展司副司長王威偉在致辭中提出,工信部將加快工業元宇宙創新應用和數字化生態構建,形成一批可復制、可推廣的應用模式和商業.

1900/1/1 0:00:00
英偉達:元宇宙是未來_VER:Somnium

告別2022,2023年CES展(國際消費類電子產品展覽會)如期而至。英偉達的發布會依然分顯卡、機器人(9.250, 0.06, 0.65%)、汽車等多個板塊.

1900/1/1 0:00:00
下一次出圈前:Web3產品 需要讓「普通人」輕松入門_WEB:WEB3.0幣

原文作者: 0 xjordy您正在觀看 2022 年超級碗比賽,并且有史以來第一次看到超級碗播放加密公司的廣告.

1900/1/1 0:00:00
應用鏈如何成為 Web3 的“潛力鏈”?_應用鏈:XSTAR幣

什么是應用鏈? 區塊鏈最初是圍繞貨幣和金融誕生的。隨著數字資產交易的風生水起,區塊鏈行業開始將目光投向藝術、游戲和音樂等領域的應用開發。應用程序的擴展需要強大的、可定制性的業務模型做支撐.

1900/1/1 0:00:00
ads