以太幣交易所 以太幣交易所
Ctrl+D 以太幣交易所
ads

理解以太坊事件日志_PIC

Author:

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

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

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

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

索引變量以重建存儲狀態

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

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

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:名字。即觸發的事件名及其參數。

聲音 | 信通院金鍵:用連接范式3問理解區塊鏈:12月19日,由中國信息通信研究院、中國互聯網協會、北京航空航天大學聯合主辦的“智能+學院”區塊鏈系列中國互聯網協會專場培訓在北京召開。信通院工業互聯網與物聯網研究所所金鍵提出“連接范式3問”:1.智能連接:都說萬物互聯,為什么很多設備都連不起來?2.價值交換:為什么不能向發送短信一樣點對點的進行支付?3.數據保護:為什么信息不讓所有者做主?為什么我的數據不能隨身攜帶?不能發揮更大的價值?金鍵表示:“區塊鏈技術很復雜,但這3個問題給了我們啟發,讓我們知道來到了一個需要什么技術的時代,去理解區塊鏈技術到底能夠用來做什么。”(巴比特)[2019/12/19]

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

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

3.2日志記錄中的主題

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

動態 | 美國國土安全部獎勵區塊鏈創業公司20萬美元,用于開發證書管理解決方案:據The Block消息,美國國土安全部(DHS)向區塊鏈創業公司Digital Bazaar獎勵近20萬美元,用于建立一個證書管理解決方案。DHS表示,目前頒發、驗證和驗證大量許可證和證書的流程通常是紙質的,不利于數據交換,而且容易丟失、偽造和偽造。它補充說,使用區塊鏈技術將這些過程數字化有助于增強安全性、確保互操作性和防止偽造和假冒。因此,Digital Bazaar將致力于一個名為“可互操作的企業身份和憑據生命周期管理”的項目,以幫助DHS改進其流程。[2019/11/15]

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

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

聲音 | 澳本聰:比特幣核心完全沒有真正理解比特幣:澳本聰(Craig Wright)剛剛在推特表示,比特幣與優良保密協議毫無相似之處,因為密碼永遠不應該再次使用。為了保障隱私,用過的密碼應該被刪除,然后每一次更換新的密碼。然而閃電網絡無法擴容,并且直接排除了比特幣的安全模塊。這是一個網絡圖論的問題,解決方案是NP-Hard。更多節點,更多計算,在擴容問題上,解決ECDSA是一個更為簡潔的方法。總而言之,比特幣核心(支持者們)完全沒有真正理解比特幣。[2018/12/30]

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

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

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

工信部于佳寧:深入理解區塊鏈,要從兩個層次來看:近日,工業和信息化部信息中心工業經濟研究所所長,中國計算機學會區塊鏈專委會委員于佳寧在接受《人民創投·區塊鏈》采訪時表示,區塊鏈有兩個層次的含義:第一個層次強調技術層面創新,是一種分布式、不可篡改的數據庫技術。這項新技術有力擴展了數據庫技術的使用場景和應用范圍,使得數據庫技術在“弱信任”的環境中也可以應用。第二個層次強調模式層面的創新,實際上是一種新型獨立數字資產載體,可以助力實現資產的數字化。[2018/5/23]

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

主題只能包含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)

Tags:PICTOPICS區塊鏈EPIC幣TOPIA幣Axienomics區塊鏈存證怎么弄

火幣APP下載
Deposit Service of UpBots (UBXT) Temporarily Closed_DEP

DearKuCoinUsers,Duetothesystemmaintenance,wehavedecidedtosuspendthedepositserviceforUpBots(UBXT).

1900/1/1 0:00:00
巴哈馬證券委員會已控制FTX Digital Markets Ltd資產,將解決債權人、客戶和利益相關者問題_數字資產

11月18日消息,巴哈馬證券委員會發布有關控制FTX巴哈馬子公司FTXDigitalMarketsLtd的聲明,該聲明表示,巴哈馬證券委員會在巴哈馬最高法院作出的命令授權下執行監管權力.

1900/1/1 0:00:00
在當前加密冬天,比特幣(BTC)跌破10,000美元的可能性_比特幣

概括 加密貨幣市場目前處于糟糕的狀態,因為問題越來越多,而且似乎沒有緩解的跡象。比特幣價格自之前的歷史高位以來已經下跌了75%,但可能還會下跌更多.

1900/1/1 0:00:00
XRP在較低的時間框架圖表上顯示出溫和的看漲勢頭_XRP

多頭交易的近期目標是兩個斐波拉契水平和0.4465美元情緒改善和開發活動支撐XRP價格Ripple在較低的時間框架圖表上顯示出溫和的看漲勢頭.

1900/1/1 0:00:00
購買BTC享最高100%手續費返傭, 讓你交易得心應手!_OIN

親愛的Dcoin用戶: Dcoin響應薩爾瓦多總統每日購買BTC,參與BTC交易還有高額手續費返傭.

1900/1/1 0:00:00
價值1.07億美元的6522個“沉睡比特幣”在5年閑置后蘇醒_比特幣

2022年11月16日,在比特幣區塊高度763,474,有人轉移了價值約1.07億美元的6,522個比特幣,這些比特幣閑置了五年多.

1900/1/1 0:00:00
ads