Cấu trúc của một ứng dụng Web 3.0

Cấu trúc của các ứng dụng Web 3.0 (hay DApp) hoàn toàn khác với các ứng dụng Web 2.0.

Lấy ví dụ như Medium, một trang blog đơn giản cho phép người dùng xuất bản nội dung của riêng họ và tương tác với nội dung từ những người khác. Chúng ta hãy đi vào cấu ​​trúc của Medium để xem nó hoạt động như thế nào.

  • Đầu tiên: phải có một nơi để lưu trữ dữ liệu cần thiết, chẳng hạn như người dùng, bài đăng, tag, bình luận, lượt thích,… Điều này đòi hỏi một cơ sở dữ liệu được cập nhật liên tục.
  • Thứ hai: backend code (được viết bằng ngôn ngữ như Node.js, Java hoặc Python) phải xác định bussness logic của Medium. Ví dụ: điều gì sẽ xảy ra khi một người dùng mới đăng ký, xuất bản một blog mới hoặc nhận xét trên blog của người khác?
  • Thứ ba: frontend code (thường được viết bằng JavaScript, HTML và CSS) phải xác định logic giao diện người dùng của Medium. Ví dụ: trang web trông như thế nào và điều gì sẽ xảy ra khi người dùng tương tác với từng phần tử trên trang?

Tổng hợp tất cả lại với nhau, khi anh em viết một bài đăng blog trên Medium, anh em sẽ tương tác với giao diện người dùng (frontend), frontend sau đó sẽ tương tác với backend và backend sẽ giao tiếp với cơ sở dữ liệu của nó. Tất cả code này được lưu trữ trên các máy chủ tập trung và được gửi đến người dùng thông qua trình duyệt internet. Đây là bản tóm tắt high-level về cách hoạt động của hầu hết các ứng dụng Web 2.0 ngày nay.

Cấu trúc hoạt động của các ứng dụng Web 2.0

Ngày nay, với sự bùng nổ của blockchain cũng như các ứng dụng của nó trong lĩnh vực tiền điền tử đã mở ra một hướng đi mới, đầy tiềm năng dành cho các ứng dụng Web 3.0. 

Đọc thêm: Web 3.0 là gì và tại sao nó lại quan trọng

Trong bài viết này, chúng ta sẽ tập trung vào cấu trúc của một ứng dụng Web 3.0 được xây dựng Ethereum blockchain.

Điều gì làm cho Web 3.0 trở nên khác biệt?

Không giống như các ứng dụng Web 2.0 như Medium, Web 3.0 loại bỏ vai trò của “người đứng giữa”. Chúng không có cơ sở dữ liệu tập trung nào (centralized database), nơi để được lưu trữ trạng thái ứng dụng và không có máy chủ web tập trung nào (centralized web server) chứa code backend.

Thay vào đó, chúng ta có thể tận dụng blockchain để xây dựng ứng dụng trên một state machine phi tập trung được duy trì bởi các node ẩn danh trên internet.

“State machine” là máy duy trì một số trạng thái chương trình (program state) và các trạng thái tương lai được cho phép trên máy đó. Blockchains là các state machine được khởi tạo với một số trạng thái ban đầu và có các quy tắc rất nghiêm ngặt, tức là sự đồng thuận, xác định cách trạng thái đó có thể chuyển đổi.

Đặc điểm nổi bậc là chúng không có thực thể nào kiểm soát state machine phi tập trung này – nó được duy trì chung bởi tất cả mọi người (node) trong mạng lưới.

Xét một backend server? Thay vì cách phần backend của Medium được kiểm soát, trong Web 3.0, chúng ta có thể viết các hợp đồng thông minh xác định tính logic của các ứng dụng và triển khai chúng trên state machine phi tập trung. Điều này có nghĩa là mọi người muốn xây dựng một ứng dụng blockchain, họ có thể triển khai code trên máy state machine được chia sẻ này.

Đối với phần frontend? Nó gần như không thay đổi so với ứng dụng Web 2.0. Dưới đây là cấu trúc cơ bản nhất của ứng dụng Web 3.0.

Cấu trúc ứng dụng Web 3

Bây giờ, chúng ta hãy đi sâu hơn một chút vào những yếu tố nào có thể làm cho chúng trên trở nên đặc biệt.

Blockchain

Ethereum blockchain thường được gọi là “world computer”. Đó là bởi vì nó là một state machine, có thể truy cập toàn cầu và được duy trì bởi một mạng lưới các node ngang hàng. Các thay đổi trạng thái trên state machine này được điều chỉnh bởi các quy tắc đồng thuận mà các node trong mạng tuân theo.

