Triển khai hợp đồng thông minh bằng Hardhat
Last updated
Last updated
Phần này sẽ hướng dẫn bạn triển khai token Soulbound cho mạng Baobab của Klaytn bằng cách dùng Hardhat.
Hardhat là một môi trường phát triển hợp đồng thông minh, có thể giúp bạn:
Phát triển và lập hợp đồng thông minh.
Gỡ lỗi, thử nghiệm và triển khai hợp đồng thông minh và dApp.
Token Soul-bound (SBT) là các NFT không thể chuyển nhượng. Nghĩa là khi đã bạn đã có được chúng, bạn sẽ không thể bán hoặc chuyển nhượng cho người dùng khác. Để tìm hiểu thêm về SBT, cách hoạt động và trường hợp sử dụng của chúng, bạn có thể xem bài viết tham khảo được Vitalik Buterin xuất bản.
Đến cuối hướng dẫn này, bạn sẽ có thể:
Thiết lập dự án Hardhat trên Klaytn.
Tạo token soul-bound đơn giản.
Lập hợp đồng thông minh bằng Hardhat.
Kiểm tra, triển khai và tương tác với hợp đồng thông minh bằng Hardhat.
Khám phá tính năng phân nhánh Hardhat.
Để làm theo hướng dẫn này, bạn cần đáp ứng các điều kiện tiên quyết sau:
Trình biên tập mã: một trình biên tập mã nguồn như VS-Code.
Metamask: được dùng để triển khai hợp đồng, ký giao dịch và tương tác với hợp đồng.
Điểm cuối RPC: bạn có thể nhận từ một trong những Nhà cung cấp điểm cuối được hỗ trợ.
KLAY thử nghiệm từ Vòi: nạp tiền vào tài khoản với một lượng KLAY vừa đủ.
Để tận dụng hardhat, chúng ta cần thiết lập môi trường phát triển và cài đặt hardhat. Hãy cùng thực hiện bằng các bước sau:
Bước 1: Tạo một thư mục dự án
Bước 2: Khởi tạo một dự án npm
Dán lệnh này vào giao diện dòng lệnh để tạo tập tin package.json
Bước 3: Cài đặt hardhat và các phần phụ thuộc khác:
Dán mã dưới đây và giao diện dòng lệnh để cài đặt hardhat
Dán mã dưới đây để cài đặt các phần phụ thuộc khác
Lưu ý: Mã này sẽ cài đặt các phần phụ thuộc cần thiết khác cho dự án này, gồm
hardhat
,hardhat-toolbox
,klaytn/contract
,dotenv
cùng các phần khác.
Bước 4: Khởi tạo dự án hardhat:
Chạy lệnh dưới đây để khởi tạo một dự án hardhat
Với hướng dẫn này, bạn sẽ chọn một dự án typescript như bên dưới:
Sau khi khởi tạo dự án hardhat, thư mục hiện tại của bạn sẽ bao gồm:
contracts/ – thư mục này chứa mã hợp đồng thông minh.
scripts/ – thư mục này chứa các mã để triển khai hợp đồng trên mạng chuỗi khối.
test/ – thư mục này chứa các bài kiểm tra đơn vị để kiểm tra hợp đồng thông minh của bạn.
hardhat.config.ts – tập tin này chứa các cấu hình quan trọng cho công việc của Hardhat và việc triển khai token soul-bound.
Bước 5: Tạo tập tin .env
Đến đây, hãy tạo tập tin .env trong thư mục dự án. Tập tin này sẽ giúp chúng ta tải các biến môi trường từ tập tin .env vào process.env.
Dán lệnh này vào giao diện dòng lệnh để tạo tập tin .env
Sau khi tạo tập tin, hãy cấu hình sao cho tập tin .env sẽ có dạng:
Bước 6: Thiết lập cấu hình Hardhat
Sửa đổi hardhat.config.ts
bằng các cấu hình sau:
Đến đây, chúng ta đã thiết lập xong môi trường phát triển, hãy bắt đầu soạn hợp đồng thông minh cho token soul-bound.
Trong phần này, bạn sẽ dùng Hợp đồng Klaytn: một thư viện dành cho việc phát triển hợp đồng thông minh bảo mật, được xây dựng trên nền tảng mã tin cậy do cộng đồng kiểm duyệt. Đây là một phân nhánh các hợp đồng zeppelin mở.
Lưu ý: Bạn đã cài đặt thư viện này ở bước 3 của phần
Thiết lập môi trường phát triển
.
Bước 1: Chọn thư mục hợp đồng trong ngăn Trình khám phá, nhấp vào nút New File mới và tạo một tập tin có tên là SBT.sol
Bước 2: Mở tập tin và dán mã sau vào:
Hướng dẫn về mã
Đây là hợp đồng thông minh của bạn. dòng 1 cho biết Hardhat sử dụng phiên bản Solidity 0.8.7 hoặc cao hơn. Ngoài ra, dòng này còn nhập KIP17.SOL và các hợp đồng hỗ trợ khác. Từ dòng 6-12, một hợp đồng thông minh kế thừa KIP17 đã được tạo. Ngoài ra, tên và ký hiệu của token đã được đưa qua trong hàm tạo.
Như bạn có thể thấy trong đoạn mã trên, tên và ký hiệu của token đã được đặt lần lượt là SoulBoundToken và SBT. Bạn có thể thay đổi tên và ký hiệu của token theo mong muốn.
Điều quan trọng trong hợp đồng này là không cho phép chuyển nhượng token, khiến cho các token được phát hành mang tính chất định danh cá nhân.
Trong phần này, chúng ta sẽ kiểm tra một số chức năng của hợp đồng.
Bước 1: Trong ngăn Trình khám phá, chọn thư mục kiểm tra và nhấp vào nút Tập tin mới và tạo một tập tin mới với tên là sbtTest.ts
Bước 2: Sao chép mã dưới đây vào tập tin sbtTest.ts
.
Trong đoạn mã bạn vừa sao chép, dòng 7 & 12 cho thấy bạn đã nhập expect từ Chai và loadFixture từ hardhat-network-helpers.
Các bài kiểm tra ở trên kiểm tra các điểm sau:
Chủ ở hữu của mã token cụ thể và người nhận các đồng token đó có phải là cùng một người không?
Nó có ngăn chặn việc chuyển nhượng token giữa các tài khoản không?
Step 3: Để chạy bài kiểm tra, hãy chạy dòng lệnh dưới đây:
Để được hướng dẫn sâu hơn về quy trình kiểm tra, vui lòng xem phần Hardhat testing.
Tập lệnh là các tập tin JavaScript/Typescript giúp bạn triển khai các hợp đồng vào mạng chuỗi khối. Trong phần này, bạn sẽ tạo tập lệnh cho hợp đồng thông minh.
Bước 1: Trong ngăn Trình khám phá, chọn thư mục “script” và nhấp vào nút New File và tạo một tập tin mới với tên là sbtDeploy.ts
.
Bước 2: Sao chép và dán đoạn mã sau vào tập tin.
Lưu ý: nhập địa chỉ ví MetaMask của bạn vào biến
deployerAdd
.
Bước 3: Trong giao diện dòng lệnh, chạy lệnh sau để yêu cầu Hardhat triển khai token SBT của bạn trên Mạng thử nghiệm Klaytn (Baobab)
Step 4: Mở Klaytnscope để kiểm tra xem token SBT đã được triển khai thành công hay chưa.
Bước 5: Sao chép và dán địa chỉ hợp đồng đã được triển khai vào trường tìm kiếm rồi nhấn Enter. Bạn sẽ thấy hợp đồng vừa được triển khai.
Hardhat cung cấp cho các nhà phát triển chức năng mô phỏng mạng chính thức (tại bất kỳ khối cụ thể nào) thành mạng phát triển cục bộ. Một trong những lợi ích chính của tính năng này là cho phép các nhà phát triển tương tác với hợp đồng đã triển khai và cũng có thể thử nghiệm các trường hợp phức tạp.
Để tính năng này hoạt động hiệu quả, bạn cần kết nối với một nút lưu trữ. Bạn có thể đọc thêm về tính năng này ở đây
Đến đây, dự án Hardhat của chúng ta đã được thiết lập, hãy cùng phân nhánh mạng chính thức của Klaytn bằng Harhat. Mở giao diện dòng lệnh và chạy lệnh sau
Bạn cũng có thể cấu hình hardhat.config.ts
- Mạng Hardhat để luôn thực hiện việc này:
Kết quả đầu ra
Sau khi chạy thành công lệnh này, giao diện dòng lệnh của bạn sẽ có dạng như hình trên. Bạn sẽ có 20 tài khoản phát triển, đã được nạp sẵn 10.000 token thử nghiệm.
Máy chủ RPC của chuỗi được phân nhánh sẽ nhận và xử lý khối tại địa chỉ http://127.0.0.1:8545/
. Bạn có thể xác minh mạng lưới được phân nhánh hay chưa bằng cách truy vấn số khối mới nhất. Hãy cùng tạo một cURL đến RPC để nhận số khối. Mở cửa sổ giao diện dòng lệnh mới và dùng lệnh sau:
Kết quả đầu ra
Kết quả đầu ra là một hệ thập lục phân như đã thấy ở trên. Để nhận số khối từ hex, hãy đổi hex thành số thập phân bằng công cụ này. Bạn sẽ nhận được số khối mới nhất từ lần bạn phân nhánh mạng lưới. Bạn có thể xác nhận số khối trên klaytnscope.
Với hardhat, bạn có thể mô phỏng mạng chính thức tại một khối cụ thể. Trong trường hợp đó, hãy cùng phân nhánh chuỗi tại số khối 105701850
.
Để xác nhận chuỗi khối được phân nhánh tại một khối cho trước, hãy mở cửa sổ giao diện dòng lệnh mới và dùng lệnh sau:
Kết quả đầu ra trả về hệ thập lục phân, khi được chuyển đổi bằng công cụ này, nó sẽ có giá trị bằng 105701850
.
Để được hướng dẫn sâu hơn về Hardhat, vui lòng tham khảo Tài liệu về Hardhat. Ngoài ra, bạn có thể tìm thấy cách triển khai mã đầy đủ cho hướng dẫn này trên GitHub