Lập trình Blockchain - Bài 2:
Trong bài viết trước, chúng ta đã làm một ứng dụng Hello World đơn giản và triển khai trên máy ảo. Trong bài viết này, chúng ta sẽ thử triển khai ứng dụng lên trên mạng lưới của Ethereum. Để triển khai ứng dụng lên mạng lưới của Ethereum, chúng ta cần một lượng tiền Ether. Để có thể chứa tiền thì tất nhiên chúng ta cần phải có ví. Một trong những sự lựa chon cho ví Ether đó mà Metamask.
Metamask:
Metamask là một phần mềm mở rộng trên trình duyệt Chrome với chức năng lưu trữ đồng Ether.
Để cài đặt Metamask, ta truy cập trang Chrome Web Store tại đây. Sau đó chọn nút THÊM VÀO CHROME để cài đặt.
Sau khi cài đặt, ta click vào biểu tượng con cáo màu cam. Ở phía gốc trên bên trái, ta sẽ thấy tên mạng lưới Ethereum mà Metamask đang kết nối tới. Mặc định là mạng Main Network, đây chính là mạng lưới chính thức của Ethereum. Nếu bạn muốn người dùng cuối sử dụng được ứng dụng của bạn, bản phải triển khai trên Main Network.
Nếu chúng ta chọn Main Network thì chúng ta phải đi mua một ít tiền Ether trên các sàn giao dịch tiền kĩ thuật số thì mới có thể triển khai hợp đồng thông minh. Để tiết kiệm, chúng ta sẽ chuyển qua các mạng lưới kiểm thử, ví dụ một trong những mang có tên là Rinkeby:
Tiếp tục tạo tài khoản ví bằng cách click vào nút Accept để chấp nhận các điều khoản sử dụng. Khi tạo, sẽ được 1 câu gồm 12 từ, được gọi là Mnemonic.
Mnemonic:
Mnemonic dùng để khôi phục lại tài khoản Metamask, bao gồm cả số dư đã có và tạo mật khẩu mới. Mnemonic là cực kì quan trọng, hãy sao chép, lưu vào nơi an toàn và đừng cho ai biết hết nhé:
Trong thực tế, bạn không được cho ai biết 12 từ này nếu không muốn người khác ăn cắp tài khoản của bạn. Do đây là ứng dụng phi tập trung nên không có một tổ chức nào giống như ngân hàng có thể khôi phục lại tài khoản cho bạn.
Bạn có thấy điểm lạ là Metamask không yêu cầu bạn cung cấp email để đăng kí hay không? Trong hầu hết các ví của tiền kĩ thuật số nói chung sẽ không yêu cầu email. Điều này có nghĩa Metamask hoàn toàn không có chức năng quên mật khẩu. Nếu bạn quên mật khẩu đăng nhập ví Metamask, bạn phải dùng Mnemonic để khôi phục lại tài khoản: bạn sẽ tạo lại được mật khẩumới. Ngoài ra, số tiền ether sau khi khôi phục tài khoản vẫn được giữ nguyên.
Địa chỉ ví:
Khi tạo tài khoản ví, bạn sẽ nhận được một địa chỉ ví có dạng một dãy số hexa. Dãy số này sẽ phân biệt với tất cả người dùng trên mạng lưới:
Hiểu đơn giản thì địa chỉ ví này tương tự như số tài khoản ngân hàng. Nếu tài khoản ngân hàng dùng để nhận tiền thì tài khoản ví dùng để nhận đồng ether.
Nhận Ether miễn phí trên Rinkeby:
Khi tạo tài khoản, số dư tất nhiên là bằng 0. ?
Để nhận Ether miễn phí trên Rinkeby, ta làm như sau:
Bước 1: Sao chép địa chị ví. Để sao chép địa chỉ, ta ấn vào nút 3 chấm và chọn Copy Address to clipboard:
Bước 2: Truy cập vào địa chỉ rinkeby-faucet.com. Sau đó dán địa chỉ ví đã sao chép vào texbox và click nút Submit. Đợi một tí khoảng 2 phút để thực hiện giao dịch chuyển tiền:
Sau khi chuyển tiền thành công, bạn sẽ thấy số dư tài khoản của mình tăng lên 0.001 ether:
Nếu bạn muốn nhiều ether hơn thì có thể truy cập vào một trang web khác là faucet.rinkeby.io để yêu cầu. Tuy nhiên, các làm có hơi phức tạp hơn do các trang web này yêu cầu bạn phải chia sẻ địa chỉ ví lên các mạng xã hội.
Deploy lên Rinkeby:
Trở lại với Remix, trong tab Run ta đổi Environment Injected Web3:
Khi đó, phần thông tin Account đã tự động chuyển sang tài khoản ví của Metamask:
Để deploy smart contract, bạn phải chắc rằng tài khoản của mình có Ether. Ta ấn vào nút Deploy để triển khai smart contract. Khác với deploy trên Javascript VM, khi deploy lên mạng lưới thật của Ethereum sẽ một hộp thoại hiện lên để xác nhận giao dịch:
Trong hợp thoại trên, ta có một số thông minh cần lưu ý:
Gas Limit: như đã đề cập ở bài viết trước, Gas Limit là lượng gas tối đa mà chúng ta sẵn sàng chi trả để thực thi hợp đồng thông minh.
Gas Price: số tiền Ether mà ta muốn chi trả cho 1 đơn vị gas.
Max Transaction Fee: Phí giao dịch tối đa mà giao dịch có thể tiêu thụ và được tính bằng Gas Limit nhân cho Gas Price.
Nếu giá cả ổn rồi thì ta click vào nút Submit màu xanh lá cây để tiếp tục. Ta phải đợi một tí để các máy tính trong mạng lưới của Ethereum xác nhận giao dịch.
Tại sao chúng ta phải đợi? Đó là do cần phải thực hiện giao thức đồng thuận.
Giao thức đồng thuận (Consensus Protocol):
Trong mạng lưới phân tán, các máy tính (các node) cần phải có thể có cơ chế đồng thuận để đồng bộ hóa sổ cái. Hiện tại, Ethereum sử dụng cơ chế đồng thuận bằng chứng xử lí (Proof of Work – PoW). Mỗi máy tính sẽ cống hiến sức mạnh máy tính (sức mạnh tính toán của CPU hoặc card đồ họa) của mình để tham gia vào quá trình xác nhận giao dịch. Quá trình này được gọi là đào (mining). Máy tính nào xác nhận giao dịch xong trước sẽ được thường một lượng Ether.
Hiện tại, cơ chế đồng thuận PoW gây tiêu tốn khá nhiều điện. Ethereum đang thử nghiệm phiên bản cập nhật tiếp theo có tên là Casper với cơ chế đồng thuận mới: bằng chứng cổ phần (PoS – Proof of Stake).Mình sẽ đề cập thêm về cái này trong một bài viết không xa.?
Trở lại với Metamask. Mỗi giao dịch trên mạng lưới Ethereum đều sẽ được Metamask lưu lại lịch sử:
Sau khi giao dịch hoàn tất, ở Remix, ta sẽ thấy smart contract được deploy thành công:
Giờ ta chỉ cần kiểm thử lại lại hợp đồng thông minh thôi:
Điểm khác biệt khi deploy trên Rinkeby so với trên máy ảo Javascript VM đó là khi chúng ta ấn vào nút contructor. Metamask sẽ hiện thị hộp thoại xác nhận giao dịch. Ngoài ra, sau khi ấn nút contructor, bạn ấn ngay lập tức vào nút getMessage sẽ không lấy được kết quả. Nguyên là do giao dịch đang còn chờ xác nhận của mạng lưới Ethereum. Chúng ta phải đợi khoảng 1 phút để việc giá trị cho biến message có hiệu lực.
Sau khi giao dịch được xác nhận, hãy ấn vào nút getMessage. Khi đó, kết quả được trả về ngay:
Tại sao gọi hàm getMessage thì không thấy hiện thị hộp thoại xác nhận giao dịch của Metamask nhỉ? Nguyên nhân chúng ta khai báo hàm getMessage với từ khóa view, điều này làm cho hàm getMessage không tiếu tốn bất kì đồng Ether nào.
Vậy là chúng ta đã triển khai lên mạng lưới của Ethereum rồi đó. ?
Kết:
Metamask cung cấp cho ta khả năng tạo ví để chứa ether trên mạng lưới của Ethereum.
Metamask có thể kết nối đến nhiều mạng lưới khác nhau của Ethereum như Main Network, Rinkeby testing network.
Ethreum sử dụng cơ chế đồng thuận bằng chứng xử lí (Proof of Work – PoW): mỗi máy tính trong mạng lưới sẽ cống hiến sức mạnh tính toán của mình.
Trong phần tiếp theo, chúng ta sẽ không code bằng Remix nữa. Thay vào đó, chúng ta sẽ thực hiện cài đặt môi trường phát triển ở phía local.
Nguồn: notcuder.com