@acedatacloud/x402-client se encarga de firmar el encabezado de solicitud PAYMENT-SIGNATURE cuando se encuentra con 402 Payment Required.
Direcciones del código fuente y del paquete:
- Repositorio del SDK: https://github.com/AceDataCloud/SDK
- Repositorio del Cliente X402: https://github.com/AceDataCloud/X402Client
- npm SDK: https://www.npmjs.com/package/@acedatacloud/sdk
- npm Cliente X402: https://www.npmjs.com/package/@acedatacloud/x402-client
Instalación de dependencias
@solana/web3.js:
@acedatacloud/sdky@acedatacloud/x402-clientse pueden instalar desde npm y ser importados por Node.js.ethersse utiliza para la firma de datos tipados EVM,@solana/web3.jsse utiliza para la construcción de transacciones de Solana.
Ejemplo de Base o SKALE
Se puede usar directamentewindow.ethereum en el navegador. En Node.js, se puede envolver ethers.Wallet en un proveedor de estilo EIP-1193.
- El programa primero activa un 402 sin autenticación, luego el handler firma el
PAYMENT-SIGNATURE, y finalmente reintenta con el mismo cuerpo de solicitud. content ADC_TS_SDK_X402_OKes una cadena fija devuelta realmente por el modelo, lo que indica que la solicitud reintentada ingresó a la API objetivo.id chatcmpl-DlcVLO4PQWvmjPDQpy9yQw2QdLGATes el ID de respuesta de esta finalización de chat, que se puede usar para comparar con los registros de uso de la plataforma.- Los resultados de liquidación en la cadena se pueden ver en Verificación E2E y solución de problemas.
network a skale para usar SKALE. La ventaja de SKALE es que el costo de gas de las transacciones en la cadena es bajo; la ventaja de Base es la liquidez de USDC y el soporte de billeteras más maduro, y solo Base ofrece medición posterior upto.
Nota: SKALE actualmente solo tiene exact. Si se pasa preferScheme: 'upto' bajo network: 'skale', el handler no encontrará upto y volverá silenciosamente a exact, sin generar un error; esto hará que escenarios como la finalización de chat, que se miden por token, se liquiden a una tarifa fija en lugar de por el uso real. Para medición posterior, utilice Base.
Ejemplo de billetera del navegador
Al usar MetaMask, Coinbase Wallet o WalletConnect en aplicaciones frontend, generalmente se pasa directamente el proveedor EIP-1193:Ejemplo de Solana
Solana utiliza SPL USDCTransferChecked. El adaptador de billetera pasado necesita exponer publicKey y signAndSendTransaction.
exact, no admite upto. Si la API devuelve múltiples accepts, el handler seleccionará el que tenga network = 'solana'.
La ruta de Solana ha verificado que el reintento pagado puede devolver HTTP 200 y ADC_SOLANA_E2E_OK en la misma API pública. Las consultas RPC públicas pueden estar limitadas, por lo que este documento no incluye el hash de la transacción de Solana; si necesita conciliación en la cadena, utilice su propio RPC de Solana o registre la confirmación en la consola.
Elegir exact o upto
El handler de TypeScript actual seleccionará el primer requisito de pago que coincida con la red devuelta por el servidor. La API de Ace Data Cloud generalmente coloca el exact de la misma red antes del upto, por lo que si desea claramente utilizar la medición posterior, debe pasar preferScheme: 'upto'.
Ejemplo:
upto para esa red, el handler volverá automáticamente al primer requisito disponible de esa red, que generalmente es exact.
upto requiere autorización única de Permit2. upto actualmente solo se ofrece en Base, por lo que solo necesita autorizar una vez el USDC de Base:
upto ha completado la verificación de API pública: HTTP 402 -> HTTP 200, la transacción de liquidación posterior es 0x4b0b836ce1cd1171cdbc37df1637150b024214ec28e7f6f2d09122f15cbfc036. La salida completa se puede ver en la descripción del plan de facturación.
¿Qué hizo el SDK?
El transporte de@acedatacloud/sdk ejecutará un manejador de pagos al recibir un 402:
@acedatacloud/x402-client hará:
- Seleccionará el requisito de pago de la red objetivo de
ctx.accepts. - Construirá una firma EVM EIP-712 o una transacción de transferencia de Solana según la red.
- Serializará el sobre en Base64.
- Devolverá
{ headers: { 'PAYMENT-SIGNATURE': '<base64>' } }. - El SDK automáticamente reintentará con el cuerpo de la solicitud original.

