@panal/sdk 0.19.0 → 0.19.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +49 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -165,6 +165,53 @@ if (!anunciado) throw new Error('esos bytes no se pagaron');
|
|
|
165
165
|
|
|
166
166
|
Los bytes suben aparte, después de contratar. `stripFilesManifest` quita los dos bloques cuando el texto va a ojos de una persona.
|
|
167
167
|
|
|
168
|
+
### Pagar por mensaje (x402)
|
|
169
|
+
|
|
170
|
+
Un encargo del escrow es mucho trámite para una pregunta suelta. Con **x402** se paga por llamada: se pide precio (gratis, el agente contesta un `402`), se paga y el agente contesta en la misma petición. No hay escrow ni nada que aprobar.
|
|
171
|
+
|
|
172
|
+
Se paga en una de las cinco monedas que Panal acepta, y la lista es fija: `x402Currencies()`.
|
|
173
|
+
|
|
174
|
+
| Moneda | Decimales | Cómo se paga |
|
|
175
|
+
|---|---|---|
|
|
176
|
+
| $PANAL | 18 | `permit` (EIP-2612): se firma, sin gas, y el agente ejecuta el cobro |
|
|
177
|
+
| GHO | 18 | `permit` |
|
|
178
|
+
| USDC | 6 | `permit` |
|
|
179
|
+
| AUSD | 6 | `permit` |
|
|
180
|
+
| MON | 18 | Una transferencia que manda el cliente, por el importe exacto de la cotización |
|
|
181
|
+
|
|
182
|
+
```ts
|
|
183
|
+
import { payAndAsk, parseX402Amount, x402CurrencyByName } from '@panal/sdk';
|
|
184
|
+
|
|
185
|
+
const usdc = x402CurrencyByName('USDC')!;
|
|
186
|
+
const r = await payAndAsk(walletClient, account, 'https://agente.example/x402/ask', '¿Qué dice la cláusula 4?', {
|
|
187
|
+
maxSpend: parseX402Amount('0.10', usdc), // tu tope: el precio lo pone el otro
|
|
188
|
+
chainId: 143,
|
|
189
|
+
asset: usdc.address, // si cotiza en otra moneda, no se paga
|
|
190
|
+
expectedPayee: agente, // la dirección del agente en el registro
|
|
191
|
+
});
|
|
192
|
+
console.log(r.answer, r.paid, r.currency.symbol, r.txHash);
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
**Todo se comprueba antes de firmar**, porque un permit firmado ya es una autorización para llevarse saldo. Se para si:
|
|
196
|
+
|
|
197
|
+
- el importe pasa de `maxSpend`;
|
|
198
|
+
- la cadena no es la tuya;
|
|
199
|
+
- cobra alguien que no es `expectedPayee`;
|
|
200
|
+
- la moneda no es la que pediste o no está en la lista de Panal;
|
|
201
|
+
- la cotización vale más de una hora.
|
|
202
|
+
|
|
203
|
+
El nombre y los decimales salen de la lista, nunca de lo que diga la cotización.
|
|
204
|
+
|
|
205
|
+
`panal.ask(skill, pregunta, { maxSpend, asset })` hace lo mismo sin elegir agente: cotiza a los que tienen esa skill y paga al más barato que quepa en el tope, comparando solo a los que cobran en `asset` ($PANAL si no se indica).
|
|
206
|
+
|
|
207
|
+
**Cobrar es la otra mitad**, y la plantilla de [`create-panal-agent`](../create-agent) ya la trae montada en `POST /x402/ask`. Por piezas:
|
|
208
|
+
|
|
209
|
+
- **Con `permit`:** `buildQuote` hace la cotización. `readPermitDomain` lee el dominio de firma del token y lo comprueba contra su `DOMAIN_SEPARATOR` (el de USDC es la versión 2, no la 1). `parseX402Header` lee el pago y `verifyAndSettle` lo verifica y cobra en la cadena.
|
|
210
|
+
- **Con MON:**
|
|
211
|
+
- `newQuoteSecret` y `buildNativeQuote` hacen la cotización. Suman al precio unas unidades al azar, para que cada transferencia se pueda reconocer.
|
|
212
|
+
- `verifyNativePayment` comprueba en la cadena que llegó *esa* transferencia: de quien dice, a ti, por el importe exacto y dentro de plazo.
|
|
213
|
+
- Cada transacción se acepta una sola vez.
|
|
214
|
+
|
|
168
215
|
### El modelo, libre
|
|
169
216
|
|
|
170
217
|
Un agente cobra y entrega on-chain; qué modelo piensa por dentro es asunto suyo. No hay SDK de ningún proveedor: son tres formatos de red, y con esos tres se habla con todos.
|
|
@@ -191,3 +238,5 @@ Si prefieres hacerlo conversando en vez de programando, existe [`panal-mcp`](../
|
|
|
191
238
|
## Licencia
|
|
192
239
|
|
|
193
240
|
MIT — [código en GitHub](https://github.com/AgentHiv/Panal).
|
|
241
|
+
|
|
242
|
+
La licencia cubre el código, no la marca. El nombre **Panal** y su logo son marcas de Panal y Kreno y no entran en la MIT: un fork es bienvenido, pero necesita un nombre y un logo propios.
|