@1stdex/first-sdk 1.0.4 → 1.0.6

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.
@@ -4,41 +4,38 @@ import { fetchCurrency } from '../../entities/currency/apis';
4
4
  import { fetchAllowance } from '../../entities/currency/apis/allowance';
5
5
  import { CONTRACT_ADDRESSES } from '../../constants/chain-configs/addresses';
6
6
  import { getVault } from '../../views/vault';
7
+ import { buildTransaction } from '../../utils/build-transaction';
7
8
  /**
8
- * @dev This function relates with `viem` dependency
9
- * Sets maximum allowance for a token and its vault to the respective contracts.
9
+ * Prepares approval transactions for a token and its vault.
10
10
  * This includes:
11
11
  * - Max allowance for the token to controller
12
12
  * - Max allowance for the token's vault to controller
13
13
  * - Max allowance for the token's vault to book manager
14
14
  *
15
- * Only adds allowance if current allowance is below threshold (max - 1 million tokens).
15
+ * Only includes approvals where current allowance is below threshold (max - 1 million tokens).
16
16
  *
17
17
  * @param {CHAIN_IDS} chainId The chain ID.
18
- * @param {WalletClient} walletClient The wallet client.
18
+ * @param {`0x${string}`} userAddress The user address.
19
19
  * @param {`0x${string}`} tokenAddress The token address.
20
20
  * @param options
21
21
  * @param options.rpcUrl The RPC URL of the blockchain.
22
- * @returns {Promise<`0x${string}`[]>} Promise resolving to array of transaction hashes. Empty array if no approvals needed.
22
+ * @returns {Promise<Transaction[]>} Promise resolving to array of approval transactions. Empty array if no approvals needed.
23
23
  * @example
24
24
  * import { setTokenAllowances } from '@clober/v2-sdk'
25
25
  *
26
- * const walletClient = createWalletClient({
27
- * chain: arbitrumSepolia,
28
- * account: mnemonicToAccount('legal ...'),
29
- * transport: http(),
30
- * })
31
- *
32
- * const hashes = await setTokenAllowances({
26
+ * const transactions = await setTokenAllowances({
33
27
  * chainId: 421614,
34
- * walletClient,
28
+ * userAddress: '0xF8c1869Ecd4df136693C45EcE1b67f85B6bDaE69',
35
29
  * tokenAddress: '0x00bfd44e79fb7f6dd5887a9426c8ef85a0cd23e0',
36
30
  * })
31
+ *
32
+ * // Send transactions sequentially
33
+ * for (const tx of transactions) {
34
+ * const hash = await walletClient.sendTransaction(tx)
35
+ * await publicClient.waitForTransactionReceipt({ hash })
36
+ * }
37
37
  */
