BTC
ETH
HTX
SOL
BNB
Xem thị trường
简中
繁中
English
日本語
한국어
ภาษาไทย
Tiếng Việt

Đọc 8 trạng thái giao dịch Ethereum có thể gặp trong một bài viết

区块链大本营
特邀专栏作者
Bài viết này có khoảng 3253 từ, đọc toàn bộ bài viết mất khoảng 5 phút
Trong bài viết này, chúng ta sẽ tập trung vào vòng đời giao dịch phức tạp trên Ethereum; những thách thức đối với các nhà phát triển đang cố gắng tạo ra các dapp mang lại trải nghiệm người dùng lý t
Tóm tắt AI
Trong bài viết này, chúng ta sẽ tập trung vào vòng đời giao dịch phức tạp trên Ethereum; những thách thức đối với các nhà phát triển đang cố gắng tạo ra các dapp mang lại trải nghiệm người dùng lý t

Lưu ý của biên tập viên: Bài viết này đến từTrại Blockchain (ID: blockchain_camp)Lưu ý của biên tập viên: Bài viết này đến từ

Trại Blockchain (ID: blockchain_camp)

Trại Blockchain (ID: blockchain_camp)

, Tác giả: dfuse, được Odaily sao chép với sự cho phép.

Bất cứ khi nào một giao dịch được gửi tới mạng Ethereum, nó sẽ trải qua một loạt trạng thái khá phức tạp và không phải mọi chuyển đổi trạng thái đều chuyển tiếp - giao dịch có thể được khôi phục về trạng thái trước đó, nó có thể được thay thế bằng một Giao dịch thay thế khác và có thể dĩa hoàn chỉnh. (Vòng đời của một giao dịch được mô tả chi tiết bên dưới.)

Theo dõi tiến trình của một giao dịch trong dapp và cung cấp trải nghiệm tốt cho người dùng là một thách thức. Ngày nay, nhiều dapp dựa trên Ethereum có thể cung cấp trải nghiệm người dùng hấp dẫn nhưng vẫn tương đối tĩnh: ứng dụng có thể hiển thị trạng thái giao dịch tại một thời điểm nhất định nhưng phải được làm mới (nhấp để làm mới hoặc giao diện người dùng dapp làm mới trang định kỳ) để nhận thông tin cập nhật. Có nhiều giao diện tương đối năng động hơn trên thị trường, nhưng độ chi tiết của dữ liệu được cung cấp vẫn chưa đủ tốt hoặc/trong khi do lưu lượng truy cập mạng cao, nó áp đặt tải trọng cao lên các nút chuỗi khối cơ bản của nó.

Tiếp theo, chúng ta sẽ thảo luận về lý do tại sao lại như vậy và cách cập nhật trạng thái giao dịch chi tiết theo cách hiệu quả với mạng và máy chủ có thể mang lại trải nghiệm mượt mà cho người dùng trong dapps đáp ứng các tiêu chuẩn hiện đại.

tiêu đề phụ

Giao diện Dapp hôm nay

Người dùng thường xuyên cần cập nhật thông tin trong quá trình giao dịch (ví dụ để biết khi nào chuyển xong) nên dapp sẽ đặt nút "làm mới" trên giao diện (hoặc tự động refresh trang cho người dùng theo định kỳ), hoặc người dùng cần nhấp trực tiếp vào nút Làm mới của trình duyệt để nhận các bản cập nhật.

Một số dapp có trải nghiệm người dùng trưởng thành hơn sẽ hiển thị các bản cập nhật động về giao dịch cho người dùng. Họ thăm dò các yêu cầu AJAX trong nền, kiểm tra kỹ các nút Ethereum của họ để cập nhật và đăng các bản cập nhật lên giao diện người dùng. Làm như vậy rất phức tạp vì dapp phải thực hiện nhiều lệnh gọi API truy vấn nhiều nguồn dữ liệu khác nhau (bao gồm các khối, mempool và điều kiện mạng) để theo dõi vòng đời của giao dịch từ đầu đến cuối.

Cách tiếp cận này có nhược điểm: hoặc các giao dịch được cập nhật không thường xuyên và độ chi tiết của thông tin lớn, khiến người dùng muốn nhấp vào "làm mới" nhiều lần để nhận được các bản cập nhật nhanh hơn; hoặc dapp phải thăm dò chuỗi khối thường xuyên, dẫn đến một lượng lớn lưu lượng truy cập Mạng , áp đặt tải trọng cao lên các nút chuỗi khối bên dưới.