Hay nói một cách khác, nó thực sự được thiết kế để trở thành một state machine mà bất kỳ ai trên thế giới đều có thể truy cập và ghi dữ liệu vào. State machine không thuộc sở hữu của bất kỳ thực thể nào, nó của tất cả mọi người trong mạng lưới.

Hợp đồng thông minh

Hợp đồng thông minh là một chương trình chạy trên Ethereum blockchain và xác định các logic đằng sau những thay đổi trạng thái xảy ra trên blockchain. Hợp đồng thông minh được viết bằng các ngôn ngữ cấp cao, chẳng hạn như Solidity hoặc Vyper.

Mã code của hợp đồng thông minh trên Ethereum

Vì code của hợp đồng thông minh được lưu trữ và công khai trên Ethereum blockchain nên bất kỳ ai cũng có thể kiểm tra logic ứng dụng của tất cả các hợp đồng thông minh trên mạng.

Máy ảo Ethereum (EVM)

Máy ảo Ethereum, nơi thực thi logic được xác định trong các hợp đồng thông minh và xử lý các thay đổi trạng thái xảy ra trên state machine.

EVM không hiểu các ngôn ngữ cấp cao, được sử dụng để viết các hợp đồng thông minh như Solidity và Vyper. Thay vào đó, chúng ta phải biên dịch ngôn ngữ cấp cao thành bytecode để EVM có thể thực thi.

Giao diện người dùng

Cuối cùng, chúng ta có giao diện người dùng (frontend). Như đã đề cập ở phần trước, frontend xác định logic giao diện người dùng, nhưng nó cũng giao tiếp với logic ứng dụng được xác định trong hợp đồng thông minh.

Giao tiếp giữa giao diện người dùng và hợp đồng thông minh phức tạp hơn so với cấu trúc ở hình trên. Chúng ta sẽ xem xét kỹ hơn điều này ở phần bên dưới.

Làm thế nào để frontend code giao tiếp với các hợp đồng thông minh trên Ethereum?

Mỗi node trong mạng Ethereum đều giữ một bản sao của tất cả các trạng thái trên state machine Ethereum như code và dữ liệu được liên kết với mọi hợp đồng thông minh.

Khi muốn tương tác với dữ liệu và code trên blockchain, chúng ta cần tương tác với một trong những node này. Điều này là do bất kỳ node nào cũng có thể truyền yêu cầu thực hiện giao dịch trên EVM. Sau đó, miner sẽ thực hiện giao dịch và truyền sự thay đổi trạng thái kết quả cho phần còn lại của mạng.

Có hai cách để truyền một giao dịch mới:

  1. Thiết lập node chạy phần mềm Ethereum blockchain software
  2. Sử dụng các node được cung cấp bởi các dịch vụ của bên thứ ba như InfuraAlchemy và Quicknode

Nếu sử dụng dịch vụ của bên thứ ba, chúng ta không phải đối mặt với các vấn đề đau đầu khi tự chạy fullnode. Việc thiết lập một Ethereum node trên máy chủ của riêng mình có thể mất nhiều thời gian. Có rất nhiều dữ liệu để đồng bộ hóa – Dữ liệu chiếm nhiều băng thông và dung lượng hơn so với một máy tính xách tay thông thường có thể xử lý.

Hơn nữa, chi phí lưu trữ toàn bộ Ethereum blockchain sẽ tăng lên khi DApp của chúng ta mở rộng và sẽ cần thêm nhiều node hơn để mở rộng cơ sở hạ tầng. Đó là lý do tại sao, khi cơ sở hạ tầng trở nên phức tạp hơn, sẽ cần các kỹ sư DevOps toàn thời gian. Họ sẽ duy trì cơ sở hạ tầng để đảm bảo thời gian hoạt động đáng tin cậy và thời gian phản hồi nhanh chóng.

Tất cả những điều đó để nói rằng, để tránh được những vấn đề đau đầu này là lý do tại sao nhiều DApp chọn sử dụng các dịch vụ như Infura hoặc Alchemy để quản lý cơ sở hạ tầng node cho họ. 

Đối với thông tin về các nhà cung cấp (providers). Provider là các node mà chúng ta kết nối khi cần tương tác với blockchain (cho dù là tự thiết lập hay sử dụng các node hiện có từ các dịch vụ của bên thứ ba).

Cấu trúc hoạt động web 3.0

Mọi Ethereum client (tức là provider) phải triển khai JSON-RPC (là một giao thức gọi thủ tục từ xa được mã hóa bằng JSON). 

