matchMints de LaserStream permite que una suscripción a transacciones de gRPC filtre por los mints de tokens en los saldos de tokens previos y posteriores de una transacción, además de sus claves de cuenta.
Coloca un mint en accountInclude, establece matchMints: true y recibirás cada transacción que involucre ese token: transferencias, swaps, acuñaciones, quemas y cierres de cuentas.
matchMints solo está disponible en LaserStream gRPC. Aún no está disponible en LaserStream WebSocket.El problema: los filtros de cuenta simples omiten la mayoría de las transferencias de tokens
Cuando monitoreas un token conaccountInclude: [mint], solo se detectan las transacciones en las que la pubkey del mint aparece en las claves de cuenta de la transacción.
Una instrucción SPL Transfer clásica nunca hace referencia al mint. Solo especifica la cuenta de token de origen, la cuenta de token de destino y el propietario, por lo que un filtro de cuenta simple omite la operación más común de cualquier token.
Solo coinciden las instrucciones que pasan el mint directamente, como MintTo, Burn, TransferChecked y los swaps cuyas cuentas de programa incluyen el mint. La única solución alternativa era transmitir todas las transacciones e inspeccionar por tu cuenta los saldos de tokens de cada una.
Cómo funciona matchMints
Establece matchMints: true en un filtro de transacciones y LaserStream creará un conjunto de mints a partir de preTokenBalances e postTokenBalances de la transacción.
Tus listas accountInclude, accountExclude e accountRequired se comparan con tanto las claves de cuenta como ese conjunto de mints. Un mint cumple la condición si cualquier cuenta de token asociada aparece en cualquiera de las listas de saldos, independientemente de si el saldo cambió.
La marca es opcional y los filtros que la omiten se comportan exactamente como antes. Por eso, puedes agregarla a una suscripción existente sin cambiar lo que ya recibe. Los mints SPL y Token-2022 funcionan porque ambos programas rellenan los saldos de tokens previos y posteriores.
Semántica
El resto de la lógica del filtro no cambia:
- Los predicados dentro de un mismo filtro con nombre siguen combinándose con AND (
vote,failed,signaturey las listas de cuentas). - Varios filtros con nombre siguen combinándose con OR.
- Los valores dentro de una lista se combinan con OR (excepto
accountRequired, donde todos deben coincidir). - Una transacción sin saldos de tokens vuelve a usar la comparación solo por claves.
matchMintsnunca agrega transacciones que no tengan actividad de tokens. matchMintspor sí solo no restringe el flujo. Aún necesitas al menos una clave o un mint en una lista de cuentas (u otro predicado restrictivo) para que se acepte el filtro.
LaserStream compara los mints por pubkey exacta. No existe un modo de “solo cambió el saldo” para los mints, a diferencia de
tokenAccounts: "balanceChanged".Úsalo en LaserStream gRPC
AgregamatchMints: true a un filtro de transacciones en tu SubscribeRequest y coloca el mint en accountInclude. Este ejemplo transmite todas las transacciones de USDC en mainnet:
- TypeScript
- Rust
- Go
Requiere
helius-laserstream 0.8.5 o una versión posterior. El campo también se acepta como match_mints.laserstream-core-proto 11.3.0 o una versión posterior, o el .proto incluido en el repositorio del SDK).
match_mints es el campo 32 de SubscribeRequestFilterTransactions. Los clientes generados a partir del proto de Triton original descartan silenciosamente el campo desconocido, por lo que la marca no tendrá efecto hasta que vuelvas a generarlos.
Consulta la referencia de solicitudes de suscripción para conocer todos los campos de filtro de transacciones.
Combínalo con tokenAccounts para monitorear un token de una billetera
matchMints se combina con la expansión tokenAccounts, por lo que un filtro puede buscar propietarios de billeteras y mints al mismo tiempo.
Este ejemplo transmite cada cambio en el saldo de USDC de una billetera:
accountInclude junto con tokenAccounts encuentra transacciones en las que cambiaron los saldos de tokens de la billetera. accountRequired junto con matchMints limita esas transacciones a las que involucran USDC.
Cómo interpretar lo que coincidió
Cuando una transacción coincida mediante un mint, busca el mint enmeta.preTokenBalances[].mint e meta.postTokenBalances[].mint. En las transferencias simples, el mint normalmente no aparece en las claves de cuenta, así que no lo busques allí.
Compara preTokenBalances con postTokenBalances en el mismo accountIndex para ver qué cantidad del token se transfirió y entre qué propietarios.
La guía de monitoreo de transacciones explica en detalle la estructura de las transacciones.
Límites y notas
- Los mints se colocan en las mismas listas
accountInclude,accountExcludeeaccountRequiredque las claves de cuenta, por lo que cuentan para los mismos límites del plan por lista. No hay un límite separado para mints. - El costo de la comparación no aumenta con la cantidad de mints que incluyas. El rendimiento es el mismo con 100 mints que con 100,000, y los suscriptores que no establecen la marca no incurren en ningún costo adicional.
- La reproducción histórica respeta
matchMints, por lo que una suscripción de reproducción devuelve las mismas transacciones que habría devuelto el flujo en vivo. - Si adjuntas un filtro comprimido (cuckoo) a una suscripción de transacciones,
matchMintscompara el conjunto de mints con él, además de las claves de cuenta. matchMintsestá activo en todas las regiones de LaserStream gRPC, tanto en mainnet como en devnet. Actualmente no está disponible en LaserStream WebSocket.- Versiones mínimas del SDK: JavaScript/TypeScript
helius-laserstream0.8.5, Rusthelius-laserstream0.6.4, Gogo/v0.3.0.
Contenido relacionado
Token Account (ATA) Filtering
Detecta transacciones que involucran las cuentas de tokens propiedad de una billetera
Transaction Monitoring
Estrategias completas de filtrado y ejemplos ejecutables mediante gRPC
Subscribe Request Reference
Todos los campos de filtro de transacciones, incluido
matchMintsHistorical Replay
Recupera hasta 24 horas de actividad de tokens con el mismo filtro