Lập trình Blockchain: Ngôn ngữ Solidity cơ bản (P2)

DUY PHAN
20:47 24/07/2018

Lập trình Blockchain - Bài 04: Solidity cơ bản (P2) - Định nghĩa hàm chức năng

Trong bài trước chúng ta đã khởi động bằng một số concept cơ bản của Solidity bằng cách tạo một contract đơn giản và khám phá một số cấu trúc cùng khái niệm đơn giản. Bây giờ chúng ta sẽ tiếp tục bằng một số khái niệm về định nghĩa hàm chức năng, event cho contract.

1. Các function

Một function trông như sau

pragma solidity ^0.4.22;

  contract DeveloperFactory {     // Let's create a Developer!     uint maxAge = 100;     uint minAge = 5;       struct Developer {         string name;         uint id;         uint age;     }       Developer[] public developers;       function _createDeveloper( string _name, uint _id, uint _age ) private{         developers.push( Developer( _name, _id, _age ) );     }       function _generateRandomId( string _str ) private pure returns (uint){         uint rand = uint(keccak256(_str));         return rand;     }       function createRandomDeveloper( string _name, uint _age ) public view {         require(_age > minAge);         require(_age < maxAge);         uint randId = _generateRandomId( _name );         _createDeveloper(_name, randId, _age );     } }

Ethereum có một hash function keccak256 có sẵn, nó là một phiên bản của SHA3. Pass cho nó string bất kì và bạn sẽ có được một số lục phân 256-bit.

Như bạn có thể thấy, chúng ta đều type-casting (chuyển đổi kiểu dữ liệu) từ keccak256value sang uint value và return nó.

Ngoài private keyword, bạn cần phải add thêm vài thứ vào function:

  • Hãy dùng returns và xác định dạng mà function return. Ở đây nó trả về một dạng uint.
  • view nghĩa là function cần xem một vài biến của Contract, mà không được thay đổi nó. Ở đây Function createRandomDeveloper cần xem các biến minAge and maxAge.
  • pure nghĩa là function không truy cập vào bất kì data trong app. Nó chỉ trả về cái gì đó dựa trên các parameter, _generateRandomId chính là pure.

Chúng ta có 3 function là:

 _generateRandomId tạo ra một Id ngẫu nhiên cho Developer của chúng ta bằng cách dùng function keccak256 sẵn có.

 _createDeveloper tạo và push một Developer struct mới thành mảng.

createRandomDeveloper là public function duy nhất. Nó sẽ check xem age được cung cấp có đúng hay không. Các câu lệnh require sẽ báo error nếu nó không đúng (age lớn hơn 100 và ít hơn 5 trong trường hợp này). Từ đó, function cuối là cái có thể được call từ ngoài contract.

2. Các event

Bạn có thể tạo các event để có thể tương tác với những gì diễn ra trên blockchain và show trên front end. App của bạn sẽ dựa theo các event và phản hồi theo đó.

Chúng ta tạo event bằng event. Trong Contract, event sẽ có 3 parameter bao gồm devId, name và age. Chúng ta sẽ kích hoạt event trong hàm _createDeveloper. Idđược lấy từ phương thức push trên mảng Developer. Nó sẽ trả về một độ dài mới cho mảng. Vì array bắt đầu 0, chúng ta phải trừ đi 1 để lấy developer id.

TIN LIÊN QUAN
Lập trình Blockchain – Bài 03: Solidity cơ bản – Các kiểu dữ liệu Solidity là ngôn ngữ lập trình có cú pháp, cấu trúc tập lệnh giống Javascript và C, được sử dụng để xây dựng contract – thành phần cơ bản để tạo block của ứng dụng Ethereum chạy trên EVM...