agentwallet-sdk 6.0.4 → 6.1.0

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 (87) hide show
  1. package/README.md +380 -323
  2. package/dist/bridge/__tests__/solana.test.js +1 -1
  3. package/dist/bridge/__tests__/solana.test.js.map +1 -1
  4. package/dist/escrow/MutualStakeEscrow.d.ts.map +1 -1
  5. package/dist/escrow/MutualStakeEscrow.js +3 -5
  6. package/dist/escrow/MutualStakeEscrow.js.map +1 -1
  7. package/dist/identity/index.d.ts +2 -0
  8. package/dist/identity/index.d.ts.map +1 -1
  9. package/dist/identity/index.js +2 -0
  10. package/dist/identity/index.js.map +1 -1
  11. package/dist/identity/uaid.d.ts +193 -0
  12. package/dist/identity/uaid.d.ts.map +1 -0
  13. package/dist/identity/uaid.js +296 -0
  14. package/dist/identity/uaid.js.map +1 -0
  15. package/dist/index.d.ts +52 -252
  16. package/dist/index.d.ts.map +1 -1
  17. package/dist/index.js +17 -5
  18. package/dist/index.js.map +1 -1
  19. package/dist/policy/SpendingPolicy.test.js.map +1 -1
  20. package/dist/router/PaymentRouter.d.ts +79 -0
  21. package/dist/router/PaymentRouter.d.ts.map +1 -0
  22. package/dist/router/PaymentRouter.js +144 -0
  23. package/dist/router/PaymentRouter.js.map +1 -0
  24. package/dist/router/index.d.ts +3 -0
  25. package/dist/router/index.d.ts.map +1 -0
  26. package/dist/router/index.js +2 -0
  27. package/dist/router/index.js.map +1 -0
  28. package/dist/swap/SwapModule.js +1 -1
  29. package/dist/swap/SwapModule.js.map +1 -1
  30. package/dist/tokens/__tests__/decimals.test.d.ts +2 -0
  31. package/dist/tokens/__tests__/decimals.test.d.ts.map +1 -0
  32. package/dist/tokens/__tests__/decimals.test.js +107 -0
  33. package/dist/tokens/__tests__/decimals.test.js.map +1 -0
  34. package/dist/tokens/__tests__/registry.test.d.ts +2 -0
  35. package/dist/tokens/__tests__/registry.test.d.ts.map +1 -0
  36. package/dist/tokens/__tests__/registry.test.js +191 -0
  37. package/dist/tokens/__tests__/registry.test.js.map +1 -0
  38. package/dist/tokens/__tests__/transfers.test.d.ts +2 -0
  39. package/dist/tokens/__tests__/transfers.test.d.ts.map +1 -0
  40. package/dist/tokens/__tests__/transfers.test.js +103 -0
  41. package/dist/tokens/__tests__/transfers.test.js.map +1 -0
  42. package/dist/tokens/decimals.d.ts +65 -0
  43. package/dist/tokens/decimals.d.ts.map +1 -0
  44. package/dist/tokens/decimals.js +112 -0
  45. package/dist/tokens/decimals.js.map +1 -0
  46. package/dist/tokens/index.d.ts +14 -0
  47. package/dist/tokens/index.d.ts.map +1 -0
  48. package/dist/tokens/index.js +14 -0
  49. package/dist/tokens/index.js.map +1 -0
  50. package/dist/tokens/registry.d.ts +82 -0
  51. package/dist/tokens/registry.d.ts.map +1 -0
  52. package/dist/tokens/registry.js +293 -0
  53. package/dist/tokens/registry.js.map +1 -0
  54. package/dist/tokens/solana.d.ts +108 -0
  55. package/dist/tokens/solana.d.ts.map +1 -0
  56. package/dist/tokens/solana.js +306 -0
  57. package/dist/tokens/solana.js.map +1 -0
  58. package/dist/tokens/transfers.d.ts +95 -0
  59. package/dist/tokens/transfers.d.ts.map +1 -0
  60. package/dist/tokens/transfers.js +196 -0
  61. package/dist/tokens/transfers.js.map +1 -0
  62. package/dist/x402/chains/abstract/index.d.ts.map +1 -1
  63. package/dist/x402/chains/abstract/index.js.map +1 -1
  64. package/dist/x402/client.d.ts +7 -1
  65. package/dist/x402/client.d.ts.map +1 -1
  66. package/dist/x402/client.js +24 -13
  67. package/dist/x402/client.js.map +1 -1
  68. package/dist/x402/index.d.ts +1 -0
  69. package/dist/x402/index.d.ts.map +1 -1
  70. package/dist/x402/index.js +2 -0
  71. package/dist/x402/index.js.map +1 -1
  72. package/dist/x402/middleware.d.ts.map +1 -1
  73. package/dist/x402/middleware.js +0 -3
  74. package/dist/x402/middleware.js.map +1 -1
  75. package/dist/x402/multi-asset.d.ts +54 -0
  76. package/dist/x402/multi-asset.d.ts.map +1 -0
  77. package/dist/x402/multi-asset.js +123 -0
  78. package/dist/x402/multi-asset.js.map +1 -0
  79. package/package.json +12 -3
  80. package/dist/plugins/elizaos.d.ts +0 -52
  81. package/dist/plugins/elizaos.d.ts.map +0 -1
  82. package/dist/plugins/elizaos.js +0 -89
  83. package/dist/plugins/elizaos.js.map +0 -1
  84. package/dist/x402/chains/stellar/index.d.ts +0 -149
  85. package/dist/x402/chains/stellar/index.d.ts.map +0 -1
  86. package/dist/x402/chains/stellar/index.js +0 -197
  87. package/dist/x402/chains/stellar/index.js.map +0 -1
