@1stdex/first-sdk 1.0.70 → 1.0.72

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.
@@ -7,6 +7,7 @@ const addresses_1 = require("../../constants/chain-configs/addresses");
7
7
  const dex_vault_abi_1 = require("../../constants/abis/core/dex-vault-abi");
8
8
  const vault_1 = require("../../views/vault");
9
9
  const withdraw_from_vault_1 = require("../vault/withdraw-from-vault");
10
+ const apis_1 = require("../../entities/currency/apis");
10
11
  class NotEnoughFundsError extends Error {
11
12
  constructor(message, required, available) {
12
13
  super(message);
@@ -33,11 +34,15 @@ const prepareWithdraw = async ({ chainId, userAddress, toAddress, currency, amou
33
34
  chain: chain_1.CHAIN_MAP[chainId],
34
35
  transport: options?.rpcUrl ? (0, viem_1.http)(options.rpcUrl) : (0, viem_1.http)(),
35
36
  });
36
- const vault = await (0, vault_1.getVault)({
37
- chainId,
38
- tokenAddress: currency,
39
- ...(options?.rpcUrl && { options: { rpcUrl: options.rpcUrl } }),
40
- });
37
+ const [currencyInfo, vault] = await Promise.all([
38
+ (0, apis_1.fetchCurrency)(publicClient, chainId, currency),
39
+ (0, vault_1.getVault)({
40
+ chainId,
41
+ tokenAddress: currency,
42
+ ...(options?.rpcUrl && { options: { rpcUrl: options.rpcUrl } }),
43
+ }),
44
+ ]);
45
+ const rawAmount = (0, viem_1.parseUnits)(amount, currencyInfo.decimals);
41
46
  const results = await publicClient.multicall({
42
47
  contracts: [
43
48
  {
@@ -64,25 +69,35 @@ const prepareWithdraw = async ({ chainId, userAddress, toAddress, currency, amou
64
69
  const vaultBalance = results[1].result || 0n;
65
70
  const vaultAllowance = results[2].result || 0n;
66
71
  const totalBalance = walletBalance + vaultBalance;
67
- if (totalBalance < amount) {
68
- throw new NotEnoughFundsError(`Insufficient funds: need ${amount}, but only have ${totalBalance} (wallet: ${walletBalance}, vault: ${vaultBalance})`, amount, totalBalance);
72
+ console.log('[prepareWithdraw] Raw amount:', rawAmount);
73
+ console.log('[prepareWithdraw] Wallet balance:', walletBalance);
74
+ console.log('[prepareWithdraw] Vault balance:', vaultBalance);
75
+ console.log('[prepareWithdraw] Vault allowance:', vaultAllowance);
76
+ console.log('[prepareWithdraw] Total balance:', totalBalance);
77
+ if (totalBalance < rawAmount) {
78
+ console.log('[prepareWithdraw] Insufficient funds - throwing error');
79
+ throw new NotEnoughFundsError(`Insufficient funds: need ${rawAmount}, but only have ${totalBalance} (wallet: ${walletBalance}, vault: ${vaultBalance})`, rawAmount, totalBalance);
69
80
  }
70
81
  const calls = [];
71
82
  const maxValue = 2n ** 256n - 1n;
72
- if (walletBalance >= amount) {
83
+ if (walletBalance >= rawAmount) {
84
+ console.log('[prepareWithdraw] Wallet has enough, transferring directly');
73
85
  calls.push({
74
86
  to: currency,
75
87
  data: (0, viem_1.encodeFunctionData)({
76
88
  abi: viem_1.erc20Abi,
77
89
  functionName: 'transfer',
78
- args: [toAddress, amount],
90
+ args: [toAddress, rawAmount],
79
91
  }),
80
92
  value: 0n,
81
93
  });
94
+ console.log('[prepareWithdraw] Returning 1 call (transfer)');
82
95
  return calls;
83
96
  }
84
- const amountToWithdraw = amount - walletBalance;
97
+ const amountToWithdraw = rawAmount - walletBalance;
98
+ console.log('[prepareWithdraw] Need to withdraw from vault:', amountToWithdraw);
85
99
  if (vaultAllowance < amountToWithdraw) {
100
+ console.log('[prepareWithdraw] Adding approval call (allowance insufficient)');
86
101
  calls.push({
87
102
  to: vault.address,
88
103
  data: (0, viem_1.encodeFunctionData)({
@@ -93,6 +108,10 @@ const prepareWithdraw = async ({ chainId, userAddress, toAddress, currency, amou
93
108
  value: 0n,
94
109
  });
95
110
  }
111
+ else {
112
+ console.log('[prepareWithdraw] Approval not needed (sufficient allowance)');
113
+ }
114
+ console.log('[prepareWithdraw] Building withdraw transaction');
96
115
  const withdrawTx = await (0, withdraw_from_vault_1.withdrawFromVault)({
97
116
  chainId,
98
117
  userAddress,
@@ -108,15 +127,18 @@ const prepareWithdraw = async ({ chainId, userAddress, toAddress, currency, amou
108
127
  data: withdrawTx.data,
109
128
  value: withdrawTx.value,
110
129
  });
130
+ console.log('[prepareWithdraw] Added withdraw call');
111
131
  calls.push({
112
132
  to: currency,
113
133
  data: (0, viem_1.encodeFunctionData)({
114
134
  abi: viem_1.erc20Abi,
115
135
  functionName: 'transfer',
116
- args: [toAddress, amount],
136
+ args: [toAddress, rawAmount],
117
137
  }),
118
138
  value: 0n,
119
139
  });
140
+ console.log('[prepareWithdraw] Added transfer call');
141
+ console.log('[prepareWithdraw] Returning', calls.length, 'calls');
120
142
  return calls;
121
143
  };
122
144
  exports.prepareWithdraw = prepareWithdraw;
@@ -1 +1 @@
1
- {"version":3,"file":"prepare-withdraw.js","sourceRoot":"","sources":["../../../../src/calls/batch/prepare-withdraw.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prepare-withdraw.js","sourceRoot":"","sources":["../../../../src/calls/batch/prepare-withdraw.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,10 @@
1
- import { createPublicClient, encodeFunctionData, erc20Abi, http } from 'viem';
1
+ import { createPublicClient, encodeFunctionData, erc20Abi, http, parseUnits, } from 'viem';
2
2
  import { CHAIN_MAP } from '../../constants/chain-configs/chain';
3
3
  import { CONTRACT_ADDRESSES } from '../../constants/chain-configs/addresses';
4
4
  import { DEX_VAULT_ABI } from '../../constants/abis/core/dex-vault-abi';
5
5
  import { getVault } from '../../views/vault';
6
6
  import { withdrawFromVault } from '../vault/withdraw-from-vault';
7
+ import { fetchCurrency } from '../../entities/currency/apis';
7
8
  /**
8
9
  * Error thrown when there are insufficient funds in wallet and vault combined.
9
10
  */
@@ -36,7 +37,7 @@ export class NotEnoughFundsError extends Error {
36
37
  * @param userAddress The user address (wallet and vault owner).
37
38
  * @param toAddress The recipient address.
38
39
  * @param currency The currency/token address.
39
- * @param amount The amount to send (in wei).
40
+ * @param amount The amount to send (decimal-adjusted string, e.g., '100.5' for 100.5 tokens).
40
41
  * @param options Optional parameters.
41
42
  * @returns Promise resolving to array of batch calls.
42
43
  * @example
@@ -48,7 +49,7 @@ export class NotEnoughFundsError extends Error {
48
49
  * userAddress: '0xF8c1869Ecd4df136693C45EcE1b67f85B6bDaE69',
49
50
  * toAddress: '0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb',
50
51
  * currency: '0x00bfd44e79fb7f6dd5887a9426c8ef85a0cd23e0',
51
- * amount: 1000000000000000000n // 1 token (18 decimals)
52
+ * amount: '100.5' // 100.5 tokens
52
53
  * })
53
54
  *
54
55
  * // Send all calls in one batched transaction
@@ -61,11 +62,15 @@ export const prepareWithdraw = async ({ chainId, userAddress, toAddress, currenc
61
62
  chain: CHAIN_MAP[chainId],
62
63
  transport: options?.rpcUrl ? http(options.rpcUrl) : http(),
63
64
  });
64
- const vault = await getVault({
65
- chainId,
66
- tokenAddress: currency,
67
- ...(options?.rpcUrl && { options: { rpcUrl: options.rpcUrl } }),
68
- });
65
+ const [currencyInfo, vault] = await Promise.all([
66
+ fetchCurrency(publicClient, chainId, currency),
67
+ getVault({
68
+ chainId,
69
+ tokenAddress: currency,
70
+ ...(options?.rpcUrl && { options: { rpcUrl: options.rpcUrl } }),
71
+ }),
72
+ ]);
73
+ const rawAmount = parseUnits(amount, currencyInfo.decimals);
69
74
  const results = await publicClient.multicall({
70
75
  contracts: [
71
76
  {
@@ -92,28 +97,38 @@ export const prepareWithdraw = async ({ chainId, userAddress, toAddress, currenc
92
97
  const vaultBalance = results[1].result || 0n;
93
98
  const vaultAllowance = results[2].result || 0n;
94
99
  const totalBalance = walletBalance + vaultBalance;
95
- if (totalBalance < amount) {
96
- throw new NotEnoughFundsError(`Insufficient funds: need ${amount}, but only have ${totalBalance} (wallet: ${walletBalance}, vault: ${vaultBalance})`, amount, totalBalance);
100
+ console.log('[prepareWithdraw] Raw amount:', rawAmount);
101
+ console.log('[prepareWithdraw] Wallet balance:', walletBalance);
102
+ console.log('[prepareWithdraw] Vault balance:', vaultBalance);
103
+ console.log('[prepareWithdraw] Vault allowance:', vaultAllowance);
104
+ console.log('[prepareWithdraw] Total balance:', totalBalance);
105
+ if (totalBalance < rawAmount) {
106
+ console.log('[prepareWithdraw] Insufficient funds - throwing error');
107
+ throw new NotEnoughFundsError(`Insufficient funds: need ${rawAmount}, but only have ${totalBalance} (wallet: ${walletBalance}, vault: ${vaultBalance})`, rawAmount, totalBalance);
97
108
  }
98
109
  const calls = [];
99
110
  const maxValue = 2n ** 256n - 1n;
100
111
  // If wallet has enough, just transfer
101
- if (walletBalance >= amount) {
112
+ if (walletBalance >= rawAmount) {
113
+ console.log('[prepareWithdraw] Wallet has enough, transferring directly');
102
114
  calls.push({
103
115
  to: currency,
104
116
  data: encodeFunctionData({
105
117
  abi: erc20Abi,
106
118
  functionName: 'transfer',
107
- args: [toAddress, amount],
119
+ args: [toAddress, rawAmount],
108
120
  }),
109
121
  value: 0n,
110
122
  });
123
+ console.log('[prepareWithdraw] Returning 1 call (transfer)');
111
124
  return calls;
112
125
  }
113
126
  // Need to withdraw from vault - determine how much
114
- const amountToWithdraw = amount - walletBalance;
127
+ const amountToWithdraw = rawAmount - walletBalance;
128
+ console.log('[prepareWithdraw] Need to withdraw from vault:', amountToWithdraw);
115
129
  // Add approval if needed
116
130
  if (vaultAllowance < amountToWithdraw) {
131
+ console.log('[prepareWithdraw] Adding approval call (allowance insufficient)');
117
132
  calls.push({
118
133
  to: vault.address,
119
134
  data: encodeFunctionData({
@@ -124,6 +139,10 @@ export const prepareWithdraw = async ({ chainId, userAddress, toAddress, currenc
124
139
  value: 0n,
125
140
  });
126
141
  }
142
+ else {
143
+ console.log('[prepareWithdraw] Approval not needed (sufficient allowance)');
144
+ }
145
+ console.log('[prepareWithdraw] Building withdraw transaction');
127
146
  // Withdraw from vault to wallet
128
147
  const withdrawTx = await withdrawFromVault({
129
148
  chainId,
@@ -140,16 +159,19 @@ export const prepareWithdraw = async ({ chainId, userAddress, toAddress, currenc
140
159
  data: withdrawTx.data,
141
160
  value: withdrawTx.value,
142
161
  });
162
+ console.log('[prepareWithdraw] Added withdraw call');
143
163
  // Transfer from wallet to recipient
144
164
  calls.push({
145
165
  to: currency,
146
166
  data: encodeFunctionData({
147
167
  abi: erc20Abi,
148
168
  functionName: 'transfer',
149
- args: [toAddress, amount],
169
+ args: [toAddress, rawAmount],
150
170
  }),
151
171
  value: 0n,
152
172
  });
173
+ console.log('[prepareWithdraw] Added transfer call');
174
+ console.log('[prepareWithdraw] Returning', calls.length, 'calls');
153
175
  return calls;
154
176
  };
155
177
  //# sourceMappingURL=prepare-withdraw.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"prepare-withdraw.js","sourceRoot":"","sources":["../../../../src/calls/batch/prepare-withdraw.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prepare-withdraw.js","sourceRoot":"","sources":["../../../../src/calls/batch/prepare-withdraw.ts"],"names":[],"mappings":"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"}