Trong loạt bài tự học về Blockchain Ethereum (phần 3), Humichau.com hướng dẫn người học xây dựng private ethereum blockchain với 3 nodes dựa trên nền tảng Ethereum. Các bước cài đặt bao gồm:
- Cài đặt môi trường cần thiết
- Cài đặt Private Ethereum Network (Geth)
- Tạo kết nối các node với nhau
- Kiểm tra kết quả cài đặt Geth
- Cài đặt môi trường cần thiết
Để xây dựng private Ethereum blockchain, chúng ta sử dụng Ubuntu 18.04. Sau đó cài đặt các package cần thiết theo cái câu lệnh bên dưới
$ sudo apt-get update
$ sudo apt-get install build-essential
$ sudo apt-get upgrade
2. Cài đặt Private Ethereum Network (GETH)
2.1. Cài đặt Geth
Có 2 cách cài đặt Geth: cài latest version và cài version được chỉ định
Sử dụng câu lệnh bên dưới để cài latest version Geth
$ sudo add-apt-repository -y ppa:ethereum/ethereum
$ sudo apt-get update
$ sudo apt-get install ethereum
Trường hợp chỉ định version, ở đây lấy ví dụ cài Geth version 1.8.27. Trước tiên cần download Geth version 1.8.27 về máy sau đó cài đặt
2.2 Tạo mới account
Mỗi node chúng ta sẽ tạo 1 account để sử dụng
$ geth –datadir=./chaindata/ account new
Sau khi chạy câu lện trên Geth sẽ tạo thư mục ” chaindata” dùng để lưu trữ data của Blockchain Ethereum. Lưu ý sau khi tạo account save lại address và private key để sử dụng trong lúc khởi tạo Private Ethereum Network. Nó có dạng:
Public address of the key: 0xa352f2B91073472DF757248F9F06d8716d8b5123
Path of the secret key file: chaindata/keystore/UTC–2019-10-10T04-34-53.009776823Z–a352f2b91073472df757248f9f06d8716d8b5123
2.3 Tạo file genesis.json
File genesis.json là file bắt buộc phải có khi khởi tạo hệ thống Private Ethereum. File này dùng để cấu hình các thông số cũng như cấp phát số lượng Etherum cho Master account. Sau khi tạo file genesis.json, copy file này để vào tất cả các node. Chú ý tất các các node phải có nội dung file json giống nhau. Có 2 cách tạo file genesis.json.
a. Cách 1: Copy nội dung file genesis và cấu hình lại các thông số
$vi genesis.json
{
"coinbase" : "0x0000000000000000000000000000000000000001",
"difficulty" : "0x1",
"extraData" : "",
"gasLimit" : "0x47b760",
"nonce" : "0x0000000000000042",
"mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp" : "0x00",
"alloc": {
//Cấp phát Ethereum cho các accounts
"6cdbBD2e4DcbC0020b5D0Bb9B3500A001c14B078": { "balance": "0x1337000000000000000000" },// Account of Peer 0
"BdB8a18307931D887AA1F5609E6daD54c6004530": { "balance": "0x1337000000000000000000" }, //Account of Peer 1
"93AB0c01550DD1d505301dCD4B87932244608399": { "balance": "0x1337000000000000000000" }, //Account of Peer 2
//These accounts for re-funding
"4f1809cf76a8946d615cb546271cae3ea36328ed": {
"balance": "0x200000000000000000000000000000000000000000000000000000000000000"
},
"7d4684e8f1827832f13124b13874b00890a8a83f": {
"balance": "0x200000000000000000000000000000000000000000000000000000000000000"
},
"6206d535d4af9bd3327167027dbb2fffa070fc68": {
"balance": "0x200000000000000000000000000000000000000000000000000000000000000"
},
"362bfe247396ecc09d30091e3c5ca2d5f527bd06": {
"balance": "0x200000000000000000000000000000000000000000000000000000000000000"
},
"ca1c753ed477ac905f4ec6c9851bc81f0fb41512": {
"balance": "0x200000000000000000000000000000000000000000000000000000000000000"
},
"61cfb9bc71d6f2747598db3f767b4b8967f029ab": {
"balance": "0x200000000000000000000000000000000000000000000000000000000000000"
}
},
"config": {
"chainId": 22,
"homesteadBlock": 0,
"eip155Block": 0,// Ethereum Improvment Protocol
"eip158Block": 0,
"eip150Block": 0,
"byzantiumBlock": 0,
"constantinopleBlock": 0,
"petersburgBlock": 0
}
}
b. Cách 2: Sử dụng puppeth tạo file genesis.json
Cài đặt puppeth
2.4 Khởi tạo Private Ethereum Network
$ geth –datadir=./chaindata/ init ./genesis.json
$geth –identity “process-node” –datadir=./chaindata/ –mine –minerthreads=1 –allow-insecure-unlock –rpc –networkid 22 –rpcaddr “127.0.0.1” –rpcport 8545 –rpcapi=”db,eth,net,web3,personal” –rpccorsdomain “*”
Lưu ý: Private Ethereum sử dụng thuật toán đồng thuận PoA, do đó khi muốn node nào không mine (đào), remove thuộc tính –mine –miner threads=1 khi run Geth. Sau khi run Geth sẽ tạo ra file geth.ipc
Mặc định các account trong Geth sẽ được khóa lại (lock account), để unlock account sử dụng command
$ geth attach ~/chaindata/geth.ipc
$ personal.unlockAccount(eth.accounts[0])
3. Tạo kết nối các nodes với nhau
Có thể kết nối trực tiếp các nodes với nhau hoặc sử dụng BootNode làm trung gian kết nối. Trong bài viết này hướng dẫn cách kết nối trực tiếp
Truy cập vào Geth
$ geth attach ~/chaindata/geth.ipc
Lấy thông tin enode
Kết nối các node sử dụng lệnh add peer
4. Kiểm tra kết quả cài đặt GETH
4.1 Kiểm tra sử dụng web3
$geth attach ~/chaindata/geth.ipc
>web3.fromWei(eth.getBalance(eth.coinbase), “ether”)
4.2 Kiểm tra sử dụng Postman
Kết luận
Trong bài viết này Humichau.com đã hướng dẫn xây dựng Private Ethereum Network với 3 nodes. Nếu muốn có nhiều node hơn các bạn có thể thêm vào trực tiếp bằng cách add thêm peers. Trong bài viết tiếp theo Biastek sẽ hướng dẫn cài đặt Blockchain Monitoring dùng để theo theo hệ thống Blockchain Ethereum trực quan hơn.
Blockchain Ethereum – Ví dụ về hàm Delegatecall trong solidity
Blockchain Ethereum (P4) – Kết Nối Các Node Sử Dụng Bootnode
Blockchain Ethereum (P3) – Cài Đặt Private Blockchain trên nền tảng Ethereum
Install web3 and nodejs
Sử dụng Virtual Box
Đọc sách 2021