@@ -0,0 +1,112 @@
1
+ /**
2
+ * @module tokens/decimals
3
+ * Token decimal normalization utilities for multi-token agent wallets.
4
+ *
5
+ * Handles safe conversion between human-readable amounts ("1.5") and raw
6
+ * on-chain bigint amounts (1500000n for USDC with 6 decimals). All arithmetic
7
+ * is done in integer domain to avoid floating point precision errors.
8
+ */
9
+ /**
10
+ * Convert a human-readable amount string to raw bigint (on-chain units).
11
+ *
12
+ * @param amount - Human-readable amount, e.g. "1.5" or "1000"
13
+ * @param decimals - Token decimal places (e.g. 6 for USDC, 18 for WETH)
14
+ * @returns Raw on-chain amount as bigint
15
+ *
16
+ * @example
17
+ * toRaw("1.5", 6) // → 1500000n (1.5 USDC)
18
+ * toRaw("1.0", 18) // → 1000000000000000000n (1 WETH)
19
+ * toRaw("0.001", 8) // → 100000n (0.001 WBTC)
20
+ */
21
+ export function toRaw(amount, decimals) {
22
+ if (typeof amount === 'bigint')
23
+ return amount;
24
+ const str = amount.trim();
25
+ if (!str || str === '0')
26
+ return 0n;
27
+ // Validate: only digits and one optional decimal point, optional leading minus
28
+ if (!/^-?\d+(\.\d+)?$/.test(str)) {
29
+ throw new Error(`toRaw: invalid amount string "${amount}"`);
30
+ }
31
+ const negative = str.startsWith('-');
32
+ const abs = negative ? str.slice(1) : str;
33
+ const dotIndex = abs.indexOf('.');
34
+ if (dotIndex === -1) {
35
+ // Integer amount
36
+ const result = BigInt(abs) * (10n ** BigInt(decimals));
37
+ return negative ? -result : result;
38
+ }
39
+ const intPart = abs.slice(0, dotIndex);
40
+ let fracPart = abs.slice(dotIndex + 1);
41
+ // Truncate or pad fractional part to `decimals` digits
42
+ if (fracPart.length > decimals) {
43
+ fracPart = fracPart.slice(0, decimals); // truncate (floor for positive amounts)
44
+ }
45
+ else {
46
+ fracPart = fracPart.padEnd(decimals, '0');
47
+ }
48
+ const raw = BigInt(intPart || '0') * (10n ** BigInt(decimals)) +
49
+ BigInt(fracPart);
50
+ return negative ? -raw : raw;
51
+ }
52
+ /**
53
+ * Convert a raw bigint on-chain amount to a human-readable string.
54
+ *
55
+ * @param amount - Raw on-chain amount
56
+ * @param decimals - Token decimal places
57
+ * @returns Human-readable string, trimmed trailing zeros
58
+ *
59
+ * @example
60
+ * toHuman(1500000n, 6) // → "1.5"
61
+ * toHuman(1000000000000000000n, 18) // → "1.0"
62
+ * toHuman(0n, 6) // → "0.0"
63
+ */
64
+ export function toHuman(amount, decimals) {
65
+ if (decimals === 0)
66
+ return amount.toString();
67
+ const negative = amount < 0n;
68
+ const abs = negative ? -amount : amount;
69
+ const divisor = 10n ** BigInt(decimals);
70
+ const intPart = abs / divisor;
71
+ const fracRaw = abs % divisor;
72
+ // Pad fractional part to `decimals` digits
73
+ const fracStr = fracRaw.toString().padStart(decimals, '0');
74
+ // Trim trailing zeros but keep at least one decimal digit
75
+ const trimmed = fracStr.replace(/0+$/, '') || '0';
76
+ const result = `${intPart}.${trimmed}`;
77
+ return negative ? `-${result}` : result;
78
+ }
79
+ /**
80
+ * Format a raw bigint amount with token symbol for display.
81
+ *
82
+ * @param amount - Raw on-chain amount
83
+ * @param token - Token info (symbol + decimals required)
84
+ * @param displayDecimals - Max decimal places to show (default: 4 for high-precision, 2 for stablecoins)
85
+ * @returns Formatted string e.g. "1.50 USDC" or "0.0023 WETH"
86
+ *
87
+ * @example
88
+ * formatBalance(1500000n, { symbol: 'USDC', decimals: 6, address: '0x...' })
89
+ * // → "1.50 USDC"
90
+ */
91
+ export function formatBalance(amount, token, displayDecimals) {
92
+ const human = toHuman(amount, token.decimals);
93
+ const maxDisplay = displayDecimals ?? (token.decimals <= 6 ? 2 : 4);
94
+ // Parse the human string and reformat to maxDisplay decimal places
95
+ const [intPart, fracPart = ''] = human.split('.');
96
+ const padded = fracPart.padEnd(maxDisplay, '0').slice(0, maxDisplay);
97
+ // If all fraction digits are zero, still show them for consistent formatting
98
+ return `${intPart}.${padded} ${token.symbol}`;
99
+ }
100
+ /**
101
+ * Parse amount that may be either a string (human-readable) or bigint (raw).
102
+ * Returns raw bigint. Used in transfer functions to accept flexible input.
103
+ *
104
+ * @param amount - Either a human-readable string "1.5" or a raw bigint
105
+ * @param decimals - Required only when amount is a string
106
+ */
107
+ export function parseAmount(amount, decimals) {
108
+ if (typeof amount === 'bigint')
109
+ return amount;
110
+ return toRaw(amount, decimals);
111
+ }
112
+ //# sourceMappingURL=decimals.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decimals.js","sourceRoot":"","sources":["../../src/tokens/decimals.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * @module tokens
3
+ * Multi-token support for AgentWallet v6.
4
+ * Exports TokenRegistry, decimal utilities, EVM transfer helpers, and Solana SPL support.
5
+ */
6
+ export { toRaw, toHuman, formatBalance, parseAmount } from './decimals.js';
7
+ export type { TokenInfo } from './decimals.js';
8
+ export { TokenRegistry, getGlobalRegistry, getNativeToken, ETHEREUM_REGISTRY, BASE_REGISTRY, ARBITRUM_REGISTRY, OPTIMISM_REGISTRY, POLYGON_REGISTRY, AVALANCHE_REGISTRY, UNICHAIN_REGISTRY, LINEA_REGISTRY, SONIC_REGISTRY, WORLDCHAIN_REGISTRY, BASE_SEPOLIA_REGISTRY, } from './registry.js';
9
+ export type { TokenEntry, AddTokenParams } from './registry.js';
10
+ export { sendToken, sendNative, getTokenBalance, getNativeBalance, getBalances, encodeERC20Transfer, } from './transfers.js';
11
+ export type { TransferContext, TransferOptions, TokenBalanceResult, NativeBalanceResult, } from './transfers.js';
12
+ export { SolanaWallet, createSolanaWallet, SOLANA_TOKENS, SOLANA_TOKEN_DECIMALS } from './solana.js';
13
+ export type { SolanaWalletConfig, SolanaTokenInfo, SolanaTokenSymbol, SolBalanceResult, SplBalanceResult, SolanaTxResult, } from './solana.js';
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tokens/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC3E,YAAY,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAG/C,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,iBAAiB,EACjB,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAGhE,OAAO,EACL,SAAS,EACT,UAAU,EACV,eAAe,EACf,gBAAgB,EAChB,WAAW,EACX,mBAAmB,GACpB,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACV,eAAe,EACf,eAAe,EACf,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACrG,YAAY,EACV,kBAAkB,EAClB,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,GACf,MAAM,aAAa,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * @module tokens
3
+ * Multi-token support for AgentWallet v6.
4
+ * Exports TokenRegistry, decimal utilities, EVM transfer helpers, and Solana SPL support.
5
+ */
6
+ // Decimal normalization
7
+ export { toRaw, toHuman, formatBalance, parseAmount } from './decimals.js';
8
+ // Token Registry
9
+ export { TokenRegistry, getGlobalRegistry, getNativeToken, ETHEREUM_REGISTRY, BASE_REGISTRY, ARBITRUM_REGISTRY, OPTIMISM_REGISTRY, POLYGON_REGISTRY, AVALANCHE_REGISTRY, UNICHAIN_REGISTRY, LINEA_REGISTRY, SONIC_REGISTRY, WORLDCHAIN_REGISTRY, BASE_SEPOLIA_REGISTRY, } from './registry.js';
10
+ // EVM Transfers
11
+ export { sendToken, sendNative, getTokenBalance, getNativeBalance, getBalances, encodeERC20Transfer, } from './transfers.js';
12
+ // Solana (optional)
13
+ export { SolanaWallet, createSolanaWallet, SOLANA_TOKENS, SOLANA_TOKEN_DECIMALS } from './solana.js';
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tokens/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,wBAAwB;AACxB,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAG3E,iBAAiB;AACjB,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,iBAAiB,EACjB,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,eAAe,CAAC;AAGvB,gBAAgB;AAChB,OAAO,EACL,SAAS,EACT,UAAU,EACV,eAAe,EACf,gBAAgB,EAChB,WAAW,EACX,mBAAmB,GACpB,MAAM,gBAAgB,CAAC;AAQxB,oBAAoB;AACpB,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * @module tokens/registry
3
+ * TokenRegistry — multi-chain token address registry for AgentWallet v6.
4
+ *
5
+ * Ships pre-populated with top tokens for all 11 supported EVM chains.
6
+ * All addresses sourced from:
7
+ * - EVM: CoinGecko official token lists + chain explorers
8
+ * - USDC: https://developers.circle.com/stablecoins/usdc-contract-addresses
9
+ * - WBTC: https://wbtc.network/dashboard/order
10
+ * - WETH: official wrapped ETH contracts per chain
11
+ * - L2 native tokens: official L2 documentation
12
+ *
13
+ * Chain IDs follow the CHAIN_IDS map in src/types.ts.
14
+ */
15
+ import type { Address } from 'viem';
16
+ import type { TokenInfo } from './decimals.js';
17
+ export type { TokenInfo };
18
+ /** Full token entry stored in the registry */
19
+ export interface TokenEntry extends TokenInfo {
20
+ chainId: number;
21
+ name: string;
22
+ isNative?: boolean;
23
+ }
24
+ /** Params for adding a custom token */
25
+ export interface AddTokenParams {
26
+ symbol: string;
27
+ address: Address;
28
+ decimals: number;
29
+ chainId: number;
30
+ name?: string;
31
+ isNative?: boolean;
32
+ }
33
+ export declare class TokenRegistry {
34
+ private readonly tokens;
35
+ constructor(initialTokens?: TokenEntry[]);
36
+ private _key;
37
+ private _store;
38
+ /**
39
+ * Add or overwrite a token in the registry.
40
+ */
41
+ addToken(params: AddTokenParams): void;
42
+ /**
43
+ * Look up a token by symbol and chainId.
44
+ * Returns undefined if not found.
45
+ */
46
+ getToken(symbol: string, chainId: number): TokenEntry | undefined;
47
+ /**
48
+ * List all tokens registered for a given chainId.
49
+ */
50
+ listTokens(chainId: number): TokenEntry[];
51
+ /**
52
+ * Find a token by its contract address on a given chain.
53
+ */
54
+ getTokenByAddress(address: Address, chainId: number): TokenEntry | undefined;
55
+ /**
56
+ * Returns all registered tokens (all chains).
57
+ */
58
+ getAllTokens(): TokenEntry[];
59
+ /**
60
+ * Returns number of registered tokens.
61
+ */
62
+ size(): number;
63
+ }
64
+ /** Global registry with all supported chains pre-populated. */
65
+ export declare function getGlobalRegistry(): TokenRegistry;
66
+ /** Create a fresh registry pre-populated for a single chain.
67
+ * @internal — reserved for future per-chain filtering API
68
+ */
69
+ export declare function createChainRegistry(_chainId: number): TokenRegistry;
70
+ export declare const ETHEREUM_REGISTRY: TokenRegistry;
71
+ export declare const BASE_REGISTRY: TokenRegistry;
72
+ export declare const ARBITRUM_REGISTRY: TokenRegistry;
73
+ export declare const OPTIMISM_REGISTRY: TokenRegistry;
74
+ export declare const POLYGON_REGISTRY: TokenRegistry;
75
+ export declare const AVALANCHE_REGISTRY: TokenRegistry;
76
+ export declare const UNICHAIN_REGISTRY: TokenRegistry;
77
+ export declare const LINEA_REGISTRY: TokenRegistry;
78
+ export declare const SONIC_REGISTRY: TokenRegistry;
79
+ export declare const WORLDCHAIN_REGISTRY: TokenRegistry;
80
+ export declare const BASE_SEPOLIA_REGISTRY: TokenRegistry;
81
+ export declare function getNativeToken(chainId: number): TokenEntry | undefined;
82
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/tokens/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAEpC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE/C,YAAY,EAAE,SAAS,EAAE,CAAC;AAE1B,8CAA8C;AAC9C,MAAM,WAAW,UAAW,SAAQ,SAAS;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,uCAAuC;AACvC,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AA0LD,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsC;gBAEjD,aAAa,CAAC,EAAE,UAAU,EAAE;IAiBxC,OAAO,CAAC,IAAI;IAIZ,OAAO,CAAC,MAAM;IAKd;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IAYtC;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAIjE;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,EAAE;IAQzC;;OAEG;IACH,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAU5E;;OAEG;IACH,YAAY,IAAI,UAAU,EAAE;IAI5B;;OAEG;IACH,IAAI,IAAI,MAAM;CAGf;AAOD,+DAA+D;AAC/D,wBAAgB,iBAAiB,IAAI,aAAa,CAGjD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,CAEnE;AAID,eAAO,MAAM,iBAAiB,eAAuB,CAAC;AACtD,eAAO,MAAM,aAAa,eAA2B,CAAC;AACtD,eAAO,MAAM,iBAAiB,eAAuB,CAAC;AACtD,eAAO,MAAM,iBAAiB,eAAuB,CAAC;AACtD,eAAO,MAAM,gBAAgB,eAAwB,CAAC;AACtD,eAAO,MAAM,kBAAkB,eAAsB,CAAC;AACtD,eAAO,MAAM,iBAAiB,eAAuB,CAAC;AACtD,eAAO,MAAM,cAAc,eAA0B,CAAC;AACtD,eAAO,MAAM,cAAc,eAA0B,CAAC;AACtD,eAAO,MAAM,mBAAmB,eAAsB,CAAC;AACvD,eAAO,MAAM,qBAAqB,eAAsB,CAAC;AAGzD,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAKtE"}
@@ -0,0 +1,293 @@
1
+ /**
2
+ * @module tokens/registry
3
+ * TokenRegistry — multi-chain token address registry for AgentWallet v6.
4
+ *
5
+ * Ships pre-populated with top tokens for all 11 supported EVM chains.
6
+ * All addresses sourced from:
7
+ * - EVM: CoinGecko official token lists + chain explorers
8
+ * - USDC: https://developers.circle.com/stablecoins/usdc-contract-addresses
9
+ * - WBTC: https://wbtc.network/dashboard/order
10
+ * - WETH: official wrapped ETH contracts per chain
11
+ * - L2 native tokens: official L2 documentation
12
+ *
13
+ * Chain IDs follow the CHAIN_IDS map in src/types.ts.
14
+ */
15
+ import { zeroAddress } from 'viem';
16
+ // ─── Chain IDs ───────────────────────────────────────────────────────────────
17
+ const CHAIN = {
18
+ ETHEREUM: 1,
19
+ BASE: 8453,
20
+ ARBITRUM: 42161,
21
+ OPTIMISM: 10,
22
+ POLYGON: 137,
23
+ AVALANCHE: 43114,
24
+ UNICHAIN: 130,
25
+ LINEA: 59144,
26
+ SONIC: 146,
27
+ WORLDCHAIN: 480,
28
+ BASE_SEPOLIA: 84532,
29
+ };
30
+ // ─── Pre-verified token address tables ───────────────────────────────────────
31
+ //
32
+ // All addresses are verified against:
33
+ // - Etherscan (chain 1), Basescan (8453), Arbiscan (42161), Optimistic Etherscan (10),
34
+ // Polygonscan (137), Snowtrace (43114), Lineascan (59144)
35
+ // - CoinGecko token detail pages
36
+ // - Circle USDC registry
37
+ //
38
+ // NATIVE_ADDR = zeroAddress (0x0000...0000) — used for native gas tokens
39
+ const NATIVE_ADDR = zeroAddress;
40
+ // ─── Native gas tokens ────────────────────────────────────────────────────────
41
+ const NATIVE_TOKENS = [
42
+ // ETH on ETH-compatible chains
43
+ { chainId: CHAIN.ETHEREUM, address: NATIVE_ADDR, symbol: 'ETH', name: 'Ether', decimals: 18, isNative: true },
44
+ { chainId: CHAIN.BASE, address: NATIVE_ADDR, symbol: 'ETH', name: 'Ether', decimals: 18, isNative: true },
45
+ { chainId: CHAIN.ARBITRUM, address: NATIVE_ADDR, symbol: 'ETH', name: 'Ether', decimals: 18, isNative: true },
46
+ { chainId: CHAIN.OPTIMISM, address: NATIVE_ADDR, symbol: 'ETH', name: 'Ether', decimals: 18, isNative: true },
47
+ { chainId: CHAIN.UNICHAIN, address: NATIVE_ADDR, symbol: 'ETH', name: 'Ether', decimals: 18, isNative: true },
48
+ { chainId: CHAIN.LINEA, address: NATIVE_ADDR, symbol: 'ETH', name: 'Ether', decimals: 18, isNative: true },
49
+ { chainId: CHAIN.WORLDCHAIN, address: NATIVE_ADDR, symbol: 'ETH', name: 'Ether', decimals: 18, isNative: true },
50
+ { chainId: CHAIN.BASE_SEPOLIA, address: NATIVE_ADDR, symbol: 'ETH', name: 'Ether', decimals: 18, isNative: true },
51
+ // MATIC on Polygon
52
+ { chainId: CHAIN.POLYGON, address: NATIVE_ADDR, symbol: 'POL', name: 'POL (ex-MATIC)', decimals: 18, isNative: true },
53
+ // AVAX on Avalanche
54
+ { chainId: CHAIN.AVALANCHE, address: NATIVE_ADDR, symbol: 'AVAX', name: 'Avalanche', decimals: 18, isNative: true },
55
+ // S (Sonic's native token)
56
+ { chainId: CHAIN.SONIC, address: NATIVE_ADDR, symbol: 'S', name: 'Sonic', decimals: 18, isNative: true },
57
+ ];
58
+ const EVM_TOKENS = [
59
+ // ─── Ethereum Mainnet (1) ────────────────────────────────────────────────
60
+ // USDC — Circle official
61
+ [CHAIN.ETHEREUM, '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', 'USDC', 'USD Coin', 6],
62
+ // USDT — Tether official
63
+ [CHAIN.ETHEREUM, '0xdAC17F958D2ee523a2206206994597C13D831ec7', 'USDT', 'Tether USD', 6],
64
+ // DAI — MakerDAO
65
+ [CHAIN.ETHEREUM, '0x6B175474E89094C44Da98b954EedeAC495271d0F', 'DAI', 'Dai Stablecoin', 18],
66
+ // WETH — official WETH9
67
+ [CHAIN.ETHEREUM, '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', 'WETH', 'Wrapped Ether', 18],
68
+ // WBTC — BitGo wrapped BTC
69
+ [CHAIN.ETHEREUM, '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599', 'WBTC', 'Wrapped BTC', 8],
70
+ // LINK — Chainlink
71
+ [CHAIN.ETHEREUM, '0x514910771AF9Ca656af840dff83E8264EcF986CA', 'LINK', 'ChainLink Token', 18],
72
+ // UNI — Uniswap
73
+ [CHAIN.ETHEREUM, '0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984', 'UNI', 'Uniswap', 18],
74
+ // AAVE
75
+ [CHAIN.ETHEREUM, '0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9', 'AAVE', 'Aave Token', 18],
76
+ // CRV — Curve DAO Token
77
+ [CHAIN.ETHEREUM, '0xD533a949740bb3306d119CC777fa900bA034cd52', 'CRV', 'Curve DAO Token', 18],
78
+ // MKR — MakerDAO
79
+ [CHAIN.ETHEREUM, '0x9f8F72aA9304c8B593d555F12eF6589cC3A579A2', 'MKR', 'Maker', 18],
80
+ // SNX — Synthetix
81
+ [CHAIN.ETHEREUM, '0xC011a73ee8576Fb46F5E1c5751cA3B9Fe0af2a6F', 'SNX', 'Synthetix Network Token', 18],
82
+ // COMP — Compound
83
+ [CHAIN.ETHEREUM, '0xc00e94Cb662C3520282E6f5717214004A7f26888', 'COMP', 'Compound', 18],
84
+ // LDO — Lido DAO
85
+ [CHAIN.ETHEREUM, '0x5A98FcBEA516Cf06857215779Fd812CA3beF1B32', 'LDO', 'Lido DAO Token', 18],
86
+ // MATIC (ERC-20 on ETH, now POL)
87
+ [CHAIN.ETHEREUM, '0x7D1AfA7B718fb893dB30A3aBc0Cfc608AaCfeBB0', 'POL', 'POL (ex-MATIC)', 18],
88
+ // ─── Base Mainnet (8453) ─────────────────────────────────────────────────
89
+ [CHAIN.BASE, '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913', 'USDC', 'USD Coin', 6],
90
+ [CHAIN.BASE, '0xfde4C96c8593536E31F229EA8f37b2ADa2699bb2', 'USDT', 'Tether USD', 6],
91
+ [CHAIN.BASE, '0x50c5725949A6F0c72E6C4a641F24049A917DB0Cb', 'DAI', 'Dai Stablecoin', 18],
92
+ [CHAIN.BASE, '0x4200000000000000000000000000000000000006', 'WETH', 'Wrapped Ether', 18],
93
+ // WBTC on Base — bridged via LayerZero
94
+ [CHAIN.BASE, '0x0555E30da8f98308EdB960aa94C0Db47230d2B9c', 'WBTC', 'Wrapped BTC', 8],
95
+ [CHAIN.BASE, '0xE3B53AF74a4BF62Ae5511055290838050bf764Df', 'LINK', 'ChainLink Token', 18],
96
+ [CHAIN.BASE, '0xc3De830EA07524a0761646a6a4e4be0e114a3C83', 'AAVE', 'Aave Token', 18],
97
+ // cbETH — Coinbase Staked ETH
98
+ [CHAIN.BASE, '0x2Ae3F1Ec7F1F5012CFEab0185bfc7aa3cf0DEc22', 'cbETH', 'Coinbase Staked Ether', 18],
99
+ // USDbC — Bridged USDC (legacy on Base)
100
+ [CHAIN.BASE, '0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6CA', 'USDbC', 'USD Base Coin', 6],
101
+ // ─── Arbitrum One (42161) ────────────────────────────────────────────────
102
+ [CHAIN.ARBITRUM, '0xaf88d065e77c8cC2239327C5EDb3A432268e5831', 'USDC', 'USD Coin', 6],
103
+ [CHAIN.ARBITRUM, '0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9', 'USDT', 'Tether USD', 6],
104
+ [CHAIN.ARBITRUM, '0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1', 'DAI', 'Dai Stablecoin', 18],
105
+ [CHAIN.ARBITRUM, '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1', 'WETH', 'Wrapped Ether', 18],
106
+ [CHAIN.ARBITRUM, '0x2f2a2543B76A4166549F7aaB2e75Bef0aefC5B0f', 'WBTC', 'Wrapped BTC', 8],
107
+ [CHAIN.ARBITRUM, '0xf97f4df75117a78c1A5a0DBb814Af92458539FB4', 'LINK', 'ChainLink Token', 18],
108
+ [CHAIN.ARBITRUM, '0xFa7F8980b0f1E64A2062791cc3b0871572f1F7f0', 'UNI', 'Uniswap', 18],
109
+ [CHAIN.ARBITRUM, '0xba5DdD1f9d7F570dc94a51479a000E3BCE967196', 'AAVE', 'Aave Token', 18],
110
+ // ARB — Arbitrum governance token (native to Arbitrum)
111
+ [CHAIN.ARBITRUM, '0x912CE59144191C1204E64559FE8253a0e49E6548', 'ARB', 'Arbitrum', 18],
112
+ [CHAIN.ARBITRUM, '0x11cDb42B0EB46D95f990BeDD4695A6e3fA034978', 'CRV', 'Curve DAO Token', 18],
113
+ [CHAIN.ARBITRUM, '0x13Ad51ed4F1B7e9Dc168d8a00cB3f4dDD85EfA60', 'LDO', 'Lido DAO Token', 18],
114
+ [CHAIN.ARBITRUM, '0x354A6dA3fcde098F8389cad84b0182725c6C91dE', 'COMP', 'Compound', 18],
115
+ // ─── Optimism (10) ───────────────────────────────────────────────────────
116
+ [CHAIN.OPTIMISM, '0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85', 'USDC', 'USD Coin', 6],
117
+ [CHAIN.OPTIMISM, '0x94b008aA00579c1307B0EF2c499aD98a8ce58e58', 'USDT', 'Tether USD', 6],
118
+ [CHAIN.OPTIMISM, '0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1', 'DAI', 'Dai Stablecoin', 18],
119
+ [CHAIN.OPTIMISM, '0x4200000000000000000000000000000000000006', 'WETH', 'Wrapped Ether', 18],
120
+ [CHAIN.OPTIMISM, '0x68f180fcCe6836688e9084f035309E29Bf0A2095', 'WBTC', 'Wrapped BTC', 8],
121
+ [CHAIN.OPTIMISM, '0x350a791Bfc2C21F9Ed5d10980Dad2e2638ffa7f6', 'LINK', 'ChainLink Token', 18],
122
+ [CHAIN.OPTIMISM, '0x6fd9d7AD17242c41f7131d257212c54A0e816691', 'UNI', 'Uniswap', 18],
123
+ [CHAIN.OPTIMISM, '0x76FB31fb4af56892A25e32cFC43De717950c9278', 'AAVE', 'Aave Token', 18],
124
+ // OP — Optimism governance token (native to Optimism)
125
+ [CHAIN.OPTIMISM, '0x4200000000000000000000000000000000000042', 'OP', 'Optimism', 18],
126
+ [CHAIN.OPTIMISM, '0x9560e827aF36c94D2Ac33a39bCE1Fe78631088Db', 'VELO', 'Velodrome Finance', 18],
127
+ [CHAIN.OPTIMISM, '0xc5b001DC33727F8F26880B184090D3E252470D45', 'SNX', 'Synthetix', 18],
128
+ // ─── Polygon (137) ───────────────────────────────────────────────────────
129
+ [CHAIN.POLYGON, '0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359', 'USDC', 'USD Coin', 6],
130
+ [CHAIN.POLYGON, '0xc2132D05D31c914a87C6611C10748AEb04B58e8F', 'USDT', 'Tether USD', 6],
131
+ [CHAIN.POLYGON, '0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063', 'DAI', 'Dai Stablecoin', 18],
132
+ [CHAIN.POLYGON, '0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619', 'WETH', 'Wrapped Ether', 18],
133
+ [CHAIN.POLYGON, '0x1BFD67037B42Cf73acF2047067bd4F2C47D9BfD6', 'WBTC', 'Wrapped BTC', 8],
134
+ [CHAIN.POLYGON, '0x53E0bca35eC356BD5ddDFebbD1Fc0fD03FaBad39', 'LINK', 'ChainLink Token', 18],
135
+ [CHAIN.POLYGON, '0xb33EaAd8d922B1083446DC23f610c2567fB5180f', 'UNI', 'Uniswap', 18],
136
+ [CHAIN.POLYGON, '0xD6DF932A45C0f255f85145f286eA0b292B21C90B', 'AAVE', 'Aave Token', 18],
137
+ // WMATIC — Wrapped POL (MATIC) on Polygon
138
+ [CHAIN.POLYGON, '0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270', 'WMATIC', 'Wrapped POL (MATIC)', 18],
139
+ [CHAIN.POLYGON, '0x172370d5Cd63279eFa6d502DAB29171933a610AF', 'CRV', 'Curve DAO Token', 18],
140
+ [CHAIN.POLYGON, '0x50B728D8D964fd00C2d0AAD81718b71311feF68a', 'SNX', 'Synthetix', 18],
141
+ // ─── Avalanche C-Chain (43114) ───────────────────────────────────────────
142
+ [CHAIN.AVALANCHE, '0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E', 'USDC', 'USD Coin', 6],
143
+ [CHAIN.AVALANCHE, '0x9702230A8Ea53601f5cD2dc00fDBc13d4dF4A8c7', 'USDT', 'Tether USD', 6],
144
+ [CHAIN.AVALANCHE, '0xd586E7F844cEa2F87f50152665BCbc2C279D8d70', 'DAI', 'Dai Stablecoin', 18],
145
+ // WETH.e — Bridged Ether on Avalanche
146
+ [CHAIN.AVALANCHE, '0x49D5c2BdFfac6CE2BFdB6640F4F80f226bc10bAB', 'WETH.e', 'Wrapped Ether', 18],
147
+ [CHAIN.AVALANCHE, '0x50b7545627a5162F82A992c33b87aDc75187B218', 'WBTC', 'Wrapped BTC', 8],
148
+ [CHAIN.AVALANCHE, '0x5947BB275c521040051D82396192181b413227A3', 'LINK', 'ChainLink Token', 18],
149
+ [CHAIN.AVALANCHE, '0x8eBAf22B6F053dFFeaf46f4Dd9eFA95D89ba8580', 'UNI', 'Uniswap', 18],
150
+ // WAVAX — Wrapped AVAX
151
+ [CHAIN.AVALANCHE, '0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7', 'WAVAX', 'Wrapped AVAX', 18],
152
+ [CHAIN.AVALANCHE, '0x63a72806098Bd3D9520cC43356dD78afe5D386D9', 'AAVE', 'Aave Token', 18],
153
+ // ─── Unichain (130) ──────────────────────────────────────────────────────
154
+ [CHAIN.UNICHAIN, '0x078D782b760474a361dDA0AF3839290b0EF57AD6', 'USDC', 'USD Coin', 6],
155
+ [CHAIN.UNICHAIN, '0x4200000000000000000000000000000000000006', 'WETH', 'Wrapped Ether', 18],
156
+ // ─── Linea (59144) ───────────────────────────────────────────────────────
157
+ [CHAIN.LINEA, '0x176211869cA2b568f2A7D4EE941E073a821EE1ff', 'USDC', 'USD Coin', 6],
158
+ [CHAIN.LINEA, '0xA219439258ca9da29E9Cc4cE5596924745e12B93', 'USDT', 'Tether USD', 6],
159
+ [CHAIN.LINEA, '0x4AF15ec2A0BD43Db75dd04E62FAA3B8EF36b00d5', 'DAI', 'Dai Stablecoin', 18],
160
+ [CHAIN.LINEA, '0xe5D7C2a44FfDDf6b295A15c148167daaAf5Cf34f', 'WETH', 'Wrapped Ether', 18],
161
+ [CHAIN.LINEA, '0x3aAB2285ddcDdaD8edf438C1bAB47e1a9D05a9b4', 'WBTC', 'Wrapped BTC', 8],
162
+ // ─── Sonic (146) ─────────────────────────────────────────────────────────
163
+ [CHAIN.SONIC, '0x29219dd400f2Bf60E5a23d13Be72B486D4038894', 'USDC', 'USD Coin', 6],
164
+ // WS — Wrapped Sonic (native S wrapped)
165
+ [CHAIN.SONIC, '0x039e2fB66102314Ce7b64Ce5Ce3E5183bc94aD38', 'WS', 'Wrapped Sonic', 18],
166
+ // ─── World Chain (480) ───────────────────────────────────────────────────
167
+ [CHAIN.WORLDCHAIN, '0x79A02482A880bCE3B13e09Da970dC34db4CD24d1', 'USDC', 'USD Coin', 6],
168
+ [CHAIN.WORLDCHAIN, '0x4200000000000000000000000000000000000006', 'WETH', 'Wrapped Ether', 18],
169
+ // WLD — Worldcoin token
170
+ [CHAIN.WORLDCHAIN, '0x163f8C2467924be0ae7B5347228CABF260318753', 'WLD', 'Worldcoin', 18],
171
+ // ─── Base Sepolia Testnet (84532) ────────────────────────────────────────
172
+ [CHAIN.BASE_SEPOLIA, '0x036CbD53842c5426634e7929541eC2318f3dCF7e', 'USDC', 'USD Coin', 6],
173
+ [CHAIN.BASE_SEPOLIA, '0x4200000000000000000000000000000000000006', 'WETH', 'Wrapped Ether', 18],
174
+ ];
175
+ // ─── TokenRegistry class ──────────────────────────────────────────────────────
176
+ export class TokenRegistry {
177
+ constructor(initialTokens) {
178
+ this.tokens = new Map();
179
+ // Load native gas tokens
180
+ for (const t of NATIVE_TOKENS) {
181
+ this._store(t);
182
+ }
183
+ // Load EVM tokens
184
+ for (const [chainId, address, symbol, name, decimals] of EVM_TOKENS) {
185
+ this._store({ chainId, address, symbol, name, decimals });
186
+ }
187
+ // Load any provided custom tokens
188
+ if (initialTokens) {
189
+ for (const t of initialTokens) {
190
+ this._store(t);
191
+ }
192
+ }
193
+ }
194
+ _key(symbol, chainId) {
195
+ return `${symbol.toUpperCase()}:${chainId}`;
196
+ }
197
+ _store(entry) {
198
+ const key = this._key(entry.symbol, entry.chainId);
199
+ this.tokens.set(key, { ...entry });
200
+ }
201
+ /**
202
+ * Add or overwrite a token in the registry.
203
+ */
204
+ addToken(params) {
205
+ const entry = {
206
+ symbol: params.symbol,
207
+ address: params.address,
208
+ decimals: params.decimals,
209
+ chainId: params.chainId,
210
+ name: params.name ?? params.symbol,
211
+ isNative: params.isNative ?? false,
212
+ };
213
+ this._store(entry);
214
+ }
215
+ /**
216
+ * Look up a token by symbol and chainId.
217
+ * Returns undefined if not found.
218
+ */
219
+ getToken(symbol, chainId) {
220
+ return this.tokens.get(this._key(symbol, chainId));
221
+ }
222
+ /**
223
+ * List all tokens registered for a given chainId.
224
+ */
225
+ listTokens(chainId) {
226
+ const result = [];
227
+ for (const entry of this.tokens.values()) {
228
+ if (entry.chainId === chainId)
229
+ result.push(entry);
230
+ }
231
+ return result;
232
+ }
233
+ /**
234
+ * Find a token by its contract address on a given chain.
235
+ */
236
+ getTokenByAddress(address, chainId) {
237
+ const lower = address.toLowerCase();
238
+ for (const entry of this.tokens.values()) {
239
+ if (entry.chainId === chainId && entry.address.toLowerCase() === lower) {
240
+ return entry;
241
+ }
242
+ }
243
+ return undefined;
244
+ }
245
+ /**
246
+ * Returns all registered tokens (all chains).
247
+ */
248
+ getAllTokens() {
249
+ return Array.from(this.tokens.values());
250
+ }
251
+ /**
252
+ * Returns number of registered tokens.
253
+ */
254
+ size() {
255
+ return this.tokens.size;
256
+ }
257
+ }
258
+ // ─── Pre-built per-chain registries ──────────────────────────────────────────
259
+ // These are lazy singletons — constructed once on first import.
260
+ let _globalRegistry = null;
261
+ /** Global registry with all supported chains pre-populated. */
262
+ export function getGlobalRegistry() {
263
+ if (!_globalRegistry)
264
+ _globalRegistry = new TokenRegistry();
265
+ return _globalRegistry;
266
+ }
267
+ /** Create a fresh registry pre-populated for a single chain.
268
+ * @internal — reserved for future per-chain filtering API
269
+ */
270
+ export function createChainRegistry(_chainId) {
271
+ return new TokenRegistry(); // loads all tokens; filter via listTokens(chainId)
272
+ }
273
+ // Named per-chain exports — each returns the global registry (all tokens loaded,
274
+ // filtered access via listTokens(chainId)). Use getGlobalRegistry() for multi-chain.
275
+ export const ETHEREUM_REGISTRY = new TokenRegistry();
276
+ export const BASE_REGISTRY = new TokenRegistry();
277
+ export const ARBITRUM_REGISTRY = new TokenRegistry();
278
+ export const OPTIMISM_REGISTRY = new TokenRegistry();
279
+ export const POLYGON_REGISTRY = new TokenRegistry();
280
+ export const AVALANCHE_REGISTRY = new TokenRegistry();
281
+ export const UNICHAIN_REGISTRY = new TokenRegistry();
282
+ export const LINEA_REGISTRY = new TokenRegistry();
283
+ export const SONIC_REGISTRY = new TokenRegistry();
284
+ export const WORLDCHAIN_REGISTRY = new TokenRegistry();
285
+ export const BASE_SEPOLIA_REGISTRY = new TokenRegistry();
286
+ // Convenience: get native gas token for a chain
287
+ export function getNativeToken(chainId) {
288
+ return getGlobalRegistry().getToken('ETH', chainId)
289
+ ?? getGlobalRegistry().getToken('POL', chainId)
290
+ ?? getGlobalRegistry().getToken('AVAX', chainId)
291
+ ?? getGlobalRegistry().getToken('S', chainId);
292
+ }
293
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/tokens/registry.ts"],"names":[],"mappings":"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"}