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.
Files changed (320) hide show
  1. package/README.md +41 -516
  2. package/dist/bridge/abis.d.ts +48 -171
  3. package/dist/bridge/abis.d.ts.map +1 -1
  4. package/dist/bridge/abis.js.map +1 -1
  5. package/dist/bridge/client.d.ts +2 -41
  6. package/dist/bridge/client.d.ts.map +1 -1
  7. package/dist/bridge/client.js +35 -168
  8. package/dist/bridge/client.js.map +1 -1
  9. package/dist/bridge/index.d.ts +2 -4
  10. package/dist/bridge/index.d.ts.map +1 -1
  11. package/dist/bridge/index.js +1 -8
  12. package/dist/bridge/index.js.map +1 -1
  13. package/dist/bridge/types.d.ts +15 -134
  14. package/dist/bridge/types.d.ts.map +1 -1
  15. package/dist/bridge/types.js +16 -170
  16. package/dist/bridge/types.js.map +1 -1
  17. package/dist/identity/erc8004.d.ts +2 -240
  18. package/dist/identity/erc8004.d.ts.map +1 -1
  19. package/dist/identity/erc8004.js +58 -334
  20. package/dist/identity/erc8004.js.map +1 -1
  21. package/dist/index.d.ts +313 -136
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +11 -59
  24. package/dist/index.js.map +1 -1
  25. package/dist/swap/SwapModule.d.ts +6 -50
  26. package/dist/swap/SwapModule.d.ts.map +1 -1
  27. package/dist/swap/SwapModule.js +25 -153
  28. package/dist/swap/SwapModule.js.map +1 -1
  29. package/dist/swap/abi.d.ts +47 -165
  30. package/dist/swap/abi.d.ts.map +1 -1
  31. package/dist/swap/abi.js.map +1 -1
  32. package/dist/swap/index.d.ts +2 -3
  33. package/dist/swap/index.d.ts.map +1 -1
  34. package/dist/swap/index.js +1 -4
  35. package/dist/swap/index.js.map +1 -1
  36. package/dist/swap/types.d.ts +6 -36
  37. package/dist/swap/types.d.ts.map +1 -1
  38. package/dist/swap/types.js +0 -1
  39. package/dist/swap/types.js.map +1 -1
  40. package/dist/types.d.ts +1 -2
  41. package/dist/types.d.ts.map +1 -1
  42. package/dist/types.js +0 -1
  43. package/dist/types.js.map +1 -1
  44. package/dist/x402/__tests__/budget.test.d.ts +2 -0
  45. package/dist/x402/__tests__/budget.test.d.ts.map +1 -0
  46. package/dist/x402/__tests__/budget.test.js +114 -0
  47. package/dist/x402/__tests__/budget.test.js.map +1 -0
  48. package/dist/x402/__tests__/client.test.d.ts +2 -0
  49. package/dist/x402/__tests__/client.test.d.ts.map +1 -0
  50. package/dist/x402/__tests__/client.test.js +107 -0
  51. package/dist/x402/__tests__/client.test.js.map +1 -0
  52. package/dist/x402/chains/abstract/index.d.ts +135 -0
  53. package/dist/x402/chains/abstract/index.d.ts.map +1 -0
  54. package/dist/x402/chains/abstract/index.js +190 -0
  55. package/dist/x402/chains/abstract/index.js.map +1 -0
  56. package/dist/x402/client.d.ts +1 -4
  57. package/dist/x402/client.d.ts.map +1 -1
  58. package/dist/x402/client.js +2 -16
  59. package/dist/x402/client.js.map +1 -1
  60. package/dist/x402/index.d.ts +3 -1
  61. package/dist/x402/index.d.ts.map +1 -1
  62. package/dist/x402/index.js +3 -1
  63. package/dist/x402/index.js.map +1 -1
  64. package/dist/x402/types.d.ts +3 -5
  65. package/dist/x402/types.d.ts.map +1 -1
  66. package/dist/x402/types.js +2 -17
  67. package/dist/x402/types.js.map +1 -1
  68. package/package.json +12 -32
  69. package/dist/ap2/index.d.ts +0 -185
  70. package/dist/ap2/index.d.ts.map +0 -1
  71. package/dist/ap2/index.js +0 -255
  72. package/dist/ap2/index.js.map +0 -1
  73. package/dist/bridge/unified.d.ts +0 -101
  74. package/dist/bridge/unified.d.ts.map +0 -1
  75. package/dist/bridge/unified.js +0 -284
  76. package/dist/bridge/unified.js.map +0 -1
  77. package/dist/chains.d.ts +0 -62
  78. package/dist/chains.d.ts.map +0 -1
  79. package/dist/chains.js +0 -108
  80. package/dist/chains.js.map +0 -1
  81. package/dist/fiat/index.d.ts +0 -10
  82. package/dist/fiat/index.d.ts.map +0 -1
  83. package/dist/fiat/index.js +0 -9
  84. package/dist/fiat/index.js.map +0 -1
  85. package/dist/fiat/onramp.d.ts +0 -101
  86. package/dist/fiat/onramp.d.ts.map +0 -1
  87. package/dist/fiat/onramp.js +0 -155
  88. package/dist/fiat/onramp.js.map +0 -1
  89. package/dist/fiat/providers/index.d.ts +0 -16
  90. package/dist/fiat/providers/index.d.ts.map +0 -1
  91. package/dist/fiat/providers/index.js +0 -30
  92. package/dist/fiat/providers/index.js.map +0 -1
  93. package/dist/fiat/providers/moonpay.d.ts +0 -22
  94. package/dist/fiat/providers/moonpay.d.ts.map +0 -1
  95. package/dist/fiat/providers/moonpay.js +0 -107
  96. package/dist/fiat/providers/moonpay.js.map +0 -1
  97. package/dist/fiat/providers/stripe.d.ts +0 -26
  98. package/dist/fiat/providers/stripe.d.ts.map +0 -1
  99. package/dist/fiat/providers/stripe.js +0 -135
  100. package/dist/fiat/providers/stripe.js.map +0 -1
  101. package/dist/fiat/providers/transak.d.ts +0 -26
  102. package/dist/fiat/providers/transak.d.ts.map +0 -1
  103. package/dist/fiat/providers/transak.js +0 -119
  104. package/dist/fiat/providers/transak.js.map +0 -1
  105. package/dist/fiat/types.d.ts +0 -106
  106. package/dist/fiat/types.d.ts.map +0 -1
  107. package/dist/fiat/types.js +0 -13
  108. package/dist/fiat/types.js.map +0 -1
  109. package/dist/flash/executor.d.ts +0 -119
  110. package/dist/flash/executor.d.ts.map +0 -1
  111. package/dist/flash/executor.js +0 -195
  112. package/dist/flash/executor.js.map +0 -1
  113. package/dist/flash/index.d.ts +0 -28
  114. package/dist/flash/index.d.ts.map +0 -1
  115. package/dist/flash/index.js +0 -25
  116. package/dist/flash/index.js.map +0 -1
  117. package/dist/flash/scanner.d.ts +0 -133
  118. package/dist/flash/scanner.d.ts.map +0 -1
  119. package/dist/flash/scanner.js +0 -212
  120. package/dist/flash/scanner.js.map +0 -1
  121. package/dist/flash/types.d.ts +0 -136
  122. package/dist/flash/types.d.ts.map +0 -1
  123. package/dist/flash/types.js +0 -23
  124. package/dist/flash/types.js.map +0 -1
  125. package/dist/gas/index.d.ts +0 -4
  126. package/dist/gas/index.d.ts.map +0 -1
  127. package/dist/gas/index.js +0 -3
  128. package/dist/gas/index.js.map +0 -1
  129. package/dist/gas/sponsor.d.ts +0 -70
  130. package/dist/gas/sponsor.d.ts.map +0 -1
  131. package/dist/gas/sponsor.js +0 -193
  132. package/dist/gas/sponsor.js.map +0 -1
  133. package/dist/gas/types.d.ts +0 -76
  134. package/dist/gas/types.d.ts.map +0 -1
  135. package/dist/gas/types.js +0 -21
  136. package/dist/gas/types.js.map +0 -1
  137. package/dist/identity/agent-identity.d.ts +0 -276
  138. package/dist/identity/agent-identity.d.ts.map +0 -1
  139. package/dist/identity/agent-identity.js +0 -300
  140. package/dist/identity/agent-identity.js.map +0 -1
  141. package/dist/identity/erc6551.d.ts +0 -441
  142. package/dist/identity/erc6551.d.ts.map +0 -1
  143. package/dist/identity/erc6551.js +0 -517
  144. package/dist/identity/erc6551.js.map +0 -1
  145. package/dist/mev/index.d.ts +0 -4
  146. package/dist/mev/index.d.ts.map +0 -1
  147. package/dist/mev/index.js +0 -4
  148. package/dist/mev/index.js.map +0 -1
  149. package/dist/mev/protection.d.ts +0 -54
  150. package/dist/mev/protection.d.ts.map +0 -1
  151. package/dist/mev/protection.js +0 -185
  152. package/dist/mev/protection.js.map +0 -1
  153. package/dist/mev/risk.d.ts +0 -19
  154. package/dist/mev/risk.d.ts.map +0 -1
  155. package/dist/mev/risk.js +0 -95
  156. package/dist/mev/risk.js.map +0 -1
  157. package/dist/mev/types.d.ts +0 -49
  158. package/dist/mev/types.d.ts.map +0 -1
  159. package/dist/mev/types.js +0 -2
  160. package/dist/mev/types.js.map +0 -1
  161. package/dist/settlement/index.d.ts +0 -4
  162. package/dist/settlement/index.d.ts.map +0 -1
  163. package/dist/settlement/index.js +0 -3
  164. package/dist/settlement/index.js.map +0 -1
  165. package/dist/settlement/types.d.ts +0 -66
  166. package/dist/settlement/types.d.ts.map +0 -1
  167. package/dist/settlement/types.js +0 -37
  168. package/dist/settlement/types.js.map +0 -1
  169. package/dist/settlement/verifier.d.ts +0 -75
  170. package/dist/settlement/verifier.d.ts.map +0 -1
  171. package/dist/settlement/verifier.js +0 -354
  172. package/dist/settlement/verifier.js.map +0 -1
  173. package/dist/solana/bridge.d.ts +0 -144
  174. package/dist/solana/bridge.d.ts.map +0 -1
  175. package/dist/solana/bridge.js +0 -352
  176. package/dist/solana/bridge.js.map +0 -1
  177. package/dist/solana/index.d.ts +0 -8
  178. package/dist/solana/index.d.ts.map +0 -1
  179. package/dist/solana/index.js +0 -6
  180. package/dist/solana/index.js.map +0 -1
  181. package/dist/solana/swap.d.ts +0 -85
  182. package/dist/solana/swap.d.ts.map +0 -1
  183. package/dist/solana/swap.js +0 -173
  184. package/dist/solana/swap.js.map +0 -1
  185. package/dist/solana/types.d.ts +0 -126
  186. package/dist/solana/types.d.ts.map +0 -1
  187. package/dist/solana/types.js +0 -10
  188. package/dist/solana/types.js.map +0 -1
  189. package/dist/solana/wallet.d.ts +0 -83
  190. package/dist/solana/wallet.d.ts.map +0 -1
  191. package/dist/solana/wallet.js +0 -164
  192. package/dist/solana/wallet.js.map +0 -1
  193. package/dist/solana/x402.d.ts +0 -69
  194. package/dist/solana/x402.d.ts.map +0 -1
  195. package/dist/solana/x402.js +0 -154
  196. package/dist/solana/x402.js.map +0 -1
  197. package/dist/solver/adapter.d.ts +0 -47
  198. package/dist/solver/adapter.d.ts.map +0 -1
  199. package/dist/solver/adapter.js +0 -138
  200. package/dist/solver/adapter.js.map +0 -1
  201. package/dist/solver/analyzer.d.ts +0 -48
  202. package/dist/solver/analyzer.d.ts.map +0 -1
  203. package/dist/solver/analyzer.js +0 -89
  204. package/dist/solver/analyzer.js.map +0 -1
  205. package/dist/solver/builder.d.ts +0 -31
  206. package/dist/solver/builder.d.ts.map +0 -1
  207. package/dist/solver/builder.js +0 -60
  208. package/dist/solver/builder.js.map +0 -1
  209. package/dist/solver/index.d.ts +0 -22
  210. package/dist/solver/index.d.ts.map +0 -1
  211. package/dist/solver/index.js +0 -21
  212. package/dist/solver/index.js.map +0 -1
  213. package/dist/solver/types.d.ts +0 -115
  214. package/dist/solver/types.d.ts.map +0 -1
  215. package/dist/solver/types.js +0 -10
  216. package/dist/solver/types.js.map +0 -1
  217. package/dist/spend-guard/index.d.ts +0 -125
  218. package/dist/spend-guard/index.d.ts.map +0 -1
  219. package/dist/spend-guard/index.js +0 -150
  220. package/dist/spend-guard/index.js.map +0 -1
  221. package/dist/swap/router/cache.d.ts +0 -13
  222. package/dist/swap/router/cache.d.ts.map +0 -1
  223. package/dist/swap/router/cache.js +0 -30
  224. package/dist/swap/router/cache.js.map +0 -1
  225. package/dist/swap/router/flashbots.d.ts +0 -10
  226. package/dist/swap/router/flashbots.d.ts.map +0 -1
  227. package/dist/swap/router/flashbots.js +0 -43
  228. package/dist/swap/router/flashbots.js.map +0 -1
  229. package/dist/swap/router/health.d.ts +0 -17
  230. package/dist/swap/router/health.d.ts.map +0 -1
  231. package/dist/swap/router/health.js +0 -38
  232. package/dist/swap/router/health.js.map +0 -1
  233. package/dist/swap/router/index.d.ts +0 -10
  234. package/dist/swap/router/index.d.ts.map +0 -1
  235. package/dist/swap/router/index.js +0 -10
  236. package/dist/swap/router/index.js.map +0 -1
  237. package/dist/swap/router/providers/cowswap.d.ts +0 -11
  238. package/dist/swap/router/providers/cowswap.d.ts.map +0 -1
  239. package/dist/swap/router/providers/cowswap.js +0 -79
  240. package/dist/swap/router/providers/cowswap.js.map +0 -1
  241. package/dist/swap/router/providers/index.d.ts +0 -20
  242. package/dist/swap/router/providers/index.d.ts.map +0 -1
  243. package/dist/swap/router/providers/index.js +0 -32
  244. package/dist/swap/router/providers/index.js.map +0 -1
  245. package/dist/swap/router/providers/jupiter.d.ts +0 -12
  246. package/dist/swap/router/providers/jupiter.d.ts.map +0 -1
  247. package/dist/swap/router/providers/jupiter.js +0 -73
  248. package/dist/swap/router/providers/jupiter.js.map +0 -1
  249. package/dist/swap/router/providers/lifi.d.ts +0 -11
  250. package/dist/swap/router/providers/lifi.d.ts.map +0 -1
  251. package/dist/swap/router/providers/lifi.js +0 -123
  252. package/dist/swap/router/providers/lifi.js.map +0 -1
  253. package/dist/swap/router/providers/oneinch.d.ts +0 -13
  254. package/dist/swap/router/providers/oneinch.d.ts.map +0 -1
  255. package/dist/swap/router/providers/oneinch.js +0 -71
  256. package/dist/swap/router/providers/oneinch.js.map +0 -1
  257. package/dist/swap/router/providers/paraswap.d.ts +0 -11
  258. package/dist/swap/router/providers/paraswap.d.ts.map +0 -1
  259. package/dist/swap/router/providers/paraswap.js +0 -73
  260. package/dist/swap/router/providers/paraswap.js.map +0 -1
  261. package/dist/swap/router/providers/uniswap.d.ts +0 -31
  262. package/dist/swap/router/providers/uniswap.d.ts.map +0 -1
  263. package/dist/swap/router/providers/uniswap.js +0 -116
  264. package/dist/swap/router/providers/uniswap.js.map +0 -1
  265. package/dist/swap/router/providers/zerox.d.ts +0 -13
  266. package/dist/swap/router/providers/zerox.d.ts.map +0 -1
  267. package/dist/swap/router/providers/zerox.js +0 -94
  268. package/dist/swap/router/providers/zerox.js.map +0 -1
  269. package/dist/swap/router/router.d.ts +0 -86
  270. package/dist/swap/router/router.d.ts.map +0 -1
  271. package/dist/swap/router/router.js +0 -224
  272. package/dist/swap/router/router.js.map +0 -1
  273. package/dist/swap/router/rsi/engine.d.ts +0 -60
  274. package/dist/swap/router/rsi/engine.d.ts.map +0 -1
  275. package/dist/swap/router/rsi/engine.js +0 -483
  276. package/dist/swap/router/rsi/engine.js.map +0 -1
  277. package/dist/swap/router/rsi/index.d.ts +0 -3
  278. package/dist/swap/router/rsi/index.d.ts.map +0 -1
  279. package/dist/swap/router/rsi/index.js +0 -3
  280. package/dist/swap/router/rsi/index.js.map +0 -1
  281. package/dist/swap/router/rsi/types.d.ts +0 -106
  282. package/dist/swap/router/rsi/types.d.ts.map +0 -1
  283. package/dist/swap/router/rsi/types.js +0 -3
  284. package/dist/swap/router/rsi/types.js.map +0 -1
  285. package/dist/swap/router/types.d.ts +0 -120
  286. package/dist/swap/router/types.d.ts.map +0 -1
  287. package/dist/swap/router/types.js +0 -16
  288. package/dist/swap/router/types.js.map +0 -1
  289. package/dist/tax/engine.d.ts +0 -131
  290. package/dist/tax/engine.d.ts.map +0 -1
  291. package/dist/tax/engine.js +0 -307
  292. package/dist/tax/engine.js.map +0 -1
  293. package/dist/tax/index.d.ts +0 -9
  294. package/dist/tax/index.d.ts.map +0 -1
  295. package/dist/tax/index.js +0 -8
  296. package/dist/tax/index.js.map +0 -1
  297. package/dist/tax/lots.d.ts +0 -60
  298. package/dist/tax/lots.d.ts.map +0 -1
  299. package/dist/tax/lots.js +0 -129
  300. package/dist/tax/lots.js.map +0 -1
  301. package/dist/tax/types.d.ts +0 -113
  302. package/dist/tax/types.d.ts.map +0 -1
  303. package/dist/tax/types.js +0 -18
  304. package/dist/tax/types.js.map +0 -1
  305. package/dist/yield/index.d.ts +0 -26
  306. package/dist/yield/index.d.ts.map +0 -1
  307. package/dist/yield/index.js +0 -25
  308. package/dist/yield/index.js.map +0 -1
  309. package/dist/yield/rates.d.ts +0 -114
  310. package/dist/yield/rates.d.ts.map +0 -1
  311. package/dist/yield/rates.js +0 -351
  312. package/dist/yield/rates.js.map +0 -1
  313. package/dist/yield/types.d.ts +0 -134
  314. package/dist/yield/types.d.ts.map +0 -1
  315. package/dist/yield/types.js +0 -24
  316. package/dist/yield/types.js.map +0 -1
  317. package/dist/yield/vault.d.ts +0 -112
  318. package/dist/yield/vault.d.ts.map +0 -1
  319. package/dist/yield/vault.js +0 -264
  320. 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
