@fastxyz/allset-sdk 0.1.2 → 0.1.4

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 (66) hide show
  1. package/README.md +184 -14
  2. package/dist/browser/index.d.ts +2 -0
  3. package/dist/browser/index.d.ts.map +1 -0
  4. package/dist/browser/index.js +2 -0
  5. package/dist/browser/index.js.map +1 -0
  6. package/dist/core/address.d.ts +4 -0
  7. package/dist/core/address.d.ts.map +1 -0
  8. package/dist/core/address.js +27 -0
  9. package/dist/core/address.js.map +1 -0
  10. package/dist/core/deposit.d.ts +59 -0
  11. package/dist/core/deposit.d.ts.map +1 -0
  12. package/dist/core/deposit.js +93 -0
  13. package/dist/core/deposit.js.map +1 -0
  14. package/dist/core/index.d.ts +6 -0
  15. package/dist/core/index.d.ts.map +1 -0
  16. package/dist/core/index.js +4 -0
  17. package/dist/core/index.js.map +1 -0
  18. package/dist/default-config.d.ts +51 -0
  19. package/dist/default-config.d.ts.map +1 -0
  20. package/dist/default-config.js +52 -0
  21. package/dist/default-config.js.map +1 -0
  22. package/dist/index.d.ts +4 -49
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +4 -48
  25. package/dist/index.js.map +1 -1
  26. package/dist/intents.d.ts.map +1 -1
  27. package/dist/intents.js +1 -9
  28. package/dist/intents.js.map +1 -1
  29. package/dist/node/bridge.d.ts.map +1 -0
  30. package/dist/{bridge.js → node/bridge.js} +129 -72
  31. package/dist/node/bridge.js.map +1 -0
  32. package/dist/{config.d.ts → node/config.d.ts} +2 -5
  33. package/dist/node/config.d.ts.map +1 -0
  34. package/dist/{config.js → node/config.js} +5 -23
  35. package/dist/node/config.js.map +1 -0
  36. package/dist/node/evm-executor.d.ts +130 -0
  37. package/dist/node/evm-executor.d.ts.map +1 -0
  38. package/dist/node/evm-executor.js +159 -0
  39. package/dist/node/evm-executor.js.map +1 -0
  40. package/dist/node/index.d.ts +14 -0
  41. package/dist/node/index.d.ts.map +1 -0
  42. package/dist/node/index.js +17 -0
  43. package/dist/node/index.js.map +1 -0
  44. package/dist/{provider.d.ts → node/provider.d.ts} +6 -6
  45. package/dist/node/provider.d.ts.map +1 -0
  46. package/dist/{provider.js → node/provider.js} +18 -25
  47. package/dist/node/provider.js.map +1 -0
  48. package/dist/{types.d.ts → node/types.d.ts} +19 -19
  49. package/dist/node/types.d.ts.map +1 -0
  50. package/dist/node/types.js.map +1 -0
  51. package/package.json +22 -6
  52. package/data/networks.json +0 -37
  53. package/dist/bridge.d.ts.map +0 -1
  54. package/dist/bridge.js.map +0 -1
  55. package/dist/config.d.ts.map +0 -1
  56. package/dist/config.js.map +0 -1
  57. package/dist/evm-executor.d.ts +0 -64
  58. package/dist/evm-executor.d.ts.map +0 -1
  59. package/dist/evm-executor.js +0 -181
  60. package/dist/evm-executor.js.map +0 -1
  61. package/dist/provider.d.ts.map +0 -1
  62. package/dist/provider.js.map +0 -1
  63. package/dist/types.d.ts.map +0 -1
  64. package/dist/types.js.map +0 -1
  65. /package/dist/{bridge.d.ts → node/bridge.d.ts} +0 -0
  66. /package/dist/{types.js → node/types.js} +0 -0
package/README.md CHANGED
@@ -4,31 +4,107 @@ Bridge tokens between Fast network and EVM chains.
4
4
 
5
5
  ## Installation
6
6
 
7
+ Pure helpers only:
8
+
9
+ ```bash
10
+ npm install @fastxyz/allset-sdk
11
+ ```
12
+
13
+ FastWallet-backed withdrawals and intent execution:
14
+
7
15
  ```bash
8
- npm install @fastxyz/sdk @fastxyz/allset-sdk
16
+ npm install @fastxyz/allset-sdk @fastxyz/sdk
9
17
  ```
10
18
 
