Sau khi đã tạo thành công một hợp đồng thông minh thì bạn có thể làm gì tiếp theo? Trong bài viết này, tôi sẽ hướng dẫn từng bước một cách tương tác với hợp đồng thông minh.
Trước khi đọc toàn bộ bài viết, hãy xem chiếc video mà tôi rất tâm đắc sau đây. Lý do tôi thích video này là vì nó hướng dẫn vô cùng chi tiết và trực quan cách thức tương tác với hợp đồng thông minh.
Read and Update a Smart Contract on Ethereum – Hello World Pt 2
Tương tác với Hợp đồng thông minh của bạn
Sau khi triển khai thành công hợp đồng thông minh lên mạng Goerli, hãy cùng thử thách kỹ năng web3 bằng cách tương tác với nó!
Bước 1: Tạo tệp interact.js
Đây là tệp mà chúng ta sẽ viết tập lệnh tương tác của mình. Chúng ta sẽ sử dụng thư viện Ethers.js mà bạn đã cài đặt trước đó ở Phần 1.
Bên trong thư mục /scripts cho hướng dẫn Hardhat, hoặc thư mục chính của bạn cho hướng dẫn Truffle, hãy tạo một tệp mới có tên /interact.js và thêm các dòng mã sau:
Bước 2: Cập nhật tệp .env của bạn
Chúng ta sẽ sử dụng các biến môi trường mới, vì vậy chúng ta cần định nghĩa chúng trong tệp .env của mình và đảm bảo rằng mô-đun dotenv đang tải các biến này.
Chúng ta sẽ cần thêm định nghĩa cho API_KEY Alchemy và CONTRACT_ADDRESS nơi hợp đồng thông minh của bạn đã được triển khai.
Tệp .env của bạn sẽ trông giống như thế này:
Bước 3: Lấy ABI hợp đồng của bạn
ABI (Application Binary Interface) hợp đồng là giao diện để tương tác với hợp đồng thông minh của chúng ta. Bạn có thể tìm hiểu thêm về ABI Hợp đồng tại đây. Hardhat (và Truffle) tự động tạo ABI cho chúng ta và lưu nó trong tệp HelloWorld.json. Để sử dụng điều này, chúng ta cần phân tích nội dung bằng cách thêm các dòng mã sau vào tệp interact.js của mình:
Nếu bạn muốn xem ABI, bạn có thể in nó ra bảng điều khiển của mình:
Để chạy interact.js và xem ABI của bạn được in ra bảng điều khiển, hãy điều hướng đến thiết bị đầu cuối của bạn và chạy:
#Hardhat:
#Truffle:
Bước 4: Tạo một phiên bản hợp đồng của bạn
Để tương tác với hợp đồng, chúng ta cần tạo một phiên bản của nó trong mã của chúng ta. Để làm như vậy với Ethers.js, chúng ta cần làm việc với ba khái niệm:
- Provider (Nhà cung cấp): Đây là một nhà cung cấp node cung cấp cho bạn quyền truy cập đọc và ghi vào blockchain.
- Signer (Người ký): đại diện cho một tài khoản Ethereum có khả năng ký giao dịch.
- Contract (Hợp đồng): Đây là một đối tượng Ethers.js đại diện cho một hợp đồng cụ thể được triển khai trên chuỗi.
Chúng ta sẽ sử dụng ABI hợp đồng từ bước trước để tạo phiên bản hợp đồng của mình:
Bạn có thể tìm hiểu thêm về Providers, Signers và Contracts trong tài liệu Ethers.js.
Bước 5: Đọc thông báo khởi tạo
Bạn còn nhớ khi chúng ta triển khai hợp đồng với initMessage = “Hello world!” không? Bây giờ chúng ta sẽ đọc thông báo được lưu trữ trong hợp đồng thông minh của mình và in nó ra bảng điều khiển.
Trong JavaScript, chúng ta sử dụng các hàm bất đồng bộ để tương tác với mạng. Hãy xem bài viết này để tìm hiểu thêm về các hàm async.
Sử dụng mã bên dưới để gọi hàm message trong hợp đồng thông minh của chúng ta và đọc thông báo khởi tạo:
Sau khi chạy tệp bằng npx hardhat run scripts/interact.js trong thiết bị đầu cuối, chúng ta sẽ thấy phản hồi này:
Chúc mừng! Bạn vừa đọc thành công dữ liệu hợp đồng thông minh từ blockchain Ethereum, thật tuyệt vời!
Bước 6: Cập nhật thông báo
Bây giờ thay vì chỉ đọc thông báo, chúng ta cũng có thể cập nhật thông báo được lưu trong hợp đồng thông minh của mình bằng hàm update! Thật tuyệt vời phải không?
Để làm như vậy, chúng ta có thể trực tiếp gọi hàm update trên đối tượng Contract đã được khởi tạo của mình, như sau:
Lưu ý rằng chúng ta gọi .wait() trên đối tượng giao dịch được trả về. Điều này đảm bảo rằng tập lệnh của chúng ta đợi giao dịch được khai thác trên blockchain trước khi tiếp tục. Nếu bạn bỏ qua dòng này, tập lệnh của bạn có thể không thể nhìn thấy giá trị message được cập nhật trong hợp đồng của bạn.
Bước 7: Đọc thông báo mới
Bạn có thể lặp lại Bước 5 để đọc giá trị message được cập nhật. Hãy dành một chút thời gian và xem liệu bạn có thể thực hiện những thay đổi cần thiết để in ra giá trị mới đó hay không!
Nếu bạn cần gợi ý, đây là tệp interact.js của bạn sẽ trông như thế nào tại thời điểm này:
Bây giờ chỉ cần chạy tập lệnh và bạn sẽ có thể thấy thông báo cũ, trạng thái cập nhật và thông báo mới được in ra thiết bị đầu cuối của bạn!
Trong khi bạn đang chạy tập lệnh đó, bạn có thể nhận thấy rằng bước Updating the message… mất một lúc để tải xong trước khi thông báo mới được đặt.
Đó là do quá trình khai thác! Nếu bạn tò mò về cách theo dõi các giao dịch trong khi chúng đang được khai thác, hãy truy cập Alchemy mempool để xem trạng thái giao dịch của bạn (cho dù nó đang chờ xử lý, đã được khai thác hay bị mạng loại bỏ). Nếu giao dịch của bạn bị loại bỏ, bạn cũng nên kiểm tra Goerli Etherscan và tìm kiếm hash giao dịch của bạn.
Và thế là xong! Tôi với bạn đã triển khai VÀ tương tác với một hợp đồng thông minh Ethereum.