Hệ sinh thái Ethereum - Part 1: Ethereum network và các công cụ liên quan

Ethereum cùng với công nghệ Blockchain đang trở thành hot trend trên toàn thế giới. Tuy nhiên với rất nhiều người, hiểu biết về lĩnh vực này còn khá mới mẻ. Dưới góc độ 1 developer, hệ sinh thái Ethereum mang đến rất nhiều khái niệm, công nghệ mới mà ứng dụng của nó có tiềm năng rất lớn trong tương lai.
Trong bài viết này, tôi xin phép tổng hợp sơ lược các thành phần trong hệ sinh thái Ethereum

1. Ethereum network

Ethereum network là mạng network áp dụng công nghệ blockchain và smart contract, mà dựa vào nó bạn có thể xây dựng các ứng dụng phân tán (ÐApps). Khái niệm ÐApps và smart contract trong Ethereum network, tôi xin mô tả chi tiết trong 1 bài viết riêng. Hiểu đơn giản, smart contract như một bản hợp đồng với các điều khoản thủ tục của các bên tham gia, nó được thực thi tự động và kiểm chứng minh bạch bởi các máy tham gia Ethereum network và ÐApps là mô hình ứng dụng áp dụng smart contract cho các xử lí logic.
Mô tả chi tiết công nghệ áp dụng trong Ethereum network có thểm xem tại white-paper của Ethereum: https://github.com/ethereum/wiki/wiki/White-Paper

2. Ethereum node client

Các node mạng trong mạng Ethereum network giao tiếp với nhau thông qua giao thức Ethereum protocol. Dựa trên tài liệu mô tả của Ethereum Foundation, nhiều phiên bản thực thi giao thức này đã được phát triển. Hiện nay, phổ biến nhất là 2 phiên bản: geth (phiên bản thực thi bằng golang do chính Ethereum Foundation phát triển) và Parity (phiên bản được phát triển bằng Rust do Parity Inc phát triển).

2.1. Geth (Go ethererum) & Mist

  • Geth Daemon: Khi khởi động geth, tiến trình sẽ thực hiện tìm kiếm các node client khác trong cùng mạng Ethereum để đồng bộ dữ liệu về block chain của mạng xuống local, đảm bảo dữ liệu blockchain luôn cập nhật. Tiến trình này khi đó đóng vai trò vừa đồng bộ blockchain, vừa là kênh giao tiếp từ client với mạng Ethereum. Các ứng dụng client giao tiếp với tiến trình này thông qua Json RPC.
  • Geth console: Geth cũng cung cấp bộ công cụ dòng lệnh để kết nối với node client đang tham gia vào mạng Ethereum và thực hiện các thao tác như quản lý tài khoản, truy vấn thông tin blockchain,...
  • Mist: Là 1 ví Ethereum phát triển bởi Ethereum Foundation, thực tế, Mist là ứng dụng client thông qua kết nối với tiến trình Geth Daemon local để giao tiếp với mạng Ethereum. Tuy nhiên, so với bộ công cụ Geth console, Mist cung cấp một giao diện trực quan hơn để quản lý tài khoản và các smart contract.

2.2. Parity

Là phiên bản được phát triển bởi Parity Inc, Parity hướng đến khả năng đồng bộ nhanh và nhẹ. Thực tế qua một số thực nghiệm, so với geth, Parity cho phép đồng bộ tốc độ nhanh hơn với tài nguyên tiêu tốn thấp hơn.
Ngoài ra, có 1 điểm khác biệt nữa đó là Parity client không thể tham gia Rinkeby testnet (sử dụng Proof-of-Authority), thay vào đó Parity có testnet riêng cũng sử dụng Proof-of-Authority là Kovan.

Tham khảo so sánh hiệu năng giữa 2 phiên bản: https://blog.ethcore.io/performance-analysis/

2.3. web3.js

