開發者來說實際上都是至關重要的。通過觸發事件不僅能將鏈上智能合約的交易通知給外界,還能讓智能合約開發者對合約進行測試、保證合約安全。
接下來就幫助大家詳細理解下關于以太坊的事件日志以及關于它所延伸出來的一些基礎知識。
測試智能合約中的特定變量
索引變量以重建存儲狀態
監聽事件用于改變前端狀態
創建子圖以更快地讀取數據
2.2聲明和觸發事件
我們以官方ERC20合約代碼為例,在IERC20.sol文件中通過event關鍵字進行聲明。
我們可以把事件看作是一個特殊類型,上面的代碼中我們創建了一個名為Transfer的事件,在該事件中有兩種參數類型:有索引(indexed)和無索引。其中from和to參數是有索引的,而value參數是沒有索引的。
在ERC20.sol的_transfer函數中通過emit關鍵字觸發相應事件。
V神:NFT需要經歷多個寒冬才能理解它的長期價值:金色現場報道,10月26日消息,由萬向區塊鏈實驗室主辦的第七屆區塊鏈全球峰會在上海舉行,以太坊創始人、萬向區塊鏈實驗室首席科學家Vitalik Buterin分享稱,DeFi和NFT發展的都非常不錯,但他認為當前存在一個現象,人們很努力以至于使得DeFi很復雜,比如收益耕作使得智能合約出現合約風險,風險可能會大于收益。他認為最有用協議還是最簡單的那種。他還認為,NFT非常具有價值,他給了創作者一個全新的商業模式,但他提醒公眾,人們不應該假設說NFT按當前的形式在經濟上是具有可持續性的,NFT需要經歷多個寒冬。“我們看到這個領域的項目在6個月到1年里表現很不錯,但1-2年時間里卻會變得無名,我覺的必須要耐心等待,必須理解長期可持續的NFT會是怎么樣的。[2021/10/26 20:58:19]
通過日志我們可以將日志分為四個部分:
1、Address:地址。即發出事件的合約地址或者賬戶的地址。
數字金融集團CEO:在比特幣成為主流之前,人們需要充分理解它:數字金融集團(Digital Finance Group)首席執行官James Wo表示,黃金的估值為8萬億美元,而比特幣的估值不到2000億美元。
一旦主流采用開始,比特幣就有潛力與黃金的市值相提并論。在比特幣成為主流之前,人們需要足夠的時間來充分理解比特幣。(U.today)[2020/6/6]
2、Name:名字。即觸發的事件名及其參數。
3、Topics:主題。即事件中有索引(indexed)的參數。
4、Data:數據。即事件中沒有索引的參數。
3.2日志記錄中的主題
上面我們有說到主題(Topics),接下來我們詳細說下主題。
每個日志記錄都包含「主題(topics)」和「數據(data)」。主題是32字節,用于描述事件中發生的事情。不同的操作碼(LOG0LOG1LOG2LOG3LOG4)用以描述需要包含在日志記錄中的主題數。
聲音 | 美聯儲埃文斯:加密貨幣Libra可以很快壯大起來 美聯儲需要理解其意義:美聯儲埃文斯:Facebook(FB.O)旗下加密貨幣Libra可以很快壯大起來,美聯儲需要理解其意義。[2019/9/25]
EVM中有5個操作碼用于觸發事件日志并創建日志記錄,分別是LOG0,LOG1,LOG2,LOG3以及LOG4,它們用于描述智能合約中的事件,例如代幣的轉移、所有權的變更等。LOG1即包含了一個主題,而單個日志記錄中最多可以包含的主題就是LOG4的四個主題。
Topics0通常為發生事件名稱的簽名,Topics1為第一個索引參數的值,Topics2為第二個索引參數的值。
該主題中Topics0的值為0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef,其事件為上一行Name的內容。
而我們對事件Transfer(address,address,uint256)進行keccak256加密后得到的結果和Name的值一樣,說明Name的值的確為事件名稱的簽名。當然,有一個例外是沒有事件簽名的,那就是觸發「匿名事件」時。
聲音 | INE熊羽睿:正確理解“無幣區塊鏈”:近日,INE熊羽睿表示,區塊鏈的核心價值之一,是“可信賬本”,這個賬本上記錄的東西一定不要是擾亂全球社會秩序的黑產,而是世界、區域、國家有共識的價值。目前數字貨幣、加密貨幣、數字證券等等模糊概念的東西,正在被真正的人類罪惡所利用,走向光明正大還有很長的征程,而區塊鏈要能順利落地運用,必須規避傳統法幣秩序、證劵流通、稅收等紅線,借助區塊鏈的可信賬本,打造“可信積分”體系,設置流通邊界,用于“價值循環、使用權通證、稅外價值激勵、中間渠道摩擦成本、系統燃料、產能租用、稅后資源流通”等等提高價值流通的經濟作用。可以預見的未來,基于技術穩定的公鏈基礎上的數字資產,將針對不同國家體系、不同運用領域特征的子母TOKEN體系同步運行。[2018/12/25]
Topics1就是第一個索引參數的值,即form地址的值。Topics2就是第二個索引參數的值,即to地址的值。從內部調用分析也能看到的確是這樣。
主題只能包含32個字節的數據,所以像可能超過32個字節的內容如數組、字符串等的內容不能用作主題,如果要嘗試包含大于32個字節的數據,則該主題必須進過hash計算,所以超過32個字節后最好當做數據包含在日志記錄中。
德國咨詢公司 Camelot開發區塊鏈醫療信息管理解決方案:Cointelegraph報道稱,德國咨詢公司 Camelot已經開發了一項基于區塊鏈技術的解決方案,以幫助銘感醫療信息的管理。該公司利用其Hypertrust X-Chain管理系統為健康管理產業提供安全的數字平臺,以用于交易客戶信息,旨在為治療過程中的所有授權角色提供區塊鏈下去中心化的數據儲存。[2018/4/10]
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 Cointop幣有投資價值嗎magicstone區塊鏈工程專業學什么課程比較好
原文作者:0x49、Jack,BlockBeats11月16日,GenesisTrading在北京時間21點準時向所有債權人和客戶開了一場不到10分鐘的電話會議。與其說會議,不如說是通知.
1900/1/1 0:00:00過去7天,比特幣和以太幣的價格變動平均真實范圍(ATR)分別下降了14%和18%,波動性繼續下降.
1900/1/1 0:00:00尊敬的CITEX用戶:CITEX即將上線LGC幣種,并開放LGC/USDT交易對LiveGreenCoin背后是成立于奧地利的HAPPYPANDAHandelsGmbH,以及附屬于此的國際公司.
1900/1/1 0:00:00SamBankman-Fried的FTX迅速崩潰的后果正在整個加密貨幣世界蔓延,億萬富翁Winklevoss雙胞胎因他們的貸款合作伙伴Genesis的流動性緊縮而陷入困境.
1900/1/1 0:00:00空頭在周五價值6億美元的BTC期權到期時處于更好的位置,但如果比特幣價格交易超過18,000美元,多頭可能會扭轉局勢.
1900/1/1 0:00:00零知識技術是密碼學的一個分支,可以為許多Layer1區塊鏈項目解決擴容和隱私問題。區塊鏈可以利用零知識證明技術提升交易吞吐量,在驗證用戶身份的同時保護用戶數據隱私,實現復雜的計算,并讓企業既可以.
1900/1/1 0:00:00