From 9aa0cb654b98b0da97618ecb5eb533f2812462c6 Mon Sep 17 00:00:00 2001 From: Joshua <62268199+minimalsm@users.noreply.github.com> Date: Sat, 14 Feb 2026 00:04:45 +0000 Subject: [PATCH] i18n(vi): translation import part 05 of 13 (23 files) --- .../docs/nodes-and-clients/index.md | 319 ++++++++++++ .../nodes-and-clients/light-clients/index.md | 61 +++ .../node-architecture/index.md | 59 +++ .../nodes-as-a-service/index.md | 418 +++++++++++++++ .../nodes-and-clients/run-a-node/index.md | 482 ++++++++++++++++++ .../vi/developers/docs/oracles/index.md | 433 ++++++++++++++++ .../docs/programming-languages/dart/index.md | 30 ++ .../programming-languages/delphi/index.md | 56 ++ .../programming-languages/dot-net/index.md | 86 ++++ .../programming-languages/elixir/index.md | 55 ++ .../programming-languages/golang/index.md | 84 +++ .../docs/programming-languages/index.md | 32 ++ .../docs/programming-languages/java/index.md | 64 +++ .../programming-languages/javascript/index.md | 72 +++ .../programming-languages/python/index.md | 99 ++++ .../docs/programming-languages/ruby/index.md | 60 +++ .../docs/programming-languages/rust/index.md | 65 +++ .../vi/developers/docs/scaling/index.md | 113 ++++ .../docs/scaling/optimistic-rollups/index.md | 265 ++++++++++ .../developers/docs/scaling/plasma/index.md | 176 +++++++ .../docs/scaling/sidechains/index.md | 73 +++ .../docs/scaling/state-channels/index.md | 261 ++++++++++ .../developers/docs/scaling/validium/index.md | 166 ++++++ 23 files changed, 3529 insertions(+) create mode 100644 public/content/translations/vi/developers/docs/nodes-and-clients/index.md create mode 100644 public/content/translations/vi/developers/docs/nodes-and-clients/light-clients/index.md create mode 100644 public/content/translations/vi/developers/docs/nodes-and-clients/node-architecture/index.md create mode 100644 public/content/translations/vi/developers/docs/nodes-and-clients/nodes-as-a-service/index.md create mode 100644 public/content/translations/vi/developers/docs/nodes-and-clients/run-a-node/index.md create mode 100644 public/content/translations/vi/developers/docs/oracles/index.md create mode 100644 public/content/translations/vi/developers/docs/programming-languages/dart/index.md create mode 100644 public/content/translations/vi/developers/docs/programming-languages/delphi/index.md create mode 100644 public/content/translations/vi/developers/docs/programming-languages/dot-net/index.md create mode 100644 public/content/translations/vi/developers/docs/programming-languages/elixir/index.md create mode 100644 public/content/translations/vi/developers/docs/programming-languages/golang/index.md create mode 100644 public/content/translations/vi/developers/docs/programming-languages/index.md create mode 100644 public/content/translations/vi/developers/docs/programming-languages/java/index.md create mode 100644 public/content/translations/vi/developers/docs/programming-languages/javascript/index.md create mode 100644 public/content/translations/vi/developers/docs/programming-languages/python/index.md create mode 100644 public/content/translations/vi/developers/docs/programming-languages/ruby/index.md create mode 100644 public/content/translations/vi/developers/docs/programming-languages/rust/index.md create mode 100644 public/content/translations/vi/developers/docs/scaling/index.md create mode 100644 public/content/translations/vi/developers/docs/scaling/optimistic-rollups/index.md create mode 100644 public/content/translations/vi/developers/docs/scaling/plasma/index.md create mode 100644 public/content/translations/vi/developers/docs/scaling/sidechains/index.md create mode 100644 public/content/translations/vi/developers/docs/scaling/state-channels/index.md create mode 100644 public/content/translations/vi/developers/docs/scaling/validium/index.md diff --git a/public/content/translations/vi/developers/docs/nodes-and-clients/index.md b/public/content/translations/vi/developers/docs/nodes-and-clients/index.md new file mode 100644 index 00000000000..7ec6d38bad2 --- /dev/null +++ b/public/content/translations/vi/developers/docs/nodes-and-clients/index.md @@ -0,0 +1,319 @@ +--- +title: "Nodes và máy khách" +description: "Tổng quan về các nút Ethereum và phần mềm client, cộng thêm cách thiết lập một nút và tại sao bạn nên làm điều đó." +lang: vi +sidebarDepth: 2 +--- + +Ethereum là một mạng lưới phân tán gồm các máy tính (gọi là nút) chạy phần mềm có khả năng xác minh các khối và dữ liệu giao dịch. Phần mềm phải được chạy trên máy tính của bạn để biến nó thành một nút Ethereum. Có hai phần mềm riêng biệt (được gọi là 'clients') cần thiết để hình thành một nút. + +## Điều kiện tiên quyết {#prerequisites} + +Bạn nên hiểu khái niệm về mạng ngang hàng và [những điều cơ bản về EVM](/developers/docs/evm/) trước khi tìm hiểu sâu hơn và chạy phiên bản máy khách Ethereum của riêng bạn. Hãy xem [phần giới thiệu về Ethereum](/developers/docs/intro-to-ethereum/) của chúng tôi. + +Nếu bạn mới tìm hiểu về chủ đề nút, chúng tôi khuyên bạn nên xem qua phần giới thiệu thân thiện với người dùng của chúng tôi về [việc chạy một nút Ethereum](/run-a-node). + +## Node và clients là gì? {#what-are-nodes-and-clients} + +Một "Node" là bất kỳ phiên bản nào của phần mềm client Ethereum được kết nối với các máy tính khác cũng chạy phần mềm Ethereum, tạo thành một mạng. Một client (cơ chế) là một phiên bản của Ethereum xác thực dữ liệu theo quy tắc của giao thức và giữ cho mạng an toàn. Một nút cần chạy hai cơ chế : một cơ chế đồng thuận và một cơ chế thực thi. + +- Cơ chế thực thi (còn được gọi là động cơ thực thi, cơ chế EL hoặc trước đây là cơ chế Eth1) lắng nghe các giao dịch mới được phát sóng trong mạng, thực thi chúng trong EVM và giữ trạng thái và cơ sở dữ liệu mới nhất của tất cả dữ liệu Ethereum hiện tại. +- Cơ chế đồng thuận (còn được gọi là Beacon Node, cơ chế CL hoặc trước đây là cơ chế Eth2) sử dụng thuật toán đồng thuận proof-of-stake, giúp mạng lưới đạt được sự đồng thuận dựa trên dữ liệu đã được xác thực từ cơ chế thực thi. Còn có một phần mềm thứ ba, gọi là 'validator', có thể được thêm vào cơ chế đồng thuận, giúp một nút tham gia vào việc bảo mật mạng lưới. + +Những cơ chế này làm việc cùng nhau để theo dõi đầu của chuỗi Ethereum và cho phép người dùng tương tác với mạng Ethereum. Thiết kế mô-đun với nhiều phần mềm hoạt động cùng nhau được gọi là [sự phức tạp được đóng gói](https://vitalik.eth.limo/general/2022/02/28/complexity.html). Cách tiếp cận này giúp việc thực hiện [The Merge](/roadmap/merge) liền mạch hơn, giúp phần mềm máy khách dễ bảo trì và phát triển hơn, đồng thời cho phép tái sử dụng các máy khách riêng lẻ, ví dụ, trong [hệ sinh thái lớp 2](/layer-2/). + +![Máy khách thực thi và máy khách đồng thuận được ghép nối](./eth1eth2client.png) +Sơ đồ đơn giản hóa về một máy khách thực thi và máy khách đồng thuận được ghép nối. + +### Sự đa dạng của ứng dụng khách {#client-diversity} + +Cả [máy khách thực thi](/developers/docs/nodes-and-clients/#execution-clients) và [máy khách đồng thuận](/developers/docs/nodes-and-clients/#consensus-clients) đều tồn tại ở nhiều ngôn ngữ lập trình khác nhau do các nhóm khác nhau phát triển. + +Việc có nhiều cơ chế triển khai có thể làm cho mạng mạnh hơn bằng cách giảm sự phụ thuộc vào một mã nguồn duy nhất. Mục tiêu lý tưởng là đạt được sự đa dạng mà không có cơ chế nào chiếm ưu thế trong mạng lưới, từ đó loại bỏ một điểm yếu tiềm ẩn duy nhất. +Sự đa dạng về ngôn ngữ cũng thu hút một cộng đồng lập trình viên rộng lớn hơn và cho phép họ tạo ra các ngôn ngữ tích hợp mà họ thích. + +Tìm hiểu thêm về [sự đa dạng của máy khách](/developers/docs/nodes-and-clients/client-diversity/). + +Những triển khai này có điểm chung là chúng đều tuân theo một quy định duy nhất. Thông số kỹ thuật quyết định cách mà mạng lưới và blockchain Ethereum hoạt động. Mọi chi tiết kỹ thuật đều được định nghĩa và các thông số có thể được tìm thấy như sau: + +- Ban đầu, [Sách Vàng Ethereum](https://ethereum.github.io/yellowpaper/paper.pdf) +- [Thông số kỹ thuật thực thi](https://github.com/ethereum/execution-specs/) +- [Thông số kỹ thuật đồng thuận](https://github.com/ethereum/consensus-specs) +- [Các EIP](https://eips.ethereum.org/) được triển khai trong các [bản nâng cấp mạng](/ethereum-forks/) khác nhau + +### Theo dõi các nút trong mạng {#network-overview} + +Nhiều trình theo dõi cung cấp cái nhìn tổng quát theo thời gian thực về các nút trong mạng lưới Ethereum. Lưu ý rằng do tính chất của các mạng phi tập trung, những trình thu thập thông tin này chỉ có thể cung cấp một cái nhìn hạn chế về mạng và có thể đưa ra những kết quả khác nhau. + +- [Bản đồ các nút](https://etherscan.io/nodetracker) của Etherscan +- [Ethernodes](https://ethernodes.org/) của Bitfly +- [Nodewatch](https://www.nodewatch.io/) của Chainsafe, thu thập dữ liệu các nút đồng thuận +- [Monitoreth](https://monitoreth.io/) - của MigaLabs, một công cụ giám sát mạng phi tập trung +- [Báo cáo tình trạng mạng hàng tuần](https://probelab.io) - của ProbeLab, sử dụng [Nebula crawler](https://github.com/dennis-tra/nebula) và các công cụ khác + +## Các loại nút {#node-types} + +Nếu bạn muốn [chạy nút của riêng mình](/developers/docs/nodes-and-clients/run-a-node/), bạn nên hiểu rằng có các loại nút khác nhau tiêu thụ dữ liệu theo những cách khác nhau. In fact, clients can run three different types of nodes: light, full and archive. Trên thực tế, ứng dụng có thể chạy ba loại nút khác nhau: nút nhẹ, nút đầy đủ và nút lưu trữ. Đồng bộ hóa có nghĩa là nó có thể lấy thông tin mới nhất về trạng thái của Ethereum nhanh như thế nào. + +### Nút đầy đủ {#full-node} + +Các nút đầy đủ sẽ xác thực từng khối một của blockchain, bao gồm việc tải về và kiểm tra nội dung khối và dữ liệu trạng thái cho mỗi khối. Có nhiều loại nút đầy đủ khác nhau - một số bắt đầu từ khối genesis và xác minh từng khối trong toàn bộ lịch sử của blockchain. Các nút khác bắt đầu xác minh tại một khối gần đây hơn mà chúng tin là hợp lệ (ví dụ: 'đồng bộ hóa snap' của Geth). Bất kể bắt đầu xác thực ở đâu, các nút đầy đủ chỉ giữ một bản sao cục bộ của dữ liệu tương đối mới (thường là 128 khối mới nhất), cho phép xóa dữ liệu cũ để tiết kiệm không gian ổ đĩa. Dữ liệu cũ có thể được tạo lại khi cần. + +- Lưu trữ toàn bộ dữ liệu blockchain (mặc dù điều này sẽ được làm sạch định kỳ nên nút đầy đủ không lưu trữ tất cả dữ liệu trạng thái từ lúc khởi đầu). +- Tham gia vào quá trình xác thực khối, xác minh tất cả các khối và trạng thái. +- Tất cả các trạng thái có thể được truy xuất từ bộ nhớ cục bộ hoặc được tái tạo từ 'ảnh chụp' bởi một nút đầy đủ. +- Đáp ứng mạng lưới và cung cấp dữ liệu theo yêu cầu. + +### Nút lưu trữ {#archive-node} + +Các nút lưu trữ là những nút đầy đủ, chúng xác minh mọi khối từ lúc bắt đầu và không bao giờ xóa bất kỳ dữ liệu nào đã tải xuống. + +- Lưu trữ mọi thứ được giữ trong nút đầy đủ và xây dựng một kho lưu trữ các lịch sử trạng thái. Nó cần thiết nếu bạn muốn kiểm tra một cái gì đó như số dư tài khoản ở khối #4,000,000, hoặc chỉ đơn giản và đáng tin cậy để kiểm tra bộ giao dịch của bạn mà không cần xác minh chúng bằng cách theo dõi. +- Dữ liệu này thể hiện đơn vị terabyte, điều này khiến các nút lưu trữ trở nên không hấp dẫn với người dùng bình thường nhưng có thể hữu ích cho các dịch vụ như trình khám phá khối, nhà cung cấp ví và phân tích chuỗi. + +Việc đồng bộ ứng dụng ở chế độ khác ngoài lưu trữ sẽ dẫn đến dữ liệu blockchain bị cắt giảm. Điều này có nghĩa là không có kho lưu trữ tất cả các lịch sử trạng thái nhưng nút đầy đủ có thể xây dựng chúng theo yêu cầu. + +Tìm hiểu thêm về [các nút lưu trữ](/developers/docs/nodes-and-clients/archive-nodes). + +### Nút nhẹ {#light-node} + +Thay vì tải xuống từng khối, các nút nhẹ chỉ tải xuống tiêu đề của các khối. Những tiêu đề này chứa thông tin tóm tắt về nội dung của các khối. Bất kỳ thông tin nào khác mà nút nhẹ yêu cầu sẽ được yêu cầu từ một nút đầy đủ. Nút nhẹ sau đó có thể độc lập xác minh dữ liệu mà họ nhận được với các gốc trạng thái trong đầu khối. Cụm nút nhẹ cho phép người dùng tham gia vào mạng Ethereum mà không cần phần cứng mạnh mẽ hoặc băng thông cao cần thiết để chạy các nút hoàn chỉnh. Cuối cùng, các nút nhẹ có thể chạy trên điện thoại di động hoặc các thiết bị nhúng. Các nút nhẹ không tham gia vào sự đồng thuận (tức là chúng không thể là trình xác thực), nhưng chúng có thể truy cập chuỗi khối Ethereum với cùng chức năng và đảm bảo bảo mật như một nút đầy đủ. + +Các ứng dụng nhẹ là một lĩnh vực đang được phát triển tích cực cho Ethereum và chúng tôi mong đợi sẽ thấy các ứng dụng nhẹ mới cho lớp đồng thuận và lớp thực thi trong thời gian tới. +Cũng có những tuyến tiềm năng để cung cấp dữ liệu máy khách nhẹ qua [mạng gossip](https://www.ethportal.net/). Điều này có lợi vì mạng lưới tin đồn có thể hỗ trợ một mạng lưới các nút nhẹ mà không cần yêu cầu các nút đầy đủ phục vụ các yêu cầu. + +Ethereum chưa hỗ trợ một số lượng lớn các nút nhẹ, nhưng hỗ trợ nút nhẹ là một lĩnh vực dự kiến sẽ phát triển nhanh chóng trong tương lai gần. Cụ thể, các máy khách như [Nimbus](https://nimbus.team/), [Helios](https://github.com/a16z/helios) và [LodeStar](https://lodestar.chainsafe.io/) hiện đang tập trung nhiều vào các nút nhẹ. + +## Tại sao tôi nên vận hành một nút Ethereum? {#why-should-i-run-an-ethereum-node} + +Chạy một nút cho phép bạn sử dụng Ethereum trực tiếp, không cần tin tưởng và riêng tư, đồng thời hỗ trợ mạng lưới bằng cách giúp nó mạnh mẽ và phi tập trung hơn. + +### Lợi ích cho bạn {#benefits-to-you} + +Việc chạy nút riêng của bạn cho phép bạn sử dụng Ethereum một cách riêng tư, tự cung cấp và không cần tin tưởng. Bạn không cần phải tin tưởng vào mạng vì bạn có thể tự xác minh dữ liệu với ứng dụng của mình. "Đừng tin tưởng, hãy xác minh" là một phương châm phổ biến trong blockchain. + +- Nút của bạn xác minh tất cả các giao dịch và khối theo quy tắc đồng thuận một cách độc lập. Điều này có nghĩa là bạn không cần phải dựa vào bất kỳ nút nào khác trong mạng hoặc hoàn toàn tin tưởng chúng. +- Bạn có thể sử dụng ví Ethereum với nút riêng của mình. Bạn có thể sử dụng dapps một cách an toàn và riêng tư hơn vì bạn sẽ không phải làm lộ địa chỉ và số dư của mình cho các bên trung gian. Mọi thứ có thể được kiểm tra với ứng dụng của bạn. [MetaMask](https://metamask.io), [Frame](https://frame.sh/) và [nhiều loại ví khác](/wallets/find-wallet/) cung cấp tính năng nhập RPC, cho phép chúng sử dụng nút của bạn. +- Bạn có thể chạy và tự lưu trữ các dịch vụ khác mà phụ thuộc vào dữ liệu từ Ethereum. Chẳng hạn, điều này có thể là một trình xác thực Beacon Chain, phần mềm giống như layer 2, hạ tầng, công cụ khám phá khối, bộ xử lý thanh toán, v.v. +- Bạn có thể cung cấp các [điểm cuối RPC](/developers/docs/apis/json-rpc/) tùy chỉnh của riêng mình. Bạn thậm chí có thể cung cấp các điểm kết nối này công khai cho cộng đồng để giúp họ tránh xa những nhà cung cấp trung tâm lớn. +- Bạn có thể kết nối với nút của mình bằng **Giao tiếp giữa các tiến trình (IPC)** hoặc viết lại nút để tải chương trình của bạn dưới dạng một plugin. Điều này cho phép độ trễ thấp, rất hữu ích, ví dụ: khi xử lý nhiều dữ liệu bằng các thư viện web3 hoặc khi bạn cần thay thế các giao dịch của mình nhanh nhất có thể (tức là giao dịch đi trước). +- Bạn có thể trực tiếp staking ETH để bảo vệ mạng lưới và nhận thưởng. Xem [đặt cược solo](/staking/solo/) để bắt đầu. + +![Cách bạn truy cập Ethereum qua ứng dụng và các nút của bạn](./nodes.png) + +### Lợi ích cho mạng {#network-benefits} + +Một tập hợp đa dạng các nút là rất quan trọng cho sức khỏe, an ninh và khả năng hoạt động bền vững của Ethereum. + +- Các nút hoàn chỉnh thực thi các quy tắc đồng thuận nên họ không thể bị đánh lừa để chấp nhận các khối không tuân theo. Điều này cung cấp thêm bảo mật cho mạng vì nếu tất cả các nút đều là nút nhẹ, không thực hiện xác minh đầy đủ, thì các xác thực viên có thể tấn công mạng. +- Trong trường hợp một cuộc tấn công vượt qua các hàng rào phòng thủ kinh tế-mã hóa của [bằng chứng cổ phần](/developers/docs/consensus-mechanisms/pos/#what-is-pos), một cuộc khôi phục xã hội có thể được thực hiện bởi các nút đầy đủ chọn theo chuỗi trung thực. +- Nhiều nút trong mạng sẽ tạo ra một mạng lưới đa dạng và mạnh mẽ hơn, đó là mục tiêu cuối cùng của việc phi tập trung, giúp tạo ra một hệ thống đáng tin cậy và không bị kiểm duyệt. +- Các nút hoàn thiện cung cấp quyền truy cập vào dữ liệu blockchain cho các client nhẹ phụ thuộc vào nó. Các nút nhẹ không lưu trữ toàn bộ chuỗi khối, thay vào đó chúng xác minh dữ liệu thông qua [các gốc trạng thái trong phần đầu khối](/developers/docs/blocks/#block-anatomy). Họ có thể yêu cầu thêm thông tin từ các hoàn thiện nếu họ cần. + +Nếu bạn vận hành một nút hoàn thiện, toàn bộ mạng Ethereum sẽ được hưởng lợi từ điều đó, ngay cả khi bạn không vận hành một trình xác nhận. + +## Chạy nút của riêng bạn {#running-your-own-node} + +Bạn có muốn chạy client Ethereum của riêng mình không? + +Để có phần giới thiệu thân thiện với người mới bắt đầu, hãy truy cập trang [chạy một nút](/run-a-node) của chúng tôi để tìm hiểu thêm. + +Nếu bạn là người dùng có kỹ thuật hơn, hãy tìm hiểu sâu hơn về các chi tiết và tùy chọn về cách [khởi chạy nút của riêng bạn](/developers/docs/nodes-and-clients/run-a-node/). + +## Các lựa chọn thay thế {#alternatives} + +Setting up your own node can cost you time and resources but you don’t always need to run your own instance. Trong trường hợp này, bạn có thể sử dụng một nhà cung cấp API bên thứ ba. Để có cái nhìn tổng quan về việc sử dụng các dịch vụ này, hãy xem [nút dưới dạng dịch vụ](/developers/docs/nodes-and-clients/nodes-as-a-service/). + +Nếu có ai đó chạy một nút Ethereum với API công cộng trong cộng đồng của bạn, bạn có thể điều chỉnh ví của mình tới một nút cộng đồng qua tùy biến RPC và có được sự riêng tư hơn so với việc sử dụng một bên thứ ba nào đó mà bạn tin tưởng. + +Mặt khác, nếu bạn điều hành một khách hàng, bạn có thể chia sẻ nó với bạn bè của mình, những người có thể cần đến. + +## Các ứng dụng thực thi {#execution-clients} + +Cộng đồng Ethereum duy trì nhiều client thực thi mã nguồn mở (trước đây gọi là 'client Eth1' hoặc đơn giản là 'client Ethereum'), được phát triển bởi các đội ngũ khác nhau sử dụng các ngôn ngữ lập trình khác nhau. Điều này giúp mạng mạnh hơn và [đa dạng](/developers/docs/nodes-and-clients/client-diversity/) hơn. Mục tiêu lý tưởng là đạt được sự đa dạng mà không có khách hàng nào chiếm ưu thế để giảm thiểu bất kỳ điểm thất bại nào. + +Bảng này tóm tắt các clients khác nhau. Tất cả chúng đều vượt qua các [bài kiểm tra máy khách](https://github.com/ethereum/tests) và được bảo trì tích cực để luôn cập nhật các bản nâng cấp mạng. + +| Client | Ngôn ngữ | Hệ điều hành | Mạng | Chiến lược đồng bộ | State pruning | +| ------------------------------------------------------------------------------------------- | ------------------------ | --------------------- | ------------------------- | ------------------------------------------------------------------------------- | --------------- | +| [Geth](https://geth.ethereum.org/) | Go | Linux, Windows, macOS | Mainnet, Sepolia, Holesky | [Snap](#snap-sync), [Full](#full-sync) | Archive, Pruned | +| [Nethermind](https://www.nethermind.io/) | C#, .NET | Linux, Windows, macOS | Mainnet, Sepolia, Holesky | [Snap](#snap-sync) (không phục vụ), Fast, [Full](#full-sync) | Archive, Pruned | +| [Besu](https://besu.hyperledger.org/en/stable/) | Java | Linux, Windows, macOS | Mainnet, Sepolia, Holesky | [Snap](#snap-sync), [Fast](#fast-sync), [Full](#full-sync) | Archive, Pruned | +| [Erigon](https://github.com/ledgerwatch/erigon) | Go | Linux, Windows, macOS | Mainnet, Sepolia, Holesky | [Full](#full-sync) | Archive, Pruned | +| [Reth](https://reth.rs/) | Rust | Linux, Windows, macOS | Mainnet, Sepolia, Holesky | [Full](#full-sync) | Archive, Pruned | +| [EthereumJS](https://github.com/ethereumjs/ethereumjs-monorepo) _(beta)_ | TypeScript | Linux, Windows, macOS | Sepolia, Holesky | [Full](#full-sync) | Pruned | + +Để biết thêm về các mạng được hỗ trợ, hãy đọc về [các mạng Ethereum](/developers/docs/networks/). + +Mỗi khách hàng có những trường hợp sử dụng và lợi thế riêng, vì vậy bạn nên chọn một cái dựa trên sở thích của chính mình. Sự đa dạng cho phép các ứng dụng tập trung vào các tính năng khác nhau và các đối tượng người dùng khác nhau. Bạn có thể muốn chọn một ứng dụng dựa trên các tính năng, hỗ trợ, ngôn ngữ lập trình hoặc giấy phép. + +### Besu {#besu} + +Hyperledger Besu là một ứng dụng Ethereum cấp doanh nghiệp dành cho các mạng công cộng và có quyền truy cập. Nó cung cấp tất cả các tính năng của Ethereum Mainnet, từ việc theo dõi đến GraphQL, có khả năng giám sát rộng rãi và được hỗ trợ bởi ConsenSys, cả trong các kênh cộng đồng mở và thông qua các thỏa thuận mức dịch vụ thương mại cho các doanh nghiệp. Bạn có thể muốn chọn một ứng dụng dựa trên các tính năng, hỗ trợ, ngôn ngữ lập trình hoặc giấy phép. + +[Tài liệu](https://besu.hyperledger.org/en/stable/) mở rộng của Besu sẽ hướng dẫn bạn qua tất cả các chi tiết về các tính năng và thiết lập của nó. + +### Erigon {#erigon} + +Erigon, trước đây được biết đến với tên gọi Turbo-Geth, bắt đầu như một nhánh của Go Ethereum hướng tới hiệu suất tốc độ và tiết kiệm không gian ổ đĩa. Erigon là một triển khai hoàn toàn được thiết kế lại của Ethereum, hiện đang được viết bằng ngôn ngữ Go nhưng cũng có các triển khai bằng ngôn ngữ khác đang được phát triển. Mục tiêu của Erigon là cung cấp một triển khai Ethereum nhanh hơn, linh hoạt hơn và tối ưu hơn. Nó có thể thực hiện việc đồng bộ nút lưu trữ đầy đủ sử dụng khoảng 2TB dung lượng ổ đĩa, trong vòng chưa đầy 3 ngày. + +### Go Ethereum {#geth} + +Go Ethereum (viết tắt là Geth) là một trong những triển khai gốc của giao thức Ethereum. Hiện nay, đây là ứng dụng phổ biến nhất với số lượng người dùng lớn nhất và đa dạng công cụ dành cho người sử dụng và nhà phát triển. Nó được viết bằng ngôn ngữ Go, hoàn toàn mã nguồn mở và được cấp phép theo GNU LGPL v3. + +Tìm hiểu thêm về Geth trong [tài liệu](https://geth.ethereum.org/docs/) của nó. + +### Nethermind {#nethermind} + +Nethermind là một triển khai của Ethereum được tạo ra với công nghệ C# .NET, được cấp phép với LGPL-3.0, hoạt động trên tất cả các nền tảng chính bao gồm ARM. Nó cung cấp hiệu suất tuyệt vời với: + +- một máy ảo được tối ưu hóa +- Truy cập trạng thái +- mạng lưới và các tính năng phong phú như bảng điều khiển Prometheus/Grafana, hỗ trợ ghi nhật ký doanh nghiệp seq, theo dõi JSON-RPC và các plugin phân tích. + +Nethermind cũng có [tài liệu chi tiết](https://docs.nethermind.io), hỗ trợ nhà phát triển mạnh mẽ, một cộng đồng trực tuyến và hỗ trợ 24/7 cho người dùng cao cấp. + +### Reth {#reth} + +Reth (viết tắt của Rust Ethereum) là một triển khai nút đầy đủ Ethereum, tập trung vào việc thân thiện với người dùng, có tính mô-đun cao, nhanh chóng và hiệu quả. Reth ban đầu được xây dựng và phát triển bởi Paradigm, và được cấp phép theo các giấy phép Apache và MIT. + +Reth đã sẵn sàng cho sản xuất và phù hợp để sử dụng trong các môi trường quan trọng như staking hoặc dịch vụ yêu cầu thời gian hoạt động cao. Hoạt động tốt trong các trường hợp sử dụng mà yêu cầu hiệu suất cao với biên lợi nhuận lớn như RPC, MEV, lập chỉ mục, mô phỏng và các hoạt động P2P. + +Tìm hiểu thêm bằng cách xem [Sách Reth](https://reth.rs/), hoặc [kho GitHub của Reth](https://github.com/paradigmxyz/reth?tab=readme-ov-file#reth). + +### Đang phát triển {#execution-in-development} + +Những ứng dụng này vẫn đang ở giai đoạn phát triển sớm và chưa được khuyến nghị sử dụng trong sản xuất. + +#### EthereumJS {#ethereumjs} + +Khách hàng thực thi EthereumJS (EthereumJS) được viết bằng TypeScript và bao gồm một số gói, bao gồm các nguyên tố Ethereum cốt lõi được thể hiện qua các lớp Block, Transaction và Merkle-Patricia Trie, cũng như các thành phần cốt lõi của khách hàng bao gồm việc triển khai Máy ảo Ethereum (EVM), một lớp blockchain, và ngăn xếp mạng DevP2P. + +Tìm hiểu thêm về nó bằng cách đọc [tài liệu](https://github.com/ethereumjs/ethereumjs-monorepo/tree/master) của nó + +## Các ứng dụng đồng thuận {#consensus-clients} + +Có nhiều máy khách đồng thuận (trước đây gọi là máy khách 'Eth2') để hỗ trợ các [nâng cấp đồng thuận](/roadmap/beacon-chain/). Chúng chịu trách nhiệm cho tất cả logic liên quan đến sự đồng thuận bao gồm thuật toán chọn phân nhánh, xử lý các chứng thực và quản lý phần thưởng cũng như hình phạt của [bằng chứng cổ phần](/developers/docs/consensus-mechanisms/pos). + +| Client | Ngôn ngữ | Hệ điều hành | Mạng | +| ------------------------------------------------------------- | ---------- | --------------------- | ------------------------------------------------------------------- | +| [Lighthouse](https://lighthouse.sigmaprime.io/) | Rust | Linux, Windows, macOS | Chuỗi Hải Đăng, Holesky, Pyrmont, Sepolia, và nhiều hơn nữa | +| [Lodestar](https://lodestar.chainsafe.io/) | TypeScript | Linux, Windows, macOS | Chuỗi Hải Đăng, Holesky, Sepolia, và nhiều hơn nữa | +| [Nimbus](https://nimbus.team/) | Nim | Linux, Windows, macOS | Chuỗi Hải Đăng, Holesky, Sepolia, và nhiều hơn nữa | +| [Prysm](https://prysm.offchainlabs.com/docs/) | Go | Linux, Windows, macOS | Chuỗi Hải Đăng, Gnosis, Holesky, Pyrmont, Sepolia, và nhiều hơn nữa | +| [Teku](https://consensys.net/knowledge-base/ethereum-2/teku/) | Java | Linux, Windows, macOS | Chuỗi Hải Đăng, Gnosis, Holesky, Sepolia, và nhiều hơn nữa | +| [Grandine](https://docs.grandine.io/) | Rust | Linux, Windows, macOS | Chuỗi Hải Đăng, Holesky, Sepolia, và nhiều hơn nữa | + +### Lighthouse {#lighthouse} + +Lighthouse là một bản triển khai hệ thống đồng thuận, được viết bằng ngôn ngữ Rust và phát hành theo giấy phép Apache-2.0. Lighthouse được duy trì bởi Sigma Prime và đã ổn định, sẵn sàng cho môi trường sản xuất kể từ khi Chuỗi Hải Đăng ra đời. Nhiều doanh nghiệp, nhóm Cổ phần và cá nhân đang tin dùng. Nó hướng tới mục tiêu bảo mật, hiệu năng cao và khả năng tương tác trong nhiều môi trường khác nhau, từ máy tính cá nhân đến các hệ thống triển khai tự động phức tạp. + +Tài liệu có thể được tìm thấy trong [Sách Lighthouse](https://lighthouse-book.sigmaprime.io/) + +### Lodestar {#lodestar} + +Lodestar là một bản triển khai hệ thống đồng thuận đã sẵn sàng cho môi trường sản xuất, được viết bằng Typescript theo giấy phép LGPL-3.0. Nó được duy trì bởi Lưới Bảo vệ Hệ thống và là hệ thống đồng thuận mới nhất dành cho người đóng góp cổ phần cá nhân, nhà phát triển và nhà nghiên cứu. Lodestar bao gồm một nút ngọn hải đăng và một hệ thống xác thực, được vận hành bởi các triển khai giao thức Ethereum viết bằng JavaScript. Lodestar hướng đến việc cải thiện khả năng sử dụng của Ethereum thông qua hệ thống ánh sáng, mở rộng khả năng tiếp cận cho nhiều nhà phát triển hơn và tiếp tục đóng góp vào sự đa dạng của hệ sinh thái. + +Thông tin thêm có thể được tìm thấy trên [trang web Lodestar](https://lodestar.chainsafe.io/) + +### Nimbus {#nimbus} + +Nimbus là một bản triển khai của hệ thống đồng thuận được viết bằng ngôn ngữ Nim, phát hành theo giấy phép Apache-2.0. Đây là một hệ thống đã sẵn sàng cho môi trường sản xuất, hiện đang được sử dụng bởi những người gửi cổ phần độc lập và các hồ cổ phần. Nimbus được thiết kế với hiệu quả tài nguyên làm trọng tâm, cho phép chạy dễ dàng trên cả các thiết bị hạn chế tài nguyên lẫn hạ tầng doanh nghiệp, mà vẫn đảm bảo tính ổn định và hiệu suất phần thưởng. Dấu chân tài nguyên nhẹ hơn đồng nghĩa với việc hệ thống có biên độ an toàn lớn hơn khi mạng lưới rơi vào tình trạng căng thẳng hoặc quá tải. + +Tìm hiểu thêm trong [tài liệu Nimbus](https://nimbus.guide/) + +### Prysm {#prysm} + +Prysm là một hệ thống đồng thuận đầy đủ tính năng, mã nguồn mở, được viết bằng Go và phân phối theo giấy phép GPL-3.0. Prysm đi kèm với tùy chọn giao diện phần mềm web UI, đồng thời ưu tiên trải nghiệm người dùng, tài liệu hướng dẫn rõ ràng và khả năng tùy chỉnh cao, phù hợp cho cả người dùng tự gửi cổ phần tại nhà lẫn tổ chức cổ phần quy mô lớn. + +Truy cập [tài liệu Prysm](https://prysm.offchainlabs.com/docs/) để tìm hiểu thêm. + +### Teku {#teku} + +Teku là một trong những hệ thống đồng thuận gốc từ thời Chuỗi Hải Đăng sự sáng thế, được phát triển ngay từ những ngày đầu của Ethereum Bằng chứng Cổ phần. Bên cạnh những mục tiêu quen thuộc (bảo mật, độ bền vững, tính ổn định, khả năng sử dụng và hiệu năng), Teku đặc biệt hướng đến việc tuân thủ đầy đủ mọi tiêu chuẩn của các hệ thống đồng thuận. + +Teku cung cấp các tùy chọn triển khai hết sức linh hoạt. Nút Ngọn hải đăng và hệ thống xác thực có thể được chạy cùng nhau trong một tiến trình duy nhất, điều này vô cùng tiện lợi cho những người cổ phần cá nhân; hoặc chúng cũng có thể được chạy tách biệt để phục vụ các hoạt động cổ phần phức tạp hơn. Ngoài ra, Teku hoàn toàn có thể tương tác với [Web3Signer](https://github.com/ConsenSys/web3signer/) để bảo mật khóa ký và bảo vệ chống chém. + +Teku được viết bằng Java và có giấy phép Apache 2,0. Teku được viết bằng Java và có giấy phép Apache 2.0. Tìm hiểu thêm trong [tài liệu Teku](https://docs.teku.consensys.net/en/latest/). + +### Grandine {#grandine} + +Grandine là một thực hiện khách đồng thuận, được viết bằng Rust theo giấy phép GPL-3.0. Nó được duy trì bởi Đội ngũ Cốt lõi Grandine và nhanh chóng, hiệu suất cao và nhẹ. Nó phù hợp với nhiều loại stakers khác nhau, từ những stakers đơn lẻ chạy trên các thiết bị tài nguyên thấp như Raspberry Pi đến tổ chức stakers lớn điều hành hàng chục nghìn trình xác thực. + +Tài liệu có thể được tìm thấy trong [Sách Grandine](https://docs.grandine.io/) + +## Các chế độ đồng bộ hóa {#sync-modes} + +Để theo dõi và xác minh dữ liệu hiện tại trên mạng, khách hàng Ethereum cần đồng bộ với trạng thái mạng mới nhất. Điều này được thực hiện bằng cách tải dữ liệu từ các đồng nghiệp, xác minh tính toàn vẹn của chúng một cách an toàn bằng mật mã, và xây dựng một cơ sở dữ liệu blockchain cục bộ. + +Chế độ đồng bộ hóa đại diện cho các phương pháp khác nhau trong quá trình này với nhiều thỏa hiệp khác nhau. Khách hàng cũng khác nhau trong việc triển khai các thuật toán đồng bộ. Luôn tham khảo tài liệu chính thức của khách hàng mà bạn đã chọn để biết thông tin chi tiết về cách triển khai. + +### Các chế độ đồng bộ hóa của lớp thực thi {#execution-layer-sync-modes} + +Lớp thực thi có thể hoạt động ở các chế độ khác nhau để phù hợp với các trường hợp sử dụng khác nhau, từ việc tái thực thi trạng thái toàn cầu của chuỗi khối đến việc chỉ đồng bộ với đỉnh của chuỗi từ một điểm kiểm tra đáng tin cậy. + +#### Đồng bộ hóa đầy đủ {#full-sync} + +Một đồng bộ hoàn chỉnh tải xuống tất cả các khối (bao gồm tiêu đề và nội dung khối) và tái tạo trạng thái của chuỗi khối theo từng bước bằng cách thực hiện từng khối từ khởi nguồn. + +- Giảm thiểu sự tin cậy và cung cấp mức độ an ninh cao nhất bằng cách xác minh từng giao dịch. +- Với số lượng giao dịch ngày càng tăng, quá trình xử lý tất cả các giao dịch có thể mất từ vài ngày đến vài tuần. + +[Các nút lưu trữ](#archive-node) thực hiện đồng bộ hóa đầy đủ để xây dựng (và giữ lại) lịch sử hoàn chỉnh về các thay đổi trạng thái được thực hiện bởi mọi giao dịch trong mọi khối. + +#### Đồng bộ hóa nhanh {#fast-sync} + +Giống như việc đồng bộ hoàn chỉnh, việc đồng bộ nhanh tải xuống tất cả các khối (bao gồm tiêu đề, giao dịch và biên nhận). Tuy nhiên, thay vì xử lý lại các giao dịch lịch sử, một quá trình đồng bộ nhanh dựa vào các biên lai cho đến khi đạt đến đỉnh gần đây, khi đó nó chuyển sang nhập và xử lý các khối để cung cấp một nút hoàn chỉnh. + +- Chiến lược đồng bộ nhanh. +- Giảm nhu cầu xử lý để ưu tiên sử dụng băng thông. + +#### Đồng bộ hóa snap {#snap-sync} + +Đồng bộ snap cũng xác minh chuỗi từng khối một. Tuy nhiên, thay vì bắt đầu từ khối genesis, một bản đồng bộ snap sẽ bắt đầu từ một điểm kiểm tra 'đáng tin' gần đây hơn, mà đã được biết là một phần của chuỗi khối thực. Nút lưu lại các điểm kiểm tra định kỳ trong khi xóa dữ liệu cũ hơn một khoảng thời gian nhất định. Các bức ảnh chụp này được sử dụng để tái tạo dữ liệu trạng thái khi cần thiết, thay vì lưu trữ nó mãi mãi. + +- Chiến lược đồng bộ nhanh nhất, hiện đang là mặc định trên mạng chính Ethereum. +- Tiết kiệm rất nhiều dung lượng đĩa và băng thông mạng mà không hi sinh tính bảo mật. + +[Thêm về đồng bộ hóa snap](https://github.com/ethereum/devp2p/blob/master/caps/snap.md). + +#### Đồng bộ hóa nhẹ {#light-sync} + +Client nhẹ tải xuống tất cả các tiêu đề khối, dữ liệu khối và kiểm tra một số một cách ngẫu nhiên. Chỉ đồng bộ hóa đầu chuỗi từ điểm kiểm tra tin cậy. + +- Chỉ nhận được trạng thái mới nhất trong khi dựa vào sự tin tưởng vào các nhà phát triển và cơ chế đồng thuận. +- Khách hàng sẵn sàng sử dụng với trạng thái mạng hiện tại trong vài phút. + +**Lưu ý** Đồng bộ hóa nhẹ chưa hoạt động với Ethereum bằng chứng cổ phần - các phiên bản mới của đồng bộ hóa nhẹ sẽ sớm được phát hành! + +[Thêm về các máy khách nhẹ](/developers/docs/nodes-and-clients/light-clients/) + +### Các chế độ đồng bộ hóa của lớp đồng thuận {#consensus-layer-sync-modes} + +#### Đồng bộ hóa lạc quan {#optimistic-sync} + +Đồng bộ lạc quan là một chiến lược đồng bộ sau khi hợp nhất, được thiết kế theo dạng tùy chọn và tương thích ngược, cho phép các nút thực hiện đồng bộ thông qua những phương thức đã được thiết lập sẵn. Công cụ thực thi có thể nhập các khối beacon một cách _lạc quan_ mà không cần xác minh đầy đủ, tìm phần đầu mới nhất, sau đó bắt đầu đồng bộ hóa chuỗi bằng các phương pháp trên. Sau đó, khi client thực thi đã đồng bộ, nó sẽ thông báo cho client đồng thuận về tính hợp lệ của các giao dịch trong Beacon Chain. + +[Thêm về đồng bộ hóa lạc quan](https://github.com/ethereum/consensus-specs/blob/dev/sync/optimistic.md) + +#### Đồng bộ hóa điểm kiểm tra {#checkpoint-sync} + +Một đồng bộ hóa checkpoint, còn được biết đến là đồng bộ hóa chủ yếu yếu, tạo ra trải nghiệm người dùng tốt hơn cho việc đồng bộ hóa một Nút Beacon. Nó dựa trên các giả định về [tính chủ quan yếu](/developers/docs/consensus-mechanisms/pos/weak-subjectivity/) cho phép đồng bộ hóa Chuỗi Hải Đăng từ một điểm kiểm tra tính chủ quan yếu gần đây thay vì từ khối khởi nguyên. Đồng bộ hóa điểm kiểm tra giúp thời gian đồng bộ hóa ban đầu nhanh hơn đáng kể với các giả định tin cậy tương tự như đồng bộ hóa từ [khối khởi nguyên](/glossary/#genesis-block). + +Trên thực tế, điều này có nghĩa là nút của bạn kết nối với một dịch vụ từ xa để tải về các trạng thái đã hoàn tất gần đây và tiếp tục xác minh dữ liệu từ điểm đó. Bên thứ ba cung cấp dữ liệu được tin cậy và nên được lựa chọn một cách cẩn thận. + +[Thêm về đồng bộ hóa điểm kiểm tra](https://notes.ethereum.org/@djrtwo/ws-sync-in-practice) + +## Đọc thêm {#further-reading} + +- [Ethereum 101 - Phần 2 - Tìm hiểu về các nút](https://kauri.io/ethereum-101-part-2-understanding-nodes/48d5098292fd4f11b251d1b1814f0bba/a) _– Wil Barnes, ngày 13 tháng 2 năm 2019_ +- [Chạy các nút đầy đủ Ethereum: Hướng dẫn cho người có ít động lực](https://medium.com/@JustinMLeroux/running-ethereum-full-nodes-a-guide-for-the-barely-motivated-a8a13e7a0d31) _– Justin Leroux, ngày 7 tháng 11 năm 2019_ + +## Các chủ đề liên quan {#related-topics} + +- [Các khối](/developers/docs/blocks/) +- [Các mạng](/developers/docs/networks/) + +## Các hướng dẫn liên quan {#related-tutorials} + +- [Biến Raspberry Pi 4 của bạn thành một nút trình xác thực chỉ bằng cách flash thẻ MicroSD – Hướng dẫn cài đặt](/developers/tutorials/run-node-raspberry-pi/) _– Flash Raspberry Pi 4 của bạn, cắm cáp ethernet, kết nối ổ SSD và bật nguồn thiết bị để biến Raspberry Pi 4 thành một nút Ethereum đầy đủ chạy lớp thực thi (Mainnet) và/hoặc lớp đồng thuận (Chuỗi Hải Đăng / trình xác thực)._ diff --git a/public/content/translations/vi/developers/docs/nodes-and-clients/light-clients/index.md b/public/content/translations/vi/developers/docs/nodes-and-clients/light-clients/index.md new file mode 100644 index 00000000000..adc8808414f --- /dev/null +++ b/public/content/translations/vi/developers/docs/nodes-and-clients/light-clients/index.md @@ -0,0 +1,61 @@ +--- +title: "Các ứng dụng nhẹ" +description: "Giới thiệu về nút nhẹ Ethereum(Ethereum light client)." +lang: vi +--- + +Chạy một nút đầy đủ (full node) là cách thức không cần sự tin cậy, đảm bảo sự riêng tư, phi tập trung và chống kiểm duyệt nhất để tương tác với Ethereum. Với một nút đầy đủ, bạn giữ bản sao chuỗi khối của riêng mình mà bạn có thể truy vấn ngay lập tức và bạn có quyền truy cập trực tiếp vào mạng ngang hàng của Ethereum. Tuy nhiên, việc chạy một nút đầy đủ đòi hỏi một lượng bộ nhớ, bộ lưu trữ và CPU đáng kể. Điều này có nghĩa là không phải ai cũng có thể chạy nút riêng của mình. Có một số giải pháp cho vấn đề này trên lộ trình phát triển của Ethereum, bao gồm sự phi trạng thái(statelessness), nhưng chúng còn nhiều năm nữa mới được triển khai. Lời giải ngắn hạn cho vấn đề này là đánh đổi một số lợi ích của việc chạy nút đầy đủ để có được hiệu suất cao, cho phép các nút chạy với cấu hình phần cứng rất thấp. Các nút thực hiện sự đánh đổi này được gọi là nút nhẹ(light clients). + +## Máy khách gọn nhẹ là gì {#what-is-a-light-client} + +Nút nhẹ là nút chạy phần mềm light client. Thay vì giữ các bản sao cục bộ của dữ liệu blockchain và xác minh một cách độc lập tất cả các thay đổi, thì họ yêu cầu các dữ liệu cần thiết từ một số nhà cung cấp. Nhà cung cấp ở đây có thể là một kết nối trực tiếp tới một nút đầy đủ hoặc thông qua một số máy chủ RPC tập trung. Dữ liệu sau đó được xác minh bởi nút nhẹ, cho phép nó bắt kịp với phần đầu của chuỗi. Nút nhẹ chỉ xử lý các tiêu đề khối, đôi khi sẽ tải xuống toàn bộ khối. Nút có thể khác nhau về dung lượng, tùy thuộc vào sự phối hợp giữ Client nhẹ và đầy đủ mà chúng đang chạy. Ví dụ: cấu hình nhẹ nhất sẽ là chạy ứng dụng Client thực thi nhẹ (light execution client) và ứng dụng Client đồng thuận nhẹ (light consensus client). Cũng có khả năng là nhiều nút sẽ chọn chạy các máy khách đồng thuận nhẹ với các máy khách thực thi đầy đủ hoặc ngược lại. khách thực thi đầy đủ hoặc ngược lại. + +## Cách Client nhẹ hoạt động? {#how-do-light-clients-work} + +Khi Ethereum sử dung cơ chế đồng thuận bằng chứng cổ phần, một hạ tầng mới được giới thiệu chuyên dụng cho hỗ trợ Client nhẹ. Cách thức hoạt động của nó là chọn ngẫu nhiên một tập hợp con gồm 512 nút xác thực sau mỗi 1,1 ngày để đóng vai trò là một **ủy ban đồng bộ**. Ủy ban đồng bộ sẽ ký vào đầu chuỗi của khối hiện tại. Mỗi một đầu khối chứa một đa chữ ký của nút xác thực đồng bộ trong ủy ban và một trường Bits thể hiện rằng nút xác thực nào đã ký và nút nào không. Mỗi một đầu chuỗi cũng bao gồm một danh sách nút xác thực được mong đợi tham gia ký khối tiếp theo. Điều này có nghĩa rằng Client nhẹ có thể nhanh chóng thấy rằng ủy ban đồng bộ đã ký vào dữ liệu mà họ nhận được, và họ cũng kiểm tra việc ủy ban đồng bộ này là đúng bằng cách với danh sách ủy ban đồng thuận mà nó được thông báo sẽ mong đợi trong khối trước đó. Bằng cách này, Client nhẹ có thể liên tục cập nhật thông tin về khối Ethereum mới nhất mà không cần thực sự tải xuống toàn bộ khối, chỉ cần tải đầu chuỗi chứa thông tin tóm tắt. + +Trên lớp thực thi không có một mô tả cụ thể cho Client thực thi nhẹ. Phạm vi của một Client thực thi nhẹ có thể khác nhau: từ "chế độ nhẹ" của một Client thực thi đầy đủ — tức là vẫn có đầy đủ chức năng EVM và mạng của một nút đầy đủ nhưng chỉ xác minh đầu chuỗi mà không tải xuống dữ liệu đi kèm — cho đến một Client tối giản hơn, phụ thuộc nhiều vào việc chuyển tiếp các yêu cầu đến một bên cung cấp RPC để tương tác với Ethereum. + +## Tại sao Client nhẹ lại quan trọng? {#why-are-light-clients-important} + +Client nhẹ quan trọng bởi vì cho phép người dùng xác thực dữ liệu đến thay vì mù quán tin vào người cung cấp thông tin rằng thông tin họ cung cấp là đúng và đầy đủ, trong lúc sử dụng một phần rất nhỏ của tài nguyên tính toán của một nút đầy đủ. Dữ liệu mà các Client nhẹ nhận được có thể được đối chiếu với đầu chuỗi mà chúng biết đã được ký bởi ít nhất 2/3 trong một tập hợp ngẫu nhiên gồm 512 nút xác thực của Ethereum. Đây là một bằng chứng rất thuyết phục cho thấy dữ liệu đó là chính xác. + +Client nhẹ chỉ sử dụng một lượng rất nhỏ sức mạnh tính toán, bộ nhớ và lưu trữ, vì vậy nó có thể chạy trên điện thoại di động, được nhúng trong một ứng dụng hoặc như một phần của trình duyệt. Client nhẹ là cách để giảm thiểu việc cần sự tin tưởng qua Ethereum, nhưng vẫn mượt mà khi dựa vào một nhà cung cấp thứ ba. + +Hãy lấy một ví dụ đơn giản. Tưởng tượng rằng bạn muốn xem số dư tài khoản của bạn. Để làm điều này bạn phải yêu cầu đến nút Ethereum. Nút đó sẽ kiểm tra trạng thái của Ethereum đang có trên cục bộ về thông tin số dư của tài khoản đó và trả về kết quả. Nếu bạn không có quyền truy cập trực tiếp vào một nút, thì có những nhà vận hành tập trung cung cấp dữ liệu này dưới dạng dịch vụ. Bạn sẽ phải gửi yêu cầu cho họ, họ kiểm tra nút của họ, và trả kết quả về cho bạn. Vấn đề với việc này là bạn phải tin người cung cấp gửi bạn kết quả đúng. Bạn không bao giờ biết được kết quả có đúng không vì bạn không xác thực được bằng chính mình. + +Một Client nhẹ sẽ giải quyết vấn đề này. Bạn vẫn sẽ yêu cầu thông tin từ người cung cấp bên ngoài, nhưng khi bạn nhận dữ liệu nó sẽ đi kèm với bằng chứng mà nút nhẹ của bạn có thể kiểm tra lại thông tin mà nó nhận được ở đầu chuỗi. Điều này có nghĩa Ethereum đơn giản hóa việc xác thực tính đúng sai của dữ liệu thay vì phải tin vào nhà cung cấp. + +## Những đổi mới nào mà Client nhẹ mang lại? {#what-innovations-do-light-clients-enable} + +Lợi ích chính của Client nhẹ là cho phép nhiều người hơn truy cập Ethereum một cách độc lập, với yêu cầu phần cứng không đáng kể và ít phụ thuộc vào bên thứ ba. Điều này tốt cho người dùng vì họ có thể tự xác minh dữ liệu của mình, và cũng tốt cho mạng lưới vì nó làm tăng số lượng và sự đa dạng của các nút đang xác minh chuỗi. + +Khả năng chạy các nút Ethereum trên những thiết bị có bộ nhớ, dung lượng lưu trữ và sức mạnh xử lý rất nhỏ là một trong những lĩnh vực đổi mới lớn mà Client nhẹ mở ra. Trong khi hiện nay các nút Ethereum yêu cầu nhiều tài nguyên tính toán, thì Client nhẹ có thể được nhúng vào trình duyệt, chạy trên điện thoại di động, và thậm chí có thể trên các thiết bị nhỏ hơn như đồng hồ thông minh. Điều này có nghĩa ví Ethereum với Client trong đó sẽ chạy trên điện thoại di động. Điều này có nghĩa là các ví di động có thể trở nên phi tập trung hơn nhiều, vì chúng sẽ không phải tin tưởng vào các nhà cung cấp dữ liệu tập trung để lấy dữ liệu. + +Một phần mở rộng của điều này là việc kích hoạt các thiết bị **Internet of things (IoT)**. Một Client nhẹ có thể được dùng để nhanh chóng chứng minh bạn sở hữu một lượng Token hoặc một NFT nào đó, với tất cả các đảm bảo an toàn từ ủy ban đồng bộ, và từ đó kích hoạt một hành động trên mạng lưới IoT. Hãy tưởng tượng một [dịch vụ cho thuê xe đạp](https://youtu.be/ZHNrAXf3RDE?t=929) sử dụng một ứng dụng có máy khách gọn nhẹ được nhúng để nhanh chóng xác minh rằng bạn sở hữu NFT của dịch vụ cho thuê đó, và nếu vậy, sẽ mở khóa một chiếc xe đạp để bạn có thể đi! + +Ethereum Rollups cũng sẽ hưởng lợi tù Clients nhẹ. Một trong những vấn đề của Rollups đã là những vụ Hack nhắm vào cầu nối cho phép quỹ di chuyển từ mạng chính Ethereum đến Rollup. Một lỗ hổng là các cổng dữ liệu mà Rollups sử dụng để phát hiện việc một người dùng đã gửi tiền vào cầu nối. Nếu một cổng dữ liệu cung cấp dữ liệu sai, chúng có thể đánh lừa Rollup khiến nó tưởng rằng đã có khoản gửi vào cầu nối và từ đó giải phóng sai tiền. Một Client nhẹ được nhúng trong Rollup có thể được dùng để chống lại các cổng dữ liệu bị hỏng, bởi vì khoản gửi vào cầu nối có thể đi kèm với một bằng chứng mà Rollup có thể xác minh trước khi giải phóng bất kỳ Token nào. Cùng một khái niệm này cũng có thể được áp dụng cho các cầu nối liên chuỗi khác. + +Client nhẹ cũng được dùng trong nâng cấp ví Ethereum. Thay vì tin tưởng dữ liệu từ nhà cung cấp RPC, ví của bạn có thể xác thực dữ liệu bằng cách sử dụng Client nhẹ nhúng. Điều này sẽ thêm bảo mật vào ví của bạn. Nếu nhà cung cấp RPC không trung thực và cung cấp cho bạn dữ liệu sai, Client nhẹ được nhúng sẽ báo bạn điều đó! + +## Tình trạng phát triển của Client nhẹ hiện nay như thế nào? {#current-state-of-development} + +Hiện có một số Client nhẹ đang được phát triển, bao gồm Client nhẹ cho thực thi, đồng thuận, và loại kết hợp thực thi/đồng thuận. Đây là những bản triển khai Client nhẹ mà chúng tôi biết tại thời điểm viết trang này: + +- [Lodestar](https://github.com/ChainSafe/lodestar/tree/unstable/packages/light-client): máy khách đồng thuận gọn nhẹ bằng TypeScript +- [Helios](https://github.com/a16z/helios): máy khách gọn nhẹ thực thi và đồng thuận kết hợp bằng Rust +- [Geth](https://github.com/ethereum/go-ethereum/tree/master/beacon/light): chế độ gọn nhẹ cho máy khách thực thi (đang phát triển) bằng Go +- [Nimbus](https://nimbus.guide/el-light-client.html): máy khách đồng thuận gọn nhẹ bằng Nim + +Theo chúng tôi được biết, chưa có sản phẩm nào trong số này được coi là sẵn sàng để sản xuất. + +Ngoài ra, còn rất nhiều việc đang được thực hiện để cải thiện các cách mà các máy khách gọn nhẹ có thể truy cập dữ liệu Ethereum. Hiện tại, các máy khách gọn nhẹ dựa vào các yêu cầu RPC tới các nút đầy đủ sử dụng mô hình máy khách/máy chủ, nhưng trong tương lai, dữ liệu có thể được yêu cầu theo cách phi tập trung hơn bằng cách sử dụng một mạng chuyên dụng như [Mạng Portal](https://www.ethportal.net/) có thể phục vụ dữ liệu cho các máy khách gọn nhẹ bằng giao thức gossip ngang hàng. + +Các mục khác trong [lộ trình](/roadmap/) như [cây Verkle](/roadmap/verkle-trees/) và [tính không trạng thái](/roadmap/statelessness/) cuối cùng sẽ mang lại sự đảm bảo an ninh của các máy khách gọn nhẹ ngang bằng với các máy khách đầy đủ. + +## Đọc thêm {#further-reading} + +- [Zsolt Felfodhi nói về các máy khách Geth gọn nhẹ](https://www.youtube.com/watch?v=EPZeFXau-RE) +- [Etan Kissling nói về mạng lưới máy khách gọn nhẹ](https://www.youtube.com/watch?v=85MeiMA4dD8) +- [Etan Kissling nói về các máy khách gọn nhẹ sau The Merge](https://www.youtube.com/watch?v=ZHNrAXf3RDE) +- [Piper Merriam: Con đường quanh co đến các máy khách gọn nhẹ có chức năng](https://snakecharmers.ethereum.org/the-winding-road-to-functional-light-clients/) diff --git a/public/content/translations/vi/developers/docs/nodes-and-clients/node-architecture/index.md b/public/content/translations/vi/developers/docs/nodes-and-clients/node-architecture/index.md new file mode 100644 index 00000000000..872bc731f86 --- /dev/null +++ b/public/content/translations/vi/developers/docs/nodes-and-clients/node-architecture/index.md @@ -0,0 +1,59 @@ +--- +title: "Kiến trúc nốt" +description: "Giới thiệu về cách tổ chức các nút Ethereum." +lang: vi +--- + +Một nút Ethereum bao gồm hai máy khách: một [máy khách thực thi](/developers/docs/nodes-and-clients/#execution-clients) và một [máy khách đồng thuận ](/developers/docs/nodes-and-clients/#consensus-clients). Để một nút đề xuất một khối mới, nó cũng phải chạy một [máy khách xác thực](#validators). + +Khi Ethereum sử dụng [bằng chứng công việc](/developers/docs/consensus-mechanisms/pow/), một máy khách thực thi là đủ để chạy một nút Ethereum đầy đủ. Tuy nhiên, kể từ khi triển khai [bằng chứng cổ phần](/developers/docs/consensus-mechanisms/pow/), máy khách thực thi phải được sử dụng cùng với một phần mềm khác được gọi là [máy khách đồng thuận ](/developers/docs/nodes-and-clients/#consensus-clients). + +Sơ đồ dưới đây cho thấy mối quan hệ giữa hai máy khách Ethereum. Hai máy khách kết nối với các mạng ngang hàng (P2P) tương ứng của riêng chúng. Cần có các mạng P2P riêng biệt vì các máy khách thực thi lan truyền các giao dịch qua mạng P2P của chúng, cho phép chúng quản lý vùng giao dịch cục bộ của mình, trong khi các máy khách đồng thuận lan truyền các khối qua mạng P2P của chúng, cho phép sự đồng thuận và phát triển chuỗi. + +![](node-architecture-text-background.png) + +_Có một số tùy chọn cho máy khách thực thi bao gồm Erigon, Nethermind và Besu_. + +Để cấu trúc hai máy khách này hoạt động, các máy khách đồng thuận phải chuyển các gói giao dịch cho máy khách thực thi. Máy khách thực thi thực hiện các giao dịch cục bộ để xác thực rằng các giao dịch đó không vi phạm bất kỳ quy tắc nào của Ethereum và bản cập nhật được đề xuất cho trạng thái của Ethereum là chính xác. Khi một nút được chọn làm trình sản xuất khối, phiên bản máy khách đồng thuận của nó sẽ yêu cầu các gói giao dịch từ máy khách thực thi để đưa vào khối mới và thực thi chúng để cập nhật trạng thái chung. Máy khách đồng thuận điều khiển máy khách thực thi thông qua kết nối RPC cục bộ bằng [Engine API](https://github.com/ethereum/execution-apis/blob/main/src/engine/common.md). + +## Máy khách thực thi làm gì? {#execution-client} + +Máy khách thực thi chịu trách nhiệm xác thực, xử lý và lan truyền giao dịch, cùng với việc quản lý trạng thái và hỗ trợ Máy ảo Ethereum ([EVM](/developers/docs/evm/)). Nó **không** chịu trách nhiệm xây dựng khối, lan truyền khối hoặc xử lý logic đồng thuận. Những việc này thuộc phạm vi của máy khách đồng thuận . + +Máy khách thực thi tạo ra các tải trọng thực thi - danh sách các giao dịch, cây trạng thái được cập nhật và các dữ liệu liên quan đến việc thực thi khác. Các máy khách đồng thuận bao gồm tải trọng thực thi trong mọi khối. Máy khách thực thi cũng chịu trách nhiệm thực thi lại các giao dịch trong các khối mới để đảm bảo chúng hợp lệ. Việc thực thi các giao dịch được thực hiện trên máy tính nhúng của máy khách thực thi, được gọi là [Máy ảo Ethereum (EVM)](/developers/docs/evm). + +Máy khách thực thi cũng cung cấp giao diện người dùng cho Ethereum thông qua [các phương thức RPC](/developers/docs/apis/json-rpc) cho phép người dùng truy vấn chuỗi khối Ethereum, gửi giao dịch và triển khai các hợp đồng thông minh. Thông thường, các lệnh gọi RPC được xử lý bởi một thư viện như [Web3js](https://docs.web3js.org/), [Web3py](https://web3py.readthedocs.io/en/v5/), hoặc bởi một giao diện người dùng như ví trình duyệt. + +Tóm lại, máy khách thực thi là: + +- một cổng kết nối của người dùng đến Ethereum +- nơi chứa Máy ảo Ethereum, trạng thái của Ethereum và vùng giao dịch. + +## Máy khách đồng thuận làm gì? {#consensus-client} + +Máy khách đồng thuận xử lý tất cả logic cho phép một nút đồng bộ với mạng Ethereum. Điều này bao gồm việc nhận các khối từ các máy ngang hàng và chạy thuật toán lựa chọn phân nhánh để đảm bảo nút luôn đi theo chuỗi có sự tích lũy nhiều nhất các chứng thực (được tính trọng số theo số dư hiệu dụng của nút xác thực). Tương tự như máy khách thực thi, các máy khách đồng thuận có mạng P2P riêng mà qua đó chúng chia sẻ các khối và chứng thực. + +Máy khách đồng thuận không tham gia vào việc chứng thực hoặc đề xuất các khối - việc này được thực hiện bởi một nút xác thực, một tiện ích bổ sung tùy chọn cho một máy khách đồng thuận . Một máy khách đồng thuận không có nút xác thực chỉ theo kịp phần đầu của chuỗi, cho phép nút duy trì đồng bộ. Điều này cho phép người dùng giao dịch với Ethereum bằng máy khách thực thi của họ, tự tin rằng họ đang ở trên đúng chuỗi. + +## Người xác thực {#validators} + +Việc đặt cược và chạy phần mềm nút xác thực giúp một nút đủ điều kiện được chọn để đề xuất một khối mới. Các nhà vận hành nút có thể thêm một nút xác thực vào các máy khách đồng thuận của họ bằng cách ký gửi 32 ETH vào hợp đồng ký gửi. Máy khách xác thực đi kèm với máy khách đồng thuận và có thể được thêm vào một nút bất kỳ lúc nào. Nút xác thực xử lý các chứng thực và đề xuất khối. Nó cũng cho phép một nút tích lũy phần thưởng hoặc mất ETH thông qua các hình phạt hoặc slashing. + +[Thêm về việc đặt cược](/staking/). + +## So sánh các thành phần của một nút {#node-comparison} + +| Máy khách thực thi | Máy khách đồng thuận | Nút xác thực | +| ----------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------ | +| Lan truyền các giao dịch qua mạng P2P của nó | Lan truyền các khối và chứng thực qua mạng P2P của nó | Đề xuất các khối | +| Thực thi/thực thi lại các giao dịch | Chạy thuật toán lựa chọn phân nhánh | Tích lũy phần thưởng/hình phạt | +| Xác minh các thay đổi trạng thái sắp tới | Theo dõi phần đầu của chuỗi | Tạo chứng thực | +| Quản lý trạng thái và cây biên nhận | Quản lý trạng thái Beacon (chứa thông tin đồng thuận và thực thi) | Yêu cầu đặt cược 32 ETH | +| Tạo tải trọng thực thi | Theo dõi tính ngẫu nhiên tích lũy trong RANDAO (một thuật toán cung cấp tính ngẫu nhiên có thể xác minh để lựa chọn nút xác thực và các hoạt động đồng thuận khác) | Có thể bị slashing | +| Cung cấp API JSON-RPC để tương tác với Ethereum | Theo dõi sự hợp lý hóa và sự hoàn tất | | + +## Đọc thêm {#further-reading} + +- [Bằng chứng cổ phần](/developers/docs/consensus-mechanisms/pos) +- [Đề xuất khối](/developers/docs/consensus-mechanisms/pos/block-proposal) +- [Phần thưởng và hình phạt dành cho nút xác thực](/developers/docs/consensus-mechanisms/pos/rewards-and-penalties) diff --git a/public/content/translations/vi/developers/docs/nodes-and-clients/nodes-as-a-service/index.md b/public/content/translations/vi/developers/docs/nodes-and-clients/nodes-as-a-service/index.md new file mode 100644 index 00000000000..895d699c780 --- /dev/null +++ b/public/content/translations/vi/developers/docs/nodes-and-clients/nodes-as-a-service/index.md @@ -0,0 +1,418 @@ +--- +title: "Nốt như một dịch vụ" +description: "Một cái nhìn tổng quan cho người mới bắt đầu về dịch vụ node, những ưu và nhược điểm, và các nhà cung cấp phổ biến." +lang: vi +sidebarDepth: 2 +--- + +## Giới thiệu {#Introduction} + +Việc chạy [nút Ethereum](/developers/docs/nodes-and-clients/#what-are-nodes-and-clients) của riêng bạn có thể gặp nhiều thách thức, đặc biệt là khi mới bắt đầu hoặc khi mở rộng quy mô nhanh chóng. Có một [số dịch vụ](#popular-node-services) chạy cơ sở hạ tầng nút được tối ưu hóa cho bạn, vì vậy bạn có thể tập trung vào việc phát triển ứng dụng hoặc sản phẩm của mình. Chúng tôi sẽ giải thích cách hoạt động của các dịch vụ node, ưu và nhược điểm khi sử dụng chúng và liệt kê các nhà cung cấp nếu bạn quan tâm đến việc bắt đầu. + +## Điều kiện tiên quyết {#prerequisites} + +Nếu bạn chưa hiểu nút và máy khách là gì, hãy xem [Nút và máy khách](/developers/docs/nodes-and-clients/). + +## Người đặt cược {#stakoooooooooooooors} + +Những nhà đầu tư lập phải tự vận hành cơ sở hạ tầng của mình thay vì dựa vào các nhà cung cấp bên thứ ba. Điều này có nghĩa là chạy một cơ thế thực thi kết hợp với một cơ chế đồng thuận. Trước [The Merge](/roadmap/merge), bạn có thể chỉ chạy máy khách đồng thuận và sử dụng nhà cung cấp tập trung cho dữ liệu thực thi; điều này không còn khả thi nữa - một người đặt cược độc lập phải chạy cả hai máy khách. Tuy nhiên, có những dịch vụ có sẵn để làm đơn giản hóa quá trình này. + +[Đọc thêm về cách chạy nút](/developers/docs/nodes-and-clients/run-a-node/). + +Các dịch vụ được mô tả trên trang này dành cho các nút không có staking. + +## Dịch vụ nút hoạt động như thể nào? {#how-do-node-services-work} + +Các nhà cung cấp dịch vụ nút vận hành các cơ chế nút phân tán ở phía sau cho bạn, vì vậy bạn không cần phải làm điều đó. + +Các dịch vụ này thường cung cấp một mã API mà bạn có thể sử dụng để ghi và đọc từ blockchain. Các dịch vụ này thường bao gồm quyền truy cập vào [các mạng thử nghiệm Ethereum](/developers/docs/networks/#ethereum-testnets) ngoài Mạng chính. + +Một số dịch vụ cung cấp cho bạn một nút chuyên dụng mà họ quản lý, trong khi những dịch vụ khác sử dụng bộ cân bằng tải để phân phối hoạt động giữa các node. + +Hầu như tất cả các dịch vụ nút đều cực kỳ dễ tích hợp, chỉ cần thay đổi dòng trong mã của bạn để hoán đổi nút tự lưu trữ hoặc thậm chí chuyển đổi giữa các dịch vụ. + +Thông thường, các dịch vụ nút sẽ chạy nhiều loại [máy khách nút](/developers/docs/nodes-and-clients/#execution-clients) và [loại nút](/developers/docs/nodes-and-clients/#node-types), cho phép bạn truy cập các nút đầy đủ và nút lưu trữ ngoài các phương thức dành riêng cho máy khách trong một API. + +Cần lưu ý rằng các dịch vụ nút không và không nên lưu trữ khóa riêng tư hoặc thông tin của bạn. + +## Lợi ích của việc sử dụng dịch vụ nút là gì? {#benefits-of-using-a-node-service} + +Lợi ích chính của việc sử dụng dịch vụ nút là không cần phải dành thời gian kỹ thuật để bảo trì và quản lý các nút một cách tự làm. Điều này cho phép bạn tập trung vào việc xây dựng sản phẩm của mình thay vì phải lo lắng về việc bảo trì hạ tầng. + +Việc vận hành các nút của riêng bạn có thể rất tốn kém, từ chi phí lưu trữ đến băng thông và thời gian kỹ thuật quý giá. Các vấn đề như việc tăng cường thêm nút khi mở rộng quy mô, nâng cấp các nút lên các phiên bản mới nhất, và đảm bảo tính nhất quán của trạng thái có thể làm phân tâm khỏi việc xây dựng và chi tiêu tài nguyên cho sản phẩm web3 mà bạn mong muốn. + +## Những nhược điểm của việc sử dụng dịch vụ nút là gì? {#cons-of-using-a-node-service} + +Bằng cách sử dụng dịch vụ nút, bạn đang tập trung hóa khía cạnh cơ sở hạ tầng của sản phẩm của mình. Vì lý do này, các dự án coi sự phi tập trung là vô cùng quan trọng có thể ưu tiên việc tự lưu trữ các nút thay vì thuê ngoài cho bên thứ ba. + +Đọc thêm về [lợi ích của việc chạy nút của riêng bạn](/developers/docs/nodes-and-clients/#benefits-to-you). + +## Các dịch vụ nút phổ biến {#popular-node-services} + +Dưới đây là danh sách một số nhà cung cấp nút Ethereum phổ biến nhất, xin vui lòng bổ sung bất kỳ nhà cung cấp nào còn thiếu! Mỗi dịch vụ nút cung cấp các lợi ích và tính năng khác nhau bên cạnh các gói miễn phí hoặc trả phí, bạn nên tìm hiểu xem dịch vụ nào phù hợp nhất với nhu cầu của bạn trước khi đưa ra quyết định. + +- [**Alchemy**](https://alchemy.com/) + - [Tài liệu](https://www.alchemy.com/docs/) + - Tính năng + - Gói miễn phí lớn nhất với 300 triệu đơn vị tính toán mỗi tháng (~30 triệu yêu cầu getLatestBlock) + - Hỗ trợ đa chuỗi cho Polygon, Starknet, Optimism, Arbitrum + - Cung cấp năng lượng cho khoảng 70% các ứng dụng phi tập trung Ethereum lớn nhất và khối lượng giao dịch DeFi + - Cảnh báo webhook tức thì qua Alchemy Notify + - Hỗ trợ và độ tin cậy/ổn định tốt nhất trong phân khúc + - API NFT của Alchemy + - Bảng điều khiển với Request Explorer, Mempool Watcher và Composer + - Truy cập nguồn cấp testnet tích hợp + - Cộng đồng nhà phát triển Discord năng động với 18.000 thành viên + +- [**Allnodes**](https://www.allnodes.com/) + - [Tài liệu](https://docs.allnodes.com/) + - Tính năng + - Không giới hạn tỷ lệ với mã thông báo PublicNode được tạo trên trang portfolio của Allnodes. + - Các điểm cuối RPC miễn phí tập trung vào quyền riêng tư (hơn 100 chuỗi khối) trên [PublicNode](https://www.publicnode.com) + - Các nút chuyên dụng không giới hạn tốc độ cho hơn 90 chuỗi khối + - Các nút lưu trữ chuyên dụng cho hơn 30 chuỗi khối + - Có sẵn tại 3 khu vực (Mỹ, EU, Châu Á) + - Ảnh chụp nhanh cho hơn 100 chuỗi khối trên [PublicNode](https://www.publicnode.com/snapshots) + - Hỗ trợ kỹ thuật 24/7 với SLA thời gian hoạt động từ 99.90%-99.98% (tùy thuộc vào gói dịch vụ). + - Giá cho mỗi giờ + - Thanh toán với Credit Card, PayPal hoặc Crypto + +- [**All That Node**](https://allthatnode.com/) + - [Tài liệu](https://docs.allthatnode.com/) + - Tính năng + - 50.000 yêu cầu mỗi ngày với gói miễn phí + - Hỗ trợ lên tới 40 giao thức + - Hỗ trợ API JSON-RPC (EVM, Tendermint), REST và Websocket + - Truy cập không giới hạn vào dữ liệu lưu trữ + - Hỗ trợ kỹ thuật 24/7 và thời gian hoạt động lên tới 99,9% + - Faucet có sẵn trên đa chuỗi + - Truy cập điểm cuối không giới hạn với số lượng khóa API không giới hạn + - Hỗ trợ Theo dấu/Gỡ lỗi + - Tự động cập nhật + +- [**Amazon Managed Blockchain**](https://aws.amazon.com/managed-blockchain/) + - [Tài liệu](https://aws.amazon.com/managed-blockchain/resources/) + - Tính năng + - Quản lý tất cả các nút Ethereum + - Có sẵn tại 6 quốc gia + - JSON-RPC qua HTTP và WebSockets an toàn + - Hỗ trợ 3 chuỗi + - SLAs, AWS hỗ trợ 24/7 + - Go-ethereum và Lighthouse + +- [**Ankr**](https://www.ankr.com/) + - [Tài liệu](https://docs.ankr.com/) + - Tính năng + - Giao thức Ankr - truy cập mở đến các điểm cuối Public RPC API cho 8+ chuỗi + - Cân bằng tải và giám sát tình trạng của nút để tạo ra một cổng kết nối nhanh chóng và đáng tin cậy đến nút gần nhất có sẵn + - Gói cao cấp cho phép điểm cuối WSS và giới hạn tỷ lệ không giới hạn + - Triển khai nút đầy đủ và nút xác thực chỉ với một cú nhấp chuột cho hơn 40 chuỗi + - Mở rộng theo tiến độ + - Bộ công cụ phân tích + - Dashboard + - Các điểm cuối RPC, HTTPS và WSS + - Hỗ trợ tức thì + +- [**Blast**](https://blastapi.io/) + - [Tài liệu](https://docs.blastapi.io/) + - Tính năng + - Hỗ trợ RPC và WSS + - Lưu trữ nút đa vùng + - Cơ sở hạ tầng phi tập trung + - API Công khai + - Kế hoạch dành riêng miễn phí + - Hỗ trợ đa chuỗi (17+ chuỗi khỗi) + - Kho lưu trữ các nút + - Hỗ trợ Discord 24/7 + - Giám sát và cảnh báo 24/7 + - Mức SLA tổng thể là 99,9% + - Thanh toán bằng tiền điện tử + +- [**BlockDaemon**](https://blockdaemon.com/) + - [Tài liệu](https://ubiquity.docs.blockdaemon.com/) + - Lợi ích + - Dashboard + - Trên cơ sở từng nút + - Phân tích + +- [**BlockPI**](https://blockpi.io/) + - [Tài liệu](https://docs.blockpi.io/) + - Tính năng + - Cấu trúc nút mạnh mẽ và phân tán + - Tối đa 40 điểm cuối HTTPS và WSS + - Gói đăng ký miễn phí và gói hàng tháng + - Phương pháp theo sát + Hỗ trợ dữ liệu lưu trữ + - Gói dịch vụ có hiệu lực lên đến 90 ngày + - Kế hoạch tùy chỉnh và phương thức thanh toán theo nhu cầu + - Thanh toán bằng tiền điện tử + - Hỗ trợ trực tiếp & Hỗ trợ kỹ thuật + +- [**Chainbase**](https://www.chainbase.com/) + - [Tài liệu](https://docs.chainbase.com) + - Tính năng + - Dịch vụ RPC sẵn sàng, nhanh chóng và có khả năng mở rộng + - Hỗ trợ đa chuỗi + - Miễn thuế + - Dashboard thân thiện với người sử dụng + - Cung cấp dịch vụ dữ liệu blockchain vượt xa RPC + +- [**Chainstack**](https://chainstack.com/) + - [Tài liệu](https://docs.chainstack.com/) + - Tính năng + - Chia sẻ nút miễn phí + - Các nút lưu trữ chung + - Hỗ trợ GraphQL + - Điểm truy cập RPC và WSS + - Cụm nút đầy đủ và nút lưu trữ chuyên dụng + - Thời gian đồng bộ nhanh cho các khai triển chuyên dụng + - Mang theo đám mây của bạn + - Giá cho mỗi giờ + - Hỗ trợ trực tiếp 24/7 + +- [**dRPC**](https://drpc.org/) + - [Tài liệu](https://drpc.org/docs) + - NodeCloud: Cơ sở hạ tầng RPC cắm và chạy bắt đầu từ 10 đô la (USD)—tốc độ tối đa, không giới hạn + - Các tính năng của NodeCloud: + - Hỗ trợ API cho 185 mạng lưới + - Pool phân tán với hơn 40 nhà cung cấp + - Phạm vi phủ sóng toàn cầu với chín (9) cụm địa lý + - Hệ thống cân bằng tải được hỗ trợ bởi AI + - Giá cố định trả theo mức sử dụng—không tăng giá, không hết hạn, không ràng buộc + - Không giới hạn khóa, tinh chỉnh khóa chi tiết, vai trò nhóm, bảo vệ giao diện người dùng + - Tỷ lệ cố định cho các phương thức là 20 đơn vị tính toán (CU) cho mỗi phương thức + - [Danh sách chuỗi điểm cuối công khai](https://drpc.org/chainlist) + - [Công cụ tính giá](https://drpc.org/pricing#calculator) + - NodeCore: ngăn xếp mã nguồn mở cho các tổ chức muốn có toàn quyền kiểm soát + +- [**GetBlock**](https://getblock.io/) + - [Tài liệu](https://getblock.io/docs/get-started/authentication-with-api-key/) + - Tính năng + - Truy cập hơn 40 nút chuỗi khối + - 40.000 yêu cầu miễn phí mỗi ngày + - Số lượng khóa API không giới hạn + - Tốc độ kết nối cao ở mức 1GB/giây + - Theo dõi + Lưu trữ + - Phân tích chuyên sâu + - Tự động cập nhật + - Hỗ trợ kĩ thuật + +- [**InfStones**](https://infstones.com/) + - Tính năng + - Tùy chọn gói miễn phí + - Mở rộng theo tiến độ + - Phân tích + - Dashboard + - Điểm truy cập API độc nhất + - Đầy đủ nút chuyên dụng + - Thời gian đồng bộ nhanh cho các khai triển chuyên dụng + - Hỗ trợ trực tiếp 24/7 + - Truy cập hơn 50 nút chuỗi khối + +- [**Infura**](https://infura.io/) + - [Tài liệu](https://infura.io/docs) + - Tính năng + - Tùy chọn gói miễn phí + - Mở rộng theo tiến độ + - Dữ liệu lưu trữ có phí + - Hỗ trợ trực tiếp + - Dashboard + +- [**Kaleido**](https://kaleido.io/) + - [Tài liệu](https://docs.kaleido.io/) + - Tính năng + - Gói khởi đầu miễn phí + - Triển khai nút Ethereum với một chạm + - Máy khách và thuật toán có thể tùy chỉnh (Geth, Quorum & Besu || PoA, IBFT & Raft) + - Hơn 500 API dịch vụ và quản trị + - Giao diện RESTful cho việc gửi giao dịch Ethereum (hỗ trợ bởi Apache Kafka) + - Các luồng ra cho việc phân phối sự kiện (hỗ trợ bởi Apache Kafka) + - Bộ sưu tập chuyên sâu các dịch vụ "ngoài chuỗi" và dịch vụ phụ trợ (ví dụ: truyền tải tin nhắn được mã hóa song phương) + - Quá trình khởi tạo mạng đơn giản với quản lý và kiểm soát quyền truy cập dựa trên vai trò + - Quản lý người dùng tinh vi cho cả quản trị viên và người dùng cuối + - Cơ sở hạ tầng quy mô lớn, kiên cố, đạt chuẩn doanh nghiệp + - Quản lý khóa riêng tư Cloud HSM + - Liên kết mạng chính Ethereum + - Chứng nhận ISO 27k và SOC 2 loại 2 + - Cấu hình thời gian chạy động (ví dụ: thêm tích hợp đám mây, thay đổi các cổng vào của nút, v.v.) + - Hỗ trợ cho việc triển khai đa đám mây, đa vùng và phối hợp lai. + - Giá cả dựa trên SaaS theo giờ đơn + - Hỗ trợ SLAs và 24x7 + +- [**Lava Network**](https://www.lavanet.xyz/) + - [Tài liệu](https://docs.lavanet.xyz/) + - Tính năng + - Sử dụng testnet miễn phí + - Sự dư thừa phi tập trung để đảm bảo tính khả dụng cao + - Mã nguồn mở + - SDK phi tập trung hoàn toàn + - Tích hợp Ethers.js + - Giao diện quản lý dự án trực quan + - Tính toàn vẹn dữ liệu dựa trên đồng thuận + - Hỗ trợ đa chuỗi + +- [**Moralis**](https://moralis.io/) + - [Tài liệu](https://docs.moralis.io/) + - Tính năng + - Chia sẻ nút miễn phí + - Miễn phí lưu trữ các nút chia sẻ + - Chính sách tập trung vào quyền riêng tư (không lưu giữ nhật ký) + - Hỗ trợ chuỗi chéo + - Mở rộng theo tiến độ + - Dashboard + - SDK Ethereum độc nhất + - Điểm truy cập API độc nhất + - Hỗ trợ kỹ thuật, trực tiếp + +- [**NodeReal MegaNode**](https://nodereal.io/) + - [Tài liệu](https://docs.nodereal.io/docs/introduction) + - Tính năng + - Dịch vụ API RPC đáng tin cậy, nhanh chóng và có khả năng mở rộng. + - API nâng cao dành cho các nhà phát triển web3 + - Hỗ trợ đa chuỗi + - Bắt đầu miễn phí + +- [**NOWNodes**](https://nownodes.io/) + - [Tài liệu](https://documenter.getpostman.com/view/13630829/TVmFkLwy) + - Tính năng + - Truy cập hơn 50 nút chuỗi khối + - Khoá API miễn phí + - Trình duyệt khối + - Thời gian phản hồi APO ⩽ 1 giây + - Nhóm hỗ trợ 24/7 + - Người quản lý tài khoản cá nhân + - Các nút chia sẻ, lưu trữ, sao lưu và chuyên dụng. + +- [**Pocket Network**](https://www.pokt.network/) + - [Tài liệu](https://docs.pokt.network/home/) + - Tính năng + - Thị trường và giao thức RPC phi tập trung + - 1 triệu yêu cầu mỗi ngày miễn phí (theo điểm kết nối, tối đa 2) + - [Điểm cuối công khai](https://docs.pokt.network/developers/public-endpoints) + - Chương trình Pre-Stake+ (nếu bạn cần hơn 1 triệu yêu cầu mỗi ngày) + - Hỗ trợ hơn 15 chuỗi khối + - Hơn 6400 nút đang kiếm POKT để phục vụ các ứng dụng. + - Hỗ trợ Nút lưu trữ, Nút lưu trữ có Theo dõi, & Nút Mạng thử nghiệm + - Sự đa dạng của các nút mạng chính Ethereum + - Không có điểm chết đơn lẻ + - Không có thời gian ngừng + - Chi phí hiệu quả với Tokenomics gần như không có (cọc POKT một lần để nhận băng thông mạng) + - Không có chi phí chìm hàng tháng, biến cơ sở hạ tầng của bạn thành tài sản. + - Cân bằng tải được tích hợp sẵn trong giao thức + - Tăng quy mô vô hạn số lượng yêu cầu mỗi ngày và số nút mỗi giờ khi bạn tiến hành. + - Lựa chọn riêng tư nhất, không bị kiểm duyệt + - Hỗ trợ lập trình viên thực hành + - Bảng điều khiển và phân tích [Pocket Portal](https://bit.ly/ETHorg_POKTportal) + +- [**QuickNode**](https://www.quicknode.com) + - [Tài liệu](https://www.quicknode.com/docs/) + - Tính năng + - Hỗ trợ kỹ thuật 24/7 & cộng đồng nhà phát triển trên Discord + - Mạng lưới đa đám mây/kim loại, cân bằng địa lý, độ trễ thấp + - Hỗ trợ đa chuỗi (Optimism, Arbitrum, Polygon + 11 others) + - Các lớp trung gian cho tốc độ và sự ổn định (định tuyến cuộc gọi, bộ nhớ đệm, lập chỉ mục) + - Giám sát hợp đồng thông minh thông qua Webhooks + - Bảng điều khiển trực quan, bộ phân tích, trình biên soạn RPC + - Các tính năng bảo mật nâng cao (JWT, ẩn danh, whitelisting) + - Dữ liệu NFT và phân tích API + - [Chứng nhận SOC2](https://www.quicknode.com/security) + - Phù hợp cho các nhà phát triển đến doanh nghiệp + +- [**Rivet**](https://rivet.cloud/) + - [Tài liệu](https://rivet.readthedocs.io/en/latest/) + - Tính năng + - Tùy chọn gói miễn phí + - Mở rộng theo tiến độ + +- [**SenseiNode**](https://senseinode.com) + - [Tài liệu](https://docs.senseinode.com/) + - Tính năng + - Các nút chuyên dụng và chia sẻ + - Dashboard + - Lưu trữ trên AWS với nhiều nhà cung cấp khác nhau ở các địa điểm khắp Mỹ Latinh. + - Cơ chế Prysm và Lighthouse + +- [**SettleMint**](https://console.settlemint.com/) + - [Tài liệu](https://docs.settlemint.com/) + - Tính năng + - Dùng thử miễn phí + - Mở rộng theo tiến độ + - Hỗ trợ GraphQL + - Điểm truy cập RPC và WSS + - Đầy đủ nút chuyên dụng + - Mang theo đám mây của bạn + - Bộ công cụ phân tích + - Dashboard + - Giá cho mỗi giờ + - Hỗ trợ tức thì + +- [**Tenderly**](https://tenderly.co/web3-gateway) + - [Tài liệu](https://docs.tenderly.co/web3-gateway/web3-gateway) + - Tính năng + - Gói miễn phí bao gồm 25 triệu Đơn vị Tenderly mỗi tháng + - Truy cập miễn phí vào dữ liệu lịch sử + - Nhanh hơn đến 8 lần cho các tác vụ đọc nặng! + - Truy cập đọc nhất quán 100% + - Điểm truy cập JSON-RPC + - Trình xây dựng yêu cầu RPC dựa trên giao diện và xem trước yêu cầu + - Kết hợp chặt chẽ với các công cụ phát triển, gỡ lỗi và kiểm thử của Tenderly + - Giả lập giao dịch + - Phân tích và lọc dữ liệu sử dụng + - Quản lý khoá truy cập dễ dàng + - Hỗ trợ kỹ thuật tận tình qua chat, email và Discord + +- [**Tokenview**](https://services.tokenview.io/) + - [Tài liệu](https://services.tokenview.io/docs?type=nodeService) + - Tính năng + - Hỗ trợ kỹ thuật 24/7 & cộng đồng nhà phát triển trên Telegram + - Hỗ trợ đa chuỗi (Bitcoin, Ethereum, Tron, BNB Smart Chain, Ethereum Classic) + - Cả hai điểm truy cập RPC và WSS đều mở để sử dụng + - Truy cập không giới hạn vào dữ liệu lưu trữ API + - Bảng điều khiển với Trình khám phá yêu cầu và Bộ theo dõi Mempool + - API dữ liệu NFT và thông báo Webhook + - Thanh toán bằng tiền điện tử + - Hỗ trợ ngoài cho các yêu cầu hành vi bổ sung + +- [**Watchdata**](https://watchdata.io/) + - [Tài liệu](https://docs.watchdata.io/) + - Tính năng + - Độ tin cậy của dữ liệu + - Kết nối liên tục mà không bị gián đoạn + - Tự động hoá quy trình + - Miễn thuế + - Giới hạn cao phù hợp với mọi người dùng + - Hỗ trợ cho các nút khác nhau + - Mở rộng quy mô tài nguyên + - Tốc độ xử lý cao + +- [**ZMOK**](https://zmok.io/) + - [Tài liệu](https://docs.zmok.io/) + - Tính năng + - Dịch vụ Front-running + - Giao dịch mempool toàn cầu với phương pháp lọc,tìm kiếm + - Phí TX không giới hạn và Gas vô tận để gửi giao dịch + - Việc thu thập nhanh chóng khối mới và đọc chuỗi khối. + - Cam kết mức giá tốt nhất cho mỗi lượt gọi API + +- [**Zeeve**](https://www.zeeve.io/) + - [Tài liệu](https://www.zeeve.io/docs/) + - Tính năng + - Nền tảng tự động hóa không mã cấp doanh nghiệp cung cấp việc triển khai, giám sát và quản lý các nút và mạng Blockchain. + - Hơn 30 Giao thức & Tích hợp được hỗ trợ, và đang tiếp tục được bổ sung + - Các dịch vụ hạ tầng web3 gia tăng giá trị như lưu trữ phi tập trung, danh tính phi tập trung và các API dữ liệu Blockchain Ledger cho các trường hợp sử dụng trong thế giới thực. + - Hỗ trợ 24/7 và theo dõi chủ động giúp đảm bảo sức khỏe của các nút mọi lúc. + - Các điểm cuối RPC cung cấp quyền truy cập đã xác thực vào các API, quản lý dễ dàng với bảng điều khiển và phân tích trực quan. + - Cung cấp cả tùy chọn đám mây quản lý và đám mây tự chọn, cho bạn nhiều sự lựa chọn và hỗ trợ tất cả các nhà cung cấp đám mây lớn như AWS, Azure, Google Cloud, Digital Ocean và cả trên cơ sở. + - Chúng tôi sử dụng định tuyến thông minh để luôn kết nối với nút gần nhất với người dùng của bạn. + +## Đọc thêm {#further-reading} + +- [Danh sách các dịch vụ nút Ethereum](https://ethereumnodes.com/) + +## Các chủ đề liên quan {#related-topics} + +- [Các nút và client](/developers/docs/nodes-and-clients/) + +## Các hướng dẫn liên quan {#related-tutorials} + +- [Bắt đầu phát triển Ethereum bằng Alchemy](/developers/tutorials/getting-started-with-ethereum-development-using-alchemy/) +- [Hướng dẫn gửi giao dịch bằng web3 và Alchemy](/developers/tutorials/sending-transactions-using-web3-and-alchemy/) diff --git a/public/content/translations/vi/developers/docs/nodes-and-clients/run-a-node/index.md b/public/content/translations/vi/developers/docs/nodes-and-clients/run-a-node/index.md new file mode 100644 index 00000000000..8ca9a27006b --- /dev/null +++ b/public/content/translations/vi/developers/docs/nodes-and-clients/run-a-node/index.md @@ -0,0 +1,482 @@ +--- +title: "Đăng kí nốt Ethereum của bạn" +description: "Một giới thiệu chung về cách tự vận hành một Client Ethereum." +lang: vi +sidebarDepth: 2 +--- + +Chạy nút của bạn cho bạn rất nhiều lợi ích, mở ra nhiều tiềm năng, và giúp hộ trợ hệ sinh thái. Bài viết này sẽ hướng dẫn bạn cách triển khai nút của bạn và tham gia vào xác thực giao dịch Ethereum. + +Lưu ý rằng sau [The Merge](/roadmap/merge), cần phải có hai máy khách để chạy một nút Ethereum; một **máy khách lớp thực thi (EL)** và một **máy khách lớp đồng thuận (CL)**. Bài viết này sẽ hướng dẫn bạn cài đặt như thế nào, điều chỉnh và kết nối hai Client đó để chạy nút Ethereum. + +## Điều kiện tiên quyết {#prerequisites} + +Bạn nên hiểu nút Ethereum là gì và tại sao bạn có thể muốn chạy một Client. Điều này được đề cập trong [Các nút và máy khách](/developers/docs/nodes-and-clients/). + +Nếu bạn là người mới tìm hiểu về chủ đề chạy nút hoặc đang tìm kiếm một con đường ít kỹ thuật hơn, chúng tôi khuyên bạn trước tiên nên xem qua phần giới thiệu thân thiện với người dùng của chúng tôi về [việc chạy một nút Ethereum](/run-a-node). + +## Lựa chọn phương pháp {#choosing-approach} + +Bước đầu tiên triển khai một nút của bạn là chọn cách bạn sẽ làm nó. Dựa trên những yêu cầu và đa dạng khả năng, bạn phải chọn Client thực thi (hoặc cả Client thực thi và đồng thuận), môi trường (phần cứng, hệ điều hành), và tham số cho tùy chỉnh Client. + +Bài viết này sẽ hướng dẫn bạn qua các quyết định này và giúp bạn tìm một hướng để chạy Ethereum theo từng trường hợp. + +Để chọn từ các cách triển khai máy khách, hãy xem tất cả [máy khách thực thi](/developers/docs/nodes-and-clients/#execution-clients), [máy khách đồng thuận](/developers/docs/nodes-and-clients/#consensus-clients) sẵn sàng cho Mạng chính và tìm hiểu về [tính đa dạng của máy khách](/developers/docs/nodes-and-clients/client-diversity). + +Quyết định xem nên chạy phần mềm trên [phần cứng của riêng bạn hay trên đám mây](#local-vs-cloud), xem xét các [yêu cầu](#requirements) của máy khách. + +Sau khi chuẩn bị môi trường, hãy cài đặt các máy khách đã chọn bằng [giao diện thân thiện với người mới bắt đầu](#automatized-setup) hoặc [thủ công](#manual-setup) bằng terminal với các tùy chọn nâng cao. + +Khi nút đang chạy và đồng bộ hóa, bạn đã sẵn sàng [sử dụng nó](#using-the-node), nhưng hãy nhớ theo dõi việc [bảo trì](#operating-the-node) nút. + +![Thiết lập máy khách](./diagram.png) + +### Môi trường và phần cứng {#environment-and-hardware} + +#### Cục bộ hay đám mây {#local-vs-cloud} + +Client Ethereum có thể được chạy trên những máy tính dạng thương mại và không đòi hỏi phần cứng đặt biệt, như máy đào chẳng hạn. Vì vậy, bạn có rất nhiều lựa chọn đa dạng để thiết lập nút dựa trên những gì bạn cần. +Để đơn giản hóa, hãy nghĩ về việc chạy nút trên một máy chủ vật lý tại nhà và chạy trên máy chủ đám mây: + +- Đám mây + - Các nhà cung cấp dịch vụ cung cấp thời gian hoạt động của máy chủ cao và địa chỉ IP tĩnh công khai + - Có một máy chủ chuyên dụng hay máy chủ ảo sẽ dễ chịu hơn việc phải tự mình xây + - Đánh đổi là việc phải tin tưởng một bên thứ ba - người cung cấp máy chủ + - Bởi vì đòi hỏi về dung lượng lưu trữ cho một nút đầy đủ, giá của việc thuê một máy chủ có thể cao +- Tự vận hành tại nhà + - Không cần tin tưởng vào ai và là cách tiếp cận có tính chủ quyền hơn + - Chỉ cần chi trả một lần + - Một lựa chọn là mua những máy lắp sẵn + - Bạn có thể phải tự mình chuẩn bị, bảo trì, và có thể phải sửa chữa máy và kết nối mạng + +Cả hai lựa chọn đều có những lợi thế khác nhau được tóm gọn ở trên. Nếu bạn cần một giải pháp đám mây, thay vì những dịch vụ đám mây truyền thống, cũng có những dịch vụ tập trung vào những người triển khai nút. Hãy xem [các nút dưới dạng dịch vụ](/developers/docs/nodes-and-clients/nodes-as-a-service/) để biết thêm các tùy chọn về các nút được lưu trữ. + +#### Phần cứng {#hardware} + +Tuy nhiên, một mạng lưới chống kiểm duyệt, phi tập trung không nên dựa vào người cung cấp đám mây. Thay vào đó, tự chạy nút của bạn tại nhà là một cách tốt cho hệ sinh thái hơn. [Các ước tính](https://www.ethernodes.org/networkType/cl/Hosting) cho thấy một phần lớn các nút chạy trên đám mây, điều này có thể trở thành một điểm lỗi duy nhất. + +Client Ethereum có thể được chạy trên máy tính, máy tính cá nhân (laptop), máy chủ, hoặc là chỉ một máy tính bo mạch đơn. Trong khi sử dụng Client trên máy tính cá nhân của bạn là khả thi, có một máy chuyên dụng cho nút của bạn có thể cải thiện rất nhiều hiệu suất của nó và bảo mật trong khi giảm thiểu ảnh hưởng lên máy chính của bạn. + +Sử dụng phần cứng của bạn có thể rất dễ dàng. Có rất nhiều những lựa chọn đơn giản cũng như là cấu hình nâng cao cho những người có kiến thức kĩ thuật. Vậy hãy cùng nhau nhìn vào các yêu cầu và chi phí để chạy một Client Ethereum trên máy của bạn. + +#### Các yêu cầu {#requirements} + +Yêu cầu phần cứng sẽ khác nhau bởi Client tuy nhiên nhìn chung cũng không có cao đến vậy vì nút cũng chỉ cần duy trì đồng bộ. Đừng nhầm lẫn nó với việc đào, mà trong đó việc đào đòi hỏi rất nhiều sức mạnh tính toán. Tuy nhiên, thời gian đồng bộ và hiệu suất sẽ được cải thiện khi phần cứng mạnh hơn. + +Trước khi cài đặt bất kỳ client nào, hãy đảm bảo rằng máy tính của bạn có đủ tài nguyên để chạy nó. Bạn có thể xem các yêu cầu tối thiểu và khuyến nghị ở bên dưới. + +Điểm nghẽn lớn nhất đối với phần cứng của bạn thường là dung lượng ổ đĩa. Việc đồng bộ chuỗi khối Ethereum tiêu tốn rất nhiều tác vụ đọc/ghi và cần rất nhiều dung lượng lưu trữ. Tốt nhất là bạn nên có một **ổ cứng thể rắn (SSD)** với hàng trăm GB dung lượng trống, vẫn còn dư ngay cả sau khi đồng bộ xong. + +Kích thước của cơ sở dữ liệu và tốc độ đồng bộ hóa ban đầu phụ thuộc vào máy khách đã chọn, cấu hình của nó và [chiến lược đồng bộ hóa](/developers/docs/nodes-and-clients/#sync-modes). + +Đồng thời, hãy đảm bảo kết nối internet của bạn không bị giới hạn bởi [mức dung lượng băng thông](https://wikipedia.org/wiki/Data_cap). Khuyến nghị nên dùng kết nối không giới hạn, vì quá trình đồng bộ ban đầu và dữ liệu phát tán lên mạng có thể vượt quá giới hạn của bạn. + +##### Hệ điều hành + +Tất cả các Client đều hỗ trợ các hệ điều hành phổ biến – Linux, MacOS, Windows. Điều này có nghĩa là bạn có thể chạy node trên máy tính để bàn thông thường hoặc máy chủ với hệ điều hành (OS) phù hợp nhất với bạn. Hãy đảm bảo hệ điều hành của bạn luôn được cập nhật để tránh các sự cố tiềm ẩn và lỗ hổng bảo mật. + +##### Yêu cầu tối thiểu + +- CPU 2+ lõi xử lí +- 8 GB RAM +- 2TB SSD +- Băng thông tối thiểu 10 MBit/giây + +##### Thông số khuyến nghị + +- CPU nhanh với 4+ lõi xử lí +- Trên 16BN RAM +- Ổ cứng SSD nhanh với 2+TB +- Băng thông từ 25 MBit/giây trở lên + +Việc đồng bộ phương thức và Client bạn chọn sẽ ảnh hưởng đến đòi hỏi lưu lượng dự trữ, nhưng chúng tôi ước lượng dung lượng bạn cần cho mỗi Client như bên dưới. + +| Client | Dung lượng ổ cứng (đồng bộ nhanh) | Dung lượng ổ cứng (lưu trữ toàn bộ) | +| ---------- | ---------------------------------------------------- | ------------------------------------------------------ | +| Besu | 800GB+ | 12TB+ | +| Erigon | N/A | 2.5TB+ | +| Geth | 500GB+ | 12TB+ | +| Nethermind | 500GB+ | 12TB+ | +| Reth | N/A | 2.2TB+ | + +- Lưu ý: Erigon và Reth không hỗ trợ chế độ đồng bộ nhanh (snap sync), nhưng có thể thực hiện "Full Pruning - quá trình bỏ dữ liệu không cần thiết giảm dung lượng" (~2TB đối với Erigon, ~1.2TB đối với Reth) + +Đối với máy khách đồng thuận, yêu cầu về dung lượng cũng phụ thuộc vào việc triển khai máy khách và các tính năng được bật (ví dụ: trình slasher của trình xác thực) nhưng thường cần thêm 200GB cho dữ liệu beacon. Với số lượng nút xác thực lớn, thông lượng cũng cần phải tăng theo. Bạn có thể tìm thấy [chi tiết về các yêu cầu của máy khách đồng thuận trong phân tích này](https://mirror.xyz/0x934e6B4D7eee305F8C9C42b46D6EEA09CcFd5EDc/b69LBy8p5UhcGJqUAmT22dpvdkU-Pulg2inrhoS9Mbc). + +#### Các giải pháp cắm và chạy {#plug-and-play} + +Cách dễ nhất để chạy nút bằng phần cứng riêng là sử dụng thiết bị Plug-and-Play (cắm vào rồi chạy). Các máy được cấu hình sẵn từ nhà cung cấp mang lại trải nghiệm đơn giản nhất: đặt hàng, kết nối, chạy. Mọi cấu hình đều được lắp sẵn và chạy tự động, đi kèm hướng dẫn trực quan và bảng thông tin để giám xác cũng như quản lý phần mềm. + +- [DappNode](https://dappnode.io/) +- [Avado](https://ava.do/) + +#### Ethereum trên máy tính một bo mạch {#ethereum-on-a-single-board-computer} + +Một cách đơn giản và rẻ để chạy một nút Ethereum là sử dụng máy tính bo mạch đơn, ngay cả với thiết kế ARM như Raspberry Pi. [Ethereum trên ARM](https://ethereum-on-arm-documentation.readthedocs.io/en/latest/) cung cấp các image dễ chạy của nhiều máy khách thực thi và máy khách đồng thuận cho Raspberry Pi và các bo mạch ARM khác. + +Nhỏ gọn, giá rẻ và tiết kiệm như thế này rất lý tưởng để chạy node tại nhà, nhưng hãy lưu ý đến hiệu năng hạn chế của chúng. + +## Khởi chạy nút {#spinning-up-node} + +Việc cài đặt Client thực tế có thể chạy bằng những công cụ cài đặt tự động hoặc thủ công, bằng cách tự cài đặt phần mềm Client trực tiếp. + +Đối với người dùng ít kinh nghiệm, khuyến nghị thường là sử dụng công cụ cài tự động, phần mềm hướng dẫn bạn trong quá trình cài đặt và tự động hóa thiết lập Client. Tuy nhiên, nếu bạn có một chút kinh nghiệm sử dụng Terminal, thì các bước cài đặt thủ công sẽ khá dễ thực hiện. + +### Thiết lập có hướng dẫn {#automatized-setup} + +Có rất nhiều dữ án thân thiện với người dùng nhằm cải thiện trải nghiệm thiết lập một Client. Các Laucher này cung cấp khả năng cài đặt và cấu hình Client một cách tự động, một số thậm chí còn có giao diện đồ họa để hướng dẫn cài đặt và giảm sát các Client. + +Dưới đây là một vài dự án mà giúp bạn cài đặt và kiểm soát Client chỉ với và cú nhấp chuột: + +- [DappNode](https://docs.dappnode.io/docs/user/getting-started/choose-your-path) - DappNode không chỉ đi kèm với một máy từ một nhà cung cấp. Phần mềm, tức là trình khởi chạy nút và trung tâm điều khiển với nhiều tính năng, có thể được sử dụng trên bất kỳ phần cứng nào. +- [EthPillar](https://www.coincashew.com/coins/overview-eth/ethpillar) - Cách nhanh nhất và dễ nhất để thiết lập một nút đầy đủ. Công cụ cài đặt một dòng lệnh và giao diện TUI để quản lý nút. Miễn phí. Mã nguồn mở. Là công cụ chung của cộng đồng Ethereum bởi những người tự Stake. Hỗ trợ ARM64 và AMD64. +- [eth-docker](https://eth-docker.net/) - Thiết lập tự động bằng Docker tập trung vào việc đặt cược dễ dàng và an toàn, yêu cầu kiến thức cơ bản về terminal và Docker, được khuyến nghị cho người dùng có kinh nghiệm hơn một chút. +- [Stereum](https://stereum-dev.github.io/ethereum-node-web-docs) - Trình khởi chạy để cài đặt máy khách trên một máy chủ từ xa thông qua kết nối SSH với một hướng dẫn thiết lập GUI, trung tâm điều khiển và nhiều tính năng khác. +- [NiceNode](https://www.nicenode.xyz/) - Trình khởi chạy với trải nghiệm người dùng đơn giản để chạy một nút trên máy tính của bạn. Chỉ cần chọn Client và khỏi chạy bằng vài cú nhấp chuột. Vẫn trong quá trình phát triển. +- [Sedge](https://docs.sedge.nethermind.io/docs/intro) - Công cụ thiết lập nút tự động tạo cấu hình Docker bằng trình hướng dẫn CLI. Được viết bằng Go bởi Nethermind. + +### Thiết lập máy khách thủ công {#manual-setup} + +Một trong những lựa chọn là tải về, xác thực, và thiết lập phần mềm Client thủ công. Ngay cả khi một số Client cung cấp giao diện đồ họa, thì việc cài đặt thủ công vẫn đòi hỏi kỹ năng cơ bản với Terminal, nhưng lại mang đến nhiều tính linh hoạt hơn. + +Như đã giải thích trước đó, việc thiết lập một nút Ethereum riêng của bạn sẽ cần chạy một cặp Client: Client đồng thuận và Client thực thi. Một số Client có thể bao gồm Light Client của loại còn lại và có thể đồng bộ mà không cần bất kỳ phần mềm nào khác. Tuy nhiên, việc xác minh không cần tin tưởng đầy đủ thì bắt buộc phải có cả hai loại Client. + +#### Tải phần mềm máy khách {#getting-the-client} + +Đầu tiên, bạn cần tải phần mềm [máy khách thực thi](/developers/docs/nodes-and-clients/#execution-clients) và [máy khách đồng thuận](/developers/docs/nodes-and-clients/#consensus-clients) mà bạn muốn. + +Bạn chỉ cần đơn giản tải xuống một ứng dụng thực thi hoặc gói cài đặt phù hợp với hệ điều hành và cấu hình phần cứng của mình. Luôn kiểm tra chữ ký và mã băm của các gói đã tải về. Một số Client cũng cung cấp kho lưu trữ hoặc hình ảnh Docker để cài đặt và cập nhật dễ hơn. Tất cả các Client đều là mã nguồn mở, vì vậy bạn có thể tự xây dựng chúng từ đầu. Đây là một phương pháp nâng cao hơn, nhưng một số trường hợp có thể sẽ cần dùng đến. + +Hướng dẫn cài đặt cho từng Client có sẵn tài liệu được liên kết ở danh sách Client phía trên. + +Dưới đây là các trang phát hành của Client, nơi bạn có thể tìm thấy các bản dựng sẵn hoặc hướng dẫn cài đặt: + +##### Máy khách thực thi + +- [Besu](https://github.com/hyperledger/besu/releases) +- [Erigon](https://github.com/ledgerwatch/erigon/releases) +- [Geth](https://geth.ethereum.org/downloads/) +- [Nethermind](https://downloads.nethermind.io/) +- [Reth](https://reth.rs/installation/installation.html) + +Cũng cần lưu ý rằng tính đa dạng của máy khách là một [vấn đề trên lớp thực thi](/developers/docs/nodes-and-clients/client-diversity/#execution-layer). Cũng khuyến nghị người đọc rằng cân nhắc chạy Client thực thi đang chiếm thiểu số. + +##### Máy khách đồng thuận + +- [Lighthouse](https://github.com/sigp/lighthouse/releases/latest) +- [Lodestar](https://chainsafe.github.io/lodestar/run/getting-started/installation#build-from-source) (Không cung cấp tệp nhị phân dựng sẵn, chỉ cung cấp ảnh Docker hoặc phải dựng từ mã nguồn) +- [Nimbus](https://github.com/status-im/nimbus-eth2/releases/latest) +- [Prysm](https://github.com/prysmaticlabs/prysm/releases/latest) +- [Teku](https://github.com/ConsenSys/teku/releases) + +[Tính đa dạng của máy khách](/developers/docs/nodes-and-clients/client-diversity/) là rất quan trọng đối với các nút đồng thuận chạy các trình xác thực. Nếu như phần lớn nút xác thực chạy chỉ một loại Client, sự an toàn của mạng lưới bị đặt vào rủi ro. Vì vậy việc cân nhắc sử dụng Client thiểu số là được khuyến khích. + +[Xem mức sử dụng máy khách mạng mới nhất](https://clientdiversity.org/) và tìm hiểu thêm về [tính đa dạng của máy khách](/developers/docs/nodes-and-clients/client-diversity). + +##### Xác thực phần mềm + +Khi tải phần mềm từ Internet, nên xác thực tính hợp lệ của nó. Bước này không bắt buộc nhưng đặc biệt quan trọng cho cơ sở hạ tầng như Client của Ethereum, thì việc nhận biết các khả năng tấn công tiềm ẩn và tránh chúng là rất quan trọng. Nếu bạn tải một tùy chọn có sẵn, bạn cần phải tin tưởng nó và rủi ro rằng kẻ tấn công có thể đổi phương thức thực thi thành hành vi độc hại. + +Lập trình viên sẽ ký các bản phát hành kỹ thuật số của họ với khóa PGP của họ, để bạn có thể xác minh bằng mật mã rằng bạn đang chạy đúng phần mềm mà họ tạo ra. Bạn chỉ cần lấy khóa công khai (Public Key) mà nhà phát triển sử dụng, những khóa này sẽ được tìm thấy trên trang phát hành Client hoặc trong tài liệu. Sau khi tải xuống bản phát hành của máy khách và chữ ký của nó, bạn có thể sử dụng một triển khai PGP, ví dụ: [GnuPG](https://gnupg.org/download/index.html) để dễ dàng xác minh chúng. Xem hướng dẫn về cách xác minh phần mềm nguồn mở bằng `gpg` trên [linux](https://www.tecmint.com/verify-pgp-signature-downloaded-software/) hoặc [Windows/MacOS](https://freedom.press/training/verifying-open-source-software/). + +Một hình thức xác minh khác là đảm bảo rằng hàm băm, một phương thức tạo dấu vân tay bằng mật mã học, của phần mềm bạn tải về trùng với lại hàm băm mà nhà lập trình cung cấp. Cái này sẽ dễ hơn sử dụng PGP, và một số Client chỉ có lựa chọn này. Chỉ cần chạy hàm băm trên một phần mềm đã tải về so sánh giá trị kết quả băm trên trang phát hành. Ví dụ: + +```sh +sha256sum teku-22.6.1.tar.gz\n\n9b2f8c1f8d4dab0404ce70ea314ff4b3c77e9d27aff9d1e4c1933a5439767dde +``` + +#### Thiết lập máy khách {#client-setup} + +Sau khi cài đặt, tải xuống hoặc biên dịch phần mềm Client, bạn đã sẵn sàng để chạy nó. Điều này chỉ có nghĩa là nó cần được chạy với cấu hình phù hợp. Các client cung cấp nhiều tùy chọn cấu hình, cho phép kích hoạt nhiều tính năng khác nhau. + +Hãy bắt đầu với các tùy chọn có thể ảnh hưởng đáng kể đến hiệu năng của Client và mức tiêu thụ dữ liệu. [Các chế độ đồng bộ hóa](/developers/docs/nodes-and-clients/#sync-modes) đại diện cho các phương pháp khác nhau để tải xuống và xác thực dữ liệu chuỗi khối. Trước khi khởi chạy nút, bạn nên quyết định sẽ sử dụng mạng nào và chế độ đồng bộ nào. Những yếu tố quan trọng nhất cần cân nhắc là dung lượng ổ đĩa và thời gian đồng bộ mà Client sẽ cần. Hãy chú ý đến tài liệu của Client để xác định chế độ đồng bộ nào là mặc định. Nếu chế độ đó không phù hợp, hãy chọn một chế độ khác dựa trên mức độ bảo mật, dữ liệu có sẵn và chi phí. Ngoài thuật toán đồng bộ, bạn cũng có thể thiết lập việc cắt bớt các loại dữ liệu cũ khác nhau. Cắt tỉa (pruning) cho phép xóa dữ liệu lỗi thời, tức là xóa các nút trie trạng thái không thể truy cập được từ các khối gần đây. + +Các tùy chọn cấu hình cơ bản khác bao gồm: chọn mạng (Mạng chính hoặc mạng thử nghiệm), bật điểm cuối HTTP cho RPC hoặc WebSockets, v.v. Bạn có thể tìm thấy tất cả các tính năng và tùy chọn trong tài liệu của Client. Nhiều cấu hình Client có thể được thiết lập bằng cách chạy Client với Flag tương ứng trực tiếp trong CLI hoặc trong tệp cấu hình. Mỗi Client có đôi chút khác biệt; vì vậy hãy luôn tham khảo tài liệu chính thức hoặc trang trợ giúp của nó để biết chi tiết về các tùy chọn cấu hình. + +Với mục đích thử nghiệm, bạn có thể muốn chạy Client trên một trong các mạng mạng thử nghiệm. [Xem tổng quan về các mạng được hỗ trợ](/developers/docs/nodes-and-clients/#execution-clients). + +Ví dụ về việc chạy Client thực thi với cấu hình cơ bản có thể được tìm thấy trong phần tiếp theo. + +#### Khởi động máy khách thực thi {#starting-the-execution-client} + +Trước khi bắt đàu phần mềm Client Ethereum, hãy thực hiện một bước kiểm tra cuối cùng để đảm bảo môi trường đã sẵn sàng. Ví dụ, hãy đảm bảo rằng: + +- Có đủ dung lượng ổ đĩa, xét theo mạng và chế độ đồng bộ mà bạn đã chọn. +- Bộ nhớ (RAM) và CPU không bị chiếm dụng bởi các chương trình khác. +- Hệ điều hành đã được cập nhật lên phiên bản mới nhất. +- Hệ thống có thời gian và ngày tháng chính xác. +- Bộ định tuyến và tường lửa của bạn chấp nhận các kết nối trên các cổng tiếp nhận thông tin. Mặc định, Ethereum Client sử dụng một cổng thông tin (TCP) và một cổng giao thức (UDP), cả hai đều là 30303 theo mặc định. + +Hãy chạy Client của bạn trên một mạng thử nghiệm trước, để đảm bảo mọi thứ hoạt động chính xác. + +Bạn cần khai báo bất kỳ thiết lập nào của Client không phải mặc định ngay từ đầu. Bạn có thể sử dụng Flag hoặc tệp cấu hình để khai báo cấu hình mong muốn. Các tính năng và cách viết cấu hình ở mỗi Client đều khác nhau. Hãy xem tài liệu của Client của bạn để thêm chi tiết. + +Các máy khách thực thi và đồng thuận giao tiếp thông qua một điểm cuối đã được xác thực được chỉ định trong [Engine API](https://github.com/ethereum/execution-apis/tree/main/src/engine). Để kết nối với một máy khách đồng thuận, máy khách thực thi phải tạo một [`jwtsecret`](https://jwt.io/) tại một đường dẫn đã biết. Vì lý do bảo mật và ổn định, các Client nên chạy trên cùng một máy, và cả hai Client phải biết đường dẫn này, vì nó được dùng để xác thực kết nối RPC cục bộ giữa chúng. Client xác thực cũng phải có một cổng giao thức dành cho các API đã được xác thực. + +Token này được phần mềm Client tự động tạo ra, nhưng trong một số trường hợp, bạn có thể cần phải tự tạo thủ công. Bạn có thể tạo nó bằng [OpenSSL](https://www.openssl.org/): + +```sh +openssl rand -hex 32 > jwtsecret +``` + +#### Chạy máy khách thực thi {#running-an-execution-client} + +Phần này sẽ hướng dẫn bạn cách bắt đầu từ Client thực thi. Đây chỉ là một ví dụ về cấu hình cơ bản, dùng để khởi chạy Client với các thiết lập sau: + +- Xác định mạng để kết nối, trong ví dụ này là mạng chính + - Thay vào đó, bạn có thể chọn [một trong các mạng thử nghiệm](/developers/docs/networks/) để thử nghiệm sơ bộ thiết lập của mình +- Xác định thư mục dữ liệu, nơi tất cả dữ liệu bao gồm cả chuỗi khối sẽ được lưu trữ + - Hãy đảm bảo thay thế đường dẫn ví dụ bằng một đường dẫn thực tế, ví dụ trỏ tới ổ cứng ngoài của bạn +- Kích hoạt các giao diện để giao tiếp với Client + - Bao gồm JSON-RPC và Engine API để giao tiếp với Client đồng thuận +- Xác định đường dẫn tới `jwtsecret` cho API được xác thực + - Hãy đảm bảo thay thế đường dẫn ví dụ bằng một đường dẫn thực tế mà các máy khách có thể truy cập, ví dụ: `/tmp/jwtsecret` + +Hãy nhớ rằng đây chỉ là một ví dụ cơ bản, tất cả các thiết lập khác sẽ được đặt về mặc định. Hãy chủ ý trên tài liệu của từng Client và tìm hiểu về những giá trị, cài đặt và tính năng mặc định. Những tính năng thêm, ví dụ cho chạy một nút xác thực, theo dõi,... vui lòng tìm hiểu tài liệu cụ thể cho Client đó. + +> Lưu ý rằng dấu gạch chéo ngược `` trong các ví dụ chỉ dành cho mục đích định dạng; các cờ cấu hình có thể được xác định trên một dòng. + +##### Chạy Besu + +Ví dụ này khởi động Besu trên Mạng chính, lưu trữ dữ liệu chuỗi khối ở định dạng mặc định tại `/data/ethereum`, bật JSON-RPC và Engine RPC để kết nối máy khách đồng thuận. Engine API được xác thực bằng token `jwtsecret` và chỉ các lệnh gọi từ `localhost` mới được cho phép. + +```sh +besu --network=mainnet \ + --data-path=/data/ethereum \ + --rpc-http-enabled=true \ + --engine-rpc-enabled=true \ + --engine-host-allowlist="*" \ + --engine-jwt-enabled=true \ + --engine-jwt-secret=/path/to/jwtsecret +``` + +Besu cũng đi kèm với lựa chọn khi cài đặt, nó sẽ hỏi danh sách câu hỏi và tạo tệp cấu hình. Chạy một Laucher tương tác sử dựng: + +```sh +besu --Xlauncher +``` + +[Tài liệu của Besu](https://besu.hyperledger.org/public-networks/get-started/start-node/) chứa các tùy chọn bổ sung và chi tiết cấu hình. + +##### Chạy Erigon + +Ví dụ này khởi động Erigon trên Mạng chính, lưu trữ dữ liệu chuỗi khối tại `/data/ethereum`, bật JSON-RPC, xác định các không gian tên (namespace) nào được phép và bật xác thực để kết nối máy khách đồng thuận được xác định bởi đường dẫn `jwtsecret`. + +```sh +erigon --chain mainnet \ + --datadir /data/ethereum \ + --http --http.api=engine,eth,web3,net \ + --authrpc.jwtsecret=/path/to/jwtsecret +``` + +Mặc định, Erigon thực hiện đồng bộ đầy đủ với ổ cứng 8GB, và kết quả sẽ tạo ra hơn 2TB dữ liệu lưu trữ. Hãy đảm bảo `datadir` đang trỏ đến đĩa có đủ dung lượng trống hoặc xem xét cờ `--prune` có thể cắt bớt các loại dữ liệu khác nhau. Kiểm tra `--help` của Erigon để tìm hiểu thêm. + +##### Chạy Geth + +Ví dụ này khởi động Geth trên Mạng chính, lưu trữ dữ liệu chuỗi khối tại `/data/ethereum`, bật JSON-RPC và xác định không gian tên nào được phép. Nó cũng bật xác thực để kết nối máy khách đồng thuận, yêu cầu đường dẫn đến `jwtsecret` và tùy chọn xác định kết nối nào được phép, trong ví dụ của chúng tôi là chỉ từ `localhost`. + +```sh +geth --mainnet \ + --datadir "/data/ethereum" \ + --http --authrpc.addr localhost \ + --authrpc.vhosts="localhost" \ + --authrpc.port 8551 + --authrpc.jwtsecret=/path/to/jwtsecret +``` + +Kiểm tra [tài liệu về tất cả các tùy chọn cấu hình](https://geth.ethereum.org/docs/fundamentals/command-line-options) và tìm hiểu thêm về [việc chạy Geth với một máy khách đồng thuận](https://geth.ethereum.org/docs/getting-started/consensus-clients). + +##### Chạy Nethermind + +Nethermind cung cấp nhiều [tùy chọn cài đặt](https://docs.nethermind.io/get-started/installing-nethermind) khác nhau. Gói cài đặt đi kèm với nhiều tệp thực thi, trong đó có Launcher với phần cài đặt hướng dẫn, giúp bạn tạo cấu hình bằng cách tương tác. Ngoài ra, còn có Runner, chính là tệp thực thi, và bạn có thể chạy nó trực tiếp với các cấu hình Flag. JSON-RPC được bật theo mặc định. + +```sh +Nethermind.Runner --config mainnet \ + --datadir /data/ethereum \ + --JsonRpc.JwtSecretFile=/path/to/jwtsecret +``` + +Tài liệu của Nethermind cung cấp một [hướng dẫn hoàn chỉnh](https://docs.nethermind.io/get-started/running-node/) về việc chạy Nethermind với máy khách đồng thuận. + +Một Client thực thi sẽ khởi động các chức năng cốt lõi của nó, mở các endpoint đã chọn và bắt đầu tìm kiếm các nút ngang hàng. Sau khi tìm thấy các nút ngang hàng thành công, Client sẽ bắt đầu quá trình đồng bộ. Client thực thi sẽ chờ kết nối từ Client đồng thuận. Dữ liệu chuỗi khối hiện tại sẽ khả dụng khi Client đã đồng bộ thành công với trạng thái mới nhất. + +##### Chạy Reth + +Ví dụ này chạy Reth trên mạng chính, sử dụng dữ liệu địa điểm mặc định. Bật xác thực JSON-RPC và Engine RPC để kết nối máy khách đồng thuận được xác định bởi đường dẫn `jwtsecret`, chỉ cho phép các lệnh gọi từ `localhost`. + +```sh +reth node \ + --authrpc.jwtsecret /path/to/jwtsecret \ + --authrpc.addr 127.0.0.1 \ + --authrpc.port 8551 +``` + +Xem [Cấu hình Reth](https://reth.rs/run/config.html?highlight=data%20directory#configuring-reth) để tìm hiểu thêm về các thư mục dữ liệu mặc định. [Tài liệu của Reth](https://reth.rs/run/mainnet.html) chứa các tùy chọn bổ sung và chi tiết cấu hình. + +#### Khởi động máy khách đồng thuận {#starting-the-consensus-client} + +Client đồng thuận phải được bắt đầu với cấu hình cổng giao thức phù hợp để kết nối RPC cục bộ tới Client thực thi. Client đồng thuận phải chạy với cổng của Client thực thi đã mở được truyền vào như tham số cấu hình. + +Máy khách đồng thuận cũng cần đường dẫn đến `jwt-secret` của máy khách thực thi để xác thực kết nối RPC giữa chúng. Giống như ví dụ thực thi ở trên, mỗi Client đồng thuận có một cấu hình Flag sử dụng thư mục Token jwt như một tham số. Điều này phải nhất quán với đường dẫn `jwtsecret` được cung cấp cho máy khách thực thi. + +Nếu bạn dự định chạy một nút xác thực, hãy nhớ thêm một cấu hình Flag để chỉ định địa chỉ Ethereum của người nhận phí. Đây là nơi phần thưởng Ether cho nút của bạn sẽ được tích lũy. Mỗi máy khách đồng thuận có một tùy chọn, ví dụ: `--suggested-fee-recipient=0xabcd1`, nhận một địa chỉ Ethereum làm đối số. + +Khi khởi động một Nút Beacon trên một mạng thử nghiệm, bạn có thể tiết kiệm đáng kể thời gian đồng bộ hóa bằng cách sử dụng một điểm cuối công khai cho [đồng bộ hóa điểm kiểm duyệt (Checkpoint sync)](https://notes.ethereum.org/@launchpad/checkpoint-sync). + +#### Chạy một máy khách đồng thuận {#running-a-consensus-client} + +##### Chạy Lighthouse + +Trước khi chạy Lighthouse, hãy tìm hiểu thêm về cách cài đặt và cấu hình nó trong [Sách Lighthouse](https://lighthouse-book.sigmaprime.io/installation.html). + +```sh +lighthouse beacon_node \ + --network mainnet \ + --datadir /data/ethereum \ + --http \ + --execution-endpoint http://127.0.0.1:8551 \ + --execution-jwt /path/to/jwtsecret +``` + +##### Chạy Lodestart + +Cập nhật phần mềm Lodestart bằng cách biên dịch hoặc tải xuống Docker image. Tìm hiểu thêm trong [tài liệu](https://chainsafe.github.io/lodestar/) và [hướng dẫn thiết lập](https://hackmd.io/@philknows/rk5cDvKmK) toàn diện hơn. + +```sh +lodestar beacon \ + --dataDir="/data/ethereum" \ + --network=mainnet \ + --eth1.enabled=true \ + --execution.urls="http://127.0.0.1:8551" \ + --jwt-secret="/path/to/jwtsecret" +``` + +##### Chạy Nimbus + +Nimbus hoạt động như Client đồng thuận và thực thi. Nó có thể được chạy trên nhiều loại thiết bị thậm chí là khả năng tính toán thấp. +Sau khi [cài đặt các gói phụ thuộc và chính Nimbus](https://nimbus.guide/quick-start.html), bạn có thể chạy máy khách đồng thuận của nó: + +```sh +nimbus_beacon_node \ + --network=mainnet \ + --web3-url=http://127.0.0.1:8551 \ + --rest \ + --jwt-secret="/path/to/jwtsecret" +``` + +##### Chạy Prysm + +Prysm đi kèm với một tập lệnh cho phép cài đặt tự động một cách dễ dàng. Chi tiết có thể được tìm thấy trong [tài liệu của Prysm](https://prysm.offchainlabs.com/docs/install-prysm/install-with-script/). + +```sh +./prysm.sh beacon-chain \ + --mainnet \ + --datadir /data/ethereum \ + --execution-endpoint=http://localhost:8551 \ + --jwt-secret=/path/to/jwtsecret +``` + +##### Chạy Teku + +```sh +teku --network mainnet \ + --data-path "/data/ethereum" \ + --ee-endpoint http://localhost:8551 \ + --ee-jwt-secret-file "/path/to/jwtsecret" +``` + +Khi một Client đồng thuận kết nối với Client thực thi để đọc hợp đồng ký gửi và nhận diện các nút xác thực, nó cũng đồng thời kết nối với các nút Beacon ngang hàng khác và bắt đầu đồng bộ các Slot đồng thuận từ khởi nguyên. Khi nút Beacon đạt tới chu kỳ hiện tại, Beacon API sẽ khả dụng cho các nút xác thực của bạn. Tìm hiểu thêm về [các API của Nút Beacon](https://eth2docs.vercel.app/). + +### Thêm Trình xác thực {#adding-validators} + +Một Client đồng thuận đóng vai trò là nút Beacon để các nút xác thực có thể kết nối. Mỗi Client đồng thuận có phần mềm xác thực riêng được miêu tả chi tiết trong tài liệu của nó. + +Việc chạy trình xác thực của riêng bạn cho phép [đặt cược solo](/staking/solo/), phương pháp có tác động lớn nhất và phi tín nhiệm để hỗ trợ mạng Ethereum. Tuy nhiên, điều này đòi hỏi khoảng cọc là 32 ETH. Để chạy một trình xác thực trên nút của riêng bạn với số tiền nhỏ hơn, một bể (pool) phi tập trung với các nhà khai thác nút không cần cấp phép, chẳng hạn như [Rocket Pool](https://rocketpool.net/node-operators), có thể sẽ khiến bạn quan tâm. + +Cách dễ nhất để bắt đầu với việc đặt cược và tạo khóa trình xác thực là sử dụng [Hoodi Testnet Staking Launchpad](https://hoodi.launchpad.ethereum.org/), cho phép bạn kiểm tra thiết lập của mình bằng cách [chạy các nút trên Hoodi](https://notes.ethereum.org/@launchpad/hoodi). Khi bạn đã sẵn sàng cho Mạng chính, bạn có thể lặp lại các bước này bằng cách sử dụng [Mainnet Staking Launchpad](https://launchpad.ethereum.org/). + +Xem [trang đặt cược](/staking) để có cái nhìn tổng quan về các tùy chọn đặt cược. + +### Sử dụng nút {#using-the-node} + +Các máy khách thực thi cung cấp các [điểm cuối API RPC](/developers/docs/apis/json-rpc/) mà bạn có thể sử dụng để gửi giao dịch, tương tác hoặc triển khai các hợp đồng thông minh trên mạng Ethereum theo nhiều cách khác nhau: + +- Gọi chúng theo cách thủ công bằng một giao thức phù hợp (ví dụ: sử dụng `curl`) +- Đính kèm một bảng điều khiển (console) được cung cấp (ví dụ: `geth attach`) +- Triển khai chúng trong các ứng dụng sử dụng thư viện web3, ví dụ: [web3.py](https://web3py.readthedocs.io/en/stable/overview.html#overview), [ethers](https://github.com/ethers-io/ethers.js/) + +Các Client khác nhau có những thực thi khác nhau về RPC endpoint. Tuy nhiên đã có tiêu chuẩn JSON-RPC mà bạn có thể sử dụng được cho mỗi Client. Để có cái nhìn tổng quan, [hãy đọc tài liệu JSON-RPC](/developers/docs/apis/json-rpc/). Các ứng dụng cần thông tin từ mạng Ethereum có thể sử dụng RPC này. Ví dụ: ví phổ biến MetaMask cho phép bạn [kết nối với điểm cuối RPC của riêng mình](https://metamask.zendesk.com/hc/en-us/articles/360015290012-Using-a-Local-Node) với các lợi ích mạnh mẽ về quyền riêng tư và bảo mật. + +Tất cả các máy khách đồng thuận đều cung cấp một [API Beacon](https://ethereum.github.io/beacon-APIs) có thể được sử dụng để kiểm tra trạng thái của máy khách đồng thuận hoặc tải xuống các khối và dữ liệu đồng thuận bằng cách gửi yêu cầu bằng các công cụ như [Curl](https://curl.se). Các thông tin có thể được tìm thấy trên tài liệu của từng Client đồng thuận. + +#### Tiếp cận RPC {#reaching-rpc} + +Cổng mặc định cho JSON-RPC của máy khách thực thi là `8545` nhưng bạn có thể sửa đổi các cổng của các điểm cuối cục bộ trong cấu hình. Theo mặc định, giao diện RPC chỉ có thể truy cập được cục bộ trên máy tính của bạn. Để có thể truy cập từ xa, bạn có thể muốn hiển thị nó ra công khai bằng cách thay đổi địa chỉ thành `0.0.0.0`. Điều này sẽ giúp nó có thể truy cập được qua mạng cục bộ và các địa chỉ IP công cộng. Trong hầu hết trường hợp, bạn cũng sẽ cần thiết lập cổng chuyển tiếp trên bộ định tuyến của mình. + +Hãy hết sức thận trọng khi mở cổng ra Internet, vì việc này sẽ cho phép bất kỳ ai trên mạng điều khiển nút của bạn. Kẻ tấn công có thể truy cập vào nút của bạn để làm sập hệ thống hoặc đánh cắp tiền nếu bạn đang dùng Client như một ví. + +Một cách giải quyết là ngăn không cho các phương thức RPC có thể gây hại bị chỉnh sửa. Ví dụ, với Geth, bạn có thể khai báo các phương thức có thể sửa đổi bằng một cờ: `--http.api web3,eth,txpool`. + +Việc truy cập vào giao diện RPC có thể được mở rộng thông qua việc phát triển API tầng biên hoặc các ứng dụng máy chủ web, như Nginx, và kết nối chúng với địa chỉ và cổng cục bộ của Client. Tận dụng một lớp trung gian cũng cho phép các nhà phát triển thiết lập chứng chỉ cho các kết nối `https` an toàn đến giao diện RPC. + +Việc thiết lập một máy chủ Web, proxy hoặc REST API công khai không phải là cách duy nhất để cung cấp quyền truy cập tới RPC endpoint của nút. Một cách khác để thiết lập một điểm cuối có thể truy cập công khai mà vẫn bảo vệ quyền riêng tư là chạy nút của bạn trên dịch vụ onion [Tor](https://www.torproject.org/) của riêng bạn. Điều này cho phép bạn truy cập RPC từ bên ngoài mạng cục bộ mà không cần địa chỉ IP công cộng hoặc mở cổng công khai. Tuy nhiên, việc sử dụng cấu hình này có thể khiến RPC endpoint chỉ truy cập được thông qua mạng Tor, vốn không được tất cả ứng dụng hỗ trợ và có thể dẫn đến sự cố kết nối. + +Để làm điều này, bạn phải tạo [dịch vụ onion](https://community.torproject.org/onion-services/) của riêng mình. Xem [tài liệu](https://community.torproject.org/onion-services/setup/) về thiết lập dịch vụ onion để tự lưu trữ. Bạn có thể trỏ nó tới một trang chủ Web dùng Proxy tới cổng RPC hoặc trỏ trực tiếp tới RPC. + +Cuối cùng, một trong những cách phổ biến nhất là cung cấp quyền truy cập vào mạng nội bộ thông qua VPN. Tùy thuộc vào trường hợp sử dụng và số lượng người dùng cần truy cập vào nút của bạn, một kết nối VPN an toàn có thể là một lựa chọn. OpenVPN là một SSL VPN đầy đủ tính năng, triển khai mở rộng mạng an toàn ở lớp 2 hoặc 3 của OSI bằng cách sử dụng giao thức SSL/TLS tiêu chuẩn ngành, hỗ trợ các phương thức xác thực máy khách linh hoạt dựa trên chứng chỉ, thẻ thông minh và/hoặc thông tin đăng nhập bằng tên người dùng/mật khẩu, và cho phép các chính sách kiểm soát truy cập cụ thể của người dùng hoặc nhóm sử dụng các quy tắc tường lửa được áp dụng cho giao diện VPN ảo. + +### Vận hành nút {#operating-the-node} + +Bạn nên theo dõi thường xuyên nút của bạn để chắc rằng nó đang chạy một cách đúng. Bạn có thể cần bảo dưỡng định kì. + +#### Giữ cho nút luôn trực tuyến {#keeping-node-online} + +Nút của bạn không cần phải trực tuyến mọi thời điểm, nhưng bạn nên giữ nó trực tuyến càng nhiều càng tốt giúp nó đồng bộ với mạng lưới. Bạn có thể tắt nó để làm mới nó, nhưng hãy hiểu như thế này: + +- Tắt nó có thể tốn một vài phút nếu như trạng thái vẫn đang được viết vào ổ đĩa. +- Ép tắt đột ngột có thể làm tổn hại dữ liệu bắt buộc bạn phải tái đồng bộ hóa toàn bộ nút. +- Client của bạn sẽ mất đồng bộ mới mạng lưới và cần tái đồng bộ nếu như bạn khởi động lại nó. Trong khi nút bắt đầu đồng độ kể từ lúc nó bị tắt đi, quá tình có thể tốn thời gian tùy thuộc vào thời gian nó ngoại tuyến. + +_Điều này không áp dụng cho các nút trình xác thực lớp đồng thuận._ Việc đưa nút của bạn ngoại tuyến sẽ ảnh hưởng đến tất cả các dịch vụ phụ thuộc vào nó. Nếu bạn đang chạy một nút cho mục đích _đặt cược_, bạn nên cố gắng giảm thiểu thời gian chết nhiều nhất có thể. + +#### Tạo các dịch vụ máy khách {#creating-client-services} + +Cân nhắc tạo một Service để chạy Client tự động khi bật lên. Ví dụ, trên các máy chủ Linux, một phương pháp hay là tạo một dịch vụ, ví dụ, với `systemd`, thực thi máy khách với cấu hình phù hợp, dưới một người dùng có các đặc quyền hạn chế và tự động khởi động lại. + +#### Cập nhật máy khách {#updating-clients} + +Bạn cần phải giữ cho phần mềm máy khách của bạn được cập nhật với các bản vá bảo mật, tính năng và [EIP](/eips/) mới nhất. Đặc biệt là trước các [phân nhánh cứng](/ethereum-forks/), hãy chắc chắn bạn đang chạy các phiên bản máy khách chính xác. + +> Trước các bản cập nhật mạng quan trọng, EF sẽ đăng một bài trên [blog](https://blog.ethereum.org) của mình. Bạn có thể [đăng ký nhận các thông báo này](https://blog.ethereum.org/category/protocol#subscribe) để nhận thông báo qua thư khi nút của bạn cần cập nhật. + +Cập nhật Client rất đơn giản. Mỗi Client có một chỉ dẫn cụ thể trong tài liệu của họ, nhưng quá trình này chỉ thường để tải phiên bản mới nhất và phải khởi động lại Client với tệp thực thi mới. Client sẽ quay trở về guồng cũ, nhưng với bản cập nhật mới. + +Mỗi bản triển khai Client đều có một chuỗi String mà con người có thể đọc được, được dùng trong giao thức ngang hàng, nhưng cũng có thể truy cập từ dòng lệnh. Biến String này cho phép người dùng kiểm tra xem họ có đang chạy đúng phiên bản hay không, đồng thời cho phép các trình duyệt khối và các công cụ phân tích khác định lượng sự phân bố của từng Client cụ thể trên mạng lưới. Hãy tham khảo tài liệu hướng dẫn của từng client để biết thêm thông tin về phiên bản String. + +#### Chạy các dịch vụ bổ sung {#running-additional-services} + +Chạy nút của bạn cho phép bạn dung Service đòi hỏi truy cập vào RPC của Client Ethereum. Đây là các dịch vụ được xây dựng trên Ethereum như [các giải pháp lớp 2](/developers/docs/scaling/#layer-2-scaling), backend cho ví, trình khám phá khối, các công cụ cho nhà phát triển và cơ sở hạ tầng Ethereum khác. + +#### Giám sát nút {#monitoring-the-node} + +Để có thể theo dõi / đo lường nút của bạn, hãy cân nhắc thu thập số liệu. Client cung cấp các Endpoint số liệu nhờ đó bạn có dữ liệu toàn diện về nút của mình. Sử dụng các công cụ như [InfluxDB](https://www.influxdata.com/get-influxdb/) hoặc [Prometheus](https://prometheus.io/) để tạo cơ sở dữ liệu mà bạn có thể biến thành các hình ảnh hóa và biểu đồ trong phần mềm như [Grafana](https://grafana.com/). Có nhiều cách thiết lập để sử dụng phần mềm này và các bảng điều khiển Grafana khác nhau giúp bạn trực quan hóa nút của mình cũng như toàn bộ mạng lưới. Ví dụ, hãy xem [hướng dẫn về giám sát Geth](/developers/tutorials/monitoring-geth-with-influxdb-and-grafana/). + +Là một phần trong quá trình giám sát, hãy đảm bảo bạn theo dõi hiệu suất của máy. Trong quá trình đồng bộ ban đầu của nút, phần mềm Client có thể tiêu tốn rất nhiều CPU và RAM. Ngoài Grafana, bạn cũng có thể sử dụng các công cụ mà hệ điều hành cung cấp như htop hoặc uptime để thực hiện việc này. + +## Đọc thêm {#further-reading} + +- [Hướng dẫn Đặt cọc Ethereum](https://github.com/SomerEsat/ethereum-staking-guides) - _Somer Esat, thường xuyên cập nhật_ +- [Hướng dẫn | Cách thiết lập trình xác thực để đặt cược Ethereum trên mạng chính](https://www.coincashew.com/coins/overview-eth/guide-or-how-to-setup-a-validator-on-eth2-mainnet) _– CoinCashew, thường xuyên cập nhật_ +- [Hướng dẫn của ETHStaker về việc chạy các trình xác thực trên các mạng thử nghiệm](https://github.com/remyroy/ethstaker#guides) – _ETHStaker, được cập nhật thường xuyên_ +- [Ứng dụng mẫu AWS Blockchain Node Runner cho các Nút Ethereum](https://aws-samples.github.io/aws-blockchain-node-runners/docs/Blueprints/Ethereum) - _AWS, thường xuyên cập nhật_ +- [Câu hỏi thường gặp về The Merge cho các nhà khai thác nút](https://notes.ethereum.org/@launchpad/node-faq-merge) - _Tháng 7 năm 2022_ +- [Phân tích các yêu cầu phần cứng để trở thành một nút xác thực đầy đủ của Ethereum](https://medium.com/coinmonks/analyzing-the-hardware-requirements-to-be-an-ethereum-full-validated-node-dc064f167902) _– Albert Palau, 24 tháng 9 năm 2018_ +- [Chạy các nút đầy đủ Ethereum: Hướng dẫn cho người có ít động lực](https://medium.com/@JustinMLeroux/running-ethereum-full-nodes-a-guide-for-the-barely-motivated-a8a13e7a0d31) _– Justin Leroux, ngày 7 tháng 11 năm 2019_ +- [Chạy một nút Hyperledger Besu trên Mạng chính Ethereum: Lợi ích, Yêu cầu và Thiết lập](https://pegasys.tech/running-a-hyperledger-besu-node-on-the-ethereum-mainnet-benefits-requirements-and-setup/) _– Felipe Faraggi, 7 tháng 5 năm 2020_ +- [Triển khai Máy khách Nethermind Ethereum với Ngăn xếp Giám sát](https://medium.com/nethermind-eth/deploying-nethermind-ethereum-client-with-monitoring-stack-55ce1622edbd) _– Nethermind.eth, 8 tháng 7 năm 2020_ + +## Các chủ đề liên quan {#related-topics} + +- [Các nút và client](/developers/docs/nodes-and-clients/) +- [Các khối](/developers/docs/blocks/) +- [Các mạng](/developers/docs/networks/) diff --git a/public/content/translations/vi/developers/docs/oracles/index.md b/public/content/translations/vi/developers/docs/oracles/index.md new file mode 100644 index 00000000000..2f9767cc4cc --- /dev/null +++ b/public/content/translations/vi/developers/docs/oracles/index.md @@ -0,0 +1,433 @@ +--- +title: Oracles +description: "Oracle cung cấp cho hợp đồng thông minh Ethereum quyền truy cập vào dữ liệu thực tế, mở ra nhiều trường hợp sử dụng hơn và mang lại giá trị lớn hơn cho người dùng." +lang: vi +--- + +Oracles là các ứng dụng tạo ra dữ liệu cung cấp thông tin từ bên ngoài cho blockchain cho hợp đồng thông minh. Điều này là cần thiết vì các hợp đồng thông minh dựa trên Ethereum không thể truy cập thông tin bên ngoài mạng blockchain theo mặc định. + +Việc cung cấp cho các hợp đồng thông minh khả năng thực thi dựa trên dữ liệu ngoài chuỗi mở rộng tiện ích và giá trị của các ứng dụng phi tập trung. Chẳng hạn, các thị trường dự đoán trên chuỗi sử dụng các oracle để cung cấp thông tin về kết quả mà họ dùng để xác thực dự đoán của người dùng. Giả sử Alice đặt cược 20 ETH vào ai sẽ trở thành tổng thống tiếp theo của Hoa Kỳ. Tổng thống. Trong trường hợp đó, dapp dự đoán thị trường cần một oracle để xác nhận kết quả bầu cử và xem Alice có đủ điều kiện nhận tiền thưởng không. + +## Điều kiện tiên quyết {#prerequisites} + +Trang này giả định rằng người đọc đã quen thuộc với các nguyên tắc cơ bản của Ethereum, bao gồm [các nút](/developers/docs/nodes-and-clients/), [cơ chế đồng thuận](/developers/docs/consensus-mechanisms/) và [EVM](/developers/docs/evm/). Bạn cũng nên nắm vững về [hợp đồng thông minh](/developers/docs/smart-contracts/) và [cấu trúc hợp đồng thông minh](/developers/docs/smart-contracts/anatomy/), đặc biệt là [các sự kiện](/glossary/#events). + +## Một blockchain oracle là gì? {#what-is-a-blockchain-oracle} + +Oracle là các ứng dụng tìm nguồn, xác minh và truyền thông tin bên ngoài (tức là thông tin được lưu trữ ngoài chuỗi) tới các hợp đồng thông minh chạy trên chuỗi khối. Ngoài việc lấy dữ liệu offchain và phát sóng nó trên Ethereum, các oracle còn có thể đẩy thông tin từ blockchain tới các hệ thống bên ngoài, ví dụ như mở khóa một ổ khóa thông minh khi người dùng gửi phí qua giao dịch Ethereum. + +Nếu không có oracle, hợp đồng thông minh sẽ bị giới hạn hoàn toàn trong dữ liệu trên chuỗi. + +Các oracle khác nhau dựa trên nguồn dữ liệu (một hoặc nhiều nguồn), mô hình tin cậy (tập trung hoặc phi tập trung) và kiến trúc hệ thống (đọc ngay, xuất bản-theo dõi, và yêu cầu-phản hồi). Chúng ta cũng có thể phân biệt các oracle dựa trên việc chúng lấy dữ liệu bên ngoài để sử dụng cho các hợp đồng trên chuỗi (oracle đầu vào), gửi thông tin từ blockchain đến các ứng dụng ngoài chuỗi (oracle đầu ra), hoặc thực hiện các tác vụ tính toán ngoài chuỗi (oracle tính toán). + +## Tại sao hợp đồng thông minh lại cần oracle? {#why-do-smart-contracts-need-oracles} + +Nhiều lập trình viên coi hợp đồng thông minh như là mã chạy ở những địa chỉ cụ thể trên blockchain. Tuy nhiên, một [quan điểm tổng quát hơn về hợp đồng thông minh](/smart-contracts/) là chúng là các chương trình phần mềm tự thực thi có khả năng thực thi các thỏa thuận giữa các bên khi các điều kiện cụ thể được đáp ứng - do đó có thuật ngữ “hợp đồng thông minh”. + +Tuy nhiên, việc sử dụng hợp đồng thông minh để thi hành các thỏa thuận giữa các cá nhân không phải là điều đơn giản, vì Ethereum mang tính nhất quán.” Một [hệ thống xác định](https://en.wikipedia.org/wiki/Deterministic_algorithm) là một hệ thống luôn tạo ra kết quả giống nhau với một trạng thái ban đầu và một đầu vào cụ thể, nghĩa là không có sự ngẫu nhiên hoặc biến đổi trong quá trình tính toán đầu ra từ đầu vào. + +Để đạt được sự thực thi có tính xác định, các chuỗi khối giới hạn các nút chỉ đạt được sự đồng thuận về các câu hỏi nhị phân đơn giản (đúng/sai) bằng cách sử dụng _duy nhất_ dữ liệu được lưu trữ trên chính chuỗi khối đó. Ví dụ về những câu hỏi như vậy bao gồm: + +- “Chủ sở hữu tài khoản (được xác định bởi một khóa công khai) có ký kết giao dịch này bằng khóa riêng đã được kết nối hay không?” +- “Tài khoản này có đủ tiền để thanh toán giao dịch không?” +- "Giao dịch này có hợp lệ trong bối cảnh hợp đồng thông minh này không?", v.v. + +Nếu các chuỗi khối nhận thông tin từ các nguồn bên ngoài (tức là từ thế giới thực), tính xác định sẽ không thể đạt được, ngăn cản các nút thống nhất về tính hợp lệ của các thay đổi đối với trạng thái của chuỗi khối. Ví dụ, một hợp đồng thông minh thực hiện giao dịch dựa trên tỷ giá hối đoái ETH-USD hiện tại được lấy từ một giá API truyền thống. Con số này có khả năng thay đổi thường xuyên (chưa kể rằng API có thể bị ngừng hỗ trợ hoặc bị tấn công), điều này có nghĩa là các nút thực hiện cùng một mã hợp đồng sẽ đạt được những kết quả khác nhau. + +Đối với một blockchain công cộng như Ethereum, có hàng ngàn nút xử lý giao dịch trên toàn thế giới, tính nhất quán là rất quan trọng. Với việc không có cơ quan trung ương nào đóng vai trò là nguồn thông tin chính xác, các nút cần có cơ chế để đạt được trạng thái giống nhau sau khi áp dụng cùng một giao dịch. Nếu có trường hợp mà nút A chạy mã hợp đồng thông minh và nhận được '3' như kết quả, trong khi nút B nhận được '7' sau khi chạy cùng một giao dịch, điều đó sẽ dẫn đến sự đồng thuận bị phá hoại và làm mất giá trị của Ethereum như một nền tảng máy tính phi tập trung. + +Tình huống này cũng chỉ ra vấn đề với việc thiết kế blockchain để lấy thông tin từ các nguồn bên ngoài. Tuy nhiên, các oracle giải quyết vấn đề này bằng cách lấy thông tin từ các nguồn ngoài chuỗi và lưu trữ nó trên blockchain để hợp đồng thông minh sử dụng. Vì thông tin được lưu trữ trên chuỗi không thể bị thay đổi và có sẵn công khai, các nút Ethereum có thể sử dụng một cách an toàn dữ liệu oracle đã nhập từ ngoài chuỗi để tính toán các thay đổi trạng thái mà không làm mất tính đồng thuận. + +Để thực hiện điều này, một oracle thường được cấu thành từ một hợp đồng thông minh hoạt động trên chuỗi và một số thành phần ngoài chuỗi. Hợp đồng onchain nhận các yêu cầu dữ liệu từ các hợp đồng thông minh khác, sau đó chuyển tiếp đến thành phần offchain (gọi là nút oracle). Nút oracle này có thể truy vấn các nguồn dữ liệu—ví dụ như sử dụng các giao diện lập trình ứng dụng (APIs)—và gửi các giao dịch để lưu trữ dữ liệu yêu cầu trong bộ nhớ của hợp đồng thông minh. + +Về cơ bản, một oracle blockchain kết nối khoảng cách thông tin giữa blockchain và môi trường bên ngoài, tạo ra các "hợp đồng thông minh lai". Hợp đồng thông minh lai là loại hợp đồng hoạt động dựa trên sự kết hợp giữa mã hợp đồng trên chuỗi và hạ tầng ngoài chuỗi. Các thị trường dự đoán phi tập trung là một ví dụ tuyệt vời về hợp đồng thông minh lai. Một số ví dụ khác có thể bao gồm hợp đồng thông minh bảo hiểm mùa màng mà sẽ thanh toán khi một nhóm oracles xác định rằng một số hiện tượng thời tiết nhất định đã xảy ra. + +## Vấn đề oracle là gì? {#the-oracle-problem} + +Các Oracle giải quyết một vấn đề quan trọng, nhưng cũng gây ra một số phức tạp, ví dụ: + +- Làm sao để chúng ta kiểm tra rằng thông tin đã được thêm vào từ nguồn chuẩn hoặc không bị can thiệp? + +- Làm thế nào để chúng ta đảm bảo rằng dữ liệu này luôn sẵn có và được cập nhật thường xuyên? + +Nó được gọi là “vấn đề oracle” cho thấy những vấn đề gặp phải khi sử dụng oracle blockchain để gửi dữ liệu vào hợp đồng thông minh. Dữ liệu từ một oracle phải chính xác thì hợp đồng thông minh mới hoạt động đúng. Hơn nữa, việc phải ‘tin tưởng’ vào các nhà điều hành oracle để cung cấp thông tin chính xác làm giảm đi khía cạnh 'không cần tin tưởng' của hợp đồng thông minh. + +Các oracle khác nhau đưa ra những giải pháp khác nhau cho vấn đề oracle, mà chúng ta sẽ khám phá sau. Thường thì người ta đánh giá các Oracles dựa trên khả năng xử lý những thách thức sau: + +1. **Tính chính xác**: Một oracle không nên khiến các hợp đồng thông minh kích hoạt thay đổi trạng thái dựa trên dữ liệu ngoài chuỗi không hợp lệ. Một oracle phải đảm bảo _tính xác thực_ và _tính toàn vẹn_ của dữ liệu. Tính xác thực có nghĩa là dữ liệu được lấy từ nguồn chính xác, trong khi tính toàn vẹn có nghĩa là dữ liệu vẫn còn nguyên vẹn (tức là không bị thay đổi) trước khi được gửi lên chuỗi. + +2. **Tính khả dụng**: Một oracle không nên trì hoãn hoặc ngăn chặn các hợp đồng thông minh thực hiện các hành động và kích hoạt các thay đổi trạng thái. Điều này có nghĩa là dữ liệu từ một oracle phải _sẵn có theo yêu cầu_ mà không bị gián đoạn. + +3. **Tính tương thích về ưu đãi**: Một oracle nên khuyến khích các nhà cung cấp dữ liệu ngoài chuỗi gửi thông tin chính xác cho các hợp đồng thông minh. Tính tương thích về ưu đãi bao gồm _khả năng quy kết_ và _trách nhiệm giải trình_. Khả năng quy trách nhiệm cho phép liên kết một phần thông tin bên ngoài với nhà cung cấp của nó, trong khi trách nhiệm buộc các nhà cung cấp dữ liệu phải chịu trách nhiệm về thông tin họ cung cấp, để họ có thể được thưởng hoặc bị phạt dựa trên chất lượng của thông tin được cung cấp. + +## Dịch vụ oracle blockchain hoạt động như thế nào? {#how-does-a-blockchain-oracle-service-work} + +### Người dùng {#users} + +Người dùng là các thực thể (tức là, các hợp đồng thông minh) cần thông tin bên ngoài chuỗi khối để hoàn thành các hành động cụ thể. Quy trình làm việc cơ bản của một dịch vụ oracle bắt đầu bằng việc người dùng gửi yêu cầu dữ liệu đến hợp đồng oracle. Các yêu cầu dữ liệu thường sẽ trả lời một số hoặc tất cả những câu hỏi sau: + +1. Những nguồn nào mà các nút offchain có thể tham khảo để lấy thông tin đã yêu cầu? + +2. Cách mà các phóng viên xử lý thông tin từ các nguồn dữ liệu và trích xuất các điểm dữ liệu hữu ích là như thế nào? + +3. Có bao nhiêu nút oracle có thể tham gia vào việc truy xuất dữ liệu? + +4. Làm sao để xử lý sự thiếu nhất quán trong báo cáo oracle? + +5. Phương pháp nào nên được áp dụng trong việc lọc các bài nộp và tổng hợp báo cáo thành một giá trị duy nhất? + +### Hợp đồng Oracle {#oracle-contract} + +Hợp đồng oracle là thành phần onchain của dịch vụ oracle. Nó lắng nghe các yêu cầu dữ liệu từ các hợp đồng khác, chuyển câu hỏi dữ liệu tới các nút oracle, và phát sóng dữ liệu được trả về cho các hợp đồng client. Hợp đồng này có thể thực hiện một số phép toán trên các điểm dữ liệu trả về để tạo ra một giá trị tổng hợp gửi đến hợp đồng yêu cầu. + +Hợp đồng oracle cung cấp một số chức năng mà các hợp đồng client gọi đến khi thực hiện yêu cầu dữ liệu. Khi nhận được một truy vấn mới, hợp đồng thông minh sẽ phát ra một [sự kiện nhật ký](/developers/docs/smart-contracts/anatomy/#events-and-logs) với các chi tiết của yêu cầu dữ liệu. Điều này thông báo cho các nút ngoài chuỗi đã đăng ký theo dõi nhật ký (thường sử dụng một lệnh như `eth_subscribe` JSON-RPC), sau đó các nút này sẽ tiến hành truy xuất dữ liệu được xác định trong sự kiện nhật ký. + +Dưới đây là một [ví dụ về hợp đồng oracle](https://medium.com/@pedrodc/implementing-a-blockchain-oracle-on-ethereum-cedc7e26b49e) của Pedro Costa. Đây là một dịch vụ oracle đơn giản có thể truy vấn các API ngoài chuỗi theo yêu cầu của các hợp đồng thông minh khác và lưu trữ thông tin được yêu cầu trên blockchain: + +```solidity +pragma solidity >=0.4.21 <0.6.0; + +contract Oracle { + Request[] requests; //danh sách các yêu cầu được thực hiện cho hợp đồng + uint currentId = 0; //id yêu cầu tăng dần + uint minQuorum = 2; //số lượng phản hồi tối thiểu cần nhận trước khi công bố kết quả cuối cùng + uint totalOracleCount = 3; //Số lượng oracle được mã hóa cứng + + //định nghĩa một yêu cầu api chung + struct Request { + uint id; //id yêu cầu + string urlToQuery; //url của API + string attributeToFetch; //thuộc tính json (khóa) để truy xuất trong phản hồi + string agreedValue; //giá trị từ khóa + mapping(uint => string) answers; //câu trả lời do các oracle cung cấp + mapping(address => uint) quorum; //các oracle sẽ truy vấn câu trả lời (1=oracle chưa bỏ phiếu, 2=oracle đã bỏ phiếu) + } + + //sự kiện kích hoạt oracle bên ngoài chuỗi khối + event NewRequest ( + uint id, + string urlToQuery, + string attributeToFetch + ); + + //được kích hoạt khi có sự đồng thuận về kết quả cuối cùng + event UpdatedRequest ( + uint id, + string urlToQuery, + string attributeToFetch, + string agreedValue + ); + + function createRequest ( + string memory _urlToQuery, + string memory _attributeToFetch + ) + public + { + uint length = requests.push(Request(currentId, _urlToQuery, _attributeToFetch, "")); + Request storage r = requests[length-1]; + + //Địa chỉ oracle được mã hóa cứng + r.quorum[address(0x6c2339b46F41a06f09CA0051ddAD54D1e582bA77)] = 1; + r.quorum[address(0xb5346CF224c02186606e5f89EACC21eC25398077)] = 1; + r.quorum[address(0xa2997F1CA363D11a0a35bB1Ac0Ff7849bc13e914)] = 1; + + //khởi chạy một sự kiện để oracle bên ngoài chuỗi khối phát hiện + emit NewRequest ( + currentId, + _urlToQuery, + _attributeToFetch + ); + + //tăng id yêu cầu + currentId++; + } + + //được oracle gọi để ghi lại câu trả lời của nó + function updateRequest ( + uint _id, + string memory _valueRetrieved + ) public { + + Request storage currRequest = requests[_id]; + + //kiểm tra xem oracle có nằm trong danh sách các oracle đáng tin cậy không + //và nếu oracle chưa bỏ phiếu + if(currRequest.quorum[address(msg.sender)] == 1){ + + //đánh dấu rằng địa chỉ này đã bỏ phiếu + currRequest.quorum[msg.sender] = 2; + + //lặp qua "mảng" câu trả lời cho đến khi có một vị trí trống và lưu giá trị truy xuất được + uint tmpI = 0; + bool found = false; + while(!found) { + //tìm slot trống đầu tiên + if(bytes(currRequest.answers[tmpI]).length == 0){ + found = true; + currRequest.answers[tmpI] = _valueRetrieved; + } + tmpI++; + } + + uint currentQuorum = 0; + + //lặp qua danh sách oracle và kiểm tra xem có đủ oracle (số đại biểu tối thiểu) + //đã bỏ phiếu cho cùng một câu trả lời như câu trả lời hiện tại + for(uint i = 0; i < totalOracleCount; i++){ + bytes memory a = bytes(currRequest.answers[i]); + bytes memory b = bytes(_valueRetrieved); + + if(keccak256(a) == keccak256(b)){ + currentQuorum++; + if(currentQuorum >= minQuorum){ + currRequest.agreedValue = _valueRetrieved; + emit UpdatedRequest ( + currRequest.id, + currRequest.urlToQuery, + currRequest.attributeToFetch, + currRequest.agreedValue + ); + } + } + } + } + } +} +``` + +### Các nút Oracle {#oracle-nodes} + +Nút oracle là thành phần offchain của dịch vụ oracle. Nó lấy thông tin từ các nguồn bên ngoài, như API được lưu trữ trên máy chủ của bên thứ ba, và đưa nó lên blockchain để các hợp đồng thông minh sử dụng. Các nút Oracle lắng nghe các sự kiện từ hợp đồng oracle onchain và tiến hành hoàn thành nhiệm vụ được mô tả trong nhật ký. + +Một nhiệm vụ phổ biến của các nút oracle là gửi yêu cầu [HTTP GET](https://www.w3schools.com/tags/ref_httpmethods.asp) đến một dịch vụ API, phân tích cú pháp phản hồi để trích xuất dữ liệu liên quan, định dạng nó thành một đầu ra mà chuỗi khối có thể đọc được và gửi nó lên chuỗi bằng cách đưa nó vào một giao dịch tới hợp đồng oracle. Nút oracle cũng có thể được yêu cầu xác nhận tính hợp lệ và toàn vẹn của thông tin đã nộp bằng cách sử dụng “bằng chứng xác thực”, mà chúng tôi sẽ khám phá sau. + +Các tính toán oracle cũng dựa vào các nút bên ngoài chuỗi để thực hiện các nhiệm vụ tính toán mà sẽ không khả thi để thực hiện onchain, do chi phí gas và giới hạn kích thước khối. Chẳng hạn, nút oracle có thể được giao nhiệm vụ tạo ra một con số ngẫu nhiên có thể xác minh được (ví dụ, cho các trò chơi dựa trên blockchain). + +## Các mẫu thiết kế Oracle {#oracle-design-patterns} + +Các Oracle có nhiều loại khác nhau, bao gồm _đọc ngay lập tức_, _xuất bản-đăng ký_ và _yêu cầu-phản hồi_, trong đó hai loại sau là phổ biến nhất trong các hợp đồng thông minh của Ethereum. Ở đây chúng ta sẽ nói ngắn gọn về các mô hình publish-subscribe và request-response. + +### Oracle xuất bản-đăng ký {#publish-subscribe-oracles} + +Mô hình oracle này cung cấp một "dữ liệu cung cấp" mà các hợp đồng khác có thể đọc thường xuyên để lấy thông tin. Dữ liệu trong trường hợp này được dự kiến sẽ thay đổi thường xuyên, vì vậy hợp đồng client phải theo dõi các cập nhật về dữ liệu trong kho của oracle. Một ví dụ là một oracle cung cấp thông tin giá ETH-USD mới nhất cho người dùng. + +### Oracle yêu cầu-phản hồi {#request-response-oracles} + +Mô hình yêu cầu-phản hồi cho phép hợp đồng client yêu cầu dữ liệu tùy ý ngoài những gì được cung cấp bởi oracle kiểu công bố-đăng ký. Các oracle yêu cầu-phản hồi là lý tưởng khi tập dữ liệu quá lớn để lưu trữ trong bộ nhớ của hợp đồng thông minh, và/hoặc người dùng chỉ cần một phần nhỏ của dữ liệu vào bất kỳ thời điểm nào.Hợp đồng thông minh + +Mặc dù phức tạp hơn các mô hình xuất bản-đăng ký, các oracle yêu cầu-phản hồi về cơ bản là những gì chúng tôi đã mô tả ở phần trước. Bộ oracle sẽ có một phần trên chuỗi giúp nhận yêu cầu dữ liệu và chuyển nó cho một nút ngoài chuỗi để xử lý. + +Người dùng bắt buộc phải trả phí để lấy thông tin từ nguồn ngoài chuỗi. Hợp đồng client cũng phải cung cấp ngân sách để chi trả cho các chi phí xăng dầu phát sinh bởi hợp đồng oracle trong việc trả lại phản hồi thông qua hàm callback được chỉ định trong yêu cầu. + +## Oracle tập trung và phi tập trung {#types-of-oracles} + +### Oracle tập trung {#centralized-oracles} + +Một oracle tập trung được kiểm soát bởi một thực thể duy nhất chịu trách nhiệm tổng hợp thông tin offchain và cập nhật dữ liệu của hợp đồng oracle theo yêu cầu. Oracle tập trung thì hiệu quả vì chúng dựa vào một nguồn thông tin duy nhất. Chúng có thể hoạt động tốt hơn trong các trường hợp mà các tập dữ liệu độc quyền được công bố trực tiếp bởi chủ sở hữu với một chữ ký được công nhận rộng rãi. Tuy nhiên, chúng cũng mang theo những bất lợi: + +#### Đảm bảo tính chính xác thấp {#low-correctness-guarantees} + +Với các oracle tập trung, không có cách nào để xác nhận thông tin được cung cấp là chính xác hay không. Ngay cả những nhà cung cấp "có uy tín" cũng có thể trở nên trái đạo đức hoặc bị tấn công mạng. Nếu oracle bị chiếm đoạt, các hợp đồng thông minh sẽ thực thi dựa trên dữ liệu xấu. + +#### Tính khả dụng kém {#poor-availability} + +Các oracle tập trung không đảm bảo sẽ luôn cung cấp dữ liệu offchain cho các hợp đồng thông minh khác. Nếu nhà cung cấp quyết định tắt dịch vụ hoặc một tin tặc chiếm đoạt thành phần offchain của oracle, hợp đồng thông minh của bạn sẽ có nguy cơ bị 'tấn công từ chối dịch vụ' (DoS). + +#### Tính tương thích về ưu đãi kém {#poor-incentive-compatibility} + +Các oracle tập trung thường có thiết kế kém hoặc không có chính sách khuyến khích đối với nhà cung cấp dữ liệu để gửi thông tin chính xác/không thay đổi. Trả tiền cho oracle để đảm bảo đúng không có nghĩa là họ sẽ trung thực. Vấn đề này trở nên nghiêm trọng hơn khi lượng giá trị được kiểm soát bởi các hợp đồng thông minh gia tăng. + +### Oracle phi tập trung {#decentralized-oracles} + +Các oracle phi tập trung được thiết kế để vượt qua những hạn chế của các oracle tập trung bằng cách loại bỏ các điểm lỗi đơn lẻ. Một dịch vụ oracle phi tập trung bao gồm nhiều người tham gia trong một mạng lưới ngang hàng để đạt được sự đồng thuận về dữ liệu ngoài chuỗi trước khi gửi nó đến một hợp đồng thông minh. + +Một oracle phi tập trung nên (về lý thuyết) không yêu cầu quyền truy cập, không cần tin cậy và không bị quản lý bởi một bên trung tâm; trên thực tế, sự phân cấp giữa các oracle đang tồn tại trên một phổ. Có những mạng lưới oracle bán phi tập trung, nơi bất kỳ ai cũng có thể tham gia, nhưng có một 'chủ sở hữu' có quyền phê duyệt hoặc loại bỏ các nút dựa trên hiệu suất của chúng trong quá khứ. Cả mạng lưới oracle phi tập trung hoàn toàn cũng tồn tại: thường thì chúng chạy như các blockchain độc lập và có các cơ chế đồng thuận rõ ràng để phối hợp các nút và trừng phạt các hành vi sai trái. + +Việc sử dụng các oracle phi tập trung mang lại những lợi ích sau: + +### Đảm bảo tính chính xác cao {#high-correctness-guarantees} + +Các oracle phi tập trung cố gắng đạt được độ chính xác của dữ liệu bằng cách sử dụng các phương pháp khác nhau. Điều này bao gồm việc sử dụng các chứng cứ chứng minh tính xác thực và toàn vẹn của thông tin đã được trả lại, và yêu cầu nhiều bên cùng đồng thuận về tính hợp lệ của dữ liệu bên ngoài. + +#### Bằng chứng xác thực {#authenticity-proofs} + +Chứng minh tính xác thực là các cơ chế mã hóa cho phép xác minh độc lập thông tin được lấy từ các nguồn bên ngoài. Những bằng chứng này có thể xác thực nguồn gốc của thông tin và phát hiện những thay đổi có thể có đối với dữ liệu sau khi lấy. + +Ví dụ về các bằng chứng xác thực bao gồm: + +**Bằng chứng Bảo mật Tầng Vận chuyển (TLS)**: Các nút Oracle thường truy xuất dữ liệu từ các nguồn bên ngoài bằng cách sử dụng kết nối HTTP an toàn dựa trên giao thức Bảo mật Tầng Vận chuyển (TLS). Một số oracle phi tập trung sử dụng bằng chứng xác thực để xác minh các phiên TLS (tức là xác nhận việc trao đổi thông tin giữa một nút và một máy chủ cụ thể) và xác nhận rằng nội dung của phiên đó không bị thay đổi. + +**Chứng thực Môi trường Thực thi Đáng tin cậy (TEE)**: [Môi trường thực thi đáng tin cậy](https://en.wikipedia.org/wiki/Trusted_execution_environment) (TEE) là một môi trường tính toán trong hộp cát được cách ly khỏi các quy trình hoạt động của hệ thống máy chủ của nó. TEEs đảm bảo rằng bất kỳ mã ứng dụng nào hoặc dữ liệu được lưu trữ/sử dụng trong môi trường tính toán đều giữ được tính toàn vẹn, bảo mật và không bị thay đổi. Người dùng cũng có thể tạo một bản xác nhận để chứng minh rằng một phiên bản ứng dụng đang chạy trong môi trường thực thi tin cậy. + +Một số loại oracle phi tập trung yêu cầu các nhà điều hành nút oracle cung cấp các chứng thực TEE. Điều này xác nhận với người dùng rằng nhà điều hành nút đang chạy một phiên bản của client oracle trong môi trường thực thi đáng tin cậy. TEEs ngăn chặn các quy trình bên ngoài thay đổi hoặc đọc mã và dữ liệu của ứng dụng, do đó, những chứng thực đó chứng minh rằng nút oracle đã giữ thông tin nguyên vẹn và bảo mật. + +#### Xác thực thông tin dựa trên sự đồng thuận {#consensus-based-validation-of-information} + +Các oracle tập trung dựa vào một nguồn thông tin duy nhất khi cung cấp dữ liệu cho hợp đồng thông minh, điều này có thể dẫn đến việc công bố thông tin không chính xác. Các oracle phi tập trung giải quyết vấn đề này bằng cách dựa vào nhiều nút oracle để truy vấn thông tin onchain. Bằng cách so sánh dữ liệu từ nhiều nguồn khác nhau, các oracle phi tập trung giảm thiểu rủi ro truyền tải thông tin không hợp lệ đến các hợp đồng trên chuỗi. + +Tuy nhiên, các oracle phi tập trung phải đối mặt với những khác biệt trong thông tin được thu thập từ nhiều nguồn ngoài chuỗi. Để giảm thiểu sự khác biệt trong thông tin và đảm bảo rằng dữ liệu truyền đến hợp đồng oracle phản ánh ý kiến chung của các nút oracle, các oracle phi tập trung sử dụng những cơ chế sau đây: + +##### Bỏ phiếu/staking trên độ chính xác của dữ liệu + +Một số mạng lưới oracle phi tập trung yêu cầu người tham gia bỏ phiếu hoặc cược vào độ chính xác của các câu trả lời cho các truy vấn dữ liệu (ví dụ: "Ai đã thắng cuộc bầu cử tổng thống Mỹ năm 2020?") sử dụng token gốc của mạng. Một giao thức tổng hợp sau đó sẽ tổng hợp các phiếu bầu và cổ phần, và lấy câu trả lời được đa số ủng hộ làm câu trả lời hợp lệ. + +Những node có câu trả lời khác với phần đa sẽ bị phạt bằng cách phát token của chúng cho những node khác cung cấp giá trị chính xác hơn. Việc buộc các nút phải cung cấp một khoản ký quỹ trước khi cung cấp dữ liệu sẽ khuyến khích những phản hồi trung thực, vì họ được cho là những tác nhân kinh tế hợp lý với mục đích tối đa hóa lợi nhuận. + +Việc đặt cọc/bỏ phiếu cũng bảo vệ các oracle phi tập trung khỏi các [cuộc tấn công Sybil](/glossary/#sybil-attack), trong đó các tác nhân độc hại tạo ra nhiều danh tính để lũng đoạn hệ thống đồng thuận. Tuy nhiên, việc staking không thể ngăn chặn việc "freeloading" (các node oracle sao chép thông tin từ người khác) và "xác thực lười biếng" (các node oracle chỉ đi theo số đông mà không tự xác minh thông tin). + +##### Cơ chế điểm Schelling + +[Điểm Schelling](https://en.wikipedia.org/wiki/Focal_point_\(game_theory\)) là một khái niệm lý thuyết trò chơi giả định rằng nhiều thực thể sẽ luôn mặc định chọn một giải pháp chung cho một vấn đề trong trường hợp không có bất kỳ sự giao tiếp nào. Cơ chế điểm Schelling thường được sử dụng trong các mạng oracle phi tập trung để giúp các nút đạt được sự đồng thuận về câu trả lời cho các yêu cầu dữ liệu. + +Một ý tưởng ban đầu cho việc này là [SchellingCoin](https://blog.ethereum.org/2014/03/28/schellingcoin-a-minimal-trust-universal-data-feed/), một nguồn cấp dữ liệu được đề xuất nơi những người tham gia gửi câu trả lời cho các câu hỏi "vô hướng" (các câu hỏi mà câu trả lời được mô tả bằng độ lớn, ví dụ: "giá của ETH là bao nhiêu?"), cùng với một khoản tiền gửi. Những người dùng cung cấp các giá trị trong khoảng từ [phân vị](https://en.wikipedia.org/wiki/Percentile) thứ 25 đến thứ 75 sẽ được thưởng, trong khi những người có giá trị sai lệch nhiều so với giá trị trung vị sẽ bị phạt. + +Mặc dù SchellingCoin không tồn tại ngày nay, một số oracle phi tập trung—đáng chú ý là [Oracle của Giao thức Maker](https://docs.makerdao.com/smart-contract-modules/oracle-module)—sử dụng cơ chế điểm schelling để cải thiện độ chính xác của dữ liệu oracle. Mỗi Oracle Maker bao gồm một mạng lưới P2P ngoài chuỗi của các nút ("người chuyển tiếp" và "nguồn thông tin") chịu trách nhiệm gửi giá thị trường cho các tài sản thế chấp và một hợp đồng "Medianizer" trên chuỗi để tính toán giá trị trung vị của tất cả các giá trị đã được cung cấp. Khi thời gian trì hoãn được chỉ định đã kết thúc, giá trị trung vị này trở thành mức giá tham chiếu mới cho tài sản liên quan. + +Các ví dụ khác về các oracle sử dụng cơ chế điểm Schelling bao gồm [Báo cáo ngoài chuỗi của Chainlink](https://docs.chain.link/architecture-overview/off-chain-reporting) và [Witnet](https://witnet.io/). Trong cả hai hệ thống, các phản hồi từ các nút oracle trong mạng lưới ngang hàng được tổng hợp thành một giá trị tổng hợp duy nhất, chẳng hạn như giá trị trung bình hoặc trung vị. Các nút sẽ nhận được phần thưởng hoặc bị trừng phạt dựa trên mức độ mà câu trả lời của chúng phù hợp hoặc sai lệch so với giá trị tổng hợp. + +Cơ chế điểm Schelling rất hấp dẫn vì chúng tối thiểu hóa dấu tích trên chuỗi (chỉ cần gửi một giao dịch) trong khi đảm bảo tính phi tập trung. Điều này có thể xảy ra bởi vì các nút phải phê duyệt danh sách các phản hồi đã được gửi trước khi nó được đưa vào thuật toán để tính toán giá trị trung bình/trung vị. + +### Tính khả dụng {#availability} + +Dịch vụ oracle phi tập trung đảm bảo khả năng tiệp cận cao đối với dữ liệu ngoài chuỗi cho các hợp đồng thông minh. Điều này được thực hiện bằng cách phân cấp cả nguồn thông tin ngoài chuỗi và các nút chịu trách nhiệm chuyển giao thông tin trên chuỗi. + +Điều này đảm bảo khả năng chịu lỗi vì hợp đồng oracle có thể dựa vào nhiều nút (mà cũng phụ thuộc vào nhiều nguồn dữ liệu) để thực hiện các truy vấn từ các hợp đồng khác. Sự phi tập trung ở cấp độ nguồn _và_ cấp độ người vận hành nút là rất quan trọng—một mạng lưới các nút oracle phục vụ thông tin được truy xuất từ cùng một nguồn sẽ gặp phải vấn đề tương tự như một oracle tập trung. + +Cũng có khả năng để các oracle dựa trên cổ phần có thể cắt giảm quyền hạn của các nhà điều hành nút, những người không phản hồi nhanh chóng các yêu cầu dữ liệu. Điều này thực sự khuyến khích các node oracle đầu tư vào hạ tầng chịu lỗi và cung cấp dữ liệu một cách kịp thời. + +### Tính tương thích về ưu đãi tốt {#good-incentive-compatibility} + +Các oracle phi tập trung thực hiện các thiết kế ưu đãi khác nhau để ngăn chặn hành vi [Byzantine](https://en.wikipedia.org/wiki/Byzantine_fault) giữa các nút oracle. Cụ thể, chúng đạt được _khả năng quy kết_ và _trách nhiệm giải trình_: + +1. Các nút oracle phi tập trung thường phải ký dữ liệu mà họ cung cấp để đáp ứng yêu cầu dữ liệu. Thông tin này giúp đánh giá lịch sử hiệu suất của các nút oracle, để người dùng có thể lọc ra các nút oracle không đáng tin cậy khi thực hiện yêu cầu dữ liệu. Một ví dụ là [Hệ thống Danh tiếng Thuật toán](https://docs.witnet.io/intro/about/architecture#algorithmic-reputation-system) của Witnet. + +2. Các oracle phi tập trung—như đã được giải thích trước đó—có thể yêu cầu các nút đặt cọc vào độ tin cậy của dữ liệu mà họ cung cấp. Nếu yêu cầu được xác minh, khoản đặt cọc này có thể được hoàn trả cùng với phần thưởng cho dịch vụ trung thực. Tuy nhiên, nó cũng có thể bị cắt giảm nếu thông tin không chính xác, điều này cung cấp một mức độ trách nhiệm nhất định. + +## Các ứng dụng của oracle trong hợp đồng thông minh {#applications-of-oracles-in-smart-contracts} + +Dưới đây là một số trường hợp sử dụng phổ biến của oracle trong Ethereum: + +### Truy xuất dữ liệu tài chính {#retrieving-financial-data} + +Các ứng dụng [tài chính phi tập trung](/defi/) (DeFi) cho phép cho vay, đi vay và giao dịch tài sản ngang hàng. Điều này thường đòi hỏi việc thu thập các thông tin tài chính khác nhau, bao gồm dữ liệu tỷ giá hối đoái (để tính toán giá trị fiat của các loại tiền điện tử hoặc so sánh giá token) và dữ liệu thị trường vốn (để tính toán giá trị của các tài sản được token hóa, chẳng hạn như vàng hoặc đô la Mỹ). + +Chẳng hạn, một giao thức cho vay DeFi cần truy vấn giá thị trường hiện tại cho các tài sản (ví dụ: ETH) được gửi làm tài sản đảm bảo. Điều này cho phép hợp đồng xác định giá trị của tài sản thế chấp và xác định số tiền mà nó có thể mượn từ hệ thống. + +Các "oracle giá" phổ biến (như chúng thường được gọi) trong DeFi bao gồm Nguồn cấp dữ liệu giá của Chainlink, [Nguồn cấp dữ liệu giá mở](https://compound.finance/docs/prices) của Giao thức Compound, [Giá trung bình theo thời gian (TWAP)](https://docs.uniswap.org/contracts/v2/concepts/core-concepts/oracles) của Uniswap và [Oracle của Maker](https://docs.makerdao.com/smart-contract-modules/oracle-module). + +Các nhà phát triển nên hiểu rõ những lưu ý đi kèm với những oracle giá này trước khi tích hợp chúng vào dự án của họ. [Bài viết](https://blog.openzeppelin.com/secure-smart-contract-guidelines-the-dangers-of-price-oracles/) này cung cấp một phân tích chi tiết về những gì cần xem xét khi có kế hoạch sử dụng bất kỳ oracle giá nào đã được đề cập. + +Dưới đây là một ví dụ về cách bạn có thể truy xuất giá ETH mới nhất trong hợp đồng thông minh của mình bằng cách sử dụng nguồn cấp dữ liệu giá Chainlink: + +```solidity +pragma solidity ^0.6.7; + +import "@chainlink/contracts/src/v0.6/interfaces/AggregatorV3Interface.sol"; + +contract PriceConsumerV3 { + + AggregatorV3Interface internal priceFeed; + + /** + * Mạng: Kovan + * Bộ tổng hợp: ETH/USD + * Địa chỉ: 0x9326BFA02ADD2366b30bacB125260Af641031331 + */ + constructor() public { + priceFeed = AggregatorV3Interface(0x9326BFA02ADD2366b30bacB125260Af641031331); + } + + /** + * Trả về giá mới nhất + */ + function getLatestPrice() public view returns (int) { + ( + uint80 roundID, + int price, + uint startedAt, + uint timeStamp, + uint80 answeredInRound + ) = priceFeed.latestRoundData(); + return price; + } +} +``` + +### Tạo ra sự ngẫu nhiên có thể xác minh {#generating-verifiable-randomness} + +Một số ứng dụng blockchain, chẳng hạn như trò chơi dựa trên blockchain hoặc các hình thức xổ số, đòi hỏi mức độ không thể đoán trước và ngẫu nhiên cao để hoạt động hiệu quả. Tuy nhiên, việc thực thi xác định của các chuỗi khối loại bỏ sự ngẫu nhiên. + +Cách tiếp cận ban đầu là sử dụng các hàm mã hóa giả ngẫu nhiên, chẳng hạn như `blockhash`, nhưng những hàm này có thể bị [các thợ đào thao túng](https://ethereum.stackexchange.com/questions/3140/risk-of-using-blockhash-other-miners-preventing-attack#:~:text=So%20while%20the%20miners%20can,to%20one%20of%20the%20players.) giải thuật toán bằng chứng công việc. Ngoài ra, việc Ethereum [chuyển sang bằng chứng cổ phần](/roadmap/merge/) có nghĩa là các nhà phát triển không còn có thể dựa vào `blockhash` cho tính ngẫu nhiên trên chuỗi. [Cơ chế RANDAO](https://eth2book.info/altair/part2/building_blocks/randomness) của Chuỗi Beacon cung cấp một nguồn ngẫu nhiên thay thế. + +Có thể tạo ra giá trị ngẫu nhiên ở ngoài chuỗi và gửi nó vào chuỗi, nhưng việc làm như vậy đòi hỏi yêu cầu độ tin cậy cao đối với người dùng. Họ phải tin rằng giá trị được tạo ra thực sự thông qua các cơ chế không thể dự đoán và không bị thay đổi trong quá trình vận chuyển. + +Các oracle được thiết kế cho tính toán ngoài chuỗi giải quyết vấn đề này bằng cách tạo ra các kết quả ngẫu nhiên một cách an toàn ngoài chuỗi, sau đó phát sóng lên chuỗi cùng với các bằng chứng mật mã chứng minh tính vô định của quá trình này. Một ví dụ là [Chainlink VRF](https://docs.chain.link/docs/chainlink-vrf/) (Hàm ngẫu nhiên có thể xác minh), là một trình tạo số ngẫu nhiên (RNG) công bằng và chống giả mạo có thể chứng minh được, hữu ích cho việc xây dựng các hợp đồng thông minh đáng tin cậy cho các ứng dụng dựa trên các kết quả không thể đoán trước. + +### Nhận kết quả cho các sự kiện {#getting-outcomes-for-events} + +Với các oracle, việc tạo ra smart contracts để phản ứng với các sự kiện thực tế thật dễ dàng. Dịch vụ Oracle giúp điều này trở nên khả thi bằng cách cho phép hợp đồng kết nối với các API bên ngoài thông qua các thành phần offchain và sử dụng thông tin từ những nguồn dữ liệu đó. Chẳng hạn, ứng dụng dự đoán đã đề cập ở trên có thể yêu cầu một oracle trả về kết quả bầu cử từ một nguồn bên ngoài đáng tin cậy (ví dụ: Associated Press). + +Việc sử dụng oracle để thu thập dữ liệu dựa trên các kết quả trong thế giới thực mở ra nhiều trường hợp sử dụng mới; ví dụ, một sản phẩm bảo hiểm phi tập trung cần thông tin chính xác về thời tiết, thiên tai, v.v. để hoạt động hiệu quả. + +### Tự động hóa hợp đồng thông minh {#automating-smart-contracts} + +Hợp đồng thông minh không tự động thực thi; mà thay vào đó, một tài khoản do bên ngoài sở hữu (EOA) hoặc một tài khoản hợp đồng khác phải kích hoạt các hàm phù hợp để thực hiện mã của hợp đồng. Trong hầu hết các trường hợp, phần lớn các hàm của hợp đồng là công khai và có thể được gọi bởi các EOA và các hợp đồng khác. + +Nhưng cũng có những _hàm riêng tư_ trong một hợp đồng mà người khác không thể truy cập;, nhưng chúng lại rất quan trọng đối với chức năng tổng thể của một dapp. Các ví dụ bao gồm một hàm `mintERC721Token()` định kỳ đúc NFT mới cho người dùng, một hàm để trao các khoản thanh toán trong một thị trường dự đoán, hoặc một hàm để mở khóa các token đã đặt cọc trong một DEX. + +Các nhà phát triển sẽ cần kích hoạt các chức năng như vậy theo khoảng thời gian nhất định để ứng dụng hoạt động mượt mà. Tuy nhiên, điều này có thể dẫn đến việc mất nhiều giờ cho các nhiệm vụ tầm thường của các nhà phát triển, đó là lý do tại sao tự động hóa việc thực hiện hợp đồng thông minh lại hấp dẫn. + +Một số mạng lưới oracle phi tập trung cung cấp dịch vụ tự động hóa, cho phép các nút oracle ngoài chuỗi kích hoạt các chức năng hợp đồng thông minh theo các tham số được xác nhận từ người dùng. Thông thường, điều này yêu cầu "đăng ký" hợp đồng mục tiêu với dịch vụ oracle, cung cấp quỹ để thanh toán cho người vận hành oracle, và chỉ định các điều kiện hoặc thời gian để kích hoạt hợp đồng. + +[Mạng Keeper](https://chain.link/keepers) của Chainlink cung cấp các tùy chọn cho các hợp đồng thông minh để thuê ngoài các nhiệm vụ bảo trì thường xuyên theo cách giảm thiểu sự tin cậy và phi tập trung. Đọc [tài liệu chính thức của Keeper](https://docs.chain.link/docs/chainlink-keepers/introduction/) để biết thông tin về việc làm cho hợp đồng của bạn tương thích với Keeper và sử dụng dịch vụ Upkeep. + +## Cách sử dụng các oracle chuỗi khối {#use-blockchain-oracles} + +Có nhiều ứng dụng oracle mà bạn có thể tích hợp vào dapp Ethereum của mình: + +**[Chainlink](https://chain.link/)** - _Các mạng oracle phi tập trung của Chainlink cung cấp các đầu vào, đầu ra và tính toán chống giả mạo để hỗ trợ các hợp đồng thông minh tiên tiến trên bất kỳ chuỗi khối nào._ + +**[RedStone Oracles](https://redstone.finance/)** - _RedStone là một oracle mô-đun phi tập trung cung cấp các nguồn cấp dữ liệu được tối ưu hóa về gas._ Nó chuyên cung cấp các nguồn cấp dữ liệu giá cho các tài sản mới nổi, chẳng hạn như token đặt cọc thanh khoản (LST), token đặt cọc lại thanh khoản (LRT), và các sản phẩm phái sinh đặt cọc Bitcoin._ + +**[Chronicle](https://chroniclelabs.org/)** - _Chronicle vượt qua những hạn chế hiện tại của việc chuyển dữ liệu trên chuỗi bằng cách phát triển các oracle thực sự có thể mở rộng, tiết kiệm chi phí, phi tập trung và có thể xác minh._ + +**[Witnet](https://witnet.io/)** - _Witnet là một oracle không cần cấp phép, phi tập trung và chống kiểm duyệt, giúp các hợp đồng thông minh phản ứng với các sự kiện trong thế giới thực với sự đảm bảo kinh tế-mã hóa mạnh mẽ._ + +**[UMA Oracle](https://uma.xyz)** - _Oracle lạc quan của UMA cho phép các hợp đồng thông minh nhanh chóng nhận bất kỳ loại dữ liệu nào cho các ứng dụng khác nhau, bao gồm bảo hiểm, các công cụ phái sinh tài chính và thị trường dự đoán._ + +**[Tellor](https://tellor.io/)** - _Tellor là một giao thức oracle minh bạch và không cần cấp phép để hợp đồng thông minh của bạn có thể dễ dàng lấy bất kỳ dữ liệu nào bất cứ khi nào cần._ + +**[Band Protocol](https://bandprotocol.com/)** - _Band Protocol là một nền tảng oracle dữ liệu chuỗi chéo, tổng hợp và kết nối dữ liệu thế giới thực và các API với các hợp đồng thông minh._ + +**[Pyth Network](https://pyth.network/)** - _Mạng Pyth là một mạng oracle tài chính của bên thứ nhất được thiết kế để xuất bản dữ liệu thế giới thực liên tục trên chuỗi trong một môi trường chống giả mạo, phi tập trung và tự duy trì._ + +**[API3 DAO](https://www.api3.org/)** - _API3 DAO đang cung cấp các giải pháp oracle của bên thứ nhất mang lại sự minh bạch, bảo mật và khả năng mở rộng nguồn lớn hơn trong một giải pháp phi tập trung cho các hợp đồng thông minh_ + +**[Supra](https://supra.com/)** - Một bộ công cụ tích hợp theo chiều dọc gồm các giải pháp chuỗi chéo liên kết tất cả các chuỗi khối, công khai (L1 và L2) hoặc riêng tư (doanh nghiệp), cung cấp các nguồn cấp dữ liệu giá oracle phi tập trung có thể được sử dụng cho các trường hợp sử dụng trên chuỗi và ngoài chuỗi. + +**[Gas Network](https://gas.network/)** - Một nền tảng oracle phân tán cung cấp dữ liệu giá gas theo thời gian thực trên khắp các chuỗi khối. Bằng cách đưa dữ liệu từ các nhà cung cấp dữ liệu giá gas hàng đầu lên chuỗi, Mạng Gas đang giúp thúc đẩy khả năng tương tác. Mạng Gas hỗ trợ dữ liệu cho hơn 35 chuỗi, bao gồm Mạng chính Ethereum và nhiều L2 hàng đầu. + +## Đọc thêm {#further-reading} + +**Bài viết** + +- [Oracle Chuỗi khối là gì?](https://chain.link/education/blockchain-oracles) — _Chainlink_ +- [Oracle Chuỗi khối là gì?](https://medium.com/better-programming/what-is-a-blockchain-oracle-f5ccab8dbd72) — _Patrick Collins_ +- [Oracle phi tập trung: tổng quan toàn diện](https://medium.com/fabric-ventures/decentralised-oracles-a-comprehensive-overview-d3168b9a8841) — _Julien Thevenard_ +- [Triển khai một Oracle Chuỗi khối trên Ethereum](https://medium.com/@pedrodc/implementing-a-blockchain-oracle-on-ethereum-cedc7e26b49e) – _Pedro Costa_ +- [Tại sao các hợp đồng thông minh không thể thực hiện các lệnh gọi API?](https://ethereum.stackexchange.com/questions/301/why-cant-contracts-make-api-calls) — _StackExchange_ +- [Vì vậy bạn muốn sử dụng một oracle giá](https://samczsun.com/so-you-want-to-use-a-price-oracle/) — _samczsun_ + +**Video** + +- [Oracle và sự mở rộng tiện ích của chuỗi khối](https://youtu.be/BVUZpWa8vpw) — _Real Vision Finance_ + +**Hướng dẫn** + +- [Cách lấy giá hiện tại của Ethereum trong Solidity](https://blog.chain.link/fetch-current-crypto-price-data-solidity/) — _Chainlink_ +- [Tiêu thụ Dữ liệu Oracle](https://docs.chroniclelabs.org/Developers/tutorials/Remix) — _Chronicle_ + +**Các dự án mẫu** + +- [Dự án khởi đầu Chainlink đầy đủ cho Ethereum trong Solidity](https://github.com/hackbg/chainlink-fullstack) — _HackBG_ diff --git a/public/content/translations/vi/developers/docs/programming-languages/dart/index.md b/public/content/translations/vi/developers/docs/programming-languages/dart/index.md new file mode 100644 index 00000000000..17cfc59c80a --- /dev/null +++ b/public/content/translations/vi/developers/docs/programming-languages/dart/index.md @@ -0,0 +1,30 @@ +--- +title: "Ethereum cho các nhà phát triển Dart" +description: "Tìm hiểu cách phát triển cho Ethereum bằng ngôn ngữ Dart" +lang: vi +incomplete: true +--- + +## Bắt đầu với hợp đồng thông minh và ngôn ngữ Solidity {#getting-started-with-smart-contracts-and-solidity} + +## Hướng dẫn {#tutorials} + +- [Flutter và Chuỗi khối – Dapp Hello World](https://www.geeksforgeeks.org/flutter-and-blockchain-hello-world-dapp/) sẽ hướng dẫn bạn tất cả các bước để bắt đầu: + 1. Viết một hợp đồng thông minh bằng [Solidity](https://soliditylang.org/) + 2. Viết một giao diện người dùng bằng Dart +- [Xây dựng một dapp di động với Flutter](https://medium.com/dash-community/building-a-mobile-dapp-with-flutter-be945c80315a) ngắn hơn nhiều, có thể sẽ tốt hơn nếu bạn đã biết những điều cơ bản +- Nếu bạn thích học bằng cách xem video, bạn có thể xem [Xây dựng ứng dụng Flutter Chuỗi khối đầu tiên của bạn](https://www.youtube.com/watch?v=3Eeh3pJ6PeA), video này dài khoảng một giờ +- Nếu bạn thiếu kiên nhẫn, bạn có thể thích [Xây dựng một ứng dụng phi tập trung Chuỗi khối bằng Flutter và Dart trên Ethereum](https://www.youtube.com/watch?v=jaMFEOCq_1s), video này chỉ dài khoảng hai mươi phút +- [Tích hợp MetaMask trong ứng dụng Flutter với Web3Modal của WalletConnect](https://www.youtube.com/watch?v=v_M2buHCpc4) - video ngắn này sẽ hướng dẫn bạn các bước tích hợp MetaMask vào ứng dụng Flutter của bạn bằng thư viện [Web3Modal](https://pub.dev/packages/web3modal_flutter) của WalletConnect +- [Khóa học Bootcamp cho nhà phát triển chuỗi khối di động với Solidity & Flutter](https://youtube.com/playlist?list=PL4V4Unlk5luhQ26ERO6hWEbcUwHDSSmVH) - danh sách phát khóa học dành cho nhà phát triển chuỗi khối di động full-stack + +## Làm việc với các máy khách Ethereum {#working-with-ethereum-clients} + +Bạn có thể sử dụng Ethereum để tạo các ứng dụng phi tập trung (hay "dapps") sử dụng các lợi ích của công nghệ tiền mã hóa và chuỗi khối. +Hiện có ít nhất hai thư viện được duy trì cho Dart để sử dụng [API JSON-RPC](/developers/docs/apis/json-rpc/) cho Ethereum. + +1. [Web3dart từ pwa.ir](https://pub.dev/packages/web3dart) +2. [Ethereum 5.0.0 từ darticulate.com](https://pub.dev/packages/ethereum) + +Ngoài ra còn có các thư viện bổ sung cho phép bạn thao tác với các địa chỉ Ethereum cụ thể, hoặc cho phép bạn truy xuất giá của các loại tiền mã hóa khác nhau. +[Bạn có thể xem danh sách đầy đủ tại đây](https://pub.dev/dart/packages?q=ethereum). diff --git a/public/content/translations/vi/developers/docs/programming-languages/delphi/index.md b/public/content/translations/vi/developers/docs/programming-languages/delphi/index.md new file mode 100644 index 00000000000..6e894639410 --- /dev/null +++ b/public/content/translations/vi/developers/docs/programming-languages/delphi/index.md @@ -0,0 +1,56 @@ +--- +title: "Ethereum cho các nhà phát triển Delphi" +description: "Tìm hiểu cách phát triển Ethereum sử dụng ngôn ngữ lập trình Delphi" +lang: vi +incomplete: true +--- + + + +Tìm hiểu cách phát triển Ethereum sử dụng ngôn ngữ lập trình Delphi + + + +Sử dụng Ethereum để tạo các ứng dụng phi tập trung (hay "dapps") sử dụng các lợi ích của công nghệ tiền điện tử và chuỗi khối. Các ứng dụng phi tập trung này có thể đáng tin cậy, có nghĩa là một khi chúng được triển khai lên Ethereum, chúng sẽ luôn chạy như được lập trình. Chúng có thể kiểm soát các tài sản kỹ thuật số để tạo ra những loại ứng dụng tài chính mới. Chúng có thể được phân cấp, có nghĩa là không một thực thể hay người nào kiểm soát chúng và gần như không thể kiểm duyệt. + +Xây dựng các ứng dụng phi tập trung trên Ethereum và tương tác với các hợp đồng thông minh bằng ngôn ngữ lập trình Delphi! + +## Bắt đầu với hợp đồng thông minh và ngôn ngữ Solidity {#getting-started-with-smart-contracts-and-the-solidity-language} + +**Các bước đầu tiên để tích hợp Delphi với Ethereum** + +Cần một hướng dẫn cơ bản hơn? Tham khảo [ethereum.org/learn](/learn/) hoặc [ethereum.org/developers](/developers/). + +- [Giải thích về Chuỗi khối](https://kauri.io/article/d55684513211466da7f8cc03987607d5/blockchain-explained) +- [Tìm hiểu về Hợp đồng thông minh](https://kauri.io/article/e4f66c6079e74a4a9b532148d3158188/ethereum-101-part-5-the-smart-contract) +- [Viết Hợp đồng thông minh đầu tiên của bạn](https://kauri.io/article/124b7db1d0cf4f47b414f8b13c9d66e2/remix-ide-your-first-smart-contract) +- [Tìm hiểu cách Biên dịch và Triển khai Solidity](https://kauri.io/article/973c5f54c4434bb1b0160cff8c695369/understanding-smart-contract-compilation-and-deployment) + +## Tài liệu tham khảo và liên kết cho người mới bắt đầu {#beginner-references-and-links} + +**Giới thiệu thư viện Delphereum** + +- [Delphereum là gì?](https://github.com/svanas/delphereum/blob/master/README.md) +- [Kết nối Delphi với một chuỗi khối cục bộ (trong bộ nhớ)](https://medium.com/@svanas/connecting-delphi-to-a-local-in-memory-blockchain-9a1512d6c5b0) +- [Kết nối Delphi với Mạng chính Ethereum](https://medium.com/@svanas/connecting-delphi-to-the-ethereum-main-net-5faf1feffd83) +- [Kết nối Delphi với các Hợp đồng thông minh](https://medium.com/@svanas/connecting-delphi-to-smart-contracts-3146b12803a1) + +**Bạn muốn bỏ qua thiết lập bây giờ và tiến thẳng đến các mẫu?** + +- [Hợp đồng thông minh và Delphi trong 3 phút - Phần 1](https://medium.com/@svanas/a-3-minute-smart-contract-and-delphi-61d998571d) +- [Hợp đồng thông minh và Delphi trong 3 phút - Phần 2](https://medium.com/@svanas/a-3-minute-smart-contract-and-delphi-part-2-446925faa47b) + +## Các bài viết trình độ trung cấp {#intermediate-articles} + +- [Tạo chữ ký thông điệp đã ký của Ethereum trong Delphi](https://medium.com/@svanas/generating-an-ethereum-signed-message-signature-in-delphi-75661ce5031b) +- [Chuyển ether bằng Delphi](https://medium.com/@svanas/transferring-ether-with-delphi-b5f24b1a98a4) +- [Chuyển token ERC-20 bằng Delphi](https://medium.com/@svanas/transferring-erc-20-tokens-with-delphi-bb44c05b295d) + +## Các mẫu sử dụng nâng cao {#advanced-use-patterns} + +- [Delphi và Dịch vụ Định danh Ethereum (ENS)](https://medium.com/@svanas/delphi-and-ethereum-name-service-ens-4443cd278af7) +- [QuikNode, Ethereum và Delphi](https://medium.com/@svanas/quiknode-ethereum-and-delphi-f7bfc9671c23) +- [Delphi và Khu rừng tối Ethereum](https://svanas.medium.com/delphi-and-the-ethereum-dark-forest-5b430da3ad93) +- [Hoán đổi một token này lấy một token khác trong Delphi](https://svanas.medium.com/swap-one-token-for-another-in-delphi-bcb999c47f7) + +Tìm kiếm thêm tài nguyên? Tham khảo [ethereum.org/developers](/developers/). diff --git a/public/content/translations/vi/developers/docs/programming-languages/dot-net/index.md b/public/content/translations/vi/developers/docs/programming-languages/dot-net/index.md new file mode 100644 index 00000000000..9679ecd70a7 --- /dev/null +++ b/public/content/translations/vi/developers/docs/programming-languages/dot-net/index.md @@ -0,0 +1,86 @@ +--- +title: "Ethereum cho nhà phát triển .NET" +description: "Tìm hiểu cách phát triển Ethereum bằng cách sử dụng các dự án và công cụ dựa trên cơ sở .NET" +lang: vi +incomplete: true +--- + +Tìm hiểu cách phát triển cho Ethereum bằng các dự án và công cụ dựa trên .NET + +Sử dụng Ethereum để tạo các ứng dụng phi tập trung (hay "dapps") sử dụng các lợi ích của công nghệ tiền điện tử và chuỗi khối. Các ứng dụng phi tập trung này có thể đáng tin cậy, có nghĩa là một khi chúng được triển khai lên Ethereum, chúng sẽ luôn chạy như được lập trình. Chúng có thể kiểm soát các tài sản kỹ thuật số để tạo ra những loại ứng dụng tài chính mới. Chúng có thể được phân cấp, có nghĩa là không một thực thể hay người nào kiểm soát chúng và gần như không thể kiểm duyệt. + +Xây dựng các ứng dụng phi tập trung trên Ethereum và tương tác với các hợp đồng thông minh bằng các công cụ và ngôn ngữ từ kho công nghệ của Microsoft - Hỗ trợ C#, # Visual Basic .NET, F#, trên các công cụ như VSCode và Visual Studio, trên .NET Framework / .NET Core / .NET Standard. Triển khai chuỗi khối Ethereum trên Azure bằng chuỗi khối Microsoft Azure trong vài phút. Mang tình yêu của .NET đến Ethereum! + +## Bắt đầu với hợp đồng thông minh và ngôn ngữ Solidity {#getting-started-with-smart-contracts-and-the-solidity-language} + +**Thực hiện các bước đầu tiên để tích hợp .NET với Ethereum** + +Cần một hướng dẫn cơ bản hơn? Tham khảo [ethereum.org/learn](/learn/) hoặc [ethereum.org/developers](/developers/). + +- [Giải thích về Chuỗi khối](https://kauri.io/article/d55684513211466da7f8cc03987607d5/blockchain-explained) +- [Tìm hiểu về Hợp đồng thông minh](https://kauri.io/article/e4f66c6079e74a4a9b532148d3158188/ethereum-101-part-5-the-smart-contract) +- [Viết Hợp đồng thông minh đầu tiên của bạn](https://kauri.io/article/124b7db1d0cf4f47b414f8b13c9d66e2/remix-ide-your-first-smart-contract) +- [Tìm hiểu cách Biên dịch và Triển khai Solidity](https://kauri.io/article/973c5f54c4434bb1b0160cff8c695369/understanding-smart-contract-compilation-and-deployment) + +## Tài liệu tham khảo và liên kết cho người mới bắt đầu {#beginner-references-and-links} + +**Giới thiệu thư viện Nethereum và mã VS Solidity** + +- [Nethereum, Bắt đầu](https://docs.nethereum.com/en/latest/getting-started/) +- [Cài đặt Solidity cho VS Code](https://marketplace.visualstudio.com/items?itemName=JuanBlanco.solidity) +- [Quy trình làm việc của một Nhà phát triển .NET để Tạo và Gọi các Hợp đồng thông minh Ethereum](https://medium.com/coinmonks/a-net-developers-workflow-for-creating-and-calling-ethereum-smart-contracts-44714f191db2) +- [Tích hợp hợp đồng thông minh với Nethereum](https://kauri.io/#collections/Getting%20Started/smart-contracts-integration-with-nethereum/#smart-contracts-integration-with-nethereumm) +- [Kết nối các Hợp đồng thông minh chuỗi khối .NET và Ethereum với Nethereum](https://medium.com/my-blockchain-development-daily-journey/interfacing-net-and-ethereum-blockchain-smart-contracts-with-nethereum-2fa3729ac933), cũng có trong [中文版](https://medium.com/my-blockchain-development-daily-journey/%E4%BD%BF%E7%94%A8nethereum%E9%80%A3%E6%8E%A5-net%E5%92%8C%E4%BB%A5%E5%A4%AA%E7%B6%B2%E5%8D%80%E5%A1%8A%E9%8F%88%E6%99%BA%E8%83%BD%E5%90%88%E7%B4%84-4a96d35ad1e1) +- [Nethereum - Một thư viện tích hợp .NET nguồn mở cho chuỗi khối](https://kauri.io/#collections/a%20hackathon%20survival%20guide/nethereum-an-open-source-.net-integration-library/) +- [Ghi các Giao dịch Ethereum vào Cơ sở dữ liệu SQL bằng Nethereum](https://medium.com/coinmonks/writing-ethereum-transactions-to-sql-database-using-nethereum-fd94e0e4fa36) +- [Xem cách triển khai các hợp đồng thông minh Ethereum dễ dàng bằng C# và VisualStudio](https://koukia.ca/deploy-ethereum-smart-contracts-using-c-and-visualstudio-5be188ae928c) + +**Bạn muốn bỏ qua thiết lập bây giờ và tiến thẳng đến các mẫu?** + +- [Playground](http://playground.nethereum.com/) - Tương tác với Ethereum và tìm hiểu cách sử dụng Nethereum thông qua trình duyệt. + - Truy vấn Số dư Tài khoản [C#](http://playground.nethereum.com/csharp/id/1001) [VB.NET](http://playground.nethereum.com/vb/id/2001) + - Truy vấn Số dư Hợp đồng thông minh ERC20 [C#](http://playground.nethereum.com/csharp/id/1005) [VB.NET](http://playground.nethereum.com/vb/id/2004) + - Chuyển ether đến một Tài khoản [C#](http://playground.nethereum.com/csharp/id/1003) [VB.NET](http://playground.nethereum.com/vb/id/2003) + - ... Và nhiều hơn thế! + +## Các bài viết trình độ trung cấp {#intermediate-articles} + +- [Sổ làm việc/Danh sách mẫu Nethereum](http://docs.nethereum.com/en/latest/Nethereum.Workbooks/docs/) +- [Triển khai Chuỗi thử nghiệm Phát triển của riêng bạn](https://github.com/Nethereum/Testchains) +- [Plugin Codegen của VSCode cho Solidity](https://docs.nethereum.com/en/latest/nethereum-codegen-vscodesolidity/) +- [Unity và Ethereum: Tại sao và như thế nào](https://www.raywenderlich.com/5509-unity-and-ethereum-why-and-how) +- [Tạo API Web ASP.NET Core cho các ứng dụng phi tập trung của Ethereum](https://tech-mint.com/blockchain/create-asp-net-core-web-api-for-ethereum-dapps/) +- [Sử dụng Nethereum Web3 để triển khai Hệ thống Theo dõi Chuỗi Cung ứng](http://blog.pomiager.com/post/using-nethereum-web3-to-implement-a-supply-chain-traking-system4) +- [Xử lý khối Nethereum](https://nethereum.readthedocs.io/en/latest/nethereum-block-processing-detail/), với [mẫu C# Playground](http://playground.nethereum.com/csharp/id/1025) +- [Phát trực tuyến Websocket của Nethereum](https://nethereum.readthedocs.io/en/latest/nethereum-subscriptions-streaming/) +- [Kaleido và Nethereum](https://kaleido.io/kaleido-and-nethereum/) +- [Quorum và Nethereum](https://github.com/Nethereum/Nethereum/blob/master/src/Nethereum.Quorum/README.md) + +## Các mẫu sử dụng nâng cao {#advanced-use-patterns} + +- [Azure Key Vault và Nethereum](https://github.com/Azure-Samples/bc-community-samples/tree/master/akv-nethereum) +- [Nethereum.DappHybrid](https://github.com/Nethereum/Nethereum.DappHybrid) +- [Kiến trúc tham chiếu backend của Ujo Nethereum](https://docs.nethereum.com/en/latest/nethereum-ujo-backend-sample/) + +## Các dự án, công cụ .NET và những thứ thú vị khác {#dot-net-projects-tools-and-other-fun-stuff} + +- [Sân chơi Nethereum](http://playground.nethereum.com/) - _Biên dịch, tạo và chạy các đoạn mã Nethereum trong trình duyệt_ +- [Nethereum Codegen Blazor](https://github.com/Nethereum/Nethereum.CodeGen.Blazor) - _Trình tạo mã Nethereum với giao diện người dùng trong Blazor_ +- [Nethereum Blazor](https://github.com/Nethereum/NethereumBlazor) - _Một trình khám phá chuỗi khối nhẹ .NET Wasm SPA và ví đơn giản_ +- [Công cụ Quy tắc Nghiệp vụ Wonka](https://docs.nethereum.com/en/latest/wonka/) - _Một công cụ quy tắc nghiệp vụ (cho cả nền tảng .NET và nền tảng Ethereum) vốn được định hướng bởi siêu dữ liệu_ +- [Nethermind](https://github.com/NethermindEth/nethermind) - _Một ứng dụng khách Ethereum .NET Core cho Linux, Windows, MacOS_ +- [eth-utils](https://github.com/ethereum/eth-utils/) - _các hàm tiện ích để làm việc với các codebase liên quan đến Ethereum_ +- [TestChains](https://github.com/Nethereum/TestChains) - _Các chuỗi phát triển .NET được cấu hình sẵn để phản hồi nhanh (PoA)_ + +Tìm kiếm thêm tài nguyên? Tham khảo [ethereum.org/developers](/developers/). + +## Những người đóng góp cho cộng đồng .NET {#dot-net-community-contributors} + +Tại Nethereum, chúng tôi chủ yếu sinh hoạt trên [Gitter](https://gitter.im/Nethereum/Nethereum) nơi mọi người đều có thể hỏi/trả lời câu hỏi, nhận trợ giúp hoặc chỉ thư giãn. Hãy thoải mái tạo một PR hoặc mở một vấn đề trên [kho lưu trữ GitHub của Nethereum](https://github.com/Nethereum), hoặc chỉ cần duyệt qua nhiều dự án phụ/mẫu mà chúng tôi có. Bạn cũng có thể tìm thấy chúng tôi trên [Discord](https://discord.gg/jQPrR58FxX)! + +Nếu bạn mới sử dụng Nethermind và cần trợ giúp để bắt đầu, hãy tham gia [Discord](http://discord.gg/PaCMRFdvWT) của chúng tôi. Những nhà phát triển của chúng tôi luôn sãn sàng để trả lời câu hỏi của bạn. Đừng ngần ngại mở một PR hoặc nêu bất kỳ vấn đề nào trên [kho lưu trữ GitHub của Nethermind](https://github.com/NethermindEth/nethermind). + +## Các danh sách tổng hợp khác {#other-aggregated-lists} + +[Trang web chính thức của Nethereum](https://nethereum.com/) +[Trang web chính thức của Nethermind](https://nethermind.io/) diff --git a/public/content/translations/vi/developers/docs/programming-languages/elixir/index.md b/public/content/translations/vi/developers/docs/programming-languages/elixir/index.md new file mode 100644 index 00000000000..90788fb5f84 --- /dev/null +++ b/public/content/translations/vi/developers/docs/programming-languages/elixir/index.md @@ -0,0 +1,55 @@ +--- +title: "Ethereum cho các nhà phát triển Elixir" +description: "Tìm hiểu cách phát triển cho Ethereum bằng cách sử dụng các dự án và công cụ dựa trên Elixir." +lang: vi +incomplete: false +--- + +Tìm hiểu cách phát triển cho Ethereum bằng cách sử dụng các dự án và công cụ dựa trên Elixir. + +Sử dụng Ethereum để tạo các ứng dụng phi tập trung (hay "dapps") sử dụng các lợi ích của công nghệ tiền điện tử và chuỗi khối. Các ứng dụng phi tập trung này có thể không cần tin cậy, nghĩa là một khi chúng được triển khai lên Ethereum, chúng sẽ luôn chạy như được lập trình. Chúng có thể kiểm soát các tài sản kỹ thuật số để tạo ra các loại ứng dụng tài chính mới. Chúng có thể được phân cấp, có nghĩa là không một thực thể hay người nào kiểm soát chúng và gần như không thể kiểm duyệt. + +## Bắt đầu với hợp đồng thông minh và ngôn ngữ Solidity {#getting-started-with-smart-contracts-and-solidity} + +**Thực hiện các bước đầu tiên để tích hợp Elixir với Ethereum** + +Cần một hướng dẫn cơ bản hơn? Tham khảo [ethereum.org/learn](/learn/) hoặc [ethereum.org/developers](/developers/). + +- [Giải thích về Chuỗi khối](https://kauri.io/article/d55684513211466da7f8cc03987607d5/blockchain-explained) +- [Tìm hiểu về Hợp đồng thông minh](https://kauri.io/article/e4f66c6079e74a4a9b532148d3158188/ethereum-101-part-5-the-smart-contract) +- [Viết Hợp đồng thông minh đầu tiên của bạn](https://kauri.io/article/124b7db1d0cf4f47b414f8b13c9d66e2/remix-ide-your-first-smart-contract) +- [Tìm hiểu cách Biên dịch và Triển khai Solidity](https://kauri.io/article/973c5f54c4434bb1b0160cff8c695369/understanding-smart-contract-compilation-and-deployment) + +## Các bài viết cho người mới bắt đầu {#beginner-articles} + +- [Cuối cùng cũng hiểu về tài khoản Ethereum](https://dev.to/q9/finally-understanding-ethereum-accounts-1kpe) +- [Ethers — Một thư viện Web3 Ethereum hàng đầu cho Elixir](https://medium.com/@alisinabh/announcing-ethers-a-first-class-ethereum-web3-library-for-elixir-1d64e9409122) + +## Các bài viết trình độ trung cấp {#intermediate-articles} + +- [Cách ký các giao dịch hợp đồng Ethereum thô bằng Elixir](https://kohlerjp.medium.com/how-to-sign-raw-ethereum-contract-transactions-with-elixir-f8822bcc813b) +- [Hợp đồng thông minh Ethereum và Elixir](https://medium.com/agile-alpha/ethereum-smart-contracts-and-elixir-c7c4b239ddb4) + +## Các dự án và công cụ Elixir {#elixir-projects-and-tools} + +### Đang hoạt động {#active} + +- [block_keys](https://github.com/ExWeb3/block_keys) - _Triển khai BIP32 & BIP44 trong Elixir (Phân cấp nhiều tài khoản cho các Ví xác định)_ +- [ethereumex](https://github.com/mana-ethereum/ethereumex) - _Máy khách JSON-RPC Elixir cho chuỗi khối Ethereum_ +- [ethers](https://github.com/ExWeb3/elixir_ethers) - _Một thư viện Web3 toàn diện để tương tác với các hợp đồng thông minh trên Ethereum bằng Elixir_ +- [ethers_kms](https://github.com/ExWeb3/elixir_ethers_kms) - _Một thư viện trình ký KMS cho Ethers (ký giao dịch với AWS KMS)_ +- [ex_abi](https://github.com/poanetwork/ex_abi) - _Triển khai trình phân tích cú pháp/bộ giải mã/bộ mã hóa Giao diện nhị phân ứng dụng Ethereum trong Elixir_ +- [ex_keccak](https://github.com/ExWeb3/ex_keccak) - _Thư viện Elixir để tính toán các hàm băm Keccak SHA3-256 bằng NIF được xây dựng từ crate tiny-keccak của Rust_ +- [ex_rlp](https://github.com/mana-ethereum/ex_rlp) - _Triển khai Elixir cho mã hóa RLP (Recursive Length Prefix) của Ethereum_ + +### Đã lưu trữ / Không còn được bảo trì {#archived--no-longer-maintained} + +- [eth](https://hex.pm/packages/eth) - _Các tiện ích Ethereum cho Elixir_ +- [exw3](https://github.com/hswick/exw3) - _Máy khách RPC Ethereum cấp cao cho Elixir_ +- [mana](https://github.com/mana-ethereum/mana) - _Triển khai nút đầy đủ Ethereum được viết bằng Elixir_ + +Tìm kiếm thêm tài nguyên? Hãy xem [trang chủ dành cho Nhà phát triển của chúng tôi](/developers/). + +## Những người đóng góp cho cộng đồng Elixir {#elixir-community-contributors} + +[Kênh Slack #ethereum của Elixir](https://elixir-lang.slack.com/archives/C5RPZ3RJL) là nơi có một cộng đồng đang phát triển nhanh chóng và là tài nguyên chuyên dụng cho các cuộc thảo luận về bất kỳ dự án nào ở trên và các chủ đề liên quan. diff --git a/public/content/translations/vi/developers/docs/programming-languages/golang/index.md b/public/content/translations/vi/developers/docs/programming-languages/golang/index.md new file mode 100644 index 00000000000..56f7293a651 --- /dev/null +++ b/public/content/translations/vi/developers/docs/programming-languages/golang/index.md @@ -0,0 +1,84 @@ +--- +title: "Ethereum cho nhà phát triển Go" +description: "Tìm hiểu cách phát triển Ethereum bằng cách sử dụng các dự án và công cụ dựa trên cơ sở Go" +lang: vi +incomplete: true +--- + +Tìm hiểu cách phát triển Ethereum bằng cách sử dụng các dự án và công cụ dựa trên cơ sở Go + +Sử dụng Ethereum để tạo ra các ứng dụng phi tập trung (hay gọi là dapp). Các ứng dụng phi tập trung này có thể đáng tin cậy, có nghĩa là một khi chúng được triển khai lên Ethereum, chúng sẽ luôn chạy như được lập trình. Chúng là phi tập trung, nghĩa là chạy trên một mạng ngang hàng và không có điểm thất bại duy nhất. Không có thực thể hoặc cá nhân nào kiểm soát chúng và chúng gần như không thể kiểm duyệt. Chúng có thể quản lý tài sản kỹ thuật số để tạo ra các loại ứng dụng mới. + +## Bắt đầu với hợp đồng thông minh và ngôn ngữ Solidity {#getting-started-with-smart-contracts-and-solidity} + +**Thực hiện các bước đầu tiên để tích hợp Go với Ethereum** + +Cần một hướng dẫn cơ bản hơn? Tham khảo [ethereum.org/learn](/learn/) hoặc [ethereum.org/developers](/developers/). + +- [Giải thích về Chuỗi khối](https://kauri.io/article/d55684513211466da7f8cc03987607d5/blockchain-explained) +- [Tìm hiểu về Hợp đồng thông minh](https://kauri.io/article/e4f66c6079e74a4a9b532148d3158188/ethereum-101-part-5-the-smart-contract) +- [Viết Hợp đồng thông minh đầu tiên của bạn](https://kauri.io/article/124b7db1d0cf4f47b414f8b13c9d66e2/remix-ide-your-first-smart-contract) +- [Tìm hiểu cách Biên dịch và Triển khai Solidity](https://kauri.io/article/973c5f54c4434bb1b0160cff8c695369/understanding-smart-contract-compilation-and-deployment) +- [Hướng dẫn về Hợp đồng](https://github.com/ethereum/go-ethereum/wiki/Contract-Tutorial) + +## Các bài viết và sách cho người mới bắt đầu {#beginner-articles-and-books} + +- [Bắt đầu với Geth](https://medium.com/@tzhenghao/getting-started-with-geth-c1a30b8d6458) +- [Sử dụng Golang để kết nối với Ethereum](https://www.youtube.com/watch?v=-7uChuO_VzM) +- [Triển khai Hợp đồng thông minh Ethereum bằng Golang](https://www.youtube.com/watch?v=pytGqQmDslE) +- [Hướng dẫn từng bước để kiểm tra và triển khai hợp đồng thông minh Ethereum bằng Go](https://hackernoon.com/a-step-by-step-guide-to-testing-and-deploying-ethereum-smart-contracts-in-go-9fc34b178d78) +- [Sách điện tử: Phát triển Ethereum với Go](https://goethereumbook.org/) - _Phát triển các ứng dụng Ethereum bằng Go_ + +## Các bài viết và tài liệu cho trình độ trung cấp {#intermediate-articles-and-docs} + +- [Tài liệu Go Ethereum](https://geth.ethereum.org/docs/) - _Tài liệu cho Ethereum Golang chính thức_ +- [Hướng dẫn cho lập trình viên Erigon](https://github.com/ledgerwatch/erigon/blob/devel/docs/programmers_guide/guide.md) - _Hướng dẫn có hình minh họa bao gồm cây trạng thái, đa bằng chứng và xử lý giao dịch_ +- [Erigon và Ethereum không trạng thái](https://youtu.be/3-Mn7OckSus?t=394) - _Hội nghị Cộng đồng Ethereum 2020 (EthCC 3)_ +- [Erigon: tối ưu hóa các ứng dụng Ethereum](https://www.youtube.com/watch?v=CSpc1vZQW2Q) - _Devcon 4 2018_ +- [Go Ethereum GoDoc](https://godoc.org/github.com/ethereum/go-ethereum) +- [Tạo một ứng dụng phi tập trung trong Go với Geth](https://kauri.io/#collections/A%20Hackathon%20Survival%20Guide/creating-a-dapp-in-go-with-geth/) +- [Làm việc với Mạng riêng tư Ethereum bằng Golang và Geth](https://myhsts.org/tutorial-learn-how-to-work-with-ethereum-private-network-with-golang-with-geth.php) +- [Kiểm thử đơn vị các hợp đồng Solidity trên Ethereum bằng Go](https://medium.com/coinmonks/unit-testing-solidity-contracts-on-ethereum-with-go-3cc924091281) +- [Tham khảo nhanh về việc sử dụng Geth như một thư viện](https://medium.com/coinmonks/web3-go-part-1-31c68c68e20e) + +## Các mẫu sử dụng nâng cao {#advanced-use-patterns} + +- [Backend mô phỏng của GETH](https://kauri.io/#collections/An%20ethereum%20test%20toolkit%20in%20Go/the-geth-simulated-backend/#_top) +- [Các ứng dụng Chuỗi khối dưới dạng Dịch vụ (Blockchain-as-a-Service) sử dụng Ethereum và Quorum](https://blockchain.dcwebmakers.com/blockchain-as-a-service-apps-using-ethereum-and-quorum.html) +- [Lưu trữ phân tán IPFS và Swarm trong các ứng dụng Chuỗi khối Ethereum](https://blockchain.dcwebmakers.com/work-with-distributed-storage-ipfs-and-swarm-in-ethereum.html) +- [Các ứng dụng di động: Thư viện và các nút Ethereum Inproc](https://github.com/ethereum/go-ethereum/wiki/Mobile-Clients:-Libraries-and-Inproc-Ethereum-Nodes) +- [Các ứng dụng phi tập trung gốc: Các ràng buộc Go với hợp đồng Ethereum](https://github.com/ethereum/go-ethereum/wiki/Native-DApps:-Go-bindings-to-Ethereum-contracts) + +## Các dự án và công cụ của Go {#go-projects-and-tools} + +- [Geth / Go Ethereum](https://github.com/ethereum/go-ethereum) - _Bản triển khai chính thức bằng Go của giao thức Ethereum_ +- [Phân tích mã nguồn Go Ethereum](https://github.com/ZtesoftCS/go-ethereum-code-analysis) - _Xem xét và phân tích mã nguồn Go Ethereum_ +- [Erigon](https://github.com/ledgerwatch/erigon) - _Một phái sinh nhanh hơn của Go Ethereum, tập trung vào các nút lưu trữ_ +- [Golem](https://github.com/golemfactory/golem) - _Golem đang tạo ra một thị trường toàn cầu cho sức mạnh tính toán_ +- [Quorum](https://github.com/jpmorganchase/quorum) - _Một bản triển khai được cấp phép của Ethereum, hỗ trợ quyền riêng tư dữ liệu_ +- [Lăng kính (Prysm)](https://github.com/prysmaticlabs/prysm) - _Bản triển khai bằng Go của Ethereum 'Serenity' 2.0_ +- [Eth Tweet](https://github.com/yep/eth-tweet) - _Twitter phi tập trung: Một dịch vụ tiểu blog chạy trên chuỗi khối Ethereum_ +- [Plasma MVP Golang](https://github.com/kyokan/plasma) — _Bản triển khai và mở rộng bằng Golang của đặc tả Plasma khả thi tối thiểu_ +- [Bể đào Ethereum mã nguồn mở](https://github.com/sammy007/open-ethereum-pool) - _Một bể đào Ethereum mã nguồn mở_ +- [Ví HD Ethereum](https://github.com/miguelmota/go-ethereum-hdwallet) - _Các dẫn xuất ví HD Ethereum trong Go_ +- [Multi Geth](https://github.com/multi-geth/multi-geth) - _Hỗ trợ nhiều loại mạng Ethereum_ +- [Ứng dụng Geth phiên bản nhẹ](https://github.com/zsfelfoldi/go-ethereum/wiki/Geth-Light-Client) - _Bản triển khai Geth của Giao thức con Ethereum phiên bản nhẹ_ +- [SDK Ethereum Golang](https://github.com/everFinance/goether) - _Một bản triển khai ví Ethereum đơn giản và các tiện ích trong Golang_ +- [SDK Covalent Golang](https://github.com/covalenthq/covalent-api-sdk-go) - _Truy cập dữ liệu chuỗi khối hiệu quả thông qua SDK Go cho hơn 200 chuỗi khối_ + +Tìm kiếm thêm tài nguyên? Tham khảo [ethereum.org/developers](/developers/) + +## Những người đóng góp cho cộng đồng Go {#go-community-contributors} + +- [Geth Discord](https://discordapp.com/invite/nthXNEv) +- [Geth Gitter](https://gitter.im/ethereum/go-ethereum) +- [Gophers Slack](https://invite.slack.golangbridge.org/) - [kênh #ethereum](https://gophers.slack.com/messages/C9HP1S9V2) +- [StackExchange - Ethereum](https://ethereum.stackexchange.com/) +- [Multi Geth Gitter](https://gitter.im/ethoxy/multi-geth) +- [Ethereum Gitter](https://gitter.im/ethereum/home) +- [Gitter cho Ứng dụng Geth phiên bản nhẹ](https://gitter.im/ethereum/light-client) + +## Các danh sách tổng hợp khác {#other-aggregated-lists} + +- [Awesome Ethereum](https://github.com/btomashvili/awesome-ethereum) +- [Consensys: Danh sách đầy đủ các công cụ dành cho nhà phát triển Ethereum](https://media.consensys.net/an-definitive-list-of-ethereum-developer-tools-2159ce865974) | [Nguồn trên GitHub](https://github.com/ConsenSys/ethereum-developer-tools-list) diff --git a/public/content/translations/vi/developers/docs/programming-languages/index.md b/public/content/translations/vi/developers/docs/programming-languages/index.md new file mode 100644 index 00000000000..f44ff4d6d64 --- /dev/null +++ b/public/content/translations/vi/developers/docs/programming-languages/index.md @@ -0,0 +1,32 @@ +--- +title: "Ngôn ngữ lập trình" +description: "Khám phá các tài nguyên phát triển Ethereum cho các ngôn ngữ lập trình khác nhau bao gồm JavaScript, Python, Go, Rust, và nhiều hơn nữa." +lang: vi +--- + +Một quan niệm sai lầm phổ biến là các nhà phát triển phải viết [hợp đồng thông minh](/developers/docs/smart-contracts/) để xây dựng trên Ethereum. Điều này không đúng. +Một trong những điểm tuyệt vời của mạng lưới và cộng đồng Ethereum là bạn có thể [tham gia](/community/) bằng gần như bất kỳ ngôn ngữ lập trình nào. + +Ethereum và cộng đồng Ethereum ủng hộ mã nguồn mở. Bạn có thể tìm thấy các dự án cộng đồng - tích hợp client, APIs, phát triển framwork, kiểm tra công cụ - trong một loạt các ngôn ngữ khác nhau. + +## Chọn ngôn ngữ của bạn {#data} + +Chọn ngôn ngữ lập trình của bạn và tìm các dự án, Tài liệu,và các cộng đồng ảo: + +- [Ethereum cho các nhà phát triển Dart](/developers/docs/programming-languages/dart/) +- [Ethereum cho các nhà phát triển Delphi](/developers/docs/programming-languages/delphi/) +- [Ethereum cho các nhà phát triển .NET](/developers/docs/programming-languages/dot-net/) +- [Ethereum cho các nhà phát triển Elixir](/developers/docs/programming-languages/elixir/) +- [Ethereum cho các nhà phát triển Go](/developers/docs/programming-languages/golang/) +- [Ethereum cho các nhà phát triển Java](/developers/docs/programming-languages/java/) +- [Ethereum cho các nhà phát triển JavaScript](/developers/docs/programming-languages/javascript/) +- [Ethereum cho các nhà phát triển Python](/developers/docs/programming-languages/python/) +- [Ethereum cho các nhà phát triển Ruby](/developers/docs/programming-languages/ruby/) +- [Ethereum cho các nhà phát triển Rust](/developers/docs/programming-languages/rust/) + +### Sẽ thế nào nếu ngôn ngữ của tôi không được hỗ trợ {#other-lang} + +Nếu bạn muốn liên kết đến các tài nguyên hoặc giới thiệu một cộng đồng ảo cho một ngôn ngữ lập trình bổ sung, bạn có thể yêu cầu một trang mới bằng cách [mở một vấn đề](https://github.com/ethereum/ethereum-org-website/issues/new/choose). + +Nếu bạn chỉ muốn viết mã để tương tác với chuỗi khối bằng một ngôn ngữ hiện không được hỗ trợ +bạn có thể sử dụng [giao diện JSON-RPC](/developers/docs/apis/json-rpc/) để kết nối với mạng lưới Ethereum. Bất kỳ ngôn ngữ lập trình nào sử dụng TCP/IP đề có thể sử dụng giao diện này. diff --git a/public/content/translations/vi/developers/docs/programming-languages/java/index.md b/public/content/translations/vi/developers/docs/programming-languages/java/index.md new file mode 100644 index 00000000000..c889b023d1b --- /dev/null +++ b/public/content/translations/vi/developers/docs/programming-languages/java/index.md @@ -0,0 +1,64 @@ +--- +title: "Ethereum cho nhà phát triển Java" +description: "Tìm hiểu cách phát triển Ethereum bằng cách sử dụng các dự án và công cụ dựa trên cơ sở Java" +lang: vi +incomplete: true +--- + +Tìm hiểu cách phát triển cho Ethereum bằng các dự án và công cụ dựa trên Java + +Sử dụng Ethereum để tạo các ứng dụng phi tập trung (hay "dapps") sử dụng các lợi ích của công nghệ tiền điện tử và chuỗi khối. Các ứng dụng phi tập trung này có thể đáng tin cậy, có nghĩa là một khi chúng được triển khai lên Ethereum, chúng sẽ luôn chạy như được lập trình. Chúng có thể kiểm soát các tài sản kỹ thuật số để tạo ra những loại ứng dụng tài chính mới. Chúng có thể được phân cấp, có nghĩa là không một thực thể hay người nào kiểm soát chúng và gần như không thể kiểm duyệt. + +## Bắt đầu với hợp đồng thông minh và ngôn ngữ Solidity {#getting-started-with-smart-contracts-and-solidity} + +**Thực hiện các bước đầu tiên để tích hợp Java với Ethereum** + +Cần một hướng dẫn cơ bản hơn? Hãy xem [ethereum.org/learn](/learn/) hoặc [ethereum.org/developers.](/developers/) + +- [Giải thích về Chuỗi khối](https://kauri.io/article/d55684513211466da7f8cc03987607d5/blockchain-explained) +- [Tìm hiểu về Hợp đồng thông minh](https://kauri.io/article/e4f66c6079e74a4a9b532148d3158188/ethereum-101-part-5-the-smart-contract) +- [Viết Hợp đồng thông minh đầu tiên của bạn](https://kauri.io/article/124b7db1d0cf4f47b414f8b13c9d66e2/remix-ide-your-first-smart-contract) +- [Tìm hiểu cách Biên dịch và Triển khai Solidity](https://kauri.io/article/973c5f54c4434bb1b0160cff8c695369/understanding-smart-contract-compilation-and-deployment) + +## Làm việc với các máy khách Ethereum {#working-with-ethereum-clients} + +Tìm hiểu cách sử dụng [Web3J](https://github.com/web3j/web3j) và Hyperledger Besu, hai trình khách Java Ethereum hàng đầu + +- [Kết nối với một trình khách Ethereum bằng Java, Eclipse và Web3J](https://kauri.io/article/b9eb647c47a546bc95693acc0be72546/connecting-to-an-ethereum-client-with-java-eclipse-and-web3j) +- [Quản lý tài khoản Ethereum bằng Java và Web3j](https://kauri.io/article/925d923e12c543da9a0a3e617be963b4/manage-an-ethereum-account-with-java-and-web3j) +- [Tạo trình bao bọc Java từ Hợp đồng thông minh của bạn](https://kauri.io/article/84475132317d4d6a84a2c42eb9348e4b/generate-a-java-wrapper-from-your-smart-contract) +- [Tương tác với một Hợp đồng thông minh Ethereum](https://kauri.io/article/14dc434d11ef4ee18bf7d57f079e246e/interacting-with-an-ethereum-smart-contract-in-java) +- [Lắng nghe các Sự kiện Hợp đồng thông minh Ethereum](https://kauri.io/article/760f495423db42f988d17b8c145b0874/listening-for-ethereum-smart-contract-events-in-java) +- [Sử dụng Besu (Pantheon), trình khách Java Ethereum với Linux](https://kauri.io/article/276dd27f1458443295eea58403fd6965/using-pantheon-the-java-ethereum-client-with-linux) +- [Chạy nút Hyperledger Besu (Pantheon) trong các bài kiểm tra tích hợp Java](https://kauri.io/article/7dc3ecc391e54f7b8cbf4e5fa0caf780/running-a-pantheon-node-in-java-integration-tests) +- [Bảng tóm tắt Web3j](https://kauri.io/web3j-cheat-sheet-\(java-ethereum\)/5dfa1ea941ac3d0001ce1d90/c) + +Tìm hiểu cách sử dụng [ethers-kt](https://github.com/Kr1ptal/ethers-kt), một thư viện Kotlin không đồng bộ, hiệu năng cao để tương tác với các chuỗi khối dựa trên EVM. Nhắm mục tiêu các nền tảng JVM và Android. + +- [Chuyển token ERC20](https://github.com/Kr1ptal/ethers-kt/blob/master/examples/src/main/kotlin/io/ethers/examples/abi/TransferERC20.kt) +- [Hoán đổi UniswapV2 với tính năng lắng nghe sự kiện](https://github.com/Kr1ptal/ethers-kt/blob/master/examples/src/main/kotlin/io/ethers/examples/tokenswapwitheventlistening/TokenSwapWithEventListening.kt) +- [Trình theo dõi số dư ETH / ERC20](https://github.com/Kr1ptal/ethers-kt/blob/master/examples/src/main/kotlin/io/ethers/examples/balancetracker/BalanceTracker.kt) + +## Các bài viết trình độ trung cấp {#intermediate-articles} + +- [Quản lý lưu trữ trong ứng dụng Java với IPFS](https://kauri.io/article/3e8494f4f56f48c4bb77f1f925c6d926/managing-storage-in-a-java-application-with-ipfs) +- [Quản lý token ERC20 trong Java với Web3j](https://kauri.io/article/d13e911bbf624108b1d5718175a5e0a0/manage-erc20-tokens-in-java-with-web3j) +- [Trình quản lý Giao dịch Web3j](https://kauri.io/article/4cb780bb4d0846438d11885a25b6d7e7/web3j-transaction-managers) + +## Các mẫu sử dụng nâng cao {#advanced-use-patterns} + +- [Sử dụng Eventeum để xây dựng bộ đệm dữ liệu hợp đồng thông minh Java](https://kauri.io/article/fe81ee9612eb4e5a9ab72790ef24283d/using-eventeum-to-build-a-java-smart-contract-data-cache) + +## Các dự án và công cụ Java {#java-projects-and-tools} + +- [Web3J (Thư viện để tương tác với các trình khách Ethereum)](https://github.com/web3j/web3j) +- [ethers-kt (Thư viện Kotlin/Java/Android không đồng bộ, hiệu năng cao cho các chuỗi khối dựa trên EVM.)](https://github.com/Kr1ptal/ethers-kt) +- [Eventeum (Trình lắng nghe sự kiện)](https://github.com/ConsenSys/eventeum) +- [Mahuta (Công cụ phát triển IPFS)](https://github.com/ConsenSys/mahuta) + +Tìm kiếm thêm tài nguyên? Hãy xem tại [ethereum.org/developers.](/developers/) + +## Những người đóng góp cho cộng đồng Java {#java-community-contributors} + +- [IO Builders](https://io.builders) +- [Kauri](https://kauri.io) diff --git a/public/content/translations/vi/developers/docs/programming-languages/javascript/index.md b/public/content/translations/vi/developers/docs/programming-languages/javascript/index.md new file mode 100644 index 00000000000..26186b9ad58 --- /dev/null +++ b/public/content/translations/vi/developers/docs/programming-languages/javascript/index.md @@ -0,0 +1,72 @@ +--- +title: "Ethereum cho nhà phát triển JavaScript" +description: "Tìm hiểu cách phát triển Ethereum bằng cách sử dụng các dự án và công cụ dựa trên cơ sở JavaScript." +lang: vi +--- + +Java script là một ngôn ngữ nổi tiếng trong mạng lưới Ethereum. Trên thực tế, có một [nhóm](https://github.com/ethereumjs) chuyên mang càng nhiều thành phần của Ethereum sang JavaScript càng tốt. + +Có nhiều cơ hội để viết JavaScript (hoặc một ngôn ngữ tương tự) ở [tất cả các cấp độ của ngăn xếp](/developers/docs/ethereum-stack/). + +## Tương tác với Ethereum {#interact-with-ethereum} + +### Thư viện API JavaScript {#javascript-api-libraries} + +Nếu bạn muốn viết JavaScript để truy vấn chuỗi khối, gửi giao dịch và hơn thế nữa, cách thuận tiện nhất để làm điều này là sử dụng [thư viện API JavaScript](/developers/docs/apis/javascript/). Các API này cho phép các nhà phát triển dễ dàng tương tác với các [nút trong mạng Ethereum](/developers/docs/nodes-and-clients/). + +Bạn có thể sử dụng những thư viện này để tương tác với hợp đồng thông minh trên Ethereum, vì vậy có thể xây dựng một ứng dụng phi tập trung dapp mà bạn chỉ cần sử dụng JavaScript để tương tác với các hợp đồng đã tồn tại. + +**Hãy xem qua** + +- [Web3.js](https://web3js.readthedocs.io) +- [Ethers.js](https://ethers.org) – _bao gồm việc triển khai ví Ethereum và các tiện ích trong JavaScript và TypeScript._ +- [viem](https://viem.sh) – _một Giao diện TypeScript cho Ethereum, cung cấp các yếu tố nguyên thuỷ không trạng thái cấp thấp để tương tác với Ethereum._ +- [Drift](https://ryangoree.github.io/drift/) – _một siêu thư viện TypeScript với bộ nhớ đệm, hook và các bản mô phỏng thử nghiệm tích hợp sẵn để phát triển Ethereum một cách dễ dàng trên các thư viện web3._ + +### Hợp đồng thông minh {#smart-contracts} + +Nếu bạn là một nhà phát triển JavaScript và muốn tự viết hợp đồng thông minh, bạn có thể muốn làm quen với [Solidity](https://solidity.readthedocs.io). Đây là ngôn ngữ hợp đồng thông minh phổ biến nhất và nó có cú pháp giống với JavaScript, điều này có thể giúp việc học trở nên dễ dàng hơn. + +Thông tin thêm về [hợp đồng thông minh](/developers/docs/smart-contracts/). + +## Tìm hiểu về giao thức {#understand-the-protocol} + +### Máy ảo Ethereum {#the-ethereum-virtual-machine} + +Có một bản triển khai JavaScript của [máy ảo Ethereum](/developers/docs/evm/). Nó hỗ trợ các quy tắc fork mới nhất. Quy tắc phân nhánh đề cập đến những thay đổi được thực hiện đối với EVM do kết quả của các nâng cấp theo kế hoạch. + +Nó được chia thành nhiều gói JavaScript khác nhau mà bạn có thể xem qua để hiểu rõ hơn: + +- Tài khoản +- Khối +- Chuỗi khối tự nó +- Các giao dịch +- Thêm nữa... + +Điều này sẽ giúp bạn hiểu những thứ như "cấu trúc dữ liệu của một tài khoản là gì?". + +Nếu bạn thích đọc mã, đoạn mã JavaScript này có thể là một sự thay thế tuyệt vời cho việc đọc tài liệu của chúng tôi. + +**Hãy xem qua EVM** +[`@ethereumjs/evm`](https://github.com/ethereumjs/ethereumjs-monorepo/tree/master/packages/evm) + +### Nút và máy khách {#nodes-and-clients} + +Một client Ethereumjs đang được phát triển tích cực cho phép bạn đào sâu vào cách các client Ethereum hoạt động bằng một ngôn ngữ bạn hiểu; JavaScript! + +**Hãy xem qua máy khách** +[`@ethereumjs/client`](https://github.com/ethereumjs/ethereumjs-monorepo/tree/master/packages/client) + +## Các dự án khác {#other-projects} + +Ngoài ra còn có rất nhiều điều hoạt động khác đang diễn ra trong lĩnh vực Ethereum JavaScript, bao gồm: + +- các thư viện tiện ích ví. +- các công cụ để tạo, nhập và xuất khoá Ethereum. +- một bản triển khai của `merkle-patricia-tree` – một cấu trúc dữ liệu được nêu trong sách vàng Ethereum. + +Tìm hiểu sâu hơn về bất cứ điều gì bạn quan tâm nhất tại [repo EthereumJS](https://github.com/ethereumjs) + +## Đọc thêm {#further-reading} + +_Biết về nguồn lực cộng đồng đã giúp đỡ bạn? Chỉnh sửa trang này và bổ sung!_ diff --git a/public/content/translations/vi/developers/docs/programming-languages/python/index.md b/public/content/translations/vi/developers/docs/programming-languages/python/index.md new file mode 100644 index 00000000000..529b5c7927f --- /dev/null +++ b/public/content/translations/vi/developers/docs/programming-languages/python/index.md @@ -0,0 +1,99 @@ +--- +title: "Ethereum cho nhà phát triển Python" +description: "Tìm hiểu cách phát triển Ethereum bằng cách sử dụng các dự án và công cụ dựa trên cơ sở Python" +lang: vi +incomplete: true +--- + +Tìm hiểu cách phát triển cho Ethereum bằng các dự án và công cụ dựa trên Python + +Sử dụng Ethereum để tạo các ứng dụng phi tập trung (hay "dapps") sử dụng các lợi ích của công nghệ tiền điện tử và chuỗi khối. Các ứng dụng phi tập trung này có thể đáng tin cậy, có nghĩa là một khi chúng được triển khai lên Ethereum, chúng sẽ luôn chạy như được lập trình. Chúng có thể kiểm soát các tài sản kỹ thuật số để tạo ra những loại ứng dụng tài chính mới. Chúng có thể được phân cấp, có nghĩa là không một thực thể hay người nào kiểm soát chúng và gần như không thể kiểm duyệt. + +## Bắt đầu với hợp đồng thông minh và ngôn ngữ Solidity {#getting-started-with-smart-contracts-and-solidity} + +**Thực hiện các bước đầu tiên để tích hợp Python với Ethereum** + +Cần một hướng dẫn cơ bản hơn? Tham khảo [ethereum.org/learn](/learn/) hoặc [ethereum.org/developers](/developers/). + +- [Giải thích về Chuỗi khối](https://kauri.io/article/d55684513211466da7f8cc03987607d5/blockchain-explained) +- [Tìm hiểu về Hợp đồng thông minh](https://kauri.io/article/e4f66c6079e74a4a9b532148d3158188/ethereum-101-part-5-the-smart-contract) +- [Viết Hợp đồng thông minh đầu tiên của bạn](https://kauri.io/article/124b7db1d0cf4f47b414f8b13c9d66e2/remix-ide-your-first-smart-contract) +- [Tìm hiểu cách Biên dịch và Triển khai Solidity](https://kauri.io/article/973c5f54c4434bb1b0160cff8c695369/understanding-smart-contract-compilation-and-deployment) +- [Báo cáo tình hình của Python trong chuỗi khối năm 2023](https://tradingstrategy.ai/blog/the-state-of-python-in-blockchain-in-2023) + +## Các bài viết cho người mới bắt đầu {#beginner-articles} + +- [Tổng quan về web3.py](https://web3py.readthedocs.io/en/latest/overview.html) +- [Tham quan Hệ sinh thái Python của Ethereum](https://snakecharmers.ethereum.org/python-ecosystem/) +- [Hướng dẫn về Ethereum dành cho Nhà phát triển (Python)](https://snakecharmers.ethereum.org/a-developers-guide-to-ethereum-pt-1/) +- [Xứng đáng nhận giải: Hướng dẫn Hackathon Python trên Ethereum](https://snakecharmers.ethereum.org/prize-worthy/) +- [Giới thiệu về Hợp đồng thông minh với Vyper](https://kauri.io/#collections/Getting%20Started/an-introduction-to-smart-contracts-with-vyper/) +- [Làm thế nào để phát triển hợp đồng Ethereum bằng Python Flask?](https://medium.com/coinmonks/how-to-develop-ethereum-contract-using-python-flask-9758fe65976e) +- [Giới thiệu về Web3.py · Ethereum cho các Nhà phát triển Python](https://www.dappuniversity.com/articles/web3-py-intro) +- [Cách gọi một hàm Hợp đồng thông minh bằng Python và web3.py](https://stackoverflow.com/questions/57580702/how-to-call-a-smart-contract-function-using-python-and-web3-py) + +## Các bài viết trình độ trung cấp {#intermediate-articles} + +- [Những người bạn của web3.py: Giới thiệu về Ape](https://snakecharmers.ethereum.org/intro-to-ape/) +- [Phát triển ứng dụng phi tập trung cho Lập trình viên Python](https://levelup.gitconnected.com/dapps-development-for-python-developers-f52b32b54f28) +- [Tạo Giao diện Ethereum bằng Python: Phần 1](https://hackernoon.com/creating-a-python-ethereum-interface-part-1-4d2e47ea0f4d) +- [Hợp đồng thông minh Ethereum bằng Python: hướng dẫn toàn diện (phần nào)](https://hackernoon.com/ethereum-smart-contracts-in-python-a-comprehensive-ish-guide-771b03990988) + +## Các mẫu sử dụng nâng cao {#advanced-use-patterns} + +- [Các mẫu web3.py: Đăng ký Sự kiện theo thời gian thực](https://snakecharmers.ethereum.org/subscriptions/) +- [Các mẫu web3.py: WebSocketProvider](https://snakecharmers.ethereum.org/websocketprovider/) +- [Biên dịch, triển khai và gọi hợp đồng thông minh Ethereum bằng Python](https://yohanes.gultom.id/2018/11/28/compiling-deploying-and-calling-ethereum-smartcontract-using-python/) +- [Phân tích Hợp đồng thông minh Solidity bằng Slither](https://kauri.io/#collections/DevOps/analyze-solidity-smart-contracts-with-slither/#analyze-solidity-smart-contracts-with-slither) +- [Hướng dẫn Fintech trên Chuỗi khối: Cho vay và Vay mượn bằng Python](https://blog.chain.link/blockchain-fintech-defi-tutorial-lending-borrowing-python/) + +## Bài viết được lưu trữ + +- [Triển khai token ERC20 của riêng bạn bằng Python và Brownie](https://betterprogramming.pub/python-blockchain-token-deployment-tutorial-create-an-erc20-77a5fd2e1a58) +- [Sử dụng Brownie và Python để triển khai Hợp đồng thông minh](https://dev.to/patrickalphac/using-brownie-for-to-deploy-smart-contracts-1kkp) +- [Tạo NFT trên OpenSea bằng Brownie](https://www.freecodecamp.org/news/how-to-make-an-nft-and-render-on-opensea-marketplace/) + +## Các dự án và công cụ Python {#python-projects-and-tools} + +### Đang hoạt động: {#active} + +- [Web3.py](https://github.com/ethereum/web3.py) - _Thư viện Python để tương tác với Ethereum_ +- [Vyper](https://github.com/ethereum/vyper/) - _Ngôn ngữ Hợp đồng thông minh theo phong cách Python cho EVM_ +- [Ape](https://github.com/ApeWorX/ape) - _Công cụ phát triển hợp đồng thông minh cho các Pythonista, Nhà khoa học dữ liệu và Chuyên gia bảo mật_ +- [py-evm](https://github.com/ethereum/py-evm) - _triển khai máy ảo Ethereum_ +- [eth-tester](https://github.com/ethereum/eth-tester) - _công cụ để kiểm thử các ứng dụng dựa trên Ethereum_ +- [eth-utils](https://github.com/ethereum/eth-utils/) - _các hàm tiện ích để làm việc với các codebase liên quan đến Ethereum_ +- [py-solc-x](https://pypi.org/project/py-solc-x/) - _Trình bao bọc Python xung quanh trình biên dịch solc solidity với hỗ trợ phiên bản 0.5.x_ +- [pymaker](https://github.com/makerdao/pymaker) - _API Python cho các hợp đồng Maker_ +- [siwe](https://github.com/signinwithethereum/siwe-py) - _Đăng nhập bằng Ethereum (siwe) cho Python_ +- [Web3 DeFi cho các tích hợp Ethereum](https://github.com/tradingstrategy-ai/web3-ethereum-defi) - _Một gói Python với các tích hợp sẵn sàng cho ERC-20, Uniswap và các dự án phổ biến khác_ +- [Wake](https://getwake.io) - _Framework Python tất cả trong một để kiểm thử hợp đồng, fuzzing, triển khai, quét lỗ hổng và điều hướng mã (máy chủ ngôn ngữ - [Công cụ cho Solidity](https://marketplace.visualstudio.com/items?itemName=AckeeBlockchain.tools-for-solidity))_ + +### Đã lưu trữ / Không còn được bảo trì: {#archived--no-longer-maintained} + +- [Trinity](https://github.com/ethereum/trinity) - _Máy khách Python của Ethereum_ +- [Mamba](https://github.com/arjunaskykok/mamba) - _framework để viết, biên dịch và triển khai các hợp đồng thông minh được viết bằng ngôn ngữ Vyper_ +- [Brownie](https://github.com/eth-brownie/brownie) - _Framework Python để triển khai, kiểm thử và tương tác với các hợp đồng thông minh Ethereum_ +- [pydevp2p](https://github.com/ethereum/pydevp2p) - _triển khai ngăn xếp P2P của Ethereum_ +- [py-wasm](https://github.com/ethereum/py-wasm) - _Triển khai trình thông dịch web assembly bằng Python_ + +Tìm kiếm thêm tài nguyên? Tham khảo [ethereum.org/developers](/developers/). + +## Các dự án sử dụng bộ công cụ Python {#projects-using-python-tooling} + +Các dự án dựa trên Ethereum sau đây sử dụng các công cụ được đề cập ở trang này. Code và thực tiễn tối ưu. + +- [Yearn Finance](https://yearn.finance/) và [kho lưu trữ Hợp đồng Kho bạc Yearn](https://github.com/yearn/yearn-vaults) +- [Curve](https://www.curve.finance/) và [kho lưu trữ hợp đồng thông minh Curve](https://github.com/curvefi/curve-contract) +- [BadgerDAO](https://badger.com/) và [các hợp đồng thông minh sử dụng chuỗi công cụ Brownie](https://github.com/Badger-Finance/badger-system) +- [Sushi](https://sushi.com/) sử dụng Python trong việc quản lý và triển khai các hợp đồng vesting của họ](https://github.com/sushiswap/sushi-vesting-protocols) +- [Alpha Finance](https://alphafinance.io/), nổi tiếng với Alpha Homora, sử dụng [Brownie để kiểm thử và triển khai các hợp đồng thông minh](https://github.com/AlphaFinanceLab/alpha-staking-contract) + +## Thảo luận của Cộng đồng Python {#python-community-contributors} + +- [Discord Cộng đồng Ethereum Python](https://discord.gg/9zk7snTfWe) để thảo luận về Web3.py và các framework Python khác +- [Discord của Vyper](https://discord.gg/SdvKC79cJk) để thảo luận về lập trình hợp đồng thông minh Vyper + +## Các danh sách tổng hợp khác {#other-aggregated-lists} + +Wiki của Vyper có một [danh sách tài nguyên đáng kinh ngạc cho Vyper](https://github.com/vyperlang/vyper/wiki/Vyper-tools-and-resources) \ No newline at end of file diff --git a/public/content/translations/vi/developers/docs/programming-languages/ruby/index.md b/public/content/translations/vi/developers/docs/programming-languages/ruby/index.md new file mode 100644 index 00000000000..9ed5b77dd72 --- /dev/null +++ b/public/content/translations/vi/developers/docs/programming-languages/ruby/index.md @@ -0,0 +1,60 @@ +--- +title: "Ethereum cho các nhà phát triển Ruby" +description: "Tìm hiểu cách phát triển cho Ethereum bằng cách sử dụng các dự án và công cụ dựa trên Ruby." +lang: vi +incomplete: false +--- + +Tìm hiểu cách phát triển cho Ethereum bằng cách sử dụng các dự án và công cụ dựa trên Ruby. + +Sử dụng Ethereum để tạo các ứng dụng phi tập trung (hay "dapps") sử dụng các lợi ích của công nghệ tiền điện tử và chuỗi khối. Các ứng dụng phi tập trung này có thể không cần tin cậy, nghĩa là một khi chúng được triển khai lên Ethereum, chúng sẽ luôn chạy như được lập trình. Chúng có thể kiểm soát các tài sản kỹ thuật số để tạo ra các loại ứng dụng tài chính mới. Chúng có thể được phân cấp, có nghĩa là không một thực thể hay người nào kiểm soát chúng và gần như không thể kiểm duyệt. + +## Bắt đầu với hợp đồng thông minh và ngôn ngữ Solidity {#getting-started-with-smart-contracts-and-solidity} + +**Thực hiện các bước đầu tiên để tích hợp Ruby với Ethereum** + +Cần một hướng dẫn cơ bản hơn? Tham khảo [ethereum.org/learn](/learn/) hoặc [ethereum.org/developers](/developers/). + +- [Giải thích về Chuỗi khối](https://kauri.io/article/d55684513211466da7f8cc03987607d5/blockchain-explained) +- [Tìm hiểu về Hợp đồng thông minh](https://kauri.io/article/e4f66c6079e74a4a9b532148d3158188/ethereum-101-part-5-the-smart-contract) +- [Viết Hợp đồng thông minh đầu tiên của bạn](https://kauri.io/article/124b7db1d0cf4f47b414f8b13c9d66e2/remix-ide-your-first-smart-contract) +- [Tìm hiểu cách Biên dịch và Triển khai Solidity](https://kauri.io/article/973c5f54c4434bb1b0160cff8c695369/understanding-smart-contract-compilation-and-deployment) + +## Các bài viết cho người mới bắt đầu {#beginner-articles} + +- [Cuối cùng cũng hiểu về tài khoản Ethereum](https://dev.to/q9/finally-understanding-ethereum-accounts-1kpe) +- [Cuối cùng là xác thực người dùng Rails bằng MetaMask](https://dev.to/q9/finally-authenticating-rails-users-with-metamask-3fj) +- [Cách kết nối với mạng Ethereum bằng Ruby](https://www.quicknode.com/guides/web3-sdks/how-to-connect-to-the-ethereum-network-using-ruby) +- [Cách tạo địa chỉ Ethereum mới trong Ruby](https://www.quicknode.com/guides/web3-sdks/how-to-generate-a-new-ethereum-address-in-ruby) + +## Các bài viết trình độ trung cấp {#intermediate-articles} + +- [Ứng dụng chuỗi khối với Ruby](https://www.nopio.com/blog/blockchain-app-ruby/) +- [Sử dụng Ruby, được kết nối với Ethereum, để thực thi Hợp đồng thông minh](https://titanwolf.org/Network/Articles/Article?AID=87285822-9b25-49d5-ba2a-7ad95fff7ef9) + +## Các dự án và công cụ Ruby {#ruby-projects-and-tools} + +### Đang hoạt động {#active} + +- [eth.rb](https://github.com/q9f/eth.rb) - _Thư viện Ruby và máy khách RPC để xử lý các tài khoản, thông điệp và giao dịch Ethereum_ +- [keccak.rb](https://github.com/q9f/keccak.rb) - _Hàm băm Keccak (SHA3) được Ethereum sử dụng_ +- [siwe-ruby](https://github.com/signinwithethereum/siwe-ruby) - _Triển khai bằng Ruby của tính năng Đăng nhập bằng Ethereum_ +- [siwe-rails](https://github.com/signinwithethereum/siwe-rails) - _Gem của Rails bổ sung các tuyến đăng nhập cục bộ SIWE_ +- [siwe-rails-examples](https://github.com/signinwithethereum/siwe-rails-examples) - _Ví dụ về SIWE sử dụng Ruby on Rails với bộ điều khiển tùy chỉnh_ +- [omniauth-siwe](https://github.com/signinwithethereum/omniauth-siwe) - _Chiến lược OmniAuth cho tính năng Đăng nhập bằng Ethereum (SIWE)_ +- [omniauth-nft](https://github.com/valthon/omniauth-nft) - _Chiến lược OmniAuth để xác thực thông qua quyền sở hữu NFT_ +- [ethereum-on-rails](https://github.com/q9f/ethereum-on-rails) - _Mẫu Ethereum trên Rails cho phép kết nối MetaMask với Ruby on Rails_ + +### Đã lưu trữ / Không còn được bảo trì {#archived--no-longer-maintained} + +- [web3-eth](https://github.com/spikewilliams/vtada-ethereum) - _Gọi các phương thức RPC của nút Ethereum bằng Ruby_ +- [ethereum_tree](https://github.com/longhoangwkm/ethereum_tree) - _Thư viện Ruby để tạo các địa chỉ ETH từ một ví xác định phân cấp theo tiêu chuẩn BIP32_ +- [etherlite](https://github.com/budacom/etherlite) - _Tích hợp Ethereum cho Ruby on Rails_ +- [ethereum.rb](https://github.com/EthWorks/ethereum.rb) - _Máy khách Ethereum của Ruby sử dụng giao diện JSON-RPC để gửi giao dịch, tạo và tương tác với các hợp đồng cũng như là bộ công cụ hữu ích để làm việc với nút Ethereum_ +- [omniauth-ethereum.rb](https://github.com/q9f/omniauth-ethereum.rb) - _Triển khai chiến lược nhà cung cấp Ethereum cho OmniAuth_ + +Tìm kiếm thêm tài nguyên? Hãy xem [trang chủ dành cho Nhà phát triển của chúng tôi](/developers/). + +## Những người đóng góp cho cộng đồng Ruby {#ruby-community-contributors} + +[Nhóm Ethereum Ruby trên Telegram](https://t.me/ruby_eth) là nơi có một cộng đồng đang phát triển nhanh chóng và là tài nguyên chuyên dụng cho các cuộc thảo luận về bất kỳ dự án nào ở trên và các chủ đề liên quan. diff --git a/public/content/translations/vi/developers/docs/programming-languages/rust/index.md b/public/content/translations/vi/developers/docs/programming-languages/rust/index.md new file mode 100644 index 00000000000..bfc5d73537d --- /dev/null +++ b/public/content/translations/vi/developers/docs/programming-languages/rust/index.md @@ -0,0 +1,65 @@ +--- +title: "Ethereum cho nhà phát triển Rust" +description: "Tìm hiểu cách phát triển Ethereum bằng cách sử dụng các dự án và công cụ dựa trên cơ sở Rust" +lang: vi +incomplete: true +--- + +Tìm hiểu cách phát triển cho Ethereum bằng các dự án và công cụ dựa trên Rust + +Sử dụng Ethereum để tạo các ứng dụng phi tập trung (hay "dapps") sử dụng các lợi ích của công nghệ tiền điện tử và chuỗi khối. Các ứng dụng phi tập trung này có thể đáng tin cậy, có nghĩa là một khi chúng được triển khai lên Ethereum, chúng sẽ luôn chạy như được lập trình. Chúng có thể kiểm soát các tài sản kỹ thuật số để tạo ra những loại ứng dụng tài chính mới. Chúng có thể được phân cấp, có nghĩa là không một thực thể hay người nào kiểm soát chúng và gần như không thể kiểm duyệt. + +## Bắt đầu với hợp đồng thông minh và ngôn ngữ Solidity {#getting-started-with-smart-contracts-and-solidity} + +**Thực hiện các bước đầu tiên để tích hợp Rust với Ethereum** + +Cần một hướng dẫn cơ bản hơn? Tham khảo [ethereum.org/learn](/learn/) hoặc [ethereum.org/developers](/developers/). + +- [Giải thích về Chuỗi khối](https://kauri.io/article/d55684513211466da7f8cc03987607d5/blockchain-explained) +- [Tìm hiểu về Hợp đồng thông minh](https://kauri.io/article/e4f66c6079e74a4a9b532148d3158188/ethereum-101-part-5-the-smart-contract) +- [Viết Hợp đồng thông minh đầu tiên của bạn](https://kauri.io/article/124b7db1d0cf4f47b414f8b13c9d66e2/remix-ide-your-first-smart-contract) +- [Tìm hiểu cách Biên dịch và Triển khai Solidity](https://kauri.io/article/973c5f54c4434bb1b0160cff8c695369/understanding-smart-contract-compilation-and-deployment) + +## Các bài viết cho người mới bắt đầu {#beginner-articles} + +- [Máy khách Ethereum Rust](https://openethereum.github.io/) \* **Lưu ý rằng OpenEthereum [đã không còn được dùng nữa](https://medium.com/openethereum/gnosis-joins-erigon-formerly-turbo-geth-to-release-next-gen-ethereum-client-c6708dd06dd) và không còn được bảo trì.** Hãy sử dụng một cách thận trọng và tốt nhất là chuyển sang một bản triển khai máy khách khác. +- [Gửi giao dịch đến Ethereum bằng Rust](https://kauri.io/#collections/A%20Hackathon%20Survival%20Guide/sending-ethereum-transactions-with-rust/) +- [Hướng dẫn từng bước về cách viết hợp đồng trong Rust Wasm cho Kovan](https://github.com/paritytech/pwasm-tutorial) + +## Các bài viết trình độ trung cấp {#intermediate-articles} + +## Các mẫu sử dụng nâng cao {#advanced-use-patterns} + +- [Thư viện externs pwasm_ethereum để tương tác với mạng tương tự Ethereum](https://github.com/openethereum/pwasm-ethereum) + +- [Xây dựng một ứng dụng trò chuyện phi tập trung bằng JavaScript và Rust](https://medium.com/perlin-network/build-a-decentralized-chat-using-javascript-rust-webassembly-c775f8484b52) + +- [Xây dựng một ứng dụng Việc cần làm phi tập trung bằng Vue.js & Rust](https://medium.com/@jjmace01/build-a-decentralized-todo-app-using-vue-js-rust-webassembly-5381a1895beb) + +- [Xây dựng một chuỗi khối bằng Rust](https://blog.logrocket.com/how-to-build-a-blockchain-in-rust/) + +## Các dự án và công cụ Rust {#rust-projects-and-tools} + +- [pwasm-ethereum](https://github.com/paritytech/pwasm-ethereum) - _Bộ sưu tập externs để tương tác với mạng tương tự Ethereum_ +- [Lighthouse](https://github.com/sigp/lighthouse) - _Máy khách lớp đồng thuận Ethereum nhanh chóng_ +- [Ethereum WebAssembly](https://ewasm.readthedocs.io/en/mkdocs/) - _Đề xuất thiết kế lại lớp thực thi hợp đồng thông minh của Ethereum sử dụng một tập con xác định của WebAssembly_ +- [oasis_std](https://docs.rs/oasis-std/latest/oasis_std/index.html) - _Tài liệu tham khảo API OASIS_ +- [Solaris](https://github.com/paritytech/sol-rs) - _Bộ kiểm thử đơn vị Hợp đồng thông minh Solidity sử dụng EVM của Máy khách Parity gốc._ +- [SputnikVM](https://github.com/rust-blockchain/evm) - _Bản triển khai Máy ảo Ethereum bằng Rust_ +- [Wavelet](https://wavelet.perlin.net/docs/smart-contracts) - _Hợp đồng thông minh Wavelet bằng Rust_ +- [Foundry](https://github.com/foundry-rs/foundry) - _Bộ công cụ để phát triển ứng dụng Ethereum_ +- [Alloy](https://alloy.rs) - _Thư viện hiệu suất cao, được kiểm thử kỹ lưỡng và có tài liệu đầy đủ để tương tác với Ethereum và các chuỗi dựa trên EVM khác._ +- [Ethers_rs](https://github.com/gakonst/ethers-rs) - _Thư viện Ethereum và triển khai ví_ +- [SewUp](https://github.com/second-state/SewUp) - _Một thư viện giúp bạn xây dựng hợp đồng Ethereum webassembly bằng Rust, giống như phát triển trên một backend thông thường_ +- [Substreams](https://github.com/streamingfast/substreams) - _Công nghệ lập chỉ mục dữ liệu chuỗi khối song song_ +- [Reth](https://github.com/paradigmxyz/reth) Reth (viết tắt của Rust Ethereum) là một bản triển khai nút đầy đủ mới của Ethereum +- [Awesome Ethereum Rust](https://github.com/Vid201/awesome-ethereum-rust) - _Một bộ sưu tập các dự án được tuyển chọn trong hệ sinh thái Ethereum được viết bằng Rust_ + +Tìm kiếm thêm tài nguyên? Hãy xem tại [ethereum.org/developers.](/developers/) + +## Những người đóng góp cho cộng đồng Rust {#rust-community-contributors} + +- [Ethereum WebAssembly](https://gitter.im/ewasm/Lobby) +- [Oasis Gitter](https://gitter.im/Oasis-official/Lobby) +- [Parity Gitter](https://gitter.im/paritytech/parity) +- [Enigma](https://discord.gg/SJK32GY) diff --git a/public/content/translations/vi/developers/docs/scaling/index.md b/public/content/translations/vi/developers/docs/scaling/index.md new file mode 100644 index 00000000000..e57b7bd085a --- /dev/null +++ b/public/content/translations/vi/developers/docs/scaling/index.md @@ -0,0 +1,113 @@ +--- +title: "Thay đổi quy mô" +description: "Một giới thiệu về các tùy chọn mở rộng khác nhau đang được cộng đồng Ethereum phát triển." +lang: vi +sidebarDepth: 3 +--- + +## Tổng quan về việc thay đổi quy mô {#scaling-overview} + +Khi số lượng người sử dụng Ethereum tăng lên, blockchain đã đạt đến những giới hạn nhất định về khả năng. Điều này đã làm tăng chi phí sử dụng mạng, tạo ra nhu cầu về 'giải pháp mở rộng'. Có nhiều giải pháp đang được nghiên cứu, thử nghiệm và triển khai, áp dụng các phương pháp khác nhau để đạt được những mục tiêu tương tự. + +Mục tiêu chính của khả năng mở rộng là tăng tốc độ giao dịch (tính kết luận cuối cùng nhanh hơn) và thông lượng giao dịch (số lượng giao dịch mỗi giây cao hơn) mà không phải hy sinh tính phi tập trung hay tính bảo mật. Trên chuỗi khối Ethereum lớp 1, nhu cầu cao dẫn đến các giao dịch chậm hơn và [giá gas](/developers/docs/gas/) không khả thi. Việc tăng cường khả năng mạng về tốc độ và băng thông là điều cơ bản đối với việc chấp nhận Ethereum một cách có ý nghĩa và rộng rãi. + +Trong khi tốc độ và thông lượng là quan trọng, việc các giải pháp mở rộng nhằm đạt được những mục tiêu này vẫn phải duy trì tính phân cấp và an toàn là điều thiết yếu. Giữ cho rào cản gia nhập thấp cho các nhà điều hành nút là rất quan trọng để ngăn chặn sự tiến triển hướng tới sức mạnh tính toán tập trung và không an toàn. + +Về mặt khái niệm, chúng ta đầu tiên phân loại việc mở rộng thành hai loại: mở rộng trên chuỗi và mở rộng ngoài chuỗi. + +## Điều kiện tiên quyết {#prerequisites} + +Bạn nên có sự hiểu biết vững chắc về tất cả các chủ đề cơ bản. Việc triển khai các giải pháp mở rộng là một bước tiến cao, vì công nghệ này chưa được thử nghiệm nhiều trong thực tế và vẫn đang được nghiên cứu và phát triển. + +## Thay đổi quy mô trên chuỗi {#onchain-scaling} + +Thay đổi quy mô trên chuỗi yêu cầu thay đổi đối với giao thức Ethereum (lớp 1 [Mainnet](/glossary/#mainnet)). Trong một thời gian dài, việc chia nhỏ blockchain được kỳ vọng sẽ mở rộng quy mô cho Ethereum. Điều này sẽ liên quan đến việc chia nhỏ chuỗi khối thành các phần riêng biệt (shard) để được xác thực bởi các tập hợp validator. Tuy nhiên, việc mở rộng bằng các lớp cuộn thứ hai đã trở thành kỹ thuật mở rộng chính. Điều này được hỗ trợ bởi việc bổ sung một dạng dữ liệu mới với chi phí thấp gắn liền với các khối Ethereum, được thiết kế đặc biệt để làm cho việc sử dụng rollup trở nên rẻ hơn cho người dùng. + +### Phân mảnh dữ liệu {#sharding} + +Sharding là quá trình phân chia cơ sở dữ liệu. Các tập con của các trình xác thực sẽ chịu trách nhiệm cho từng shard riêng lẻ thay vì theo dõi toàn bộ Ethereum. Sharding đã nằm trong [lộ trình](/roadmap/) của Ethereum một thời gian dài, và từng được dự định sẽ ra mắt trước The Merge để chuyển sang bằng chứng cổ phần. Tuy nhiên, sự phát triển nhanh chóng của [rollup lớp 2](#layer-2-scaling) và sự ra đời của [Danksharding](/roadmap/danksharding) (thêm các blob dữ liệu rollup vào khối Ethereum mà người xác thực có thể xác minh rất hiệu quả) đã khiến cộng đồng Ethereum ủng hộ việc thay đổi quy mô lấy rollup làm trung tâm thay vì thay đổi quy mô bằng sharding. Điều này cũng sẽ giúp giữ cho logic đồng thuận của Ethereum đơn giản hơn. + +## Thay đổi quy mô ngoài chuỗi {#offchain-scaling} + +Giải pháp ngoại chuỗi được triển khai tách biệt với Mainnet layer 1 - chúng không yêu cầu thay đổi nào đối với giao thức Ethereum hiện tại. Một số giải pháp, được gọi là giải pháp "lớp 2", có được tính bảo mật trực tiếp từ sự đồng thuận của Ethereum lớp 1, chẳng hạn như [gộp giao dịch lạc quan](/developers/docs/scaling/optimistic-rollups/), [Rollup không kiến thức](/developers/docs/scaling/zk-rollups/) hoặc [kênh trạng thái](/developers/docs/scaling/state-channels/). Các giải pháp khác liên quan đến việc tạo ra các chuỗi mới dưới nhiều hình thức khác nhau có được tính bảo mật riêng biệt với Mainnet, chẳng hạn như [chuỗi bên](#sidechains), [validium](#validium) hoặc [chuỗi plasma](#plasma). Các giải pháp này giao tiếp với Mainnet nhưng thu được an ninh theo cách khác nhau để đạt được nhiều mục tiêu. + +### Thay đổi quy mô lớp 2 {#layer-2-scaling} + +Danh mục giải pháp offchain này có được sự bảo mật từ mạng chính Ethereum. + +Lớp 2 là thuật ngữ tổng hợp chỉ các giải pháp được thiết kế nhằm giúp mở rộng ứng dụng của bạn bằng cách xử lý giao dịch ngoài mạng chính Ethereum (lớp 1) trong khi tận dụng mô hình bảo mật phi tập trung mạnh mẽ của mạng chính. Tốc độ giao dịch bị ảnh hưởng khi mạng bận, khiến trải nghiệm người dùng trở nên kém cho một số loại dapps. Và khi mạng lưới trở nên bận rộn hơn, giá gas sẽ tăng lên khi những người gửi giao dịch nỗ lực để đưa ra giá đấu thầu cao hơn nhau. Điều này có thể khiến việc sử dụng Ethereum trở nên rất tốn kém. + +Hầu hết các giải pháp lớp 2 đều tập trung vào một máy chủ hoặc một cụm máy chủ, mỗi máy chủ có thể được gọi là nút, trình xác thực, nhà điều hành, trình tuần tự, nhà sản xuất khối, hoặc thuật ngữ tương tự. Tùy thuộc vào việc triển khai, các nút lớp 2 này có thể được vận hành bởi các cá nhân, doanh nghiệp hoặc tổ chức sử dụng chúng, hoặc bởi một nhà điều hành bên thứ ba, hoặc bởi một nhóm lớn các cá nhân (tương tự như Mainnet). Nói chung, các giao dịch được gửi đến các nút layer 2 này thay vì được gửi trực tiếp đến layer 1 (Mainnet). Đối với một số giải pháp, thực thể layer 2 sẽ kết hợp chúng thành các nhóm trước khi gán chúng vào layer 1, sau đó chúng được bảo mật bởi layer 1 và không thể bị thay đổi. Chi tiết về cách thức thực hiện điều này khác nhau đáng kể giữa các công nghệ và triển khai lớp 2 khác nhau. + +Một trường hợp cụ thể của Layer 2 có thể được thiết kế để mở và chia sẻ cho nhiều ứng dụng khác nhau sử dụng chung, hoặc có thể được triển khai bởi một dự án cụ thể và chỉ phục vụ riêng cho ứng dụng của dự án đó. + +#### Tại sao Layer 2 lại cần thiết? {#why-is-layer-2-needed} + +- Số giao dịch mỗi giây tăng lên rất nhiều cải thiện trải nghiệm người dùng và giảm tắc nghẽn mạng trên Mainnet Ethereum. +- Các giao dịch được tổng hợp thành một giao dịch duy nhất trên Mainnet Ethereum, giảm phí gas cho người dùng và làm cho Ethereum trở nên toàn diện và dễ tiếp cận hơn với mọi người ở khắp nơi. +- Mọi cập nhật về khả năng mở rộng không nên được thực hiện với cái giá phải trả cho sự phân cấp hoặc an ninh – layer 2 được xây dựng trên nền tảng Ethereum. +- Có những mạng layer 2 cụ thể cho ứng dụng mang lại bộ hiệu quả riêng khi làm việc với tài sản quy mô lớn. + +[Thêm về lớp 2](/layer-2/). + +#### Rollup {#rollups} + +Rollups thực hiện việc thực thi giao dịch ngoài layer 1 và sau đó dữ liệu được đăng lên layer 1 nơi đạt được sự đồng thuận. Khi dữ liệu giao dịch được bao gồm trong các khối layer 1, điều này cho phép các rollup được bảo vệ bởi tính bảo mật gốc của Ethereum. + +Có hai loại rollup với các mô hình bảo mật khác nhau: + +- **Gộp giao dịch lạc quan**: giả định rằng các giao dịch là hợp lệ theo mặc định và chỉ chạy tính toán, thông qua [**bằng chứng gian lận**](/glossary/#fraud-proof), trong trường hợp có thách thức. [Thêm về gộp giao dịch lạc quan](/developers/docs/scaling/optimistic-rollups/). +- **Rollup không kiến thức**: chạy tính toán ngoài chuỗi và gửi [**bằng chứng hợp lệ**](/glossary/#validity-proof) cho chuỗi. [Thêm về Rollup không kiến thức](/developers/docs/scaling/zk-rollups/). + +#### Kênh trạng thái {#channels} + +Các kênh nhà nước sử dụng hợp đồng đa chữ ký để cho phép các bên tham gia giao dịch nhanh chóng và tự do ngoài chuỗi, sau đó thanh toán cuối cùng với mạng chính. Điều này giảm thiểu tắc nghẽn mạng, phí tổn và thời gian trễ. Hai loại kênh này hiện tại là kênh nhà nước và kênh thanh toán. + +Tìm hiểu thêm về [kênh trạng thái](/developers/docs/scaling/state-channels/). + +### Chuỗi bên {#sidechains} + +Một sidechain là một blockchain độc lập tương thích với EVM chạy song song với Mainnet. Những cái này tương thích với Ethereum thông qua các cầu hai chiều và hoạt động theo các quy tắc đồng thuận và tham số khối mà họ đã chọn. + +Tìm hiểu thêm về [Chuỗi bên](/developers/docs/scaling/sidechains/). + +### Plasma {#plasma} + +Chuỗi plasma là một chuỗi khối riêng biệt được neo vào chuỗi Ethereum chính và sử dụng bằng chứng gian lận (như [gộp giao dịch lạc quan](/developers/docs/scaling/optimistic-rollups/)) để phân xử các tranh chấp. + +Tìm hiểu thêm về [Plasma](/developers/docs/scaling/plasma/). + +### Validium {#validium} + +Một chuỗi Validium sử dụng chứng minh tính hợp lệ giống như các rollup không biết nhưng dữ liệu không được lưu trữ trên chuỗi Ethereum lớp 1 chính. Điều này có thể dẫn đến 10.000 giao dịch mỗi giây cho mỗi chuỗi Validium và có thể chạy nhiều chuỗi song song. + +Tìm hiểu thêm về [Validium](/developers/docs/scaling/validium/). + +## Tại sao cần nhiều giải pháp mở rộng đến vậy? {#why-do-we-need-these} + +- Nhiều giải pháp có thể giúp giảm tình trạng tắc nghẽn tổng thể ở bất kỳ phần nào của mạng và cũng ngăn chặn các điểm thất bại đơn lẻ. +- Toàn thể lớn hơn tổng của các phần của nó. Các giải pháp khác nhau có thể tồn tại và hoạt động hài hòa, cho phép tạo ra hiệu ứng bùng nổ đối với tốc độ giao dịch và lưu lượng trong tương lai. +- Không phải tất cả các giải pháp đều yêu cầu sử dụng trực tiếp thuật toán đồng thuận Ethereum, và các phương án thay thế có thể mang lại những lợi ích mà nếu không có sẽ khó có được. + +## Tìm hiểu thêm từ video trực quan? Người học qua hình ảnh {#visual-learner} + + + +_Lưu ý rằng lời giải thích trong video sử dụng thuật ngữ "Layer 2" để chỉ tất cả các giải pháp mở rộng ngoài chuỗi, trong khi chúng tôi phân biệt "Layer 2" như một giải pháp ngoài chuỗi mà có được độ an toàn thông qua sự đồng thuận của Mainnet lớp 1._ + + + +## Đọc thêm {#further-reading} + +- [Lộ trình Ethereum lấy rollup làm trung tâm](https://ethereum-magicians.org/t/a-rollup-centric-ethereum-roadmap/4698) _Vitalik Buterin_ +- [Phân tích cập nhật về các giải pháp thay đổi quy mô Lớp 2 cho Ethereum](https://www.l2beat.com/) +- [Đánh giá các Giải pháp Thay đổi quy mô lớp 2 của Ethereum: Khung so sánh](https://medium.com/matter-labs/evaluating-ethereum-l2-scaling-solutions-a-comparison-framework-b6b2f410f955) +- [Hướng dẫn chưa đầy đủ về Rollup](https://vitalik.eth.limo/general/2021/01/05/rollup.html) +- [ZK-Rollup được Ethereum hỗ trợ: Dẫn đầu thế giới](https://hackmd.io/@canti/rkUT0BD8K) +- [Gộp giao dịch lạc quan và ZK Rollup](https://limechain.tech/blog/optimistic-rollups-vs-zk-rollups/) +- [Tại sao rollup + phân đoạn dữ liệu là giải pháp bền vững duy nhất cho khả năng mở rộng cao](https://polynya.medium.com/why-rollups-data-shards-are-the-only-sustainable-solution-for-high-scalability-c9aabd6fbb48) +- [Loại Lớp 3 nào là hợp lý?](https://vitalik.eth.limo/general/2022/09/17/layer_3.html) +- [Tính sẵn sàng của dữ liệu hoặc: Các rollup đã học cách ngừng lo lắng và yêu Ethereum như thế nào](https://web.archive.org/web/20250515194659/https://web.archive.org/web/20241108192208/https://research.2077.xyz/data-availability-or-how-rollups-learned-to-stop-worrying-and-love-ethereum) +- [Hướng dẫn thực tế về Rollup của Ethereum](https://web.archive.org/web/20241108192208/https://research.2077.xyz/the-practical-guide-to-ethereum-rollups) + +_Biết về nguồn lực cộng đồng đã giúp đỡ bạn? Chỉnh sửa trang này và bổ sung!_ diff --git a/public/content/translations/vi/developers/docs/scaling/optimistic-rollups/index.md b/public/content/translations/vi/developers/docs/scaling/optimistic-rollups/index.md new file mode 100644 index 00000000000..79a9cd496f3 --- /dev/null +++ b/public/content/translations/vi/developers/docs/scaling/optimistic-rollups/index.md @@ -0,0 +1,265 @@ +--- +title: Optimistic Rollups +description: "Giới thiệu về Optimistic rollups - một giải pháp mở rộng dành cho cộng đồng Ethereum." +lang: vi +--- + +Optimistic rollups là một giao thức layer 2 (L2) được thiết kế với mục đích mở rộng thông lượng của lớp Ethereum cơ sở. Những rollup này giảm bớt nhu cầu tính toán trên mạng lưới Ethereum bằng việc xử lý các giao dịch offchain, vì thế tăng đáng kể tốc độ xử lý. Không giống như các giải pháp mở rộng quy mô khác, chẳng hạn như [các chuỗi bên](/developers/docs/scaling/sidechains/), các gộp giao dịch lạc quan có được sự bảo mật từ Mạng chính bằng cách công bố kết quả giao dịch trên chuỗi, hoặc [các chuỗi plasma](/developers/docs/scaling/plasma/), vốn cũng xác minh các giao dịch trên Ethereum bằng bằng chứng gian lận nhưng lưu trữ dữ liệu giao dịch ở nơi khác. + +Tốc độ xử lý chậm, chi phí cao như là một phần của việc sử dụng Ethereum, optimistic rollups có thể cung cấp các cải tiến về khả năng mở rộng lên 10-100 lần. Các gộp giao dịch lạc quan cũng ghi các giao dịch vào Ethereum dưới dạng `calldata` hoặc trong [các blob](/roadmap/danksharding/), giúp giảm chi phí gas cho người dùng. + +## Điều kiện tiên quyết {#prerequisites} + +Bạn nên đọc và hiểu các trang của chúng tôi về [mở rộng Ethereum](/developers/docs/scaling/) và [lớp 2](/layer-2/). + +## Optimistic rollup là gì? {#what-is-an-optimistic-rollup} + +Rollup lạc quan là một phương án để mở rộng mạng lưới Ethereum bằng cách dịch chuyển xử lý tính toán và lưu trữ dữ liệu ra offchain. Các gộp giao dịch lạc quan thực thi các giao dịch bên ngoài Ethereum, nhưng đăng dữ liệu giao dịch lên Mạng chính dưới dạng `calldata` hoặc trong [các blob](/roadmap/danksharding/). + +Các đơn vị vận hành Rollup Lạc Quan sẽ gộp nhiều giao dịch lại với nhau offchain thành nhiều lô lớn trước khi gửi tới Ethereum. Các giải quyết này cho phép phân bổ chi phí trên những giao dịch trong một đợt, vô hình chung sẽ giảm chi phí cho người dùng cuối cùng. Nén để giảm lượng dữ liệu được đăng trên Ethereum là cách Optimistic rollups sử dụng. + +Rollup Lạc Quan được coi là "lạc quan" vì đều mặc định các giao dịch offchain là hợp lệ và không đăng những bằng chứng hợp lệ cho các lô giao dịch khi gửi lên onchain. Điều này tách biệt các gộp giao dịch lạc quan khỏi [các gộp giao dịch không kiến thức](/developers/docs/scaling/zk-rollups) vốn công bố [bằng chứng hợp lệ](/glossary/#validity-proof) mật mã cho các giao dịch ngoài chuỗi. + +Thay vào đó, các Optimistic rollups dựa vào một bằng chứng gian lận để phát hiện các giao dịch không được tính toán chính xác. Sau khi một lô gộp giao dịch được gửi trên Ethereum, sẽ có một khoảng thời gian (được gọi là giai đoạn thử thách) mà trong đó bất kỳ ai cũng có thể thách thức kết quả của một giao dịch gộp bằng cách tính toán [bằng chứng gian lận](/glossary/#fraud-proof). + +Nếu bằng chứng gian lận được hoàn thành, giao thức tổng hợp sẽ thực hiện lại (các) giao dịch và cập nhật trạng thái của bản tổng hợp cho phù hợp. Hệ quả khác của việc chứng minh gian lận thành công là trình sắp xếp chịu trách nhiệm bao gồm giao dịch được thực hiện không chính xác trong một khối nhận lỗi. + +Nếu các lô tổng hợp vượt qua những thử thách ( nghĩa là tất cả các giao dịch được thực hiện chính xác) sau khi giai đoạn thử thách kết thúc, thì lô đó được coi là hợp lệ và được chấp nhận trên Ethereum. Những người khác có thể tiếp tục phát triển trên một khối rollup chưa được xác nhận, nhưng lưu ý : kết quả giao dịch sẽ bị đảo người nếu dựa trên một giao dịch được thực hiện không chính xác đã được công bố trước đó. + +## Các optimistic rollups tương tác với Ethereum như thế nào ? Các gộp giao dịch lạc quan và Ethereum {#optimistic-rollups-and-Ethereum} + +Các gộp giao dịch lạc quan là [các giải pháp mở rộng quy mô ngoài chuỗi](/developers/docs/scaling/#offchain-scaling) được xây dựng để hoạt động trên nền tảng Ethereum. Mỗi optimistic rollup được quản lý bởi một tập hợp các hợp đồng thông minh được triển khai trên mạng lưới Ethereum. Những rollup lạc quan xử lý giao dịch ngoài mạng lưới Ethereum chính, nhưng đăng những giao dịch offchain này (theo lô) vào một hợp đồng rollup onchain. Giống như chuỗi khối Ethereum, bản ghi giao dịch này là bất biến vào tạo thành "chuỗi optimistic rollup". + +Cấu trúc của một rollup lạc quan bao gồm các phần sau: + +**Hợp đồng trên chuỗi**: Hoạt động của gộp giao dịch lạc quan được kiểm soát bởi các hợp đồng thông minh chạy trên Ethereum. Điều này bao gồm các hợp đồng lưu trữ các khối rollup, theo dõi các cập nhật trạng thái trên rollup và tra soát tiền gửi của người dùng. Theo nghĩa này, Ethereum đóng vai trò là lớp cơ sở hay "lớp 1" cho các gộp giao dịch lạc quan. + +**Máy ảo (VM) ngoài chuỗi**: Mặc dù các hợp đồng quản lý giao thức gộp giao dịch lạc quan chạy trên Ethereum, giao thức gộp giao dịch thực hiện tính toán và lưu trữ trạng thái trên một máy ảo khác tách biệt với [Máy ảo Ethereum](/developers/docs/evm/). Máy ảo offchain là nơi các ứng dụng tồn tại và trạng thái dữ liệu được thực thi; nó đóng vai trò là tầng lớp ở trên hay còn gọi là "layer 2" cho một rollup lạc quan. + +Vì các rollup lạc quan được thiết kế để chạy các chương trình được viết hoặc biên dịch cho EVM, nên máy ảo offchain cũng tích hợp nhiều thông số kỹ thuật EVM. Ngoài ra, các bằng chứng gian lận được tính toán trên chuỗi cho phép mạng Ethereum thực thi tính hợp lệ của các thay đổi trạng thái được tính toán trong VM ngoài chuỗi. + +Các optimistic rollup được mô tả là 'các giải pháp mở rộng quy mô kết hợp' bởi vì, mặc dù chúng tồn tại dưới dạng các giao thức riêng biệt, nhưng các đặc tính bảo mật của chúng có nguồn gốc từ Ethereum. Trong một vài thứ khác, Ethereum đảm bảo tính chính xác của việc rollup tính toán offchain và khả năng truy cập dữ liệu đằng sau phép tính. Điều này làm cho các gộp giao dịch lạc quan an toàn hơn so với các giao thức mở rộng quy mô hoàn toàn ngoài chuỗi (ví dụ: [các chuỗi bên](/developers/docs/scaling/sidechains/)) không phụ thuộc vào Ethereum để bảo mật. + +Những yếu tố dựa trên giao thức chính của Ethereum mà optimistic rollup áp dụng : + +### Tính khả dụng của dữ liệu {#data-availability} + +Như đã đề cập, các gộp giao dịch lạc quan đăng dữ liệu giao dịch lên Ethereum dưới dạng `calldata` hoặc [các blob](/roadmap/danksharding/). Vì quá trình thực thi của rollup dựa trên các giao dịch đã gửi nên bất kỳ ai cũng có thể sử dụng thông tin này — được cố định trên lớp cơ sở của Ethereum — để thực hiện trạng thái của rollup và xác minh tính đúng đắn của các chuyển đổi trạng thái. + +[Tính khả dụng của dữ liệu](/developers/docs/data-availability/) là rất quan trọng vì nếu không có quyền truy cập vào dữ liệu trạng thái, những người thách thức không thể xây dựng bằng chứng gian lận để tranh chấp các hoạt động gộp giao dịch không hợp lệ. Việc Ethereum cung cấp dữ liệu sẵn có, nguy cơ bị các nhà khai thác rollup xử lý các hành vi độc hại (ví dụ: gửi các khối không hợp lệ) sẽ giảm xuống. + +### Chống kiểm duyệt {#censorship-resistance} + +Các đợt optimistic rollup cũng dựa vào Ethereum để chống lại sự kiểm duyệt. Trong một optimistic rollup, một thực thể tập trung (người điều hành) chịu trách nhiệm xử lý các giao dịch và gửi các khối tổng hợp cho Ethereum. Điều này có một số ý nghĩa: + +- Nhà khai thác rollup có thể kiểm duyệt người dùng bằng cách chuyển sang chế độ ngoại tuyến hoàn toàn hoặc bằng cách từ chối sản xuất các khối bao gồm các giao dịch nhất định trong đó. + +- Có thể ngăn chặn người dùng rút tiền được gửi trong hợp đồng rollup bằng cách giữ lại dữ liệu trạng thái cần thiết để Merkle bằng chứng về quyền sở hữu. Dữ liệu trạng thái giữ lại cũng có thể che giấu trạng thái của rollup với người dùng và ngăn họ tương tác với rollup. + +Những rollup lạc quan giải quyết vấn đề này bằng cách yêu cầu đơn vị vận hành phải đăng dữ liệu liên quan đến cập nhật trạng thái lên Ethereum. Việc rollup đăng dữ liệu onchain có những ưu điểm sau: + +- Nếu đơn vị vận hành rollup lạc quan bị offline hoặc dừng khởi tạo lô dữ liệu giao dịch, một nút mạng lưới khác có thể dùng dữ liệu sẵn có để khôi phục trạng thái rollup cuối cùng và tiếp tục tạo khối. + +- Người dùng có thể sử dụng dữ liệu giao dịch để tạo ra bằng chứng Merkle chứng minh việc sở hữu tiền và rút tài sản ra khỏi rollup. + +- Người dùng có thể gửi những giao dịch của họ ở L1 thay vì gửi tới sequencer, trong trường hợp này sequencer phải xử lý giao dịch trong một khoảng thời gian nhất định để tiếp tục khởi tạo khối hợp lệ. + +### Thanh toán {#settlement} + +Một vai trò khác của Ethereum trong ngữ cảnh của các rollup lạc quan là trở thành một tầng lớp chuyên quyết toán. Một tầng lớp chuyên quyết toán là nền tảng neo giữ cho toàn bộ hệ sinh thái blockchain, đảm bảo tính bảo mật và là nguồn kết luận cuối cùng khách quan khi có tranh chấp xảy ra trên các mạng lưới khác (chẳng hạn như rollup lạc quan trong trường hợp này) cần phân xử. + +Mainnet của Ethereum là trung tâm hoà giải tranh chấp thông qua việc xác minh bằng chứng gian lận cho các rollup lạc quan. Hơn nữa, các giao dịch được thực hiện trên gộp giao dịch chỉ được coi là cuối cùng _sau khi_ khối gộp giao dịch được chấp nhận trên Ethereum. Một khi giao dịch rollup được ghi vào tầng lớp nền Ethereum, nó sẽ không thể bị đảo ngược (ngoại trừ trường hợp cực kỳ hiếm là chuỗi các khối bị thay đổi tổ chức). + +## Các rollup lạc quan hoạt động như thế nào? {#how-optimistic-rollups-work} + +### Thực thi và tổng hợp giao dịch {#transaction-execution-and-aggregation} + +Người dùng gửi giao dịch của họ tới những "đơn vị vận hành", đây là những nút mạng lưới chịu trách nhiệm xử lý giao dịch trên rollup lạc quan. Hay còn gọi là "đơn vị xác minh" hoặc "đơn vị tổng hợp", đơn vị vận hành sẽ gom các giao dịch, nén dữ liệu ở dưới lại, và đăng khối đó lên Ethereum. + +Mặc dù bất kỳ ai cũng có thể trở thành người xác thực, nhưng những người xác thực gộp giao dịch lạc quan phải cung cấp một khoản ký quỹ trước khi tạo khối, giống như một [hệ thống bằng chứng cổ phần](/developers/docs/consensus-mechanisms/pos/). Khoản ký quỹ này có thể bị phạt cắt giảm nếu đơn vị xác minh đưa lên một khối sai hoặc tiếp tục xây dựng trên một khối cũ nhưng không hợp lệ (dù khối mới của họ là hợp lệ). Nhờ đó, rollup lạc quan tận dụng các động lực kinh tế thông qua mật mã để buộc đơn vị xác minh phải hành xử trung thực. + +Những đơn vị xác minh khác trên chuỗi rollup lạc quan sẽ phải thực hiện lại các giao dịch đã nộp bằng chính bản sao trạng thái dữ liệu rollup của họ. Nếu trạng thái dữ liệu cuối cùng của đơn vị xác minh không trùng với trạng thái mà đơn vị vận hành đề xuất, họ có thể khởi động quy trình khiếu nại và tính toán bằng chứng gian lận. + +Một số rollup lạc quan không dùng hệ thống đơn vị xác minh mở, mà chỉ có một "sequencer" duy nhất để vận hành mạng mưới. Tương tự như đơn vị xác minh, sequencer xử lý giao dịch, tạo khối rollup và đẩy lô giao dịch rollup lên mạng lưới L1 (Ethereum). + +Sequencer khác với đơn vị vận hành thông thường của rollup ở chỗ họ có khả năng kiểm soát thứ tự giao dịch nhiều hơn. Hơn nữa, sequencer được ưu tiên truy cập mạng lưới rollup và là đơn vị duy nhất có quyền gửi giao dịch đến hợp đồng trên mạng lưới. Những giao dịch từ các nút mạng lưới mà không phải sequencer hoặc từ người dùng sẽ được đưa vào hàng chờ riêng, đợi đến khi sequencer gom chúng vào một lô mới. + +#### Gửi các khối gộp giao dịch lên Ethereum {#submitting-blocks-to-ethereum} + +Như đã nói ở trên, đơn vị vận hành của rollup lạc quan gom các giao dịch offchain thành một lô và chuyển lên Ethereum để chứng thực. Quá trình này bao gồm việc nén dữ liệu liên quan đến giao dịch và công bố nó trên Ethereum dưới dạng `calldata` hoặc trong các blob. + +`calldata` là một vùng không thể sửa đổi, không liên tục trong một hợp đồng thông minh, hoạt động chủ yếu giống như [bộ nhớ](/developers/docs/smart-contracts/anatomy/#memory). Mặc dù `calldata` tồn tại trên chuỗi như một phần của [nhật ký lịch sử](https://docs.soliditylang.org/en/latest/introduction-to-smart-contracts.html?highlight=memory#logs) của chuỗi khối, nó không được lưu trữ như một phần trạng thái của Ethereum. Vì `calldata` không chạm vào bất kỳ phần nào của trạng thái Ethereum, nên việc lưu trữ dữ liệu trên chuỗi bằng cách này sẽ rẻ hơn so với lưu vào trạng thái. + +Từ khóa `calldata` cũng được sử dụng trong Solidity để truyền các đối số cho một hàm hợp đồng thông minh tại thời điểm thực thi. `calldata` xác định hàm đang được gọi trong một giao dịch và giữ các đầu vào cho hàm dưới dạng một chuỗi byte tùy ý. + +Trong bối cảnh các gộp giao dịch lạc quan, `calldata` được sử dụng để gửi dữ liệu giao dịch đã nén đến hợp đồng trên chuỗi. Một đơn vị vận hành rollup thêm một lô mới bằng cách gọi những hàm cần thiết trong hợp đồng rollup và gửi dữ liệu đã nén dưới dạng tham số truyền vào hàm. Sử dụng `calldata` giúp giảm phí người dùng vì hầu hết các chi phí mà các gộp giao dịch phải chịu đều đến từ việc lưu trữ dữ liệu trên chuỗi. + +Đây là [một ví dụ](https://eth.blockscout.com/tx/0x9102bfce17c58b5fc1c974c24b6bb7a924fb5fbd7c4cd2f675911c27422a5591) về việc gửi một lô gộp giao dịch để cho thấy khái niệm này hoạt động như thế nào. Trình sắp xếp thứ tự đã gọi phương thức `appendSequencerBatch()` và chuyển dữ liệu giao dịch đã nén làm đầu vào bằng cách sử dụng `calldata`. + +Một số rollup bây giờ sử dụng blobs để đăng các lô giao dịch đến Ethereum. + +Các blob không thể sửa đổi và không liên tục (giống như `calldata`) nhưng sẽ bị cắt bỏ khỏi lịch sử sau ~18 ngày. Để biết thêm thông tin về các blob, hãy xem [Danksharding](/roadmap/danksharding). + +### Cam kết trạng thái {#state-commitments} + +Tại bất kỳ thời điểm nào, trạng thái của gộp giao dịch lạc quan (tài khoản, số dư, mã hợp đồng, v.v.) được tổ chức dưới dạng một [cây Merkle](/whitepaper/#merkle-trees) được gọi là “cây trạng thái”. Gốc của cây Merkle này (gốc trạng thái), tham chiếu đến trạng thái mới nhất của gộp giao dịch, được băm và lưu trữ trong hợp đồng gộp giao dịch. Mỗi quá trình chuyển đổi trạng thái trên chuỗi sẽ tạo ra một trạng thái gộp giao dịch mới, mà một nhà điều hành cam kết bằng cách tính toán một gốc trạng thái mới. + +Nhà điều hành được yêu cầu gửi cả gốc trạng thái cũ và gốc trạng thái mới khi đăng các lô. Nếu gốc trạng thái cũ khớp với gốc trạng thái hiện có trong hợp đồng trên chuỗi, gốc trạng thái hiện có sẽ bị loại bỏ và thay thế bằng gốc trạng thái mới. + +Nhà điều hành gộp giao dịch cũng được yêu cầu cam kết một gốc Merkle cho chính lô giao dịch đó. Điều này cho phép bất kỳ ai chứng minh sự bao gồm của một giao dịch trong lô (trên L1) bằng cách trình bày một [bằng chứng Merkle](/developers/tutorials/merkle-proofs-for-offline-data-integrity/). + +Các cam kết trạng thái, đặc biệt là các gốc trạng thái, là cần thiết để chứng minh tính đúng đắn của các thay đổi trạng thái trong một gộp giao dịch lạc quan. Hợp đồng gộp giao dịch chấp nhận các gốc trạng thái mới từ các nhà điều hành ngay sau khi chúng được đăng, nhưng sau đó có thể xóa các gốc trạng thái không hợp lệ để khôi phục gộp giao dịch về trạng thái chính xác của nó. + +### Chứng minh gian lận {#fraud-proving} + +Như đã giải thích, các gộp giao dịch lạc quan cho phép bất kỳ ai công bố các khối mà không cần cung cấp bằng chứng về tính hợp lệ. Tuy nhiên, để đảm bảo chuỗi vẫn an toàn, các gộp giao dịch lạc quan chỉ định một khoảng thời gian mà trong đó bất kỳ ai cũng có thể tranh chấp một quá trình chuyển đổi trạng thái. Do đó, các khối gộp giao dịch được gọi là “khẳng định” vì bất kỳ ai cũng có thể tranh chấp tính hợp lệ của chúng. + +Nếu ai đó tranh chấp một khẳng định, thì giao thức gộp giao dịch sẽ bắt đầu tính toán bằng chứng gian lận. Mọi loại bằng chứng gian lận đều có tính tương tác—ai đó phải đăng một khẳng định trước khi người khác có thể thách thức nó. Sự khác biệt nằm ở số vòng tương tác cần thiết để tính toán bằng chứng gian lận. + +Các lược đồ chứng minh tương tác một vòng sẽ phát lại các giao dịch bị tranh chấp trên L1 để phát hiện các khẳng định không hợp lệ. Giao thức gộp giao dịch mô phỏng việc thực thi lại giao dịch bị tranh chấp trên L1 (Ethereum) bằng cách sử dụng hợp đồng xác minh, với gốc trạng thái được tính toán sẽ xác định ai là người chiến thắng trong thử thách. Nếu tuyên bố của người thách thức về trạng thái chính xác của gộp giao dịch là đúng, nhà điều hành sẽ bị phạt bằng cách bị cắt giảm khoản ký quỹ của họ. + +Tuy nhiên, việc thực thi lại các giao dịch trên L1 để phát hiện gian lận đòi hỏi phải công bố các cam kết trạng thái cho các giao dịch riêng lẻ và làm tăng lượng dữ liệu mà các gộp giao dịch phải công bố trên chuỗi. Việc phát lại các giao dịch cũng gây ra chi phí gas đáng kể. Vì những lý do này, các gộp giao dịch lạc quan đang chuyển sang chứng minh tương tác nhiều vòng, vốn đạt được cùng một mục tiêu (tức là phát hiện các hoạt động gộp giao dịch không hợp lệ) với hiệu quả cao hơn. + +#### Chứng minh tương tác nhiều vòng {#multi-round-interactive-proving} + +Chứng minh tương tác nhiều vòng bao gồm một giao thức qua lại giữa người khẳng định và người thách thức được giám sát bởi một hợp đồng xác minh L1, mà cuối cùng sẽ quyết định bên nào nói dối. Sau khi một nút L2 thách thức một khẳng định, người khẳng định được yêu cầu chia khẳng định bị tranh chấp thành hai nửa bằng nhau. Mỗi khẳng định riêng lẻ trong trường hợp này sẽ chứa số bước tính toán bằng nhau. + +Người thách thức sau đó sẽ chọn khẳng định mà họ muốn thách thức. Quá trình phân chia (được gọi là “giao thức chia đôi”) tiếp tục cho đến khi cả hai bên tranh chấp một khẳng định về một bước thực thi _duy nhất_. Tại thời điểm này, hợp đồng L1 sẽ giải quyết tranh chấp bằng cách đánh giá lệnh (và kết quả của nó) để bắt bên gian lận. + +Người khẳng định được yêu cầu cung cấp "bằng chứng một bước" để xác minh tính hợp lệ của phép tính một bước bị tranh chấp. Nếu người khẳng định không cung cấp được bằng chứng một bước, hoặc người xác minh L1 cho rằng bằng chứng không hợp lệ, họ sẽ thua trong thử thách. + +Một số lưu ý về loại bằng chứng gian lận này: + +1. Chứng minh gian lận tương tác nhiều vòng được coi là hiệu quả vì nó giảm thiểu công việc mà chuỗi L1 phải làm trong việc phân xử tranh chấp. Thay vì phát lại toàn bộ giao dịch, chuỗi L1 chỉ cần thực thi lại một bước trong quá trình thực thi của gộp giao dịch. + +2. Các giao thức chia đôi làm giảm lượng dữ liệu được đăng trên chuỗi (không cần phải công bố các cam kết trạng thái cho mọi giao dịch). Ngoài ra, các giao dịch gộp giao dịch lạc quan không bị giới hạn bởi giới hạn gas của Ethereum. Ngược lại, các gộp giao dịch lạc quan thực thi lại các giao dịch phải đảm bảo một giao dịch L2 có giới hạn gas thấp hơn để mô phỏng việc thực thi của nó trong một giao dịch Ethereum duy nhất. + +3. Một phần khoản ký quỹ của người khẳng định độc hại được trao cho người thách thức, trong khi phần còn lại bị đốt cháy. Việc đốt cháy ngăn chặn sự thông đồng giữa những người xác thực; nếu hai người xác thực thông đồng để khởi tạo các thử thách giả mạo, họ vẫn sẽ mất một phần đáng kể trong toàn bộ số tiền đã ký quỹ. + +4. Chứng minh tương tác nhiều vòng yêu cầu cả hai bên (người khẳng định và người thách thức) phải thực hiện các hành động trong khoảng thời gian được chỉ định. Việc không hành động trước khi hết thời hạn sẽ khiến bên không thực hiện nghĩa vụ bị xử thua trong thử thách. + +#### Tại sao bằng chứng gian lận lại quan trọng đối với các gộp giao dịch lạc quan {#fraud-proof-benefits} + +Bằng chứng gian lận rất quan trọng vì chúng tạo điều kiện cho _tính hữu hạn không cần tin cậy_ trong các gộp giao dịch lạc quan. Tính hữu hạn không cần tin cậy là một đặc tính của các gộp giao dịch lạc quan đảm bảo rằng một giao dịch—miễn là nó hợp lệ—cuối cùng sẽ được xác nhận. + +Các nút độc hại có thể cố gắng trì hoãn việc xác nhận một khối gộp giao dịch hợp lệ bằng cách bắt đầu các thử thách sai. Tuy nhiên, bằng chứng gian lận cuối cùng sẽ chứng minh tính hợp lệ của khối gộp giao dịch và khiến nó được xác nhận. + +Điều này cũng liên quan đến một thuộc tính bảo mật khác của các gộp giao dịch lạc quan: tính hợp lệ của chuỗi phụ thuộc vào sự tồn tại của _một_ nút trung thực. Nút trung thực có thể thúc đẩy chuỗi một cách chính xác bằng cách đăng các khẳng định hợp lệ hoặc tranh chấp các khẳng định không hợp lệ. Trong mọi trường hợp, các nút độc hại tham gia vào các tranh chấp với nút trung thực sẽ mất tiền đặt cọc trong quá trình chứng minh gian lận. + +### Khả năng tương tác L1/L2 {#l1-l2-interoperability} + +Các gộp giao dịch lạc quan được thiết kế để có khả năng tương tác với Mạng chính Ethereum và cho phép người dùng chuyển tin nhắn và dữ liệu tùy ý giữa L1 và L2. Chúng cũng tương thích với EVM, vì vậy bạn có thể chuyển [các ứng dụng phi tập trung](/developers/docs/dapps/) hiện có sang các gộp giao dịch lạc quan hoặc tạo các ứng dụng phi tập trung mới bằng các công cụ phát triển Ethereum. + +#### 1. Chuyển động tài sản {#asset-movement} + +##### Tham gia gộp giao dịch + +Để sử dụng một gộp giao dịch lạc quan, người dùng gửi ETH, token ERC-20 và các tài sản được chấp nhận khác vào hợp đồng [cầu nối](/developers/docs/bridges/) của gộp giao dịch trên L1. Hợp đồng cầu nối sẽ chuyển tiếp giao dịch đến L2, nơi một lượng tài sản tương đương được đúc và gửi đến địa chỉ đã chọn của người dùng trên gộp giao dịch lạc quan. + +Các giao dịch do người dùng tạo (như gửi tiền từ L1 > L2) thường được xếp vào hàng đợi cho đến khi trình sắp xếp thứ tự gửi lại chúng vào hợp đồng gộp giao dịch. Tuy nhiên, để duy trì khả năng chống kiểm duyệt, các gộp giao dịch lạc quan cho phép người dùng gửi giao dịch trực tiếp đến hợp đồng gộp giao dịch trên chuỗi nếu nó đã bị trì hoãn quá thời gian tối đa cho phép. + +Một số gộp giao dịch lạc quan áp dụng một cách tiếp cận đơn giản hơn để ngăn chặn các trình sắp xếp thứ tự kiểm duyệt người dùng. Ở đây, một khối được xác định bởi tất cả các giao dịch được gửi đến hợp đồng L1 kể từ khối trước đó (ví dụ: các khoản tiền gửi) ngoài các giao dịch được xử lý trên chuỗi gộp giao dịch. Nếu một trình sắp xếp thứ tự bỏ qua một giao dịch L1, nó sẽ công bố gốc trạng thái sai (có thể chứng minh được); do đó, các trình sắp xếp thứ tự không thể trì hoãn các tin nhắn do người dùng tạo ra sau khi được đăng trên L1. + +##### Thoát khỏi gộp giao dịch + +Việc rút tiền từ một gộp giao dịch lạc quan về Ethereum khó khăn hơn do cơ chế chứng minh gian lận. Nếu một người dùng khởi tạo một giao dịch L2 > L1 để rút tiền được ký quỹ trên L1, họ phải đợi cho đến khi giai đoạn thử thách—kéo dài khoảng bảy ngày—kết thúc. Tuy nhiên, quá trình rút tiền tự nó khá đơn giản. + +Sau khi yêu cầu rút tiền được khởi tạo trên gộp giao dịch L2, giao dịch được bao gồm trong lô tiếp theo, trong khi tài sản của người dùng trên gộp giao dịch bị đốt cháy. Sau khi lô được công bố trên Ethereum, người dùng có thể tính toán một bằng chứng Merkle để xác minh sự bao gồm của giao dịch thoát của họ trong khối. Sau đó, vấn đề chỉ là chờ đợi qua giai đoạn trì hoãn để hoàn tất giao dịch trên L1 và rút tiền về Mạng chính. + +Để tránh phải chờ một tuần trước khi rút tiền về Ethereum, người dùng gộp giao dịch lạc quan có thể sử dụng **nhà cung cấp thanh khoản** (LP). Một nhà cung cấp thanh khoản đảm nhận quyền sở hữu của một khoản rút tiền L2 đang chờ xử lý và trả tiền cho người dùng trên L1 (để đổi lấy một khoản phí). + +Các nhà cung cấp thanh khoản có thể kiểm tra tính hợp lệ của yêu cầu rút tiền của người dùng (bằng cách tự thực thi chuỗi) trước khi giải phóng tiền. Bằng cách này, họ có sự đảm bảo rằng giao dịch cuối cùng sẽ được xác nhận (tức là tính hữu hạn không cần tin cậy). + +#### 2. Khả năng tương thích với EVM {#evm-compatibility} + +Đối với các nhà phát triển, lợi thế của các gộp giao dịch lạc quan là khả năng tương thích của chúng—hoặc tốt hơn nữa là tương đương—với [Máy ảo Ethereum (EVM)](/developers/docs/evm/). Các gộp giao dịch tương thích với EVM tuân thủ các thông số kỹ thuật trong [Sách vàng Ethereum](https://ethereum.github.io/yellowpaper/paper.pdf) và hỗ trợ EVM ở cấp độ bytecode. + +Khả năng tương thích EVM trong các gộp giao dịch lạc quan có những lợi ích sau: + +i. Các nhà phát triển có thể di chuyển các hợp đồng thông minh hiện có trên Ethereum sang các chuỗi gộp giao dịch lạc quan mà không cần phải sửa đổi nhiều cơ sở mã. Điều này có thể tiết kiệm thời gian cho các nhóm phát triển khi triển khai các hợp đồng thông minh Ethereum trên L2. + +ii. Các nhà phát triển và các nhóm dự án sử dụng các gộp giao dịch lạc quan có thể tận dụng cơ sở hạ tầng của Ethereum. Điều này bao gồm các ngôn ngữ lập trình, thư viện mã, công cụ kiểm thử, phần mềm máy khách, cơ sở hạ tầng triển khai, v.v. + +Việc sử dụng các bộ công cụ hiện có là quan trọng vì những công cụ này đã được kiểm toán, gỡ lỗi và cải tiến rộng rãi trong nhiều năm. Nó cũng loại bỏ sự cần thiết cho các nhà phát triển Ethereum phải học cách xây dựng với một bộ công cụ phát triển hoàn toàn mới. + +#### 3. Các lệnh gọi hợp đồng chuỗi chéo {#cross-chain-contract-calls} + +Người dùng (tài khoản thuộc sở hữu bên ngoài) tương tác với các hợp đồng L2 bằng cách gửi một giao dịch đến hợp đồng gộp giao dịch hoặc để một trình sắp xếp thứ tự hoặc người xác thực làm điều đó cho họ. Các gộp giao dịch lạc quan cũng cho phép các tài khoản hợp đồng trên Ethereum tương tác với các hợp đồng L2 bằng cách sử dụng các hợp đồng cầu nối để chuyển tiếp tin nhắn và chuyển dữ liệu giữa L1 và L2. Điều này có nghĩa là bạn có thể lập trình một hợp đồng L1 trên Mạng chính Ethereum để gọi các hàm thuộc về các hợp đồng trên một gộp giao dịch lạc quan L2. + +Các lệnh gọi hợp đồng chuỗi chéo xảy ra không đồng bộ—nghĩa là lệnh gọi được khởi tạo trước, sau đó được thực thi vào một thời điểm sau đó. Điều này khác với các lệnh gọi giữa hai hợp đồng trên Ethereum, nơi lệnh gọi tạo ra kết quả ngay lập tức. + +Một ví dụ về lệnh gọi hợp đồng chuỗi chéo là việc gửi token được mô tả trước đó. Một hợp đồng trên L1 ký quỹ token của người dùng và gửi một tin nhắn đến một hợp đồng L2 được ghép nối để đúc một lượng token tương đương trên gộp giao dịch. + +Vì các lệnh gọi tin nhắn chuỗi chéo dẫn đến việc thực thi hợp đồng, người gửi thường được yêu cầu chi trả [chi phí gas](/developers/docs/gas/) cho việc tính toán. Bạn nên đặt giới hạn gas cao để ngăn giao dịch bị thất bại trên chuỗi đích. Kịch bản cầu nối token là một ví dụ điển hình; nếu phía L1 của giao dịch (gửi token) hoạt động, nhưng phía L2 (đúc token mới) thất bại do gas thấp, khoản tiền gửi sẽ không thể phục hồi được. + +Cuối cùng, chúng ta cần lưu ý rằng các lệnh gọi tin nhắn L2 > L1 giữa các hợp đồng cần tính đến sự chậm trễ (các lệnh gọi L1 > L2 thường được thực thi sau vài phút). Điều này là do các tin nhắn được gửi đến Mạng chính từ gộp giao dịch lạc quan không thể được thực thi cho đến khi cửa sổ thử thách hết hạn. + +## Phí của gộp giao dịch lạc quan hoạt động như thế nào? {#how-do-optimistic-rollup-fees-work} + +Các gộp giao dịch lạc quan sử dụng một cơ chế phí gas, giống như Ethereum, để biểu thị số tiền người dùng trả cho mỗi giao dịch. Các khoản phí được tính trên các gộp giao dịch lạc quan phụ thuộc vào các thành phần sau: + +1. **Ghi trạng thái**: Các gộp giao dịch lạc quan công bố dữ liệu giao dịch và tiêu đề khối (bao gồm hàm băm của tiêu đề khối trước đó, gốc trạng thái, gốc lô) lên Ethereum dưới dạng một `blob`, hoặc "đối tượng lớn nhị phân". [EIP-4844](https://eips.ethereum.org/EIPS/eip-4844) đã giới thiệu một giải pháp tiết kiệm chi phí để bao gồm dữ liệu trên chuỗi. Một `blob` là một trường giao dịch mới cho phép các gộp giao dịch đăng dữ liệu chuyển đổi trạng thái đã nén lên Ethereum L1. Không giống như `calldata`, vốn vẫn tồn tại vĩnh viễn trên chuỗi, các blob chỉ tồn tại trong thời gian ngắn và có thể bị cắt bỏ khỏi các máy khách sau [4096 epoch](https://github.com/ethereum/consensus-specs/blob/81f3ea8322aff6b9fb15132d050f8f98b16bdba4/configs/mainnet.yaml#L147) (khoảng 18 ngày). Bằng cách sử dụng các blob để đăng các lô giao dịch đã nén, các gộp giao dịch lạc quan có thể giảm đáng kể chi phí ghi giao dịch vào L1. + +2. **Gas blob đã sử dụng**: Các giao dịch mang blob sử dụng một cơ chế phí động tương tự như cơ chế được giới thiệu bởi [EIP-1559](https://eips.ethereum.org/EIPS/eip-1559). Phí gas cho các giao dịch loại 3 tính đến phí cơ bản cho các blob, được xác định bởi mạng lưới dựa trên nhu cầu về không gian blob và việc sử dụng không gian blob của giao dịch đang được gửi. + +3. **Phí của nhà điều hành L2**: Đây là số tiền trả cho các nút gộp giao dịch để bù đắp cho các chi phí tính toán phát sinh trong quá trình xử lý giao dịch, giống như phí gas trên Ethereum. Các nút gộp giao dịch tính phí giao dịch thấp hơn vì các L2 có khả năng xử lý cao hơn và không phải đối mặt với tình trạng tắc nghẽn mạng buộc những người xác thực trên Ethereum phải ưu tiên các giao dịch có phí cao hơn. + +Các gộp giao dịch lạc quan áp dụng một số cơ chế để giảm phí cho người dùng, bao gồm gộp các giao dịch và nén `calldata` để giảm chi phí công bố dữ liệu. Bạn có thể kiểm tra [công cụ theo dõi phí L2](https://l2fees.info/) để có cái nhìn tổng quan theo thời gian thực về chi phí sử dụng các gộp giao dịch lạc quan dựa trên Ethereum. + +## Các gộp giao dịch lạc quan mở rộng quy mô Ethereum như thế nào? {#scaling-ethereum-with-optimistic-rollups} + +Như đã giải thích, các gộp giao dịch lạc quan công bố dữ liệu giao dịch đã nén trên Ethereum để đảm bảo tính khả dụng của dữ liệu. Khả năng nén dữ liệu được công bố trên chuỗi là rất quan trọng để mở rộng thông lượng trên Ethereum bằng các gộp giao dịch lạc quan. + +Chuỗi Ethereum chính đặt ra giới hạn về lượng dữ liệu mà các khối có thể chứa, được tính bằng đơn vị gas ([kích thước khối trung bình](/developers/docs/blocks/#block-size) là 15 triệu gas). Mặc dù điều này hạn chế lượng gas mà mỗi giao dịch có thể sử dụng, nó cũng có nghĩa là chúng ta có thể tăng số giao dịch được xử lý trên mỗi khối bằng cách giảm dữ liệu liên quan đến giao dịch—cải thiện trực tiếp khả năng mở rộng. + +Các gộp giao dịch lạc quan sử dụng một số kỹ thuật để đạt được việc nén dữ liệu giao dịch và cải thiện tỷ lệ TPS. Ví dụ, [bài viết](https://vitalik.eth.limo/general/2021/01/05/rollup.html) này so sánh dữ liệu mà một giao dịch người dùng cơ bản (gửi ether) tạo ra trên Mạng chính so với lượng dữ liệu mà cùng giao dịch đó tạo ra trên một gộp giao dịch: + +| Thông số | Ethereum (L1) | Gộp giao dịch (L2) | +| ------------- | ---------------------------------------------------- | ------------------------------------- | +| Nonce | ~3 | 0 | +| Giá gas | ~8 | 0-0.5 | +| Gas | 3 | 0-0.5 | +| Đến | 21 | 4 | +| Giá trị | 9 | ~3 | +| Chữ ký | ~68 (2 + 33 + 33) | ~0.5 | +| Từ | 0 (phục hồi từ chữ ký) | 4 | +| **Tổng cộng** | **~112 byte** | **~12 byte** | + +Thực hiện một số tính toán sơ bộ trên những con số này có thể giúp cho thấy những cải tiến về khả năng mở rộng mà một gộp giao dịch lạc quan mang lại: + +1. Kích thước mục tiêu cho mỗi khối là 15 triệu gas và chi phí để xác minh một byte dữ liệu là 16 gas. Chia kích thước khối trung bình cho 16 gas (15.000.000/16) cho thấy khối trung bình có thể chứa **937.500 byte dữ liệu**. +2. Nếu một giao dịch gộp giao dịch cơ bản sử dụng 12 byte, thì khối Ethereum trung bình có thể xử lý **78.125 giao dịch gộp giao dịch** (937.500/12) hoặc **39 lô gộp giao dịch** (nếu mỗi lô chứa trung bình 2.000 giao dịch). +3. Nếu một khối mới được sản xuất trên Ethereum cứ sau 15 giây, thì tốc độ xử lý của gộp giao dịch sẽ vào khoảng **5.208 giao dịch mỗi giây**. Điều này được thực hiện bằng cách chia số lượng giao dịch gộp giao dịch cơ bản mà một khối Ethereum có thể chứa (**78.125**) cho thời gian khối trung bình (**15 giây**). + +Đây là một ước tính khá lạc quan, vì các giao dịch gộp giao dịch lạc quan không thể chiếm toàn bộ một khối trên Ethereum. Tuy nhiên, nó có thể đưa ra một ý tưởng sơ bộ về mức độ tăng khả năng mở rộng mà các gộp giao dịch lạc quan có thể mang lại cho người dùng Ethereum (các triển khai hiện tại cung cấp tới 2.000 TPS). + +Sự ra đời của [phân mảnh dữ liệu](/roadmap/danksharding/) trên Ethereum được kỳ vọng sẽ cải thiện khả năng mở rộng trong các gộp giao dịch lạc quan. Bởi vì các giao dịch gộp giao dịch phải chia sẻ không gian khối với các giao dịch không phải gộp giao dịch khác, khả năng xử lý của chúng bị giới hạn bởi thông lượng dữ liệu trên chuỗi Ethereum chính. Danksharding sẽ tăng không gian có sẵn cho các chuỗi L2 để công bố dữ liệu trên mỗi khối, bằng cách sử dụng lưu trữ "blob" rẻ hơn, không lâu dài thay vì `CALLDATA` đắt đỏ, vĩnh viễn. + +### Ưu và nhược điểm của các gộp giao dịch lạc quan {#optimistic-rollups-pros-and-cons} + +| Ưu điểm | Nhược điểm | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Cung cấp những cải tiến lớn về khả năng mở rộng mà không phải hy sinh tính bảo mật hoặc tính không cần tin cậy. | Trì hoãn trong việc hoàn tất giao dịch do các thách thức gian lận tiềm tàng. | +| Dữ liệu giao dịch được lưu trữ trên chuỗi lớp 1, cải thiện tính minh bạch, bảo mật, khả năng chống kiểm duyệt và phân quyền. | Các nhà điều hành gộp giao dịch tập trung (trình sắp xếp thứ tự) có thể ảnh hưởng đến thứ tự giao dịch. | +| Chứng minh gian lận đảm bảo tính hữu hạn không cần tin cậy và cho phép các nhóm thiểu số trung thực bảo mật chuỗi. | Nếu không có nút trung thực nào, một nhà điều hành độc hại có thể đánh cắp tiền bằng cách đăng các khối và cam kết trạng thái không hợp lệ. | +| Việc tính toán bằng chứng gian lận mở cho nút L2 thông thường, không giống như bằng chứng hợp lệ (được sử dụng trong các gộp giao dịch ZK) yêu cầu phần cứng đặc biệt. | Mô hình bảo mật dựa vào ít nhất một nút trung thực thực hiện các giao dịch gộp giao dịch và gửi bằng chứng gian lận để thách thức các chuyển đổi trạng thái không hợp lệ. | +| Các gộp giao dịch được hưởng lợi từ "tính sống động không cần tin cậy" (bất kỳ ai cũng có thể buộc chuỗi tiến lên bằng cách thực hiện các giao dịch và đăng các khẳng định) | Người dùng phải đợi thời gian thử thách một tuần hết hạn trước khi rút tiền về Ethereum. | +| Các gộp giao dịch lạc quan dựa vào các ưu đãi kinh tế mã hóa được thiết kế tốt để tăng cường bảo mật trên chuỗi. | Các gộp giao dịch phải đăng tất cả dữ liệu giao dịch trên chuỗi, điều này có thể làm tăng chi phí. | +| Khả năng tương thích với EVM và Solidity cho phép các nhà phát triển chuyển các hợp đồng thông minh gốc của Ethereum sang các gộp giao dịch hoặc sử dụng các bộ công cụ hiện có để tạo các ứng dụng phi tập trung mới. | | + +### Giải thích trực quan về các gộp giao dịch lạc quan {#optimistic-video} + +Tìm hiểu thêm từ video trực quan? Xem Finematics giải thích về các gộp giao dịch lạc quan: + + + +## Đọc thêm về các gộp giao dịch lạc quan + +- [Các gộp giao dịch lạc quan hoạt động như thế nào (Hướng dẫn Toàn diện)](https://www.alchemy.com/overviews/optimistic-rollups) +- [Gộp giao dịch chuỗi khối là gì? Giới thiệu kỹ thuật](https://www.ethereum-ecosystem.com/blog/what-is-a-blockchain-rollup-a-technical-introduction) +- [Hướng dẫn cần thiết về Arbitrum](https://www.bankless.com/the-essential-guide-to-arbitrum) +- [Hướng dẫn thực hành về các gộp giao dịch Ethereum](https://web.archive.org/web/20241108192208/https://research.2077.xyz/the-practical-guide-to-ethereum-rollups) +- [Tình trạng của Bằng chứng Gian lận trong các L2 của Ethereum](https://web.archive.org/web/20241124154627/https://research.2077.xyz/the-state-of-fraud-proofs-in-ethereum-l2s) +- [Gộp giao dịch của Optimism thực sự hoạt động như thế nào?](https://www.paradigm.xyz/2021/01/how-does-optimism-s-rollup-really-work) +- [Tìm hiểu sâu về OVM](https://medium.com/ethereum-optimism/ovm-deep-dive-a300d1085f52) +- [Máy ảo Lạc quan là gì?](https://www.alchemy.com/overviews/optimistic-virtual-machine) diff --git a/public/content/translations/vi/developers/docs/scaling/plasma/index.md b/public/content/translations/vi/developers/docs/scaling/plasma/index.md new file mode 100644 index 00000000000..50f41288fbd --- /dev/null +++ b/public/content/translations/vi/developers/docs/scaling/plasma/index.md @@ -0,0 +1,176 @@ +--- +title: "Các chuỗi Plasma" +description: "Giới thiệu về các chuỗi Plasma như một giải pháp thay đổi quy mô hiện đang được cộng đồng Ethereum sử dụng." +lang: vi +incomplete: true +sidebarDepth: 3 +--- + +Chuỗi Plasma là một chuỗi khối riêng biệt được neo vào Mạng chính Ethereum nhưng thực hiện các giao dịch ngoài chuỗi bằng cơ chế xác thực khối riêng. Các chuỗi Plasma đôi khi được gọi là chuỗi "con", về cơ bản là các bản sao nhỏ hơn của Mạng chính Ethereum. Các chuỗi Plasma sử dụng [bằng chứng gian lận](/glossary/#fraud-proof) (giống như [các gộp giao dịch lạc quan](/developers/docs/scaling/optimistic-rollups/)) để phân xử các tranh chấp. + +Cây Merkle cho phép tạo ra một chồng chuỗi vô tận có thể hoạt động để giảm tải băng thông từ các chuỗi mẹ (bao gồm cả Mạng chính Ethereum). Tuy nhiên, trong khi các chuỗi này có được một số bảo mật từ Ethereum (thông qua bằng chứng gian lận), thì tính bảo mật và hiệu quả của chúng lại bị ảnh hưởng bởi một số hạn chế về thiết kế. + +## Điều kiện tiên quyết {#prerequisites} + +Bạn nên có hiểu biết tốt về tất cả các chủ đề nền tảng và hiểu biết ở cấp độ cao về [việc thay đổi quy mô của Ethereum](/developers/docs/scaling/). + +## Plasma là gì? + +Plasma là một khuôn khổ để cải thiện khả năng mở rộng trong các chuỗi khối công khai như Ethereum. Như được mô tả trong [sách trắng Plasma](http://plasma.io/plasma.pdf) ban đầu, các chuỗi Plasma được xây dựng trên một chuỗi khối khác (được gọi là "chuỗi gốc"). Mỗi "chuỗi con" kéo dài từ chuỗi gốc và thường được quản lý bởi một hợp đồng thông minh được triển khai trên chuỗi mẹ. + +Hợp đồng Plasma hoạt động, cùng với các chức năng khác, như một [cầu nối](/developers/docs/bridges/) cho phép người dùng di chuyển tài sản giữa Mạng chính Ethereum và chuỗi Plasma. Mặc dù điều này làm cho chúng tương tự như [các chuỗi bên](/developers/docs/scaling/sidechains/), các chuỗi plasma được hưởng lợi — ít nhất là ở một mức độ nào đó — từ tính bảo mật của Mạng chính Ethereum. Điều này không giống như các chuỗi bên hoàn toàn chịu trách nhiệm về tính bảo mật của chúng. + +## Plasma hoạt động như thế nào? + +Các thành phần cơ bản của khuôn khổ Plasma là: + +### Tính toán ngoài chuỗi {#offchain-computation} + +Tốc độ xử lý hiện tại của Ethereum bị giới hạn ở khoảng 15-20 giao dịch mỗi giây, làm giảm khả năng thay đổi quy mô trong ngắn hạn để xử lý nhiều người dùng hơn. Vấn đề này tồn tại chủ yếu là do [cơ chế đồng thuận](/developers/docs/consensus-mechanisms/) của Ethereum yêu cầu nhiều nút ngang hàng xác minh mọi cập nhật đối với trạng thái của chuỗi khối. + +Mặc dù cơ chế đồng thuận của Ethereum là cần thiết để bảo mật, nó có thể không áp dụng cho mọi trường hợp sử dụng. Ví dụ: Alice có thể không cần các khoản thanh toán hàng ngày của mình cho Bob cho một tách cà phê được xác minh bởi toàn bộ mạng Ethereum vì giữa hai bên đã có một số sự tin tưởng nhất định. + +Plasma cho rằng Mạng chính Ethereum không cần xác minh tất cả các giao dịch. Thay vào đó, chúng ta có thể xử lý các giao dịch ngoài Mạng chính, giải phóng các nút khỏi việc phải xác thực mọi giao dịch. + +Tính toán ngoài chuỗi là cần thiết vì các chuỗi Plasma có thể tối ưu hóa tốc độ và chi phí. Ví dụ: một chuỗi Plasma có thể — và thường xuyên nhất là — sử dụng một "người vận hành" duy nhất để quản lý việc sắp xếp thứ tự và thực hiện các giao dịch. Chỉ với một thực thể xác minh các giao dịch, thời gian xử lý trên chuỗi plasma nhanh hơn Mạng chính Ethereum. + +### Cam kết trạng thái {#state-commitments} + +Trong khi Plasma thực hiện các giao dịch ngoài chuỗi, chúng được giải quyết trên lớp thực thi Ethereum chính — nếu không, các chuỗi Plasma không thể hưởng lợi từ sự đảm bảo bảo mật của Ethereum. Nhưng việc hoàn tất các giao dịch ngoài chuỗi mà không biết trạng thái của chuỗi plasma sẽ phá vỡ mô hình bảo mật và cho phép sự gia tăng của các giao dịch không hợp lệ. Đây là lý do tại sao người vận hành, thực thể chịu trách nhiệm sản xuất các khối trên chuỗi plasma, được yêu cầu xuất bản các "cam kết trạng thái" trên Ethereum theo định kỳ. + +[Lược đồ cam kết](https://en.wikipedia.org/wiki/Commitment_scheme) là một kỹ thuật mã hóa để cam kết một giá trị hoặc một tuyên bố mà không tiết lộ nó cho một bên khác. Các cam kết có tính "ràng buộc" theo nghĩa là bạn không thể thay đổi giá trị hoặc tuyên bố một khi bạn đã cam kết với nó. Các cam kết trạng thái trong Plasma có dạng "gốc Merkle" (bắt nguồn từ [cây Merkle](/whitepaper/#merkle-trees)) mà người vận hành gửi theo các khoảng thời gian đến hợp đồng Plasma trên chuỗi Ethereum. + +Gốc Merkle là các nguyên hàm mã hóa cho phép nén lượng lớn thông tin. Gốc Merkle (còn được gọi là "gốc khối" trong trường hợp này) có thể đại diện cho tất cả các giao dịch trong một khối. Gốc Merkle cũng giúp dễ dàng xác minh rằng một phần dữ liệu nhỏ là một phần của tập dữ liệu lớn hơn. Ví dụ, người dùng có thể tạo [bằng chứng Merkle](/developers/tutorials/merkle-proofs-for-offline-data-integrity/#main-content) để chứng minh sự bao gồm của một giao dịch trong một khối cụ thể. + +Gốc Merkle rất quan trọng để cung cấp thông tin về trạng thái ngoài chuỗi cho Ethereum. Bạn có thể nghĩ về gốc Merkle như là các "điểm lưu": người vận hành đang nói, "Đây là trạng thái của chuỗi Plasma tại thời điểm x, và đây là gốc Merkle làm bằng chứng." Người vận hành đang cam kết với _trạng thái hiện tại_ của chuỗi plasma với một gốc Merkle, đó là lý do tại sao nó được gọi là "cam kết trạng thái". + +### Vào và thoát {#entries-and-exits} + +Để người dùng Ethereum tận dụng lợi thế của Plasma, cần có một cơ chế để di chuyển tiền giữa Mạng chính và các chuỗi plasma. Tuy nhiên, chúng ta không thể tùy tiện gửi ether đến một địa chỉ trên chuỗi plasma — các chuỗi này không tương thích, vì vậy giao dịch sẽ thất bại hoặc dẫn đến mất tiền. + +Plasma sử dụng một hợp đồng chính chạy trên Ethereum để xử lý việc vào và ra của người dùng. Hợp đồng chính này cũng chịu trách nhiệm theo dõi các cam kết trạng thái (đã giải thích trước đó) và trừng phạt hành vi không trung thực thông qua các bằng chứng gian lận (sẽ nói thêm về điều này sau). + +#### Vào chuỗi plasma {#entering-the-plasma-chain} + +Để vào chuỗi plasma, Alice (người dùng) sẽ phải gửi ETH hoặc bất kỳ token ERC-20 nào vào hợp đồng plasma. Người vận hành plasma, người theo dõi các khoản tiền gửi của hợp đồng, tạo lại một số tiền bằng với khoản tiền gửi ban đầu của Alice và chuyển nó đến địa chỉ của cô ấy trên chuỗi plasma. Alice được yêu cầu chứng thực việc nhận tiền trên chuỗi con và sau đó có thể sử dụng số tiền này cho các giao dịch. + +#### Thoát khỏi chuỗi plasma {#exiting-the-plasma-chain} + +Thoát khỏi chuỗi plasma phức tạp hơn việc vào chuỗi vì một số lý do. Lý do lớn nhất là, trong khi Ethereum có thông tin về trạng thái của chuỗi plasma, nó không thể xác minh thông tin đó có đúng hay không. Một người dùng độc hại có thể đưa ra một khẳng định không chính xác ("Tôi có 1000 ETH") và thoát khỏi việc cung cấp các bằng chứng giả để sao lưu cho tuyên bố đó. + +Để ngăn chặn việc rút tiền độc hại, một "thời gian thử thách" được đưa ra. Trong thời gian thử thách (thường là một tuần), bất kỳ ai cũng có thể thách thức yêu cầu rút tiền bằng cách sử dụng bằng chứng gian lận. Nếu thử thách thành công, thì yêu cầu rút tiền sẽ bị từ chối. + +Tuy nhiên, thông thường, người dùng trung thực và đưa ra các tuyên bố chính xác về số tiền họ sở hữu. Trong trường hợp này, Alice sẽ bắt đầu một yêu cầu rút tiền trên chuỗi gốc (Ethereum) bằng cách gửi một giao dịch đến hợp đồng plasma. + +Cô ấy cũng phải cung cấp một bằng chứng Merkle xác minh rằng một giao dịch tạo ra tiền của cô ấy trên chuỗi Plasma đã được bao gồm trong một khối. Điều này là cần thiết cho các lần lặp lại của Plasma, chẳng hạn như [Plasma MVP](https://www.learnplasma.org/en/learn/mvp.html), sử dụng mô hình [Đầu ra Giao dịch Chưa được Chi tiêu (UTXO)](https://en.wikipedia.org/wiki/Unspent_transaction_output). + +Những loại khác, như [Plasma Cash](https://www.learnplasma.org/en/learn/cash.html), đại diện cho các khoản tiền dưới dạng [token không thể thay thế](/developers/docs/standards/tokens/erc-721/) thay vì UTXO. Trong trường hợp này, việc rút tiền đòi hỏi bằng chứng về quyền sở hữu các token trên chuỗi Plasma. Điều này được thực hiện bằng cách gửi hai giao dịch gần đây nhất liên quan đến token và cung cấp một bằng chứng Merkle xác minh sự bao gồm của các giao dịch đó trong một khối. + +Người dùng cũng phải thêm một khoản ký quỹ vào yêu cầu rút tiền như một sự đảm bảo cho hành vi trung thực. Nếu một người thách thức chứng minh yêu cầu rút tiền của Alice là không hợp lệ, khoản ký quỹ của cô ấy sẽ bị phạt và một phần trong số đó sẽ được chuyển cho người thách thức như một phần thưởng. + +Nếu thời gian thử thách trôi qua mà không có ai cung cấp bằng chứng gian lận, yêu cầu rút tiền của Alice được coi là hợp lệ, cho phép cô ấy lấy lại tiền gửi từ hợp đồng Plasma trên Ethereum. + +### Phân xử tranh chấp {#dispute-arbitration} + +Giống như bất kỳ chuỗi khối nào, các chuỗi plasma cần một cơ chế để thực thi tính toàn vẹn của các giao dịch trong trường hợp những người tham gia có hành vi độc hại (ví dụ: chi tiêu gấp đôi). Để đạt được mục tiêu này, các chuỗi plasma sử dụng bằng chứng gian lận để phân xử các tranh chấp liên quan đến tính hợp lệ của các chuyển đổi trạng thái và xử phạt các hành vi xấu. Các bằng chứng gian lận được sử dụng như một cơ chế mà qua đó một chuỗi con Plasma nộp đơn khiếu nại lên chuỗi mẹ của nó hoặc lên chuỗi gốc. + +Bằng chứng gian lận chỉ đơn giản là một tuyên bố rằng một chuyển đổi trạng thái cụ thể là không hợp lệ. Một ví dụ là nếu một người dùng (Alice) cố gắng chi tiêu cùng một khoản tiền hai lần. Có lẽ cô ấy đã chi tiêu UTXO trong một giao dịch với Bob và muốn chi tiêu cùng một UTXO (hiện là của Bob) trong một giao dịch khác. + +Để ngăn chặn việc rút tiền, Bob sẽ xây dựng một bằng chứng gian lận bằng cách cung cấp bằng chứng về việc Alice đã chi tiêu UTXO nói trên trong một giao dịch trước đó và một bằng chứng Merkle về sự bao gồm của giao dịch trong một khối. Quy trình tương tự cũng hoạt động trong Plasma Cash — Bob sẽ cần cung cấp bằng chứng rằng Alice trước đó đã chuyển các token mà cô ấy đang cố gắng rút. + +Nếu thử thách của Bob thành công, yêu cầu rút tiền của Alice sẽ bị hủy. Tuy nhiên, cách tiếp cận này phụ thuộc vào khả năng của Bob trong việc theo dõi chuỗi để tìm các yêu cầu rút tiền. Nếu Bob ngoại tuyến, thì Alice có thể xử lý việc rút tiền độc hại sau khi hết thời gian thử thách. + +## Vấn đề thoát hàng loạt trong plasma {#the-mass-exit-problem-in-plasma} + +Vấn đề thoát hàng loạt xảy ra khi một số lượng lớn người dùng cố gắng rút khỏi một chuỗi plasma cùng một lúc. Lý do vấn đề này tồn tại liên quan đến một trong những vấn đề lớn nhất của Plasma: **tính không sẵn có của dữ liệu**. + +Tính sẵn có của dữ liệu là khả năng xác minh rằng thông tin cho một khối được đề xuất đã thực sự được xuất bản trên mạng chuỗi khối. Một khối là "không có sẵn" nếu nhà sản xuất xuất bản chính khối đó nhưng giữ lại dữ liệu được sử dụng để tạo khối. + +Các khối phải có sẵn nếu các nút có thể tải xuống khối và xác minh tính hợp lệ của các giao dịch. Các chuỗi khối đảm bảo tính sẵn có của dữ liệu bằng cách buộc các nhà sản xuất khối phải đăng tất cả dữ liệu giao dịch trên chuỗi. + +Tính sẵn có của dữ liệu cũng giúp bảo mật các giao thức thay đổi quy mô ngoài chuỗi được xây dựng trên lớp cơ sở của Ethereum. Bằng cách buộc các người vận hành trên các chuỗi này xuất bản dữ liệu giao dịch trên Ethereum, bất kỳ ai cũng có thể thách thức các khối không hợp lệ bằng cách xây dựng các bằng chứng gian lận tham chiếu đến trạng thái chính xác của chuỗi. + +Các chuỗi Plasma chủ yếu lưu trữ dữ liệu giao dịch với người vận hành và **không xuất bản bất kỳ dữ liệu nào trên Mạng chính** (tức là, ngoài các cam kết trạng thái định kỳ). Điều này có nghĩa là người dùng phải dựa vào người vận hành để cung cấp dữ liệu khối nếu họ cần tạo bằng chứng gian lận thách thức các giao dịch không hợp lệ. Nếu hệ thống này hoạt động, thì người dùng luôn có thể sử dụng bằng chứng gian lận để bảo mật tiền. + +Vấn đề bắt đầu khi người vận hành, chứ không phải bất kỳ người dùng nào, là bên hành động độc hại. Bởi vì người vận hành có toàn quyền kiểm soát chuỗi khối, họ có nhiều động cơ hơn để thúc đẩy các chuyển đổi trạng thái không hợp lệ ở quy mô lớn hơn, chẳng hạn như ăn cắp tiền thuộc về người dùng trên chuỗi plasma. + +Trong trường hợp này, việc sử dụng hệ thống bằng chứng gian lận cổ điển không hoạt động. Người vận hành có thể dễ dàng thực hiện một giao dịch không hợp lệ chuyển tiền của Alice và Bob vào ví của họ và che giấu dữ liệu cần thiết để tạo bằng chứng gian lận. Điều này có thể thực hiện được vì người vận hành không bắt buộc phải cung cấp dữ liệu cho người dùng hoặc Mạng chính. + +Do đó, giải pháp lạc quan nhất là cố gắng thực hiện một cuộc "thoát hàng loạt" của người dùng khỏi chuỗi plasma. Việc thoát hàng loạt làm chậm kế hoạch ăn cắp tiền của người vận hành độc hại và cung cấp một số biện pháp bảo vệ cho người dùng. Các yêu cầu rút tiền được sắp xếp theo thứ tự dựa trên thời điểm mỗi UTXO (hoặc token) được tạo ra, ngăn chặn các người vận hành độc hại chạy trước người dùng trung thực. + +Tuy nhiên, chúng ta vẫn cần một cách để xác minh tính hợp lệ của các yêu cầu rút tiền trong một cuộc thoát hàng loạt — để ngăn chặn các cá nhân cơ hội lợi dụng sự hỗn loạn để xử lý các lần thoát không hợp lệ. Giải pháp rất đơn giản: yêu cầu người dùng đăng **trạng thái hợp lệ cuối cùng của chuỗi** để rút tiền của họ. + +Nhưng cách tiếp cận này vẫn có vấn đề. Ví dụ: nếu tất cả người dùng trên chuỗi plasma cần thoát (điều này có thể xảy ra trong trường hợp có người vận hành độc hại), thì toàn bộ trạng thái hợp lệ của chuỗi plasma phải được đổ vào lớp cơ sở của Ethereum cùng một lúc. Với kích thước tùy ý của các chuỗi plasma (thông lượng cao = nhiều dữ liệu hơn) và các ràng buộc về tốc độ xử lý của Ethereum, đây không phải là một giải pháp lý tưởng. + +Mặc dù các trò chơi thoát nghe có vẻ hay về mặt lý thuyết, nhưng các cuộc thoát hàng loạt trong đời thực có thể sẽ gây ra tắc nghẽn trên toàn mạng trên chính Ethereum. Bên cạnh việc gây hại cho chức năng của Ethereum, một cuộc thoát hàng loạt được phối hợp kém có nghĩa là người dùng có thể không thể rút tiền trước khi người vận hành rút cạn mọi tài khoản trên chuỗi plasma. + +## Ưu và nhược điểm của plasma {#pros-and-cons-of-plasma} + +| Ưu điểm | Nhược điểm | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Cung cấp thông lượng cao và chi phí thấp cho mỗi giao dịch. | Không hỗ trợ tính toán chung (không thể chạy các hợp đồng thông minh). Chỉ các giao dịch chuyển token cơ bản, hoán đổi và một vài loại giao dịch khác được hỗ trợ thông qua logic vị từ. | +| Tốt cho các giao dịch giữa những người dùng tùy ý (không có chi phí phát sinh cho mỗi cặp người dùng nếu cả hai đều được thiết lập trên chuỗi plasma) | Cần phải theo dõi mạng định kỳ (yêu cầu về tính sống động) hoặc ủy thác trách nhiệm này cho người khác để đảm bảo an toàn cho tiền của bạn. | +| Các chuỗi Plasma có thể được điều chỉnh cho các trường hợp sử dụng cụ thể không liên quan đến chuỗi chính. Bất kỳ ai, kể cả các doanh nghiệp, đều có thể tùy chỉnh các hợp đồng thông minh Plasma để cung cấp cơ sở hạ tầng có thể mở rộng hoạt động trong các bối cảnh khác nhau. | Dựa vào một hoặc nhiều người vận hành để lưu trữ dữ liệu và cung cấp dữ liệu theo yêu cầu. | +| Giảm tải trên Mạng chính Ethereum bằng cách di chuyển tính toán và lưu trữ ra ngoài chuỗi. | Việc rút tiền bị trì hoãn trong vài ngày để cho phép các thử thách. Đối với các tài sản có thể thay thế, điều này có thể được giảm thiểu bởi các nhà cung cấp thanh khoản, nhưng có một chi phí vốn liên quan. | +| | Nếu có quá nhiều người dùng cố gắng thoát đồng thời, Mạng chính Ethereum có thể bị tắc nghẽn. | + +## Plasma so với các giao thức thay đổi quy mô lớp 2 {#plasma-vs-layer-2} + +Trong khi Plasma từng được coi là một giải pháp thay đổi quy mô hữu ích cho Ethereum, nó đã bị loại bỏ để chuyển sang các [giao thức thay đổi quy mô lớp 2 (L2)](/layer-2/). Các giải pháp thay đổi quy mô L2 khắc phục một số vấn đề của Plasma: + +### Hiệu quả {#efficiency} + +[Các gộp giao dịch không kiến thức](/developers/docs/scaling/zk-rollups) tạo ra các bằng chứng mã hóa về tính hợp lệ của mỗi lô giao dịch được xử lý ngoài chuỗi. Điều này ngăn người dùng (và người vận hành) thúc đẩy các chuyển đổi trạng thái không hợp lệ, loại bỏ nhu cầu về thời gian thử thách và các trò chơi thoát. Điều đó cũng có nghĩa là người dùng không phải theo dõi chuỗi định kỳ để bảo mật tiền của họ. + +### Hỗ trợ các hợp đồng thông minh {#support-for-smart-contracts} + +Một vấn đề khác với khuôn khổ plasma là [không có khả năng hỗ trợ việc thực thi các hợp đồng thông minh Ethereum](https://ethresear.ch/t/why-smart-contracts-are-not-feasible-on-plasma/2598/4). Do đó, hầu hết các triển khai của Plasma chủ yếu được xây dựng cho các khoản thanh toán đơn giản hoặc trao đổi token ERC-20. + +Ngược lại, các gộp giao dịch lạc quan, tương thích với [Máy ảo Ethereum](/developers/docs/evm/) và có thể chạy các [hợp đồng thông minh](/developers/docs/smart-contracts/) gốc của Ethereum, khiến chúng trở thành một giải pháp hữu ích và _bảo mật_ để thay đổi quy mô [các ứng dụng phi tập trung](/developers/docs/dapps/). Tương tự, các kế hoạch đang được tiến hành để [tạo một triển khai không kiến thức của EVM (zkEVM)](https://ethresear.ch/t/a-zk-evm-specification/11549) sẽ cho phép các ZK-rollup xử lý logic tùy ý và thực thi các hợp đồng thông minh. + +### Tính không sẵn có của dữ liệu {#data-unavailability} + +Như đã giải thích trước đó, plasma gặp phải vấn đề về tính sẵn có của dữ liệu. Nếu một người vận hành độc hại thúc đẩy một quá trình chuyển đổi không hợp lệ trên chuỗi plasma, người dùng sẽ không thể thách thức nó vì người vận hành có thể giữ lại dữ liệu cần thiết để tạo bằng chứng gian lận. Các gộp giao dịch giải quyết vấn đề này bằng cách buộc các người vận hành đăng dữ liệu giao dịch trên Ethereum, cho phép bất kỳ ai xác minh trạng thái của chuỗi và tạo bằng chứng gian lận nếu cần. + +### Vấn đề thoát hàng loạt {#mass-exit-problem} + +Các ZK-rollup và gộp giao dịch lạc quan đều giải quyết vấn đề thoát hàng loạt của Plasma theo nhiều cách khác nhau. Ví dụ: một ZK-rollup dựa trên các cơ chế mã hóa đảm bảo rằng người vận hành không thể ăn cắp tiền của người dùng trong bất kỳ trường hợp nào. + +Tương tự, các gộp giao dịch lạc quan áp đặt một khoảng thời gian trì hoãn đối với việc rút tiền, trong đó bất kỳ ai cũng có thể bắt đầu một thử thách và ngăn chặn các yêu cầu rút tiền độc hại. Mặc dù điều này tương tự như Plasma, nhưng điểm khác biệt là người xác minh có quyền truy cập vào dữ liệu cần thiết để tạo bằng chứng gian lận. Do đó, người dùng rollup không cần phải tham gia vào một cuộc di cư điên cuồng, "người đầu tiên ra ngoài" đến Mạng chính Ethereum. + +## Plasma khác với chuỗi bên và phân mảnh như thế nào? {#plasma-sidechains-sharding} + +Plasma, chuỗi bên và phân mảnh khá giống nhau vì tất cả chúng đều kết nối với Mạng chính Ethereum theo một cách nào đó. Tuy nhiên, mức độ và sức mạnh của các kết nối này khác nhau, điều này ảnh hưởng đến các thuộc tính bảo mật của từng giải pháp thay đổi quy mô. + +### Plasma so với chuỗi bên {#plasma-vs-sidechains} + +Một [chuỗi bên](/developers/docs/scaling/sidechains/) là một chuỗi khối được vận hành độc lập được kết nối với Mạng chính Ethereum thông qua một cầu nối hai chiều. [Các cầu nối](/bridges/) cho phép người dùng trao đổi các token giữa hai chuỗi khối để giao dịch trên chuỗi bên, giảm tắc nghẽn trên Mạng chính Ethereum và cải thiện khả năng mở rộng. +Các chuỗi bên sử dụng một cơ chế đồng thuận riêng biệt và thường nhỏ hơn nhiều so với Mạng chính Ethereum. Do đó, việc kết nối tài sản với các chuỗi này có nguy cơ gia tăng; do thiếu sự đảm bảo bảo mật được kế thừa từ Mạng chính Ethereum trong mô hình chuỗi bên, người dùng có nguy cơ mất tiền trong một cuộc tấn công vào chuỗi bên. + +Ngược lại, các chuỗi plasma có được sự bảo mật từ Mạng chính. Điều này làm cho chúng an toàn hơn một cách có thể đo lường được so với các chuỗi bên. Cả chuỗi bên và chuỗi plasma đều có thể có các giao thức đồng thuận khác nhau, nhưng sự khác biệt là chuỗi plasma xuất bản các gốc Merkle cho mỗi khối trên Mạng chính Ethereum. Gốc khối là những mẩu thông tin nhỏ mà chúng ta có thể sử dụng để xác minh thông tin về các giao dịch xảy ra trên chuỗi plasma. Nếu một cuộc tấn công xảy ra trên chuỗi plasma, người dùng có thể rút tiền của họ một cách an toàn về Mạng chính bằng cách sử dụng các bằng chứng thích hợp. + +### Plasma so với phân mảnh {#plasma-vs-sharding} + +Cả chuỗi plasma và chuỗi phân mảnh đều định kỳ xuất bản các bằng chứng mã hóa cho Mạng chính Ethereum. Tuy nhiên, cả hai đều có các thuộc tính bảo mật khác nhau. + +Các chuỗi phân mảnh cam kết các "tiêu đề đối chiếu" với Mạng chính có chứa thông tin chi tiết về từng phân mảnh dữ liệu. Các nút trên Mạng chính xác minh và thực thi tính hợp lệ của các phân mảnh dữ liệu, giảm khả năng chuyển đổi phân mảnh không hợp lệ và bảo vệ mạng khỏi hoạt động độc hại. + +Plasma khác biệt vì Mạng chính chỉ nhận được thông tin tối thiểu về trạng thái của các chuỗi con. Điều này có nghĩa là Mạng chính không thể xác minh hiệu quả các giao dịch được thực hiện trên các chuỗi con, khiến chúng kém an toàn hơn. + +**Lưu ý** rằng việc phân mảnh chuỗi khối Ethereum không còn nằm trong lộ trình. Nó đã được thay thế bằng việc thay đổi quy mô thông qua các gộp giao dịch và [Danksharding](/roadmap/danksharding). + +### Sử dụng Plasma {#use-plasma} + +Nhiều dự án cung cấp các triển khai Plasma mà bạn có thể tích hợp vào các ứng dụng phi tập trung của mình: + +- [Polygon](https://polygon.technology/) (trước đây là Matic Network) + +## Đọc thêm {#further-reading} + +- [Tìm hiểu về Plasma](https://www.learnplasma.org/en/) +- [Lời nhắc nhanh về ý nghĩa của "bảo mật được chia sẻ" và tại sao nó lại quan trọng như vậy](https://old.reddit.com/r/ethereum/comments/sgd3zt/a_quick_reminder_of_what_shared_security_means/) +- [Chuỗi bên so với Plasma so với Phân mảnh](https://vitalik.eth.limo/general/2019/06/12/plasma_vs_sharding.html) +- [Tìm hiểu về Plasma, Phần 1: Các vấn đề cơ bản](https://www.theblockcrypto.com/amp/post/10793/understanding-plasma-part-1-the-basics) +- [Sự sống và cái chết của Plasma](https://medium.com/dragonfly-research/the-life-and-death-of-plasma-b72c6a59c5ad#) + +_Biết về nguồn lực cộng đồng đã giúp đỡ bạn? Chỉnh sửa trang này và bổ sung!_ diff --git a/public/content/translations/vi/developers/docs/scaling/sidechains/index.md b/public/content/translations/vi/developers/docs/scaling/sidechains/index.md new file mode 100644 index 00000000000..69f788b1910 --- /dev/null +++ b/public/content/translations/vi/developers/docs/scaling/sidechains/index.md @@ -0,0 +1,73 @@ +--- +title: "Chuỗi bên" +description: "Giới thiệu về chuỗi bên như một giải pháp mở rộng quy mô hiện đang được cộng đồng Ethereum sử dụng." +lang: vi +sidebarDepth: 3 +--- + +Chuỗi bên là một chuỗi khối riêng biệt chạy độc lập với Ethereum và được kết nối với Mạng chính Ethereum bằng cầu nối hai chiều. Các chuỗi bên có thể có các thông số khối riêng biệt và [các thuật toán đồng thuận](/developers/docs/consensus-mechanisms/), thường được thiết kế để xử lý giao dịch hiệu quả. Tuy nhiên, việc sử dụng chuỗi bên có sự đánh đổi, vì chúng không kế thừa các thuộc tính bảo mật của Ethereum. Không giống như [các giải pháp mở rộng quy mô lớp 2](/layer-2/), các chuỗi bên không đăng các thay đổi trạng thái và dữ liệu giao dịch trở lại Mạng chính Ethereum. + +Các chuỗi bên cũng hy sinh một mức độ phân cấp hoặc bảo mật nhất định để đạt được thông lượng cao ([thế khó ba nan giải về khả năng mở rộng](https://vitalik.eth.limo/general/2021/05/23/scaling.html)). Tuy nhiên, Ethereum cam kết mở rộng quy mô mà không ảnh hưởng đến tính phi tập trung và bảo mật. + +## Các chuỗi bên hoạt động như thế nào? {#how-do-sidechains-work} + +Các chuỗi bên là các chuỗi khối độc lập, với lịch sử, lộ trình phát triển và các cân nhắc thiết kế khác nhau. Mặc dù chuỗi bên có thể có một số điểm tương đồng ở bề ngoài với Ethereum, nó có một số tính năng đặc biệt. + +### Các thuật toán đồng thuận {#consensus-algorithms} + +Một trong những phẩm chất làm cho các chuỗi bên trở nên độc nhất (tức là khác với Ethereum) là thuật toán đồng thuận được sử dụng. Các chuỗi bên không dựa vào Ethereum để có được sự đồng thuận và có thể chọn các giao thức đồng thuận thay thế phù hợp với nhu cầu của chúng. Một số ví dụ về thuật toán đồng thuận được sử dụng trên các chuỗi bên bao gồm: + +- [Bằng chứng ủy quyền](/developers/docs/consensus-mechanisms/poa/) +- [Bằng chứng cổ phần được ủy quyền](https://en.bitcoin.it/wiki/Delegated_proof_of_stake) +- [Khả năng chịu lỗi Byzantine](https://decrypt.co/resources/byzantine-fault-tolerance-what-is-it-explained). + +Giống như Ethereum, các chuỗi bên có các nút xác thực để xác minh và xử lý các giao dịch, sản xuất các khối và lưu trữ trạng thái chuỗi khối. Trình xác thực cũng chịu trách nhiệm duy trì sự đồng thuận trên toàn mạng và bảo mật mạng trước các cuộc tấn công độc hại. + +#### Các thông số khối {#block-parameters} + +Ethereum đặt ra các giới hạn về [thời gian tạo khối](/developers/docs/blocks/#block-time) (tức là thời gian cần thiết để tạo ra các khối mới) và [kích thước khối](/developers/docs/blocks/#block-size) (tức là lượng dữ liệu chứa trong mỗi khối được tính bằng gas). Ngược lại, các chuỗi bên thường áp dụng các thông số khác nhau, chẳng hạn như thời gian tạo khối nhanh hơn và giới hạn gas cao hơn, để đạt được thông lượng cao, giao dịch nhanh và phí thấp. + +Mặc dù điều này có một số lợi ích, nó có những tác động quan trọng đối với tính phi tập trung và bảo mật của mạng. Các thông số khối, như thời gian tạo khối nhanh và kích thước khối lớn, làm tăng độ khó của việc chạy một nút đầy đủ—để lại một vài "siêu nút" chịu trách nhiệm bảo mật chuỗi. Trong một kịch bản như vậy, khả năng thông đồng của trình xác thực hoặc một cuộc tiếp quản chuỗi độc hại sẽ tăng lên. + +Để các chuỗi khối mở rộng quy mô mà không gây hại cho tính phi tập trung, việc chạy một nút phải mở cho tất cả mọi người—không nhất thiết phải là các bên có phần cứng chuyên dụng. Đây là lý do tại sao các nỗ lực đang được tiến hành để đảm bảo mọi người đều có thể [chạy một nút đầy đủ](/developers/docs/nodes-and-clients/#why-should-i-run-an-ethereum-node) trên mạng Ethereum. + +### Khả năng tương thích với EVM {#evm-compatibility} + +Một số chuỗi bên tương thích với EVM và có thể thực thi các hợp đồng được phát triển cho [Máy ảo Ethereum (EVM)](/developers/docs/evm/). Các chuỗi bên tương thích với EVM hỗ trợ các hợp đồng thông minh [được viết bằng Solidity](/developers/docs/smart-contracts/languages/), cũng như các ngôn ngữ hợp đồng thông minh EVM khác, điều đó có nghĩa là các hợp đồng thông minh được viết cho Mạng chính Ethereum cũng sẽ hoạt động trên các chuỗi bên tương thích với EVM. + +Điều này có nghĩa là nếu bạn muốn sử dụng [ứng dụng phi tập trung](/developers/docs/dapps/) của mình trên một chuỗi bên, bạn chỉ cần triển khai [hợp đồng thông minh](/developers/docs/smart-contracts/) của mình tới chuỗi bên này. Nó trông, cảm nhận và hoạt động giống như Mạng chính—bạn viết các hợp đồng bằng Solidity và tương tác với chuỗi thông qua RPC của chuỗi bên. + +Vì các chuỗi bên tương thích với EVM, chúng được coi là một [giải pháp mở rộng quy mô](/developers/docs/scaling/) hữu ích cho các ứng dụng phi tập trung gốc của Ethereum. Với ứng dụng phi tập trung của bạn trên một chuỗi bên, người dùng có thể hưởng phí gas thấp hơn và giao dịch nhanh hơn, đặc biệt là nếu Mạng chính bị tắc nghẽn. + +Tuy nhiên, như đã giải thích trước đó, việc sử dụng chuỗi bên có những đánh đổi đáng kể. Mỗi chuỗi bên chịu trách nhiệm về bảo mật của riêng mình và không kế thừa các thuộc tính bảo mật của Ethereum. Điều này làm tăng khả năng xảy ra hành vi độc hại có thể ảnh hưởng đến người dùng của bạn hoặc khiến tiền của họ gặp rủi ro. + +### Chuyển động tài sản {#asset-movement} + +Để một chuỗi khối riêng biệt trở thành một chuỗi bên cho Mạng chính Ethereum, nó cần có khả năng tạo điều kiện thuận lợi cho việc chuyển tài sản từ và đến Mạng chính Ethereum. Khả năng tương tác này với Ethereum đạt được bằng cách sử dụng một cầu nối chuỗi khối. [Cầu nối](/bridges/) sử dụng các hợp đồng thông minh được triển khai trên Mạng chính Ethereum và một chuỗi bên để kiểm soát việc kết nối các quỹ giữa chúng. + +Trong khi các cầu nối giúp người dùng chuyển tiền giữa Ethereum và chuỗi bên, tài sản không được di chuyển vật lý qua hai chuỗi. Thay vào đó, các cơ chế thường liên quan đến việc đúc và đốt được sử dụng để chuyển giá trị qua các chuỗi. Tìm hiểu thêm về [cách các cầu nối hoạt động](/developers/docs/bridges/#how-do-bridges-work). + +## Ưu và nhược điểm của các chuỗi bên {#pros-and-cons-of-sidechains} + +| Ưu điểm | Nhược điểm | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Công nghệ nền tảng của các chuỗi bên đã được thiết lập tốt và được hưởng lợi từ nghiên cứu sâu rộng và những cải tiến trong thiết kế. | Các chuỗi bên đánh đổi một mức độ phi tập trung và không cần tin cậy nhất định để có khả năng mở rộng. | +| Các chuỗi bên hỗ trợ tính toán chung và cung cấp khả năng tương thích với EVM (chúng có thể chạy các ứng dụng phi tập trung gốc của Ethereum). | Một chuỗi bên sử dụng một cơ chế đồng thuận riêng biệt và không được hưởng lợi từ các đảm bảo bảo mật của Ethereum. | +| Các chuỗi bên sử dụng các mô hình đồng thuận khác nhau để xử lý các giao dịch một cách hiệu quả và giảm phí giao dịch cho người dùng. | Các chuỗi bên đòi hỏi các giả định tin cậy cao hơn (ví dụ: một số đại biểu của các trình xác thực chuỗi bên độc hại có thể thực hiện hành vi gian lận). | +| Các chuỗi bên tương thích với EVM cho phép các ứng dụng phi tập trung mở rộng hệ sinh thái của chúng. | | + +### Sử dụng các chuỗi bên {#use-sidechains} + +Nhiều dự án cung cấp các triển khai chuỗi bên mà bạn có thể tích hợp vào các ứng dụng phi tập trung của mình: + +- [Polygon PoS](https://polygon.technology/solutions/polygon-pos) +- [Skale](https://skale.network/) +- [Chuỗi Gnosis (trước đây là xDai)](https://www.gnosischain.com/) +- [Loom Network](https://loomx.io/) +- [Metis Andromeda](https://www.metis.io/) + +## Đọc thêm {#further-reading} + +- [Mở rộng quy mô các ứng dụng phi tập trung của Ethereum thông qua các chuỗi bên](https://medium.com/loom-network/dappchains-scaling-ethereum-dapps-through-sidechains-f99e51fff447) _8 tháng 2, 2018 - Georgios Konstantopoulos_ + +_Biết về nguồn lực cộng đồng đã giúp đỡ bạn? Chỉnh sửa trang này và bổ sung!_ diff --git a/public/content/translations/vi/developers/docs/scaling/state-channels/index.md b/public/content/translations/vi/developers/docs/scaling/state-channels/index.md new file mode 100644 index 00000000000..154c8583f30 --- /dev/null +++ b/public/content/translations/vi/developers/docs/scaling/state-channels/index.md @@ -0,0 +1,261 @@ +--- +title: "Các Kênh Trạng Thái" +description: "Giới thiệu về các kênh trạng thái và kênh thanh toán như một giải pháp mở rộng hiện đang được cộng đồng Ethereum sử dụng." +lang: vi +sidebarDepth: 3 +--- + +Các kênh trạng thái cho phép người tham gia giao dịch ngoài chuỗi một cách an toàn trong khi giữ tương tác với Ethereum Mainnet ở mức tối thiểu. Các bên ngang hàng trong kênh có thể tiến hành một số lượng giao dịch ngoài chuỗi tùy ý trong khi chỉ cần gửi hai giao dịch trên chuỗi để mở và đóng kênh. Điều này cho phép thông lượng giao dịch cực cao và giúp người dùng giảm chi phí. + +## Điều kiện tiên quyết {#prerequisites} + +Bạn nên đọc và hiểu các trang của chúng tôi về [mở rộng Ethereum](/developers/docs/scaling/) và [lớp 2](/layer-2/). + +## Kênh là gì? {#what-are-channels} + +Các blockchain công khai, chẳng hạn như Ethereum, đối mặt với những thách thức về khả năng mở rộng do kiến trúc phân tán của chúng: các giao dịch trên chuỗi phải được thực thi bởi tất cả các nút. Các nút phải có khả năng xử lý khối lượng giao dịch trong một khối bằng phần cứng khiêm tốn, đặt ra giới hạn về thông lượng giao dịch để giữ cho mạng lưới được phi tập trung. Các kênh blockchain giải quyết vấn đề này bằng cách cho phép người dùng tương tác ngoài chuỗi trong khi vẫn dựa vào sự bảo mật của chuỗi chính để thanh toán cuối cùng. + +Các kênh là các giao thức ngang hàng đơn giản cho phép hai bên thực hiện nhiều giao dịch với nhau và sau đó chỉ đăng kết quả cuối cùng lên blockchain. Kênh sử dụng mật mã học để chứng minh rằng dữ liệu tóm tắt mà họ tạo ra thực sự là kết quả của một tập hợp các giao dịch trung gian hợp lệ. Một hợp đồng thông minh ["đa chữ ký"](/developers/docs/smart-contracts/#multisig) đảm bảo các giao dịch được ký bởi các bên chính xác. + +Với các kênh, các thay đổi trạng thái được thực thi và xác thực bởi các bên quan tâm, giảm thiểu tính toán trên lớp thực thi của Ethereum. Điều này làm giảm tắc nghẽn trên Ethereum và cũng tăng tốc độ xử lý giao dịch cho người dùng. + +Mỗi kênh được quản lý bởi một [hợp đồng thông minh đa chữ ký](/developers/docs/smart-contracts/#multisig) chạy trên Ethereum. Để mở một kênh, những người tham gia triển khai hợp đồng kênh trên chuỗi và gửi tiền vào đó. Cả hai bên cùng ký một bản cập nhật trạng thái để khởi tạo trạng thái của kênh, sau đó họ có thể giao dịch nhanh chóng và tự do ngoài chuỗi. + +Để đóng kênh, người tham gia gửi trạng thái cuối cùng đã được đồng thuận của kênh lên trên chuỗi. Sau đó, hợp đồng thông minh phân phối số tiền đã khóa theo số dư của mỗi người tham gia trong trạng thái cuối cùng của kênh. + +Các kênh ngang hàng đặc biệt hữu ích trong các tình huống mà một số người tham gia được xác định trước muốn giao dịch với tần suất cao mà không phải chịu chi phí phát sinh rõ ràng. Các kênh blockchain được chia thành hai loại: **kênh thanh toán** và **kênh trạng thái**. + +## Kênh thanh toán {#payment-channels} + +Một kênh thanh toán được mô tả tốt nhất là một "sổ cái hai chiều" được duy trì chung bởi hai người dùng. Số dư ban đầu của sổ cái là tổng số tiền gửi được khóa trong hợp đồng trên chuỗi trong giai đoạn mở kênh. Việc chuyển tiền qua kênh thanh toán có thể được thực hiện ngay lập tức và không cần sự tham gia của chính blockchain, ngoại trừ việc tạo kênh trên chuỗi một lần ban đầu và việc đóng kênh cuối cùng. + +Các bản cập nhật số dư của sổ cái (tức là trạng thái của kênh thanh toán) yêu cầu sự chấp thuận của tất cả các bên trong kênh. Một bản cập nhật kênh, được ký bởi tất cả những người tham gia kênh, được coi là cuối cùng, giống như một giao dịch trên Ethereum. + +Các kênh thanh toán là một trong những giải pháp mở rộng sớm nhất được thiết kế để giảm thiểu hoạt động tốn kém trên chuỗi của các tương tác người dùng đơn giản (ví dụ: chuyển ETH, hoán đổi nguyên tử, thanh toán vi mô). Những người tham gia kênh có thể thực hiện số lượng giao dịch tức thì, không mất phí không giới hạn với nhau miễn là tổng số tiền chuyển của họ không vượt quá số token đã gửi. + +## Kênh trạng thái {#state-channels} + +Ngoài việc hỗ trợ thanh toán ngoài chuỗi, các kênh thanh toán đã không chứng tỏ được sự hữu ích trong việc xử lý logic chuyển đổi trạng thái chung. Các kênh trạng thái được tạo ra để giải quyết vấn đề này và làm cho các kênh trở nên hữu ích cho việc mở rộng quy mô tính toán đa dụng. + +Các kênh trạng thái vẫn có nhiều điểm chung với các kênh thanh toán. Ví dụ, người dùng tương tác bằng cách trao đổi các thông điệp được ký bằng mật mã (giao dịch), mà những người tham gia kênh khác cũng phải ký. Nếu một bản cập nhật trạng thái được đề xuất không được tất cả những người tham gia ký, nó sẽ bị coi là không hợp lệ. + +Tuy nhiên, ngoài việc giữ số dư của người dùng, kênh còn theo dõi trạng thái hiện tại của bộ lưu trữ của hợp đồng (tức là giá trị của các biến hợp đồng). + +Điều này giúp có thể thực thi một hợp đồng thông minh ngoài chuỗi giữa hai người dùng. Trong kịch bản này, các bản cập nhật trạng thái nội bộ của hợp đồng thông minh chỉ yêu cầu sự chấp thuận của các bên ngang hàng đã tạo ra kênh. + +Mặc dù điều này giải quyết vấn đề về khả năng mở rộng đã được mô tả trước đó, nó có những hàm ý về bảo mật. Trên Ethereum, tính hợp lệ của các chuyển đổi trạng thái được thực thi bởi giao thức đồng thuận của mạng. Điều này làm cho việc đề xuất một bản cập nhật không hợp lệ cho trạng thái của hợp đồng thông minh hoặc thay đổi việc thực thi hợp đồng thông minh là không thể. + +Các kênh trạng thái không có các đảm bảo bảo mật tương tự. Ở một mức độ nào đó, một kênh trạng thái là một phiên bản thu nhỏ của Mainnet. Với một tập hợp người tham gia hạn chế thực thi các quy tắc, khả năng xảy ra hành vi độc hại (ví dụ: đề xuất các bản cập nhật trạng thái không hợp lệ) tăng lên. Các kênh trạng thái có được sự bảo mật từ một hệ thống phân xử tranh chấp dựa trên [bằng chứng gian lận](/glossary/#fraud-proof). + +## Cách hoạt động của các kênh trạng thái {#how-state-channels-work} + +Về cơ bản, hoạt động trong một kênh trạng thái là một phiên tương tác liên quan đến người dùng và một hệ thống blockchain. Người dùng chủ yếu giao tiếp với nhau ngoài chuỗi và chỉ tương tác với blockchain cơ sở để mở kênh, đóng kênh hoặc giải quyết các tranh chấp tiềm tàng giữa những người tham gia. + +Phần sau đây trình bày quy trình làm việc cơ bản của một kênh trạng thái: + +### Mở kênh {#opening-the-channel} + +Việc mở một kênh yêu cầu người tham gia cam kết tiền vào một hợp đồng thông minh trên Mainnet. Khoản tiền gửi cũng có chức năng như một tab ảo, vì vậy các bên tham gia có thể giao dịch tự do mà không cần phải thanh toán ngay lập tức. Chỉ khi kênh được hoàn tất trên chuỗi, các bên mới thanh toán cho nhau và rút lại những gì còn lại trong tab của họ. + +Khoản tiền gửi này cũng đóng vai trò như một khoản thế chấp để đảm bảo hành vi trung thực từ mỗi người tham gia. Nếu người gửi tiền bị phát hiện có hành vi độc hại trong giai đoạn giải quyết tranh chấp, hợp đồng sẽ cắt giảm (slash) tiền gửi của họ. + +Các bên ngang hàng trong kênh phải ký một trạng thái ban đầu mà tất cả họ đều đồng ý. Điều này đóng vai trò là khối khởi nguồn của kênh trạng thái, sau đó người dùng có thể bắt đầu giao dịch. + +### Sử dụng kênh {#using-the-channel} + +Sau khi khởi tạo trạng thái của kênh, các bên ngang hàng tương tác bằng cách ký các giao dịch và gửi cho nhau để phê duyệt. Những người tham gia bắt đầu cập nhật trạng thái bằng các giao dịch này và ký các bản cập nhật trạng thái từ những người khác. Mỗi giao dịch bao gồm những điều sau: + +- Một **nonce**, hoạt động như một ID duy nhất cho các giao dịch và ngăn chặn các cuộc tấn công phát lại. Nó cũng xác định thứ tự mà các bản cập nhật trạng thái đã xảy ra (điều này rất quan trọng để giải quyết tranh chấp) + +- Trạng thái cũ của kênh + +- Trạng thái mới của kênh + +- Giao dịch kích hoạt quá trình chuyển đổi trạng thái (ví dụ: Alice gửi 5 ETH cho Bob) + +Các bản cập nhật trạng thái trong kênh không được phát trên chuỗi như trường hợp thông thường khi người dùng tương tác trên Mainnet, điều này phù hợp với mục tiêu của các kênh trạng thái là giảm thiểu dấu chân trên chuỗi. Miễn là những người tham gia đồng ý về các bản cập nhật trạng thái, chúng có tính cuối cùng như một giao dịch Ethereum. Những người tham gia chỉ cần phụ thuộc vào sự đồng thuận của Mainnet nếu có tranh chấp phát sinh. + +### Đóng kênh {#closing-the-channel} + +Việc đóng một kênh trạng thái yêu cầu gửi trạng thái cuối cùng, đã được đồng thuận của kênh đến hợp đồng thông minh trên chuỗi. Các chi tiết được tham chiếu trong bản cập nhật trạng thái bao gồm số lần di chuyển của mỗi người tham gia và danh sách các giao dịch đã được phê duyệt. + +Sau khi xác minh rằng bản cập nhật trạng thái là hợp lệ (tức là nó được ký bởi tất cả các bên), hợp đồng thông minh sẽ hoàn tất kênh và phân phối số tiền đã khóa theo kết quả của kênh. Các khoản thanh toán được thực hiện ngoài chuỗi được áp dụng cho trạng thái của Ethereum và mỗi người tham gia nhận được phần còn lại của số tiền đã khóa. + +Kịch bản được mô tả ở trên đại diện cho những gì xảy ra trong trường hợp thuận lợi. Đôi khi, người dùng có thể không đạt được thỏa thuận và hoàn tất kênh (trường hợp không thuận lợi). Bất kỳ điều nào sau đây có thể đúng với tình huống này: + +- Những người tham gia ngoại tuyến và không đề xuất được các chuyển đổi trạng thái + +- Những người tham gia từ chối đồng ký các bản cập nhật trạng thái hợp lệ + +- Những người tham gia cố gắng hoàn tất kênh bằng cách đề xuất một bản cập nhật trạng thái cũ cho hợp đồng trên chuỗi + +- Những người tham gia đề xuất các chuyển đổi trạng thái không hợp lệ để người khác ký + +Bất cứ khi nào sự đồng thuận giữa các bên tham gia trong một kênh bị phá vỡ, lựa chọn cuối cùng là dựa vào sự đồng thuận của Mainnet để thực thi trạng thái cuối cùng, hợp lệ của kênh. Trong trường hợp này, việc đóng kênh trạng thái đòi hỏi phải giải quyết các tranh chấp trên chuỗi. + +### Giải quyết tranh chấp {#settling-disputes} + +Thông thường, các bên trong một kênh đồng ý về việc đóng kênh trước và đồng ký vào quá trình chuyển đổi trạng thái cuối cùng, mà họ gửi đến hợp đồng thông minh. Khi bản cập nhật được phê duyệt trên chuỗi, việc thực thi hợp đồng thông minh ngoài chuỗi kết thúc và những người tham gia thoát khỏi kênh với tiền của họ. + +Tuy nhiên, một bên có thể gửi một yêu cầu trên chuỗi để kết thúc việc thực thi của hợp đồng thông minh và hoàn tất kênh—mà không cần chờ sự chấp thuận của đối tác. Nếu bất kỳ tình huống phá vỡ sự đồng thuận nào được mô tả trước đó xảy ra, một trong hai bên có thể kích hoạt hợp đồng trên chuỗi để đóng kênh và phân phối tiền. Điều này cung cấp **tính không cần tin cậy**, đảm bảo rằng các bên trung thực có thể rút tiền gửi của họ bất kỳ lúc nào, bất kể hành động của bên kia. + +Để xử lý việc thoát kênh, người dùng phải gửi bản cập nhật trạng thái hợp lệ cuối cùng của ứng dụng đến hợp đồng trên chuỗi. Nếu điều này được xác nhận (tức là nó có chữ ký của tất cả các bên), thì tiền sẽ được phân phối lại theo hướng có lợi cho họ. + +Tuy nhiên, có một sự chậm trễ trong việc thực hiện các yêu cầu thoát của một người dùng. Nếu yêu cầu kết thúc kênh được nhất trí phê duyệt, thì giao dịch thoát trên chuỗi sẽ được thực hiện ngay lập tức. + +Sự chậm trễ xảy ra trong các lần thoát của một người dùng do khả năng có các hành động gian lận. Ví dụ, một người tham gia kênh có thể cố gắng hoàn tất kênh trên Ethereum bằng cách gửi một bản cập nhật trạng thái cũ hơn trên chuỗi. + +Để đối phó, các kênh trạng thái cho phép người dùng trung thực thách thức các bản cập nhật trạng thái không hợp lệ bằng cách gửi trạng thái mới nhất, hợp lệ của kênh lên trên chuỗi. Các kênh trạng thái được thiết kế sao cho các bản cập nhật trạng thái mới hơn, được đồng thuận sẽ ghi đè lên các bản cập nhật trạng thái cũ hơn. + +Khi một bên ngang hàng kích hoạt hệ thống giải quyết tranh chấp trên chuỗi, bên còn lại được yêu cầu phải phản hồi trong một giới hạn thời gian (được gọi là cửa sổ thách thức). Điều này cho phép người dùng thách thức giao dịch thoát, đặc biệt nếu bên kia đang áp dụng một bản cập nhật cũ. + +Dù trong trường hợp nào, người dùng kênh luôn có đảm bảo về tính cuối cùng mạnh mẽ: nếu quá trình chuyển đổi trạng thái mà họ sở hữu được tất cả các thành viên ký và là bản cập nhật gần đây nhất, thì nó có tính cuối cùng tương đương với một giao dịch trên chuỗi thông thường. Họ vẫn phải thách thức bên kia trên chuỗi, nhưng kết quả duy nhất có thể xảy ra là hoàn tất trạng thái hợp lệ cuối cùng mà họ nắm giữ. + +### Các kênh trạng thái tương tác với Ethereum như thế nào? {#how-do-state-channels-interact-with-ethereum} + +Mặc dù tồn tại dưới dạng các giao thức ngoài chuỗi, các kênh trạng thái có một thành phần trên chuỗi: hợp đồng thông minh được triển khai trên Ethereum khi mở kênh. Hợp đồng này kiểm soát các tài sản được gửi vào kênh, xác minh các bản cập nhật trạng thái và phân xử các tranh chấp giữa những người tham gia. + +Các kênh trạng thái không công bố dữ liệu giao dịch hoặc cam kết trạng thái lên Mainnet, không giống như các giải pháp mở rộng [lớp 2](/layer-2/). Tuy nhiên, chúng được kết nối với Mainnet nhiều hơn, chẳng hạn như [các chuỗi bên](/developers/docs/scaling/sidechains/), khiến chúng an toàn hơn phần nào. + +Các kênh trạng thái dựa vào giao thức Ethereum chính cho những điều sau: + +#### 1. Tính khả dụng {#liveness} + +Hợp đồng trên chuỗi được triển khai khi mở kênh chịu trách nhiệm về chức năng của kênh. Nếu hợp đồng đang chạy trên Ethereum, thì kênh luôn có sẵn để sử dụng. Ngược lại, một chuỗi bên luôn có thể thất bại, ngay cả khi Mainnet đang hoạt động, khiến tiền của người dùng gặp rủi ro. + +#### 2. Bảo mật {#security} + +Ở một mức độ nào đó, các kênh trạng thái dựa vào Ethereum để cung cấp bảo mật và bảo vệ người dùng khỏi các bên ngang hàng độc hại. Như đã thảo luận trong các phần sau, các kênh sử dụng cơ chế bằng chứng gian lận cho phép người dùng thách thức các nỗ lực hoàn tất kênh bằng một bản cập nhật không hợp lệ hoặc đã cũ. + +Trong trường hợp này, bên trung thực cung cấp trạng thái hợp lệ mới nhất của kênh như một bằng chứng gian lận cho hợp đồng trên chuỗi để xác minh. Bằng chứng gian lận cho phép các bên không tin tưởng lẫn nhau thực hiện các giao dịch ngoài chuỗi mà không gây rủi ro cho tiền của họ trong quá trình này. + +#### 3. Tính kết luận cuối cùng {#finality} + +Các bản cập nhật trạng thái được người dùng kênh ký chung được coi là tốt như các giao dịch trên chuỗi. Tuy nhiên, tất cả hoạt động trong kênh chỉ đạt được tính cuối cùng thực sự khi kênh được đóng trên Ethereum. + +Trong trường hợp lạc quan, cả hai bên có thể hợp tác và ký vào bản cập nhật trạng thái cuối cùng và gửi lên chuỗi để đóng kênh, sau đó tiền sẽ được phân phối theo trạng thái cuối cùng của kênh. Trong trường hợp bi quan, khi ai đó cố gắng gian lận bằng cách đăng một bản cập nhật trạng thái không chính xác trên chuỗi, giao dịch của họ sẽ không được hoàn tất cho đến khi cửa sổ thách thức kết thúc. + +## Các kênh trạng thái ảo {#virtual-state-channels} + +Việc triển khai một kênh trạng thái một cách đơn giản sẽ là triển khai một hợp đồng mới khi hai người dùng muốn thực thi một ứng dụng ngoài chuỗi. Điều này không chỉ không khả thi mà còn phủ nhận hiệu quả chi phí của các kênh trạng thái (chi phí giao dịch trên chuỗi có thể tăng lên nhanh chóng). + +Để giải quyết vấn đề này, "các kênh ảo" đã được tạo ra. Không giống như các kênh thông thường yêu cầu các giao dịch trên chuỗi để mở và kết thúc, một kênh ảo có thể được mở, thực thi và hoàn tất mà không cần tương tác với chuỗi chính. Thậm chí có thể giải quyết các tranh chấp ngoài chuỗi bằng phương pháp này. + +Hệ thống này dựa trên sự tồn tại của cái gọi là "các kênh sổ cái", đã được cấp vốn trên chuỗi. Các kênh ảo giữa hai bên có thể được xây dựng trên một kênh sổ cái hiện có, với (các) chủ sở hữu của kênh sổ cái đóng vai trò trung gian. + +Người dùng trong mỗi kênh ảo tương tác thông qua một phiên bản hợp đồng mới, với kênh sổ cái có thể hỗ trợ nhiều phiên bản hợp đồng. Trạng thái của kênh sổ cái cũng chứa nhiều hơn một trạng thái lưu trữ hợp đồng, cho phép thực thi song song các ứng dụng ngoài chuỗi giữa những người dùng khác nhau. + +Giống như các kênh thông thường, người dùng trao đổi các bản cập nhật trạng thái để tiến triển máy trạng thái. Trừ khi có tranh chấp phát sinh, bên trung gian chỉ cần được liên hệ khi mở hoặc kết thúc kênh. + +### Các kênh thanh toán ảo {#virtual-payment-channels} + +Các kênh thanh toán ảo hoạt động dựa trên cùng một ý tưởng với các kênh trạng thái ảo: những người tham gia được kết nối với cùng một mạng có thể chuyển các thông điệp mà không cần phải mở một kênh mới trên chuỗi. Trong các kênh thanh toán ảo, việc chuyển giá trị được định tuyến thông qua một hoặc nhiều bên trung gian, với sự đảm bảo rằng chỉ người nhận dự định mới có thể nhận được tiền đã chuyển. + +## Các ứng dụng của kênh trạng thái {#applications-of-state-channels} + +### Thanh toán {#payments} + +Các kênh blockchain ban đầu là các giao thức đơn giản cho phép hai người tham gia thực hiện các giao dịch chuyển tiền ngoài chuỗi nhanh chóng, phí thấp mà không phải trả phí giao dịch cao trên Mainnet. Ngày nay, các kênh thanh toán vẫn hữu ích cho các ứng dụng được thiết kế để trao đổi và gửi ether và token. + +Thanh toán dựa trên kênh có những ưu điểm sau: + +1. **Thông lượng**: Số lượng giao dịch ngoài chuỗi trên mỗi kênh không liên quan đến thông lượng của Ethereum, vốn bị ảnh hưởng bởi nhiều yếu tố khác nhau, đặc biệt là kích thước khối và thời gian khối. Bằng cách thực thi các giao dịch ngoài chuỗi, các kênh blockchain có thể đạt được thông lượng cao hơn. + +2. **Quyền riêng tư**: Vì các kênh tồn tại ngoài chuỗi, chi tiết về các tương tác giữa những người tham gia không được ghi lại trên blockchain công khai của Ethereum. Người dùng kênh chỉ phải tương tác trên chuỗi khi cấp vốn và đóng kênh hoặc giải quyết tranh chấp. Do đó, các kênh rất hữu ích cho những cá nhân muốn có các giao dịch riêng tư hơn. + +3. **Độ trễ**: Các giao dịch ngoài chuỗi được thực hiện giữa những người tham gia kênh có thể được giải quyết ngay lập tức, nếu cả hai bên hợp tác, giúp giảm sự chậm trễ. Ngược lại, việc gửi một giao dịch trên Mainnet đòi hỏi phải đợi các nút xử lý giao dịch, tạo một khối mới với giao dịch và đạt được sự đồng thuận. Người dùng cũng có thể cần đợi thêm các xác nhận khối trước khi coi một giao dịch là đã hoàn tất. + +4. **Chi phí**: Các kênh trạng thái đặc biệt hữu ích trong các tình huống mà một nhóm người tham gia sẽ trao đổi nhiều bản cập nhật trạng thái trong một thời gian dài. Chi phí duy nhất phát sinh là việc mở và đóng hợp đồng thông minh của kênh trạng thái; mọi thay đổi trạng thái giữa việc mở và đóng kênh sẽ rẻ hơn so với lần trước vì chi phí thanh toán được phân bổ tương ứng. + +Việc triển khai các kênh trạng thái trên các giải pháp lớp 2, chẳng hạn như [rollup](/developers/docs/scaling/#rollups), có thể khiến chúng trở nên hấp dẫn hơn nữa cho các khoản thanh toán. Mặc dù các kênh cung cấp các khoản thanh toán rẻ, chi phí thiết lập hợp đồng trên chuỗi trên Mainnet trong giai đoạn mở có thể trở nên đắt đỏ—đặc biệt là khi phí gas tăng đột biến. Các rollup dựa trên Ethereum cung cấp [phí giao dịch thấp hơn](https://l2fees.info/) và có thể giảm chi phí phát sinh cho người tham gia kênh bằng cách giảm phí thiết lập. + +### Thanh toán vi mô {#microtransactions} + +Thanh toán vi mô là các khoản thanh toán có giá trị thấp (ví dụ: thấp hơn một phần nhỏ của đô la) mà các doanh nghiệp không thể xử lý mà không bị thua lỗ. Các thực thể này phải trả tiền cho các nhà cung cấp dịch vụ thanh toán, điều mà họ không thể làm nếu lợi nhuận trên các khoản thanh toán của khách hàng quá thấp để có thể kiếm lời. + +Các kênh thanh toán giải quyết vấn đề này bằng cách giảm chi phí phát sinh liên quan đến các giao dịch vi mô. Ví dụ, một Nhà cung cấp Dịch vụ Internet (ISP) có thể mở một kênh thanh toán với một khách hàng, cho phép họ truyền các khoản thanh toán nhỏ mỗi khi họ sử dụng dịch vụ. + +Ngoài chi phí mở và đóng kênh, người tham gia không phải chịu thêm chi phí nào cho các giao dịch vi mô (không có phí gas). Đây là một tình huống đôi bên cùng có lợi vì khách hàng có sự linh hoạt hơn trong việc trả bao nhiêu cho các dịch vụ và các doanh nghiệp không bị mất đi các giao dịch vi mô có lợi nhuận. + +### Các ứng dụng phi tập trung {#decentralized-applications} + +Giống như các kênh thanh toán, các kênh trạng thái có thể thực hiện các khoản thanh toán có điều kiện theo các trạng thái cuối cùng của máy trạng thái. Các kênh trạng thái cũng có thể hỗ trợ logic chuyển đổi trạng thái tùy ý, giúp chúng hữu ích cho việc thực thi các ứng dụng chung ngoài chuỗi. + +Các kênh trạng thái thường bị giới hạn trong các ứng dụng theo lượt đơn giản, vì điều này giúp quản lý dễ dàng hơn các khoản tiền đã cam kết cho hợp đồng trên chuỗi. Ngoài ra, với một số lượng hạn chế các bên cập nhật trạng thái của ứng dụng ngoài chuỗi theo từng khoảng thời gian, việc trừng phạt hành vi không trung thực là tương đối đơn giản. + +Hiệu quả của một ứng dụng kênh trạng thái cũng phụ thuộc vào thiết kế của nó. Ví dụ, một nhà phát triển có thể triển khai hợp đồng kênh ứng dụng trên chuỗi một lần và cho phép những người chơi khác sử dụng lại ứng dụng mà không cần phải lên chuỗi. Trong trường hợp này, kênh ứng dụng ban đầu đóng vai trò như một kênh sổ cái hỗ trợ nhiều kênh ảo, mỗi kênh chạy một phiên bản mới của hợp đồng thông minh của ứng dụng ngoài chuỗi. + +Một trường hợp sử dụng tiềm năng cho các ứng dụng kênh trạng thái là các trò chơi hai người chơi đơn giản, trong đó tiền được phân phối dựa trên kết quả của trò chơi. Lợi ích ở đây là người chơi không cần phải tin tưởng nhau (tính không cần tin cậy) và hợp đồng trên chuỗi, chứ không phải người chơi, kiểm soát việc phân bổ tiền và giải quyết tranh chấp (tính phi tập trung). + +Các trường hợp sử dụng khả thi khác cho các ứng dụng kênh trạng thái bao gồm quyền sở hữu tên ENS, sổ cái NFT, và nhiều hơn nữa. + +### Chuyển khoản nguyên tử {#atomic-transfers} + +Các kênh thanh toán ban đầu bị giới hạn trong việc chuyển tiền giữa hai bên, hạn chế khả năng sử dụng của chúng. Tuy nhiên, sự ra đời của các kênh ảo đã cho phép các cá nhân định tuyến các giao dịch chuyển tiền qua các bên trung gian (tức là nhiều kênh p2p) mà không cần phải mở một kênh mới trên chuỗi. + +Thường được mô tả là "chuyển tiền đa chặng", các khoản thanh toán được định tuyến là nguyên tử (tức là tất cả các phần của giao dịch đều thành công hoặc nó hoàn toàn thất bại). Chuyển khoản nguyên tử sử dụng [Hợp đồng Khóa thời gian Băm (HTLCs)](https://en.bitcoin.it/wiki/Hash_Time_Locked_Contracts) để đảm bảo thanh toán chỉ được giải phóng nếu các điều kiện nhất định được đáp ứng, do đó giảm rủi ro đối tác. + +## Nhược điểm của việc sử dụng các kênh trạng thái {#drawbacks-of-state-channels} + +### Các giả định về tính khả dụng {#liveness-assumptions} + +Để đảm bảo hiệu quả, các kênh trạng thái đặt ra giới hạn thời gian về khả năng của những người tham gia kênh để phản hồi các tranh chấp. Quy tắc này giả định rằng các bên ngang hàng sẽ luôn trực tuyến để giám sát hoạt động của kênh và tranh luận các thách thức khi cần thiết. + +Trong thực tế, người dùng có thể ngoại tuyến vì những lý do ngoài tầm kiểm soát của họ (ví dụ: kết nối internet kém, lỗi cơ học, v.v.). Nếu một người dùng trung thực ngoại tuyến, một bên ngang hàng độc hại có thể khai thác tình hình bằng cách trình bày các trạng thái trung gian cũ cho hợp đồng phân xử và đánh cắp số tiền đã cam kết. + +Một số kênh sử dụng "watchtowers" (tháp canh)—các thực thể chịu trách nhiệm theo dõi các sự kiện tranh chấp trên chuỗi thay cho những người khác và thực hiện các hành động cần thiết, như cảnh báo các bên liên quan. Tuy nhiên, điều này có thể làm tăng chi phí sử dụng một kênh trạng thái. + +### Tính không sẵn có của dữ liệu {#data-unavailability} + +Như đã giải thích trước đó, việc thách thức một tranh chấp không hợp lệ đòi hỏi phải trình bày trạng thái mới nhất, hợp lệ của kênh trạng thái. Đây là một quy tắc khác dựa trên một giả định—rằng người dùng có quyền truy cập vào trạng thái mới nhất của kênh. + +Mặc dù việc mong đợi người dùng kênh lưu trữ các bản sao của trạng thái ứng dụng ngoài chuỗi là hợp lý, dữ liệu này có thể bị mất do lỗi hoặc hỏng hóc cơ học. Nếu người dùng không sao lưu dữ liệu, họ chỉ có thể hy vọng rằng bên kia không hoàn tất một yêu cầu thoát không hợp lệ bằng cách sử dụng các chuyển đổi trạng thái cũ mà họ sở hữu. + +Người dùng Ethereum không phải đối mặt với vấn đề này vì mạng lưới thực thi các quy tắc về tính khả dụng của dữ liệu. Dữ liệu giao dịch được lưu trữ và lan truyền bởi tất cả các nút và có sẵn để người dùng tải xuống nếu và khi cần thiết. + +### Các vấn đề về thanh khoản {#liquidity-issues} + +Để thiết lập một kênh blockchain, những người tham gia cần phải khóa tiền trong một hợp đồng thông minh trên chuỗi trong suốt vòng đời của kênh. Điều này làm giảm tính thanh khoản của người dùng kênh và cũng giới hạn các kênh cho những người có đủ khả năng để giữ tiền bị khóa trên Mainnet. + +Tuy nhiên, các kênh sổ cái—do một nhà cung cấp dịch vụ ngoài chuỗi (OSP) vận hành—có thể giảm bớt các vấn đề về thanh khoản cho người dùng. Hai bên ngang hàng được kết nối với một kênh sổ cái có thể tạo ra một kênh ảo, mà họ có thể mở và hoàn tất hoàn toàn ngoài chuỗi, bất cứ lúc nào họ muốn. + +Các nhà cung cấp dịch vụ ngoài chuỗi cũng có thể mở các kênh với nhiều bên ngang hàng, làm cho chúng hữu ích cho việc định tuyến thanh toán. Tất nhiên, người dùng phải trả phí cho các OSP cho dịch vụ của họ, điều này có thể không mong muốn đối với một số người. + +### Tấn công gây rối {#griefing-attacks} + +Các cuộc tấn công gây rối là một đặc điểm phổ biến của các hệ thống dựa trên bằng chứng gian lận. Một cuộc tấn công gây rối không trực tiếp mang lại lợi ích cho kẻ tấn công nhưng gây ra sự phiền toái (tức là, tổn hại) cho nạn nhân, do đó có tên gọi này. + +Việc chứng minh gian lận dễ bị tấn công gây rối vì bên trung thực phải phản hồi mọi tranh chấp, ngay cả những tranh chấp không hợp lệ, nếu không sẽ có nguy cơ mất tiền. Một người tham gia độc hại có thể quyết định liên tục đăng các chuyển đổi trạng thái cũ trên chuỗi, buộc bên trung thực phải phản hồi bằng trạng thái hợp lệ. Chi phí của các giao dịch trên chuỗi đó có thể tăng lên nhanh chóng, khiến các bên trung thực bị thiệt hại trong quá trình này. + +### Tập hợp người tham gia được xác định trước {#predefined-participant-sets} + +Theo thiết kế, số lượng người tham gia tạo nên một kênh trạng thái vẫn cố định trong suốt vòng đời của nó. Điều này là do việc cập nhật tập hợp người tham gia sẽ làm phức tạp hoạt động của kênh, đặc biệt là khi cấp vốn cho kênh hoặc giải quyết tranh chấp. Việc thêm hoặc bớt người tham gia cũng sẽ yêu cầu hoạt động trên chuỗi bổ sung, làm tăng chi phí phát sinh cho người dùng. + +Mặc dù điều này làm cho các kênh trạng thái dễ hiểu hơn, nó lại hạn chế tính hữu dụng của các thiết kế kênh đối với các nhà phát triển ứng dụng. Điều này một phần giải thích tại sao các kênh trạng thái đã bị loại bỏ để chuyển sang các giải pháp mở rộng khác, chẳng hạn như rollup. + +### Xử lý giao dịch song song {#parallel-transaction-processing} + +Những người tham gia trong kênh trạng thái gửi các bản cập nhật trạng thái theo lượt, đó là lý do tại sao chúng hoạt động tốt nhất cho "các ứng dụng theo lượt" (ví dụ: một ván cờ vua hai người chơi). Điều này loại bỏ nhu cầu xử lý các bản cập nhật trạng thái đồng thời và giảm bớt công việc mà hợp đồng trên chuỗi phải làm để trừng phạt những người đăng bản cập nhật cũ. Tuy nhiên, một tác dụng phụ của thiết kế này là các giao dịch phụ thuộc lẫn nhau, làm tăng độ trễ và làm giảm trải nghiệm người dùng tổng thể. + +Một số kênh trạng thái giải quyết vấn đề này bằng cách sử dụng thiết kế "song công toàn phần" (full-duplex) tách trạng thái ngoài chuỗi thành hai trạng thái "đơn công" (simplex) một chiều, cho phép cập nhật trạng thái đồng thời. Các thiết kế như vậy cải thiện thông lượng ngoài chuỗi và giảm sự chậm trễ của giao dịch. + +## Sử dụng các kênh trạng thái {#use-state-channels} + +Nhiều dự án cung cấp các triển khai của các kênh trạng thái mà bạn có thể tích hợp vào các ứng dụng phi tập trung của mình: + +- [Connext](https://connext.network/) +- [Kchannels](https://www.kchannels.io/) +- [Perun](https://perun.network/) +- [Raiden](https://raiden.network/) +- [Statechannels.org](https://statechannels.org/) + +## Đọc thêm {#further-reading} + +**Các kênh trạng thái** + +- [Tìm hiểu về các giải pháp mở rộng lớp 2 của Ethereum: Kênh trạng thái, Plasma và Truebit](https://medium.com/l4-media/making-sense-of-ethereums-layer-2-scaling-solutions-state-channels-plasma-and-truebit-22cb40dcc2f4) _– Josh Stark, 12 tháng 2 năm 2018_ +- [Các kênh trạng thái - một lời giải thích](https://www.jeffcoleman.ca/state-channels/) _Ngày 6 tháng 11 năm 2015 - Jeff Coleman_ +- [Những điều cơ bản về các kênh trạng thái](https://education.district0x.io/general-topics/understanding-ethereum/basics-state-channels/) _District0x_ +- [Các kênh trạng thái Blockchain: Tình hình hiện tại](https://ieeexplore.ieee.org/document/9627997) + +_Biết về nguồn lực cộng đồng đã giúp đỡ bạn? Chỉnh sửa trang này và bổ sung!_ diff --git a/public/content/translations/vi/developers/docs/scaling/validium/index.md b/public/content/translations/vi/developers/docs/scaling/validium/index.md new file mode 100644 index 00000000000..1b4805ab3a3 --- /dev/null +++ b/public/content/translations/vi/developers/docs/scaling/validium/index.md @@ -0,0 +1,166 @@ +--- +title: Validium +description: "Giới thiệu về một giải pháp mở rộng, Validium hiện đang được cộng đồng Ethereum sử dụng." +lang: vi +sidebarDepth: 3 +--- + +Validium là một [giải pháp mở rộng quy mô](/developers/docs/scaling/) thực thi tính toàn vẹn của các giao dịch bằng các bằng chứng hợp lệ như [ZK-rollup](/developers/docs/scaling/zk-rollups/), nhưng không lưu trữ dữ liệu giao dịch trên Mạng chính Ethereum. Mặc dù tính khả dụng của dữ liệu ngoài chuỗi mang lại những sự đánh đổi, nhưng nó có thể dẫn đến những cải tiến lớn về khả năng mở rộng (validium có thể xử lý [khoảng 9.000 giao dịch trở lên mỗi giây](https://blog.matter-labs.io/zkrollup-vs-validium-starkex-5614e38bc263)). + +## Điều kiện tiên quyết {#prerequisites} + +Bạn nên đọc và hiểu trang của chúng tôi về [mở rộng quy mô Ethereum](/developers/docs/scaling/) và [lớp 2](/layer-2). + +## Validium là gì? {#what-is-validium} + +Validium là các giải pháp mở rộng quy mô sử dụng tính khả dụng và tính toán dữ liệu ngoài chuỗi, được thiết kế để cải thiện thông lượng bằng cách xử lý các giao dịch bên ngoài Mạng chính Ethereum. Giống như các ZK-rollup, validium xuất bản [bằng chứng không kiến thức](/glossary/#zk-proof) để xác minh các giao dịch ngoài chuỗi trên Ethereum. Điều này ngăn chặn các chuyển đổi trạng thái không hợp lệ và tăng cường đảm bảo an ninh cho chuỗi validium. + +Các "bằng chứng hợp lệ" này có thể ở dạng ZK-SNARK (Đối số Kiến thức Không Tương tác Ngắn gọn Không Kiến thức) hoặc ZK-STARK (Đối số Kiến thức Minh bạch Có thể Mở rộng Không Kiến thức). Thông tin thêm về [bằng chứng không kiến thức](https://consensys.net/blog/blockchain-explained/zero-knowledge-proofs-starks-vs-snarks/). + +Các khoản tiền thuộc về người dùng validium được kiểm soát bởi một hợp đồng thông minh trên Ethereum. Validium cung cấp khả năng rút tiền gần như tức thì, giống như các ZK-rollup; một khi bằng chứng hợp lệ cho yêu cầu rút tiền đã được xác minh trên Mạng chính, người dùng có thể rút tiền bằng cách cung cấp [bằng chứng Merkle](/developers/tutorials/merkle-proofs-for-offline-data-integrity/). Bằng chứng Merkle xác thực việc giao dịch rút tiền của người dùng được bao gồm trong một lô giao dịch đã được xác minh, cho phép hợp đồng trên chuỗi xử lý việc rút tiền. + +Tuy nhiên, người dùng validium có thể bị đóng băng tiền và bị hạn chế rút tiền. Điều này có thể xảy ra nếu những người quản lý tính khả dụng của dữ liệu trên chuỗi validium giữ lại dữ liệu trạng thái ngoài chuỗi từ người dùng. Nếu không có quyền truy cập vào dữ liệu giao dịch, người dùng không thể tính toán bằng chứng Merkle cần thiết để chứng minh quyền sở hữu tiền và thực hiện rút tiền. + +Đây là điểm khác biệt chính giữa validium và ZK-rollup—vị trí của chúng trên phổ tính khả dụng của dữ liệu. Cả hai giải pháp đều tiếp cận việc lưu trữ dữ liệu theo cách khác nhau, điều này có ý nghĩa đối với tính bảo mật và tính phi tín nhiệm. + +## Validium tương tác với Ethereum như thế nào? {#how-do-validiums-interact-with-ethereum} + +Validium là các giao thức mở rộng quy mô được xây dựng trên chuỗi Ethereum hiện có. Mặc dù nó thực hiện các giao dịch ngoài chuỗi, một chuỗi validium được quản lý bởi một tập hợp các hợp đồng thông minh được triển khai trên Mạng chính, bao gồm: + +1. **Hợp đồng xác minh**: Hợp đồng xác minh kiểm tra tính hợp lệ của các bằng chứng do nhà điều hành validium gửi khi thực hiện cập nhật trạng thái. Điều này bao gồm các bằng chứng hợp lệ chứng thực tính chính xác của các giao dịch ngoài chuỗi và bằng chứng về tính khả dụng của dữ liệu để xác minh sự tồn tại của dữ liệu giao dịch ngoài chuỗi. + +2. **Hợp đồng chính**: Hợp đồng chính lưu trữ các cam kết trạng thái (gốc Merkle) do các nhà sản xuất khối gửi và cập nhật trạng thái của validium sau khi một bằng chứng hợp lệ được xác minh trên chuỗi. Hợp đồng này cũng xử lý các khoản tiền gửi vào và rút ra từ chuỗi validium. + +Validium cũng dựa vào chuỗi Ethereum chính cho những điều sau: + +### Thanh toán {#settlement} + +Các giao dịch được thực hiện trên validium không thể được xác nhận hoàn toàn cho đến khi chuỗi mẹ xác minh tính hợp lệ của chúng. Tất cả các hoạt động được tiến hành trên validium cuối cùng phải được thanh toán trên Mạng chính. Chuỗi khối Ethereum cũng cung cấp "đảm bảo thanh toán" cho người dùng validium, có nghĩa là các giao dịch ngoài chuỗi không thể bị đảo ngược hoặc thay đổi sau khi đã được cam kết trên chuỗi. + +### Bảo mật {#security} + +Ethereum, hoạt động như một lớp thanh toán, cũng đảm bảo tính hợp lệ của các chuyển đổi trạng thái trên validium. Các giao dịch ngoài chuỗi được thực hiện trên chuỗi validium được xác minh thông qua một hợp đồng thông minh trên lớp Ethereum cơ sở. + +Nếu hợp đồng xác minh trên chuỗi cho rằng bằng chứng không hợp lệ, các giao dịch sẽ bị từ chối. Điều này có nghĩa là các nhà điều hành phải đáp ứng các điều kiện hợp lệ do giao thức Ethereum thực thi trước khi cập nhật trạng thái của validium. + +## Validium hoạt động như thế nào? {#how-does-validium-work} + +### Các giao dịch {#transactions} + +Người dùng gửi giao dịch cho nhà điều hành, một nút chịu trách nhiệm thực hiện các giao dịch trên chuỗi validium. Một số validium có thể sử dụng một nhà điều hành duy nhất để thực thi chuỗi hoặc dựa vào cơ chế [bằng chứng cổ phần (PoS)](/developers/docs/consensus-mechanisms/pos/) để luân chuyển các nhà điều hành. + +Nhà điều hành tổng hợp các giao dịch thành một lô và gửi đến một mạch chứng minh để tạo bằng chứng. Mạch chứng minh chấp nhận lô giao dịch (và các dữ liệu liên quan khác) làm đầu vào và tạo ra một bằng chứng hợp lệ xác minh rằng các hoạt động đã được thực hiện một cách chính xác. + +### Cam kết trạng thái {#state-commitments} + +Trạng thái của validium được băm thành một cây Merkle với gốc được lưu trữ trong hợp đồng chính trên Ethereum. Gốc Merkle, còn được gọi là gốc trạng thái, hoạt động như một cam kết mã hóa đối với trạng thái hiện tại của các tài khoản và số dư trên validium. + +Để thực hiện cập nhật trạng thái, nhà điều hành phải tính toán một gốc trạng thái mới (sau khi thực hiện các giao dịch) và gửi nó đến hợp đồng trên chuỗi. Nếu bằng chứng hợp lệ, trạng thái được đề xuất sẽ được chấp nhận và validium chuyển sang gốc trạng thái mới. + +### Gửi và rút tiền {#deposits-and-withdrawals} + +Người dùng chuyển tiền từ Ethereum sang validium bằng cách gửi ETH (hoặc bất kỳ token nào tương thích với ERC) vào hợp đồng trên chuỗi. Hợp đồng chuyển tiếp sự kiện gửi tiền đến validium ngoài chuỗi, nơi địa chỉ của người dùng được ghi có một số tiền bằng với số tiền gửi của họ. Nhà điều hành cũng bao gồm giao dịch gửi tiền này trong một lô mới. + +Để chuyển tiền trở lại Mạng chính, người dùng validium bắt đầu một giao dịch rút tiền và gửi nó cho nhà điều hành, người xác thực yêu cầu rút tiền và đưa nó vào một lô. Tài sản của người dùng trên chuỗi validium cũng bị hủy trước khi họ có thể thoát khỏi hệ thống. Khi bằng chứng hợp lệ liên quan đến lô được xác minh, người dùng có thể gọi hợp đồng chính để rút phần còn lại của khoản tiền gửi ban đầu của họ. + +Như một cơ chế chống kiểm duyệt, giao thức validium cho phép người dùng rút tiền trực tiếp từ hợp đồng validium mà không cần thông qua nhà điều hành. Trong trường hợp này, người dùng cần cung cấp bằng chứng Merkle cho hợp đồng xác minh để chứng minh một tài khoản được bao gồm trong gốc trạng thái. Nếu bằng chứng được chấp nhận, người dùng có thể gọi hàm rút tiền của hợp đồng chính để rút tiền của họ ra khỏi validium. + +### Gửi lô {#batch-submission} + +Sau khi thực hiện một lô giao dịch, nhà điều hành gửi bằng chứng hợp lệ liên quan đến hợp đồng xác minh và đề xuất một gốc trạng thái mới cho hợp đồng chính. Nếu bằng chứng hợp lệ, hợp đồng chính sẽ cập nhật trạng thái của validium và hoàn tất kết quả của các giao dịch trong lô. + +Không giống như ZK-rollup, các nhà sản xuất khối trên validium không bắt buộc phải xuất bản dữ liệu giao dịch cho các lô giao dịch (chỉ có tiêu đề khối). Điều này làm cho validium trở thành một giao thức mở rộng quy mô hoàn toàn ngoài chuỗi, trái ngược với các giao thức mở rộng quy mô "lai" (tức là [lớp 2](/layer-2/)) xuất bản dữ liệu trạng thái trên chuỗi Ethereum chính bằng cách sử dụng dữ liệu blob, `calldata` hoặc kết hợp cả hai. + +### Tính khả dụng của dữ liệu {#data-availability} + +Như đã đề cập, validium sử dụng mô hình tính khả dụng của dữ liệu ngoài chuỗi, trong đó các nhà điều hành lưu trữ tất cả dữ liệu giao dịch bên ngoài Mạng chính Ethereum. Dấu chân dữ liệu trên chuỗi thấp của Validium giúp cải thiện khả năng mở rộng (thông lượng không bị giới hạn bởi khả năng xử lý dữ liệu của Ethereum) và giảm phí người dùng (chi phí xuất bản dữ liệu trên chuỗi thấp hơn). + +Tuy nhiên, tính khả dụng của dữ liệu ngoài chuỗi lại đặt ra một vấn đề: dữ liệu cần thiết để tạo hoặc xác minh bằng chứng Merkle có thể không khả dụng. Điều này có nghĩa là người dùng có thể không thể rút tiền từ hợp đồng trên chuỗi nếu các nhà điều hành có hành vi độc hại. + +Nhiều giải pháp validium khác nhau cố gắng giải quyết vấn đề này bằng cách phi tập trung hóa việc lưu trữ dữ liệu trạng thái. Điều này liên quan đến việc buộc các nhà sản xuất khối phải gửi dữ liệu cơ bản cho "những người quản lý tính khả dụng của dữ liệu", những người chịu trách nhiệm lưu trữ dữ liệu ngoài chuỗi và cung cấp dữ liệu đó cho người dùng khi có yêu cầu. + +Những người quản lý tính khả dụng của dữ liệu trong validium chứng thực tính khả dụng của dữ liệu cho các giao dịch ngoài chuỗi bằng cách ký vào mỗi lô validium. Những chữ ký này tạo thành một dạng "bằng chứng về tính khả dụng" mà hợp đồng xác minh trên chuỗi sẽ kiểm tra trước khi phê duyệt các bản cập nhật trạng thái. + +Các validium khác nhau trong cách tiếp cận quản lý tính khả dụng của dữ liệu. Một số dựa vào các bên đáng tin cậy để lưu trữ dữ liệu trạng thái, trong khi những người khác sử dụng các trình xác thực được chỉ định ngẫu nhiên cho nhiệm vụ này. + +#### Ủy ban khả dụng dữ liệu (DAC) {#data-availability-committee} + +Để đảm bảo tính khả dụng của dữ liệu ngoài chuỗi, một số giải pháp validium chỉ định một nhóm các thực thể đáng tin cậy, được gọi chung là ủy ban khả dụng dữ liệu (DAC), để lưu trữ các bản sao của trạng thái và cung cấp bằng chứng về tính khả dụng của dữ liệu. DAC dễ triển khai hơn và đòi hỏi ít sự phối hợp hơn vì số lượng thành viên thấp. + +Tuy nhiên, người dùng phải tin tưởng DAC sẽ cung cấp dữ liệu khi cần thiết (ví dụ: để tạo bằng chứng Merkle). Có khả năng các thành viên của ủy ban khả dụng dữ liệu [bị một tác nhân độc hại xâm phạm](https://notes.ethereum.org/DD7GyItYQ02d0ax_X-UbWg?view), sau đó có thể giữ lại dữ liệu ngoài chuỗi. + +[Thông tin thêm về các ủy ban khả dụng dữ liệu trong validium](https://medium.com/starkware/data-availability-e5564c416424). + +#### Tính khả dụng của dữ liệu được bảo đảm {#bonded-data-availability} + +Các validium khác yêu cầu những người tham gia chịu trách nhiệm lưu trữ dữ liệu ngoại tuyến phải đặt cược (tức là khóa) token trong một hợp đồng thông minh trước khi đảm nhận vai trò của họ. Khoản cược này đóng vai trò như một “bảo đảm” để đảm bảo hành vi trung thực của những người quản lý tính khả dụng của dữ liệu và giảm bớt các giả định về sự tin cậy. Nếu những người tham gia này không chứng minh được tính khả dụng của dữ liệu, khoản bảo đảm sẽ bị cắt giảm. + +Trong một kế hoạch tính khả dụng của dữ liệu được bảo đảm, bất kỳ ai cũng có thể được chỉ định để giữ dữ liệu ngoài chuỗi một khi họ cung cấp khoản cược cần thiết. Điều này mở rộng nhóm những người quản lý tính khả dụng của dữ liệu đủ điều kiện, giảm sự tập trung hóa ảnh hưởng đến các ủy ban khả dụng dữ liệu (DAC). Quan trọng hơn, cách tiếp cận này dựa vào các ưu đãi kinh tế tiền mã hóa để ngăn chặn hoạt động độc hại, điều này an toàn hơn đáng kể so với việc chỉ định các bên đáng tin cậy để bảo mật dữ liệu ngoại tuyến trong validium. + +[Thông tin thêm về tính khả dụng của dữ liệu được bảo đảm trong validium](https://blog.matter-labs.io/zkporter-a-breakthrough-in-l2-scaling-ed5e48842fbf). + +## Volition và validium {#volitions-and-validium} + +Validium mang lại nhiều lợi ích nhưng đi kèm với sự đánh đổi (đáng chú ý nhất là tính khả dụng của dữ liệu). Nhưng, cũng như nhiều giải pháp mở rộng quy mô khác, validium phù hợp với các trường hợp sử dụng cụ thể—đó là lý do tại sao volition được tạo ra. + +Volition kết hợp một ZK-rollup và chuỗi validium và cho phép người dùng chuyển đổi giữa hai giải pháp mở rộng quy mô. Với volition, người dùng có thể tận dụng tính khả dụng của dữ liệu ngoài chuỗi của validium cho các giao dịch nhất định, đồng thời vẫn giữ được quyền tự do chuyển sang giải pháp khả dụng dữ liệu trên chuỗi (ZK-rollup) nếu cần. Điều này về cơ bản mang lại cho người dùng quyền tự do lựa chọn sự đánh đổi theo hoàn cảnh riêng của họ. + +Một sàn giao dịch phi tập trung (DEX) có thể thích sử dụng cơ sở hạ tầng có thể mở rộng và riêng tư của validium cho các giao dịch có giá trị cao. Nó cũng có thể sử dụng ZK-rollup cho những người dùng muốn đảm bảo an ninh cao hơn và tính phi tín nhiệm của ZK-rollup. + +## Validium và khả năng tương thích với EVM {#validiums-and-evm-compatibility} + +Giống như ZK-rollup, validium chủ yếu phù hợp với các ứng dụng đơn giản, chẳng hạn như hoán đổi token và thanh toán. Việc hỗ trợ tính toán chung và thực thi hợp đồng thông minh giữa các validium rất khó thực hiện, do chi phí đáng kể để chứng minh các chỉ dẫn của [EVM](/developers/docs/evm/) trong một mạch bằng chứng không kiến thức. + +Một số dự án validium cố gắng giải quyết vấn đề này bằng cách biên dịch các ngôn ngữ tương thích với EVM (ví dụ: Solidity, Vyper) để tạo bytecode tùy chỉnh được tối ưu hóa cho việc chứng minh hiệu quả. Một nhược điểm của phương pháp này là các máy ảo thân thiện với bằng chứng không kiến thức mới có thể không hỗ trợ các mã vận hành EVM quan trọng và các nhà phát triển phải viết trực tiếp bằng ngôn ngữ cấp cao để có trải nghiệm tối ưu. Điều này tạo ra nhiều vấn đề hơn nữa: nó buộc các nhà phát triển phải xây dựng các ứng dụng phi tập trung với một bộ công cụ phát triển hoàn toàn mới và phá vỡ khả năng tương thích với cơ sở hạ tầng Ethereum hiện tại. + +Tuy nhiên, một số nhóm đang cố gắng tối ưu hóa các mã vận hành EVM hiện có cho các mạch chứng minh ZK. Điều này sẽ dẫn đến sự phát triển của một Máy ảo Ethereum không kiến thức (zkEVM), một máy ảo tương thích với EVM tạo ra các bằng chứng để xác minh tính đúng đắn của việc thực thi chương trình. Với zkEVM, các chuỗi validium có thể thực thi các hợp đồng thông minh ngoài chuỗi và gửi bằng chứng hợp lệ để xác minh một phép tính ngoài chuỗi (mà không cần phải thực thi lại) trên Ethereum. + +[Thông tin thêm về zkEVM](https://www.alchemy.com/overviews/zkevm). + +## Validium mở rộng quy mô Ethereum như thế nào? {#scaling-ethereum-with-validiums} + +### 1. Lưu trữ dữ liệu ngoài chuỗi {#offchain-data-storage} + +Các dự án mở rộng quy mô Lớp 2, chẳng hạn như gộp giao dịch lạc quan và ZK-rollup, đánh đổi khả năng mở rộng vô hạn của các giao thức mở rộng quy mô ngoài chuỗi thuần túy (ví dụ: [Plasma](/developers/docs/scaling/plasma/)) để lấy tính bảo mật bằng cách xuất bản một số dữ liệu giao dịch trên L1. Nhưng điều này có nghĩa là các thuộc tính khả năng mở rộng của các bản gộp bị giới hạn bởi băng thông dữ liệu trên Mạng chính Ethereum ([phân mảnh dữ liệu](/roadmap/danksharding/) đề xuất cải thiện dung lượng lưu trữ dữ liệu của Ethereum vì lý do này). + +Validium đạt được khả năng mở rộng bằng cách giữ tất cả dữ liệu giao dịch ngoài chuỗi và chỉ đăng các cam kết trạng thái (và bằng chứng hợp lệ) khi chuyển tiếp các cập nhật trạng thái đến chuỗi Ethereum chính. Tuy nhiên, sự tồn tại của các bằng chứng hợp lệ mang lại cho validium sự đảm bảo an ninh cao hơn so với các giải pháp mở rộng quy mô ngoài chuỗi thuần túy khác, bao gồm Plasma và [chuỗi bên](/developers/docs/scaling/sidechains/). Bằng cách giảm lượng dữ liệu mà Ethereum phải xử lý trước khi xác thực các giao dịch ngoài chuỗi, các thiết kế validium giúp mở rộng đáng kể thông lượng trên Mạng chính. + +### 2. Bằng chứng đệ quy {#recursive-proofs} + +Bằng chứng đệ quy là một bằng chứng hợp lệ xác minh tính hợp lệ của các bằng chứng khác. Những "bằng chứng của các bằng chứng" này được tạo ra bằng cách tổng hợp đệ quy nhiều bằng chứng cho đến khi một bằng chứng cuối cùng xác minh tất cả các bằng chứng trước đó được tạo ra. Bằng chứng đệ quy giúp mở rộng quy mô tốc độ xử lý của chuỗi khối bằng cách tăng số lượng giao dịch có thể được xác minh trên mỗi bằng chứng hợp lệ. + +Thông thường, mỗi bằng chứng hợp lệ mà nhà điều hành validium gửi cho Ethereum để xác minh sẽ xác thực tính toàn vẹn của một khối duy nhất. Trong khi đó, một bằng chứng đệ quy duy nhất có thể được sử dụng để xác nhận tính hợp lệ của một số khối validium cùng một lúc—điều này có thể thực hiện được vì mạch chứng minh có thể tổng hợp đệ quy một số bằng chứng khối thành một bằng chứng cuối cùng. Nếu hợp đồng xác minh trên chuỗi chấp nhận bằng chứng đệ quy, tất cả các khối cơ bản sẽ được hoàn tất ngay lập tức. + +## Ưu và nhược điểm của validium {#pros-and-cons-of-validium} + +| Ưu điểm | Nhược điểm | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Bằng chứng hợp lệ thực thi tính toàn vẹn của các giao dịch ngoài chuỗi và ngăn các nhà điều hành hoàn tất các cập nhật trạng thái không hợp lệ. | Việc tạo ra các bằng chứng hợp lệ đòi hỏi phần cứng đặc biệt, điều này gây ra rủi ro tập trung hóa. | +| Tăng hiệu quả sử dụng vốn cho người dùng (không có sự chậm trễ trong việc rút tiền trở lại Ethereum) | Hỗ trợ hạn chế cho tính toán chung/hợp đồng thông minh; yêu cầu các ngôn ngữ chuyên biệt để phát triển. | +| Không dễ bị tấn công bởi một số cuộc tấn công kinh tế mà các hệ thống dựa trên bằng chứng gian lận phải đối mặt trong các ứng dụng có giá trị cao. | Yêu cầu sức mạnh tính toán cao để tạo ra các bằng chứng ZK; không hiệu quả về chi phí cho các ứng dụng có thông lượng thấp. | +| Giảm phí gas cho người dùng bằng cách không đăng calldata lên Mạng chính Ethereum. | Thời gian hoàn tất chủ quan chậm hơn (10-30 phút để tạo bằng chứng ZK) nhưng nhanh hơn để hoàn tất hoàn toàn vì không có độ trễ thời gian tranh chấp. | +| Phù hợp với các trường hợp sử dụng cụ thể, như giao dịch hoặc chơi game trên chuỗi khối ưu tiên quyền riêng tư và khả năng mở rộng của giao dịch. | Người dùng có thể bị ngăn không cho rút tiền vì việc tạo bằng chứng Merkle về quyền sở hữu đòi hỏi dữ liệu ngoài chuỗi phải luôn khả dụng. | +| Tính khả dụng của dữ liệu ngoài chuỗi cung cấp mức thông lượng cao hơn và tăng khả năng mở rộng. | Mô hình bảo mật dựa trên các giả định tin cậy và các ưu đãi kinh tế tiền mã hóa, không giống như ZK-rollup, vốn hoàn toàn dựa vào các cơ chế bảo mật mã hóa. | + +### Sử dụng Validium/Volition {#use-validium-and-volitions} + +Nhiều dự án cung cấp các triển khai của Validium và volition mà bạn có thể tích hợp vào các ứng dụng phi tập trung của mình: + +**StarkWare StarkEx** - _StarkEx là một giải pháp mở rộng quy mô Lớp 2 (L2) của Ethereum dựa trên các bằng chứng hợp lệ. Nó có thể hoạt động ở các chế độ khả dụng dữ liệu ZK-Rollup hoặc Validium._ + +- [Tài liệu](https://docs.starkware.co/starkex-v4/starkex-deep-dive/data-availability-modes#validium) +- [Trang web](https://starkware.co/starkex/) + +**Matter Labs zkPorter**- _zkPorter là một giao thức mở rộng quy mô Lớp 2 giải quyết vấn đề tính khả dụng của dữ liệu bằng một phương pháp lai kết hợp các ý tưởng của zkRollup và phân mảnh. Nó có thể hỗ trợ một số lượng phân mảnh tùy ý, mỗi phân mảnh có chính sách khả dụng dữ liệu riêng._ + +- [Blog](https://blog.matter-labs.io/zkporter-a-breakthrough-in-l2-scaling-ed5e48842fbf) +- [Tài liệu](https://docs.zksync.io/zksync-protocol/rollup/data-availability) +- [Trang web](https://zksync.io/) + +## Đọc thêm {#further-reading} + +- [Validium và Ma trận 2x2 của Lớp 2 — Số 99](https://www.buildblockchain.tech/newsletter/issues/no-99-validium-and-the-layer-2-two-by-two) +- [ZK-rollup và Validium](https://blog.matter-labs.io/zkrollup-vs-validium-starkex-5614e38bc263) +- [Volition và Phổ Khả dụng Dữ liệu Mới nổi](https://medium.com/starkware/volition-and-the-emerging-data-availability-spectrum-87e8bfa09bb) +- [Rollup, Validium và Volition: Tìm hiểu về các Giải pháp Mở rộng quy mô Ethereum Hot nhất](https://www.defipulse.com/blog/rollups-validiums-and-volitions-learn-about-the-hottest-ethereum-scaling-solutions) +- [Hướng dẫn thực tế về Rollup của Ethereum](https://web.archive.org/web/20241108192208/https://research.2077.xyz/the-practical-guide-to-ethereum-rollups)