tiêu đề phụ

  • Tại sao không sử dụng giao diện dựa trên sự kiện trên chuỗi?

  • Đối với các nhà phát triển dapp, thực hiện các trang tĩnh hoặc bỏ phiếu là hai tùy chọn duy nhất có sẵn, phản ánh bản chất của API do các nút Ethereum cung cấp. Nếu có một giao diện dựa trên các sự kiện trên chuỗi, có thể nhận các cập nhật trạng thái giao dịch được đẩy vào chuỗi và đưa ra phản hồi theo thời gian thực cho người dùng, thì các dapp có thể cung cấp trải nghiệm người dùng tốt hơn - trong khi các nút Ethereum tiêu chuẩn không cung cấp thời gian thực phong phú Dữ liệu giao dịch.

  • Các nút Ethereum cung cấp khả năng đọc luồng các sự kiện trên chuỗi, nhưng chức năng này bị hạn chế và chỉ khả dụng thông qua chức năng PUB/SUB bằng giao diện JSON-RPC của Ethereum (không khả dụng khi sử dụng GraphQL). Giao diện PUB/SUB cho phép các dapp nhận thông báo cho một số loại sự kiện:

  • newHeads - mỗi khi một tiêu đề khối mới được thêm vào chuỗi

newPendingTransactions - hàm băm của tất cả các giao dịch đã vào trạng thái chờ xử lý và được ký bởi các khóa có sẵn trong nút (và điều này rất hiếm trên các nút công khai)

đồng bộ hóa - Cho biết khi nào một nút bắt đầu hoặc dừng đồng bộ hóa

tiêu đề phụ

Vòng đời giao dịch Ethereum

Các giao dịch Ethereum có vòng đời phức tạp. Mỗi giao dịch sẽ trải qua nhiều trạng thái (state), trải qua nhiều thay đổi trạng thái khác nhau trong suốt quá trình, và có thể tiến hoặc lùi.

  • tiêu đề phụ

  • trạng thái giao dịch

  • Từ khi gửi một giao dịch Ethereum đến khi vào một khối (với xác suất thành công nhất định), nó sẽ trải qua một loạt trạng thái như sau:

  • UNKNOWN (Không xác định): Một giao dịch chưa được phát hiện hoặc xử lý bởi mạng được xác định là ở trạng thái UNKOWN.

  1. ĐANG CHỜ XỬ LÝ: Các giao dịch đang chờ được chọn và xử lý bởi những người khai thác trong cái mà chúng tôi gọi là mempool. Công cụ khai thác thường chọn các giao dịch có giá gas cao hơn trước, vì vậy các giao dịch có giá gas thấp hơn có thể ở trạng thái CHỜ XỬ LÝ trong một thời gian dài. Các giao dịch có giá xăng thấp nhất có thể không bao giờ được chọn, điều này sẽ khiến chúng ở trạng thái CHỜ XỬ LÝ vô thời hạn.

  2. IN_BLOCK: Khi những người khai thác chọn thành công một giao dịch và xử lý nó thành một khối, giao dịch đó sẽ chuyển sang trạng thái IN_BLOCK. Nếu một giao dịch đi vào trạng thái IN_BLOCK, nhưng khối đó ở dạng phân nhánh, thì giao dịch có thể trở lại trạng thái PENDING.

Một giao dịch khác từ cùng một người gửi có cùng nonce chuyển sang trạng thái IN_BLOCK hoặc



Một giao dịch khác từ cùng một người gửi với cùng một lần xuất hiện nhưng giá gas cao hơn 12% sẽ chuyển sang trạng thái ĐANG CHỜ