Một cách hiểu đơn giản hơn, có thể hình dung nó giống như mà một gateway để giúp các nhà phát triển, các ứng dụng Web3 và các Crypto Wallet có thể giao tiếp dễ dàng hơn với các hệ thống Blockchain từ xa.

Với RPC, chúng ta có thể truy vấn thông tin liên quan đến blockchain (chẳng hạn như block number, blocks,…), cho phép chúng ta đọc dữ liệu blockchain và gửi các giao dịch đến các mạng.

Tất cả các dApp cần một cách để giao tiếp với các blockchains. Nếu không có phương tiện giao tiếp, các dApp sẽ không thể truy cập thông tin và thực hiện các giao dịch trên blockchain mà chúng hoạt động trên đó.

RPC hỗ trợ các dịch vụ như MetaMask và các ứng dụng Web 3.0 khác kết nối với thông tin trên các blockchains khác nhau. Với RPC, chúng có thể tự động tương tác với dữ liệu blockchain và thực hiện các tác vụ như giao dịch ví tiền điện tử. Nó cũng cho phép bất kỳ ai kết nối với blockchain node để tạo các ứng dụng phi tập trung (dapp).

Ví dụ về cách hoạt động của RPC: Khi người dùng truy cập sàn DEX hoặc sử dụng MetaMask để thực hiện giao dịch, yêu cầu của họ sẽ thông qua RPC để kết nối họ với các node lưu giữ dữ liệu từ các blockchain.

Đặc biệt trong bối cảnh các blockchain L1 đang rất phát triển, điều này làm cho nhu cầu sử dụng RPC để kết nối với các blockchain đang cao hơn bao giờ hết. Từ đây có thể RPC là một công cụ thiết yếu mà các nhà phát triển blockchain cần sử dụng để xây dựng các ứng dụng và dự án phi tập trung.

Cấu trúc của một ứng dụng Web 3

Lưu trữ trên Blockchain

Kiến ​​trúc này có ý nghĩa nếu chúng ta xây dựng một ứng dụng nơi tất cả các hợp đồng thông minh và dữ liệu hoạt động trên Ethereum blockchain. Người dùng sẽ trả tiền mỗi khi họ thêm dữ liệu mới vào blockchain. Đó là bởi vì việc thêm một trạng thái vào state machine sẽ làm tăng chi phí cho các node đang duy trì state machine đó.

Yêu cầu người dùng trả thêm tiền để sử dụng DApp của chúng ta mỗi khi giao dịch của họ yêu cầu thêm trạng thái mới không phải là giải pháp tốt. Một giải pháp cải tiến là việc sử dụng giải pháp lưu trữ ngoài chuỗi (off-chain) phi tập trung như IPFS hoặc Swarm.

IPFS là một hệ thống tệp phân tán để lưu trữ và truy cập dữ liệu. Thay vì lưu trữ dữ liệu trong cơ sở dữ liệu tập trung, hệ thống IPFS phân phối và lưu trữ dữ liệu trong mạng ngang hàng. IPFS cũng có một “incentive layer” được gọi là Filecoin. Layer này khuyến khích các node lưu trữ và truy xuất dữ liệu. 

Swarm cũng tương tự ở chỗ đó là một mạng lưu trữ phi tập trung, nhưng nó cũng có một điểm khác biệt đáng chú ý. Trong khi Filecoin là một hệ thống riêng biệt thì hệ thống khuyến khích của Swarm được tích hợp sẵn và thực thi thông qua các hợp đồng thông minh trên Ethereum blockchain để lưu trữ và truy xuất dữ liệu.

Vì vậy, với IPFS hoặc Swarm, kiến ​​trúc ứng dụng sẽ như sau:

Nếu anh em chú ý trong sơ đồ bên dưới rằng frontend code không được lưu trữ trên blockchain. Như ở Web 2.0, chúng ta có thể lưu trữ code này trên AWS, nhưng điều đó tạo ra một điểm giới hạn tập trung cho DApp. Điều gì sẽ xảy ra nếu AWS gặp sự cố? Điều gì sẽ xảy ra nếu nó kiểm duyệt ứng dụng?

*Amazon Web Services (AWS) là nền tảng đám mây toàn diện và được sử dụng rộng rãi nhất, cung cấp trên 200 dịch vụ đầy đủ tính năng từ các trung tâm dữ liệu trên toàn thế giới

