Skip to main content

2. Konfigurasi Hardhat untuk TugWar Game di Monad Testnet

Setelah mempersiapkan lingkungan pengembangan, langkah selanjutnya adalah mengkonfigurasi Hardhat untuk bekerja dengan jaringan Monad Testnet dan menyiapkan pengelolaan private key yang aman untuk deployment TugWar Game. Konfigurasi yang benar sangat penting untuk memastikan keberhasilan deployment dan interaksi dengan blockchain game.

Daftar Isi

  1. Konfigurasi File hardhat.config.ts
  2. Menyiapkan Private Key Secara Aman
  3. Menginstal Ekstensi VS Code
  4. Menguji Konfigurasi
  5. Menyiapkan Package.json Scripts
  6. Pemecahan Masalah

1. Konfigurasi File hardhat.config.ts

File hardhat.config.ts adalah pusat konfigurasi untuk proyek Hardhat. Mari kita modifikasi file untuk mengatur Hardhat agar bekerja dengan Monad Testnet dan mengoptimalkan untuk game development.

Buka file hardhat.config.ts di Visual Studio Code dan ganti isinya dengan konfigurasi berikut:

import { HardhatUserConfig } from "hardhat/config";
import "@nomicfoundation/hardhat-toolbox";
import "@nomicfoundation/hardhat-verify";
import { vars } from "hardhat/config";
import "hardhat-gas-reporter";
import "solidity-coverage";

const config: HardhatUserConfig = {
solidity: {
version: "0.8.28",
settings: {
metadata: {
bytecodeHash: "none", // ⬅ prevents IPFS-hash mismatch
useLiteralContent: true, // ⬅ embeds the full source in metadata
},
optimizer: {
enabled: true,
runs: 200
}
}
},
sourcify: {
enabled: true,
apiUrl: "https://sourcify-api-monad.blockvision.org",
browserUrl: "https://testnet.monadexplorer.com",
},
networks: {
// Konfigurasi untuk localhost development
hardhat: {
chainId: 31337,
},
// Konfigurasi untuk Monad Testnet
monadTestnet: {
url: "https://testnet-rpc.monad.xyz/",
chainId: 10143,
accounts: vars.has("PRIVATE_KEY") ? [`0x${vars.get("PRIVATE_KEY")}`] : [],
gasPrice: "auto",
}
},
etherscan: {
enabled: false,
},
gasReporter: {
enabled: true,
currency: 'USD',
outputFile: "gas-report.txt",
noColors: true,
},
paths: {
sources: "./contracts",
tests: "./test",
cache: "./cache",
artifacts: "./artifacts"
}
};

export default config;

Penjelasan Konfigurasi untuk Game Development

Mari kita pahami setiap bagian dari konfigurasi yang dioptimalkan untuk TugWar Game:

Import dan Plugin

import { HardhatUserConfig } from "hardhat/config";
import "@nomicfoundation/hardhat-toolbox";
import "@nomicfoundation/hardhat-verify";
import { vars } from "hardhat/config";
import "hardhat-gas-reporter";
import "solidity-coverage";

Plugin ini memperluas fungsionalitas Hardhat:

  • hardhat-toolbox: Paket plugin esensial (ethers, waffle, dll)
  • hardhat-verify: Untuk verifikasi kontrak di explorer
  • vars: Untuk manajemen variabel terenkripsi
  • hardhat-gas-reporter: Untuk melaporkan biaya gas (penting untuk game optimization)
  • solidity-coverage: Untuk laporan cakupan kode test

Konfigurasi Solidity untuk Game

solidity: {
version: "0.8.26",
settings: {
metadata: {
bytecodeHash: "none",
useLiteralContent: true,
},
optimizer: {
enabled: true,
runs: 200,
details: {
yul: true,
yulDetails: {
stackAllocation: true,
optimizerSteps: "dhfoDgvulfnTUtnIf"
}
}
},
viaIR: true
}
}

2. Menyiapkan Private Key Secara Aman dengan Hardhat-Vars

Hardhat-vars menyediakan cara yang aman untuk menyimpan informasi sensitif seperti private key. Tidak seperti file .env yang menyimpan data dalam teks biasa, hardhat-vars mengenkripsi data sensitive.

Mengatur Private Key

Jalankan perintah berikut untuk mengatur private key Anda:

