Solidity事件對于智能合約開發者來說是不可或缺的,它允許我們對智能合約中特定變量進行測試,以自動化的方式改變前端等。總的來說,知道如何在Solidity中使用事件可以使智能合約的開發變得更加容易。
在本文,我們將從智能合約開發者的角度來研究以太坊虛擬機的日志和事件功能,包括日志和事件的用途,索引事件,以及如何在Hardhat和Brownie中使用日志和事件。
EVM是以太坊和許多其他區塊鏈的核心。EVM有一個日志功能,用于將數據“寫”到智能合約之外的數據結構中。其中一個重要的數據是Solidity事件。事件允許我們“打印”在區塊鏈上的信息,這種方式比在智能合約中保存到公共存儲變量更容易搜索,且更省gas費。
日志是區塊鏈上的一種特殊數據結構。它們不能被智能合約訪問,但能提供關于交易和區塊中發生的信息。正是因為它們不能被智能合約訪問,才使得它們的使用成本更低。
Solana驗證者運營商已于北京時間15:00成功完成主網Beta集群重啟:10月1日,據官方消息,Solana 驗證者運營商已于北京時間 15:00 成功完成主網 Beta 集群重啟,網絡運營商和 Dapp 將在接下來的幾個小時內恢復客戶服務。[2022/10/1 18:36:56]
你也可以觀看下面的關于Solidity中的事件和日志的視頻:
https://www.bilibili.com/video/BV1iL4y1s7ro?spm_id_from=333.999.0.0
那么,什么是事件呢?
事件允許我們輕松查詢在區塊和交易中發生的“東西”。如果你運行一個區塊鏈節點,你可以通過訂閱它們來“監聽”到某些事件。事實上,這就是Chainlink網絡的工作方式。Chainlink網絡在某些地址訂閱某些事件,并根據發出的事件內容,從現實世界返回數據。
事件能用來做什么?
Ava Labs創始人:Solana此次攻擊可能是供應鏈攻擊:8月3日消息,Ava Labs創始人Emin Gün Sirer在社交媒體表示,目前在針對Solana生態系統的持續攻擊中,已經有7000多個錢包受到影響,并且正在以20/min的速度增長。他認為,因為現在還很早,而且攻擊仍在進行中,所以有很多錯誤信息和猜測。
他說,由于交易簽名正確,攻擊者很可能已經獲得了對私鑰的訪問權限。一種可能的途徑是供應鏈攻擊,其中JS庫被黑客入侵,并泄露(竊取)用戶的私鑰。受影響的錢包似乎是在過去9個月內創建的,但也有報告說新創建的錢包也受到影響。目前停止鏈條是無濟于事的,當鏈條恢復時攻擊將恢復。[2022/8/3 2:55:19]
現在,如果你不是Chainlink或Ethereum節點運營商,你可能會問事件對你有什么影響呢。通過Solidity事件,你可以做:
測試你的智能合約中的特定變量;
索引變量以重建存儲狀態;
FTX Digital Markets宣布與Solidus Labs合作為FTX提供風險監控服務:5月4日消息,FTX 子公司 FTX Digital Markets 宣布與 Solidus Labs 達成合作,FTX 將部署 Solidus 開發的 HALO 平臺,為數字資產提供風險監控、欺詐預防和合規服務。
FTX Digital Markets 聯合首席執行官Ryan Salame表示,FTX Digital Markets 一直致力于為用戶提供業界領先的產品和服務,同時促進全面透明,遵守傳統金融中的常見標準。[2022/5/4 2:50:00]
監聽事件用于改變前端狀態;
創建子圖以更快地讀取數據;
還可以完成其他許多事情。對工程師來說,事件有各種各樣的用例。事實上,事件是Chainlink節點運作的核心組成部分。Chainlink節點會監聽數據請求和外部計算事件,這正是是他們知道如何響應的根源。
SOL跌破180美元關口 日內跌幅為10.66%:火幣全球站數據顯示,SOL短線下跌,跌破180美元關口,現報179.8355美元,日內跌幅達到10.66%,行情波動較大,請做好風險控制。[2021/9/10 23:15:56]
事件是什么樣子的?
下面的數據結構就是在Solidity中定義一個事件的方式:
你可以把事件看作是一個新的特殊類型。我們已經創建了一個名為storedNumber的事件“類型”。事件的名字叫storedNumber,可以容納一些變量。在這個事件中,有兩種參數:有索引的和無索引的。索引參數也被稱為“主題”,是事件中的可搜索參數。我們會在后文更多地談及這些內容。
然后我們可以像下面這樣發出一個事件:
Solana生態AMM協議Cyclos完成210萬美元融資:9月6日消息,Solana生態去中心化交易平臺Cyclos宣布完成210萬美元融資,本輪融資由CMSHoldings、Hashkey、SolanaCapital、HuobiVentures、Coin98Ventures、MXC、Gate.io、SkyvisionCapital、PetrockCapital、IllusionistGroup、CryptomeriaCapital、DigiStrats,以及YoubiCapital參投。Cyclos預計將于2021年第三季度發布其V1版本。Cyclos是在Solana上搭建的集中流動性做市商平臺。此前曾于8月17日完成100萬美元種子輪融資。[2021/9/6 23:04:46]
下面是一個完整的合約實例:
現在,只要我們調用這個例子中的store函數,它就會發出一個storedNumber類型的事件。讓我們看看一個調用store函數、輸入為1的示例交易。我們可以在KovanEtherscan上看到這個事務。
滾動到交易的“日志”部分,我們可以看到以下內容:
一個事件可以分解為:
Address:地址,發出事件的合約或賬戶的地址。
Topics:主題,事件的索引參數。
Data:數據,事件的非索引參數的ABI編碼或“哈希”。由于我們知道合約的ABI,我們可以在“Dec”或“Decoded”模式下查看它,或者在其原始的“hex”、“Hexidecimal”或“Encoded”模式下查看。如果我們沒有驗證過合約,我們就無法看到解碼的版本。
你可以在Solidity文檔中閱讀更多關于事件的內容。“日志”和“事件”經常被互換使用,因為作為智能合約的開發者,我們通常只關心日志中的“事件”。然而,從技術上講,日志也包括blockhash、address,以及通過調用eth_getLogs返回給你的區塊鏈節點的其他數據。你也可以閱讀更多有關布隆過濾器的內容,這是這些事件能被簡單查詢到的原因。
Hardhat中的事件
現在我們已經了解了什么是事件,讓我們學習如何在Hardhat中訪問并使用它們。你可以克隆下面的repo,然后跟著操作:
gitclonehttps://github.com/PatrickAlphaC/hardhat-events-logs
cdhardhat-events-logs
你需要跟著README.md中的說明完成依賴工具的安裝,其中包括Node、Yarn和Git。
如果你跟著README.md操作,你將能夠:
部署一個智能合約;
創建一個發出事件的交易;
查看這些事件的上下文。
如果你在這一過程中遇到問題,請在Githubrepo上新建一個Issue!我們可以通過檢查transactionReceipt對象的logs屬性來查看日志。
Brownie中的事件
Brownie中的事件幾乎是相同的,因為合約是完全相同的。
你可以克隆下面的repo,然后跟著操作:
你需要跟著README.md中的說明完成依賴工具的安裝,其中包括Node、Python、eth-brownie和Git。
如果你跟著README.md操作,你將能夠:
部署一個智能合約;
創建一個發出事件的交易;
查看這些事件的上下文。
如果你在這一過程中遇到問題,請在Githubrepo上新建一個Issue!你會發現這里的主要區別是,我們使用打印語句來打印出事務的日志:
總結
日志和事件是智能合約開發的重要組成部分,也是Chainlink和TheGraph等項目的關鍵基礎設施。要想了解更多關于開發強大的智能合約的信息,請務必前往查看Chainlink文檔,從現在開始創作吧!。
隨著游戲玩家開始意識到他們應該因為在游戲平臺上花費的時間而獲得獎勵,游戲的未來將逐漸轉變為建立在區塊鏈分布式賬本的基礎上。從目前情況來看,開發人員正在設計游戲,將公平的代幣化獎勵作為核心功能.
1900/1/1 0:00:00“我們不是歷史的創造者,我們是歷史造就的。”——小馬丁·路德·金,《愛的力量》協作通過組織發生,每個時代都有自己的形式.
1900/1/1 0:00:00伴隨著DeFi的繁榮,加密數據分析的市場也方興未艾。已實現對一個DeFi項目的初步解析。筆者在使用諸多分析工具后,整理了比較好用的,且市面上推薦度比較高的五類DeFi數據分析工具:看DeFiTo.
1900/1/1 0:00:00還記得曠日持久的CurveWar嗎?協議們為了話語權激烈廝殺。現在,「CurveWar」在Fantom鏈上被復制,受到YFI創始人AndrewCronje的號召,所有人的目光都聚焦在Fantom.
1900/1/1 0:00:00Panel主持人: Co-founder,CabinVC,VivianMengCabinVC成立于2018年,我們的核心團隊2013年進入區塊鏈行業,經歷了幾輪周期.
1900/1/1 0:00:002022年2月14日,WorldMobile副總裁EnriqueOpi宣布與Epson達成合作關系。并就如何運用WorldMobile的技術構建社區,展開了會議討論.
1900/1/1 0:00:00