Đó là lý do tại sao, nếu muốn xây dựng một ứng dụng phi tập trung thực sự, chúng ta có thể chọn lưu trữ frontend của mình trên một giải pháp lưu trữ phi tập trung như IPFS hoặc Swarm.

Vì vậy, bây giờ kiến ​​trúc ứng dụng sẽ như sau:

Cấu trúc Web 3.0

‍Truy vấn blockchain

Chúng ta đã nói về cách ghi vào blockchain bằng cách ký các giao dịch và sau đó gửi chúng đến blockchain. Nhưng còn việc đọc dữ liệu từ các hợp đồng thông minh trên blockchain thì sao? Có hai cách chính để thực hiện việc này:

1) Smart Contract Events

2) The Graph

The Graph là một giao thức cho phép lập chỉ mục (index) và truy vấn dữ liệu từ blockchain. The Graph cho phép bất kỳ ai cũng có thể truy cập để xây dựng và publish các API gọi là Subgraph. Subgraph giúp việc truy cập Data từ Blockchain dễ dàng hơn.

Bằng cách lập chỉ mục dữ liệu blockchain, The Graph cho phép truy vấn dữ liệu on-chain trong logic ứng dụng với độ trễ thấp.

Bây giờ, cấu ​​trúc DApp sẽ như sau:

Mở rộng quy mô DApp

Như chúng ta đang thấy, Ethereum đang gặp phải vấn đề lớn về khả năng mở rộng.

Gas fee trên Etherem (Gwei)
Phí gas trung bình trên Ethereum (Gwei)
Gas fee trên Etherem (USD)
Phí gas trung bình trên Ethereum (USD)
Block size trung bình trên Ethereum

Việc xây dựng DApp trên Ethereum với phí gas cao và full blocks dẫn đến trải nghiệm người dùng rất tệ. Hiện này, trên thị trường đã xuất nhiều các giải pháp đưa ra nhằm giải quyết vấn đề phí gas và tắt nghẽn mạng trên Ethereum.

Một giải pháp phổ biến là Polygon, dự án có các “sidechains” xử lý và thực hiện các giao dịch. Sidechain là một blockchain thứ cấp giao tiếp với chuỗi chính. Cụ thể là nó sẽ gửi tổng hợp các block trở lại chuỗi chính.

Ngoài ra, Zk Rollup cũng là một giáp mở rộng cho Ethereum bằng cách sử dụng công nghệ Zero Knowledge Proof (bằng chứng không kiến thức). 

Zk Rollup cho phép tổng hợp một số lượng lớn các giao dịch vào một khối Rollup và tạo ra bằng chứng ngắn gọn cho khối off-chain. Sau đó, hợp đồng thông minh trên Ethereum chỉ cần xác minh Proof (bằng chứng) đó mà không cần thực hiện lại các giao dịch. Điều này có thể giúp tiết kiệm nhiều gas fee vì xác minh Proof (bằng chứng) rẻ hơn nhiều so với việc thực hiện lại tính toán.

Kết luận

Như vậy là chúng ta đã tìm hiểu một cách cơ bản nhất cấu trúc bên trong của một dApp Web 3.0. Rõ ràng, công nghệ trong lĩnh vực blockchain nói chung cũng như trong crypto nói riêng đang phát triển rất nhanh chóng, chúng ta hy vọng sự phát triển này sẽ mang đến nhiều ứng dụng nổi bật, giải quyết được những điểm hạn chế mà trong không gian Web 2.0 đang tồn đọng, hướng tợi sự áp dụng rộng rãi đến nhiều người dùng trên thế giới.

Bài viết mới nhất

Tìm hiểu sâu về Agoric: JavaScript Smart Contract

Agoric là một chain proof-of-stake (PoS) sử dụng các smart contract JavaScript để nhanh chóng xây dựng và triển khai các dapp.  Chúng tôi...

Ethereum Và “Sự Hợp Nhất” — Mọi Điều Bạn Cần Biết 

Lịch sử blockchain sẽ sớm được viết nên khi Ethereum có bản nâng cấp quan trọng với các phân nhánh cho toàn bộ không...

Giữa Sự Hỗn Loạn Của Thị Trường, Lời Hứa Về Tiền Điện Tử Là Không Thay Đổi

Tác giả: Nathan Thompson, Lead Tech Writer tại Bybit, một trong những sàn giao dịch tiền điện tử phát triển nhanh nhất thế giới. Bitcoin...

Làm sao để “Do Your Own Research” – DYOR

Tổng quan Khi tham gia thị trường Crypto, bạn có thể thường nghe thấy cụm từ "Do Your Own Research" hoặc là DYOR, nghĩa...