Trước khi đi deploy lên mạng Ethereum, ta cần phải cấu hình một số thứ: network (built-in network sử dụng Truffle Develop local network sử dụng Ganache, testnet sử dụng Sepolia), provider (sử dụng Infura) và HD Wallet.
Các cấu hình này sẽ được thực hiện ở trong file truffle-config.js
.
Truffle Develop
Chúng ta có thể khởi chạy một built-in network1 của Truffle có tên là Truffle Develop như sau:
truffle develop
Network này mặc định sẽ chạy ở địa chỉ http://127.0.0.1:9545/
.
Ta cấu hình object networks
được export ở trong file truffle-config.js
như sau:
module.exports = {
networks: {
development: {
host: "127.0.0.1",
port: 9545,
network_id: "*",
}
}
}
Chú ý điền đúng giá trị host và port của Truffle Develop.
Deploy lên local network này như sau:
truffle deploy
Tip
Có thể sử dụng JordyKingz/hardhat-block-explorer làm block explorer cho local network.
Ganache
Là một local Ethereum blockchain network dùng trong quá trình phát triển và kiểm thử dApp2.
Ganache thường chạy ở http://127.0.0.1:7545
.
Cấu hình tương tự với Truffle Develop:
module.exports = {
networks: {
development: {
host: "127.0.0.1",
port: 7545,
network_id: "*",
}
}
}
Chạy lệnh sau để deploy:
truffle deploy
Wallet Provider and Testnet Provider
Truffle’s HD Wallet Provider
Để thực hiện ký các giao dịch (là một tính năng mà Infura không hỗ trợ), ta cần cài đặt package truffle-hdwallet-provider
:
yarn add @truffle/hdwallet-provider
Cấu hình sử dụng package như sau:
const HDWalletProvider = require("@truffle/hdwallet-provider");
module.exports = {
// ...
};
Infura Provider
Ta cần tạo tài khoản và một API key của Sepolia testnet ở trên Infura. Endpoint có chứa API key sẽ có dạng như sau:
https://sepolia.infura.io/v3/<Your-API-Key>
Endpoint này cùng với recovery phrase của ví MetaMask sẽ được dùng để cấu hình testnet. Ta đặt chúng ở trong file .env
và cần phải ignore ở trong .gitignore
. File .env
có thể có dạng như sau:
INFURA_API_KEY = "https://sepolia.infura.io/v3/<Your-API-Key>"
MNEMONIC = "<Your-MetaMask-Secret-Recovery-Phrase>"
Package dotenv
sẽ được sử dụng để load lên các giá trị này:
require('dotenv').config();
const { MNEMONIC, INFURA_API_KEY } = process.env;
const HDWalletProvider = require("@truffle/hdwallet-provider");
Cấu hình Sepolia testnet3 ở trong object networks
như sau:
sepolia: {
provider: () => new HDWalletProvider(MNEMONIC, INFURA_API_KEY),
network_id: '11155111',
gas: 4465030
}
Sau khi cấu hình xong thì thực hiện deploy bằng câu lệnh sau:
truffle deploy --network sepolia
Footnotes
-
Xem thêm cách kết nối built-in network với ví MetaMask, tạo tài khoản và thực hiện chuyển tiền: Connecting Metamask with a Local Hardhat Network | by Aw Kai Shin | Medium. ↩
-
Tham khảo Ganache | Overview - Truffle Suite ↩