@lit-protocol/vincent-ability-aerodrome-swap 0.2.0-alpha1 → 0.2.0-alpha3

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 (77) hide show
  1. package/package.json +5 -5
  2. package/dist/CHANGELOG.md +0 -19
  3. package/dist/CONTRIBUTING.md +0 -5
  4. package/dist/README.md +0 -5
  5. package/dist/package.json +0 -31
  6. package/dist/src/generated/vincent-bundled-ability.d.ts +0 -136
  7. package/dist/src/generated/vincent-bundled-ability.d.ts.map +0 -1
  8. package/dist/src/generated/vincent-bundled-ability.js +0 -11
  9. package/dist/src/generated/vincent-bundled-ability.js.map +0 -1
  10. package/dist/src/index.d.ts +0 -4
  11. package/dist/src/index.d.ts.map +0 -1
  12. package/dist/src/index.js +0 -3
  13. package/dist/src/index.js.map +0 -1
  14. package/dist/src/lib/ability-checks/check-erc20-allowance.d.ts +0 -10
  15. package/dist/src/lib/ability-checks/check-erc20-allowance.d.ts.map +0 -1
  16. package/dist/src/lib/ability-checks/check-erc20-allowance.js +0 -27
  17. package/dist/src/lib/ability-checks/check-erc20-allowance.js.map +0 -1
  18. package/dist/src/lib/ability-checks/check-erc20-balance.d.ts +0 -9
  19. package/dist/src/lib/ability-checks/check-erc20-balance.d.ts.map +0 -1
  20. package/dist/src/lib/ability-checks/check-erc20-balance.js +0 -21
  21. package/dist/src/lib/ability-checks/check-erc20-balance.js.map +0 -1
  22. package/dist/src/lib/ability-checks/check-native-token-balance.d.ts +0 -7
  23. package/dist/src/lib/ability-checks/check-native-token-balance.d.ts.map +0 -1
  24. package/dist/src/lib/ability-checks/check-native-token-balance.js +0 -14
  25. package/dist/src/lib/ability-checks/check-native-token-balance.js.map +0 -1
  26. package/dist/src/lib/ability-checks/index.d.ts +0 -4
  27. package/dist/src/lib/ability-checks/index.d.ts.map +0 -1
  28. package/dist/src/lib/ability-checks/index.js +0 -4
  29. package/dist/src/lib/ability-checks/index.js.map +0 -1
  30. package/dist/src/lib/ability-helpers/find-supported-token-on-base.d.ts +0 -18
  31. package/dist/src/lib/ability-helpers/find-supported-token-on-base.d.ts.map +0 -1
  32. package/dist/src/lib/ability-helpers/find-supported-token-on-base.js +0 -6
  33. package/dist/src/lib/ability-helpers/find-supported-token-on-base.js.map +0 -1
  34. package/dist/src/lib/ability-helpers/get-erc20-allowance.d.ts +0 -8
  35. package/dist/src/lib/ability-helpers/get-erc20-allowance.d.ts.map +0 -1
  36. package/dist/src/lib/ability-helpers/get-erc20-allowance.js +0 -6
  37. package/dist/src/lib/ability-helpers/get-erc20-allowance.js.map +0 -1
  38. package/dist/src/lib/ability-helpers/get-erc20-contract.d.ts +0 -4
  39. package/dist/src/lib/ability-helpers/get-erc20-contract.d.ts.map +0 -1
  40. package/dist/src/lib/ability-helpers/get-erc20-contract.js +0 -16
  41. package/dist/src/lib/ability-helpers/get-erc20-contract.js.map +0 -1
  42. package/dist/src/lib/ability-helpers/index.d.ts +0 -6
  43. package/dist/src/lib/ability-helpers/index.d.ts.map +0 -1
  44. package/dist/src/lib/ability-helpers/index.js +0 -6
  45. package/dist/src/lib/ability-helpers/index.js.map +0 -1
  46. package/dist/src/lib/ability-helpers/send-aerodrome-swap-tx.d.ts +0 -15
  47. package/dist/src/lib/ability-helpers/send-aerodrome-swap-tx.d.ts.map +0 -1
  48. package/dist/src/lib/ability-helpers/send-aerodrome-swap-tx.js +0 -75
  49. package/dist/src/lib/ability-helpers/send-aerodrome-swap-tx.js.map +0 -1
  50. package/dist/src/lib/ability-helpers/send-erc20-approval-tx.d.ts +0 -15
  51. package/dist/src/lib/ability-helpers/send-erc20-approval-tx.d.ts.map +0 -1
  52. package/dist/src/lib/ability-helpers/send-erc20-approval-tx.js +0 -82
  53. package/dist/src/lib/ability-helpers/send-erc20-approval-tx.js.map +0 -1
  54. package/dist/src/lib/ability-helpers/sign-tx.d.ts +0 -3
  55. package/dist/src/lib/ability-helpers/sign-tx.d.ts.map +0 -1
  56. package/dist/src/lib/ability-helpers/sign-tx.js +0 -24
  57. package/dist/src/lib/ability-helpers/sign-tx.js.map +0 -1
  58. package/dist/src/lib/lit-action.d.ts +0 -2
  59. package/dist/src/lib/lit-action.d.ts.map +0 -1
  60. package/dist/src/lib/lit-action.js +0 -14
  61. package/dist/src/lib/lit-action.js.map +0 -1
  62. package/dist/src/lib/schemas.d.ts +0 -139
  63. package/dist/src/lib/schemas.d.ts.map +0 -1
  64. package/dist/src/lib/schemas.js +0 -125
  65. package/dist/src/lib/schemas.js.map +0 -1
  66. package/dist/src/lib/types.d.ts +0 -43
  67. package/dist/src/lib/types.d.ts.map +0 -1
  68. package/dist/src/lib/types.js +0 -6
  69. package/dist/src/lib/types.js.map +0 -1
  70. package/dist/src/lib/vincent-ability.d.ts +0 -135
  71. package/dist/src/lib/vincent-ability.d.ts.map +0 -1
  72. package/dist/src/lib/vincent-ability.js +0 -355
  73. package/dist/src/lib/vincent-ability.js.map +0 -1
  74. package/vendor/sugar-sdk-0.3.0.tgz +0 -0
  75. /package/{dist/src → src}/generated/lit-action.js +0 -0
  76. /package/{dist/src → src}/generated/vincent-ability-metadata.json +0 -0
  77. /package/{dist/src → src}/generated/vincent-bundled-ability.ts +0 -0