Sơ đồ dưới đây cho thấy các trạng thái này và quá trình chuyển đổi giữa chúng.

  • tiêu đề phụ

  • chuyển trạng thái

  • Như thể hiện trong hình trên, sự chuyển đổi giữa các trạng thái cũng được xác định bằng tên.

  • POOLED (vào nhóm): Các giao dịch ở trạng thái UNKOWN (không xác định) sẽ vào nhóm giao dịch chờ các thợ mỏ lựa chọn, được gọi là POOLED và vào trạng thái PENDING (đang chờ xử lý). Giao dịch ở trạng thái REPLACED, nếu điều kiện thay thế không còn đúng nữa (ví dụ: trong một số trường hợp hiếm hoi, giao dịch có giá gas thấp trong IN_BLOCK được phân nhánh và thay thế giao dịch đó bằng cùng một nonce và gửi nếu giao dịch trước đó là vẫn nổi trên mạng), cũng có thể thay đổi lại trạng thái POOLED.

  • KHAI THÁC (khai thác): Giao dịch được khai thác là giao dịch được xử lý bởi một người khai thác, giao dịch này tạo ra một khối. Sau khi được khai thác, một giao dịch được coi là ở trạng thái IN_BLOCK. Do tính chất ngang hàng của mạng Ethereum, từ góc độ của một nút được chỉ định, một giao dịch có thể trực tiếp chuyển sang trạng thái IN_BLOCK từ trạng thái UNKNOWN (không xác định) mà không cần thông qua trạng thái PENDING (đang chờ xử lý) một cách rõ ràng. Vì lý do tương tự, một giao dịch cũng có thể chuyển trực tiếp từ trạng thái REPLACED sang trạng thái IN_BLOCK mà không cần trải qua trạng thái PENDING, được giám sát từ phối cảnh của một nút nhất định.

FORKED (phân nhánh): Khi một giao dịch được khai thác nằm trong một khối đã bị mạng thu hồi, đó là một giao dịch được phân nhánh. Tất cả các giao dịch trong khối đó sẽ lần lượt được rẽ nhánh, từ trạng thái IN_BLOCK (khối đến) trở lại trạng thái PENDING (chờ xử lý).

ĐÃ XÁC NHẬN: Một giao dịch ở trạng thái IN_BLOCK sẽ được xác nhận mỗi khi khối con tiếp theo của nó được khai thác.

Như đã đề cập ở trên, vòng đời của các giao dịch trên Ethereum rất phức tạp, điều này khiến các dapp khó theo dõi chính xác và cung cấp các bản cập nhật liền mạch và trơn tru cho người dùng.

tiêu đề phụ

Dễ dàng theo dõi trạng thái giao dịch

Nền tảng dfuse cung cấp một giao diện phong phú có khả năng giám sát trực tuyến, hỗ trợ theo dõi chi tiết theo thời gian thực về vòng đời của các giao dịch Ethereum. API trình theo dõi trạng thái giao dịch Ethereum dfuse cho phép các nhà phát triển gửi các giao dịch Ethereum và sau đó nhận ngay các cập nhật trạng thái chi tiết trên cùng một kênh dữ liệu, theo dõi tiến trình của giao dịch trong suốt vòng đời của nó.

Sử dụng GraphQL, bạn có thể theo dõi các thay đổi trong các loại giao dịch được chỉ định trong thời gian thực, đồng thời chỉ định chính xác dữ liệu bạn muốn nhận mỗi khi giao dịch thay đổi. Nền tảng dfuse xử lý sự phức tạp của việc theo dõi các giao dịch và truyền chúng tới các dapp trong thời gian thực khi các sự kiện xảy ra.

Hình ảnh động bên dưới cho thấy một giao dịch trải qua vòng đời phức tạp này — nó trải qua tám lần chuyển đổi trạng thái trước khi được đưa vào một khối và được xác nhận.

Nếu dfuse không được sử dụng, dapp phải truy cập lại chuỗi khối để nắm bắt tất cả các chuyển đổi mà giao dịch trải qua và cập nhật nó cho người dùng, đồng thời mã phụ trợ cần được chuẩn bị để xử lý từng chuyển đổi trạng thái.

Với dfuse, các dapp chỉ cần nhận các bản cập nhật phát trực tuyến qua một kết nối duy nhất và dfuse sẽ theo dõi giao dịch cho bạn thông qua các bước ngoặt khác nhau cho đến khi số phận của nó được hoàn tất.

  • tiêu đề phụ

  • Nền tảng hiện đại cho Dapps nâng cao

  • API Vòng đời chỉ là một phần nhỏ và quan trọng của nền tảng dfuse. dfuse cung cấp một lớp cơ sở hạ tầng hiện đại hoàn chỉnh cho các dapp, cụ thể là:

  • nhanh,

  • có thể mở rộng,

ETH
Chào mừng tham gia cộng đồng chính thức của Odaily
Nhóm đăng ký:
https://t.me/Odaily_News
Nhóm trò chuyện:
https://t.me/Odaily_GoldenApe
Tài khoản chính thức:
https://twitter.com/OdailyChina
Mục lục bài viết
Thư viện tác giả
Tải ứng dụng Odaily Nhật Báo Hành Tinh
Hãy để một số người hiểu Web3.0 trước
IOS
Android