@merkl/api 0.10.347 → 0.10.349

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.
@@ -1025,6 +1025,31 @@ declare const eden: {
1025
1025
  price?: number | null | undefined;
1026
1026
  } | undefined;
1027
1027
  }>>;
1028
+ allowance: ((params: {
1029
+ owner: string | number;
1030
+ }) => {} & ((params: {
1031
+ spender: string | number;
1032
+ }) => {
1033
+ get: (options?: {
1034
+ headers?: Record<string, unknown> | undefined;
1035
+ query?: Record<string, unknown> | undefined;
1036
+ fetch?: RequestInit | undefined;
1037
+ } | undefined) => Promise<import("@elysiajs/eden").Treaty.TreatyResponse<{
1038
+ 200: {
1039
+ allowance: bigint;
1040
+ symbol: string;
1041
+ name: string | null;
1042
+ id: string;
1043
+ icon: string;
1044
+ chainId: number;
1045
+ address: string;
1046
+ decimals: number;
1047
+ verified: boolean;
1048
+ isTest: boolean;
1049
+ price?: number | null | undefined;
1050
+ } | undefined;
1051
+ }>>;
1052
+ })) & {};
1028
1053
  patch: (body: {
1029
1054
  icon?: string | undefined;
1030
1055
  displaySymbol?: string | undefined;
@@ -4403,6 +4428,42 @@ export declare const MerklApi: (domain: string | import("elysia").default<"", fa
4403
4428
  };
4404
4429
  };
4405
4430
  };
