Reading Time: 10 minutes

Nếu bạn là người mới bước chân vào lĩnh vực phát triển blockchain và đang tìm kiếm điểm khởi đầu, hoặc đơn giản chỉ muốn nắm bắt quy trình triển khai và tương tác với hợp đồng thông minh, hướng dẫn này là dành cho bạn.

Với kinh nghiệm nhiều năm trong lĩnh vực blockchain, tôi sẽ là cố vấn, người hướng dẫn và người đồng hành cùng bạn trên hành trình “chế tạo” hợp đồng thông minh đầu tiên. Chúng ta sẽ cùng nhau thực hiện các bước tạo và triển khai một hợp đồng thông minh đơn giản trên mạng thử nghiệm Goerli, sử dụng ví ảo (Metamask), Solidity, Hardhat và Alchemy. Đừng lo lắng nếu bạn chưa quen thuộc với những thuật ngữ mới này, tôi sẽ cố gắng giải thích chi tiết nhất có thể.

How To Write a Solidity Smart Contract! – Hello World Pt 1

Tạo và Triển khai Hợp đồng Thông minh của bạn

Bước 1: Kết nối với mạng Ethereum

Có nhiều phương thức để gửi yêu cầu đến chuỗi Ethereum. Để đơn giản nhất, tôi sẽ hướng dẫn bạn sử dụng tài khoản miễn phí trên Alchemy, một nền tảng phát triển blockchain và API cho phép chúng ta giao tiếp với chuỗi Ethereum mà không cần vận hành các node riêng. Nền tảng này cũng cung cấp các công cụ dành cho nhà phát triển để giám sát và phân tích, mà chúng ta sẽ tận dụng trong hướng dẫn này để hiểu rõ hơn về quá trình triển khai hợp đồng thông minh.

Bước 2: Tạo ứng dụng (và khóa API)

Sau khi tạo tài khoản Alchemy, bạn có thể tạo khóa API bằng cách tạo ra một ứng dụng. Điều này sẽ cho phép chúng ta gửi yêu cầu đến mạng thử nghiệm Goerli. Nếu bạn chưa quen thuộc với mạng thử nghiệm, hãy tham khảo hướng dẫn này (Join GitBook – GitBook).

Điều hướng đến trang “Create App” trong Bảng điều khiển Alchemy bằng cách di chuột qua “Apps” trong thanh điều hướng và nhấp vào “Create App”.

Đặt tên ứng dụng của bạn là “Hello World”, cung cấp một mô tả ngắn gọn, chọn “Staging” cho Môi trường (được sử dụng cho việc quản lý ứng dụng của bạn) và chọn “Goerli” cho mạng của bạn.

Hãy chắc chắn rằng bạn đang chọn mạng thử nghiệm Goerli!

Nhấp vào “Create app” và thế là xong! Ứng dụng của bạn sẽ xuất hiện trong bảng bên dưới.

Bước 3: Tạo tài khoản Ethereum (địa chỉ)

Chúng ta cần một tài khoản Ethereum để gửi và nhận tiền. Trong hướng dẫn này, chúng ta sẽ sử dụng Metamask, một ví ảo trong trình duyệt được sử dụng để quản lý địa chỉ tài khoản Ethereum của bạn. Nếu bạn muốn hiểu rõ hơn về cách thức hoạt động của giao dịch trên Ethereum, hãy tham khảo trang này từ Quỹ Ethereum.

Bạn có thể tải xuống và tạo tài khoản Metamask miễn phí tại đây. Khi bạn đang tạo tài khoản, hoặc nếu bạn đã có tài khoản, hãy đảm bảo chuyển sang “Goerli Test Network” ở góc trên bên phải (để chúng ta không phải giao dịch với tiền thật).

Bước 4: Thêm ether từ Faucet

Để triển khai hợp đồng thông minh của chúng ta lên mạng thử nghiệm, chúng ta sẽ cần một ít Eth giả. Để nhận Eth, bạn có thể truy cập Faucet Goerli và nhập địa chỉ tài khoản Goerli của bạn, sau đó nhấp vào “Send Me Eth”. Có thể mất một chút thời gian để nhận được Eth giả của bạn do lưu lượng truy cập mạng. (Tại thời điểm viết bài này, tôi thấy mất tầm khoảng 30 phút.) Bạn sẽ thấy Eth trong tài khoản Metamask của mình ngay sau đó!

