Dưới đây là hướng dẫn về cách phát triển blockchain riêng bằng cách sử dụng Ethereum.
Ethereum Blockchain Network bao gồm nhiều EVM (máy ảo Ethereum) hoặc các Node được kết nối với nhau để tạo nên mạng lưới. Mỗi Node luôn có bản sao của toàn bộ Blockchain để có thể hoàn thành mining cho Block tiếp theo. Mỗi Node đều có quyền add new block vào trong Blockchain và phải gửi đến toàn bộ Node khác để tiến hành cập nhật (gửi bậy thì bị reject nhé).
Máy tính nào muốn chạy Node thì phải tải xuống toàn bộ history của Blockchain Ethereum và install thêm Ethereum tool để update liên tục sau đó. Mục đích là để connect được với Ethereum và tương tác khi cần. Geth là một trong những công cụ chính mà anh em cần sử dụng.
Giới thiệu về Geth
Geth là một bản implementation của Ethereum’ Go – giao diện command line (CLI) connect với Ethereum network. Nó như một liên kết giữa máy tính bạn (hardware) với toàn bộ Nodes khác trên mạng Ethereum. Geth program sẽ giúp phát hiện xem Node khác có mined được block mới không? và chuyển nó tới GPU hoặc CPU để cập nhật lại tình hình blockchain trên máy anh em. Geth nó còn cho phép:
- Mine Ether (native token của Ethereum network).
- Chuyển tiền giữa các địa chỉ ví.
- Create Smart contract và gửi giao dịch.
- Kiểm tra block history và một số tính năng bổ trợ khác sẽ được mình chia sẻ thêm bên dưới.
Cài đặt Geth
https://geth.ethereum.org/downloads
Anh em tải xuống và cài đặt theo đường dẫn bên dưới, nó hỗ trợ cho 3 hệ điều hành thông dụng Linux, Mac Os và Windows.
Trên hệ điều hành Mac OS
- Cài cũng dễ thôi bằng cách dùng Geth Homebrew, nếu bạn đã cài sẵn Homebrew thì dùng lệnh này để kiểm tra phiên bản hiện tại, nhớ là phải luôn dùng bản Geth mới nhất vì mỗi bản cập nhật đều được fix bug đầy đủ, cải tiến nhiều so với phiên bản trước,.. mức độ ổn định cao.
Nếu sau khi command mà lệnh không trả về phiên bản của Homebrew thì bạn có thể cài đặt nó tại đây.
- Sau khi đã kiểm tra phiên bản của Homebrew và chắc chắn nó đã được install, bạn thao tác thêm các lệnh sau để install cho Geth:
- Command này sẽ giúp install phiên bản ổn định nhất. Nhưng nếu bạn muốn cập nhật lại Geth repository’s master branch (kho lưu trữ của Geth) thì thêm “–devel” vào lệnh cài đặt.
- Các lệnh này sẽ cài đặt phần mềm cốt lõi của Geth cũng như các công cụ dành cho Developer:
Devp2p (clef), bootnode, evm, rlpdump, puppeth, và abigen. Các binary tool sẽ được lưu trong /usr/local/bin/. Có thể xem thêm danh sách đầy đủ các lệnh này bằng cách command:
Lưu ý: nếu muốn cập nhật Geth hiện có lên bản mới nhất trước, thì tạm dừng chạy Node lại và command:
brew update brew upgrade brew reinstall ethereum
- Geth sẽ sử dụng data của phiên bản trước để khởi động lại Node và đồng bộ hóa lại mọi Block khi Node này ngoại tuyến.
Post-installation
Sau khi đã dowload Geth, bạn có thể kết nối với mạng chính của Ethereum hoặc tạo một full custom Ethereum network khác để chạy. Tuy nhiên nếu không có Ether bạn sẽ không làm được gì nhiều trên mạng chính của ethereum. Nên lúc này, Geth sẽ phát huy tác dụng của nó, nó cho phép anh em tạo Blockchain riêng trên ethereum, đây là một network giống y với Ethereum từ chức năng cho đến việc khởi tạo Smart contract, Make payments, Dapp, Web3 mà không cần sử dụng đến ETH.
Cho nên, bh hãy cùng mình tạo Blockchain riêng đó..
Khởi tạo Genesis block
Có lẽ anh em cũng biết rồi, Blockchain là 1 cuốn sổ cái kỹ thuật số (digital ledger) ghi lại mọi giao dịch theo trình tự thời gian và công khai. Các giao dịch này được lưu trữ theo khối và phân tán khắp nơi (distributed networks), các Node luôn cạnh tranh nhau để thêm được block mới. Khi 1 block được tìm thấy, nó sẽ được thêm vào chuỗi và thông tin sẽ được chuyển đến các Node khác trên mạng, để kiểm tra và cập nhật lại chuỗi theo bản sao mới nhất.
Để tạo được chain riêng, anh em cần tạo trước Genesis block (hay còn gọi là block 0). Anh em cần tạo 1 tệp gốc tùy chỉnh (custom genesis file) và yêu cầu Geth dùng tệp đó để tạo chuỗi riêng cho anh em.
Tệp Genesis sẽ trông như thế này:
{"config": {"chainId": 987,"homesteadBlock": 0,"eip155Block": 0,"eip158Block": 0}, "difficulty": "0x400","gasLimit": "0x8000000", //set this really high for testing"alloc": {} }}
Ý nghĩa của các thuộc tính:
- Config: set các thông số của chain riêng mà anh em mong muốn.
- chainId: nó giúp định vị custom chain mà anh em tạo, vì mỗi chain chạy trên Ethereum đều có 1 ID độc nhất. Nên chỗ này đừng đặt trùng với các chain khác là được.
- HomesteadBlock: là thuộc tính quan trọng thứ nhì của Ethereum platform, nó bao gồm nhiều thay đổi ở cấp giao thức, ở đây anh em cứ để tạm 0 là được.
- eip155Block/eip158Block: phiên bản Homestead đã phát hành với một số thay đổi về giao thức không tương thích ngược và yêu cầu hard fork (nằm trong những thay đổi/cải tiến giao thức được đề xuất từ EIPs – Ethereum Improvement Proposals). Custom chain riêng sẽ không khó khăn khi thực hiện những thay đổi này, nên cứ để nó ở 0 là được.
- Difficulty: Giá trị này kiểm soát thời gian cần thiết để tạo một khối mới trong blockchain. Nên để thấp thấp thôi, khi chạy testnet tránh phải chờ đợi lâu. Trong thực tế việc tạo 1 khối hợp lệ (valid block) để thực hiện giao dịch sẽ đòi hỏi độ khó cao hơn.
- gasLimit: Giá trị này cho biết giới hạn ‘Gas’ trên mỗi block ở cấp độ toàn chuỗi (gas là khoản phí được sử dụng cho các giao dịch trên Blockchain) ở đây anh em nên để cao chút để không bị giới hạn khi testing.
- Alloc: tham số này cho phép đưa Ether giả đến 1 địa chỉ ví cụ thể để testing network, nhưng trong ví dụ này chúng ta đang custom chain riêng nên ko cần dùng, anh em có thể để trống giống mình.
Tiếp theo, tạo file CustomGenesis.json, để tạo được cái này anh em sử dụng trình soạn thảo văn bản và lưu nó vào 1 thư mục trong máy, tệp Json sẽ trông như thế này:
{ "config": { "chainId": 15, "homesteadBlock": 0, "eip155Block": 0, "eip158Block": 0 }, "nonce": "0x0000000000000042", "timestamp": "0x00", "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "extraData": "0x00", "gasLimit": "0x08000000", "difficulty": "0x400", "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000", "coinbase": "0x3333333333333333333333333333333333333333", "alloc": {} }
Kế tiếp, mở terminal lên, nếu đã cài Geth thì chỉ cần chạy command:
Đoạn mã trên cho Geth hiểu tệp CustomGenesis.json do anh em tạo sẽ là khối đầu tiên của blockchain tùy chỉnh này. Tiếp theo, chúng ta sẽ chỉ định nơi mà chain data được lưu. Geth sẽ tạo thư mục cho anh em. Nếu có sẵn, thì chọn vị trí đó cho nó. Sau khi chạy đoạn mã này trong cửa sổ terminal, anh em sẽ thấy Geth kết nối với genesis file và cung cấp xác nhận tương tự.
Tạo Chain riêng và share Blockchain
Đến được bước này, chúng ta đã tạo ra sự khởi đầu cho blockchain riêng của mình. Anh em sẽ start private network để mine các khối mới cho nó. Và nên chạy trên nhiều Terminal để thực hiện.
Đoạn mã hướng dẫn anh em tạo mạng riêng của mình. Anh em cũng có thể sử dụng thư mục mà mình vừa chỉ định để truy cập chi tiết blockchain. Ở đây mình đã sử dụng một tham số bổ sung 9876 – networkid (đây là danh tính của anh em trên mạng Ethereum), anh em có thể thay thế nó bằng bất kỳ số ngẫu nhiên nào cho mạng riêng của mình.
Khi đã chạy lệnh trên trên nhiều terminal, mạng riêng của anh em đã hoạt động.
Kết luận
Nhu cầu về custom Chain riêng đang rất cao vì nó có thể được dùng trong rất nhiều lĩnh vực kinh doanh như thương mại điện tử, thanh toán online, bảo hiểm, chăm sóc sức khỏe, dịch vụ tài chính, bất động sản v.v. Nó cung cấp cơ sở dữ liệu mạnh, có thể mở rộng và cực kỳ an toàn cho tổ chức. Với khả năng hiển thị rõ ràng minh bạch, các Blockchain cung cấp cho doanh nghiệp cái nhìn rõ ràng về các khiếm khuyết và giúp giảm lãng phí. Quan trọng hơn, những chi tiết này được giới hạn trong company nếu muốn. Khiến chúng dễ quản lý hơn vì có thể tùy biến mạng nhỏ với ít người tham gia hơn, do đó thời gian shutdown cũng ít hơn.
Nếu cần tư vấn thêm về cách cấu hình Chain riêng.. có thể liên hệ mình, Sang có giải pháp phù hợp cho từng use case riêng.
Comments (No)