npx hardhat vars set PRIVATE_KEY

Anda akan diminta untuk memasukkan private key. Masukkan private key tanpa awalan 0x:

? Enter value: ········
✓ Value set successfully

Mengatur Additional Variables untuk Game

Untuk TugWar Game, kita juga dapat menyiapkan variabel tambahan:

# Set private key untuk owner game
npx hardhat vars set GAME_OWNER_KEY

# Set API key untuk monitoring (opsional)
npx hardhat vars set MONITORING_API_KEY

# Set gas price limit untuk deployment
npx hardhat vars set MAX_GAS_PRICE

Verifikasi Private Key

Untuk memastikan private key telah tersimpan dengan benar:

npx hardhat vars get PRIVATE_KEY

Output akan menampilkan beberapa karakter pertama dari private key:

Value: 123a...
Perhatian Keamanan

Private key adalah informasi yang sangat sensitif yang memberikan kendali penuh atas alamat Ethereum Anda.

  • Jangan pernah membagikan private key Anda
  • Pastikan menggunakan hardhat-vars atau metode aman lainnya
  • Jangan menggunakan akun dengan dana nyata yang besar untuk development
  • Gunakan akun terpisah khusus untuk testing game

Keunggulan Hardhat-Vars untuk Game Development

  1. Enkripsi: Data disimpan dalam bentuk terenkripsi
  2. Multi-Environment: Mudah switch antara testnet dan mainnet
  3. Team Collaboration: Setiap developer bisa punya key sendiri
  4. CI/CD Integration: Aman untuk automated deployment

3. Menginstal Ekstensi VS Code yang Berguna

Visual Studio Code dapat ditingkatkan dengan ekstensi untuk memudahkan pengembangan game smart contract. Buka tab Extensions di VS Code (Ctrl+Shift+X atau Cmd+Shift+X) dan instal ekstensi berikut:

Ekstensi Utama untuk Game Development

EkstensiDeskripsi
Solidity by Juan BlancoSyntax highlighting dan validasi untuk Solidity
Hardhat SolidityIntegrasi dengan Hardhat ecosystem
Error LensMenampilkan error/warning langsung di editor
Solidity Visual AuditorSecurity highlighting untuk smart contracts

Ekstensi Tambahan (Opsional)

EkstensiDeskripsi
Prettier - Code formatterMerapikan kode dengan format konsisten
Git GraphVisualisasi Git history
ESLintLinter untuk JavaScript/TypeScript
Thunder ClientREST API testing untuk backend integration
Markdown All in OneBetter markdown editing untuk dokumentasi

Konfigurasi VS Code untuk Game Development

Buat file .vscode/settings.json:

{
"solidity.defaultCompiler": "local",
"solidity.compileUsingRemoteVersion": "0.8.28",
"solidity.enabledAsYouTypeCompilationErrorCheck": true,
"solidity.validationDelay": 1500,
"files.associations": {
"*.sol": "solidity"
},
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.fixAll.eslint": true
},
"typescript.preferences.importModuleSpecifier": "relative"
}

4. Menguji Konfigurasi

Untuk memastikan konfigurasi berjalan dengan baik untuk game development:

Test Kompilasi

npx hardhat compile

Test Local Network

# Start local hardhat network
npx hardhat node

# Di terminal terpisah, test deployment
npx hardhat run scripts/deploy.ts --network hardhat

Test Connection ke Monad Testnet

# Test connection tanpa deployment
npx hardhat console --network monadTestnet

Di console, jalankan:

// Get network info
await ethers.provider.getNetwork()

// Check balance
const [signer] = await ethers.getSigners()
await ethers.provider.getBalance(signer.address)

5. Menyiapkan Package.json Scripts

Tambahkan script yang berguna di package.json untuk mempermudah game development:

