Events Solidity
Sự kiện trong ngôn ngữ lập trình Solidity. Trong khoá học online miễn phí Tự học lập trình web3 - Tự học ngôn ngữ lập trình Solidity.
Summary for English Visiter
//SOLIDITY
event IntegersAdded(uint x, uint y, uint result); function add(uint _x, uint _y) public returns (uint) { uint result = _x + _y; // run emit IntegersAdded(_x, _y, result); return result; }
//JAVASCRIPT
YourContract.IntegersAdded(function(error, result) { // do something with result })
Thank you!
Hợp đồng của chúng ta đã gần kết thúc! Bây giờ chúng ta nghiên cứu để thêm một sự kiện.
Events - Sự kiện là một cách để hợp đồng của bạn thông báo rằng điều gì đó đã xảy ra trên blockchain đến giao diện người dùng của ứng dụng, có thể 'lắng nghe' các sự kiện và thực hiện hành động khi chúng xảy ra. Về cơ bản thì nó cũng giống như sự kiện trong các ngôn ngữ khác mà bạn đã nghiên cứu.
// khai bao su kiến
event IntegersAdded(uint x, uint y, uint result);
function add(uint _x, uint _y) public returns (uint) {
uint result = _x + _y;
// kich hoat su kien cho ung dung dapp biet ham nay dang duoc chay
emit IntegersAdded(_x, _y, result);
return result;
}
Ứng dụng của bạn sau đó có thể lắng nghe sự kiện này. Code javascript để bắt sự kiện này sẽ đơn giản như sau:YourContract.IntegersAdded(function(error, result) {
// do something with result
})
Thực hành luôn cho nhớ lâu bạn nhé
Bạn nhớ đoạn code trong phần ôn tập của bài 11chứ, bây giờ contract đó đã được thêm một sự kiện NewZombie và sự kiện đó được gọi ở hàm _createZombie.
Hãy nghiên cứu đoạn code này và ghi nhớ nhé. Ở phần tiếp theo khi học về Web3.js chúng ta sẽ gọi đến hợp đồng này như một ví dụ mẫu.
pragma solidity >=0.5.0 <0.6.0;
contract ZombieFactory {
event NewZombie(uint zombieId, string name, uint dna);
uint dnaDigits = 16;
uint dnaModulus = 10 ** dnaDigits;
struct Zombie {
string name;
uint dna;
}
Zombie[] public zombies;
function _createZombie(string memory _name, uint _dna) private {
uint id = zombies.push(Zombie(_name, _dna)) - 1;
emit NewZombie(id, _name, _dna);
}
function _generateRandomDna(string memory _str) private view returns (uint) {
uint rand = uint(keccak256(abi.encodePacked(_str)));
return rand % dnaModulus;
}
function createRandomZombie(string memory _name) public {
uint randDna = _generateRandomDna(_name);
_createZombie(_name, randDna);
}
}
Nếu bạn chưa biết cách TẠO FILE, COMPILER và DEPLOY thì hãy xem lại trong bài giới thiệu nhé. Có hướng dẫn chi tiết ở đó.
BÀI TIẾP THEO: BÀI SỐ 13
HỌC TỪ ĐẦU: BÀI SỐ 1