Bước 5: Kiểm tra số dư của bạn

Để kiểm tra lại số dư của chúng ta, hãy thực hiện gửi yêu cầu eth_getBalance bằng công cụ composer của Alchemy (https://composer.alchemyapi.io/?composer_state={“network”%3A0%2C”methodName”%3A”eth_getBalance”%2C”paramValues”%3A[“”%2C”latest”]}). Hàm này sẽ phản hồi về số lượng Eth có trong ví của chúng ta. Xem video này (https://youtu.be/r6sjRxBZJuU) để biết hướng dẫn về cách sử dụng công cụ composer!

Sau khi bạn nhập địa chỉ tài khoản Metamask của mình và nhấp vào “Send Request”, bạn sẽ thấy phản hồi như sau:

LƯU Ý: Kết quả này tính theo wei, không phải eth. Wei là đơn vị nhỏ nhất của ether. Chuyển đổi từ wei sang eth là: 1 eth = 10^18 wei. Vì vậy, nếu chúng ta chuyển đổi 0x2B5E3AF16B1880000 sang hệ thập phân, chúng ta sẽ được 5*10^18, tương đương 5 eth. May quá! Tiền giả của chúng ta vẫn còn nguyên vẹn 🤑.

Bước 6: Khởi động dự án

Đầu tiên, chúng ta cần tạo một thư mục cho dự án của mình. Hãy mở dòng lệnh của bạn và gõ:

Bây giờ chúng ta đã ở trong thư mục dự án, chúng ta sẽ sử dụng npm init để khởi tạo dự án. Nếu bạn chưa cài đặt npm, hãy làm theo các hướng dẫn này (chúng ta cũng cần Node.js, vì vậy hãy tải xuống cả hai!).

Việc bạn trả lời các câu hỏi cài đặt như thế nào không thực sự quan trọng, đây là cách tôi đã thực hiện để bạn tham khảo:

Xác nhận package.json và chúng ta đã sẵn sàng cho bước tiếp theo!

Bước 7: Tải xuống Hardhat

Hardhat là một môi trường phát triển để soạn thảo, triển khai, kiểm tra và sửa lỗi phần mềm Ethereum của bạn. Nó giúp các nhà phát triển khi xây dựng hợp đồng thông minh và dApps cục bộ trước khi triển khai lên chuỗi blockchain thực tế.

Bên trong dự án hello-world của chúng ta, chạy dòng lệnh:

Xem trang này để biết thêm chi tiết về hướng dẫn cài đặt.

Bước 8: Tạo dự án Hardhat

Bên trong thư mục dự án hello-world của chúng ta, chạy:

Sau đó, bạn sẽ thấy một thông báo chào mừng và danh sách các tùy chọn để chọn những gì bạn muốn làm. Chọn “create an empty hardhat.config.js”:

Thao tác này sẽ tạo ra một tệp hardhat.config.js cho chúng ta, nơi chúng ta sẽ cài đặt tất cả các cấu hình cho dự án của mình (ở bước 13).

Bước 9: Thêm các thư mục dự án

Để giữ cho dự án của chúng ta được sắp xếp gọn gàng, chúng ta sẽ tạo hai thư mục mới. Điều hướng đến thư mục gốc của dự án hello-world trong dòng lệnh của bạn và gõ:

contracts/ là nơi chúng ta sẽ giữ tệp mã hợp đồng thông minh hello world của mình.

scripts/ là nơi chúng ta sẽ giữ các tập lệnh để triển khai và tương tác với hợp đồng của mình.

Bước 10: Viết hợp đồng

Chắc bạn đang tự hỏi, khi nào chúng ta mới bắt đầu viết mã?? Tôi sẽ hướng dẫn bạn thực hiện viết mã ngay đây 😄

Mở dự án hello-world trong trình soạn thảo yêu thích của bạn (tôi thì hay dùng VSCode). Hợp đồng thông minh được viết bằng một ngôn ngữ gọi là Solidity, đó là những gì chúng ta sẽ sử dụng để viết hợp đồng thông minh HelloWorld.sol của mình.

  1. Tìm thư mục “contracts” và tạo một tệp mới có tên HelloWorld.sol.
  2. Dưới đây là một mẫu hợp đồng thông minh Hello World từ Quỹ Ethereum mà chúng ta sẽ sử dụng cho hướng dẫn này. Sao chép và dán nội dung bên dưới vào tệp HelloWorld.sol của bạn, và nhớ đọc các nhận xét để hiểu hợp đồng này làm gì:

Đây là một hợp đồng thông minh cực kỳ đơn giản, lưu trữ một thông báo khi tạo và có thể được cập nhật bằng cách gọi hàm update.

Bước 11: Kết nối Metamask & Alchemy với dự án của bạn

Chúng ta đã tạo ví Metamask, tài khoản Alchemy và viết hợp đồng thông minh của mình, bây giờ là lúc kết nối ba thứ này lại.

Mỗi giao dịch được gửi từ ví ảo của bạn đều yêu cầu chữ ký bằng khóa riêng duy nhất của bạn. Để cung cấp quyền này cho chương trình của chúng ta, chúng ta có thể lưu trữ an toàn khóa riêng (và khóa API Alchemy) trong một tệp môi trường.

Để tìm hiểu thêm về việc gửi giao dịch, hãy xem hướng dẫn này về việc gửi giao dịch bằng web3.

Đầu tiên, cài đặt gói dotenv trong thư mục dự án của bạn:

Đây là một hợp đồng thông minh cực kỳ đơn giản, lưu trữ một thông báo khi tạo và có thể được cập nhật bằng cách gọi hàm update.

Tệp môi trường của bạn phải được đặt tên là .env nếu không nó sẽ không được nhận dạng là tệp môi trường. Không đặt tên nó là process.env hoặc .env-custom hoặc bất kỳ tên nào khác.

Làm theo hướng dẫn này để phát hành khóa riêng của bạn.

Xem hình ảnh bên dưới để lấy URL API HTTP Alchemy.

Tệp .env của bạn sẽ trông như thế này:

Để thực sự kết nối chúng với mã của chúng ta, chúng ta sẽ tham chiếu các biến này trong tệp hardhat.config.js ở bước 13.

Bước 12: Cài đặt Ethers.js

Ethers.js là một thư viện giúp giao tiếp và gửi yêu cầu đến Ethereum dễ dàng hơn bằng cách gói các phương thức JSON-RPC tiêu chuẩn với các phương thức thân thiện với người dùng hơn.

Hardhat giúp tích hợp các Plugin cực kỳ dễ dàng để có thêm công cụ và chức năng mở rộng. Chúng ta sẽ tận dụng plugin Ethers để triển khai hợp đồng (Ethers.js có một số phương thức triển khai hợp đồng cực kỳ rõ ràng).

Trong thư mục dự án của bạn, hãy nhập:

Chúng ta cũng sẽ cần có ethers trong hardhat.config.js ở bước tiếp theo.

Bước 13: Cập nhật hardhat.config.js

Chúng ta đã thêm các mã liên quan và plugin cho đến hiện tại, bây giờ chúng ta cần cập nhật hardhat.config.js để dự án của chúng ta hiểu tất cả về chúng.

Cập nhật hardhat.config.js của bạn để trông như thế này:

Bước 14: Soạn thảo hợp đồng của chúng ta

Để đảm bảo mọi thứ hoạt động tốt đến thời điểm này, hãy viết hợp đồng của chúng ta. Nhiệm vụ soạn thảo hợp đồng là một trong những nhiệm vụ tích hợp sẵn của Hardhat.

Từ dòng lệnh, chạy:

Bạn có thể nhận được cảnh báo về việc định danh giấy phép SPDX không được cung cấp trong tệp nguồn, nhưng không cần lo lắng về điều đó — hy vọng mọi thứ khác đều ổn!

Bước 15: Viết tập lệnh triển khai

Bây giờ hợp đồng của chúng ta đã được viết và tệp cấu hình của chúng ta đã sẵn sàng, đã đến lúc viết tập lệnh triển khai hợp đồng của chúng ta.

Tìm đến thư mục /scripts và tạo một tệp mới có tên deploy.js, thêm nội dung sau vào đó:

Hardhat làm rất tốt việc giải thích từng dòng mã này trong hướng dẫn Hợp đồng của họ, tôi đã áp dụng các giải thích của họ ở đây.

ContractFactory trong ethers.js là một khái niệm được sử dụng để triển khai các hợp đồng thông minh mới, vì vậy HelloWorld ở đây là một nhà máy cho các phiên bản của hợp đồng hello world của chúng ta. Khi sử dụng plugin hardhat-ethers, ContractFactory và Contract, các phiên bản được kết nối với người ký đầu tiên (chủ sở hữu) theo mặc định.

Gọi deploy() trên ContractFactory sẽ bắt đầu quá trình triển khai và trả về một Promise phân giải thành một đối tượng Contract. Đây là đối tượng có một phương thức cho mỗi hàm hợp đồng thông minh của chúng ta.

Bước 16: Triển khai hợp đồng của chúng ta

Cuối cùng chúng ta đã sẵn sàng để triển khai hợp đồng thông minh của mình! Điều hướng đến dòng lệnh và chạy:

Sau đó, bạn sẽ thấy một dòng tương tự như:

Hãy sao chép địa chỉ này để lưu nó ở đâu đó, vì chúng ta sẽ sử dụng địa chỉ này cho các hướng dẫn sau này, vì vậy bạn không nên quên nó.

Nếu chúng ta truy cập Goerli etherscan và tìm kiếm địa chỉ hợp đồng của chúng ta, chúng ta sẽ có thể thấy rằng nó đã được triển khai thành công. Giao dịch sẽ trông giống như thế này:

Địa chỉ “From” (Từ) phải khớp với địa chỉ tài khoản Metamask của bạn và địa chỉ “To” (Đến) sẽ ghi “Contract Creation” (Tạo hợp đồng), nhưng nếu chúng ta nhấp vào giao dịch, chúng ta sẽ thấy địa chỉ hợp đồng của mình trong trường “To”:

Chúc mừng! Bạn vừa triển khai một hợp đồng thông minh lên chuỗi Ethereum 🎉

Để hiểu những gì đang diễn ra ở mức độ sâu hơn, hãy truy cập tab “Explorer” (Trình khám phá) trong bảng điều khiển Alchemy. Nếu bạn có nhiều ứng dụng Alchemy, hãy đảm bảo lọc theo ứng dụng và chọn “Hello World”.

Tại đây, bạn sẽ thấy một số lệnh gọi JSON-RPC mà Hardhat/Ethers đã thực hiện bên dưới cho chúng ta khi chúng ta gọi hàm deploy(). Hai lệnh quan trọng cần lưu ý ở đây là eth_sendRawTransaction, là yêu cầu thực sự ghi hợp đồng của chúng ta lên chuỗi Ropsten, và eth_getTransactionByHash, là yêu cầu đọc thông tin về giao dịch của chúng ta dựa trên hash (một mẫu điển hình khi gửi giao dịch).

Rất vui được đồng hành cùng bạn và chứng kiến bạn đã viết được một hợp đồng thông minh chỉnh chu đến vậy. Tôi khuyến khích bạn tiếp tục học hỏi, thực hành và thử nghiệm với các dự án thực tế. Đừng ngần ngại khám phá những công nghệ mới, tham gia vào các cộng đồng blockchain và chia sẻ kiến thức của bạn với những người khác.

0 Bình luận

Đăng nhập để thảo luận

Chuyên mục Hướng dẫn

Tổng hợp các bài viết hướng dẫn, nghiên cứu và phân tích chi tiết về kỹ thuật, các xu hướng công nghệ mới nhất dành cho lập trình viên.

Đăng ký nhận bản tin của chúng tôi

Hãy trở thành người nhận được các nội dung hữu ích của CyStack sớm nhất

Xem chính sách của chúng tôi Chính sách bảo mật.