19
+ `@fastxyz/sdk` is optional for pure helpers and EVM -> Fast deposits. Install it when you use `FastWallet` flows such as `sendToExternal(...)` or `executeIntent(...)`.
20
+
21
+ ## Entrypoints
22
+
23
+ | Entrypoint | Use for | Browser-safe |
24
+ | --- | --- | --- |
25
+ | `@fastxyz/allset-sdk` | Pure deposit planners, intent builders, Fast address conversion | Yes |
26
+ | `@fastxyz/allset-sdk/core` | Explicit alias of the root pure helper surface | Yes |
27
+ | `@fastxyz/allset-sdk/browser` | Browser-safe frontend import path for pure helpers | Yes |
28
+ | `@fastxyz/allset-sdk/node` | Provider, executor, wallet, bridge execution, file-backed config | No |
29
+
11
30
  ## Quick Start
12
31
 
32
+ ### Pure deposit planning
33
+
34
+ ```ts
35
+ import { buildDepositTransaction } from '@fastxyz/allset-sdk';
36
+
37
+ const plan = buildDepositTransaction({
38
+ network: 'testnet',
39
+ chain: 'arbitrum',
40
+ token: 'USDC',
41
+ amount: 1_000_000n,
42
+ receiver: 'fast1receiveraddress...',
43
+ });
44
+
45
+ console.log(plan.to);
46
+ console.log(plan.data);
47
+ console.log(plan.value);
48
+ ```
49
+
50
+ For deployments that are not bundled in the SDK yet, pass your own route config:
51
+
52
+ ```ts
53
+ const plan = buildDepositTransaction({
54
+ network: 'mainnet',
55
+ chain: 'base',
56
+ token: 'fastUSDC',
57
+ amount: 1_000_000n,
58
+ receiver: 'fast1receiveraddress...',
59
+ networkConfig: {
60
+ chains: {
61
+ base: {
62
+ chainId: 8453,
63
+ bridgeContract: '0xYourAllSetBridge',
64
+ tokens: {
65
+ USDC: {
66
+ evmAddress: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',
67
+ decimals: 6,
68
+ },
69
+ },
70
+ },
71
+ },
72
+ },
73
+ });
74
+ ```
75
+
76
+ This is the intended temporary path for Base mainnet until the authoritative deployment config is published in the SDK defaults.
77
+
78
+ ### Node execution
79
+
13
80
  ```ts
14
81
  import { FastProvider, FastWallet } from '@fastxyz/sdk';
15
- import { AllSetProvider, createEvmExecutor, createEvmWallet } from '@fastxyz/allset-sdk';
82
+ import {
83
+ AllSetProvider,
84
+ createEvmExecutor,
85
+ createEvmWallet,
86
+ } from '@fastxyz/allset-sdk/node';
16
87
 
17
- // Setup
18
88
  const fastProvider = new FastProvider({ network: 'testnet' });
19
89
  const allset = new AllSetProvider({ network: 'testnet' });
20
90
  const fastWallet = await FastWallet.fromKeyfile('~/.fast/keys/default.json', fastProvider);
21
- const evmWallet = createEvmWallet('~/.allset/.evm/keys/default.json');
91
+
92
+ // Create EVM account
93
+ const account = createEvmWallet('~/.evm/keys/default.json');
94
+ // Or: const account = createEvmWallet('0xprivateKey...');
95
+ // Or: const account = createEvmWallet(); // persist account.privateKey if generated
96
+
97
+ // Create EVM clients
98
+ const evmClients = createEvmExecutor(account, 'https://sepolia-rollup.arbitrum.io/rpc', 421614);
22
99
 
23
100
  // Deposit: EVM → Fast
24
- const evmExecutor = createEvmExecutor(evmWallet.privateKey, 'https://sepolia-rollup.arbitrum.io/rpc', 421614);
25
101
  await allset.sendToFast({
26
102
  chain: 'arbitrum',
27
103
  token: 'USDC',
28
104
  amount: '1000000',
29
- from: evmWallet.address,
105
+ from: account.address,
30
106
  to: fastWallet.address,
31
- evmExecutor,
107
+ evmClients,
32
108
  });
33
109
 
34
110
  // Withdraw: Fast → EVM
@@ -37,17 +113,66 @@ await allset.sendToExternal({
37
113
  token: 'fastUSDC',
38
114
  amount: '1000000',
39
115
  from: fastWallet.address,
40
- to: evmWallet.address,
116
+ to: account.address,
41
117
  fastWallet,
42
118
  });
43
119
  ```