{
"name": "monad-tugwar-game",
"version": "1.0.0",
"main": "index.js",
"scripts": {
"compile": "npx hardhat compile",
"test": "npx hardhat test",
"test:coverage": "npx hardhat coverage",
"test:gas": "REPORT_GAS=true npx hardhat test",
"deploy:local": "npx hardhat run scripts/deploy.ts --network hardhat",
"deploy:testnet": "npx hardhat run scripts/deploy.ts --network monadTestnet",
"verify:testnet": "npx hardhat run scripts/verify.ts --network monadTestnet",
"node": "npx hardhat node",
"console:local": "npx hardhat console --network hardhat",
"console:testnet": "npx hardhat console --network monadTestnet",
"clean": "npx hardhat clean",
"lint": "eslint . --ext .ts,.js",
"lint:fix": "eslint . --ext .ts,.js --fix"
},
"keywords": ["tugwar", "game", "blockchain", "monad", "hardhat"],
"author": "",
"license": "MIT",
"description": "TugWar Game Smart Contract on Monad Testnet",
"devDependencies": {
"@nomicfoundation/hardhat-toolbox": "^5.0.0",
"@nomicfoundation/hardhat-verify": "^2.0.13",
"@openzeppelin/contracts": "^5.0.0",
"hardhat": "^2.23.0",
"hardhat-gas-reporter": "^2.0.0",
"solidity-coverage": "^0.8.0"
}
}

Penggunaan Scripts

# Game development workflow
npm run compile # Kompilasi game contracts
npm run test # Jalankan game tests
npm run test:gas # Analisis gas usage untuk game
npm run deploy:local # Deploy ke local network
npm run deploy:testnet # Deploy ke Monad Testnet

# Game management
npm run game:start # Start new game
npm run game:stats # Get game statistics

# Development utilities
npm run clean # Clean artifacts
npm run lint # Check code quality
npm run console:testnet # Interactive console

Pemecahan Masalah

Masalah Koneksi RPC

Jika mengalami masalah koneksi ke Monad Testnet:

  1. Periksa URL RPC: Pastikan https://testnet-rpc.monad.xyz/ masih aktif
  2. Test koneksi manual:
curl -X POST -H "Content-Type: application/json" \
--data '{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":1}' \
https://testnet-rpc.monad.xyz/
  1. Cek status network: Verifikasi Monad Testnet status
  2. Alternative RPC: Coba RPC endpoint lain jika tersedia

Masalah Private Key

Jika terjadi error terkait private key:

  1. Reset private key:
npx hardhat vars delete PRIVATE_KEY
npx hardhat vars set PRIVATE_KEY
  1. Verifikasi format: Pastikan key tanpa prefix 0x

  2. Check balance: Pastikan akun memiliki MON untuk gas

npx hardhat console --network monadTestnet
# const [signer] = await ethers.getSigners()
# await ethers.provider.getBalance(signer.address)

Masalah Kompilasi Game Contract

Jika terjadi error kompilasi:

  1. Clear cache:
npm run clean
rm -rf node_modules
npm install
npm run compile
  1. Check Solidity version: Pastikan versi di config match dengan contract

  2. Gas limit issues: Jika contract terlalu besar:

// Di hardhat.config.ts
networks: {
hardhat: {
allowUnlimitedContractSize: true
}
}

Masalah Gas Estimation

Untuk game contracts yang kompleks:

  1. Increase gas limit:
// Di deployment script
const tugwar = await TugWar.deploy({
gasLimit: 5000000
});
  1. Use gas estimation:
const gasEstimate = await TugWar.estimateGas.deploy();
console.log("Estimated gas:", gasEstimate.toString());

Kesimpulan

Selamat! Anda telah berhasil:

  1. ✅ Mengkonfigurasi Hardhat untuk berinteraksi dengan Monad Testnet
  2. ✅ Menyiapkan pengelolaan private key yang aman dengan hardhat-vars
  3. ✅ Menginstal ekstensi VS Code yang berguna untuk game development
  4. ✅ Menambahkan script npm yang memudahkan game development
  5. ✅ Memahami cara troubleshooting masalah umum dalam game development
  6. ✅ Mengoptimalkan konfigurasi untuk TugWar Game development

Pengaturan yang benar dan aman merupakan fondasi penting untuk pengembangan game smart contract yang profesional. Konfigurasi yang telah kita buat dioptimalkan khusus untuk game development dengan:

  • Gas optimization untuk transaksi game yang efisien
  • Multiple accounts untuk testing multiplayer scenarios
  • Advanced compiler settings untuk contract optimization
  • Comprehensive testing setup untuk game mechanics
  • Security best practices untuk production deployment

Pada bagian selanjutnya, kita akan mulai membangun smart contract TugWar Game dengan semua fitur advanced yang telah direncanakan.