Cấu Hình Và Triển Khai Mạng Riêng Ethereum Sử Dụng Giao Thức Geth

Để thực hiện các thử nghiệm phát triển trên nền tảng blockchain Ethereum mà không cần phụ thuộc vào mạng Mainnet, giải pháp tối ưu là thiết lập một mạng riêng tư (Private Network). Công cụ chuẩn để làm việc này là Geth (Go-Ethereum), cung cấp khả năng xây dựng hồ sơ, quản lý tài khoản và xử lý giao dịch hoàn toàn trong môi trường cục bộ.

Yêu cầu môi trường hệ thống

Bài viết giả định bạn đang sử dụng hệ điều hành macOS phiên bản 10.10 trở lên hoặc Ubuntu tương tự. Các bước cài đặt sẽ tập trung vào việc thiết lập công cụ dòng lệnh để quản lý toàn bộ quy trình vận hành.

Kỹ thuật cài đặt Geth

Có hai phương pháp phổ biến để đưa công cụ vào môi trường máy chủ:

Phương pháp 1: Cài đặt qua Package Manager (Homebrew)

brew tap ethereum/ethereum
brew install ethereum

Nếu cần các tính năng từ nhánh phát triển mới nhất, hãy sử dụng cờ --devel.

Phương pháp 2: Biên dịch từ mã nguồn gốc

Đảm bảo bạn đã cài đặt các gói phụ thuộc như GMP và Go trước khi tiến hành:

brew install gmp go

Tiếp theo, sao chép mã nguồn về và biên dịch:

git clone https://github.com/ethereum/go-ethereum
cd go-ethereum
make geth

Sau khi hoàn tất, xác nhận bằng cách gõ geth --help.

Xây dựng cấu hình mạng riêng

Hãy tạo một thư mục làm việc và bên trong đó định nghĩa tệp khởi tạo (Genesis Block). Đây là cấu hình nền tảng cho chuỗi khối của bạn.

1. Tạo thư mục dự án

mkdir eth-private-node
cd eth-private-node

2. Định nghĩa Genesis

Tạo tệp genesis.json với nội dung sau. Lưu ý rằng chúng tôi đã tùy chỉnh tham số để phù hợp cho môi trường thử nghiệm (ví dụ: ID mạng, độ khó):

{
  "config": {
    "chainId": 1337,
    "homesteadBlock": 0,
    "eip155Block": 0,
    "eip158Block": 0
  },
  "coinbase": "0x0000000000000000000000000000000000000000",
  "difficulty": "0x40000",
  "extraData": "",
  "gasLimit": "0xffffffff",
  "nonce": "0x0000000000000042",
  "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "timestamp": "0x00",
  "alloc": {
    "0x0000000000000000000000000000000000000000": {
      "balance": "100000000000000000000000"
    }
  }
}

Tham số alloc ở đây giúp cấp phát sẵn lượng Ether ảo cho địa chỉ đặc biệt ngay khi bắt đầu, tiện lợi cho việc kiểm tra nạp/xuất.

3. Khởi tạo dữ liệu chuỗi

Chạy lệnh dưới đây để tạo cơ sở dữ liệu địa phương dựa trên file cấu hình:

geth --datadir ./my-chain-data init genesis.json

Dữ liệu sẽ được lưu trong thư mục ./my-chain-data.

4. Kích hoạt Node

Bắt đầu quá trình chạy node. Để kết nối từ xa dễ dàng hơn, ta bật chế độ RPC và mở cổng giao tiếp:

geth --datadir ./my-chain-data \
  --networkid 1337 \
  --rpc \
  --rpccorsdomain "*" \
  --rpcaddr 0.0.0.0 \
  --rpcport 8545 \
  console

Mặc định console sẽ mở cửa sổ tương tác JavaScript. Trong môi trường production, bạn có thể bỏ dấu nhắc console để chạy daemon.

Vận hành tương tác trên Consloe

Một khi node đã online, bạn có thể sử dụng giao diện console để thực thi các thao tác cơ bản:

Tạo ví và quản lý tài sản

Trước hết, kiểm tra danh sách tài khoản hiện có:

eth.accounts

Để tạo một ví mới, gọi hàm personal.newAccount(). Hệ thống sẽ yêu cầu bạn nhập mật khẩu bảo vệ khóa riêng tư (Private Key) hai lần.

Lưu ý: Khóa riêng tư thực tế nằm trong thư mục keystore bên trong đường dẫn dữ liệu đã chỉ định (my-chain-data).

Kích hoạt đào kiếm (Mining)

Tài khoản mới lúc chưa có tiền. Bạn cần kích hoạt bộ máy đào tạo khối:

miner.start()
admin.sleepBlocks(1)
miner.stop()

Lệnh miner.start() bắt đầu sử dụng CPU để giải bài toán chứng minh công việc. sleepBlocks(1) tạm dừng quá trình tạo thêm 1 khối (tương đương khoảng 15 giây trên mạng thử nghiệm) để đảm bảo giao dịch được bao gồm. Nếu đây là lần chạy đầu tiên, hãy chờ thông báo DAG đạt 100%.

Thực hiện chuyển tiền

Gửi quỹ từ tài khoản này sang tài khoản khác:

eth.sendTransaction({from: eth.accounts[0], to: eth.accounts[1], value: web3.toWei(10, "ether")})

Trong trường hợp gặp lỗi thông báo tài khoản bị khóa, cần giải phong mã trước khi gửi:

personal.unlockAccount(eth.accounts[0])

Nhập mật khẩu bạn đã đặt khi tạo ví. Sau đó thử lại lệnh gửi. Nếu trạng thái vẫn chưa thay đổi ngay lập tức, hãy chạy lệnh đào khối (như mục trước) để cập nhật trạng thái giao dịch vào chuỗi.

Thẻ: Ethereum Go-Ethereum private-blockchain geth blockchain-development

Đăng vào ngày 12 tháng 7 lúc 22:19