44
120
 
121
+ ## createEvmWallet
122
+
123
+ Returns an Account-compatible object with viem signing methods and `privateKey`.
124
+
125
+ ```ts
126
+ // Generate new wallet
127
+ const generatedAccount = createEvmWallet();
128
+ console.log(generatedAccount.privateKey); // persist this if you generated it
129
+
130
+ // Derive from private key
131
+ const derivedAccount = createEvmWallet('0x1234...64hexchars');
132
+
133
+ // Load from keyfile
134
+ const keyfileAccount = createEvmWallet('~/.evm/keys/default.json');
135
+ ```
136
+
137
+ **Keyfile format:**
138
+ ```json
139
+ {
140
+ "privateKey": "abc123...64hexchars",
141
+ "address": "0x..." // optional, for reference
142
+ }
143
+ ```
144
+
145
+ ## createEvmExecutor
146
+
147
+ Returns `{ walletClient, publicClient }` for EVM operations.
148
+
149
+ ```ts
150
+ const { walletClient, publicClient } = createEvmExecutor(account, rpcUrl, chainId);
151
+ ```
152
+
153
+ Accepts viem `Account` values, including the objects returned by `createEvmWallet()`.
154
+
155
+ ### Pure intent builders
156
+
157
+ ```ts
158
+ import {
159
+ buildTransferIntent,
160
+ buildExecuteIntent,
161
+ buildDepositBackIntent,
162
+ } from '@fastxyz/allset-sdk/browser';
163
+
164
+ const intents = [
165
+ buildTransferIntent('0x75faf114eafb1BDbe2F0316DF893fd58CE46AA4d', '0xRecipient'),
166
+ buildExecuteIntent('0xContractAddress', '0xabcdef'),
167
+ buildDepositBackIntent('0x75faf114eafb1BDbe2F0316DF893fd58CE46AA4d', 'fast1receiveraddress...'),
168
+ ];
169
+ ```
170
+
45
171
  ## Advanced: Custom Intents
46
172
 
47
173
  ```ts
48
- import { buildTransferIntent, buildExecuteIntent } from '@fastxyz/allset-sdk';
174
+ import { buildExecuteIntent, buildTransferIntent } from '@fastxyz/allset-sdk';
49
175
 
50
- // Execute custom intents on EVM chain
51
176
  await allset.executeIntent({
52
177
  chain: 'arbitrum',
53
178
  fastWallet,
@@ -55,21 +180,66 @@ await allset.executeIntent({
55
180
  amount: '1000000',
56
181
  intents: [
57
182
  buildTransferIntent(USDC_ADDRESS, '0xRecipient'),
58
- // Add more intents: swaps, protocol calls, etc.
183
+ buildExecuteIntent(CONTRACT_ADDRESS, '0xabcdef'),
59
184
  ],
60
185
  });
61
186
  ```
62
187
 
63
- For intents without a transfer recipient or execute target, pass `externalAddress` so the relayer has an explicit EVM target.
64
-
65
188
  ## Supported Networks
66
189
 
67
190
  | Network | Chain | Status |
68
- |---------|-------|--------|
191
+ | --- | --- | --- |
69
192
  | Testnet | Arbitrum Sepolia | ✅ |
70
193
  | Testnet | Ethereum Sepolia | ✅ |
194
+ | Testnet | Base (mainnet chain) | ✅ |
71
195
  | Mainnet | Coming soon | 🔜 |
72
196
 
