matchMints của LaserStream cho phép một đăng ký giao dịch gRPC khớp với các token mint trong số dư token trước/sau giao dịch, ngoài các khóa tài khoản của giao dịch.
Đặt một mint vào accountInclude, thiết lập matchMints: true và bạn sẽ nhận được mọi giao dịch tương tác với token đó: chuyển, hoán đổi, mint-to, đốt và đóng tài khoản.
matchMints chỉ khả dụng trên LaserStream gRPC. Tính năng này chưa khả dụng trên LaserStream WebSocket.Vấn đề: bộ lọc tài khoản thông thường bỏ sót hầu hết các giao dịch chuyển token
Khi theo dõi một token bằngaccountInclude: [mint], bạn chỉ khớp với các giao dịch mà pubkey của mint xuất hiện trong các khóa tài khoản của giao dịch.
Một lệnh SPL Transfer điển hình không bao giờ tham chiếu đến mint. Lệnh này chỉ định tài khoản token nguồn, tài khoản token đích và chủ sở hữu, vì vậy bộ lọc tài khoản thông thường sẽ bỏ sót thao tác phổ biến nhất trên bất kỳ token nào.
Chỉ những lệnh truyền trực tiếp mint mới khớp, chẳng hạn như MintTo, Burn, TransferChecked và các giao dịch hoán đổi có tài khoản chương trình bao gồm mint. Cách giải quyết duy nhất trước đây là truyền phát tất cả giao dịch và tự kiểm tra số dư token của từng giao dịch.
Cách matchMints hoạt động
Thiết lập matchMints: true trên một bộ lọc giao dịch và LaserStream sẽ tạo một tập hợp mint từ preTokenBalances và postTokenBalances của giao dịch.
Sau đó, các danh sách accountInclude, accountExclude và accountRequired của bạn được khớp với cả khóa tài khoản lẫn tập hợp mint đó. Một mint đáp ứng điều kiện nếu bất kỳ tài khoản token nào của mint xuất hiện trong một trong hai danh sách số dư, bất kể số dư có thay đổi hay không.
Cờ này cần được bật rõ ràng. Các bộ lọc không có cờ này vẫn hoạt động chính xác như trước, vì vậy bạn có thể thêm cờ vào một đăng ký hiện có mà không làm thay đổi dữ liệu đăng ký đó đang nhận. Các mint SPL và Token-2022 đều hoạt động vì cả hai chương trình đều điền số dư token trước/sau.
Ngữ nghĩa
Phần còn lại của logic lọc không thay đổi:
- Các điều kiện trong cùng một bộ lọc có tên vẫn được kết hợp bằng AND (
vote,failed,signaturevà các danh sách tài khoản). - Nhiều bộ lọc có tên vẫn được kết hợp bằng OR.
- Các giá trị trong một danh sách được kết hợp bằng OR (ngoại trừ
accountRequired, trong đó tất cả đều phải khớp). - Giao dịch không có số dư token sẽ quay về chỉ khớp theo khóa.
matchMintskhông bao giờ thêm các giao dịch không có hoạt động token. - Chỉ riêng
matchMintskhông giới hạn luồng. Bạn vẫn cần ít nhất một khóa hoặc mint trong danh sách tài khoản (hoặc một điều kiện giới hạn khác) để bộ lọc được chấp nhận.
LaserStream khớp mint theo pubkey chính xác. Không có chế độ “chỉ số dư đã thay đổi” cho mint, khác với
tokenAccounts: "balanceChanged".Sử dụng trong LaserStream gRPC
ThêmmatchMints: true vào một bộ lọc giao dịch trong SubscribeRequest và đặt mint vào accountInclude. Ví dụ này truyền phát mọi giao dịch USDC trên mainnet:
- TypeScript
- Rust
- Go
Yêu cầu
helius-laserstream phiên bản 0.8.5 trở lên. Trường này cũng được chấp nhận dưới tên match_mints.laserstream-core-proto 11.3.0 trở lên hoặc .proto đi kèm trong kho lưu trữ SDK).
match_mints là trường 32 của SubscribeRequestFilterTransactions. Các máy khách được tạo từ proto Triton thượng nguồn sẽ âm thầm loại bỏ trường không xác định, vì vậy cờ này không có hiệu lực cho đến khi bạn tạo lại máy khách.
Xem tài liệu tham khảo về yêu cầu đăng ký để biết mọi trường của bộ lọc giao dịch.
Kết hợp với tokenAccounts để theo dõi một token cho một ví
matchMints có thể kết hợp với tính năng mở rộng tokenAccounts, nhờ đó một bộ lọc có thể khớp đồng thời theo chủ sở hữu ví và mint.
Ví dụ này truyền phát mọi thay đổi đối với số dư USDC của một ví:
accountInclude kết hợp với tokenAccounts sẽ tìm các giao dịch làm thay đổi số dư token của ví. accountRequired kết hợp với matchMints sẽ thu hẹp kết quả xuống những giao dịch liên quan đến USDC.
Đọc thông tin đã khớp
Khi một giao dịch khớp thông qua mint, hãy tìm mint trongmeta.preTokenBalances[].mint và meta.postTokenBalances[].mint. Đối với các giao dịch chuyển thông thường, mint thường không có trong các khóa tài khoản, vì vậy đừng tìm mint ở đó.
So sánh sự khác biệt giữa preTokenBalances và postTokenBalances trên cùng một accountIndex để biết lượng token đã di chuyển và giữa những chủ sở hữu nào.
Hướng dẫn giám sát giao dịch trình bày chi tiết về cấu trúc giao dịch.
Giới hạn và lưu ý
- Các mint nằm trong cùng những danh sách
accountInclude,accountExcludevàaccountRequiredvới các khóa tài khoản, vì vậy chúng được tính vào cùng giới hạn của gói cho mỗi danh sách. Không có giới hạn mint riêng. - Chi phí khớp không tăng theo số lượng mint trong danh sách. Hiệu năng của 100 mint và 100.000 mint là như nhau, còn những người đăng ký không thiết lập cờ sẽ không chịu thêm chi phí nào.
- Phát lại dữ liệu lịch sử tuân theo
matchMints, vì vậy đăng ký phát lại sẽ trả về cùng các giao dịch mà luồng trực tiếp sẽ trả về. - Nếu bạn đính kèm một bộ lọc nén (cuckoo) vào đăng ký giao dịch,
matchMintscũng kiểm tra tập hợp mint với bộ lọc đó, bên cạnh các khóa tài khoản. matchMintsđang hoạt động trên tất cả khu vực LaserStream gRPC, cả mainnet và devnet. Hiện tại, tính năng này chưa khả dụng trên LaserStream WebSocket.- Phiên bản SDK tối thiểu: JavaScript/TypeScript
helius-laserstream0.8.5, Rusthelius-laserstream0.6.4, Gogo/v0.3.0.
Nội dung liên quan
Token Account (ATA) Filtering
Khớp các giao dịch tương tác với những tài khoản token do một ví sở hữu
Transaction Monitoring
Các chiến lược lọc đầy đủ và ví dụ có thể chạy qua gRPC
Subscribe Request Reference
Mọi trường của bộ lọc giao dịch, bao gồm
matchMintsHistorical Replay
Bổ sung dữ liệu hoạt động token trong tối đa 48 giờ bằng cùng một bộ lọc