Solidity - Sự kiện
Sự kiện là một thành viên có thể kế thừa của một hợp đồng. Một sự kiện được phát ra, nó lưu trữ các đối số được truyền trong nhật ký giao dịch. Các nhật ký này được lưu trữ trên blockchain và có thể truy cập bằng địa chỉ của hợp đồng cho đến khi hợp đồng có mặt trên blockchain. Sự kiện được tạo ra không thể truy cập được từ bên trong các hợp đồng, thậm chí không phải sự kiện đã tạo và phát ra chúng.
Một sự kiện có thể được khai báo bằng từ khóa sự kiện.
//Declare an Event
event Deposit(address indexed _from, bytes32 indexed _id, uint _value);
//Emit an event
emit Deposit(msg.sender, _id, msg.value);
Thí dụ
Hãy thử đoạn mã sau để hiểu cách một sự kiện hoạt động trong Solidity.
Đầu tiên Tạo một hợp đồng và tạo ra một sự kiện.
pragma solidity ^0.5.0;
contract Test {
event Deposit(address indexed _from, bytes32 indexed _id, uint _value);
function deposit(bytes32 _id) public payable {
emit Deposit(msg.sender, _id, msg.value);
}
}
Sau đó, truy cập sự kiện của hợp đồng bằng mã JavaScript.
var abi = /* abi as generated using compiler */;
var ClientReceipt = web3.eth.contract(abi);
var clientReceiptContract = ClientReceipt.at("0x1234...ab67" /* address */);
var event = clientReceiptContract.Deposit(function(error, result) {
if (!error)console.log(result);
});
Nó sẽ in các chi tiết tương tự như sau:
Đầu ra
{
"returnValues": {
"_from": "0x1111...FFFFCCCC",
"_id": "0x50...sd5adb20",
"_value": "0x420042"
},
"raw": {
"data": "0x7f...91385",
"topics": ["0xfd4...b4ead7", "0x7f...1a91385"]
}
}