
Lắng nghe các sự kiện onchain trên Solana
Giới thiệu
Một trong những phần cơ bản nhất khi làm nhà phát triển trong lĩnh vực crypto là thiết lập các hệ thống lắng nghe blockchain. Bạn có thể cần theo dõi xác nhận thanh toán, giao dịch bán NFT, chuyển tiền hoặc chỉ đơn giản là giám sát tài khoản vì mục đích bảo mật. Dù trường hợp sử dụng là gì, các hệ thống bạn xây dựng để theo dõi chuỗi phải có khả năng chịu lỗi, đáng tin cậy và được tối ưu hóa về độ trễ.
Trong bài viết này, chúng ta sẽ tìm hiểu một số cách xây dựng các hệ thống như vậy trên Solana, các trường hợp sử dụng mẫu và cách xây dựng những hệ thống tốt hơn với Helius trong tương lai.
Lắng nghe blockchain
Có hai cách chính để lắng nghe các sự kiện on-chain:
- Thăm dò
- Truyền phát
Thăm dò là phương thức trong đó máy khách hoặc ứng dụng liên tục kiểm tra máy chủ hay nguồn dữ liệu để tìm dữ liệu mới. Việc này có thể được thực hiện theo khoảng thời gian cố định hoặc theo yêu cầu. Khi một yêu cầu được gửi đến máy chủ, máy chủ sẽ phản hồi bằng dữ liệu mới nhất, bất kể có thay đổi hay không. Điều này có nghĩa là máy khách hoặc ứng dụng có thể nhận cùng một dữ liệu nhiều lần, ngay cả khi không có bản cập nhật nào.
Ngược lại, truyền phát là kỹ thuật trong đó máy chủ đẩy dữ liệu đến máy khách hoặc ứng dụng khi có bản cập nhật. Nhờ đó, máy khách không cần liên tục yêu cầu dữ liệu và máy chủ chỉ gửi dữ liệu khi có thay đổi. Điều này giúp truyền dữ liệu hiệu quả và theo thời gian thực hơn vì máy chủ chỉ gửi dữ liệu liên quan.
Mặc dù thăm dò là một kỹ thuật đơn giản và được sử dụng rộng rãi, phương thức này có thể tạo ra lưu lượng mạng lớn và tiêu tốn nhiều tài nguyên, đặc biệt khi yêu cầu được gửi thường xuyên. Ngược lại, truyền phát hiệu quả hơn vì máy chủ chỉ gửi các bản cập nhật, qua đó giảm lượng dữ liệu được truyền và lưu lượng mạng.
Truyền phát thường được sử dụng trong các ứng dụng mà việc cập nhật dữ liệu theo thời gian thực đóng vai trò thiết yếu, chẳng hạn như bảng tin thị trường chứng khoán, cập nhật mạng xã hội và trò chơi trực tuyến. Thăm dò phổ biến hơn trong các ứng dụng mà dữ liệu được cập nhật ít thường xuyên hơn hoặc không quá cấp thiết, chẳng hạn như ứng dụng email hoặc trang tin tức.
Mặc dù cả hai kỹ thuật đều có ưu và nhược điểm, truyền phát nhìn chung là phương thức hiệu quả và được ưu tiên hơn cho việc cập nhật dữ liệu theo thời gian thực, còn thăm dò vẫn hữu ích với một số ứng dụng có tần suất cập nhật dữ liệu thấp hơn.
Với hầu hết các loại quy trình làm việc trên blockchain — đặc biệt là Solana — bạn nên sử dụng truyền phát. Có một vài lý do cho lựa chọn này, nhưng truyền phát sẽ dễ triển khai hơn nhiều và cũng dễ xử lý hơn trong các trường hợp có lưu lượng lớn, vốn là thế mạnh của Solana.
Cách lắng nghe các sự kiện onchain trên Solana
Solana là một blockchain rất nhanh. Blockchain này tạo ra các khối mới sau mỗi 400 mili giây và các khối này thường chứa hàng nghìn giao dịch. Điều đáng kinh ngạc là đây sẽ là tốc độ chậm nhất của Solana. Khi các kỹ sư cốt lõi tiếp tục phát triển hệ thống, tốc độ xử lý dữ liệu mới của chuỗi sẽ chỉ ngày càng tăng. Vì vậy, điều quan trọng là phải thiết kế hệ thống với khả năng mở rộng ngay từ đầu.
May mắn là bạn có một số phương thức để lắng nghe dữ liệu on-chain trên Solana:
- Thăm dò
- WebSockets
- Geyser
- Helius Webhooks
Thăm dò
Đây là cách ít được ưu tiên nhất để lắng nghe sự kiện trên Solana, dù về mặt khái niệm có thể là cách đơn giản nhất.
Tùy vào dữ liệu muốn lấy, bạn chỉ cần thiết lập một vòng lặp liên tục gọi phương thức JSON-RPC trên một nút RPC Solana. Các trường hợp sử dụng phổ biến gồm thăm dò phương thức getBlock để lắng nghe các khối mới hoặc thăm dò `getSignaturesForAddress` để kiểm tra các giao dịch mới của một địa chỉ nhất định.
Điều thú vị là đây cũng có thể là phương thức tốt nhất cho những trường hợp sử dụng rất nâng cao, khi bạn có logic tùy chỉnh riêng để kích hoạt các bản cập nhật mới.
WebSockets
Các RPC Solana cũng cung cấp WebSockets PubSub để nhà phát triển kết nối. Các loại sự kiện hiện có gồm:
- accountUnsubscribe
- accountSubscribe
- logsSubscribe
- logsUnsubscribe
- programSubscribe
- programUnsubscribe
- signatureSubscribe
- signatureUnsubscribe
- slotSubscribe
- slotUnsubscribe
Dưới đây là một đoạn mã mẫu ngắn bằng JavaScript để lắng nghe thay đổi của tài khoản thông qua RPC Helius có hỗ trợ WebSockets:
const solanaWeb3 = require(‘@solana/web3.js’)
const connection = new solanaWeb3.Connection(“https://rpc.helius.xyz?api-key=“);
(async () => {
connection.onAccountChange(
new solanaWeb3.PublicKey(“5yv6Vh8FNx93TXeSS94xy8VLZMbTqx4vXp7Zg5bDLZtE”),
(updatedAccountInfo, context) => console.log(“Updated account info: “, updatedAccountInfo),“confirmed” );
})();Một lưu ý rất quan trọng về WebSockets là dù chúng rất hữu ích cho việc tạo nguyên mẫu, trên thực tế chúng tôi nhận thấy chúng khá mong manh và không đáng tin cậy. Bạn đặc biệt không nên sử dụng WebSockets cho các quy trình làm việc tối quan trọng vì sẽ bỏ lỡ sự kiện.
Geyser
Tóm tắt — các nút trên Solana có thể truyền phát dữ liệu trực tiếp đến bạn thông qua giao diện plugin cho phép tùy chỉnh cách nhận dữ liệu. Đây là cách truyền phát dữ liệu nhanh nhất và có độ trễ thấp nhất trên Solana, đồng thời là yêu cầu bắt buộc cho những tác vụ như thanh lý DeFi và các ứng dụng nhạy cảm với độ trễ.
Các trình xác thực và RPC Solana có một phương thức truyền phát dữ liệu riêng, có nguồn gốc từ Solana: plugin Geyser.
Các trình xác thực đã được cải tiến để hỗ trợ một cơ chế plugin gọi là plugin "Geyser". Thông qua cơ chế này, thông tin về tài khoản, slot, khối và giao dịch có thể được truyền đến các kho dữ liệu bên ngoài như cơ sở dữ liệu quan hệ, cơ sở dữ liệu NoSQL hoặc Kafka. Sau đó, các dịch vụ RPC có thể được phát triển để sử dụng dữ liệu từ những kho dữ liệu bên ngoài này, với khả năng tối ưu hóa linh hoạt và có trọng tâm hơn, chẳng hạn như lưu vào bộ nhớ đệm và lập chỉ mục.
Đáng tiếc, việc thiết lập Geyser có thể khá phức tạp và tốn kém. Ngay cả sau khi đã thiết lập, bạn vẫn cần đầu tư đáng kể vào DevOps để bảo đảm hệ thống vận hành trơn tru. May mắn là tại Helius, chúng tôi đã phát triển GeyserVM — cho phép bạn tải plugin lên và đưa chúng vào hoạt động chỉ trong vài giây. Các cụm có tính sẵn sàng cao và khả năng dự phòng của chúng tôi bảo đảm bạn không phải lo về bất kỳ vấn đề dữ liệu nào. Hơn nữa, nhờ dùng chung tài nguyên, bạn có thể tiết kiệm hơn 200% chi phí hằng tháng!
Nếu muốn sử dụng Geyser-as-a-Service chuyên dụng, tất nhiên chúng tôi cũng cung cấp dịch vụ này. Nhấp vào đây để tìm hiểu thêm.
Webhook
Webhook là một khái niệm đơn giản. Nói ngắn gọn, webhook lắng nghe các sự kiện và gửi chúng đến máy chủ bạn đã thiết lập khi chúng xảy ra. Ví dụ: bạn có thể muốn gửi thông báo đến máy chủ Discord mỗi khi có một giao dịch bán NFT — webhook có thể thực hiện việc này một cách liền mạch.
Với hầu hết các quy trình lắng nghe sự kiện trên Solana, webhook là phương thức dễ dùng, linh hoạt và tiết kiệm chi phí nhất. Bạn chỉ nên cân nhắc lại việc dùng webhook trong các trường hợp yêu cầu độ trễ cực thấp, khi chênh lệch 5 mili giây có thể quyết định sự thành bại của ứng dụng — chẳng hạn như giao dịch tần suất cao.
Tại Helius, chúng tôi đã xây dựng dịch vụ webhook mạnh mẽ nhất trong toàn bộ lĩnh vực crypto.
Bạn có thể lắng nghe tới 100.000 địa chỉ trên mỗi webhook, cấu hình các loại sự kiện muốn lắng nghe (chúng tôi phân tích chúng cho bạn!) và chỉ cần nhập URL máy chủ — đó là tất cả những gì cần làm để bắt đầu miễn phí.
Một trong nhiều lợi ích của dịch vụ như thế này là bạn không chỉ tiết kiệm được hàng tuần hoặc hàng tháng công sức và thời gian phát triển, mà còn có một backend linh hoạt có thể mở rộng cùng bạn khi phát triển.
Các trường hợp sử dụng
Vậy là giờ bạn đã biết cách lắng nghe các sự kiện on-chain trên Solana. Tiếp theo nên làm gì? Dưới đây là một số trường hợp sử dụng có thể đáng quan tâm:
Bot
- Khi một NFT được niêm yết trên thị trường X, hãy kích hoạt hành động "mua NFT".
- Khi một vị thế ký quỹ không còn an toàn, hãy kích hoạt hành động "thanh lý".
Giám sát & cảnh báo
- Khi một chương trình phát ra một log nhất định, hãy kích hoạt tích hợp PagerDuty.
- Khi số dư của một tài khoản token thay đổi hơn X%, hãy dùng Dialect để gửi cảnh báo.
Lập chỉ mục theo sự kiện
- Khi có bất kỳ giao dịch nào xảy ra với một chương trình nhất định, hãy gửi trực tiếp giao dịch đó đến cơ sở dữ liệu hoặc backend của bạn.
Thông báo & theo dõi hoạt động
- Khi có giao dịch chuyển từ ví X sang ví Y — hãy gửi thông báo Slack hoặc email.
Phân tích & log
- Khi sự kiện X xảy ra, hãy gửi sự kiện đó đến pipeline ETL hoặc lưu trực tiếp trên Helius để xem xu hướng theo thời gian.
Tự động hóa quy trình làm việc
- Khi sự kiện X xảy ra, hãy kích hoạt một tập hợp hành động bất kỳ.
Kết luận
Trong bài viết này, chúng ta đã tìm hiểu sự khác biệt giữa thăm dò và truyền phát, các cách lắng nghe blockchain Solana cũng như một số trường hợp sử dụng mẫu.
Tóm lại, bạn có thể lắng nghe các sự kiện on-chain trên Solana thông qua thăm dò, WebSockets, Geyser hoặc webhook Helius. Mỗi phương thức đều có ưu và nhược điểm, vì vậy điều quan trọng là phải cân nhắc các yêu cầu của hệ thống trước khi quyết định triển khai phương thức nào. Cảm ơn bạn đã đọc!
Bài viết liên quan
Đăng ký nhận tin từ Helius
Luôn cập nhật những thông tin mới nhất về phát triển Solana và nhận thông báo khi chúng tôi đăng bài


