Lập trình Blockchain - Bài 1: Tạo ứng dụng dApp "Hello World" trên Ethereum
Trong loại bài viết này, mình sẽ viết về một nền tảng blockchain có tên là Ethereum – nền tảng Blockchain phổ biến nhất hiện nay dành cho developer. Blockchain là nền tảng kĩ thuật để tạo nên tiền kĩ thuật số nhưng tiền kĩ thuật không phải là tất cả những gì blockchain có thể làm. Blockchain không chỉ có tiền kĩ thuật số.
Loại bài bài viết này hướng đến đối tượng là lập trình viên: Nội dung sẽ là xây dựng ứng dụng web với Ethereum. Nội dung các bài viết sẽ không quá chuyên sâu về blockchain. Ngoài ra, nội dung tuyệt đối không bao gồm kiến thức về đầu tư tiền kĩ thuật số và cũng như không khuyến khích ai tham gia vào đầu tư lĩnh vực đầy mới mẻ và rủi ro này nhé.
Đầu tiên, chúng ta cần phần có “trình soạn thảo” để code, cụ thể ở đây là IDE hay trình soạn thảo (text editor). Một trong những text editor cực kì phổ biến cho dân lập trình web là Visual Studio Code. Nếu sử dụng Visual Studio Code thì chúng ta sẽ tốn thời gian để cài đặt môi trường. Thay vào đó, để bắt đầu nhanh, chúng ta sẽ dùng một IDE online có tên Remix IDE.
Remix:
Remix là một IDE tuyệt vời để tạo một hợp đồng thông minh (smart contract) dạng “mì ăn liền”. Bạn không cần cài đặt gì cả, chỉ cần truy cập vào địa chỉ: https://remix.ethereum.org.
Để code smart contract, chúng ta sẽ dùng ngôn ngữ lập trình có tên là Solidity. Về cơ bản, mình cá nhân mình thấy Solidity hơi giống giống Javascript bổ sung thêm một số cú pháp hướng đối tượng khác.
Ta sẽ code thử một smart contract đơn giản có tên là Hello. Với smart contract này, ta có chức năng là thiết lập và truy xuất giá trị của biến message.
Bước 1: Code
Khi truy cập vào địa chỉ của Remix, bạn sẽ thấy nó tạo sẵn một hợp đồng thông minh dành cho bầu cử (voting). Để đơn giản, mình sẽ làm một hợp đồng thông minh dạng Hello World thôi, nên bạn hãy mạnh dạnh xóa mấy dòng code có sẵn đi nhé. ?
Nội dung của contract như sau:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | pragma solidity ^0.4.23; contract Hello { string private message; function contructor(string mes) public { message = mes; } function setMessage(string mes) public { message = mes; } function getMessage() public view returns(string) { return message; } } |
Mình sẽ giải thích tí về đoạn code trên.
Ở dòng đầu tiên, ta phải định nghĩa phiên bản của ngôn ngữ Solidity muốn dùng, ở đây mình sử dụng phiên bản mới nhất hiện tại là 0.4.23:
1 | pragma solidity ^0.4.23; |
Tiếp theo, ta khai báo một hợp đồng có tên mà Hello:
1 | contract Hello |
Trong contract Hello, tạ khai báo một biến có tên là message:
1 | string private message; |
Tiếp tục khai báo hàm khởi tạo với từ khóa contructor. Hàm khởi tạo này có một tham số để thiết lập giá trị ban đâu cho biến message:
1 2 3 | function contructor(string mes) public { message = mes; } |
Tiếp theo, ta định nghĩa hai hàm dùng để thiết lập và lấy giá trị của biến message:
1 2 3 4 5 6 7 | function setMessage(string mes) public { message = mes; } function getMessage() public view returns(string) { return message; } |
Điểm cần chú ý của làm getMessage là từ khóa view. Trong Solidity từ khóa view dùng để định nghĩa một hàm chỉ truy xuất dữ liệu mà không làm thay đổi dữ liệu.
Bước 2: Biên dịch (complie):
Để biên dịch code, ta click vào nút Start to Compile ở tab Compile. Nếu biên dịch thành công, ta sẽ thấy thông báo màu xanh lá cây phía dưới.
Bước 3: Triển khai (deploy):
Điểm tuyệt vời của Remix là hỗ trợ triển khai hợp đồng thông minh. Chúng ta không cần phải cài đặt thêm bất kì thứ gì khác.
Để triển khai, ta chọn tab Run:
Ở Environent, cho chọn Javascript VM. Enviroment ở đây là nơi mà code chúng ta muốn triển khai. Javscript VM ở đây là môi trường máy ảo.
Khi chọn môi trường là Javascript VM, Remix sẽ tự động tao cho chúng 5 tài khoản, mỗi tại khoản có số dư là 100 ether. Ether là gì?
Ether:
Ether ở đây chính đơn vị tiền kĩ thuật số của mạng lưới Ethereum. Trên thực tế, nếu muốn triển khai trên mạng lưới chính, bạn phải mua một lượng ether. Rất may, trên máy ảo chúng ta không phải tốn tiền mua ether để triển khai hợp đồng thông minh.
Những giao dịch trên Ethereum sẽ được thực thi bởi một máy ảo có tên là Ethereum Virtual Machine (EVM). Do đó, bạn phải trả một lượng nhiêu liệu để máy ảo chạy. Lượng nhiêu liệu này được gọi là gas. Về bản chất thì gas ở đây chính là lượng tiền ether bạn phải trả.
Gas Limit:
Gas Limit là lượng ether tối đa mà bạn sẵn sàng trả để thực hiện hợp đồng thông minh. Hiểu đơn giản thì cái này giống như việc thuê xe chở đồ: bạn cung cấp một lượng xăng cho chủ xe là 10 lít xăng và yêu cầu chủ xe chỉ xử dụng tối đa là 10 lít xăng đó.
Nếu bạn xét lượng gas limit quá thấp, lượng gas sẽ không đủ để máy ảo Ethereum thực hiện hợp đồng thông minh.
Gas Limit sẽ được tính theo đơn vị wei. Wei là đơn vị nhỏ nhất mà ether có thể quy đổi. 1 ether có giá trị bằng 1018 wei. Ngoài wei, ta vẫn còn các đơn vị khác, ta có thể xem các quy đổi tại địa chỉ https://etherconverter.online
Ta quay lại cách triển khai hợp đồng thông minh nào.
Để triển khai, ta click vào nút Deploy màu đỏ.
Sau khi deploy thành công, ta sẽ thấy số ether của tài khoản giảm đi một ít do tiêu tốn để triển khai smart contract và phía dưới sẽ xuất hiện các hàm của hợp đồng thông minh:
Bước 4: Kiểm thử (test):
Đầu tiên ta nhập vào textbox của contructor để khởi tạo. Ví dụ nhập vào “Hello world”. Lưu ý là khi nhập chuỗi thì phải có dấu “”. Để gọi 1 hàm nào đó trên Remix, chúng ta click vào nút tương ứng.
Vậy là chúng ta hoàn thành hợp đồng thông minh “Hello World” rồi đó.
Kết:
Remix là công cụ tuyệt vời để code hợp đồng thông minh: không cần phải cài đặt và hỗ trợ cài đặt môi trường kiểm thử.
Để tạo hợp đồng thông minh, chúng ta sử dụng ngôn ngữ lập trình có tên là Solidity.
Để triển khai hợp đồng thông minh, chúng ta phải có một lượng tiền ether trong tài khoản để chi trả cho máy ảo Ethereum.
Nguồn: notcuder.com