197
+ ## Current Hosted Endpoints
198
+
199
+ These are the currently used hosted endpoints and token IDs for the public testnet environment:
200
+
201
+ - Portal: `https://testnet.allset.fast.xyz`
202
+ - Fast proxy: `https://testnet.api.fast.xyz/proxy`
203
+ - Cross-sign: `https://testnet.cross-sign.allset.fast.xyz`
204
+
205
+ Current Fast token IDs:
206
+
207
+ - `testUSDC` testnet token id
208
+ - Base64: `nFL+lGX1e8UmwRqgwEj9hwmqRqvAbRXIDL7ZJj1NTfg=`
209
+ - Hex: `9c52fe9465f57bc526c11aa0c048fd8709aa46abc06d15c80cbed9263d4d4df8`
210
+ - `fastUSDC` mainnet token id
211
+ - Base64: `tP2rhGNydA90frS2SsDCLqoVkRPy01sHUCcGX7pBk2U=`
212
+ - Hex: `b4fdab846372740f747eb4b64ac0c22eaa159113f2d35b075027065fba419365`
213
+
214
+ Bundled testnet chain routes:
215
+
216
+ - Ethereum Sepolia
217
+ - Bridge contract: `0x67C5f02df93f2144C6a4e4Fb48D92cE91Cfbc3A6`
218
+ - Fast bridge: `fast1fxtkgpwcy7hnakw96gg7relph4wxx7ghrukm723p3l9adxuxljzsc6f958`
219
+ - Relayer base URL: `https://testnet.allset.fast.xyz/ethereum-sepolia/relayer`
220
+ - Bundled relayer submit URL: `https://testnet.allset.fast.xyz/ethereum-sepolia/relayer/relay`
221
+ - Fast token id: `testUSDC`
222
+ - Arbitrum Sepolia
223
+ - Bridge contract: `0x67C5f02df93f2144C6a4e4Fb48D92cE91Cfbc3A6`
224
+ - Fast bridge: `fast1tkmtqxulhnzeeg9zhuwxy3x95wr7waytm9cq40ndf7tkuwwcc6jseg24j8`
225
+ - Relayer base URL: `https://testnet.allset.fast.xyz/arbitrum-sepolia/relayer`
226
+ - Bundled relayer submit URL: `https://testnet.allset.fast.xyz/arbitrum-sepolia/relayer/relay`
227
+ - Fast token id: `testUSDC`
228
+ - Base
229
+ - Bridge contract: `0x41cE437493f2a9DDA9214aE7b3662175bBe54a6c`
230
+ - Fast bridge: `fast1a4fza9xc8jcm7jp64a0ugtuyw3hkkmje02e8af9aaer4r0je4dpqz4uf58`
231
+ - Relayer base URL: `https://testnet.allset.fast.xyz/base/relayer`
232
+ - Bundled relayer submit URL: `https://testnet.allset.fast.xyz/base/relayer/relay`
233
+ - Bundled Fast token id: `fastUSDC`
234
+
235
+ Note: the SDK currently posts to the explicit `/relay` endpoint. The plain `/relayer` URL above is included as a reference base URL.
236
+
237
+ ## Migration
238
+
239
+ - Root imports are now pure-helper only.
240
+ - Move provider, executor, wallet, and config imports to `@fastxyz/allset-sdk/node`.
241
+ - Use the root, `core`, or `browser` entrypoints for deposit planning and intent building.
242
+
73
243
  ## Documentation
74
244
 
75
245
  See [SKILL.md](./SKILL.md) for detailed API documentation.