- ## ERC-8004: On-Chain Agent Identity (v2.3.0)
286
+ ## Why Non-Custodial Beats Exchange Wallets
407
287
 
408
- Give your AI agent a portable, censorship-resistant identity on Ethereum via [ERC-8004 Trustless Agents](https://eips.ethereum.org/EIPS/eip-8004).
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
- ERC-8004 provides three things:
290
+ That's not a minor implementation detail. It's the entire trust model.
411
291
 
412
- - **Identity Registry** ERC-721 NFT that resolves to an agent's registration file (name, description, services, capabilities)
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
- The SDK integrates the Identity Registry. Non-custodial keys never leave the device.
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
- ```typescript
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
- const identity = new ERC8004Client({
422
- registryAddress: '0xYOUR_REGISTRY',
423
- chain: 'base',
424
- });
302
+ ### The non-custodial difference
425
303
 
426
- // Register your agent on-chain (auto-builds data URI if you don't pass one)
427
- const { txHash, agentId } = await identity.registerAgent(
428
- walletClient,
429
- {
430
- name: 'TradingAgent',
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
- // Resolve any agent's full identity
453
- const agentData = await identity.lookupAgentIdentity(42n);
454
- console.log(agentData.registrationFile?.name); // "TradingAgent"
455
- console.log(agentData.modelMetadata?.model); // "claude-3-5-sonnet"
456
- console.log(agentData.owner); // NFT owner address
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
- // Validate a registration file before publishing
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
- ### Agent Registry Identifier
324
+ ### When exchange wallets make sense
464
325
 
465
- Each agent is globally identified by a namespaced string:
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
- ```text
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
- ```typescript
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
- ### Fully On-Chain Storage (No IPFS Required)
332
+ ### x402 without custody
478
333
 
479
- ```typescript
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
- // Encode registration file as a base64 data URI (embeds in the NFT)
483
- const uri = buildDataURI({ name: 'MyAgent', description: '...', type: '...' });
484
- // "data:application/json;base64,eyJ0eXBlIjoi..."
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
- // Decode it back
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. **Register on-chain identity** via ERC-8004 (optional but recommended)
498
- 5. **Agent operates autonomously** — transactions within limits execute instantly
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