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

  1. 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.

  2. Tham khảo Ganache | Overview - Truffle Suite

  3. Tham khảo Deploy a contract using Truffle - Infura Docs