@@ -0,0 +1,2 @@
1
+ export * from '../core/index.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/browser/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from '../core/index.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/browser/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { Hex } from 'viem';
2
+ export declare function bytesToHex(bytes: Uint8Array): Hex;
3
+ export declare function fastAddressToBytes32(address: string): Hex;
4
+ //# sourceMappingURL=address.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"address.d.ts","sourceRoot":"","sources":["../../src/core/address.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAEhC,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,GAAG,CAMjD;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,GAAG,CAoBzD"}
@@ -0,0 +1,27 @@
1
+ import { bech32m } from 'bech32';
2
+ export function bytesToHex(bytes) {
3
+ let hex = '';
4
+ for (const byte of bytes) {
5
+ hex += byte.toString(16).padStart(2, '0');
6
+ }
7
+ return `0x${hex}`;
8
+ }
9
+ export function fastAddressToBytes32(address) {
10
+ let decoded;
11
+ try {
12
+ decoded = bech32m.decode(address, 90);
13
+ }
14
+ catch (error) {
15
+ throw new Error(`Invalid Fast address "${address}": ${error.message}`);
16
+ }
17
+ const { prefix, words } = decoded;
18
+ if (prefix !== 'fast') {
19
+ throw new Error(`Fast address must use the "fast" prefix. Got: "${prefix}"`);
20
+ }
21
+ const bytes = new Uint8Array(bech32m.fromWords(words));
22
+ if (bytes.length !== 32) {
23
+ throw new Error(`Fast address must decode to 32 bytes. Got: ${bytes.length}`);
24
+ }
25
+ return bytesToHex(bytes);
26
+ }
27
+ //# sourceMappingURL=address.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"address.js","sourceRoot":"","sources":["../../src/core/address.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAGjC,MAAM,UAAU,UAAU,CAAC,KAAiB;IAC1C,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,KAAK,GAAG,EAAS,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,OAAe;IAClD,IAAI,OAA0C,CAAC;IAE/C,IAAI,CAAC;QACH,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACxC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,yBAAyB,OAAO,MAAO,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;IACpF,CAAC;IAED,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IAClC,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,kDAAkD,MAAM,GAAG,CAAC,CAAC;IAC/E,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IACvD,IAAI,KAAK,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,8CAA8C,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IAChF,CAAC;IAED,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;AAC3B,CAAC"}
@@ -0,0 +1,59 @@
1
+ export interface DepositPlanningTokenConfig {
2
+ evmAddress: string;
3
+ decimals: number;
4
+ isNative?: boolean;
5
+ }
6
+ export interface DepositPlanningChainConfig {
7
+ chainId: number;
8
+ bridgeContract: string;
9
+ tokens: Record<string, DepositPlanningTokenConfig>;
10
+ }
11
+ export interface DepositPlanningNetworkConfig {
12
+ chains: Record<string, DepositPlanningChainConfig>;
13
+ }
14
+ export interface DepositRouteOverrides {
15
+ bridgeAddress?: string;
16
+ tokenAddress?: string;
17
+ chainId?: number;
18
+ decimals?: number;
19
+ isNative?: boolean;
20
+ }
21
+ export interface ResolveDepositRouteParams {
22
+ network?: 'testnet' | 'mainnet';
23
+ chain: string;
24
+ token: string;
25
+ overrides?: DepositRouteOverrides;
26
+ networkConfig?: DepositPlanningNetworkConfig;
27
+ }
28
+ export interface DepositRoute {
29
+ network: 'testnet' | 'mainnet';
30
+ chain: string;
31
+ token: string;
32
+ chainId: number;
33
+ bridgeAddress: `0x${string}`;
34
+ tokenAddress: `0x${string}`;
35
+ decimals: number;
36
+ isNative: boolean;
37
+ }
38
+ export interface EncodeDepositCalldataParams {
39
+ tokenAddress: string;
40
+ amount: bigint;
41
+ receiverBytes32: `0x${string}`;
42
+ }
43
+ export interface BuildDepositTransactionParams extends ResolveDepositRouteParams {
44
+ amount: bigint;
45
+ receiver: string;
46
+ }
47
+ export interface DepositTransactionPlan {
48
+ chainId: number;
49
+ to: `0x${string}`;
50
+ data: `0x${string}`;
51
+ value: bigint;
52
+ receiverBytes32: `0x${string}`;
53
+ route: DepositRoute;
54
+ }
55
+ export declare function resolveDepositRoute(params: ResolveDepositRouteParams): DepositRoute;
56
+ export declare function encodeDepositCalldata(params: EncodeDepositCalldataParams): `0x${string}`;
57
+ export declare function buildDepositTransactionFromRoute(route: DepositRoute, amount: bigint, receiver: string): DepositTransactionPlan;
58
+ export declare function buildDepositTransaction(params: BuildDepositTransactionParams): DepositTransactionPlan;
59
+ //# sourceMappingURL=deposit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deposit.d.ts","sourceRoot":"","sources":["../../src/core/deposit.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,0BAA0B;IACzC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAAC;CACpD;AAED,MAAM,WAAW,4BAA4B;IAC3C,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAAC;CACpD;AAED,MAAM,WAAW,qBAAqB;IACpC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,yBAAyB;IACxC,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,qBAAqB,CAAC;IAClC,aAAa,CAAC,EAAE,4BAA4B,CAAC;CAC9C;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,SAAS,GAAG,SAAS,CAAC;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,KAAK,MAAM,EAAE,CAAC;IAC7B,YAAY,EAAE,KAAK,MAAM,EAAE,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,2BAA2B;IAC1C,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,KAAK,MAAM,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,6BAA8B,SAAQ,yBAAyB;IAC9E,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,EAAE,EAAE,KAAK,MAAM,EAAE,CAAC;IAClB,IAAI,EAAE,KAAK,MAAM,EAAE,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,KAAK,MAAM,EAAE,CAAC;IAC/B,KAAK,EAAE,YAAY,CAAC;CACrB;AAiDD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,yBAAyB,GAAG,YAAY,CA6BnF;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,2BAA2B,GAAG,KAAK,MAAM,EAAE,CAUxF;AAED,wBAAgB,gCAAgC,CAC9C,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,sBAAsB,CAcxB;AAED,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,6BAA6B,GACpC,sBAAsB,CAGxB"}
@@ -0,0 +1,93 @@
1
+ import { encodeFunctionData } from 'viem';
2
+ import { DEFAULT_NETWORKS_CONFIG } from '../default-config.js';
3
+ import { fastAddressToBytes32 } from './address.js';
4
+ const BRIDGE_DEPOSIT_ABI = [{
5
+ type: 'function',
6
+ name: 'deposit',
7
+ inputs: [
8
+ { name: 'token', type: 'address' },
9
+ { name: 'amount', type: 'uint256' },
10
+ { name: 'receiver', type: 'bytes32' },
11
+ ],
12
+ outputs: [],
13
+ stateMutability: 'payable',
14
+ }];
15
+ function normalizeDepositToken(token) {
16
+ const lowerToken = token.toLowerCase();
17
+ if (lowerToken === 'fastusdc' || lowerToken === 'testusdc') {
18
+ return 'USDC';
19
+ }
20
+ return token;
21
+ }
22
+ function resolveTokenEntry(chainConfig, token) {
23
+ const normalizedToken = normalizeDepositToken(token);
24
+ const exactConfig = chainConfig.tokens[normalizedToken];
25
+ if (exactConfig) {
26
+ return { tokenKey: normalizedToken, tokenConfig: exactConfig };
27
+ }
28
+ const upperToken = normalizedToken.toUpperCase();
29
+ const upperConfig = chainConfig.tokens[upperToken];
30
+ if (upperConfig) {
31
+ return { tokenKey: upperToken, tokenConfig: upperConfig };
32
+ }
33
+ const loweredAddress = token.toLowerCase();
34
+ for (const [tokenKey, tokenConfig] of Object.entries(chainConfig.tokens)) {
35
+ if (tokenConfig.evmAddress.toLowerCase() === loweredAddress) {
36
+ return { tokenKey, tokenConfig };
37
+ }
38
+ }
39
+ return null;
40
+ }
41
+ export function resolveDepositRoute(params) {
42
+ const network = params.network ?? 'testnet';
43
+ const networkConfig = params.networkConfig ?? DEFAULT_NETWORKS_CONFIG[network];
44
+ const chainConfig = networkConfig.chains[params.chain];
45
+ if (!chainConfig) {
46
+ throw new Error(`AllSet does not support EVM chain "${params.chain}" on ${network}. Supported: ${Object.keys(networkConfig.chains).join(', ') || 'none'}`);
47
+ }
48
+ const tokenEntry = resolveTokenEntry(chainConfig, params.token);
49
+ if (!tokenEntry) {
50
+ throw new Error(`Cannot resolve token "${params.token}" on AllSet for chain "${params.chain}".`);
51
+ }
52
+ return {
53
+ network,
54
+ chain: params.chain,
55
+ token: tokenEntry.tokenKey,
56
+ chainId: params.overrides?.chainId ?? chainConfig.chainId,
57
+ bridgeAddress: (params.overrides?.bridgeAddress ?? chainConfig.bridgeContract),
58
+ tokenAddress: (params.overrides?.tokenAddress ?? tokenEntry.tokenConfig.evmAddress),
59
+ decimals: params.overrides?.decimals ?? tokenEntry.tokenConfig.decimals,
60
+ isNative: params.overrides?.isNative ?? tokenEntry.tokenConfig.isNative ?? false,
61
+ };
62
+ }
63
+ export function encodeDepositCalldata(params) {
64
+ return encodeFunctionData({
65
+ abi: BRIDGE_DEPOSIT_ABI,
66
+ functionName: 'deposit',
67
+ args: [
68
+ params.tokenAddress,
69
+ params.amount,
70
+ params.receiverBytes32,
71
+ ],
72
+ });
73
+ }
74
+ export function buildDepositTransactionFromRoute(route, amount, receiver) {
75
+ const receiverBytes32 = fastAddressToBytes32(receiver);
76
+ return {
77
+ chainId: route.chainId,
78
+ to: route.bridgeAddress,
79
+ data: encodeDepositCalldata({
80
+ tokenAddress: route.tokenAddress,
81
+ amount,
82
+ receiverBytes32,
83
+ }),
84
+ value: route.isNative ? amount : 0n,
85
+ receiverBytes32,
86
+ route,
87
+ };
88
+ }
89
+ export function buildDepositTransaction(params) {
90
+ const route = resolveDepositRoute(params);
91
+ return buildDepositTransactionFromRoute(route, params.amount, params.receiver);
92
+ }
93
+ //# sourceMappingURL=deposit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deposit.js","sourceRoot":"","sources":["../../src/core/deposit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export { buildDepositTransaction, encodeDepositCalldata, resolveDepositRoute, } from './deposit.js';
2
+ export { fastAddressToBytes32 } from './address.js';
3
+ export { IntentAction, buildTransferIntent, buildExecuteIntent, buildDepositBackIntent, buildRevokeIntent, } from '../intents.js';
4
+ export type { Intent } from '../intents.js';
5
+ export type { BuildDepositTransactionParams, DepositPlanningChainConfig, DepositPlanningNetworkConfig, DepositPlanningTokenConfig, DepositRoute, DepositRouteOverrides, DepositTransactionPlan, EncodeDepositCalldataParams, ResolveDepositRouteParams, } from './deposit.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEpD,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,kBAAkB,EAClB,sBAAsB,EACtB,iBAAiB,GAClB,MAAM,eAAe,CAAC;AAEvB,YAAY,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC5C,YAAY,EACV,6BAA6B,EAC7B,0BAA0B,EAC1B,4BAA4B,EAC5B,0BAA0B,EAC1B,YAAY,EACZ,qBAAqB,EACrB,sBAAsB,EACtB,2BAA2B,EAC3B,yBAAyB,GAC1B,MAAM,cAAc,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { buildDepositTransaction, encodeDepositCalldata, resolveDepositRoute, } from './deposit.js';
2
+ export { fastAddressToBytes32 } from './address.js';
3
+ export { IntentAction, buildTransferIntent, buildExecuteIntent, buildDepositBackIntent, buildRevokeIntent, } from '../intents.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEpD,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,kBAAkB,EAClB,sBAAsB,EACtB,iBAAiB,GAClB,MAAM,eAAe,CAAC"}
@@ -0,0 +1,51 @@
1
+ export declare const DEFAULT_NETWORKS_CONFIG: {
2
+ testnet: {
3
+ crossSignUrl: string;
4
+ chains: {
5
+ ethereum: {
6
+ chainId: number;
7
+ bridgeContract: string;
8
+ fastBridgeAddress: string;
9
+ relayerUrl: string;
10
+ tokens: {
11
+ USDC: {
12
+ evmAddress: string;
13
+ fastTokenId: string;
14
+ decimals: number;
15
+ };
16
+ };
17
+ };
18
+ arbitrum: {
19
+ chainId: number;
20
+ bridgeContract: string;
21
+ fastBridgeAddress: string;
22
+ relayerUrl: string;
23
+ tokens: {
24
+ USDC: {
25
+ evmAddress: string;
26
+ fastTokenId: string;
27
+ decimals: number;
28
+ };
29
+ };
30
+ };
31
+ base: {
32
+ chainId: number;
33
+ bridgeContract: string;
34
+ fastBridgeAddress: string;
35
+ relayerUrl: string;
36
+ tokens: {
37
+ USDC: {
38
+ evmAddress: string;
39
+ fastTokenId: string;
40
+ decimals: number;
41
+ };
42
+ };
43
+ };
44
+ };
45
+ };
46
+ mainnet: {
47
+ crossSignUrl: string;
48
+ chains: {};
49
+ };
50
+ };
51
+ //# sourceMappingURL=default-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default-config.d.ts","sourceRoot":"","sources":["../src/default-config.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiDP,CAAC"}
@@ -0,0 +1,52 @@
1
+ // Single source of truth for the SDK's bundled default network support matrix.
2
+ export const DEFAULT_NETWORKS_CONFIG = {
3
+ testnet: {
4
+ crossSignUrl: 'https://testnet.cross-sign.allset.fast.xyz',
5
+ chains: {
6
+ ethereum: {
7
+ chainId: 11155111,
8
+ bridgeContract: '0x67C5f02df93f2144C6a4e4Fb48D92cE91Cfbc3A6',
9
+ fastBridgeAddress: 'fast1fxtkgpwcy7hnakw96gg7relph4wxx7ghrukm723p3l9adxuxljzsc6f958',
10
+ relayerUrl: 'https://testnet.allset.fast.xyz/ethereum-sepolia/relayer/relay',
11
+ tokens: {
12
+ USDC: {
13
+ evmAddress: '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238',
14
+ fastTokenId: '9c52fe9465f57bc526c11aa0c048fd8709aa46abc06d15c80cbed9263d4d4df8',
15
+ decimals: 6,
16
+ },
17
+ },
18
+ },
19
+ arbitrum: {
20
+ chainId: 421614,
21
+ bridgeContract: '0x67C5f02df93f2144C6a4e4Fb48D92cE91Cfbc3A6',
22
+ fastBridgeAddress: 'fast1tkmtqxulhnzeeg9zhuwxy3x95wr7waytm9cq40ndf7tkuwwcc6jseg24j8',
23
+ relayerUrl: 'https://testnet.allset.fast.xyz/arbitrum-sepolia/relayer/relay',
24
+ tokens: {
25
+ USDC: {
26
+ evmAddress: '0x75faf114eafb1BDbe2F0316DF893fd58CE46AA4d',
27
+ fastTokenId: '9c52fe9465f57bc526c11aa0c048fd8709aa46abc06d15c80cbed9263d4d4df8',
28
+ decimals: 6,
29
+ },
30
+ },
31
+ },
32
+ base: {
33
+ chainId: 8453,
34
+ bridgeContract: '0x41cE437493f2a9DDA9214aE7b3662175bBe54a6c',
35
+ fastBridgeAddress: 'fast1a4fza9xc8jcm7jp64a0ugtuyw3hkkmje02e8af9aaer4r0je4dpqz4uf58',
36
+ relayerUrl: 'https://testnet.allset.fast.xyz/base/relayer/relay',
37
+ tokens: {
38
+ USDC: {
39
+ evmAddress: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',
40
+ fastTokenId: 'b4fdab846372740f747eb4b64ac0c22eaa159113f2d35b075027065fba419365',
41
+ decimals: 6,
42
+ },
43
+ },
44
+ },
45
+ },
46
+ },
47
+ mainnet: {
48
+ crossSignUrl: 'https://cross-sign.allset.fast.xyz',
49
+ chains: {},
50
+ },
51
+ };
52
+ //# sourceMappingURL=default-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default-config.js","sourceRoot":"","sources":["../src/default-config.ts"],"names":[],"mappings":"AAEA,+EAA+E;AAC/E,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,OAAO,EAAE;QACP,YAAY,EAAE,4CAA4C;QAC1D,MAAM,EAAE;YACN,QAAQ,EAAE;gBACR,OAAO,EAAE,QAAQ;gBACjB,cAAc,EAAE,4CAA4C;gBAC5D,iBAAiB,EAAE,iEAAiE;gBACpF,UAAU,EAAE,gEAAgE;gBAC5E,MAAM,EAAE;oBACN,IAAI,EAAE;wBACJ,UAAU,EAAE,4CAA4C;wBACxD,WAAW,EAAE,kEAAkE;wBAC/E,QAAQ,EAAE,CAAC;qBACZ;iBACF;aACF;YACD,QAAQ,EAAE;gBACR,OAAO,EAAE,MAAM;gBACf,cAAc,EAAE,4CAA4C;gBAC5D,iBAAiB,EAAE,iEAAiE;gBACpF,UAAU,EAAE,gEAAgE;gBAC5E,MAAM,EAAE;oBACN,IAAI,EAAE;wBACJ,UAAU,EAAE,4CAA4C;wBACxD,WAAW,EAAE,kEAAkE;wBAC/E,QAAQ,EAAE,CAAC;qBACZ;iBACF;aACF;YACD,IAAI,EAAE;gBACJ,OAAO,EAAE,IAAI;gBACb,cAAc,EAAE,4CAA4C;gBAC5D,iBAAiB,EAAE,iEAAiE;gBACpF,UAAU,EAAE,oDAAoD;gBAChE,MAAM,EAAE;oBACN,IAAI,EAAE;wBACJ,UAAU,EAAE,4CAA4C;wBACxD,WAAW,EAAE,kEAAkE;wBAC/E,QAAQ,EAAE,CAAC;qBACZ;iBACF;aACF;SACF;KACF;IACD,OAAO,EAAE;QACP,YAAY,EAAE,oCAAoC;QAClD,MAAM,EAAE,EAAE;KACX;CAC0B,CAAC"}