agentwallet-sdk 3.3.0 → 3.4.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 +41 -516
- package/dist/bridge/abis.d.ts +48 -171
- package/dist/bridge/abis.d.ts.map +1 -1
- package/dist/bridge/abis.js.map +1 -1
- package/dist/bridge/client.d.ts +2 -41
- package/dist/bridge/client.d.ts.map +1 -1
- package/dist/bridge/client.js +35 -168
- package/dist/bridge/client.js.map +1 -1
- package/dist/bridge/index.d.ts +2 -4
- package/dist/bridge/index.d.ts.map +1 -1
- package/dist/bridge/index.js +1 -8
- package/dist/bridge/index.js.map +1 -1
- package/dist/bridge/types.d.ts +15 -134
- package/dist/bridge/types.d.ts.map +1 -1
- package/dist/bridge/types.js +16 -170
- package/dist/bridge/types.js.map +1 -1
- package/dist/identity/erc8004.d.ts +2 -240
- package/dist/identity/erc8004.d.ts.map +1 -1
- package/dist/identity/erc8004.js +58 -334
- package/dist/identity/erc8004.js.map +1 -1
- package/dist/index.d.ts +313 -136
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -59
- package/dist/index.js.map +1 -1
- package/dist/swap/SwapModule.d.ts +6 -50
- package/dist/swap/SwapModule.d.ts.map +1 -1
- package/dist/swap/SwapModule.js +25 -153
- package/dist/swap/SwapModule.js.map +1 -1
- package/dist/swap/abi.d.ts +47 -165
- package/dist/swap/abi.d.ts.map +1 -1
- package/dist/swap/abi.js.map +1 -1
- package/dist/swap/index.d.ts +2 -3
- package/dist/swap/index.d.ts.map +1 -1
- package/dist/swap/index.js +1 -4
- package/dist/swap/index.js.map +1 -1
- package/dist/swap/types.d.ts +6 -36
- package/dist/swap/types.d.ts.map +1 -1
- package/dist/swap/types.js +0 -1
- package/dist/swap/types.js.map +1 -1
- package/dist/types.d.ts +1 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +0 -1
- package/dist/types.js.map +1 -1
- package/dist/x402/__tests__/budget.test.d.ts +2 -0
- package/dist/x402/__tests__/budget.test.d.ts.map +1 -0
- package/dist/x402/__tests__/budget.test.js +114 -0
- package/dist/x402/__tests__/budget.test.js.map +1 -0
- package/dist/x402/__tests__/client.test.d.ts +2 -0
- package/dist/x402/__tests__/client.test.d.ts.map +1 -0
- package/dist/x402/__tests__/client.test.js +107 -0
- package/dist/x402/__tests__/client.test.js.map +1 -0
- package/dist/x402/chains/abstract/index.d.ts +135 -0
- package/dist/x402/chains/abstract/index.d.ts.map +1 -0
- package/dist/x402/chains/abstract/index.js +190 -0
- package/dist/x402/chains/abstract/index.js.map +1 -0
- package/dist/x402/client.d.ts +1 -4
- package/dist/x402/client.d.ts.map +1 -1
- package/dist/x402/client.js +2 -16
- package/dist/x402/client.js.map +1 -1
- package/dist/x402/index.d.ts +3 -1
- package/dist/x402/index.d.ts.map +1 -1
- package/dist/x402/index.js +3 -1
- package/dist/x402/index.js.map +1 -1
- package/dist/x402/types.d.ts +3 -5
- package/dist/x402/types.d.ts.map +1 -1
- package/dist/x402/types.js +2 -17
- package/dist/x402/types.js.map +1 -1
- package/package.json +12 -32
- package/dist/ap2/index.d.ts +0 -185
- package/dist/ap2/index.d.ts.map +0 -1
- package/dist/ap2/index.js +0 -255
- package/dist/ap2/index.js.map +0 -1
- package/dist/bridge/unified.d.ts +0 -101
- package/dist/bridge/unified.d.ts.map +0 -1
- package/dist/bridge/unified.js +0 -284
- package/dist/bridge/unified.js.map +0 -1
- package/dist/chains.d.ts +0 -62
- package/dist/chains.d.ts.map +0 -1
- package/dist/chains.js +0 -108
- package/dist/chains.js.map +0 -1
- package/dist/fiat/index.d.ts +0 -10
- package/dist/fiat/index.d.ts.map +0 -1
- package/dist/fiat/index.js +0 -9
- package/dist/fiat/index.js.map +0 -1
- package/dist/fiat/onramp.d.ts +0 -101
- package/dist/fiat/onramp.d.ts.map +0 -1
- package/dist/fiat/onramp.js +0 -155
- package/dist/fiat/onramp.js.map +0 -1
- package/dist/fiat/providers/index.d.ts +0 -16
- package/dist/fiat/providers/index.d.ts.map +0 -1
- package/dist/fiat/providers/index.js +0 -30
- package/dist/fiat/providers/index.js.map +0 -1
- package/dist/fiat/providers/moonpay.d.ts +0 -22
- package/dist/fiat/providers/moonpay.d.ts.map +0 -1
- package/dist/fiat/providers/moonpay.js +0 -107
- package/dist/fiat/providers/moonpay.js.map +0 -1
- package/dist/fiat/providers/stripe.d.ts +0 -26
- package/dist/fiat/providers/stripe.d.ts.map +0 -1
- package/dist/fiat/providers/stripe.js +0 -135
- package/dist/fiat/providers/stripe.js.map +0 -1
- package/dist/fiat/providers/transak.d.ts +0 -26
- package/dist/fiat/providers/transak.d.ts.map +0 -1
- package/dist/fiat/providers/transak.js +0 -119
- package/dist/fiat/providers/transak.js.map +0 -1
- package/dist/fiat/types.d.ts +0 -106
- package/dist/fiat/types.d.ts.map +0 -1
- package/dist/fiat/types.js +0 -13
- package/dist/fiat/types.js.map +0 -1
- package/dist/flash/executor.d.ts +0 -119
- package/dist/flash/executor.d.ts.map +0 -1
- package/dist/flash/executor.js +0 -195
- package/dist/flash/executor.js.map +0 -1
- package/dist/flash/index.d.ts +0 -28
- package/dist/flash/index.d.ts.map +0 -1
- package/dist/flash/index.js +0 -25
- package/dist/flash/index.js.map +0 -1
- package/dist/flash/scanner.d.ts +0 -133
- package/dist/flash/scanner.d.ts.map +0 -1
- package/dist/flash/scanner.js +0 -212
- package/dist/flash/scanner.js.map +0 -1
- package/dist/flash/types.d.ts +0 -136
- package/dist/flash/types.d.ts.map +0 -1
- package/dist/flash/types.js +0 -23
- package/dist/flash/types.js.map +0 -1
- package/dist/gas/index.d.ts +0 -4
- package/dist/gas/index.d.ts.map +0 -1
- package/dist/gas/index.js +0 -3
- package/dist/gas/index.js.map +0 -1
- package/dist/gas/sponsor.d.ts +0 -70
- package/dist/gas/sponsor.d.ts.map +0 -1
- package/dist/gas/sponsor.js +0 -193
- package/dist/gas/sponsor.js.map +0 -1
- package/dist/gas/types.d.ts +0 -76
- package/dist/gas/types.d.ts.map +0 -1
- package/dist/gas/types.js +0 -21
- package/dist/gas/types.js.map +0 -1
- package/dist/identity/agent-identity.d.ts +0 -276
- package/dist/identity/agent-identity.d.ts.map +0 -1
- package/dist/identity/agent-identity.js +0 -300
- package/dist/identity/agent-identity.js.map +0 -1
- package/dist/identity/erc6551.d.ts +0 -441
- package/dist/identity/erc6551.d.ts.map +0 -1
- package/dist/identity/erc6551.js +0 -517
- package/dist/identity/erc6551.js.map +0 -1
- package/dist/mev/index.d.ts +0 -4
- package/dist/mev/index.d.ts.map +0 -1
- package/dist/mev/index.js +0 -4
- package/dist/mev/index.js.map +0 -1
- package/dist/mev/protection.d.ts +0 -54
- package/dist/mev/protection.d.ts.map +0 -1
- package/dist/mev/protection.js +0 -185
- package/dist/mev/protection.js.map +0 -1
- package/dist/mev/risk.d.ts +0 -19
- package/dist/mev/risk.d.ts.map +0 -1
- package/dist/mev/risk.js +0 -95
- package/dist/mev/risk.js.map +0 -1
- package/dist/mev/types.d.ts +0 -49
- package/dist/mev/types.d.ts.map +0 -1
- package/dist/mev/types.js +0 -2
- package/dist/mev/types.js.map +0 -1
- package/dist/settlement/index.d.ts +0 -4
- package/dist/settlement/index.d.ts.map +0 -1
- package/dist/settlement/index.js +0 -3
- package/dist/settlement/index.js.map +0 -1
- package/dist/settlement/types.d.ts +0 -66
- package/dist/settlement/types.d.ts.map +0 -1
- package/dist/settlement/types.js +0 -37
- package/dist/settlement/types.js.map +0 -1
- package/dist/settlement/verifier.d.ts +0 -75
- package/dist/settlement/verifier.d.ts.map +0 -1
- package/dist/settlement/verifier.js +0 -354
- package/dist/settlement/verifier.js.map +0 -1
- package/dist/solana/bridge.d.ts +0 -144
- package/dist/solana/bridge.d.ts.map +0 -1
- package/dist/solana/bridge.js +0 -352
- package/dist/solana/bridge.js.map +0 -1
- package/dist/solana/index.d.ts +0 -8
- package/dist/solana/index.d.ts.map +0 -1
- package/dist/solana/index.js +0 -6
- package/dist/solana/index.js.map +0 -1
- package/dist/solana/swap.d.ts +0 -85
- package/dist/solana/swap.d.ts.map +0 -1
- package/dist/solana/swap.js +0 -173
- package/dist/solana/swap.js.map +0 -1
- package/dist/solana/types.d.ts +0 -126
- package/dist/solana/types.d.ts.map +0 -1
- package/dist/solana/types.js +0 -10
- package/dist/solana/types.js.map +0 -1
- package/dist/solana/wallet.d.ts +0 -83
- package/dist/solana/wallet.d.ts.map +0 -1
- package/dist/solana/wallet.js +0 -164
- package/dist/solana/wallet.js.map +0 -1
- package/dist/solana/x402.d.ts +0 -69
- package/dist/solana/x402.d.ts.map +0 -1
- package/dist/solana/x402.js +0 -154
- package/dist/solana/x402.js.map +0 -1
- package/dist/solver/adapter.d.ts +0 -47
- package/dist/solver/adapter.d.ts.map +0 -1
- package/dist/solver/adapter.js +0 -138
- package/dist/solver/adapter.js.map +0 -1
- package/dist/solver/analyzer.d.ts +0 -48
- package/dist/solver/analyzer.d.ts.map +0 -1
- package/dist/solver/analyzer.js +0 -89
- package/dist/solver/analyzer.js.map +0 -1
- package/dist/solver/builder.d.ts +0 -31
- package/dist/solver/builder.d.ts.map +0 -1
- package/dist/solver/builder.js +0 -60
- package/dist/solver/builder.js.map +0 -1
- package/dist/solver/index.d.ts +0 -22
- package/dist/solver/index.d.ts.map +0 -1
- package/dist/solver/index.js +0 -21
- package/dist/solver/index.js.map +0 -1
- package/dist/solver/types.d.ts +0 -115
- package/dist/solver/types.d.ts.map +0 -1
- package/dist/solver/types.js +0 -10
- package/dist/solver/types.js.map +0 -1
- package/dist/spend-guard/index.d.ts +0 -125
- package/dist/spend-guard/index.d.ts.map +0 -1
- package/dist/spend-guard/index.js +0 -150
- package/dist/spend-guard/index.js.map +0 -1
- package/dist/swap/router/cache.d.ts +0 -13
- package/dist/swap/router/cache.d.ts.map +0 -1
- package/dist/swap/router/cache.js +0 -30
- package/dist/swap/router/cache.js.map +0 -1
- package/dist/swap/router/flashbots.d.ts +0 -10
- package/dist/swap/router/flashbots.d.ts.map +0 -1
- package/dist/swap/router/flashbots.js +0 -43
- package/dist/swap/router/flashbots.js.map +0 -1
- package/dist/swap/router/health.d.ts +0 -17
- package/dist/swap/router/health.d.ts.map +0 -1
- package/dist/swap/router/health.js +0 -38
- package/dist/swap/router/health.js.map +0 -1
- package/dist/swap/router/index.d.ts +0 -10
- package/dist/swap/router/index.d.ts.map +0 -1
- package/dist/swap/router/index.js +0 -10
- package/dist/swap/router/index.js.map +0 -1
- package/dist/swap/router/providers/cowswap.d.ts +0 -11
- package/dist/swap/router/providers/cowswap.d.ts.map +0 -1
- package/dist/swap/router/providers/cowswap.js +0 -79
- package/dist/swap/router/providers/cowswap.js.map +0 -1
- package/dist/swap/router/providers/index.d.ts +0 -20
- package/dist/swap/router/providers/index.d.ts.map +0 -1
- package/dist/swap/router/providers/index.js +0 -32
- package/dist/swap/router/providers/index.js.map +0 -1
- package/dist/swap/router/providers/jupiter.d.ts +0 -12
- package/dist/swap/router/providers/jupiter.d.ts.map +0 -1
- package/dist/swap/router/providers/jupiter.js +0 -73
- package/dist/swap/router/providers/jupiter.js.map +0 -1
- package/dist/swap/router/providers/lifi.d.ts +0 -11
- package/dist/swap/router/providers/lifi.d.ts.map +0 -1
- package/dist/swap/router/providers/lifi.js +0 -123
- package/dist/swap/router/providers/lifi.js.map +0 -1
- package/dist/swap/router/providers/oneinch.d.ts +0 -13
- package/dist/swap/router/providers/oneinch.d.ts.map +0 -1
- package/dist/swap/router/providers/oneinch.js +0 -71
- package/dist/swap/router/providers/oneinch.js.map +0 -1
- package/dist/swap/router/providers/paraswap.d.ts +0 -11
- package/dist/swap/router/providers/paraswap.d.ts.map +0 -1
- package/dist/swap/router/providers/paraswap.js +0 -73
- package/dist/swap/router/providers/paraswap.js.map +0 -1
- package/dist/swap/router/providers/uniswap.d.ts +0 -31
- package/dist/swap/router/providers/uniswap.d.ts.map +0 -1
- package/dist/swap/router/providers/uniswap.js +0 -116
- package/dist/swap/router/providers/uniswap.js.map +0 -1
- package/dist/swap/router/providers/zerox.d.ts +0 -13
- package/dist/swap/router/providers/zerox.d.ts.map +0 -1
- package/dist/swap/router/providers/zerox.js +0 -94
- package/dist/swap/router/providers/zerox.js.map +0 -1
- package/dist/swap/router/router.d.ts +0 -86
- package/dist/swap/router/router.d.ts.map +0 -1
- package/dist/swap/router/router.js +0 -224
- package/dist/swap/router/router.js.map +0 -1
- package/dist/swap/router/rsi/engine.d.ts +0 -60
- package/dist/swap/router/rsi/engine.d.ts.map +0 -1
- package/dist/swap/router/rsi/engine.js +0 -483
- package/dist/swap/router/rsi/engine.js.map +0 -1
- package/dist/swap/router/rsi/index.d.ts +0 -3
- package/dist/swap/router/rsi/index.d.ts.map +0 -1
- package/dist/swap/router/rsi/index.js +0 -3
- package/dist/swap/router/rsi/index.js.map +0 -1
- package/dist/swap/router/rsi/types.d.ts +0 -106
- package/dist/swap/router/rsi/types.d.ts.map +0 -1
- package/dist/swap/router/rsi/types.js +0 -3
- package/dist/swap/router/rsi/types.js.map +0 -1
- package/dist/swap/router/types.d.ts +0 -120
- package/dist/swap/router/types.d.ts.map +0 -1
- package/dist/swap/router/types.js +0 -16
- package/dist/swap/router/types.js.map +0 -1
- package/dist/tax/engine.d.ts +0 -131
- package/dist/tax/engine.d.ts.map +0 -1
- package/dist/tax/engine.js +0 -307
- package/dist/tax/engine.js.map +0 -1
- package/dist/tax/index.d.ts +0 -9
- package/dist/tax/index.d.ts.map +0 -1
- package/dist/tax/index.js +0 -8
- package/dist/tax/index.js.map +0 -1
- package/dist/tax/lots.d.ts +0 -60
- package/dist/tax/lots.d.ts.map +0 -1
- package/dist/tax/lots.js +0 -129
- package/dist/tax/lots.js.map +0 -1
- package/dist/tax/types.d.ts +0 -113
- package/dist/tax/types.d.ts.map +0 -1
- package/dist/tax/types.js +0 -18
- package/dist/tax/types.js.map +0 -1
- package/dist/yield/index.d.ts +0 -26
- package/dist/yield/index.d.ts.map +0 -1
- package/dist/yield/index.js +0 -25
- package/dist/yield/index.js.map +0 -1
- package/dist/yield/rates.d.ts +0 -114
- package/dist/yield/rates.d.ts.map +0 -1
- package/dist/yield/rates.js +0 -351
- package/dist/yield/rates.js.map +0 -1
- package/dist/yield/types.d.ts +0 -134
- package/dist/yield/types.d.ts.map +0 -1
- package/dist/yield/types.js +0 -24
- package/dist/yield/types.js.map +0 -1
- package/dist/yield/vault.d.ts +0 -112
- package/dist/yield/vault.d.ts.map +0 -1
- package/dist/yield/vault.js +0 -264
- package/dist/yield/vault.js.map +0 -1
package/README.md
CHANGED
|
@@ -10,22 +10,6 @@ Agent wants to spend $500 → ⏳ Queued for your approval
|
|
|
10
10
|
Agent spent $490 today → 🛑 Next tx queued ($500/day limit hit)
|
|
11
11
|
```text
|
|
12
12
|
|
|
13
|
-
## How We Compare
|
|
14
|
-
|
|
15
|
-
| | **agentwallet-sdk** | **Coinbase Agentic** | **OKX OnchainOS** | **Binance Agent** | **MoonPay Agents** |
|
|
16
|
-
|---|---|---|---|---|---|
|
|
17
|
-
| **Custody** | Non-custodial (agent holds keys) | Semi-custodial (TEE) | Custodial (exchange) | Custodial (exchange) | Non-custodial (claimed) |
|
|
18
|
-
| **Spend Limits** | On-chain (smart contract) | API-enforced | Not documented | Not documented | Not documented |
|
|
19
|
-
| **Chains** | **17** (16 EVM + Solana) | Base only | 60+ (custodial) | Binance chain | Unclear |
|
|
20
|
-
| **Agent Identity** | ERC-8004 + ERC-6551 | None | None | None | None |
|
|
21
|
-
| **Open Source** | MIT | Partial | Closed | Closed | Closed |
|
|
22
|
-
| **x402 Payments** | Native | Supported | Supported | No | "Compatible" |
|
|
23
|
-
| **Jupiter Swaps** | Yes (Solana) | No | No | No | No |
|
|
24
|
-
| **CCTP Bridging** | 17-chain V2 | No | Partial | No | No |
|
|
25
|
-
| **If exchange goes down** | Agent keeps working | Degraded | Agent stops | Agent stops | Unknown |
|
|
26
|
-
|
|
27
|
-
> On-chain spend limits can't be bypassed even if the API layer is compromised. Exchanges can freeze your agent's account. A non-custodial smart contract can't. That's the difference between policy and math.
|
|
28
|
-
|
|
29
13
|
## Why Agent Wallet?
|
|
30
14
|
|
|
31
15
|
| Approach | Problem |
|
|
@@ -199,8 +183,6 @@ for (const entry of history) {
|
|
|
199
183
|
|
|
200
184
|
## Supported Chains
|
|
201
185
|
|
|
202
|
-
### Wallet / Execution Chains
|
|
203
|
-
|
|
204
186
|
| Chain | Status | Best For |
|
|
205
187
|
|-------|--------|----------|
|
|
206
188
|
| **Base** | ✅ Primary | Low gas, USDC native |
|
|
@@ -209,108 +191,6 @@ for (const entry of history) {
|
|
|
209
191
|
| **Arbitrum** | ✅ | DeFi agents |
|
|
210
192
|
| **Polygon** | ✅ | Micropayments |
|
|
211
193
|
|
|
212
|
-
### CCTP V2 Bridge — 17 Chains (v3.1.0)
|
|
213
|
-
|
|
214
|
-
Bridge USDC between any two supported chains via Circle's Cross-Chain Transfer Protocol V2. **0.1% platform fee.** Uses the same non-custodial, agent-native architecture.
|
|
215
|
-
|
|
216
|
-
```typescript
|
|
217
|
-
import { UnifiedBridge } from 'agentwallet-sdk';
|
|
218
|
-
|
|
219
|
-
const bridge = new UnifiedBridge({ evmSigner, solanaWallet });
|
|
220
|
-
|
|
221
|
-
// Bridge 1 USDC from Solana to Base (~20s fast transfer)
|
|
222
|
-
const result = await bridge.bridge({
|
|
223
|
-
amount: 1_000_000n, // 1 USDC (6 decimals)
|
|
224
|
-
sourceChain: 'solana',
|
|
225
|
-
destinationChain: 'base',
|
|
226
|
-
destinationAddress: '0x...',
|
|
227
|
-
});
|
|
228
|
-
console.log('Minted on Base:', result.mintTxHash);
|
|
229
|
-
|
|
230
|
-
// Bridge from Polygon to Arbitrum
|
|
231
|
-
const result2 = await bridge.bridge({
|
|
232
|
-
amount: 5_000_000n, // 5 USDC
|
|
233
|
-
sourceChain: 'polygon',
|
|
234
|
-
destinationChain: 'arbitrum',
|
|
235
|
-
destinationAddress: '0x...',
|
|
236
|
-
});
|
|
237
|
-
|
|
238
|
-
// Get a fee quote
|
|
239
|
-
const quote = bridge.getQuote({
|
|
240
|
-
amount: 1_000_000n,
|
|
241
|
-
sourceChain: 'base',
|
|
242
|
-
destinationChain: 'sonic',
|
|
243
|
-
});
|
|
244
|
-
console.log(`Fee: ${quote.platformFee} USDC (0.1%)`);
|
|
245
|
-
console.log(`Est. time: ${quote.estimatedTimeSeconds}s`);
|
|
246
|
-
console.log(`Output: ${quote.outputAmount} USDC`);
|
|
247
|
-
|
|
248
|
-
// All 17 chains
|
|
249
|
-
console.log(bridge.getSupportedChains());
|
|
250
|
-
// ['ethereum','avalanche','optimism','arbitrum','base','polygon',
|
|
251
|
-
// 'unichain','linea','codex','sonic','worldchain','sei','xdc',
|
|
252
|
-
// 'hyperevm','ink','plume','solana']
|
|
253
|
-
```
|
|
254
|
-
|
|
255
|
-
#### Supported Bridge Chains
|
|
256
|
-
|
|
257
|
-
| Chain | CCTP Domain | Chain ID | Fast Transfer |
|
|
258
|
-
|-------|-------------|----------|---------------|
|
|
259
|
-
| Ethereum | 0 | 1 | ✅ ~20s |
|
|
260
|
-
| Avalanche | 1 | 43114 | ⏱ ~15min |
|
|
261
|
-
| OP Mainnet | 2 | 10 | ✅ ~20s |
|
|
262
|
-
| Arbitrum | 3 | 42161 | ✅ ~20s |
|
|
263
|
-
| **Solana** | 5 | — | ✅ ~20s |
|
|
264
|
-
| Base | 6 | 8453 | ✅ ~20s |
|
|
265
|
-
| Polygon PoS | 7 | 137 | ⏱ ~15min |
|
|
266
|
-
| Unichain | 10 | 130 | ✅ ~20s |
|
|
267
|
-
| Linea | 11 | 59144 | ✅ ~20s |
|
|
268
|
-
| Codex | 12 | 812 | ✅ ~20s |
|
|
269
|
-
| Sonic | 13 | 146 | ⏱ ~15min |
|
|
270
|
-
| World Chain | 14 | 480 | ✅ ~20s |
|
|
271
|
-
| Sei | 16 | 1329 | ⏱ ~15min |
|
|
272
|
-
| XDC | 18 | 50 | ⏱ ~15min |
|
|
273
|
-
| HyperEVM | 19 | 999 | ⏱ ~15min |
|
|
274
|
-
| Ink | 21 | 57073 | ✅ ~20s |
|
|
275
|
-
| Plume | 22 | 98866 | ✅ ~20s |
|
|
276
|
-
|
|
277
|
-
Contract addresses verified from Circle's official docs:
|
|
278
|
-
- **TokenMessengerV2**: `0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d` (all EVM chains)
|
|
279
|
-
- **MessageTransmitterV2**: `0x81D40F21F12A8F0E3252Bccb954D722d4c464B64` (all EVM chains)
|
|
280
|
-
|
|
281
|
-
#### EVM-Only Bridge (BridgeModule)
|
|
282
|
-
|
|
283
|
-
For EVM→EVM routes you can use `BridgeModule` directly (no Solana dependency):
|
|
284
|
-
|
|
285
|
-
```typescript
|
|
286
|
-
import { BridgeModule } from 'agentwallet-sdk';
|
|
287
|
-
|
|
288
|
-
const bridge = new BridgeModule(walletClient, 'base');
|
|
289
|
-
const result = await bridge.bridge(1_000_000n, 'polygon');
|
|
290
|
-
console.log('Minted on Polygon:', result.mintTxHash);
|
|
291
|
-
```
|
|
292
|
-
|
|
293
|
-
#### Solana-Side Operations (SolanaCCTPBridge)
|
|
294
|
-
|
|
295
|
-
```typescript
|
|
296
|
-
import { SolanaCCTPBridge } from 'agentwallet-sdk';
|
|
297
|
-
import { Connection, Keypair } from '@solana/web3.js';
|
|
298
|
-
|
|
299
|
-
const solanaBridge = new SolanaCCTPBridge({
|
|
300
|
-
connection: new Connection('https://api.mainnet-beta.solana.com'),
|
|
301
|
-
payer: keypair,
|
|
302
|
-
});
|
|
303
|
-
|
|
304
|
-
// Burn USDC on Solana → receive on Base
|
|
305
|
-
const burnResult = await solanaBridge.depositForBurn({
|
|
306
|
-
amount: 1_000_000n,
|
|
307
|
-
destinationChain: 'base',
|
|
308
|
-
destinationAddress: '0x...',
|
|
309
|
-
});
|
|
310
|
-
const attestation = await solanaBridge.waitForAttestation(burnResult.messageHash);
|
|
311
|
-
// ... then call receiveMessage on Base
|
|
312
|
-
```
|
|
313
|
-
|
|
314
194
|
## x402 Protocol Support
|
|
315
195
|
|
|
316
196
|
Agent Wallet natively supports the [x402 protocol](https://x402.org) — the open standard for HTTP 402 machine payments. Your agent can automatically pay any x402-enabled API (Stripe, Coinbase, etc.) using USDC on Base, while respecting on-chain spend limits.
|
|
@@ -403,89 +283,62 @@ Server verifies payment → returns 200 + data
|
|
|
403
283
|
|
|
404
284
|
Your agent's keys never leave the non-custodial wallet. All payments respect on-chain spend limits set by the wallet owner.
|
|
405
285
|
|
|
406
|
-
##
|
|
286
|
+
## Why Non-Custodial Beats Exchange Wallets
|
|
407
287
|
|
|
408
|
-
|
|
288
|
+
OKX OnchainOS supports 60+ chains. Coinbase Agentic Wallets are backed by a trillion-dollar exchange. Both look impressive on paper. Here's the problem: **they hold your agent's keys.**
|
|
409
289
|
|
|
410
|
-
|
|
290
|
+
That's not a minor implementation detail. It's the entire trust model.
|
|
411
291
|
|
|
412
|
-
|
|
413
|
-
- **Reputation Registry** — On-chain feedback signals (composable scoring)
|
|
414
|
-
- **Validation Registry** — Hooks for stakers, zkML verifiers, and TEE oracles
|
|
292
|
+
### What custody actually means
|
|
415
293
|
|
|
416
|
-
|
|
294
|
+
When you use an exchange-based agent wallet, your agent's private key lives on their servers. Every transaction your agent signs goes through their infrastructure. They can:
|
|
295
|
+
- Freeze your agent's wallet for any reason (KYC, compliance, a bad week)
|
|
296
|
+
- Be subpoenaed for your agent's transaction history
|
|
297
|
+
- Get hacked — and your agent's keys go with it
|
|
298
|
+
- Change their API, deprecate their SDK, sunset the product
|
|
417
299
|
|
|
418
|
-
|
|
419
|
-
import { ERC8004Client, buildDataURI, validateRegistrationFile } from '@agentwallet/sdk';
|
|
300
|
+
This isn't theoretical. Exchange platforms shut down products, freeze accounts, and go dark. It's happened before. It'll happen again.
|
|
420
301
|
|
|
421
|
-
|
|
422
|
-
registryAddress: '0xYOUR_REGISTRY',
|
|
423
|
-
chain: 'base',
|
|
424
|
-
});
|
|
302
|
+
### The non-custodial difference
|
|
425
303
|
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
description: 'Autonomous DeFi trading agent with x402 support',
|
|
432
|
-
services: [
|
|
433
|
-
{ name: 'A2A', endpoint: 'https://agent.example/.well-known/agent-card.json', version: '0.3.0' },
|
|
434
|
-
{ name: 'MCP', endpoint: 'https://mcp.agent.example/', version: '2025-06-18' },
|
|
435
|
-
],
|
|
436
|
-
x402Support: true,
|
|
437
|
-
active: true,
|
|
438
|
-
supportedTrust: ['reputation'],
|
|
439
|
-
},
|
|
440
|
-
'ipfs://QmYourCID' // or omit to store fully on-chain as data URI
|
|
441
|
-
);
|
|
442
|
-
|
|
443
|
-
// Register the AI model powering this agent
|
|
444
|
-
await identity.setModelMetadata(walletClient, agentId!, {
|
|
445
|
-
model: 'claude-3-5-sonnet',
|
|
446
|
-
provider: 'anthropic',
|
|
447
|
-
version: '2.3.0',
|
|
448
|
-
capabilities: ['trading', 'research', 'payments'],
|
|
449
|
-
framework: 'custom',
|
|
450
|
-
});
|
|
304
|
+
With `agentwallet-sdk`:
|
|
305
|
+
- Your agent's private key is generated locally and **never transmitted anywhere**
|
|
306
|
+
- The wallet contract lives on-chain — no server to shut down
|
|
307
|
+
- Spend limits are enforced by EVM bytecode, not an API policy
|
|
308
|
+
- You can self-host, self-audit, and self-custody everything
|
|
451
309
|
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
310
|
+
```typescript
|
|
311
|
+
// Your keys stay in your environment
|
|
312
|
+
const wallet = createWallet({
|
|
313
|
+
accountAddress: '0xYOUR_CONTRACT',
|
|
314
|
+
walletClient: createWalletClient({
|
|
315
|
+
account: privateKeyToAccount(process.env.AGENT_KEY), // lives here, not on OKX
|
|
316
|
+
transport: http('https://mainnet.base.org'),
|
|
317
|
+
}),
|
|
318
|
+
chain: 'base',
|
|
319
|
+
});
|
|
320
|
+
```
|
|
457
321
|
|
|
458
|
-
|
|
459
|
-
const errors = validateRegistrationFile(agentData.registrationFile!);
|
|
460
|
-
if (errors.length === 0) console.log('Valid ERC-8004 registration ✅');
|
|
461
|
-
```text
|
|
322
|
+
The spend limits (`$25/tx`, `$500/day`) are enforced by the contract itself — not by an exchange API that can change its terms. An agent running over-limit? The contract queues it. No custodian involved.
|
|
462
323
|
|
|
463
|
-
###
|
|
324
|
+
### When exchange wallets make sense
|
|
464
325
|
|
|
465
|
-
|
|
326
|
+
If you're building a quick demo, need zero infrastructure setup, or are already deep in the Coinbase or OKX ecosystem — their hosted products are fast to integrate. No judgment.
|
|
466
327
|
|
|
467
|
-
|
|
468
|
-
eip155:8453:0xRegistryAddress ← namespace:chainId:contractAddress
|
|
469
|
-
```text
|
|
328
|
+
But if you're building production agents that handle real funds, run autonomously, or need to survive beyond a single platform's product lifecycle, you want the keys under your own control.
|
|
470
329
|
|
|
471
|
-
|
|
472
|
-
import { formatAgentRegistry } from '@agentwallet/sdk';
|
|
473
|
-
const id = formatAgentRegistry(8453, '0xYOUR_REGISTRY');
|
|
474
|
-
// → "eip155:8453:0xYOUR_REGISTRY"
|
|
475
|
-
```text
|
|
330
|
+
That's what this SDK is for.
|
|
476
331
|
|
|
477
|
-
###
|
|
332
|
+
### x402 without custody
|
|
478
333
|
|
|
479
|
-
|
|
480
|
-
import { buildDataURI, parseDataURI } from '@agentwallet/sdk';
|
|
334
|
+
The x402 protocol is becoming the standard for AI agent payments. Stripe validated it in February 2026. Coinbase built it into Base. Abstract launched their delegated facilitator model this week.
|
|
481
335
|
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
336
|
+
Every x402 implementation in `agentwallet-sdk` is non-custodial by design:
|
|
337
|
+
- Solana x402: direct signing from your local keypair
|
|
338
|
+
- Base x402: USDC transfer via your on-chain contract
|
|
339
|
+
- Abstract x402: EIP-712 delegated permit, signed locally — the facilitator executes it, but your key authorizes it
|
|
485
340
|
|
|
486
|
-
|
|
487
|
-
const file = parseDataURI(uri);
|
|
488
|
-
```text
|
|
341
|
+
OKX OnchainOS supports x402 too — through their custody layer. Your call which model you trust.
|
|
489
342
|
|
|
490
343
|
---
|
|
491
344
|
|
|
@@ -494,339 +347,11 @@ const file = parseDataURI(uri);
|
|
|
494
347
|
1. **Deploy** an AgentAccountV2 (ERC-6551 token-bound account tied to an NFT)
|
|
495
348
|
2. **Configure** spend policies per token — set per-tx and daily limits
|
|
496
349
|
3. **Register** your agent's hot wallet as an operator
|
|
497
|
-
4. **
|
|
498
|
-
5. **
|
|
499
|
-
6. **Over-limit transactions queue** — owner gets notified, approves or cancels
|
|
350
|
+
4. **Agent operates autonomously** — transactions within limits execute instantly
|
|
351
|
+
5. **Over-limit transactions queue** — owner gets notified, approves or cancels
|
|
500
352
|
|
|
501
353
|
All limits enforced on-chain. No off-chain dependencies. Fully auditable.
|
|
502
354
|
|
|
503
|
-
## Solana Support (v3.0.0)
|
|
504
|
-
|
|
505
|
-
Solana is now a first-class chain in the SDK. Unlike EVM chains, Solana uses Ed25519 keys, SPL tokens, and Jupiter for swaps — all fully supported.
|
|
506
|
-
|
|
507
|
-
### Install
|
|
508
|
-
|
|
509
|
-
```bash
|
|
510
|
-
npm install agentwallet-sdk @solana/web3.js @solana/spl-token
|
|
511
|
-
```
|
|
512
|
-
|
|
513
|
-
### SolanaWallet — Non-Custodial Agent Wallet
|
|
514
|
-
|
|
515
|
-
```typescript
|
|
516
|
-
import { SolanaWallet, SOLANA_USDC_MINT } from 'agentwallet-sdk';
|
|
517
|
-
|
|
518
|
-
// Generate a fresh keypair (ephemeral agent wallet)
|
|
519
|
-
const wallet = SolanaWallet.generate('https://api.mainnet-beta.solana.com');
|
|
520
|
-
|
|
521
|
-
// Or load from existing base58 private key
|
|
522
|
-
const wallet2 = SolanaWallet.fromBase58(process.env.SOLANA_PRIVATE_KEY!, 'https://api.mainnet-beta.solana.com');
|
|
523
|
-
|
|
524
|
-
// Get address (base58 public key)
|
|
525
|
-
console.log(wallet.getAddress());
|
|
526
|
-
|
|
527
|
-
// Check SOL balance (in lamports)
|
|
528
|
-
const lamports = await wallet.getBalance();
|
|
529
|
-
console.log(`${Number(lamports) / 1e9} SOL`);
|
|
530
|
-
|
|
531
|
-
// Check USDC balance (6 decimals)
|
|
532
|
-
const usdc = await wallet.getBalance(SOLANA_USDC_MINT);
|
|
533
|
-
console.log(`${Number(usdc) / 1e6} USDC`);
|
|
534
|
-
|
|
535
|
-
// Transfer SOL
|
|
536
|
-
const sig = await wallet.transfer({
|
|
537
|
-
recipient: 'RecipientPubkey...',
|
|
538
|
-
amount: 500_000_000n, // 0.5 SOL in lamports
|
|
539
|
-
});
|
|
540
|
-
|
|
541
|
-
// Transfer USDC
|
|
542
|
-
const sig2 = await wallet.transfer({
|
|
543
|
-
recipient: 'RecipientPubkey...',
|
|
544
|
-
amount: 5_000_000n, // 5 USDC (6 decimals)
|
|
545
|
-
mint: SOLANA_USDC_MINT,
|
|
546
|
-
});
|
|
547
|
-
```
|
|
548
|
-
|
|
549
|
-
### JupiterSwapClient — DEX Aggregator (Solana's Uniswap)
|
|
550
|
-
|
|
551
|
-
```typescript
|
|
552
|
-
import { SolanaWallet, JupiterSwapClient, SOLANA_USDC_MINT, SOL_NATIVE_MINT } from 'agentwallet-sdk';
|
|
553
|
-
|
|
554
|
-
const wallet = SolanaWallet.fromBase58(process.env.SOLANA_KEY!, 'https://api.mainnet-beta.solana.com');
|
|
555
|
-
const jupiter = new JupiterSwapClient({ wallet });
|
|
556
|
-
|
|
557
|
-
// Get a quote: SOL → USDC
|
|
558
|
-
const quote = await jupiter.getQuote(SOL_NATIVE_MINT, SOLANA_USDC_MINT, 1_000_000_000n);
|
|
559
|
-
console.log(`1 SOL ≈ ${Number(quote.outAmount) / 1e6} USDC`);
|
|
560
|
-
|
|
561
|
-
// Execute swap (0.875% platform fee, 0.5% default slippage)
|
|
562
|
-
const result = await jupiter.swapSolToUsdc(500_000_000n); // 0.5 SOL
|
|
563
|
-
console.log(`Swapped → tx: ${result.txSignature}`);
|
|
564
|
-
|
|
565
|
-
// Reverse: USDC → SOL
|
|
566
|
-
const result2 = await jupiter.swapUsdcToSol(100_000_000n); // 100 USDC
|
|
567
|
-
```
|
|
568
|
-
|
|
569
|
-
### SolanaX402Client — x402 Payments on Solana
|
|
570
|
-
|
|
571
|
-
```typescript
|
|
572
|
-
import { SolanaWallet, SolanaX402Client } from 'agentwallet-sdk';
|
|
573
|
-
|
|
574
|
-
const wallet = SolanaWallet.fromBase58(process.env.SOLANA_KEY!, 'https://api.mainnet-beta.solana.com');
|
|
575
|
-
const x402 = new SolanaX402Client(wallet);
|
|
576
|
-
|
|
577
|
-
// Check if this client can handle a network
|
|
578
|
-
x402.canHandle('solana:mainnet'); // true
|
|
579
|
-
x402.canHandle('base:8453'); // false
|
|
580
|
-
|
|
581
|
-
// Validate payment requirements before paying
|
|
582
|
-
const requirements = {
|
|
583
|
-
scheme: 'exact',
|
|
584
|
-
network: 'solana:mainnet' as const,
|
|
585
|
-
asset: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v', // USDC
|
|
586
|
-
amount: '1000000', // 1 USDC
|
|
587
|
-
payTo: 'RecipientPubkey...',
|
|
588
|
-
maxTimeoutSeconds: 300,
|
|
589
|
-
extra: {},
|
|
590
|
-
};
|
|
591
|
-
|
|
592
|
-
const { valid, reason } = x402.validateRequirements(requirements, { maxAmount: 5_000_000n });
|
|
593
|
-
if (!valid) throw new Error(reason);
|
|
594
|
-
|
|
595
|
-
// Build signed proof (without broadcasting)
|
|
596
|
-
const proof = await x402.buildPaymentProof(requirements);
|
|
597
|
-
// proof.signedTransaction — base64 signed tx for x402 header
|
|
598
|
-
|
|
599
|
-
// Or pay directly (sign + broadcast)
|
|
600
|
-
const paidProof = await x402.pay(requirements);
|
|
601
|
-
console.log(`Paid! tx: ${paidProof.txSignature}`);
|
|
602
|
-
```
|
|
603
|
-
|
|
604
|
-
### Solana Chain Config
|
|
605
|
-
|
|
606
|
-
```typescript
|
|
607
|
-
import { SOLANA_CONFIG, getSolanaConfig } from 'agentwallet-sdk';
|
|
608
|
-
|
|
609
|
-
const mainnet = getSolanaConfig('solana');
|
|
610
|
-
// { cluster: 'mainnet-beta', rpcUrl: '...', usdcMint: 'EPjFWdd5...', x402Network: 'solana:mainnet' }
|
|
611
|
-
|
|
612
|
-
const devnet = getSolanaConfig('solana-devnet');
|
|
613
|
-
```
|
|
614
|
-
|
|
615
|
-
---
|
|
616
|
-
|
|
617
|
-
## Gas Sponsorship (v3.1.0)
|
|
618
|
-
|
|
619
|
-
Agents don't need to hold native gas tokens. Alchemy's ERC-4337 Gas Manager sponsors gas on their behalf.
|
|
620
|
-
|
|
621
|
-
**Requires:**
|
|
622
|
-
- An Alchemy API key with Gas Manager enabled
|
|
623
|
-
- A Gas Manager policy ID (create at [dashboard.alchemy.com/gas-manager](https://dashboard.alchemy.com/gas-manager))
|
|
624
|
-
- An ERC-4337 smart account for the agent (plain EOAs cannot use paymasters)
|
|
625
|
-
|
|
626
|
-
**Supported chains (6 of 17 CCTP chains):** `ethereum`, `base`, `arbitrum`, `optimism`, `polygon`, `worldchain`
|
|
627
|
-
|
|
628
|
-
```typescript
|
|
629
|
-
import { GasSponsor } from 'agentwallet-sdk';
|
|
630
|
-
|
|
631
|
-
const sponsor = new GasSponsor({
|
|
632
|
-
alchemyApiKey: process.env.ALCHEMY_API_KEY!,
|
|
633
|
-
policyId: process.env.ALCHEMY_GAS_POLICY_ID!, // from Alchemy dashboard
|
|
634
|
-
});
|
|
635
|
-
|
|
636
|
-
// Check support before attempting
|
|
637
|
-
if (sponsor.isSupported('base')) {
|
|
638
|
-
const sponsored = await sponsor.sponsorTransaction({
|
|
639
|
-
chain: 'base',
|
|
640
|
-
from: agentSmartAccountAddress, // must be ERC-4337 smart account
|
|
641
|
-
to: usdcContract,
|
|
642
|
-
data: transferCalldata,
|
|
643
|
-
});
|
|
644
|
-
// Submit sponsored.userOperation to an ERC-4337 bundler
|
|
645
|
-
// e.g. via eth_sendUserOperation
|
|
646
|
-
}
|
|
647
|
-
|
|
648
|
-
// Sponsor a bridge transaction
|
|
649
|
-
const sponsoredBridge = await sponsor.sponsorBridge({
|
|
650
|
-
chain: 'optimism',
|
|
651
|
-
from: agentSmartAccountAddress,
|
|
652
|
-
bridgeTx: {
|
|
653
|
-
to: TOKEN_MESSENGER_V2['optimism'],
|
|
654
|
-
data: depositForBurnCalldata,
|
|
655
|
-
value: 0n,
|
|
656
|
-
},
|
|
657
|
-
});
|
|
658
|
-
|
|
659
|
-
// List all supported chains
|
|
660
|
-
const chains = sponsor.getSupportedChains();
|
|
661
|
-
// ['ethereum', 'base', 'arbitrum', 'optimism', 'polygon', 'worldchain']
|
|
662
|
-
```
|
|
663
|
-
|
|
664
|
-
---
|
|
665
|
-
|
|
666
|
-
## Settlement Verification (v3.1.0)
|
|
667
|
-
|
|
668
|
-
Verify that bridge transfers and x402 payments actually settled on-chain. Useful for agents that need to confirm receipt before proceeding.
|
|
669
|
-
|
|
670
|
-
```typescript
|
|
671
|
-
import { SettlementVerifier } from 'agentwallet-sdk';
|
|
672
|
-
|
|
673
|
-
const verifier = new SettlementVerifier({
|
|
674
|
-
alchemyApiKey: process.env.ALCHEMY_API_KEY, // optional — falls back to public RPCs
|
|
675
|
-
});
|
|
676
|
-
|
|
677
|
-
// Verify any EVM transaction
|
|
678
|
-
const evmResult = await verifier.verifyEvmTransaction({
|
|
679
|
-
chain: 'base',
|
|
680
|
-
txHash: '0xabc123...',
|
|
681
|
-
confirmations: 1, // default: 1
|
|
682
|
-
});
|
|
683
|
-
// { status: 'confirmed', blockNumber: 12345n, confirmations: 5, gasUsed: 21000n, success: true }
|
|
684
|
-
|
|
685
|
-
// Verify a Solana transaction
|
|
686
|
-
const solResult = await verifier.verifySolanaTransaction({
|
|
687
|
-
signature: 'base58sig...',
|
|
688
|
-
commitment: 'finalized', // 'confirmed' | 'finalized', default: 'confirmed'
|
|
689
|
-
});
|
|
690
|
-
|
|
691
|
-
// Verify a CCTP bridge transfer end-to-end
|
|
692
|
-
const bridgeResult = await verifier.verifyBridgeSettlement({
|
|
693
|
-
sourceTxHash: '0xburntx...',
|
|
694
|
-
sourceChain: 'base', // or 'solana'
|
|
695
|
-
destinationChain: 'arbitrum',
|
|
696
|
-
expectedAmount: 1_000_000n, // 1 USDC (6 decimals)
|
|
697
|
-
});
|
|
698
|
-
// { status: 'attestation_complete_awaiting_mint', sourceTx: {...}, attestationStatus: 'complete' }
|
|
699
|
-
|
|
700
|
-
// Verify an x402 payment via ERC20 Transfer event logs
|
|
701
|
-
const paymentResult = await verifier.verifyX402Payment({
|
|
702
|
-
chain: 'base',
|
|
703
|
-
txHash: '0xpaymenttx...',
|
|
704
|
-
expectedPayee: '0xMerchantAddress',
|
|
705
|
-
expectedAmount: 1_000_000n, // 1 USDC
|
|
706
|
-
});
|
|
707
|
-
// { status: 'confirmed', payeeVerified: true, amountVerified: true, actualAmount: 1000000n }
|
|
708
|
-
```
|
|
709
|
-
|
|
710
|
-
### Settlement Status Types
|
|
711
|
-
|
|
712
|
-
| Status | Meaning |
|
|
713
|
-
|--------|---------|
|
|
714
|
-
| `confirmed` | Transaction mined with required confirmations |
|
|
715
|
-
| `pending` | Transaction in mempool or not enough confirmations |
|
|
716
|
-
| `failed` | Transaction reverted (status=0) |
|
|
717
|
-
| `not_found` | Transaction not found or RPC error |
|
|
718
|
-
|
|
719
|
-
Bridge-specific statuses:
|
|
720
|
-
|
|
721
|
-
| Status | Meaning |
|
|
722
|
-
|--------|---------|
|
|
723
|
-
| `source_confirmed_awaiting_attestation` | Burn tx confirmed, Circle attestation pending |
|
|
724
|
-
| `attestation_complete_awaiting_mint` | Attestation ready, destination mint not yet verified |
|
|
725
|
-
| `complete` | Full bridge cycle confirmed |
|
|
726
|
-
| `source_failed` | Source burn transaction reverted |
|
|
727
|
-
|
|
728
|
-
---
|
|
729
|
-
|
|
730
|
-
## Fiat Onramp (Optional — v3.2.0)
|
|
731
|
-
|
|
732
|
-
> **This module is entirely opt-in. The core SDK is fully anonymous and non-custodial.**
|
|
733
|
-
> Users who fund their agent wallet via direct crypto transfer, bridge, or any other method
|
|
734
|
-
> **never encounter KYC** and remain completely anonymous.
|
|
735
|
-
> KYC only occurs when you explicitly choose to use the fiat onramp feature.
|
|
736
|
-
|
|
737
|
-
The `FiatOnramp` class aggregates multiple fiat-to-crypto providers (MoonPay, Stripe, Transak)
|
|
738
|
-
into a single interface. It returns a `purchaseUrl` — opening this URL takes the user to the
|
|
739
|
-
provider's hosted KYC + payment page. **The SDK never sees, stores, or transmits any KYC data.**
|
|
740
|
-
|
|
741
|
-
### Install
|
|
742
|
-
|
|
743
|
-
No additional packages needed — `FiatOnramp` is included in `agentwallet-sdk`.
|
|
744
|
-
|
|
745
|
-
Get API keys from the provider dashboards:
|
|
746
|
-
|
|
747
|
-
- **MoonPay:** https://dashboard.moonpay.com (publishable key)
|
|
748
|
-
- **Stripe:** https://dashboard.stripe.com (secret key — server-side only)
|
|
749
|
-
- **Transak:** https://dashboard.transak.com (API key)
|
|
750
|
-
|
|
751
|
-
### Usage
|
|
752
|
-
|
|
753
|
-
```typescript
|
|
754
|
-
import { FiatOnramp } from 'agentwallet-sdk';
|
|
755
|
-
|
|
756
|
-
// Only configure the providers you have keys for.
|
|
757
|
-
// Omitting all keys is valid — returns empty provider list with zero friction.
|
|
758
|
-
const onramp = new FiatOnramp({
|
|
759
|
-
moonpayApiKey: process.env.MOONPAY_API_KEY,
|
|
760
|
-
transakApiKey: process.env.TRANSAK_API_KEY,
|
|
761
|
-
});
|
|
762
|
-
|
|
763
|
-
// Get quotes from all configured providers that support base/USDC
|
|
764
|
-
const quotes = await onramp.getQuotes({
|
|
765
|
-
amount: 100,
|
|
766
|
-
currency: 'USD',
|
|
767
|
-
token: 'USDC',
|
|
768
|
-
chain: 'base',
|
|
769
|
-
walletAddress: '0xYourAgentWalletAddress',
|
|
770
|
-
});
|
|
771
|
-
|
|
772
|
-
// quotes[0].kycRequired is always true — KYC happens on the provider's hosted page
|
|
773
|
-
console.log(quotes[0].purchaseUrl); // Open this URL in a browser to complete purchase
|
|
774
|
-
|
|
775
|
-
// Or target a specific provider
|
|
776
|
-
const session = await onramp.createSession({
|
|
777
|
-
amount: 100,
|
|
778
|
-
currency: 'USD',
|
|
779
|
-
token: 'USDC',
|
|
780
|
-
chain: 'base',
|
|
781
|
-
walletAddress: '0xYourAgentWalletAddress',
|
|
782
|
-
provider: 'moonpay',
|
|
783
|
-
redirectUrl: 'https://yourapp.com/done', // optional
|
|
784
|
-
});
|
|
785
|
-
|
|
786
|
-
console.log(session.purchaseUrl); // MoonPay hosted KYC + payment page
|
|
787
|
-
console.log(session.feeAmount); // e.g., 2.50
|
|
788
|
-
console.log(session.feePercent); // e.g., 2.5
|
|
789
|
-
```
|
|
790
|
-
|
|
791
|
-
### Supported Chains & Tokens
|
|
792
|
-
|
|
793
|
-
| Provider | Chains | Tokens |
|
|
794
|
-
|----------|--------|--------|
|
|
795
|
-
| MoonPay | ethereum, base, solana, polygon, arbitrum, optimism | ETH, USDC, USDT, SOL, MATIC |
|
|
796
|
-
| Stripe | ethereum, base, solana, polygon, arbitrum, optimism | ETH, USDC, SOL, MATIC |
|
|
797
|
-
| Transak | ethereum, base, solana, polygon, arbitrum, optimism, avalanche, bsc | ETH, USDC, USDT, SOL, MATIC, AVAX, BNB |
|
|
798
|
-
|
|
799
|
-
### API
|
|
800
|
-
|
|
801
|
-
```typescript
|
|
802
|
-
// Get quotes from all configured providers
|
|
803
|
-
getQuotes(params: OnrampParams): Promise<FiatQuote[]>
|
|
804
|
-
|
|
805
|
-
// Create a session with a specific provider
|
|
806
|
-
createSession(params: OnrampParams & { provider: string }): Promise<FiatQuote>
|
|
807
|
-
|
|
808
|
-
// Check if a provider supports a chain/token combo
|
|
809
|
-
isSupported(provider: string, chain: string, token: string): boolean
|
|
810
|
-
|
|
811
|
-
// Get configured provider names
|
|
812
|
-
getProviders(): string[]
|
|
813
|
-
|
|
814
|
-
// Get supported chains for a provider
|
|
815
|
-
getSupportedChains(provider: string): string[]
|
|
816
|
-
|
|
817
|
-
// Get supported tokens on a chain for a provider
|
|
818
|
-
getSupportedTokens(provider: string, chain: string): string[]
|
|
819
|
-
```
|
|
820
|
-
|
|
821
|
-
### Privacy Guarantee
|
|
822
|
-
|
|
823
|
-
- The SDK **never** collects, stores, or transmits KYC data
|
|
824
|
-
- The SDK **never** stores payment info (no card numbers, no bank accounts)
|
|
825
|
-
- KYC + payment happen entirely on the provider's hosted page
|
|
826
|
-
- Direct crypto funding (transfer, bridge, swap) = fully anonymous, no KYC, ever
|
|
827
|
-
|
|
828
|
-
---
|
|
829
|
-
|
|
830
355
|
## License
|
|
831
356
|
|
|
832
357
|
MIT
|