Các sự kiện liên kết là không thể thiếu đối với các nhà phát triển hợp đồng thông minh, cho phép các hợp đồng thông minh được kiểm tra các biến cụ thể, giao diện người dùng được thay đổi theo cách tự động và hơn thế nữa. Nói chung, việc biết cách sử dụng các sự kiện trong Solidity giúp cho việc phát triển hợp đồng thông minh dễ dàng hơn rất nhiều.
Trong bài đăng này, chúng tôi sẽ xem xét tính năng ghi nhật ký và sự kiện của Máy ảo Ethereum (EVM) từ quan điểm của nhà phát triển hợp đồng thông minh, bao gồm việc ghi nhật ký và sự kiện được sử dụng để làm gì, các sự kiện được lập chỉ mục cũng như cách sử dụng ghi nhật ký và sự kiện trong Hardhat và Brownie.
EVM là thứ khiến Ethereum và nhiều blockchain khác được đánh dấu. EVM có một khai thác gỗ chức năng được sử dụng để “ghi” dữ liệu vào cấu trúc bên ngoài hợp đồng thông minh. Một phần dữ liệu quan trọng như vậy là Sự kiện đoàn kết. Các sự kiện cho phép chúng tôi “in” thông tin trên blockchain theo cách dễ tìm kiếm và tiết kiệm xăng hơn là chỉ lưu vào các biến lưu trữ công cộng trong các hợp đồng thông minh của chúng tôi.
Nhật ký là một cấu trúc dữ liệu đặc biệt trên blockchain. Họ không thể được truy cập bằng các hợp đồng thông minhvà cung cấp thông tin về những gì đang diễn ra trong các giao dịch và khối. Chính việc họ không thể tiếp cận các hợp đồng thông minh khiến chúng rẻ hơn để phát hành.
Bạn cũng có thể xem online video của chúng tôi về các sự kiện và đăng nhập Solidity tại đây:
Vì vậy, một sự kiện là gì?
Sự kiện cho phép chúng tôi dễ dàng truy vấn “nội dung” đã xảy ra trong các khối và giao dịch. Nếu bạn chạy một nút blockchain, bạn có thể “lắng nghe” các sự kiện nhất định bằng cách đăng ký đối với họ. Trên thực tế, đây là cách Mạng liên kết chuỗi Hoạt động: Các mạng đăng ký các sự kiện nhất định tại các địa chỉ nhất định và trả về dữ liệu từ thế giới thực dựa trên nội dung của các sự kiện được phát ra.
Sự kiện để làm gì?
Bây giờ, nếu bạn không phải là nhà điều hành nút Chainlink hoặc Ethereum, bạn có thể hỏi điều này ảnh hưởng đến bạn như thế nào. Với các sự kiện Solidity, bạn có thể:
- Kiểm tra các hợp đồng thông minh của bạn cho các biến cụ thể
- Các biến chỉ số để xây dựng lại trạng thái lưu trữ
- Nghe các sự kiện để thay đổi giao diện người dùng
- Tạo ra đồ thị con để đọc dữ liệu nhanh hơn
Và nhiều thứ khác. Sự kiện có nhiều trường hợp sử dụng khác nhau và có thể cứu sống bạn với tư cách là một kỹ sư. Trên thực tế, các sự kiện là một trong những phần cốt lõi của cách các nút Chainlink hoạt động! Các nút chuỗi liên kết lắng nghe yêu cầu dữ liệu và các sự kiện tính toán bên ngoài, và đó là cách chúng biết để phản hồi.
Sự kiện trông như thế nào?
Đây là những gì xác định một sự kiện trông như thế nào trong Solidity:
javascript party storedNumber( uint256 indexed oldNumber, uint256 indexed newNumber, uint256 addedNumber, handle sender )
Bạn có thể coi đây là một kiểu đặc biệt mới. Chúng tôi đã tạo một “loại” sự kiện được gọi là “Số lưu trữ”. Tên sự kiện được gọi là `Số lưu trữ ‘và có thể chứa một số biến. Có hai loại tham số trong một sự kiện này: được lập chỉ mục và không được lập chỉ mục. Các tham số được lập chỉ mục còn được gọi là “chủ đề” và là các tham số có thể tìm kiếm được trong các sự kiện. Chúng tôi sẽ nói thêm về những điều đó trong thời gian ngắn.
Sau đó, chúng ta có thể tạo ra một sự kiện như sau:
javascript uint256 favoriteNumber purpose keep(uint256 _favoriteNumber) community emit storedNumber( favoriteNumber, _favoriteNumber, _favoriteNumber + favoriteNumber, msg.sender ) favoriteNumber = _favoriteNumber
Đây là một hợp đồng mẫu đầy đủ:
javascript // SPDX-License-Identifier: MIT pragma solidity ^.8.7 agreement SimpleStorage uint256 favoriteNumber occasion storedNumber( uint256 indexed oldNumber, uint256 indexed newNumber, uint256 addedNumber, tackle sender ) operate retail outlet(uint256 _favoriteNumber) community emit storedNumber( favoriteNumber, _favoriteNumber, _favoriteNumber + favoriteNumber, msg.sender ) favoriteNumber = _favoriteNumber function retrieve() public look at returns (uint256) return favoriteNumber
Bây giờ, bất cứ khi nào chúng ta gọi hàm `store` trong ví dụ này, nó sẽ phát ra một sự kiện có kiểu ManagedNumber. Hãy xem một giao dịch mẫu gọi hàm `store` với đầu vào là` 1`. Chúng ta có thể thấy giao dịch trên Kovan Etherscan.
Di chuyển đến phần `log` của giao dịch, chúng ta thấy hình ảnh sau:
Một sự kiện được chia nhỏ như vậy:
Địa chỉ nhà: Địa chỉ của hợp đồng hoặc tài khoản mà sự kiện được phát ra từ đó.
Chủ đề: Các tham số được lập chỉ mục của sự kiện.
Dữ liệu: Các Mã hóa ABI hoặc các tham số không được lập chỉ mục “băm” của sự kiện. Vì chúng tôi biết ABI của hợp đồng (kể từ khi chúng tôi xác minh hợp đồng trên Etherscan), chúng tôi có thể xem nó ở chế độ “Tháng mười hai” hoặc “được giải mã” hoặc ở chế độ “hex”, “Hệ thập phân” hoặc “Đã mã hóa” thô của nó. Nếu không xác minh hợp đồng, chúng tôi sẽ không thể xem phiên bản đã giải mã.
Bạn có thể đọc thêm về bố cục của một sự kiện trong Tài liệu về độ vững chắc. “Nhật ký” và “Sự kiện” thường được sử dụng thay thế cho nhau, vì là nhà phát triển hợp đồng thông minh, chúng tôi thường chỉ quan tâm đến “sự kiện” đã ghi. Tuy nhiên, về mặt kỹ thuật, nhật ký cũng bao gồm `blockhash`,` address` và mọi thứ khác được trả về bằng cách gọi `eth_getLogs` vào nút blockchain của bạn. Bạn cũng có thể đọc thêm về bộ lọc nở, đó là cách những sự kiện này được truy vấn dễ dàng như vậy.
Sự kiện trong Hardhat
Bây giờ chúng ta đã biết các sự kiện là gì, hãy tìm hiểu cách truy cập và làm việc với chúng trong Hardhat. Bạn có thể sao chép repo sau và làm theo:
git clone https://github.com/PatrickAlphaC/hardhat-occasions-logs cd hardhat-functions-logs
Bạn sẽ cần làm theo cùng với `README.md` để lấy điều kiện tiên quyết, bao gồm Node, Yarn và Git.
Nếu bạn theo dõi `README.md`, bạn sẽ có thể:
- Triển khai hợp đồng thông minh
- Tạo một giao dịch phát ra các sự kiện
- Xem bối cảnh của những sự kiện đó.
Nếu bạn gặp phải một vấn đề trong quá trình này, hãy mở ra một vấn đề trên Github repo! Chúng ta có thể xem nhật ký bằng cách kiểm tra thuộc tính nhật ký của đối tượng `transactionReceipt`.
console.log(transactionReceipt.events[0].args.oldNumber.toString())
Sự kiện tại Brownie
Các sự kiện ở Brownie gần giống nhau vì các hợp đồng hoàn toàn giống nhau.
Bạn có thể sao chép repo sau và làm theo:
git clone https://github.com/PatrickAlphaC/brownie-gatherings-logs cd brownie-activities-logs
Bạn sẽ cần làm theo cùng với `README.md` để lấy điều kiện tiên quyết, bao gồm Node, Python, eth-brownie và Git.
Nếu bạn theo dõi `README.md`, bạn sẽ có thể:
- Triển khai hợp đồng thông minh
- Tạo một giao dịch phát ra các sự kiện
- Xem bối cảnh của những sự kiện đó.
Nếu bạn gặp phải một vấn đề trong quá trình này, hãy mở ra một vấn đề trên Github repo! Bạn sẽ thấy sự khác biệt chính ở đây là chúng tôi sử dụng một bản sao kê để in ra nhật ký của một giao dịch:
print(tx.events[0]["oldNumber"])
Tóm lược
Nhật ký và sự kiện là một phần quan trọng của phát triển hợp đồng thông minh — và cơ sở hạ tầng quan trọng cho các dự án như Chainlink và The Graph. Để tìm hiểu thêm về cách xây dựng các hợp đồng thông minh cực kỳ mạnh mẽ (sử dụng các kỹ năng sự kiện mới của bạn), hãy nhớ xem Tài liệu về chuỗi liên kết để bắt đầu xây dựng ngày hôm nay.
Bài đăng Sự kiện và Đăng nhập trong Solidity xuất hiện đầu tiên trên Website Chainlink.
>> Xem trên Chainlink