38
- export const setTokenAllowances = async ({ chainId, walletClient, tokenAddress, options, }) => {
39
- if (!walletClient.account) {
40
- throw new Error('Account is not found');
41
- }
38
+ export const setTokenAllowances = async ({ chainId, userAddress, tokenAddress, options, }) => {
42
39
  const publicClient = createPublicClient({
43
40
  chain: CHAIN_MAP[chainId],
44
41
  transport: options?.rpcUrl ? http(options.rpcUrl) : http(),
@@ -60,153 +57,57 @@ export const setTokenAllowances = async ({ chainId, walletClient, tokenAddress,
60
57
  const threshold = maxValue - oneMillionTokens;
61
58
  // Check current allowances
62
59
  const [tokenToControllerAllowance, vaultToControllerAllowance, vaultToBookManagerAllowance,] = await Promise.all([
63
- fetchAllowance(publicClient, tokenAddress, walletClient.account.address, controllerAddress),
64
- fetchAllowance(publicClient, vault.address, walletClient.account.address, controllerAddress),
65
- fetchAllowance(publicClient, vault.address, walletClient.account.address, bookManagerAddress),
60
+ fetchAllowance(publicClient, tokenAddress, userAddress, controllerAddress),
61
+ fetchAllowance(publicClient, vault.address, userAddress, controllerAddress),
62
+ fetchAllowance(publicClient, vault.address, userAddress, bookManagerAddress),
66
63
  ]);
67
64
  const approvalAbi = [
68
65
  {
69
66
  inputs: [
70
- {
71
- internalType: 'address',
72
- name: 'spender',
73
- type: 'address',
74
- },
75
- {
76
- internalType: 'uint256',
77
- name: 'value',
78
- type: 'uint256',
79
- },
67
+ { internalType: 'address', name: 'spender', type: 'address' },
68
+ { internalType: 'uint256', name: 'value', type: 'uint256' },
80
69
  ],
81
70
  name: 'approve',
82
- outputs: [
83
- {
84
- internalType: 'bool',
85
- name: '',
86
- type: 'bool',
87
- },
88
- ],
71
+ outputs: [{ internalType: 'bool', name: '', type: 'bool' }],
89
72
  stateMutability: 'nonpayable',
90
73
  type: 'function',
91
74
  },
92
75
  ];
93
- const transactionHashes = [];
76
+ const transactions = [];
94
77
  // Approve token to controller if needed
95
78
  if (tokenToControllerAllowance < threshold) {
96
- let hash;
97
- try {
98
- // Simulate the contract call first to validate it will succeed
99
- const { request } = await publicClient.simulateContract({
100
- account: walletClient.account,
101
- chain: CHAIN_MAP[chainId],
102
- address: tokenAddress,
103
- abi: approvalAbi,
104
- functionName: 'approve',
105
- args: [controllerAddress, maxValue],
106
- });
107
- hash = await walletClient.writeContract(request);
108
- }
109
- catch (error) {
110
- if (error.message?.includes('Nonce provided for the transaction is lower than the current nonce')) {
111
- // Wait 2 seconds and retry once
112
- await new Promise((resolve) => setTimeout(resolve, 2000));
113
- const { request } = await publicClient.simulateContract({
114
- account: walletClient.account,
115
- chain: CHAIN_MAP[chainId],
116
- address: tokenAddress,
117
- abi: approvalAbi,
118
- functionName: 'approve',
119
- args: [controllerAddress, maxValue],
120
- });
121
- hash = await walletClient.writeContract(request);
122
- }
123
- else {
124
- throw error;
125
- }
126
- }
127
- transactionHashes.push(hash);
128
- // Wait for transaction confirmation to ensure nonce is updated
129
- await publicClient.waitForTransactionReceipt({ hash });
130
- // Wait 1 second before proceeding (to avoid nonce issues)
131
- await new Promise((resolve) => setTimeout(resolve, 1000));
79
+ transactions.push(await buildTransaction(publicClient, {
80
+ chain: CHAIN_MAP[chainId],
81
+ account: userAddress,
82
+ address: tokenAddress,
83
+ abi: approvalAbi,
84
+ functionName: 'approve',
85
+ args: [controllerAddress, maxValue],
86
+ }, options?.gasLimit));
132
87
  }
133
88
  // Approve vault to controller if needed
134
89
  if (vaultToControllerAllowance < threshold) {
135
- let hash;
136
- try {
137
- // Simulate the contract call first to validate it will succeed
138
- const { request } = await publicClient.simulateContract({
139
- account: walletClient.account,
140
- chain: CHAIN_MAP[chainId],
141
- address: vault.address,
142
- abi: approvalAbi,
143
- functionName: 'approve',
144
- args: [controllerAddress, maxValue],
145
- });
146
- hash = await walletClient.writeContract(request);
147
- }
148
- catch (error) {
149
- if (error.message?.includes('Nonce provided for the transaction is lower than the current nonce')) {
150
- // Wait 2 seconds and retry once
151
- await new Promise((resolve) => setTimeout(resolve, 2000));
152
- const { request } = await publicClient.simulateContract({
153
- account: walletClient.account,
154
- chain: CHAIN_MAP[chainId],
155
- address: vault.address,
156
- abi: approvalAbi,
157
- functionName: 'approve',
158
- args: [controllerAddress, maxValue],
159
- });
160
- hash = await walletClient.writeContract(request);
161
- }
162
- else {
163
- throw error;
164
- }
165
- }
166
- transactionHashes.push(hash);
167
- // Wait for transaction confirmation to ensure nonce is updated
168
- await publicClient.waitForTransactionReceipt({ hash });
169
- // Wait 1 second before proceeding (to avoid nonce issues)
170
- await new Promise((resolve) => setTimeout(resolve, 1000));
90
+ transactions.push(await buildTransaction(publicClient, {
91
+ chain: CHAIN_MAP[chainId],
92
+ account: userAddress,
93
+ address: vault.address,
94
+ abi: approvalAbi,
95
+ functionName: 'approve',
96
+ args: [controllerAddress, maxValue],
97
+ }, options?.gasLimit));
171
98
  }
172
99
  // Approve vault to book manager if needed
173
100
  if (vaultToBookManagerAllowance < threshold) {
174
- let hash;
175
- try {
176
- // Simulate the contract call first to validate it will succeed
177
- const { request } = await publicClient.simulateContract({
178
- account: walletClient.account,
179
- chain: CHAIN_MAP[chainId],
180
- address: vault.address,
181
- abi: approvalAbi,
182
- functionName: 'approve',
183
- args: [bookManagerAddress, maxValue],
184
- });
185
- hash = await walletClient.writeContract(request);
186
- }
187
- catch (error) {
188
- if (error.message?.includes('Nonce provided for the transaction is lower than the current nonce')) {
189
- // Wait 2 seconds and retry once
190
- await new Promise((resolve) => setTimeout(resolve, 2000));
191
- const { request } = await publicClient.simulateContract({
192
- account: walletClient.account,
193
- chain: CHAIN_MAP[chainId],
194
- address: vault.address,
195
- abi: approvalAbi,
196
- functionName: 'approve',
197
- args: [bookManagerAddress, maxValue],
198
- });
199
- hash = await walletClient.writeContract(request);
200
- }
201
- else {
202
- throw error;
203
- }
204
- }
205
- transactionHashes.push(hash);
206
- // Wait for transaction confirmation to ensure nonce is updated
207
- await publicClient.waitForTransactionReceipt({ hash });
101
+ transactions.push(await buildTransaction(publicClient, {
102
+ chain: CHAIN_MAP[chainId],
103
+ account: userAddress,
104
+ address: vault.address,
105
+ abi: approvalAbi,
106
+ functionName: 'approve',
107
+ args: [bookManagerAddress, maxValue],
108
+ }, options?.gasLimit));
208
109
  }
209
- // Return all transaction hashes (executed sequentially with proper nonce management)
210
- return transactionHashes;
110
+ // Return all transactions - caller should send sequentially with proper nonce management
111
+ return transactions;
211
112
  };
212
113
  //# sourceMappingURL=token.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"token.js","sourceRoot":"","sources":["../../../../src/calls/approval/token.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"token.js","sourceRoot":"","sources":["../../../../src/calls/approval/token.ts"],"names":[],"mappings":"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"}