@@ -1,135 +0,0 @@
1
- export declare const bigintReplacer: (key: any, value: any) => any;
2
- export declare const sugarSdkQuoteBigintReviver: (key: any, value: any) => any;
3
- export declare const vincentAbility: import("@lit-protocol/vincent-ability-sdk").VincentAbility<import("zod").ZodObject<{
4
- action: import("zod").ZodEnum<["approve", "swap"]>;
5
- rpcUrl: import("zod").ZodString;
6
- tokenInAddress: import("zod").ZodString;
7
- tokenOutAddress: import("zod").ZodString;
8
- amountIn: import("zod").ZodString;
9
- slippage: import("zod").ZodOptional<import("zod").ZodDefault<import("zod").ZodNumber>>;
10
- gasBufferPercentage: import("zod").ZodOptional<import("zod").ZodNumber>;
11
- baseFeePerGasBufferPercentage: import("zod").ZodOptional<import("zod").ZodNumber>;
12
- alchemyGasSponsor: import("zod").ZodDefault<import("zod").ZodOptional<import("zod").ZodBoolean>>;
13
- alchemyGasSponsorApiKey: import("zod").ZodOptional<import("zod").ZodString>;
14
- alchemyGasSponsorPolicyId: import("zod").ZodOptional<import("zod").ZodString>;
15
- }, "strip", import("zod").ZodTypeAny, {
16
- action: "approve" | "swap";
17
- rpcUrl: string;
18
- tokenInAddress: string;
19
- tokenOutAddress: string;
20
- amountIn: string;
21
- alchemyGasSponsor: boolean;
22
- slippage?: number | undefined;
23
- gasBufferPercentage?: number | undefined;
24
- baseFeePerGasBufferPercentage?: number | undefined;
25
- alchemyGasSponsorApiKey?: string | undefined;
26
- alchemyGasSponsorPolicyId?: string | undefined;
27
- }, {
28
- action: "approve" | "swap";
29
- rpcUrl: string;
30
- tokenInAddress: string;
31
- tokenOutAddress: string;
32
- amountIn: string;
33
- slippage?: number | undefined;
34
- gasBufferPercentage?: number | undefined;
35
- baseFeePerGasBufferPercentage?: number | undefined;
36
- alchemyGasSponsor?: boolean | undefined;
37
- alchemyGasSponsorApiKey?: string | undefined;
38
- alchemyGasSponsorPolicyId?: string | undefined;
39
- }>, string, import("node_modules/@lit-protocol/vincent-ability-sdk/dist/src/lib/abilityCore/helpers").AbilityPolicyMap<readonly [], never>, {}, import("zod").ZodObject<{
40
- swapTxHash: import("zod").ZodOptional<import("zod").ZodString>;
41
- swapTxUserOperationHash: import("zod").ZodOptional<import("zod").ZodString>;
42
- approvalTxHash: import("zod").ZodOptional<import("zod").ZodString>;
43
- approvalTxUserOperationHash: import("zod").ZodOptional<import("zod").ZodString>;
44
- currentAllowance: import("zod").ZodOptional<import("zod").ZodString>;
45
- requiredAllowance: import("zod").ZodOptional<import("zod").ZodString>;
46
- }, "strip", import("zod").ZodTypeAny, {
47
- currentAllowance?: string | undefined;
48
- requiredAllowance?: string | undefined;
49
- swapTxHash?: string | undefined;
50
- swapTxUserOperationHash?: string | undefined;
51
- approvalTxHash?: string | undefined;
52
- approvalTxUserOperationHash?: string | undefined;
53
- }, {
54
- currentAllowance?: string | undefined;
55
- requiredAllowance?: string | undefined;
56
- swapTxHash?: string | undefined;
57
- swapTxUserOperationHash?: string | undefined;
58
- approvalTxHash?: string | undefined;
59
- approvalTxUserOperationHash?: string | undefined;
60
- }>, import("zod").ZodObject<{
61
- reason: import("zod").ZodOptional<import("zod").ZodString>;
62
- }, "strip", import("zod").ZodTypeAny, {
63
- reason?: string | undefined;
64
- }, {
65
- reason?: string | undefined;
66
- }>, import("zod").ZodObject<{
67
- nativeTokenBalance: import("zod").ZodOptional<import("zod").ZodString>;
68
- tokenInAddress: import("zod").ZodOptional<import("zod").ZodString>;
69
- tokenInBalance: import("zod").ZodOptional<import("zod").ZodString>;
70
- currentTokenInAllowanceForSpender: import("zod").ZodString;
71
- spenderAddress: import("zod").ZodString;
72
- requiredTokenInAllowance: import("zod").ZodOptional<import("zod").ZodString>;
73
- quote: import("zod").ZodOptional<import("zod").ZodObject<{
74
- tokenInAmount: import("zod").ZodString;
75
- tokenOutAmount: import("zod").ZodString;
76
- priceImpact: import("zod").ZodString;
77
- }, "strip", import("zod").ZodTypeAny, {
78
- tokenInAmount: string;
79
- tokenOutAmount: string;
80
- priceImpact: string;
81
- }, {
82
- tokenInAmount: string;
83
- tokenOutAmount: string;
84
- priceImpact: string;
85
- }>>;
86
- }, "strip", import("zod").ZodTypeAny, {
87
- currentTokenInAllowanceForSpender: string;
88
- spenderAddress: string;
89
- tokenInAddress?: string | undefined;
90
- nativeTokenBalance?: string | undefined;
91
- tokenInBalance?: string | undefined;
92
- requiredTokenInAllowance?: string | undefined;
93
- quote?: {
94
- tokenInAmount: string;
95
- tokenOutAmount: string;
96
- priceImpact: string;
97
- } | undefined;
98
- }, {
99
- currentTokenInAllowanceForSpender: string;
100
- spenderAddress: string;
101
- tokenInAddress?: string | undefined;
102
- nativeTokenBalance?: string | undefined;
103
- tokenInBalance?: string | undefined;
104
- requiredTokenInAllowance?: string | undefined;
105
- quote?: {
106
- tokenInAmount: string;
107
- tokenOutAmount: string;
108
- priceImpact: string;
109
- } | undefined;
110
- }>, import("zod").ZodObject<{
111
- reason: import("zod").ZodString;
112
- spenderAddress: import("zod").ZodOptional<import("zod").ZodString>;
113
- tokenAddress: import("zod").ZodOptional<import("zod").ZodString>;
114
- requiredTokenAmount: import("zod").ZodOptional<import("zod").ZodString>;
115
- tokenBalance: import("zod").ZodOptional<import("zod").ZodString>;
116
- currentAllowance: import("zod").ZodOptional<import("zod").ZodString>;
117
- requiredAllowance: import("zod").ZodOptional<import("zod").ZodString>;
118
- }, "strip", import("zod").ZodTypeAny, {
119
- reason: string;
120
- spenderAddress?: string | undefined;
121
- tokenAddress?: string | undefined;
122
- requiredTokenAmount?: string | undefined;
123
- tokenBalance?: string | undefined;
124
- currentAllowance?: string | undefined;
125
- requiredAllowance?: string | undefined;
126
- }, {
127
- reason: string;
128
- spenderAddress?: string | undefined;
129
- tokenAddress?: string | undefined;
130
- requiredTokenAmount?: string | undefined;
131
- tokenBalance?: string | undefined;
132
- currentAllowance?: string | undefined;
133
- requiredAllowance?: string | undefined;
134
- }>>;
135
- //# sourceMappingURL=vincent-ability.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"vincent-ability.d.ts","sourceRoot":"","sources":["../../../src/lib/vincent-ability.ts"],"names":[],"mappings":"AAqBA,eAAO,MAAM,cAAc,GAAI,KAAK,GAAG,EAAE,OAAO,GAAG,QAElD,CAAC;AAEF,eAAO,MAAM,0BAA0B,GAAI,KAAK,GAAG,EAAE,OAAO,GAAG,QAiB9D,CAAC;AAEF,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyZzB,CAAC"}
@@ -1,355 +0,0 @@
1
- import { createVincentAbility, supportedPoliciesForAbility, } from '@lit-protocol/vincent-ability-sdk';
2
- import { base, getCallDataForSwap, getDefaultConfig, getQuoteForSwap } from 'sugar-sdk';
3
- import { ethers } from 'ethers';
4
- import { executeFailSchema, executeSuccessSchema, precheckFailSchema, precheckSuccessSchema, abilityParamsSchema, DEFAULT_AERODROME_SWAP_SLIPPAGE, } from './schemas';
5
- import { AbilityAction } from './types';
6
- import { checkErc20Allowance, checkErc20Balance, checkNativeTokenBalance } from './ability-checks';
7
- import { executeSwapParams, getChainConfig, getSwapVars } from 'sugar-sdk/primitives';
8
- import { findSupportedTokenOnBase } from './ability-helpers/find-supported-token-on-base';
9
- import { sendAerodromeSwapTx, sendErc20ApprovalTx } from './ability-helpers';
10
- export const bigintReplacer = (key, value) => {
11
- return typeof value === 'bigint' ? value.toString() : value;
12
- };
13
- export const sugarSdkQuoteBigintReviver = (key, value) => {
14
- // Convert string values that were BigInts back to BigInt for the
15
- // Sugar SDK Quote object:
16
- // sugar-sdk/dist/primitives/externals/app/src/hooks/types.d.ts
17
- if (typeof value === 'string' &&
18
- (key === 'amount' ||
19
- key === 'amountOut' ||
20
- key === 'priceImpact' ||
21
- key === 'balance' ||
22
- key === 'price' ||
23
- key === 'pool_fee' ||
24
- key === 'balanceValue')) {
25
- return BigInt(value);
26
- }
27
- return value;
28
- };
29
- export const vincentAbility = createVincentAbility({
30
- packageName: '@lit-protocol/vincent-ability-aerodrome-swap',
31
- abilityDescription: 'Ability to swap tokens on Aerodrome',
32
- abilityParamsSchema,
33
- supportedPolicies: supportedPoliciesForAbility([]),
34
- precheckSuccessSchema,
35
- precheckFailSchema,
36
- executeSuccessSchema,
37
- executeFailSchema,
38
- precheck: async ({ abilityParams }, { succeed, fail, delegation: { delegatorPkpInfo } }) => {
39
- console.log('[@lit-protocol/vincent-ability-aerodrome-swap precheck]', JSON.stringify(abilityParams, bigintReplacer, 2));
40
- const { action, alchemyGasSponsor, rpcUrl, tokenInAddress, tokenOutAddress, amountIn } = abilityParams;
41
- const provider = new ethers.providers.StaticJsonRpcProvider(rpcUrl);
42
- const sugarConfigBaseMainnet = getDefaultConfig({
43
- chains: [{ chain: base, rpcUrl }],
44
- });
45
- const sugarChainConfigBaseMainnet = getChainConfig(sugarConfigBaseMainnet.sugarConfig, base.id);
46
- // 1. If alchemyGasSponsor is not enabled, we need to check if the delegator has a non-zero amount of native token balance to pay for gas fees
47
- let checkNativeTokenBalanceResultSuccess;
48
- if (!alchemyGasSponsor) {
49
- const checkNativeTokenBalanceResult = await checkNativeTokenBalance({
50
- provider,
51
- pkpEthAddress: delegatorPkpInfo.ethAddress,
52
- });
53
- if (!checkNativeTokenBalanceResult.success) {
54
- return fail({
55
- reason: checkNativeTokenBalanceResult.reason,
56
- });
57
- }
58
- checkNativeTokenBalanceResultSuccess = checkNativeTokenBalanceResult;
59
- }
60
- // 2. Validate the input token is supported by Aerodrome on Base Mainnet
61
- const sugarTokenIn = await findSupportedTokenOnBase({
62
- config: sugarConfigBaseMainnet,
63
- chainId: base.id,
64
- tokenAddress: tokenInAddress,
65
- });
66
- if (!sugarTokenIn) {
67
- return fail({
68
- reason: `Token with address "${tokenInAddress}" not supported by Aerodrome on Base Mainnet`,
69
- });
70
- }
71
- const requiredTokenInAmount = ethers.BigNumber.from(amountIn);
72
- // 3. We retrieve the current allowance of the input token for the spender from the delegator
73
- const checkErc20AllowanceResult = await checkErc20Allowance({
74
- provider,
75
- tokenAddress: sugarTokenIn.address,
76
- owner: delegatorPkpInfo.ethAddress,
77
- spender: sugarChainConfigBaseMainnet.UNIVERSAL_ROUTER_ADDRESS,
78
- requiredAllowance: requiredTokenInAmount,
79
- });
80
- // 4. If the ability action is approve, we return the current allowance since all
81
- // precheck is concerned with is whether the delegatee can call execute with the approve ability action which just needs to know if
82
- // the gas for the approval transaction can be paid for (whether by gas sponsorship, or by the delegator).
83
- // We return the current allowance out of convenience, so the delegatee can know if
84
- // the current allowance is sufficient without having to call execute.
85
- if (action === AbilityAction.Approve) {
86
- return succeed({
87
- nativeTokenBalance: checkNativeTokenBalanceResultSuccess?.ethBalance.toString(),
88
- currentTokenInAllowanceForSpender: checkErc20AllowanceResult.currentAllowance.toString(),
89
- requiredTokenInAllowance: checkErc20AllowanceResult.requiredAllowance.toString(),
90
- spenderAddress: sugarChainConfigBaseMainnet.UNIVERSAL_ROUTER_ADDRESS,
91
- });
92
- }
93
- // 5. If the ability action is swap, and the current allowance is insufficient, we return a failure
94
- // because the swap cannot currently be performed.
95
- if (action === AbilityAction.Swap && !checkErc20AllowanceResult.success) {
96
- return fail({
97
- reason: checkErc20AllowanceResult.reason,
98
- spenderAddress: checkErc20AllowanceResult.spenderAddress,
99
- tokenAddress: checkErc20AllowanceResult.tokenAddress,
100
- requiredAllowance: checkErc20AllowanceResult.requiredAllowance.toString(),
101
- currentAllowance: checkErc20AllowanceResult.currentAllowance.toString(),
102
- });
103
- }
104
- // 6. At this point, the ability action is swap, and the current allowance is sufficient.
105
- // We now need to check if the current delegator balance of tokenIn is sufficient to perform the swap.
106
- const checkErc20BalanceResult = await checkErc20Balance({
107
- provider,
108
- pkpEthAddress: delegatorPkpInfo.ethAddress,
109
- tokenAddress: sugarTokenIn.address,
110
- requiredTokenAmount: requiredTokenInAmount,
111
- });
112
- if (!checkErc20BalanceResult.success) {
113
- return fail({
114
- reason: checkErc20BalanceResult.reason,
115
- tokenAddress: checkErc20BalanceResult.tokenAddress,
116
- requiredTokenAmount: checkErc20BalanceResult.requiredTokenAmount.toString(),
117
- tokenBalance: checkErc20BalanceResult.tokenBalance.toString(),
118
- });
119
- }
120
- // 7. Validate the tokenOut is supported by Aerodrome on Base Mainnet
121
- const sugarTokenOut = await findSupportedTokenOnBase({
122
- config: sugarConfigBaseMainnet,
123
- chainId: base.id,
124
- tokenAddress: tokenOutAddress,
125
- });
126
- if (!sugarTokenOut) {
127
- return fail({
128
- reason: `Token with address "${tokenOutAddress}" not supported by Aerodrome on Base Mainnet`,
129
- });
130
- }
131
- // 8. Validate a swap quote can be generated for the desired swap tokens and amounts
132
- const quote = await getQuoteForSwap({
133
- config: sugarConfigBaseMainnet,
134
- fromToken: sugarTokenIn,
135
- toToken: sugarTokenOut,
136
- amountIn: requiredTokenInAmount.toBigInt(),
137
- });
138
- if (quote === null) {
139
- return fail({
140
- reason: 'No Aerodrome swap quote available for the desired swap tokens and amounts',
141
- });
142
- }
143
- // 9. Return success, we've validated:
144
- // - Native token balance is non-zero or alchemyGasSponsor is enabled
145
- // - TokenIn is supported by Aerodrome on Base Mainnet
146
- // - Current allowance of tokenIn for the spender is sufficient
147
- // - Delegator's balance of tokenIn is sufficient
148
- // - TokenOut is supported by Aerodrome on Base Mainnet
149
- // - Swap quote is available for the desired swap tokens and amounts
150
- return succeed({
151
- nativeTokenBalance: checkNativeTokenBalanceResultSuccess?.ethBalance.toString(),
152
- tokenInAddress: sugarTokenIn.address,
153
- tokenInBalance: checkErc20BalanceResult.tokenBalance.toString(),
154
- currentTokenInAllowanceForSpender: checkErc20AllowanceResult.currentAllowance.toString(),
155
- requiredTokenInAllowance: checkErc20AllowanceResult.requiredAllowance.toString(),
156
- spenderAddress: sugarChainConfigBaseMainnet.UNIVERSAL_ROUTER_ADDRESS,
157
- quote: {
158
- tokenInAmount: ethers.utils.formatUnits(quote.amount, sugarTokenIn.decimals),
159
- tokenOutAmount: ethers.utils.formatUnits(quote.amountOut, sugarTokenOut.decimals),
160
- priceImpact: quote.priceImpact.toString(),
161
- },
162
- });
163
- },
164
- execute: async ({ abilityParams }, { succeed, fail, delegation: { delegatorPkpInfo } }) => {
165
- const { action, alchemyGasSponsor, alchemyGasSponsorApiKey, alchemyGasSponsorPolicyId, rpcUrl, tokenInAddress, tokenOutAddress, amountIn, slippage, gasBufferPercentage, baseFeePerGasBufferPercentage, } = abilityParams;
166
- const SLIPPAGE = slippage ?? DEFAULT_AERODROME_SWAP_SLIPPAGE;
167
- const provider = new ethers.providers.StaticJsonRpcProvider(rpcUrl);
168
- const sugarConfigBaseMainnet = getDefaultConfig({
169
- chains: [{ chain: base, rpcUrl }],
170
- });
171
- const sugarChainConfigBaseMainnet = getChainConfig(sugarConfigBaseMainnet.sugarConfig, base.id);
172
- // 1. Get the Sugar Token for tokenIn
173
- console.log('[@lit-protocol/vincent-ability-aerodrome-swap execute] Getting Sugar Token for tokenIn');
174
- const sugarTokenIn = await findSupportedTokenOnBase({
175
- config: sugarConfigBaseMainnet,
176
- chainId: base.id,
177
- tokenAddress: tokenInAddress,
178
- });
179
- if (!sugarTokenIn) {
180
- return fail({
181
- reason: `Token with address "${tokenInAddress}" not supported by Aerodrome on Base Mainnet`,
182
- });
183
- }
184
- const requiredTokenInAmount = ethers.BigNumber.from(amountIn);
185
- // 2. If the ability action is approve, we return success if allowance is sufficient, otherwise we send a new approval transaction
186
- let approvalTxHash;
187
- let approvalTxUserOperationHash;
188
- if (action === AbilityAction.Approve) {
189
- console.log('[@lit-protocol/vincent-ability-aerodrome-swap execute] Checking if allowance is sufficient');
190
- const checkErc20AllowanceResult = await checkErc20Allowance({
191
- provider,
192
- tokenAddress: sugarTokenIn.address,
193
- owner: delegatorPkpInfo.ethAddress,
194
- spender: sugarChainConfigBaseMainnet.UNIVERSAL_ROUTER_ADDRESS,
195
- requiredAllowance: requiredTokenInAmount,
196
- });
197
- if (checkErc20AllowanceResult.success) {
198
- console.log(`Sufficient allowance already exists for spender ${sugarChainConfigBaseMainnet.UNIVERSAL_ROUTER_ADDRESS}, skipping approval transaction. Current allowance: ${ethers.utils.formatUnits(checkErc20AllowanceResult.currentAllowance, sugarTokenIn.decimals)}`);
199
- // 2.1 Because the ability action is approve, we return success since the current allowance is sufficient,
200
- // and a new approval transaction is not needed.
201
- console.log('[@lit-protocol/vincent-ability-aerodrome-swap execute] Allowance is sufficient, returning success');
202
- return succeed({
203
- currentAllowance: checkErc20AllowanceResult.currentAllowance.toString(),
204
- requiredAllowance: checkErc20AllowanceResult.requiredAllowance.toString(),
205
- });
206
- }
207
- else {
208
- if (checkErc20AllowanceResult.reason.includes('insufficient ERC20 allowance for spender')) {
209
- // 2.2 The current allowance is insufficient, so we need to send a new approval transaction
210
- console.log('[@lit-protocol/vincent-ability-aerodrome-swap execute] Sending new approval transaction');
211
- const txHash = await sendErc20ApprovalTx({
212
- rpcUrl,
213
- chainId: base.id,
214
- pkpEthAddress: delegatorPkpInfo.ethAddress,
215
- pkpPublicKey: delegatorPkpInfo.publicKey,
216
- spenderAddress: sugarChainConfigBaseMainnet.UNIVERSAL_ROUTER_ADDRESS,
217
- allowanceAmount: requiredTokenInAmount.toString(),
218
- erc20TokenAddress: sugarTokenIn.address,
219
- alchemyGasSponsor,
220
- alchemyGasSponsorApiKey,
221
- alchemyGasSponsorPolicyId,
222
- });
223
- if (alchemyGasSponsor) {
224
- approvalTxUserOperationHash = txHash;
225
- }
226
- else {
227
- approvalTxHash = txHash;
228
- }
229
- }
230
- else {
231
- // 2.3 Some error other than insufficient allowance occurred, bail out
232
- console.log('[@lit-protocol/vincent-ability-aerodrome-swap execute] Some error other than insufficient allowance occurred, returning failure');
233
- return fail({
234
- reason: checkErc20AllowanceResult.reason,
235
- });
236
- }
237
- }
238
- }
239
- // 3. If the ability action is swap, perform the swap
240
- let swapTxHash;
241
- let swapTxUserOperationHash;
242
- if (action === AbilityAction.Swap) {
243
- // 3.1 Get the Sugar Token for tokenOut
244
- console.log('[@lit-protocol/vincent-ability-aerodrome-swap execute] Getting Sugar Token for tokenOut');
245
- const sugarTokenOut = await findSupportedTokenOnBase({
246
- config: sugarConfigBaseMainnet,
247
- chainId: base.id,
248
- tokenAddress: tokenOutAddress,
249
- });
250
- if (!sugarTokenOut) {
251
- return fail({
252
- reason: `Token with address "${tokenOutAddress}" not supported by Aerodrome on Base Mainnet`,
253
- });
254
- }
255
- // 3.2 Get the swap quote
256
- console.log('[@lit-protocol/vincent-ability-aerodrome-swap execute] Getting swap quote');
257
- const quoteResponse = await Lit.Actions.runOnce({ waitForResponse: true, name: 'Aerodrome swap quote' }, async () => {
258
- try {
259
- const quote = await getQuoteForSwap({
260
- config: sugarConfigBaseMainnet,
261
- fromToken: sugarTokenIn,
262
- toToken: sugarTokenOut,
263
- amountIn: requiredTokenInAmount.toBigInt(),
264
- });
265
- if (quote === null) {
266
- return JSON.stringify({
267
- status: 'error',
268
- error: 'No Aerodrome swap quote available for the desired swap tokens and amounts',
269
- });
270
- }
271
- return JSON.stringify({
272
- status: 'success',
273
- quote,
274
- }, bigintReplacer);
275
- }
276
- catch (error) {
277
- return JSON.stringify({
278
- status: 'error',
279
- error: error instanceof Error ? error.message : String(error),
280
- });
281
- }
282
- });
283
- const parsedQuoteResponse = JSON.parse(quoteResponse, sugarSdkQuoteBigintReviver);
284
- if (parsedQuoteResponse.status === 'error') {
285
- return fail({
286
- reason: parsedQuoteResponse.error,
287
- });
288
- }
289
- const { quote } = parsedQuoteResponse;
290
- // 3.3 Get the Sugar calldata for the swap quote
291
- console.log('[@lit-protocol/vincent-ability-aerodrome-swap execute] Getting Sugar calldata for swap quote');
292
- const sugarCallDataForSwap = await getCallDataForSwap({
293
- config: sugarConfigBaseMainnet,
294
- fromToken: quote.fromToken,
295
- toToken: quote.toToken,
296
- amountIn: requiredTokenInAmount.toBigInt(),
297
- account: delegatorPkpInfo.ethAddress,
298
- slippage: SLIPPAGE,
299
- });
300
- if (sugarCallDataForSwap === null) {
301
- return fail({
302
- reason: 'Unable to generate call data for the Aerodrome swap quote',
303
- });
304
- }
305
- // 3.4 Get the Sugar swap vars for the swap quote
306
- console.log('[@lit-protocol/vincent-ability-aerodrome-swap execute] Getting Sugar swap vars for swap quote');
307
- const { chainId, planner, amount } = getSwapVars(sugarConfigBaseMainnet.sugarConfig, quote, `${Math.ceil(SLIPPAGE * 100)}`, delegatorPkpInfo.ethAddress);
308
- // 3.5 Get the Sugar execute swap params for the swap quote
309
- console.log('[@lit-protocol/vincent-ability-aerodrome-swap execute] Getting Sugar execute swap params for swap quote');
310
- const sugarExecuteSwapParams = executeSwapParams({
311
- config: sugarConfigBaseMainnet.sugarConfig,
312
- chainId,
313
- commands: planner.commands,
314
- inputs: planner.inputs,
315
- value: amount,
316
- });
317
- // 3.6 ABI encode the swap params for ethers calldata
318
- console.log('[@lit-protocol/vincent-ability-aerodrome-swap execute] ABI encoding swap params for ethers calldata');
319
- const executeInterface = new ethers.utils.Interface(sugarExecuteSwapParams.abi);
320
- const encodedCalldataForEthers = executeInterface.encodeFunctionData('execute(bytes,bytes[])', [planner.commands, planner.inputs]);
321
- // 3.7 Send the swap transaction
322
- console.log('[@lit-protocol/vincent-ability-aerodrome-swap execute] Sending swap transaction');
323
- const txHash = await sendAerodromeSwapTx({
324
- rpcUrl,
325
- chainId: base.id,
326
- pkpEthAddress: delegatorPkpInfo.ethAddress,
327
- pkpPublicKey: delegatorPkpInfo.publicKey,
328
- to: sugarChainConfigBaseMainnet.UNIVERSAL_ROUTER_ADDRESS,
329
- value: amount.toString(),
330
- calldata: encodedCalldataForEthers,
331
- gasBufferPercentage,
332
- baseFeePerGasBufferPercentage,
333
- alchemyGasSponsor,
334
- alchemyGasSponsorApiKey,
335
- alchemyGasSponsorPolicyId,
336
- });
337
- if (alchemyGasSponsor) {
338
- swapTxUserOperationHash = txHash;
339
- }
340
- else {
341
- swapTxHash = txHash;
342
- }
343
- }
344
- // 4. If the ability action is:
345
- // - Approve, we return the approval transaction hash.
346
- // - Swap, we return the swap transaction hash.
347
- return succeed({
348
- approvalTxHash,
349
- approvalTxUserOperationHash,
350
- swapTxHash,
351
- swapTxUserOperationHash,
352
- });
353
- },
354
- });
355
- //# sourceMappingURL=vincent-ability.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"vincent-ability.js","sourceRoot":"","sources":["../../../src/lib/vincent-ability.ts"],"names":[],"mappings":"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"}
Binary file
File without changes