Solidity 中的事件和日誌

Solidity 事件對於智能合約開發者來說是測試方式的,它允許我們對智能中特定的發起者進行,以自動化的方式開創前端等事件,知道在Solidity 中使用可以實現智能契約的開發更容易。

在本文中,我們很清楚智能合約開發者的角度研究以太坊虛擬機(EVM)的日誌和事件功能,包括日誌和事件的用途、記錄事件,以及如何在Hardhat 和Brownie 中使用日誌和事件。

EVM 是以太坊和許多其他區塊鏈的核心。功能,用於將數據“寫”到智能合約之外的數據結構中。其中一個重要的數據是Solidity事件。事件允許我們“打印”在一小段鏈上的信息,這種方式比在智能合約中保存到公共發起者更容易搜索,並且更省氣費。

日誌是區塊鏈上的一種特殊數據結構。不能被智能合約訪問,但能提供關於交易和部分中發生的信息。因為正是它們不能被智能合約訪問,才可以把它們的使用場景記下來。

你也可以觀看下面關於Solidity 中事件和視頻的視頻:

那麼,什麼是事件呢?

事件允許我們輕鬆查詢在部分和交易中發生的“”。如果你運行一個區塊鏈節點,你可以通過訂閱其實,這就是一些事件。鏈聯網絡的工作方式。 Chainlink網絡在部分地址訂閱部分事件,並根據事件內容,從現實世界返回數據。

事件能解決嗎?

現在,如果你不是Chainlink 或Ethereum 節點運營商,你可能會問事件對你有什麼影響呢。通過Solidity 事件,你可以做:

  1. 測試你的智能合約中的特定變量;
  2. 索引以重建存儲狀態;
  3. 監聽事件前端前端狀態;
  4. 創建子圖以響應地讀取數據;

對工程師完成其他事情。對於工程師,事件還有很多可能的例子。確切地說,Chainlink 節點會監聽數據請求和外部計算事件,這正是他們知道如何響應的淵源。

事件突然子的?

下面的數據結構就是在Solidity 中定義一個事件的方式:

event storedNumber(
    uint256 indexed oldNumber,
    uint256 indexed newNumber,
    uint256 addedNumber,
    address sender
);

你可以把事件說成是一個新的特殊類型。存儲號碼事件的“類型”。事件的名字叫什麼存儲號碼,可以容納一些變量。在這個事件中,有兩種參數:有索引的和無索引的。索引參數也被稱為“主題”,是事件中的可搜索參數。我們會在後文更多地談及這些內容。

然後我們可以像下面這樣發出一個事件:

uint256 favoriteNumber;

function store(uint256 _favoriteNumber) public {
    emit storedNumber(
        favoriteNumber,
        _favoriteNumber,
        _favoriteNumber + favoriteNumber,
        msg.sender
    );
    favoriteNumber = _favoriteNumber;
}

下面是一個完整的合約實例:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;

contract SimpleStorage {
    uint256 favoriteNumber;

    event storedNumber(
        uint256 indexed oldNumber,
        uint256 indexed newNumber,
        uint256 addedNumber,
        address sender
    );

    function store(uint256 _favoriteNumber) public {
        emit storedNumber(
            favoriteNumber,
            _favoriteNumber,
            _favoriteNumber + favoriteNumber,
            msg.sender
        );
        favoriteNumber = _favoriteNumber;
    }

    function retrieve() public view returns (uint256) {
        return favoriteNumber;
    }
}

現在,只要我們這個例子中的店鋪函數,它會發出一個存儲號碼類型的事件。讓我們看看一個調用店鋪函數、輸入為1的示例交易。我們可以在科萬·埃瑟斯坎上看到這個事務。

滾動到交易的“日誌”部分,我們可以看到以下內容:

Etherscan 上的交易截圖,已解碼

一個事件可以劃分為:

地址: 地址,發出事件的細節或表面的地址。

話題:主題,事件的索引參數。

數據: 數據,事件的非索引參數的ABI 編碼或“哈希”。因為我們知道契約的ABI(因為我們在Etherscan 上驗證了契約),我們在“Dec”或“Decoded”模式下查看它,或者可以在其原始的“十六進制”、“十六進制”或“編碼”模式下查看。如果我們沒有驗證過契約,我們就無法看到解碼的版本。

Etherscan 上的交易截圖,未解碼

你可以在Solidity文檔中閱讀更多關於事件的內容。 “日誌”和“事件”經常被互換使用,因為作為智能事件的開發者,我們通常只關心中的“”日誌。包括區塊哈希地址,以及通過調用eth_getLogs返回給你的部分鏈節點的其他數據。你也可以閱讀更多有關布隆過濾器的內容,這是這些事件能夠被簡單地發現的原因。

安全帽中的事件

現在我們已經知道是事件了,讓我們學習如何在Hardhat中訪問並使用它們。你可以克隆下面的repo,然後繼續操作:

git clone https://github.com/PatrickAlphaC/hardhat-events-logs
cd hardhat-events-logs

你需要跟著自述文件中的說明完成依賴工具的安裝,包括節點吉特

如果你跟著自述文件操作,你將能夠:

  1. 部署一個智能合約;
  2. 創建一個發出事件的交易;
  3. 查看這些事件的上下文。

如果你在這個過程中遇到的問題,請在Github 倉庫上新建一個問題!我們可以通過檢查交易收據對象的日誌屬性來查看日誌。

console.log(transactionReceipt.events[0].args.oldNumber.toString())

布朗尼中的事件

布朗尼中的事件幾乎是相同的,因為情節是完全相同的。

你可以復制下面的repo,然後跟著操作:

