Blockchain Ethereum (P3) – Cài Đặt Private Blockchain trên nền tảng Ethereum

Private Ethereum Network

Trong loạt bài tự học về Blockchain Ethereum (phần 3), Biastek.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
  1. 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

Kết quả cài đặt Geth 1.8.27

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

Tạo mới account cho 1 node Geth

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])

Màn hình hiển thị sau khi run Geth

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

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 Biastek đã 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.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *