Nhảy đến nội dung chính

Ghi nhật ký dữ liệu từ hợp đồng thông minh bằng các sự kiện

hợp đồng thông minh
Remix
Solidity
sự kiện
Trung gian
jdourlens
3 tháng 4, 2020
3 số phút đọc

Trong Solidity, sự kiện là các tín hiệu được gửi đi mà hợp đồng thông minh có thể kích hoạt. Các ứng dụng phi tập trung, hoặc bất cứ thứ gì được kết nối với API JSON-RPC của Ethereum, có thể lắng nghe những sự kiện này và hành động tương ứng. Một sự kiện cũng có thể được lập chỉ mục để lịch sử sự kiện có thể được tìm kiếm sau này.

Sự kiện

Sự kiện phổ biến nhất trên chuỗi khối Ethereum tại thời điểm viết bài này là sự kiện Transfer được phát ra bởi các token ERC20 khi ai đó chuyển token.

1event Transfer(address indexed from, address indexed to, uint256 value);

Chữ ký sự kiện được khai báo bên trong mã hợp đồng và có thể được phát ra bằng từ khóa emit. Ví dụ: sự kiện transfer ghi nhật ký ai đã gửi giao dịch chuyển tiền (from), đến ai (to) và bao nhiêu token đã được chuyển (value).

Nếu chúng ta quay lại hợp đồng thông minh Counter của mình và quyết định ghi nhật ký mỗi khi giá trị được thay đổi. Vì hợp đồng này không nhằm mục đích triển khai mà đóng vai trò là cơ sở để xây dựng một hợp đồng khác bằng cách mở rộng nó: nó được gọi là hợp đồng trừu tượng. Trong trường hợp ví dụ về bộ đếm của chúng ta, nó sẽ trông như sau:

1pragma solidity 0.5.17;
2
3contract Counter {
4
5 event ValueChanged(uint oldValue, uint256 newValue);
6
7 // Biến riêng tư thuộc loại số nguyên không dấu để lưu số lần đếm
8 uint256 private count = 0;
9
10 // Hàm tăng bộ đếm của chúng ta
11 function increment() public {
12 count += 1;
13 emit ValueChanged(count - 1, count);
14 }
15
16 // Getter để lấy giá trị đếm
17 function getCount() public view returns (uint256) {
18 return count;
19 }
20
21}
Hiện tất cả

Lưu ý rằng:

  • Dòng 5: chúng ta khai báo sự kiện của mình và những gì nó chứa, giá trị cũ và giá trị mới.

  • Dòng 13: Khi chúng ta tăng biến đếm của mình, chúng ta phát ra sự kiện.

Nếu bây giờ chúng ta triển khai hợp đồng và gọi hàm increment, chúng ta sẽ thấy rằng Remix sẽ tự động hiển thị nó nếu bạn nhấp vào giao dịch mới bên trong một mảng có tên là logs.

Ảnh chụp màn hình Remix

Nhật ký thực sự hữu ích để gỡ lỗi các hợp đồng thông minh của bạn. Chúng cũng quan trọng nếu bạn xây dựng các ứng dụng được sử dụng bởi nhiều người khác nhau và giúp việc phân tích để theo dõi cũng như hiểu cách hợp đồng thông minh của bạn được sử dụng trở nên dễ dàng hơn. Các nhật ký được tạo bởi các giao dịch sẽ được hiển thị trong các trình duyệt khối phổ biến và bạn cũng có thể sử dụng chúng để, ví dụ, tạo các tập lệnh ngoài chuỗi để lắng nghe các sự kiện cụ thể và thực hiện hành động khi chúng xảy ra.

Lần cập nhật trang lần cuối: 12 tháng 2, 2025

Hướng dẫn này có hữu ích không?