git clone https://github.com/PatrickAlphaC/brownie-events-logs
cd brownie-events-logs

你需要跟著自述文件中的說明完成依賴工具的安裝,包括節點Pythoneth-brownie吉特

如果你跟著README.md操作,你將能夠:

  1. 部署一個智能合約;
  2. 創建一個發出事件的交易;
  3. 查看這些事件的上下文。

如果你在這個過程中遇到的問題,請在Github 倉庫上新建一個問題你會發現這裡的主要區別是,我們使用打印語句來打印出事務的日誌:

print(tx.events[0]["oldNumber"])

總結

和事件是智能合約開發的組成部分,也是Chainlink和The Graph等項目的關鍵基礎設施日誌。了解更多關於開發者的智能合約的信息(利用你新掌握的事件技能),請務必務必前往查看Chainlink文檔,從現在開始創作吧!

帖子 Solidity 中的事件和日誌 首先出現在 Chainlink 博客.

Source Link

最受歡迎

繼續閱讀

長期持有者持有的比特幣(BTC)供應量達到最高水平

根據Glassnode 的估計,比特幣的長期持有者(LTH)目前擁有1452 萬枚BTC,創歷史新高,只剩下25% 留給短期持...

抓住Web3 遊戲的先發優勢:成功策略

Web3和區塊鏈技術的出現徹底改變了遊戲行業,為開發者和企業家提供了前所未有的機遇。 Web3 遊戲的去中心化性質為創新遊戲貨幣化模式、玩家所有權和社區參與打...

現在讀

$COOKIE, the Cookie3 Mark...

Tallinn, Estonia, March 26th, 2024...

長期持有者持有的比特幣(BTC)供應量達到最高水平...

根據Glassnode 的估計,比特幣的長期持有者(LTH)目前擁有1452 萬枚BTC,創歷史新高,只剩下25% 留給短期持有者和投機者。 儘管BTC 的價格在過去一個月中保持相對平穩,範圍在約29,000 美元至31,000 美元之間,但人們還是開始瘋狂囤積。 ...

Caldera 宣布與Espresso Syste...

Caldera 開發人員可以利用Espresso Sequence...

抓住Web3 遊戲的先發優勢:成功策略

Web3和區塊鏈技術的出現徹底改變了遊戲行業,為開發者和企業家提供了前所未有的機遇。 Web3 遊戲的去中心化性質為創新遊戲貨幣化模式、玩家所有權和社區參與打開了大門。對於那些尋求利用Web3 遊戲巨大潛力的人來說,確保先發優勢至關重要。 了解Web3 遊戲生態系統在深入研究Web3 遊戲之前,有...

Taapsee Pannu 推出NFT 平台,介紹...

企業家貢獻者表達的意見是他們自己的。 您正在閱讀《企業家印度》,這是企業家媒體的國際特許經營刊物。 女演員Taapsee Pannu 最近推出了“taapseeclub.com”,這是她自己的非同質代...

比特幣(BTC) 地址休眠超過11 年,轉移310...

經過11 年多的閒置之後,一個包含3100 萬美元BTC 的休眠比特幣地址最近突然活躍起來。 2023年7月22日,地址 轉入 將其全部餘額轉移到新地址。 早期BTC 地址復活 比特幣自2009 年以來就已經存在,因此存在多年來不活躍的休眠地址,其中包含大量BTC。這種加密貨幣的一些早期採用者能夠...

加密貨幣死了嗎?當今加密貨幣的現狀

您之前可能聽說過加密貨幣正在消亡(或比特幣已消亡)。在這篇文章中,我們將研究加密貨幣的狀態,並嘗試回答這個問題:加密貨幣現在已經死了嗎? 在我們開始之前,我們想澄清一下,本文指的是最廣泛意義上的“加密貨幣行業”; 在裡面 網絡3 感覺。該定義包括加密資產市場; 但它還包括其他非財務用例。 隨著近來加...

Chancer 可能成為體育和社交博彩領域的下一個...

加密貨幣 隨著企業財報季節的繼續,本週股市表現好壞參半。在Ne...

以太坊(ETH) 創下兩個月來CEX 流入最高紀錄...

過去一周,以太坊(ETH)流入中心化交易所(CEX)的資金量創下了過去兩個月來的最高水平。這些重大的資產變動表明ETH 的價格可能會下跌。 CoinGecko 數據顯示,第二大加密貨幣的價格一直在小幅下跌,過去一周價值下跌了2.5%。截至撰寫本文時,以太幣易手價格為1,892.65 美元,過去24...

新的DeFi 法案有“不可行的義務”

加密貨幣創新委員會表示,新的反洗錢法案沒有為DeFi 中的非法金融...

幣安大幅削減成本,瑞波幣為美國銀行和加密貨幣風險投...

美國證券交易委員會(SEC)對加密貨幣公司的打擊似乎嚴重影響了幣安的業務。據報導,在過去幾週內,該加密貨幣交易所解雇了1,000 多名員工,並削減了一些福利。 幣安表示,“當前的市場環境和監管環境”導致利潤下降,這表明可能正在進行更多削減。一位發言人告訴Cointelegraph,該公司將考慮縮減“...

Automata 雙週更新:第48 期| 通過自動...

迎接新的季度意味著設定我們的意圖並為團隊規劃下一步的行動。幕後醞釀的一切——合作、產品功能和營銷發布——很難抑制我們的興奮。我們一開始就在1RPC(2 個備受期待的第2 層主網)上添加了對Linea 和Base 的支持。科技載體更新頁腳以顯示界面版本平滑的用戶體驗 USDC CCTP 支持 關於仲裁...