Bên cạnh bộ công cụ như Geth console hay Mist để tương tác với client nodes trong Ethereum network, Ethereum cũng có bộ thư viện JS là Web3.js. Thư viện này có thể được sử dụng để xây dựng các ÐApps nền web.

Phiên bản thư viện Python có thể tham khảo tại: https://github.com/ethereum/web3.py. Ngoài ra

2.4. Metamask

Đối với nhiều người muốn chạy ÐApps nhưng không muốn chạy 1 Ethereum node client, Metamask là 1 giải pháp hợp lí. Metamask cho phép kết nối với Ethereum network ngay trên trình duyệt thông qua kết nối với các Ethereum node của Metamask. Hiện tai, Metamask được phát triển dưới dạng extension cho Chrome và Brave (1 trình duyệt xây dựng trên nền Chromium hướng đến hỗ trợ các ứng dụng ÐApps trong tương lai)

3. Solidity & EVM

3.1. Solidity

Solidity là ngôn ngữ phổ biến nhất để viết smart contract trong mạng Ethereum. Đây là ngôn ngữ lập trình bậc cao, hướng contract được phát triển với mục tiêu tập trung vào khái niệm smart contract trong mạng Ethereum. Solidity hỗ trợ kế thừa (inheritance), thư viện, cấu trúc dữ liệu phức tạp cũng như nhiều tính năng tương tự nhiều ngôn ngữ lập trình bậc cao. Contract được viết bằng solidity sẽ được biên dịch thành bytecode để có thể chạy trong máy ảo Ethereum (Ethereum Virtual Machine - EVM, tương tự như cơ chế biên dịch bytecode trong máy ảo JVM).
Có nhiều tool được xây dựng để hỗ trợ lập trình bằng Solidity, trong đó, công cụ được đề xuất trên trang của Solidity là Remix - một web-browser IDE, hỗ trợ khá đầy đủ cho việc viết smart contract bằng Solidity bao gồm: tạo contract, biên dịch, chạy thử, ...

Tham khảo một số tool hỗ trợ Solidity: http://solidity.readthedocs.io/en/develop/index.html#available-solidity-integrations

3.2. Truffle & Embrak

Là 2 nền tảng phổ biến nhất để phát triển ÐApp, cung cấp các công cụ hỗ trợ triển khai, kiểm thử trong quá trình phát triển ÐApp. Việc sử dụng các nền tảng này trong việc phát triển ÐApp, tôi sẽ đề cập trong 1 số bài viết khác.

4. Swarm & IPFS

Blockchain là cấu trúc phù hợp để lưu trữ 1 lượng dữ liệu nhỏ, tuy nhiên, đối với các dữ liệu lớn, cần lưu trữ thời gian dài, việc sử dụng blockchain là rất tốn kém và không hiệu quả. Swarm được sinh ra để giải quyết vấn đề này. Đây là hệ thống lưu trữ phân tán trong mạng Ethereum. Khi bạn chạy 1 Ethereum node cũng đồng thời bạn đang chạy 1 Swarm node trong mạng lưu trữ Swarm.

Tương tự Swarm, IPFS cũng là 1 hệ thống lưu trữ phân tán. Tuy IPFS không được dùng trong mạng Ethereum nhưng nó có thể tích hợp với Ethereum network.

5. ENS

Dịch vụ này tương tự DNS đối với địa chỉ tài khoản. Điều này có nghĩa là, giống như trong dịch vụ DNS, mỗi địa chỉ IP tương ứng với 1 tên miền, trong dịch vụ ENS, mỗi địa chỉ tài khoản tương ứng với một tên miền. Thông qua ENS, thay vì phải nhớ địa chỉ từng tài khoản, các địa chỉ này có thể được đăng ký ứng với các tên miền dễ nhớ. Khi đó, người dùng chỉ cần sử dụng tên miền, dịch vụ ENS sẽ phân giải tên miền thành địa chỉ tài khoản tương ứng.

Tham khảo:
https://medium.com/blockchannel/tools-and-technologies-in-the-ethereum-ecosystem-e5b7e5060eb9

Related article