4431
+ } & {
4432
+ tokens: {
4433
+ ":id": {
4434
+ allowance: {
4435
+ ":owner": {
4436
+ ":spender": {
4437
+ get: {
4438
+ body: unknown;
4439
+ params: {
4440
+ id: string;
4441
+ owner: string;
4442
+ spender: string;
4443
+ };
4444
+ query: unknown;
4445
+ headers: unknown;
4446
+ response: {
4447
+ 200: {
4448
+ allowance: bigint;
4449
+ symbol: string;
4450
+ name: string | null;
4451
+ id: string;
4452
+ icon: string;
4453
+ chainId: number;
4454
+ address: string;
4455
+ decimals: number;
4456
+ verified: boolean;
4457
+ isTest: boolean;
4458
+ price?: number | null | undefined;
4459
+ } | undefined;
4460
+ };
4461
+ };
4462
+ };
4463
+ };
4464
+ };
4465
+ };
4466
+ };
4406
4467
  } & {
4407
4468
  tokens: {
4408
4469
  reward: {
@@ -8193,6 +8254,31 @@ export declare const MerklApi: (domain: string | import("elysia").default<"", fa
8193
8254
  price?: number | null | undefined;
8194
8255
  } | undefined;
8195
8256
  }>>;
8257
+ allowance: ((params: {
8258
+ owner: string | number;
8259
+ }) => {} & ((params: {
8260
+ spender: string | number;
8261
+ }) => {
8262
+ get: (options?: {
8263
+ headers?: Record<string, unknown> | undefined;
8264
+ query?: Record<string, unknown> | undefined;
8265
+ fetch?: RequestInit | undefined;
8266
+ } | undefined) => Promise<import("@elysiajs/eden").Treaty.TreatyResponse<{
8267
+ 200: {
8268
+ allowance: bigint;
8269
+ symbol: string;
8270
+ name: string | null;
8271
+ id: string;
8272
+ icon: string;
8273
+ chainId: number;
8274
+ address: string;
8275
+ decimals: number;
8276
+ verified: boolean;
8277
+ isTest: boolean;
8278
+ price?: number | null | undefined;
8279
+ } | undefined;
8280
+ }>>;
8281
+ })) & {};
8196
8282
  patch: (body: {
8197
8283
  icon?: string | undefined;
8198
8284
  displaySymbol?: string | undefined;
@@ -1220,6 +1220,42 @@ declare const app: Elysia<"", false, {
1220
1220
  };
1221
1221
  };
1222
1222
  };
1223
+ } & {
1224
+ tokens: {
1225
+ ":id": {
1226
+ allowance: {
1227
+ ":owner": {
1228
+ ":spender": {
1229
+ get: {
1230
+ body: unknown;
1231
+ params: {
1232
+ id: string;
1233
+ owner: string;
1234
+ spender: string;
1235
+ };
1236
+ query: unknown;
1237
+ headers: unknown;
1238
+ response: {
1239
+ 200: {
1240
+ allowance: bigint;
1241
+ symbol: string;
1242
+ name: string | null;
1243
+ id: string;
1244
+ icon: string;
1245
+ chainId: number;
1246
+ address: string;
1247
+ decimals: number;
1248
+ verified: boolean;
1249
+ isTest: boolean;
1250
+ price?: number | null | undefined;
1251
+ } | undefined;
1252
+ };
1253
+ };
1254
+ };
1255
+ };
1256
+ };
1257
+ };
1258
+ };
1223
1259
  } & {
1224
1260
  tokens: {
1225
1261
  reward: {
@@ -0,0 +1 @@
1
+ export declare function getUserAllowance(chainId: number, tokenAddress: string, userAddress: string, spenderAddresses: string): Promise<bigint>;
@@ -0,0 +1,18 @@
1
+ import { ChainId, ChainInteractionService, ETH_ZKSYNC_ADDRESS, Erc20__factory, EthOnZKSync_INTERFACE } from "@sdk";
2
+ export async function getUserAllowance(chainId, tokenAddress, userAddress, spenderAddresses) {
3
+ const ERC20_Interface = Erc20__factory.createInterface();
4
+ const allowanceCall = chainId === ChainId.ZKSYNC && tokenAddress === ETH_ZKSYNC_ADDRESS
5
+ ? {
6
+ allowFailure: true,
7
+ callData: EthOnZKSync_INTERFACE.encodeFunctionData("allowance", [userAddress, spenderAddresses]),
8
+ target: tokenAddress,
9
+ }
10
+ : {
11
+ allowFailure: true,
12
+ callData: ERC20_Interface.encodeFunctionData("allowance", [userAddress, spenderAddresses]),
13
+ target: tokenAddress,
14
+ };
15
+ const [result] = await ChainInteractionService(chainId).fetchState([allowanceCall]);
16
+ const allowance = ERC20_Interface.decodeFunctionResult("allowance", result.returnData)[0].toString();
17
+ return BigInt(allowance);
18
+ }
@@ -43,8 +43,7 @@ export class CampaignService {
43
43
  if (existingCampaign.type === "ERC20" && campaign.opportunityIdentifier === undefined) {
44
44
  const campaignParams = existingCampaign.params;
45
45
  campaign.opportunityIdentifier = utils
46
- .keccak256(campaignParams.targetToken &&
47
- utils.keccak256(utils.defaultAbiCoder.encode(["address[]"], [campaignParams.whitelist.sort()])))
46
+ .keccak256(utils.defaultAbiCoder.encode(["string", "address[]"], [campaignParams.targetToken, campaignParams.whitelist.sort()]))
48
47
  .slice(0, 42);
49
48
  }
50
49
  if (campaign.opportunityIdentifier === undefined) {
@@ -166,7 +166,23 @@ export declare enum modeCampaigns {
166
166
  Meson_Izumi_WETH_mBTC_Mode = "Meson Izumi WETH/m-BTC 0xD40B3D30aEe24e7B8d3aE6501024203e6c4e9EB6",
167
167
  Ionic_Supply_ionoBTC_Mode = "Ionic supply oBTC 0x48c234ab217f077df3c7f541b67d90436cf59b27",
168
168
  Ionic_Supply_ionuniBTC_Mode = "Ionic supply uniBTC 0xa48750877a83f7dec11f722178c317b54a44d142",
169
- Lisa_Labs_Kim_vLISTX_USDC_Mode = "Lisa Labs Kim vLISTX/USDC 0xd54aba804a676c8f265e2e6742d7b86d383d093b"
169
+ Lisa_Labs_Kim_vLISTX_USDC_Mode = "Lisa Labs Kim vLISTX/USDC 0xd54aba804a676c8f265e2e6742d7b86d383d093b",
170
+ BMX_Hold_sbfBMX_Mode = "BMX Hold sbfBMX 0x548f93779fBC992010C07467cBaf329DD5F059B7",
171
+ Etherfi_Add_liquidity_wMLT_vault_Mode = "Add Liquidity to wMLT vault 0x8b2EeA0999876AAB1E7955fe01A5D261b570452C",
172
+ Etherfi_Kim_weETH_WETH_Mode = "Ether.fi Kim weETH/WETH 0xE24C8feB38ca2B18b542994BFBA7E70880171035",
173
+ Kim_Steer_FLS_WETH_USDC_Mode = "Kim Steer FLS WETH/USDC 0x468cc91df6f669cae6cdce766995bd7874052fbc",
174
+ Kim_Steer_EES_v2_WETH_USDC_Mode = "Kim Steer EES V2 WETH/USDC 0x468cc91df6f669cae6cdce766995bd7874052fbc",
175
+ Kim_Steer_CRS_v2_WETH_USDC_Mode = "Kim Steer CRS V2 WETH/USDC 0x468cc91df6f669cae6cdce766995bd7874052fbc",
176
+ Kim_Gamma_WETH_USDC_Mode = "Kim Gamma Long-Short WETH/USDC 0x468cc91df6f669cae6cdce766995bd7874052fbc",
177
+ Kim_v4_WETH_USDC_Mode = "Kim v4 WETH/USDC 0x468cc91df6f669cae6cdce766995bd7874052fbc",
178
+ Kim_Ichi_SSD_WETH_KIM_Mode = "Kim Ichi SSD WETH/KIM 0x3C3a173984e3152FEd868345904eC0C9325FA516",
179
+ Kim_Steer_CRS_V2_WETH_KIM_Mode = "Kim Steer CRS V2 WETH/KIM 0x3C3a173984e3152FEd868345904eC0C9325FA516",
180
+ Kim_Gamma_WETH_KIM_Mode = "Kim Gamma Long-Short WETH/KIM 0x3C3a173984e3152FEd868345904eC0C9325FA516",
181
+ Kim_v4_WETH_KIM_Mode = "Kim v4 WETH/Kim 0x3C3a173984e3152FEd868345904eC0C9325FA516",
182
+ Kim_Ichi_SSD_WETH_MODE_Mode = "Kim Ichi SSD WETH/Mode 0x8cfE2A02dfBAbC56aE7e573170E35f88A38BeA55",
183
+ Kim_Steer_CRS_V2_WETH_MODE_Mode = "Kim Steer CRS V2 WETH/Mode 0x8cfE2A02dfBAbC56aE7e573170E35f88A38BeA55",
184
+ Kim_Gamma_WETH_MODE_Mode = "Kim Gamma Narrow WETH/Mode 0x8cfE2A02dfBAbC56aE7e573170E35f88A38BeA55",
185
+ Kim_V4_WETH_MODE_Mode = "Kim V4 WETH/Mode 0x8cfE2A02dfBAbC56aE7e573170E35f88A38BeA55"
170
186
  }
171
187
  declare const ModeInterfaceCampaigns: {
172
188
  [key in modeCampaigns]: partialConfig;
@@ -171,6 +171,22 @@ export var modeCampaigns;
171
171
  modeCampaigns["Ionic_Supply_ionoBTC_Mode"] = "Ionic supply oBTC 0x48c234ab217f077df3c7f541b67d90436cf59b27";
172
172
  modeCampaigns["Ionic_Supply_ionuniBTC_Mode"] = "Ionic supply uniBTC 0xa48750877a83f7dec11f722178c317b54a44d142";
173
173
  modeCampaigns["Lisa_Labs_Kim_vLISTX_USDC_Mode"] = "Lisa Labs Kim vLISTX/USDC 0xd54aba804a676c8f265e2e6742d7b86d383d093b";
174
+ modeCampaigns["BMX_Hold_sbfBMX_Mode"] = "BMX Hold sbfBMX 0x548f93779fBC992010C07467cBaf329DD5F059B7";
175
+ modeCampaigns["Etherfi_Add_liquidity_wMLT_vault_Mode"] = "Add Liquidity to wMLT vault 0x8b2EeA0999876AAB1E7955fe01A5D261b570452C";
176
+ modeCampaigns["Etherfi_Kim_weETH_WETH_Mode"] = "Ether.fi Kim weETH/WETH 0xE24C8feB38ca2B18b542994BFBA7E70880171035";
177
+ modeCampaigns["Kim_Steer_FLS_WETH_USDC_Mode"] = "Kim Steer FLS WETH/USDC 0x468cc91df6f669cae6cdce766995bd7874052fbc";
178
+ modeCampaigns["Kim_Steer_EES_v2_WETH_USDC_Mode"] = "Kim Steer EES V2 WETH/USDC 0x468cc91df6f669cae6cdce766995bd7874052fbc";
179
+ modeCampaigns["Kim_Steer_CRS_v2_WETH_USDC_Mode"] = "Kim Steer CRS V2 WETH/USDC 0x468cc91df6f669cae6cdce766995bd7874052fbc";
180
+ modeCampaigns["Kim_Gamma_WETH_USDC_Mode"] = "Kim Gamma Long-Short WETH/USDC 0x468cc91df6f669cae6cdce766995bd7874052fbc";
181
+ modeCampaigns["Kim_v4_WETH_USDC_Mode"] = "Kim v4 WETH/USDC 0x468cc91df6f669cae6cdce766995bd7874052fbc";
182
+ modeCampaigns["Kim_Ichi_SSD_WETH_KIM_Mode"] = "Kim Ichi SSD WETH/KIM 0x3C3a173984e3152FEd868345904eC0C9325FA516";
183
+ modeCampaigns["Kim_Steer_CRS_V2_WETH_KIM_Mode"] = "Kim Steer CRS V2 WETH/KIM 0x3C3a173984e3152FEd868345904eC0C9325FA516";
184
+ modeCampaigns["Kim_Gamma_WETH_KIM_Mode"] = "Kim Gamma Long-Short WETH/KIM 0x3C3a173984e3152FEd868345904eC0C9325FA516";
185
+ modeCampaigns["Kim_v4_WETH_KIM_Mode"] = "Kim v4 WETH/Kim 0x3C3a173984e3152FEd868345904eC0C9325FA516";
186
+ modeCampaigns["Kim_Ichi_SSD_WETH_MODE_Mode"] = "Kim Ichi SSD WETH/Mode 0x8cfE2A02dfBAbC56aE7e573170E35f88A38BeA55";
187
+ modeCampaigns["Kim_Steer_CRS_V2_WETH_MODE_Mode"] = "Kim Steer CRS V2 WETH/Mode 0x8cfE2A02dfBAbC56aE7e573170E35f88A38BeA55";
188
+ modeCampaigns["Kim_Gamma_WETH_MODE_Mode"] = "Kim Gamma Narrow WETH/Mode 0x8cfE2A02dfBAbC56aE7e573170E35f88A38BeA55";
189
+ modeCampaigns["Kim_V4_WETH_MODE_Mode"] = "Kim V4 WETH/Mode 0x8cfE2A02dfBAbC56aE7e573170E35f88A38BeA55";
174
190
  })(modeCampaigns || (modeCampaigns = {}));
175
191
  const ModeInterfaceCampaigns = {
176
192
  [modeCampaigns.Steer_EES_V2_Weth_USDC_Kim_Mode]: {
@@ -276,7 +292,7 @@ const ModeInterfaceCampaigns = {
276
292
  computeChainId: ChainId.MODE,
277
293
  hooks: [],
278
294
  poolAddress: "0x468cc91df6f669cae6cdce766995bd7874052fbc",
279
- whitelist: ["0x7eccd6d077e4ad7120150578e936a22f058fbcce"],
295
+ whitelist: ["0x7eCCD6D077e4ad7120150578E936A22f058fBCCe"],
280
296
  blacklist: ["0x67135675e22F7ff34eBA30f15f39F9cd30d29079"],
281
297
  url: "https://app.kim.exchange/pools/vaults/gamma/0x7eccd6d077e4ad7120150578e936a22f058fbcce",
282
298
  forwarders: [],
@@ -775,6 +791,249 @@ const ModeInterfaceCampaigns = {
775
791
  weightToken0: 4000,
776
792
  weightToken1: 4000,
777
793
  },
794
+ [modeCampaigns.BMX_Hold_sbfBMX_Mode]: {
795
+ campaignType: Campaign.ERC20,
796
+ computeChainId: ChainId.MODE,
797
+ hooks: [],
798
+ targetToken: "0x548f93779fBC992010C07467cBaf329DD5F059B7",
799
+ whitelist: [],
800
+ blacklist: [],
801
+ url: "https://www.bmx.trade/deli-shop/single-staking",
802
+ forwarders: [],
803
+ },
804
+ [modeCampaigns.Etherfi_Add_liquidity_wMLT_vault_Mode]: {
805
+ campaignType: Campaign.ERC20,
806
+ computeChainId: ChainId.MODE,
807
+ hooks: [],
808
+ targetToken: "0x8b2EeA0999876AAB1E7955fe01A5D261b570452C",
809
+ whitelist: [],
810
+ blacklist: [
811
+ "0x70f531F133C7De52F0b06F193D862f5a8f17A0cF",
812
+ "0x060fC017B55676fF0A4F84780FAe8E80C0F96Ff1",
813
+ "0x8874846147AfF9a207d8f925a9Bc229e0eB0A4A6",
814
+ "0xe3C3A08AE41c36b204eF9a980f9eF5C579CC3f0f",
815
+ "0xd65EaCAed50706254b5001f22963C8615968AF7d",
816
+ "0xFdC4ba603B25Fbf2659a45cED114a205a4867457",
817
+ ],
818
+ url: "https://www.bmx.trade/deli-shop/wrapper",
819
+ forwarders: [],
820
+ },
821
+ [modeCampaigns.Etherfi_Kim_weETH_WETH_Mode]: {
822
+ campaignType: Campaign.CLAMM,
823
+ computeChainId: ChainId.MODE,
824
+ hooks: [],
825
+ poolAddress: "0xE24C8feB38ca2B18b542994BFBA7E70880171035",
826
+ whitelist: [],
827
+ blacklist: [],
828
+ url: "https://app.kim.exchange/pools/v4/0xe24c8feb38ca2b18b542994bfba7e70880171035",
829
+ forwarders: [],
830
+ isOutOfRangeIncentivized: false,
831
+ weightFees: 2000,
832
+ weightToken0: 4000,
833
+ weightToken1: 4000,
834
+ },
835
+ [modeCampaigns.Kim_Steer_FLS_WETH_USDC_Mode]: {
836
+ campaignType: Campaign.CLAMM,
837
+ computeChainId: ChainId.MODE,
838
+ hooks: [],
839
+ poolAddress: "0x468cC91dF6F669CaE6cdCE766995Bd7874052FBc",
840
+ whitelist: ["0xACb9a8676FC6ADa472611A62354BF47502969287"],
841
+ blacklist: ["0x67135675e22F7ff34eBA30f15f39F9cd30d29079"],
842
+ url: "https://app.kim.exchange/pools/vaults/0xacb9a8676fc6ada472611a62354bf47502969287",
843
+ forwarders: [],
844
+ isOutOfRangeIncentivized: false,
845
+ weightFees: 2000,
846
+ weightToken0: 4000,
847
+ weightToken1: 4000,
848
+ },
849
+ [modeCampaigns.Kim_Steer_EES_v2_WETH_USDC_Mode]: {
850
+ campaignType: Campaign.CLAMM,
851
+ computeChainId: ChainId.MODE,
852
+ hooks: [],
853
+ poolAddress: "0x468cC91dF6F669CaE6cdCE766995Bd7874052FBc",
854
+ whitelist: ["0xc07df1D13188c081f770944ece48e469B326B2A5"],
855
+ blacklist: ["0x67135675e22F7ff34eBA30f15f39F9cd30d29079"],
856
+ url: "https://app.kim.exchange/pools/vaults/0xc07df1d13188c081f770944ece48e469b326b2a5",
857
+ forwarders: [],
858
+ isOutOfRangeIncentivized: false,
859
+ weightFees: 2000,
860
+ weightToken0: 4000,
861
+ weightToken1: 4000,
862
+ },
863
+ [modeCampaigns.Kim_Steer_CRS_v2_WETH_USDC_Mode]: {
864
+ campaignType: Campaign.CLAMM,
865
+ computeChainId: ChainId.MODE,
866
+ hooks: [],
867
+ poolAddress: "0x468cC91dF6F669CaE6cdCE766995Bd7874052FBc",
868
+ whitelist: ["0xC40D4D88aFC7B03C65391cBfB6F399f464F6aB03"],
869
+ blacklist: ["0x67135675e22F7ff34eBA30f15f39F9cd30d29079"],
870
+ url: "https://app.kim.exchange/pools/vaults/0xc40d4d88afc7b03c65391cbfb6f399f464f6ab03",
871
+ forwarders: [],
872
+ isOutOfRangeIncentivized: false,
873
+ weightFees: 2000,
874
+ weightToken0: 4000,
875
+ weightToken1: 4000,
876
+ },
877
+ [modeCampaigns.Kim_Gamma_WETH_USDC_Mode]: {
878
+ campaignType: Campaign.CLAMM,
879
+ computeChainId: ChainId.MODE,
880
+ hooks: [],
881
+ poolAddress: "0x468cC91dF6F669CaE6cdCE766995Bd7874052FBc",
882
+ whitelist: ["0x7eCCD6D077e4ad7120150578E936A22f058fBCCe"],
883
+ blacklist: ["0x67135675e22F7ff34eBA30f15f39F9cd30d29079"],
884
+ url: "https://app.kim.exchange/pools/vaults/gamma/0x7eccd6d077e4ad7120150578e936a22f058fbcce",
885
+ forwarders: [],
886
+ isOutOfRangeIncentivized: false,
887
+ weightFees: 2000,
888
+ weightToken0: 4000,
889
+ weightToken1: 4000,
890
+ },
891
+ [modeCampaigns.Kim_v4_WETH_USDC_Mode]: {
892
+ campaignType: Campaign.CLAMM,
893
+ computeChainId: ChainId.MODE,
894
+ hooks: [],
895
+ poolAddress: "0x468cC91dF6F669CaE6cdCE766995Bd7874052FBc",
896
+ whitelist: [],
897
+ blacklist: [
898
+ "0x67135675e22F7ff34eBA30f15f39F9cd30d29079",
899
+ "0xACb9a8676FC6ADa472611A62354BF47502969287",
900
+ "0xc07df1D13188c081f770944ece48e469B326B2A5",
901
+ "0xC40D4D88aFC7B03C65391cBfB6F399f464F6aB03",
902
+ "0x7eCCD6D077e4ad7120150578E936A22f058fBCCe",
903
+ ],
904
+ url: "https://app.kim.exchange/positions",
905
+ forwarders: [],
906
+ isOutOfRangeIncentivized: false,
907
+ weightFees: 2000,
908
+ weightToken0: 4000,
909
+ weightToken1: 4000,
910
+ },
911
+ [modeCampaigns.Kim_Ichi_SSD_WETH_KIM_Mode]: {
912
+ campaignType: Campaign.CLAMM,
913
+ computeChainId: ChainId.MODE,
914
+ hooks: [],
915
+ poolAddress: "0x3C3a173984e3152FEd868345904eC0C9325FA516",
916
+ whitelist: ["0xF5DDF269948C53D86B87Fa3393a5B2579348C07f"],
917
+ blacklist: ["0x67135675e22F7ff34eBA30f15f39F9cd30d29079"],
918
+ url: "https://app.kim.exchange/pools/vaults/ichi/0xf5ddf269948c53d86b87fa3393a5b2579348c07f",
919
+ forwarders: [],
920
+ isOutOfRangeIncentivized: false,
921
+ weightFees: 2000,
922
+ weightToken0: 4000,
923
+ weightToken1: 4000,
924
+ },
925
+ [modeCampaigns.Kim_Steer_CRS_V2_WETH_KIM_Mode]: {
926
+ campaignType: Campaign.CLAMM,
927
+ computeChainId: ChainId.MODE,
928
+ hooks: [],
929
+ poolAddress: "0x3C3a173984e3152FEd868345904eC0C9325FA516",
930
+ whitelist: ["0xAC8C89516bC4b60621c5326446e33680357bB3D2"],
931
+ blacklist: ["0x67135675e22F7ff34eBA30f15f39F9cd30d29079"],
932
+ url: "https://app.kim.exchange/pools/vaults/0xac8c89516bc4b60621c5326446e33680357bb3d2",
933
+ forwarders: [],
934
+ isOutOfRangeIncentivized: false,
935
+ weightFees: 2000,
936
+ weightToken0: 4000,
937
+ weightToken1: 4000,
938
+ },
939
+ [modeCampaigns.Kim_Gamma_WETH_KIM_Mode]: {
940
+ campaignType: Campaign.CLAMM,
941
+ computeChainId: ChainId.MODE,
942
+ hooks: [],
943
+ poolAddress: "0x3C3a173984e3152FEd868345904eC0C9325FA516",
944
+ whitelist: ["0x1392698B2F2cA87E6329c1ca502C5d4BA938d1b8"],
945
+ blacklist: ["0x67135675e22F7ff34eBA30f15f39F9cd30d29079"],
946
+ url: "https://app.kim.exchange/pools/vaults/gamma/0x1392698b2f2ca87e6329c1ca502c5d4ba938d1b8",
947
+ forwarders: [],
948
+ isOutOfRangeIncentivized: false,
949
+ weightFees: 2000,
950
+ weightToken0: 4000,
951
+ weightToken1: 4000,
952
+ },
953
+ [modeCampaigns.Kim_v4_WETH_KIM_Mode]: {
954
+ campaignType: Campaign.CLAMM,
955
+ computeChainId: ChainId.MODE,
956
+ hooks: [],
957
+ poolAddress: "0x3C3a173984e3152FEd868345904eC0C9325FA516",
958
+ whitelist: [],
959
+ blacklist: [
960
+ "0x67135675e22F7ff34eBA30f15f39F9cd30d29079",
961
+ "0xF5DDF269948C53D86B87Fa3393a5B2579348C07f",
962
+ "0xAC8C89516bC4b60621c5326446e33680357bB3D2",
963
+ "0x1392698B2F2cA87E6329c1ca502C5d4BA938d1b8",
964
+ "0x7c207cb731ebc0BA5dF699d7B36348302FD8480c",
965
+ "0x3da7476152f7EFF205cBf56f67aBaB17CF9d37eE",
966
+ ],
967
+ url: "https://app.kim.exchange/positions",
968
+ forwarders: [],
969
+ isOutOfRangeIncentivized: false,
970
+ weightFees: 2000,
971
+ weightToken0: 4000,
972
+ weightToken1: 4000,
973
+ },
974
+ [modeCampaigns.Kim_Ichi_SSD_WETH_MODE_Mode]: {
975
+ campaignType: Campaign.CLAMM,
976
+ computeChainId: ChainId.MODE,
977
+ hooks: [],
978
+ poolAddress: "0x8cfE2A02dfBAbC56aE7e573170E35f88A38BeA55",
979
+ whitelist: ["0x91f6fF8cDBD9B516c0DfB901063B3b00612962EB"],
980
+ blacklist: ["0x67135675e22F7ff34eBA30f15f39F9cd30d29079"],
981
+ url: "https://app.kim.exchange/pools/vaults/ichi/0x91f6ff8cdbd9b516c0dfb901063b3b00612962eb",
982
+ forwarders: [],
983
+ isOutOfRangeIncentivized: false,
984
+ weightFees: 2000,
985
+ weightToken0: 4000,
986
+ weightToken1: 4000,
987
+ },
988
+ [modeCampaigns.Kim_Steer_CRS_V2_WETH_MODE_Mode]: {
989
+ campaignType: Campaign.CLAMM,
990
+ computeChainId: ChainId.MODE,
991
+ hooks: [],
992
+ poolAddress: "0x8cfE2A02dfBAbC56aE7e573170E35f88A38BeA55",
993
+ whitelist: ["0x23c17a512d486D6F46DB63A8Dd5144B352497762"],
994
+ blacklist: ["0x67135675e22F7ff34eBA30f15f39F9cd30d29079"],
995
+ url: "https://app.kim.exchange/pools/vaults/0x23c17a512d486d6f46db63a8dd5144b352497762",
996
+ forwarders: [],
997
+ isOutOfRangeIncentivized: false,
998
+ weightFees: 2000,
999
+ weightToken0: 4000,
1000
+ weightToken1: 4000,
1001
+ },
1002
+ [modeCampaigns.Kim_Gamma_WETH_MODE_Mode]: {
1003
+ campaignType: Campaign.CLAMM,
1004
+ computeChainId: ChainId.MODE,
1005
+ hooks: [],
1006
+ poolAddress: "0x8cfE2A02dfBAbC56aE7e573170E35f88A38BeA55",
1007
+ whitelist: ["0xD6Cc4a33dA7557A629e819c68fB805ddB225f517"],
1008
+ blacklist: ["0x67135675e22F7ff34eBA30f15f39F9cd30d29079"],
1009
+ url: "https://app.kim.exchange/pools/vaults/gamma/0xd6cc4a33da7557a629e819c68fb805ddb225f517",
1010
+ forwarders: [],
1011
+ isOutOfRangeIncentivized: false,
1012
+ weightFees: 2000,
1013
+ weightToken0: 4000,
1014
+ weightToken1: 4000,
1015
+ },
1016
+ [modeCampaigns.Kim_V4_WETH_MODE_Mode]: {
1017
+ campaignType: Campaign.CLAMM,
1018
+ computeChainId: ChainId.MODE,
1019
+ hooks: [],
1020
+ poolAddress: "0x8cfE2A02dfBAbC56aE7e573170E35f88A38BeA55",
1021
+ whitelist: [],
1022
+ blacklist: [
1023
+ "0x67135675e22F7ff34eBA30f15f39F9cd30d29079",
1024
+ "0x91f6fF8cDBD9B516c0DfB901063B3b00612962EB",
1025
+ "0x23c17a512d486D6F46DB63A8Dd5144B352497762",
1026
+ "0x91f6fF8cDBD9B516c0DfB901063B3b00612962EB",
1027
+ "0xdd97504448cC51b4De4944157838c4800C773C5A",
1028
+ "0xBBD68F14F61bfcbB833618d83779e4Aa1Af5670e",
1029
+ ],
1030
+ url: "https://app.kim.exchange/pools/vaults/gamma/0xd6cc4a33da7557a629e819c68fb805ddb225f517",
1031
+ forwarders: [],
1032
+ isOutOfRangeIncentivized: false,
1033
+ weightFees: 2000,
1034
+ weightToken0: 4000,
1035
+ weightToken1: 4000,
1036
+ },
778
1037
  };
779
1038
  const ZkSyncInterfaceCampaigns = {
780
1039
  [zkSyncCampaigns.Vest_USDC]: {
@@ -914,7 +1173,7 @@ const ZkSyncInterfaceCampaigns = {
914
1173
  targetToken: "0x9e20e83d636870a887ce7c85cecfb8b3e95c9db2",
915
1174
  whitelist: [],
916
1175
  blacklist: [],
917
- url: "https://app.zerolend.xyz/reserve-overview/?underlyingAsset=0x9e20e83d636870a887ce7c85cecfb8b3e95c9db2&marketName=proto_zksync_era_v3",
1176
+ url: "https://one.zerolend.xyz/reserve-overview/?underlyingAsset=0x1d17cbcf0d6d143135ae902365d2e5e2a16538d4&marketName=proto_zksync_era_v3&utm_source=merkl&utm_medium=website&utm_campaign=merkl30",
918
1177
  forwarders: [],
919
1178
  },
920
1179
  [zkSyncCampaigns.Aave_WstETH]: {
@@ -1098,6 +1098,42 @@ export declare const v4: Elysia<"/v4", false, {
1098
1098
  };
1099
1099
  };
1100
1100
  };
1101
+ } & {
1102
+ tokens: {
1103
+ ":id": {
1104
+ allowance: {
1105
+ ":owner": {
1106
+ ":spender": {
1107
+ get: {
1108
+ body: unknown;
1109
+ params: {
1110
+ id: string;
1111
+ owner: string;
1112
+ spender: string;
1113
+ };
1114
+ query: unknown;
1115
+ headers: unknown;
1116
+ response: {
1117
+ 200: {
1118
+ allowance: bigint;
1119
+ symbol: string;
1120
+ name: string | null;
1121
+ id: string;
1122
+ icon: string;
1123
+ chainId: number;
1124
+ address: string;
1125
+ decimals: number;
1126
+ verified: boolean;
1127
+ isTest: boolean;
1128
+ price?: number | null | undefined;
1129
+ } | undefined;
1130
+ };
1131
+ };
1132
+ };
1133
+ };
1134
+ };
1135
+ };
1136
+ };
1101
1137
  } & {
1102
1138
  tokens: {
1103
1139
  reward: {
@@ -38,6 +38,42 @@ export declare const TokenController: Elysia<"/tokens", false, {
38
38
  };
39
39
  };
40
40
  };
41
+ } & {
42
+ tokens: {
43
+ ":id": {
44
+ allowance: {
45
+ ":owner": {
46
+ ":spender": {
47
+ get: {
48
+ body: unknown;
49
+ params: {
50
+ id: string;
51
+ owner: string;
52
+ spender: string;
53
+ };
54
+ query: unknown;
55
+ headers: unknown;
56
+ response: {
57
+ 200: {
58
+ allowance: bigint;
59
+ symbol: string;
60
+ name: string | null;
61
+ id: string;
62
+ icon: string;
63
+ chainId: number;
64
+ address: string;
65
+ decimals: number;
66
+ verified: boolean;
67
+ isTest: boolean;
68
+ price?: number | null | undefined;
69
+ } | undefined;
70
+ };
71
+ };
72
+ };
73
+ };
74
+ };
75
+ };
76
+ };
41
77
  } & {
42
78
  tokens: {
43
79
  reward: {
@@ -1,9 +1,10 @@
1
1
  import { NotFoundError } from "../../../errors/NotFound.error";
2
2
  import { AuthorizationHeadersDto, BackOfficeGuard } from "../../../guards/BackOffice.guard";
3
+ import { getUserAllowance } from "../../../libs/tokens/allowances";
3
4
  import { throwOnInvalidRequiredAddress, throwOnUnsupportedChainId } from "../../../utils/throw";
4
5
  import Elysia from "elysia";
5
6
  import { ChainDto } from "../accounting";
6
- import { CreateTokenDto, FindUniqueTokenDto, GetTokenBalanceDto, GetTokenQueryDto, TokenIdDto, UpdateTokenDto, } from "./token.model";
7
+ import { CreateTokenDto, FindUniqueTokenAllowanceDto, FindUniqueTokenDto, GetTokenBalanceDto, GetTokenQueryDto, TokenIdDto, UpdateTokenDto, } from "./token.model";
7
8
  import { TokenService } from "./token.service";
8
9
  // ─── Tokens Controller ───────────────────────────────────────────────────────
9
10
  export const TokenController = new Elysia({ prefix: "/tokens", detail: { tags: ["Tokens"], hide: true } })
@@ -18,6 +19,18 @@ export const TokenController = new Elysia({ prefix: "/tokens", detail: { tags: [
18
19
  throw new NotFoundError();
19
20
  }
20
21
  }, { params: FindUniqueTokenDto })
22
+ .get("/:id/allowance/:owner/:spender", async ({ params: { id, owner, spender } }) => {
23
+ try {
24
+ const [chainId, address] = id.split("-");
25
+ const token = await TokenService.findUniqueOrThrow({ chainId: +chainId, address });
26
+ const allowance = await getUserAllowance(token.chainId, token.address, owner, spender);
27
+ return { ...token, allowance };
28
+ }
29
+ catch (err) {
30
+ if (err.code && err.code === "P2025")
31
+ throw new NotFoundError();
32
+ }
33
+ }, { params: FindUniqueTokenAllowanceDto })
21
34
  // ─── Get Valid Reward Token ───────────────────────────────────────────
22
35
  .get("/reward/:chainId", async ({ params }) => TokenService.getValidRewardTokens(params.chainId), {
23
36
  params: ChainDto,
@@ -26,6 +26,11 @@ export declare const TokenResourceDto: import("@sinclair/typebox").TObject<{
26
26
  export declare const FindUniqueTokenDto: import("@sinclair/typebox").TObject<{
27
27
  id: import("@sinclair/typebox").TString;
28
28
  }>;
29
+ export declare const FindUniqueTokenAllowanceDto: import("@sinclair/typebox").TObject<{
30
+ id: import("@sinclair/typebox").TString;
31
+ owner: import("@sinclair/typebox").TString;
32
+ spender: import("@sinclair/typebox").TString;
33
+ }>;
29
34
  export declare const GetTokenQueryDto: import("@sinclair/typebox").TObject<{
30
35
  symbol: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
31
36
  displaySymbol: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
@@ -15,6 +15,11 @@ export const TokenResourceDto = t.Object({
15
15
  export const FindUniqueTokenDto = t.Object({
16
16
  id: t.String(),
17
17
  });
18
+ export const FindUniqueTokenAllowanceDto = t.Object({
19
+ id: t.String(),
20
+ owner: t.String(),
21
+ spender: t.String(),
22
+ });
18
23
  export const GetTokenQueryDto = t.Object({
19
24
  symbol: t.Optional(t.String()),
20
25
  displaySymbol: t.Optional(t.String()), // To filter by displaySymbol or if null symbol