@meteora-ag/cp-amm-sdk 1.2.6 → 1.2.7

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.
package/dist/index.mjs CHANGED
@@ -40,8 +40,8 @@ var __async = (__this, __arguments, generator) => {
40
40
  };
41
41
 
42
42
  // src/CpAmm.ts
43
- import { Program } from "@coral-xyz/anchor";
44
- import { NATIVE_MINT as NATIVE_MINT2, TOKEN_2022_PROGRAM_ID as TOKEN_2022_PROGRAM_ID2 } from "@solana/spl-token";
43
+ import { Program as Program2 } from "@coral-xyz/anchor";
44
+ import { NATIVE_MINT as NATIVE_MINT2, TOKEN_2022_PROGRAM_ID as TOKEN_2022_PROGRAM_ID3 } from "@solana/spl-token";
45
45
  import invariant from "invariant";
46
46
 
47
47
  // src/idl/cp_amm.json
@@ -49,7 +49,7 @@ var cp_amm_default = {
49
49
  address: "cpamdpZCGKUy5JxQXB4dcpGPiikHawvSWAd6mEn1sGG",
50
50
  metadata: {
51
51
  name: "cp_amm",
52
- version: "0.1.5",
52
+ version: "0.1.6",
53
53
  spec: "0.1.0",
54
54
  description: "Created with Anchor"
55
55
  },
@@ -720,19 +720,19 @@ var cp_amm_default = {
720
720
  }
721
721
  },
722
722
  {
723
- name: "claim_fee_operator",
723
+ name: "operator",
724
724
  docs: [
725
725
  "Claim fee operator"
726
726
  ]
727
727
  },
728
728
  {
729
- name: "operator",
729
+ name: "whitelisted_address",
730
730
  docs: [
731
731
  "Operator"
732
732
  ],
733
733
  signer: true,
734
734
  relations: [
735
- "claim_fee_operator"
735
+ "operator"
736
736
  ]
737
737
  },
738
738
  {
@@ -894,29 +894,35 @@ var cp_amm_default = {
894
894
  ]
895
895
  },
896
896
  {
897
- name: "close_claim_fee_operator",
897
+ name: "close_config",
898
898
  discriminator: [
899
- 38,
900
- 134,
901
- 82,
902
- 216,
899
+ 145,
900
+ 9,
901
+ 72,
902
+ 157,
903
903
  95,
904
- 124,
905
- 17,
906
- 99
904
+ 125,
905
+ 61,
906
+ 85
907
907
  ],
908
908
  accounts: [
909
909
  {
910
- name: "claim_fee_operator",
910
+ name: "config",
911
911
  writable: true
912
912
  },
913
913
  {
914
- name: "rent_receiver",
915
- writable: true
914
+ name: "operator"
916
915
  },
917
916
  {
918
- name: "admin",
919
- signer: true
917
+ name: "whitelisted_address",
918
+ signer: true,
919
+ relations: [
920
+ "operator"
921
+ ]
922
+ },
923
+ {
924
+ name: "rent_receiver",
925
+ writable: true
920
926
  },
921
927
  {
922
928
  name: "event_authority",
@@ -954,25 +960,24 @@ var cp_amm_default = {
954
960
  args: []
955
961
  },
956
962
  {
957
- name: "close_config",
963
+ name: "close_operator_account",
958
964
  discriminator: [
959
- 145,
965
+ 171,
960
966
  9,
961
- 72,
962
- 157,
963
- 95,
964
- 125,
965
- 61,
966
- 85
967
+ 213,
968
+ 74,
969
+ 120,
970
+ 23,
971
+ 3,
972
+ 29
967
973
  ],
968
974
  accounts: [
969
975
  {
970
- name: "config",
976
+ name: "operator",
971
977
  writable: true
972
978
  },
973
979
  {
974
980
  name: "admin",
975
- writable: true,
976
981
  signer: true
977
982
  },
978
983
  {
@@ -1127,9 +1132,14 @@ var cp_amm_default = {
1127
1132
  writable: true
1128
1133
  },
1129
1134
  {
1130
- name: "admin",
1131
- writable: true,
1132
- signer: true
1135
+ name: "operator"
1136
+ },
1137
+ {
1138
+ name: "whitelisted_address",
1139
+ signer: true,
1140
+ relations: [
1141
+ "operator"
1142
+ ]
1133
1143
  },
1134
1144
  {
1135
1145
  name: "rent_receiver",
@@ -1171,20 +1181,23 @@ var cp_amm_default = {
1171
1181
  args: []
1172
1182
  },
1173
1183
  {
1174
- name: "create_claim_fee_operator",
1184
+ name: "create_config",
1185
+ docs: [
1186
+ "OPERATOR FUNCTIONS /////"
1187
+ ],
1175
1188
  discriminator: [
1176
- 169,
1177
- 62,
1189
+ 201,
1178
1190
  207,
1179
- 107,
1180
- 58,
1181
- 187,
1182
- 162,
1183
- 109
1191
+ 243,
1192
+ 114,
1193
+ 75,
1194
+ 111,
1195
+ 47,
1196
+ 189
1184
1197
  ],
1185
1198
  accounts: [
1186
1199
  {
1187
- name: "claim_fee_operator",
1200
+ name: "config",
1188
1201
  writable: true,
1189
1202
  pda: {
1190
1203
  seeds: [
@@ -1192,21 +1205,16 @@ var cp_amm_default = {
1192
1205
  kind: "const",
1193
1206
  value: [
1194
1207
  99,
1195
- 102,
1196
- 95,
1197
- 111,
1198
- 112,
1199
- 101,
1200
- 114,
1201
- 97,
1202
- 116,
1203
1208
  111,
1204
- 114
1209
+ 110,
1210
+ 102,
1211
+ 105,
1212
+ 103
1205
1213
  ]
1206
1214
  },
1207
1215
  {
1208
- kind: "account",
1209
- path: "operator"
1216
+ kind: "arg",
1217
+ path: "index"
1210
1218
  }
1211
1219
  ]
1212
1220
  }
@@ -1215,7 +1223,14 @@ var cp_amm_default = {
1215
1223
  name: "operator"
1216
1224
  },
1217
1225
  {
1218
- name: "admin",
1226
+ name: "whitelisted_address",
1227
+ signer: true,
1228
+ relations: [
1229
+ "operator"
1230
+ ]
1231
+ },
1232
+ {
1233
+ name: "payer",
1219
1234
  writable: true,
1220
1235
  signer: true
1221
1236
  },
@@ -1256,22 +1271,32 @@ var cp_amm_default = {
1256
1271
  name: "program"
1257
1272
  }
1258
1273
  ],
1259
- args: []
1274
+ args: [
1275
+ {
1276
+ name: "index",
1277
+ type: "u64"
1278
+ },
1279
+ {
1280
+ name: "config_parameters",
1281
+ type: {
1282
+ defined: {
1283
+ name: "StaticConfigParameters"
1284
+ }
1285
+ }
1286
+ }
1287
+ ]
1260
1288
  },
1261
1289
  {
1262
- name: "create_config",
1263
- docs: [
1264
- "ADMIN FUNCTIONS /////"
1265
- ],
1290
+ name: "create_dynamic_config",
1266
1291
  discriminator: [
1267
- 201,
1268
- 207,
1269
- 243,
1270
- 114,
1271
- 75,
1272
- 111,
1273
- 47,
1274
- 189
1292
+ 81,
1293
+ 251,
1294
+ 122,
1295
+ 78,
1296
+ 66,
1297
+ 57,
1298
+ 208,
1299
+ 82
1275
1300
  ],
1276
1301
  accounts: [
1277
1302
  {
@@ -1298,7 +1323,17 @@ var cp_amm_default = {
1298
1323
  }
1299
1324
  },
1300
1325
  {
1301
- name: "admin",
1326
+ name: "operator"
1327
+ },
1328
+ {
1329
+ name: "whitelisted_address",
1330
+ signer: true,
1331
+ relations: [
1332
+ "operator"
1333
+ ]
1334
+ },
1335
+ {
1336
+ name: "payer",
1302
1337
  writable: true,
1303
1338
  signer: true
1304
1339
  },
@@ -1348,50 +1383,62 @@ var cp_amm_default = {
1348
1383
  name: "config_parameters",
1349
1384
  type: {
1350
1385
  defined: {
1351
- name: "StaticConfigParameters"
1386
+ name: "DynamicConfigParameters"
1352
1387
  }
1353
1388
  }
1354
1389
  }
1355
1390
  ]
1356
1391
  },
1357
1392
  {
1358
- name: "create_dynamic_config",
1393
+ name: "create_operator_account",
1394
+ docs: [
1395
+ "ADMIN FUNCTIONS /////"
1396
+ ],
1359
1397
  discriminator: [
1360
- 81,
1361
- 251,
1362
- 122,
1363
- 78,
1364
- 66,
1365
- 57,
1366
- 208,
1367
- 82
1398
+ 221,
1399
+ 64,
1400
+ 246,
1401
+ 149,
1402
+ 240,
1403
+ 153,
1404
+ 229,
1405
+ 163
1368
1406
  ],
1369
1407
  accounts: [
1370
1408
  {
1371
- name: "config",
1409
+ name: "operator",
1372
1410
  writable: true,
1373
1411
  pda: {
1374
1412
  seeds: [
1375
1413
  {
1376
1414
  kind: "const",
1377
1415
  value: [
1378
- 99,
1379
1416
  111,
1380
- 110,
1381
- 102,
1382
- 105,
1383
- 103
1417
+ 112,
1418
+ 101,
1419
+ 114,
1420
+ 97,
1421
+ 116,
1422
+ 111,
1423
+ 114
1384
1424
  ]
1385
1425
  },
1386
1426
  {
1387
- kind: "arg",
1388
- path: "index"
1427
+ kind: "account",
1428
+ path: "whitelisted_address"
1389
1429
  }
1390
1430
  ]
1391
1431
  }
1392
1432
  },
1433
+ {
1434
+ name: "whitelisted_address"
1435
+ },
1393
1436
  {
1394
1437
  name: "admin",
1438
+ signer: true
1439
+ },
1440
+ {
1441
+ name: "payer",
1395
1442
  writable: true,
1396
1443
  signer: true
1397
1444
  },
@@ -1434,16 +1481,8 @@ var cp_amm_default = {
1434
1481
  ],
1435
1482
  args: [
1436
1483
  {
1437
- name: "index",
1438
- type: "u64"
1439
- },
1440
- {
1441
- name: "config_parameters",
1442
- type: {
1443
- defined: {
1444
- name: "DynamicConfigParameters"
1445
- }
1446
- }
1484
+ name: "permission",
1485
+ type: "u128"
1447
1486
  }
1448
1487
  ]
1449
1488
  },
@@ -1643,7 +1682,17 @@ var cp_amm_default = {
1643
1682
  name: "token_mint"
1644
1683
  },
1645
1684
  {
1646
- name: "admin",
1685
+ name: "operator"
1686
+ },
1687
+ {
1688
+ name: "whitelisted_address",
1689
+ signer: true,
1690
+ relations: [
1691
+ "operator"
1692
+ ]
1693
+ },
1694
+ {
1695
+ name: "payer",
1647
1696
  writable: true,
1648
1697
  signer: true
1649
1698
  },
@@ -1686,6 +1735,40 @@ var cp_amm_default = {
1686
1735
  ],
1687
1736
  args: []
1688
1737
  },
1738
+ {
1739
+ name: "dummy_ix",
1740
+ discriminator: [
1741
+ 234,
1742
+ 95,
1743
+ 176,
1744
+ 185,
1745
+ 7,
1746
+ 42,
1747
+ 35,
1748
+ 159
1749
+ ],
1750
+ accounts: [
1751
+ {
1752
+ name: "pod_aligned_fee_time_scheduler"
1753
+ },
1754
+ {
1755
+ name: "pod_aligned_fee_rate_limiter"
1756
+ },
1757
+ {
1758
+ name: "pod_aligned_fee_market_cap_scheduler"
1759
+ }
1760
+ ],
1761
+ args: [
1762
+ {
1763
+ name: "_ixs",
1764
+ type: {
1765
+ defined: {
1766
+ name: "DummyParams"
1767
+ }
1768
+ }
1769
+ }
1770
+ ]
1771
+ },
1689
1772
  {
1690
1773
  name: "fund_reward",
1691
1774
  discriminator: [
@@ -3247,8 +3330,14 @@ var cp_amm_default = {
3247
3330
  writable: true
3248
3331
  },
3249
3332
  {
3250
- name: "admin",
3251
- signer: true
3333
+ name: "operator"
3334
+ },
3335
+ {
3336
+ name: "whitelisted_address",
3337
+ signer: true,
3338
+ relations: [
3339
+ "operator"
3340
+ ]
3252
3341
  },
3253
3342
  {
3254
3343
  name: "event_authority",
@@ -3628,7 +3717,7 @@ var cp_amm_default = {
3628
3717
  ],
3629
3718
  args: [
3630
3719
  {
3631
- name: "params",
3720
+ name: "_params",
3632
3721
  type: {
3633
3722
  defined: {
3634
3723
  name: "SwapParameters"
@@ -3769,7 +3858,7 @@ var cp_amm_default = {
3769
3858
  ],
3770
3859
  args: [
3771
3860
  {
3772
- name: "params",
3861
+ name: "_params",
3773
3862
  type: {
3774
3863
  defined: {
3775
3864
  name: "SwapParameters2"
@@ -3779,16 +3868,16 @@ var cp_amm_default = {
3779
3868
  ]
3780
3869
  },
3781
3870
  {
3782
- name: "update_reward_duration",
3871
+ name: "update_pool_fees",
3783
3872
  discriminator: [
3784
- 138,
3785
- 174,
3786
- 196,
3787
- 169,
3788
- 213,
3789
- 235,
3790
- 254,
3791
- 107
3873
+ 118,
3874
+ 217,
3875
+ 203,
3876
+ 179,
3877
+ 60,
3878
+ 8,
3879
+ 70,
3880
+ 89
3792
3881
  ],
3793
3882
  accounts: [
3794
3883
  {
@@ -3796,13 +3885,84 @@ var cp_amm_default = {
3796
3885
  writable: true
3797
3886
  },
3798
3887
  {
3799
- name: "signer",
3800
- signer: true
3888
+ name: "operator"
3801
3889
  },
3802
3890
  {
3803
- name: "event_authority",
3804
- pda: {
3805
- seeds: [
3891
+ name: "whitelisted_address",
3892
+ signer: true,
3893
+ relations: [
3894
+ "operator"
3895
+ ]
3896
+ },
3897
+ {
3898
+ name: "event_authority",
3899
+ pda: {
3900
+ seeds: [
3901
+ {
3902
+ kind: "const",
3903
+ value: [
3904
+ 95,
3905
+ 95,
3906
+ 101,
3907
+ 118,
3908
+ 101,
3909
+ 110,
3910
+ 116,
3911
+ 95,
3912
+ 97,
3913
+ 117,
3914
+ 116,
3915
+ 104,
3916
+ 111,
3917
+ 114,
3918
+ 105,
3919
+ 116,
3920
+ 121
3921
+ ]
3922
+ }
3923
+ ]
3924
+ }
3925
+ },
3926
+ {
3927
+ name: "program"
3928
+ }
3929
+ ],
3930
+ args: [
3931
+ {
3932
+ name: "params",
3933
+ type: {
3934
+ defined: {
3935
+ name: "UpdatePoolFeesParameters"
3936
+ }
3937
+ }
3938
+ }
3939
+ ]
3940
+ },
3941
+ {
3942
+ name: "update_reward_duration",
3943
+ discriminator: [
3944
+ 138,
3945
+ 174,
3946
+ 196,
3947
+ 169,
3948
+ 213,
3949
+ 235,
3950
+ 254,
3951
+ 107
3952
+ ],
3953
+ accounts: [
3954
+ {
3955
+ name: "pool",
3956
+ writable: true
3957
+ },
3958
+ {
3959
+ name: "signer",
3960
+ signer: true
3961
+ },
3962
+ {
3963
+ name: "event_authority",
3964
+ pda: {
3965
+ seeds: [
3806
3966
  {
3807
3967
  kind: "const",
3808
3968
  value: [
@@ -3989,19 +4149,6 @@ var cp_amm_default = {
3989
4149
  }
3990
4150
  ],
3991
4151
  accounts: [
3992
- {
3993
- name: "ClaimFeeOperator",
3994
- discriminator: [
3995
- 166,
3996
- 48,
3997
- 134,
3998
- 86,
3999
- 34,
4000
- 200,
4001
- 188,
4002
- 150
4003
- ]
4004
- },
4005
4152
  {
4006
4153
  name: "Config",
4007
4154
  discriminator: [
@@ -4015,6 +4162,58 @@ var cp_amm_default = {
4015
4162
  130
4016
4163
  ]
4017
4164
  },
4165
+ {
4166
+ name: "Operator",
4167
+ discriminator: [
4168
+ 219,
4169
+ 31,
4170
+ 188,
4171
+ 145,
4172
+ 69,
4173
+ 139,
4174
+ 204,
4175
+ 117
4176
+ ]
4177
+ },
4178
+ {
4179
+ name: "PodAlignedFeeMarketCapScheduler",
4180
+ discriminator: [
4181
+ 251,
4182
+ 130,
4183
+ 208,
4184
+ 253,
4185
+ 245,
4186
+ 27,
4187
+ 145,
4188
+ 203
4189
+ ]
4190
+ },
4191
+ {
4192
+ name: "PodAlignedFeeRateLimiter",
4193
+ discriminator: [
4194
+ 160,
4195
+ 219,
4196
+ 8,
4197
+ 251,
4198
+ 179,
4199
+ 7,
4200
+ 16,
4201
+ 117
4202
+ ]
4203
+ },
4204
+ {
4205
+ name: "PodAlignedFeeTimeScheduler",
4206
+ discriminator: [
4207
+ 239,
4208
+ 132,
4209
+ 138,
4210
+ 213,
4211
+ 67,
4212
+ 154,
4213
+ 130,
4214
+ 70
4215
+ ]
4216
+ },
4018
4217
  {
4019
4218
  name: "Pool",
4020
4219
  discriminator: [
@@ -4069,19 +4268,6 @@ var cp_amm_default = {
4069
4268
  }
4070
4269
  ],
4071
4270
  events: [
4072
- {
4073
- name: "EvtAddLiquidity",
4074
- discriminator: [
4075
- 175,
4076
- 242,
4077
- 8,
4078
- 157,
4079
- 30,
4080
- 247,
4081
- 185,
4082
- 169
4083
- ]
4084
- },
4085
4271
  {
4086
4272
  name: "EvtClaimPartnerFee",
4087
4273
  discriminator: [
@@ -4134,19 +4320,6 @@ var cp_amm_default = {
4134
4320
  231
4135
4321
  ]
4136
4322
  },
4137
- {
4138
- name: "EvtCloseClaimFeeOperator",
4139
- discriminator: [
4140
- 111,
4141
- 39,
4142
- 37,
4143
- 55,
4144
- 110,
4145
- 216,
4146
- 194,
4147
- 23
4148
- ]
4149
- },
4150
4323
  {
4151
4324
  name: "EvtCloseConfig",
4152
4325
  discriminator: [
@@ -4173,19 +4346,6 @@ var cp_amm_default = {
4173
4346
  178
4174
4347
  ]
4175
4348
  },
4176
- {
4177
- name: "EvtCreateClaimFeeOperator",
4178
- discriminator: [
4179
- 21,
4180
- 6,
4181
- 153,
4182
- 120,
4183
- 68,
4184
- 116,
4185
- 28,
4186
- 177
4187
- ]
4188
- },
4189
4349
  {
4190
4350
  name: "EvtCreateConfig",
4191
4351
  discriminator: [
@@ -4316,19 +4476,6 @@ var cp_amm_default = {
4316
4476
  11
4317
4477
  ]
4318
4478
  },
4319
- {
4320
- name: "EvtRemoveLiquidity",
4321
- discriminator: [
4322
- 87,
4323
- 46,
4324
- 88,
4325
- 98,
4326
- 175,
4327
- 96,
4328
- 34,
4329
- 91
4330
- ]
4331
- },
4332
4479
  {
4333
4480
  name: "EvtSetPoolStatus",
4334
4481
  discriminator: [
@@ -4355,19 +4502,6 @@ var cp_amm_default = {
4355
4502
  103
4356
4503
  ]
4357
4504
  },
4358
- {
4359
- name: "EvtSwap",
4360
- discriminator: [
4361
- 27,
4362
- 60,
4363
- 21,
4364
- 213,
4365
- 138,
4366
- 170,
4367
- 187,
4368
- 147
4369
- ]
4370
- },
4371
4505
  {
4372
4506
  name: "EvtSwap2",
4373
4507
  discriminator: [
@@ -4381,6 +4515,19 @@ var cp_amm_default = {
4381
4515
  153
4382
4516
  ]
4383
4517
  },
4518
+ {
4519
+ name: "EvtUpdatePoolFees",
4520
+ discriminator: [
4521
+ 76,
4522
+ 165,
4523
+ 246,
4524
+ 102,
4525
+ 102,
4526
+ 217,
4527
+ 156,
4528
+ 44
4529
+ ]
4530
+ },
4384
4531
  {
4385
4532
  name: "EvtUpdateRewardDuration",
4386
4533
  discriminator: [
@@ -4674,7 +4821,7 @@ var cp_amm_default = {
4674
4821
  },
4675
4822
  {
4676
4823
  code: 6050,
4677
- name: "InvalidFeeScheduler",
4824
+ name: "InvalidFeeTimeScheduler",
4678
4825
  msg: "Invalid fee scheduler"
4679
4826
  },
4680
4827
  {
@@ -4686,6 +4833,41 @@ var cp_amm_default = {
4686
4833
  code: 6052,
4687
4834
  name: "InvalidPoolVersion",
4688
4835
  msg: "Invalid pool version"
4836
+ },
4837
+ {
4838
+ code: 6053,
4839
+ name: "InvalidAuthority",
4840
+ msg: "Invalid authority to do that action"
4841
+ },
4842
+ {
4843
+ code: 6054,
4844
+ name: "InvalidPermission",
4845
+ msg: "Invalid permission"
4846
+ },
4847
+ {
4848
+ code: 6055,
4849
+ name: "InvalidFeeMarketCapScheduler",
4850
+ msg: "Invalid fee market cap scheduler"
4851
+ },
4852
+ {
4853
+ code: 6056,
4854
+ name: "CannotUpdateBaseFee",
4855
+ msg: "Cannot update base fee"
4856
+ },
4857
+ {
4858
+ code: 6057,
4859
+ name: "InvalidDynamicFeeParameters",
4860
+ msg: "Invalid dynamic fee parameters"
4861
+ },
4862
+ {
4863
+ code: 6058,
4864
+ name: "InvalidUpdatePoolFeesParameters",
4865
+ msg: "Invalid update pool fees parameters"
4866
+ },
4867
+ {
4868
+ code: 6059,
4869
+ name: "MissingOperatorAccount",
4870
+ msg: "Missing operator account"
4689
4871
  }
4690
4872
  ],
4691
4873
  types: [
@@ -4719,7 +4901,7 @@ var cp_amm_default = {
4719
4901
  }
4720
4902
  },
4721
4903
  {
4722
- name: "BaseFeeConfig",
4904
+ name: "BaseFeeInfo",
4723
4905
  serialization: "bytemuck",
4724
4906
  repr: {
4725
4907
  kind: "c"
@@ -4728,38 +4910,13 @@ var cp_amm_default = {
4728
4910
  kind: "struct",
4729
4911
  fields: [
4730
4912
  {
4731
- name: "cliff_fee_numerator",
4732
- type: "u64"
4733
- },
4734
- {
4735
- name: "base_fee_mode",
4736
- type: "u8"
4737
- },
4738
- {
4739
- name: "padding",
4740
- type: {
4741
- array: [
4742
- "u8",
4743
- 5
4744
- ]
4745
- }
4746
- },
4747
- {
4748
- name: "first_factor",
4749
- type: "u16"
4750
- },
4751
- {
4752
- name: "second_factor",
4913
+ name: "data",
4753
4914
  type: {
4754
4915
  array: [
4755
4916
  "u8",
4756
- 8
4917
+ 32
4757
4918
  ]
4758
4919
  }
4759
- },
4760
- {
4761
- name: "third_factor",
4762
- type: "u64"
4763
4920
  }
4764
4921
  ]
4765
4922
  }
@@ -4770,29 +4927,13 @@ var cp_amm_default = {
4770
4927
  kind: "struct",
4771
4928
  fields: [
4772
4929
  {
4773
- name: "cliff_fee_numerator",
4774
- type: "u64"
4775
- },
4776
- {
4777
- name: "first_factor",
4778
- type: "u16"
4779
- },
4780
- {
4781
- name: "second_factor",
4930
+ name: "data",
4782
4931
  type: {
4783
4932
  array: [
4784
4933
  "u8",
4785
- 8
4934
+ 30
4786
4935
  ]
4787
4936
  }
4788
- },
4789
- {
4790
- name: "third_factor",
4791
- type: "u64"
4792
- },
4793
- {
4794
- name: "base_fee_mode",
4795
- type: "u8"
4796
4937
  }
4797
4938
  ]
4798
4939
  }
@@ -4803,6 +4944,26 @@ var cp_amm_default = {
4803
4944
  repr: {
4804
4945
  kind: "c"
4805
4946
  },
4947
+ type: {
4948
+ kind: "struct",
4949
+ fields: [
4950
+ {
4951
+ name: "base_fee_info",
4952
+ type: {
4953
+ defined: {
4954
+ name: "BaseFeeInfo"
4955
+ }
4956
+ }
4957
+ },
4958
+ {
4959
+ name: "padding_1",
4960
+ type: "u64"
4961
+ }
4962
+ ]
4963
+ }
4964
+ },
4965
+ {
4966
+ name: "BorshFeeMarketCapScheduler",
4806
4967
  type: {
4807
4968
  kind: "struct",
4808
4969
  fields: [
@@ -4811,70 +4972,122 @@ var cp_amm_default = {
4811
4972
  type: "u64"
4812
4973
  },
4813
4974
  {
4814
- name: "base_fee_mode",
4815
- type: "u8"
4975
+ name: "number_of_period",
4976
+ type: "u16"
4816
4977
  },
4817
4978
  {
4818
- name: "padding_0",
4819
- type: {
4820
- array: [
4821
- "u8",
4822
- 5
4823
- ]
4824
- }
4979
+ name: "sqrt_price_step_bps",
4980
+ type: "u32"
4825
4981
  },
4826
4982
  {
4827
- name: "first_factor",
4828
- type: "u16"
4983
+ name: "scheduler_expiration_duration",
4984
+ type: "u32"
4985
+ },
4986
+ {
4987
+ name: "reduction_factor",
4988
+ type: "u64"
4989
+ },
4990
+ {
4991
+ name: "base_fee_mode",
4992
+ type: "u8"
4829
4993
  },
4830
4994
  {
4831
- name: "second_factor",
4995
+ name: "padding",
4832
4996
  type: {
4833
4997
  array: [
4834
4998
  "u8",
4835
- 8
4999
+ 3
4836
5000
  ]
4837
5001
  }
4838
- },
5002
+ }
5003
+ ]
5004
+ }
5005
+ },
5006
+ {
5007
+ name: "BorshFeeRateLimiter",
5008
+ docs: [
5009
+ "we denote reference_amount = x0, cliff_fee_numerator = c, fee_increment = i",
5010
+ "if input_amount <= x0, then fee = input_amount * c",
5011
+ "",
5012
+ "if input_amount > x0, then input_amount = x0 + (a * x0 + b)",
5013
+ "if a < max_index",
5014
+ "then fee = x0 * c + x0 * (c + i) + .... + x0 * (c + i*a) + b * (c + i * (a+1))",
5015
+ "then fee = x0 * (c + c*a + i*a*(a+1)/2) + b * (c + i * (a+1))",
5016
+ "",
5017
+ "if a >= max_index",
5018
+ "if a = max_index + d, input_amount = x0 + max_index * x0 + (d * x0 + b)",
5019
+ "then fee = x0 * (c + c*max_index + i*max_index*(max_index+1)/2) + (d * x0 + b) * MAX_FEE"
5020
+ ],
5021
+ type: {
5022
+ kind: "struct",
5023
+ fields: [
4839
5024
  {
4840
- name: "third_factor",
5025
+ name: "cliff_fee_numerator",
4841
5026
  type: "u64"
4842
5027
  },
4843
5028
  {
4844
- name: "padding_1",
5029
+ name: "fee_increment_bps",
5030
+ type: "u16"
5031
+ },
5032
+ {
5033
+ name: "max_limiter_duration",
5034
+ type: "u32"
5035
+ },
5036
+ {
5037
+ name: "max_fee_bps",
5038
+ type: "u32"
5039
+ },
5040
+ {
5041
+ name: "reference_amount",
4845
5042
  type: "u64"
5043
+ },
5044
+ {
5045
+ name: "base_fee_mode",
5046
+ type: "u8"
5047
+ },
5048
+ {
5049
+ name: "padding",
5050
+ type: {
5051
+ array: [
5052
+ "u8",
5053
+ 3
5054
+ ]
5055
+ }
4846
5056
  }
4847
5057
  ]
4848
5058
  }
4849
5059
  },
4850
5060
  {
4851
- name: "ClaimFeeOperator",
4852
- docs: [
4853
- "Parameter that set by the protocol"
4854
- ],
4855
- serialization: "bytemuck",
4856
- repr: {
4857
- kind: "c"
4858
- },
5061
+ name: "BorshFeeTimeScheduler",
4859
5062
  type: {
4860
5063
  kind: "struct",
4861
5064
  fields: [
4862
5065
  {
4863
- name: "operator",
4864
- docs: [
4865
- "operator"
4866
- ],
4867
- type: "pubkey"
5066
+ name: "cliff_fee_numerator",
5067
+ type: "u64"
4868
5068
  },
4869
5069
  {
4870
- name: "_padding",
4871
- docs: [
4872
- "Reserve"
4873
- ],
5070
+ name: "number_of_period",
5071
+ type: "u16"
5072
+ },
5073
+ {
5074
+ name: "period_frequency",
5075
+ type: "u64"
5076
+ },
5077
+ {
5078
+ name: "reduction_factor",
5079
+ type: "u64"
5080
+ },
5081
+ {
5082
+ name: "base_fee_mode",
5083
+ type: "u8"
5084
+ },
5085
+ {
5086
+ name: "padding",
4874
5087
  type: {
4875
5088
  array: [
4876
5089
  "u8",
4877
- 128
5090
+ 3
4878
5091
  ]
4879
5092
  }
4880
5093
  }
@@ -4985,6 +5198,38 @@ var cp_amm_default = {
4985
5198
  ]
4986
5199
  }
4987
5200
  },
5201
+ {
5202
+ name: "DummyParams",
5203
+ type: {
5204
+ kind: "struct",
5205
+ fields: [
5206
+ {
5207
+ name: "borsh_fee_time_scheduler_params",
5208
+ type: {
5209
+ defined: {
5210
+ name: "BorshFeeTimeScheduler"
5211
+ }
5212
+ }
5213
+ },
5214
+ {
5215
+ name: "borsh_fee_rate_limiter_params",
5216
+ type: {
5217
+ defined: {
5218
+ name: "BorshFeeRateLimiter"
5219
+ }
5220
+ }
5221
+ },
5222
+ {
5223
+ name: "borsh_fee_market_cap_scheduler_params",
5224
+ type: {
5225
+ defined: {
5226
+ name: "BorshFeeMarketCapScheduler"
5227
+ }
5228
+ }
5229
+ }
5230
+ ]
5231
+ }
5232
+ },
4988
5233
  {
4989
5234
  name: "DynamicConfigParameters",
4990
5235
  type: {
@@ -5164,50 +5409,6 @@ var cp_amm_default = {
5164
5409
  ]
5165
5410
  }
5166
5411
  },
5167
- {
5168
- name: "EvtAddLiquidity",
5169
- type: {
5170
- kind: "struct",
5171
- fields: [
5172
- {
5173
- name: "pool",
5174
- type: "pubkey"
5175
- },
5176
- {
5177
- name: "position",
5178
- type: "pubkey"
5179
- },
5180
- {
5181
- name: "owner",
5182
- type: "pubkey"
5183
- },
5184
- {
5185
- name: "params",
5186
- type: {
5187
- defined: {
5188
- name: "AddLiquidityParameters"
5189
- }
5190
- }
5191
- },
5192
- {
5193
- name: "token_a_amount",
5194
- type: "u64"
5195
- },
5196
- {
5197
- name: "token_b_amount",
5198
- type: "u64"
5199
- },
5200
- {
5201
- name: "total_amount_a",
5202
- type: "u64"
5203
- },
5204
- {
5205
- name: "total_amount_b",
5206
- type: "u64"
5207
- }
5208
- ]
5209
- }
5210
- },
5211
5412
  {
5212
5413
  name: "EvtClaimPartnerFee",
5213
5414
  type: {
@@ -5308,25 +5509,6 @@ var cp_amm_default = {
5308
5509
  ]
5309
5510
  }
5310
5511
  },
5311
- {
5312
- name: "EvtCloseClaimFeeOperator",
5313
- docs: [
5314
- "Close claim fee operator"
5315
- ],
5316
- type: {
5317
- kind: "struct",
5318
- fields: [
5319
- {
5320
- name: "claim_fee_operator",
5321
- type: "pubkey"
5322
- },
5323
- {
5324
- name: "operator",
5325
- type: "pubkey"
5326
- }
5327
- ]
5328
- }
5329
- },
5330
5512
  {
5331
5513
  name: "EvtCloseConfig",
5332
5514
  docs: [
@@ -5376,21 +5558,6 @@ var cp_amm_default = {
5376
5558
  ]
5377
5559
  }
5378
5560
  },
5379
- {
5380
- name: "EvtCreateClaimFeeOperator",
5381
- docs: [
5382
- "Create claim fee operator"
5383
- ],
5384
- type: {
5385
- kind: "struct",
5386
- fields: [
5387
- {
5388
- name: "operator",
5389
- type: "pubkey"
5390
- }
5391
- ]
5392
- }
5393
- },
5394
5561
  {
5395
5562
  name: "EvtCreateConfig",
5396
5563
  docs: [
@@ -5804,42 +5971,6 @@ var cp_amm_default = {
5804
5971
  ]
5805
5972
  }
5806
5973
  },
5807
- {
5808
- name: "EvtRemoveLiquidity",
5809
- type: {
5810
- kind: "struct",
5811
- fields: [
5812
- {
5813
- name: "pool",
5814
- type: "pubkey"
5815
- },
5816
- {
5817
- name: "position",
5818
- type: "pubkey"
5819
- },
5820
- {
5821
- name: "owner",
5822
- type: "pubkey"
5823
- },
5824
- {
5825
- name: "params",
5826
- type: {
5827
- defined: {
5828
- name: "RemoveLiquidityParameters"
5829
- }
5830
- }
5831
- },
5832
- {
5833
- name: "token_a_amount",
5834
- type: "u64"
5835
- },
5836
- {
5837
- name: "token_b_amount",
5838
- type: "u64"
5839
- }
5840
- ]
5841
- }
5842
- },
5843
5974
  {
5844
5975
  name: "EvtSetPoolStatus",
5845
5976
  type: {
@@ -5920,50 +6051,6 @@ var cp_amm_default = {
5920
6051
  ]
5921
6052
  }
5922
6053
  },
5923
- {
5924
- name: "EvtSwap",
5925
- type: {
5926
- kind: "struct",
5927
- fields: [
5928
- {
5929
- name: "pool",
5930
- type: "pubkey"
5931
- },
5932
- {
5933
- name: "trade_direction",
5934
- type: "u8"
5935
- },
5936
- {
5937
- name: "has_referral",
5938
- type: "bool"
5939
- },
5940
- {
5941
- name: "params",
5942
- type: {
5943
- defined: {
5944
- name: "SwapParameters"
5945
- }
5946
- }
5947
- },
5948
- {
5949
- name: "swap_result",
5950
- type: {
5951
- defined: {
5952
- name: "SwapResult"
5953
- }
5954
- }
5955
- },
5956
- {
5957
- name: "actual_amount_in",
5958
- type: "u64"
5959
- },
5960
- {
5961
- name: "current_timestamp",
5962
- type: "u64"
5963
- }
5964
- ]
5965
- }
5966
- },
5967
6054
  {
5968
6055
  name: "EvtSwap2",
5969
6056
  type: {
@@ -6028,6 +6115,30 @@ var cp_amm_default = {
6028
6115
  ]
6029
6116
  }
6030
6117
  },
6118
+ {
6119
+ name: "EvtUpdatePoolFees",
6120
+ type: {
6121
+ kind: "struct",
6122
+ fields: [
6123
+ {
6124
+ name: "pool",
6125
+ type: "pubkey"
6126
+ },
6127
+ {
6128
+ name: "operator",
6129
+ type: "pubkey"
6130
+ },
6131
+ {
6132
+ name: "params",
6133
+ type: {
6134
+ defined: {
6135
+ name: "UpdatePoolFeesParameters"
6136
+ }
6137
+ }
6138
+ }
6139
+ ]
6140
+ }
6141
+ },
6031
6142
  {
6032
6143
  name: "EvtUpdateRewardDuration",
6033
6144
  type: {
@@ -6143,7 +6254,7 @@ var cp_amm_default = {
6143
6254
  {
6144
6255
  name: "sqrt_price",
6145
6256
  docs: [
6146
- "The init price of the pool as a sqrt(token_b/token_a) Q64.64 value"
6257
+ "The init price of the pool as a sqrt(token_b/token_a) Q64.64 value. Market cap fee scheduler minimum price will be derived from this value"
6147
6258
  ],
6148
6259
  type: "u128"
6149
6260
  },
@@ -6174,32 +6285,192 @@ var cp_amm_default = {
6174
6285
  }
6175
6286
  },
6176
6287
  {
6177
- name: "InitializePoolParameters",
6288
+ name: "InitializePoolParameters",
6289
+ type: {
6290
+ kind: "struct",
6291
+ fields: [
6292
+ {
6293
+ name: "liquidity",
6294
+ docs: [
6295
+ "initialize liquidity"
6296
+ ],
6297
+ type: "u128"
6298
+ },
6299
+ {
6300
+ name: "sqrt_price",
6301
+ docs: [
6302
+ "The init price of the pool as a sqrt(token_b/token_a) Q64.64 value"
6303
+ ],
6304
+ type: "u128"
6305
+ },
6306
+ {
6307
+ name: "activation_point",
6308
+ docs: [
6309
+ "activation point"
6310
+ ],
6311
+ type: {
6312
+ option: "u64"
6313
+ }
6314
+ }
6315
+ ]
6316
+ }
6317
+ },
6318
+ {
6319
+ name: "Operator",
6320
+ serialization: "bytemuck",
6321
+ repr: {
6322
+ kind: "c"
6323
+ },
6324
+ type: {
6325
+ kind: "struct",
6326
+ fields: [
6327
+ {
6328
+ name: "whitelisted_address",
6329
+ type: "pubkey"
6330
+ },
6331
+ {
6332
+ name: "permission",
6333
+ type: "u128"
6334
+ },
6335
+ {
6336
+ name: "padding",
6337
+ type: {
6338
+ array: [
6339
+ "u64",
6340
+ 2
6341
+ ]
6342
+ }
6343
+ }
6344
+ ]
6345
+ }
6346
+ },
6347
+ {
6348
+ name: "PodAlignedFeeMarketCapScheduler",
6349
+ serialization: "bytemuck",
6350
+ repr: {
6351
+ kind: "c"
6352
+ },
6353
+ type: {
6354
+ kind: "struct",
6355
+ fields: [
6356
+ {
6357
+ name: "cliff_fee_numerator",
6358
+ type: "u64"
6359
+ },
6360
+ {
6361
+ name: "base_fee_mode",
6362
+ type: "u8"
6363
+ },
6364
+ {
6365
+ name: "padding",
6366
+ type: {
6367
+ array: [
6368
+ "u8",
6369
+ 5
6370
+ ]
6371
+ }
6372
+ },
6373
+ {
6374
+ name: "number_of_period",
6375
+ type: "u16"
6376
+ },
6377
+ {
6378
+ name: "sqrt_price_step_bps",
6379
+ type: "u32"
6380
+ },
6381
+ {
6382
+ name: "scheduler_expiration_duration",
6383
+ type: "u32"
6384
+ },
6385
+ {
6386
+ name: "reduction_factor",
6387
+ type: "u64"
6388
+ }
6389
+ ]
6390
+ }
6391
+ },
6392
+ {
6393
+ name: "PodAlignedFeeRateLimiter",
6394
+ serialization: "bytemuck",
6395
+ repr: {
6396
+ kind: "c"
6397
+ },
6398
+ type: {
6399
+ kind: "struct",
6400
+ fields: [
6401
+ {
6402
+ name: "cliff_fee_numerator",
6403
+ type: "u64"
6404
+ },
6405
+ {
6406
+ name: "base_fee_mode",
6407
+ type: "u8"
6408
+ },
6409
+ {
6410
+ name: "padding",
6411
+ type: {
6412
+ array: [
6413
+ "u8",
6414
+ 5
6415
+ ]
6416
+ }
6417
+ },
6418
+ {
6419
+ name: "fee_increment_bps",
6420
+ type: "u16"
6421
+ },
6422
+ {
6423
+ name: "max_limiter_duration",
6424
+ type: "u32"
6425
+ },
6426
+ {
6427
+ name: "max_fee_bps",
6428
+ type: "u32"
6429
+ },
6430
+ {
6431
+ name: "reference_amount",
6432
+ type: "u64"
6433
+ }
6434
+ ]
6435
+ }
6436
+ },
6437
+ {
6438
+ name: "PodAlignedFeeTimeScheduler",
6439
+ serialization: "bytemuck",
6440
+ repr: {
6441
+ kind: "c"
6442
+ },
6178
6443
  type: {
6179
6444
  kind: "struct",
6180
6445
  fields: [
6181
6446
  {
6182
- name: "liquidity",
6183
- docs: [
6184
- "initialize liquidity"
6185
- ],
6186
- type: "u128"
6447
+ name: "cliff_fee_numerator",
6448
+ type: "u64"
6187
6449
  },
6188
6450
  {
6189
- name: "sqrt_price",
6190
- docs: [
6191
- "The init price of the pool as a sqrt(token_b/token_a) Q64.64 value"
6192
- ],
6193
- type: "u128"
6451
+ name: "base_fee_mode",
6452
+ type: "u8"
6194
6453
  },
6195
6454
  {
6196
- name: "activation_point",
6197
- docs: [
6198
- "activation point"
6199
- ],
6455
+ name: "padding",
6200
6456
  type: {
6201
- option: "u64"
6457
+ array: [
6458
+ "u8",
6459
+ 5
6460
+ ]
6202
6461
  }
6462
+ },
6463
+ {
6464
+ name: "number_of_period",
6465
+ type: "u16"
6466
+ },
6467
+ {
6468
+ name: "period_frequency",
6469
+ type: "u64"
6470
+ },
6471
+ {
6472
+ name: "reduction_factor",
6473
+ type: "u64"
6203
6474
  }
6204
6475
  ]
6205
6476
  }
@@ -6367,7 +6638,7 @@ var cp_amm_default = {
6367
6638
  {
6368
6639
  name: "collect_fee_mode",
6369
6640
  docs: [
6370
- "0 is collect fee in both token, 1 only collect fee in token a, 2 only collect fee in token b"
6641
+ "0 is collect fee in both token, 1 only collect fee only in token b"
6371
6642
  ],
6372
6643
  type: "u8"
6373
6644
  },
@@ -6488,18 +6759,6 @@ var cp_amm_default = {
6488
6759
  }
6489
6760
  }
6490
6761
  },
6491
- {
6492
- name: "padding",
6493
- docs: [
6494
- "padding"
6495
- ],
6496
- type: {
6497
- array: [
6498
- "u8",
6499
- 3
6500
- ]
6501
- }
6502
- },
6503
6762
  {
6504
6763
  name: "dynamic_fee",
6505
6764
  docs: [
@@ -6529,7 +6788,7 @@ var cp_amm_default = {
6529
6788
  name: "base_fee",
6530
6789
  type: {
6531
6790
  defined: {
6532
- name: "BaseFeeConfig"
6791
+ name: "BaseFeeInfo"
6533
6792
  }
6534
6793
  }
6535
6794
  },
@@ -6651,16 +6910,8 @@ var cp_amm_default = {
6651
6910
  }
6652
6911
  },
6653
6912
  {
6654
- name: "padding_1",
6655
- docs: [
6656
- "padding"
6657
- ],
6658
- type: {
6659
- array: [
6660
- "u64",
6661
- 2
6662
- ]
6663
- }
6913
+ name: "init_sqrt_price",
6914
+ type: "u128"
6664
6915
  }
6665
6916
  ]
6666
6917
  }
@@ -7240,41 +7491,6 @@ var cp_amm_default = {
7240
7491
  ]
7241
7492
  }
7242
7493
  },
7243
- {
7244
- name: "SwapResult",
7245
- docs: [
7246
- "Encodes all results of swapping"
7247
- ],
7248
- type: {
7249
- kind: "struct",
7250
- fields: [
7251
- {
7252
- name: "output_amount",
7253
- type: "u64"
7254
- },
7255
- {
7256
- name: "next_sqrt_price",
7257
- type: "u128"
7258
- },
7259
- {
7260
- name: "lp_fee",
7261
- type: "u64"
7262
- },
7263
- {
7264
- name: "protocol_fee",
7265
- type: "u64"
7266
- },
7267
- {
7268
- name: "partner_fee",
7269
- type: "u64"
7270
- },
7271
- {
7272
- name: "referral_fee",
7273
- type: "u64"
7274
- }
7275
- ]
7276
- }
7277
- },
7278
7494
  {
7279
7495
  name: "SwapResult2",
7280
7496
  type: {
@@ -7353,6 +7569,41 @@ var cp_amm_default = {
7353
7569
  ]
7354
7570
  }
7355
7571
  },
7572
+ {
7573
+ name: "UpdatePoolFeesParameters",
7574
+ type: {
7575
+ kind: "struct",
7576
+ fields: [
7577
+ {
7578
+ name: "cliff_fee_numerator",
7579
+ docs: [
7580
+ "Base fee update mode:",
7581
+ "- None: skip base fee update",
7582
+ "- Some: update new cliff_fee_numerator if base fee is static"
7583
+ ],
7584
+ type: {
7585
+ option: "u64"
7586
+ }
7587
+ },
7588
+ {
7589
+ name: "dynamic_fee",
7590
+ docs: [
7591
+ "Dynamic fee update mode:",
7592
+ "- None: skip dynamic fee update",
7593
+ "- Some(with default value): disable dynamic fee",
7594
+ "- Some(with non default value): enable dynamic fee if disabled or update dynamic fee if enabled"
7595
+ ],
7596
+ type: {
7597
+ option: {
7598
+ defined: {
7599
+ name: "DynamicFeeParameters"
7600
+ }
7601
+ }
7602
+ }
7603
+ }
7604
+ ]
7605
+ }
7606
+ },
7356
7607
  {
7357
7608
  name: "UserRewardInfo",
7358
7609
  serialization: "bytemuck",
@@ -7479,6 +7730,94 @@ var cp_amm_default = {
7479
7730
  ]
7480
7731
  }
7481
7732
  }
7733
+ ],
7734
+ constants: [
7735
+ {
7736
+ name: "BIN_STEP_BPS_DEFAULT",
7737
+ type: "u16",
7738
+ value: "1"
7739
+ },
7740
+ {
7741
+ name: "BIN_STEP_U128_DEFAULT_LE_BYTES",
7742
+ type: {
7743
+ array: [
7744
+ "u8",
7745
+ 16
7746
+ ]
7747
+ },
7748
+ value: "[203, 16, 199, 186, 184, 141, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0]"
7749
+ },
7750
+ {
7751
+ name: "CUSTOMIZABLE_POOL_PREFIX",
7752
+ type: "bytes",
7753
+ value: "[99, 112, 111, 111, 108]"
7754
+ },
7755
+ {
7756
+ name: "FEE_DENOMINATOR",
7757
+ docs: [
7758
+ "Default fee denominator. DO NOT simply update it as it will break logic that depends on it as default value."
7759
+ ],
7760
+ type: "u64",
7761
+ value: "1000000000"
7762
+ },
7763
+ {
7764
+ name: "MAX_BASIS_POINT",
7765
+ docs: [
7766
+ "Max basis point. 100% in pct"
7767
+ ],
7768
+ type: "u64",
7769
+ value: "10000"
7770
+ },
7771
+ {
7772
+ name: "MAX_SQRT_PRICE_LE_BYTES",
7773
+ type: {
7774
+ array: [
7775
+ "u8",
7776
+ 16
7777
+ ]
7778
+ },
7779
+ value: "[155, 87, 105, 78, 169, 26, 92, 132, 177, 196, 254, 255, 0, 0, 0, 0]"
7780
+ },
7781
+ {
7782
+ name: "MIN_SQRT_PRICE_LE_BYTES",
7783
+ type: {
7784
+ array: [
7785
+ "u8",
7786
+ 16
7787
+ ]
7788
+ },
7789
+ value: "[80, 59, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]"
7790
+ },
7791
+ {
7792
+ name: "POOL_AUTHORITY_PREFIX",
7793
+ type: "bytes",
7794
+ value: "[112, 111, 111, 108, 95, 97, 117, 116, 104, 111, 114, 105, 116, 121]"
7795
+ },
7796
+ {
7797
+ name: "POOL_PREFIX",
7798
+ type: "bytes",
7799
+ value: "[112, 111, 111, 108]"
7800
+ },
7801
+ {
7802
+ name: "POSITION_NFT_ACCOUNT_PREFIX",
7803
+ type: "bytes",
7804
+ value: "[112, 111, 115, 105, 116, 105, 111, 110, 95, 110, 102, 116, 95, 97, 99, 99, 111, 117, 110, 116]"
7805
+ },
7806
+ {
7807
+ name: "POSITION_PREFIX",
7808
+ type: "bytes",
7809
+ value: "[112, 111, 115, 105, 116, 105, 111, 110]"
7810
+ },
7811
+ {
7812
+ name: "SPLIT_POSITION_DENOMINATOR",
7813
+ type: "u32",
7814
+ value: "1000000000"
7815
+ },
7816
+ {
7817
+ name: "TOKEN_VAULT_PREFIX",
7818
+ type: "bytes",
7819
+ value: "[116, 111, 107, 101, 110, 95, 118, 97, 117, 108, 116]"
7820
+ }
7482
7821
  ]
7483
7822
  };
7484
7823
 
@@ -7501,9 +7840,11 @@ var ActivationPoint = /* @__PURE__ */ ((ActivationPoint2) => {
7501
7840
  return ActivationPoint2;
7502
7841
  })(ActivationPoint || {});
7503
7842
  var BaseFeeMode = /* @__PURE__ */ ((BaseFeeMode3) => {
7504
- BaseFeeMode3[BaseFeeMode3["FeeSchedulerLinear"] = 0] = "FeeSchedulerLinear";
7505
- BaseFeeMode3[BaseFeeMode3["FeeSchedulerExponential"] = 1] = "FeeSchedulerExponential";
7843
+ BaseFeeMode3[BaseFeeMode3["FeeTimeSchedulerLinear"] = 0] = "FeeTimeSchedulerLinear";
7844
+ BaseFeeMode3[BaseFeeMode3["FeeTimeSchedulerExponential"] = 1] = "FeeTimeSchedulerExponential";
7506
7845
  BaseFeeMode3[BaseFeeMode3["RateLimiter"] = 2] = "RateLimiter";
7846
+ BaseFeeMode3[BaseFeeMode3["FeeMarketCapSchedulerLinear"] = 3] = "FeeMarketCapSchedulerLinear";
7847
+ BaseFeeMode3[BaseFeeMode3["FeeMarketCapSchedulerExponential"] = 4] = "FeeMarketCapSchedulerExponential";
7507
7848
  return BaseFeeMode3;
7508
7849
  })(BaseFeeMode || {});
7509
7850
  var CollectFeeMode = /* @__PURE__ */ ((CollectFeeMode3) => {
@@ -7521,10 +7862,10 @@ var ActivationType = /* @__PURE__ */ ((ActivationType3) => {
7521
7862
  ActivationType3[ActivationType3["Timestamp"] = 1] = "Timestamp";
7522
7863
  return ActivationType3;
7523
7864
  })(ActivationType || {});
7524
- var PoolVersion = /* @__PURE__ */ ((PoolVersion5) => {
7525
- PoolVersion5[PoolVersion5["V0"] = 0] = "V0";
7526
- PoolVersion5[PoolVersion5["V1"] = 1] = "V1";
7527
- return PoolVersion5;
7865
+ var PoolVersion = /* @__PURE__ */ ((PoolVersion4) => {
7866
+ PoolVersion4[PoolVersion4["V0"] = 0] = "V0";
7867
+ PoolVersion4[PoolVersion4["V1"] = 1] = "V1";
7868
+ return PoolVersion4;
7528
7869
  })(PoolVersion || {});
7529
7870
  var PoolStatus = /* @__PURE__ */ ((PoolStatus2) => {
7530
7871
  PoolStatus2[PoolStatus2["Enable"] = 0] = "Enable";
@@ -7578,7 +7919,8 @@ var U16_MAX = 65535;
7578
7919
  var MAX_RATE_LIMITER_DURATION_IN_SECONDS = 43200;
7579
7920
  var MAX_RATE_LIMITER_DURATION_IN_SLOTS = 108e3;
7580
7921
  var SPLIT_POSITION_DENOMINATOR = 1e9;
7581
- var CURRENT_POOL_VERSION = 0 /* V0 */;
7922
+ var CURRENT_POOL_VERSION = 1 /* V1 */;
7923
+ var FEE_PADDING = Array.from(Buffer.alloc(3));
7582
7924
 
7583
7925
  // src/pda.ts
7584
7926
  function getFirstKey(key1, key2) {
@@ -7666,6 +8008,12 @@ function derivePositionNftAccount(positionNftMint) {
7666
8008
  CP_AMM_PROGRAM_ID
7667
8009
  )[0];
7668
8010
  }
8011
+ function deriveOperatorAddress(whitelistedAddress) {
8012
+ return PublicKey2.findProgramAddressSync(
8013
+ [Buffer.from("operator"), whitelistedAddress.toBuffer()],
8014
+ CP_AMM_PROGRAM_ID
8015
+ )[0];
8016
+ }
7669
8017
 
7670
8018
  // src/helpers/token.ts
7671
8019
  import { bs58 } from "@coral-xyz/anchor/dist/cjs/utils/bytes";
@@ -8100,7 +8448,8 @@ import {
8100
8448
  calculateFee,
8101
8449
  getEpochFee,
8102
8450
  getTransferFeeConfig,
8103
- MAX_FEE_BASIS_POINTS
8451
+ MAX_FEE_BASIS_POINTS,
8452
+ TOKEN_2022_PROGRAM_ID as TOKEN_2022_PROGRAM_ID2
8104
8453
  } from "@solana/spl-token";
8105
8454
  function calculatePreFeeAmount(transferFee, postFeeAmount) {
8106
8455
  if (postFeeAmount.isZero()) {
@@ -8175,6 +8524,61 @@ function calculateTransferFeeExcludedAmount(transferFeeIncludedAmount, mint, cur
8175
8524
  transferFee: new BN3(transferFee.toString())
8176
8525
  };
8177
8526
  }
8527
+ function hasTransferHookExtension(connection, mint) {
8528
+ return __async(this, null, function* () {
8529
+ try {
8530
+ const mintAccountInfo = yield connection.getAccountInfo(mint);
8531
+ if (!mintAccountInfo) {
8532
+ return { hasTransferHook: false };
8533
+ }
8534
+ const isToken2022 = mintAccountInfo.owner.equals(TOKEN_2022_PROGRAM_ID2);
8535
+ if (!isToken2022) {
8536
+ return { hasTransferHook: false };
8537
+ }
8538
+ const parsedInfo = yield connection.getParsedAccountInfo(mint);
8539
+ if (parsedInfo.value && "parsed" in parsedInfo.value.data) {
8540
+ const parsedData = parsedInfo.value.data.parsed;
8541
+ if (parsedData && parsedData.info && parsedData.info.extensions) {
8542
+ const extensions = parsedData.info.extensions;
8543
+ const transferHookExtension = extensions.find(
8544
+ (ext) => ext.extension === "transferHook"
8545
+ );
8546
+ if (transferHookExtension && transferHookExtension.state) {
8547
+ return {
8548
+ hasTransferHook: true,
8549
+ transferHookState: {
8550
+ authority: transferHookExtension.state.authority,
8551
+ programId: transferHookExtension.state.programId
8552
+ }
8553
+ };
8554
+ }
8555
+ }
8556
+ }
8557
+ return { hasTransferHook: false };
8558
+ } catch (error) {
8559
+ return { hasTransferHook: false };
8560
+ }
8561
+ });
8562
+ }
8563
+ function validateNoTransferHook(connection, tokenAMint, tokenBMint) {
8564
+ return __async(this, null, function* () {
8565
+ var _a, _b;
8566
+ const [tokenACheck, tokenBCheck] = yield Promise.all([
8567
+ hasTransferHookExtension(connection, tokenAMint),
8568
+ hasTransferHookExtension(connection, tokenBMint)
8569
+ ]);
8570
+ if (tokenACheck.hasTransferHook) {
8571
+ throw new Error(
8572
+ `Token A (${tokenAMint.toBase58()}) has a transfer hook extension. Transfer hook might prevent permissionless pool creation. Transfer hook program: ${(_a = tokenACheck.transferHookState) == null ? void 0 : _a.programId}`
8573
+ );
8574
+ }
8575
+ if (tokenBCheck.hasTransferHook) {
8576
+ throw new Error(
8577
+ `Token B (${tokenBMint.toBase58()}) has a transfer hook extension. Transfer hook might prevent permissionless pool creation. Transfer hook program: ${(_b = tokenBCheck.transferHookState) == null ? void 0 : _b.programId}`
8578
+ );
8579
+ }
8580
+ });
8581
+ }
8178
8582
 
8179
8583
  // src/helpers/vestings.ts
8180
8584
  import { BN as BN4 } from "@coral-xyz/anchor";
@@ -8218,10 +8622,10 @@ function getAvailableVestingLiquidity(vestingData, currentPoint) {
8218
8622
  }
8219
8623
 
8220
8624
  // src/helpers/validation.ts
8221
- import BN14 from "bn.js";
8625
+ import BN16 from "bn.js";
8222
8626
 
8223
8627
  // src/math/poolFees/baseFee.ts
8224
- import BN9 from "bn.js";
8628
+ import BN11 from "bn.js";
8225
8629
 
8226
8630
  // src/math/poolFees/rateLimiter.ts
8227
8631
  import BN7 from "bn.js";
@@ -8420,35 +8824,33 @@ function getTotalFeeNumerator(poolFees, baseFeeNumerator, maxFeeNumerator) {
8420
8824
  const totalFeeNumerator = dynamicFeeNumerator.add(baseFeeNumerator);
8421
8825
  return BN6.min(totalFeeNumerator, maxFeeNumerator);
8422
8826
  }
8423
- function getTotalTradingFeeFromIncludedFeeAmount(poolFees, currentPoint, activationPoint, includedFeeAmount, tradeDirection, maxFeeNumerator) {
8827
+ function getTotalTradingFeeFromIncludedFeeAmount(program, poolFees, currentPoint, activationPoint, includedFeeAmount, tradeDirection, maxFeeNumerator, initSqrtPrice, currentSqrtPrice) {
8424
8828
  const baseFeeHandler = getBaseFeeHandler(
8425
- poolFees.baseFee.cliffFeeNumerator,
8426
- poolFees.baseFee.firstFactor,
8427
- poolFees.baseFee.secondFactor,
8428
- poolFees.baseFee.thirdFactor,
8429
- poolFees.baseFee.baseFeeMode
8829
+ program,
8830
+ poolFees.baseFee.baseFeeInfo.data
8430
8831
  );
8431
8832
  const baseFeeNumerator = baseFeeHandler.getBaseFeeNumeratorFromIncludedFeeAmount(
8432
8833
  currentPoint,
8433
8834
  activationPoint,
8434
8835
  tradeDirection,
8435
- includedFeeAmount
8836
+ includedFeeAmount,
8837
+ initSqrtPrice,
8838
+ currentSqrtPrice
8436
8839
  );
8437
8840
  return getTotalFeeNumerator(poolFees, baseFeeNumerator, maxFeeNumerator);
8438
8841
  }
8439
- function getTotalTradingFeeFromExcludedFeeAmount(poolFees, currentPoint, activationPoint, excludedFeeAmount, tradeDirection, maxFeeNumerator) {
8842
+ function getTotalTradingFeeFromExcludedFeeAmount(program, poolFees, currentPoint, activationPoint, excludedFeeAmount, tradeDirection, maxFeeNumerator, initSqrtPrice, currentSqrtPrice) {
8440
8843
  const baseFeeHandler = getBaseFeeHandler(
8441
- poolFees.baseFee.cliffFeeNumerator,
8442
- poolFees.baseFee.firstFactor,
8443
- poolFees.baseFee.secondFactor,
8444
- poolFees.baseFee.thirdFactor,
8445
- poolFees.baseFee.baseFeeMode
8844
+ program,
8845
+ poolFees.baseFee.baseFeeInfo.data
8446
8846
  );
8447
8847
  const baseFeeNumerator = baseFeeHandler.getBaseFeeNumeratorFromExcludedFeeAmount(
8448
8848
  currentPoint,
8449
8849
  activationPoint,
8450
8850
  tradeDirection,
8451
- excludedFeeAmount
8851
+ excludedFeeAmount,
8852
+ initSqrtPrice,
8853
+ currentSqrtPrice
8452
8854
  );
8453
8855
  return getTotalFeeNumerator(poolFees, baseFeeNumerator, maxFeeNumerator);
8454
8856
  }
@@ -8763,31 +9165,120 @@ function getFeeNumeratorFromExcludedFeeAmount(excludedFeeAmount, referenceAmount
8763
9165
  if (feeNumerator.lt(cliffFeeNumerator)) {
8764
9166
  throw new Error("feeNumerator is less than cliffFeeNumerator");
8765
9167
  }
8766
- return feeNumerator;
8767
- }
8768
-
8769
- // src/math/poolFees/feeScheduler.ts
8770
- import BN8 from "bn.js";
8771
- function getMaxBaseFeeNumerator(cliffFeeNumerator) {
8772
- return cliffFeeNumerator;
9168
+ return feeNumerator;
9169
+ }
9170
+
9171
+ // src/math/poolFees/feeTimeScheduler.ts
9172
+ import BN9 from "bn.js";
9173
+
9174
+ // src/math/poolFees/feeScheduler.ts
9175
+ import BN8 from "bn.js";
9176
+ function getFeeNumeratorOnLinearFeeScheduler(cliffFeeNumerator, reductionFactor, period) {
9177
+ const reduction = new BN8(period).mul(reductionFactor);
9178
+ return cliffFeeNumerator.sub(reduction);
9179
+ }
9180
+ function getFeeNumeratorOnExponentialFeeScheduler(cliffFeeNumerator, reductionFactor, period) {
9181
+ if (period === 0) {
9182
+ return cliffFeeNumerator;
9183
+ }
9184
+ const basisPointMax = new BN8(BASIS_POINT_MAX);
9185
+ const bps = new BN8(reductionFactor).shln(64).div(basisPointMax);
9186
+ const base = ONE_Q64.sub(bps);
9187
+ const result = pow(base, new BN8(period));
9188
+ return cliffFeeNumerator.mul(result).div(ONE_Q64);
9189
+ }
9190
+ function getMaxBaseFeeNumerator(cliffFeeNumerator) {
9191
+ return cliffFeeNumerator;
9192
+ }
9193
+
9194
+ // src/math/poolFees/feeTimeScheduler.ts
9195
+ function toPodAlignedFeeTimeScheduler(borshFeeScheduler) {
9196
+ return {
9197
+ cliffFeeNumerator: borshFeeScheduler.cliffFeeNumerator,
9198
+ baseFeeMode: borshFeeScheduler.baseFeeMode,
9199
+ padding: new Array(16).fill(0),
9200
+ // Assumes default/rust alignment of 16
9201
+ numberOfPeriod: borshFeeScheduler.numberOfPeriod,
9202
+ periodFrequency: borshFeeScheduler.periodFrequency,
9203
+ reductionFactor: borshFeeScheduler.reductionFactor
9204
+ };
9205
+ }
9206
+ function toBorshFeeTimeScheduler(podAlignedFeeScheduler) {
9207
+ return {
9208
+ cliffFeeNumerator: podAlignedFeeScheduler.cliffFeeNumerator,
9209
+ numberOfPeriod: podAlignedFeeScheduler.numberOfPeriod,
9210
+ periodFrequency: podAlignedFeeScheduler.periodFrequency,
9211
+ reductionFactor: podAlignedFeeScheduler.reductionFactor,
9212
+ baseFeeMode: podAlignedFeeScheduler.baseFeeMode,
9213
+ padding: new Array(16).fill(0)
9214
+ // Assumes default/rust alignment of 16
9215
+ };
9216
+ }
9217
+ function getFeeTimeBaseFeeNumeratorByPeriod(cliffFeeNumerator, numberOfPeriod, period, reductionFactor, feeTimeSchedulerMode) {
9218
+ const periodValue = BN9.min(period, new BN9(numberOfPeriod));
9219
+ const periodNumber = periodValue.toNumber();
9220
+ if (periodNumber > U16_MAX) {
9221
+ throw new Error("Math overflow");
9222
+ }
9223
+ switch (feeTimeSchedulerMode) {
9224
+ case 0 /* FeeTimeSchedulerLinear */: {
9225
+ const feeNumerator = getFeeNumeratorOnLinearFeeScheduler(
9226
+ cliffFeeNumerator,
9227
+ reductionFactor,
9228
+ periodNumber
9229
+ );
9230
+ return feeNumerator;
9231
+ }
9232
+ case 1 /* FeeTimeSchedulerExponential */: {
9233
+ const feeNumerator = getFeeNumeratorOnExponentialFeeScheduler(
9234
+ cliffFeeNumerator,
9235
+ reductionFactor,
9236
+ periodNumber
9237
+ );
9238
+ return feeNumerator;
9239
+ }
9240
+ default:
9241
+ throw new Error("Invalid fee time scheduler mode");
9242
+ }
9243
+ }
9244
+ function getFeeTimeBaseFeeNumerator(cliffFeeNumerator, numberOfPeriod, periodFrequency, reductionFactor, feeTimeSchedulerMode, currentPoint, activationPoint) {
9245
+ if (periodFrequency.isZero()) {
9246
+ return cliffFeeNumerator;
9247
+ }
9248
+ let period;
9249
+ if (currentPoint.lt(activationPoint)) {
9250
+ period = new BN9(numberOfPeriod);
9251
+ } else {
9252
+ period = currentPoint.sub(activationPoint).div(periodFrequency);
9253
+ if (period.gt(new BN9(numberOfPeriod))) {
9254
+ period = new BN9(numberOfPeriod);
9255
+ }
9256
+ }
9257
+ return getFeeTimeBaseFeeNumeratorByPeriod(
9258
+ cliffFeeNumerator,
9259
+ numberOfPeriod,
9260
+ period,
9261
+ reductionFactor,
9262
+ feeTimeSchedulerMode
9263
+ );
8773
9264
  }
8774
- function getMinBaseFeeNumerator(cliffFeeNumerator, numberOfPeriod, reductionFactor, feeSchedulerMode) {
8775
- return getBaseFeeNumeratorByPeriod(
9265
+ function getFeeTimeMinBaseFeeNumerator(cliffFeeNumerator, numberOfPeriod, reductionFactor, feeTimeSchedulerMode) {
9266
+ return getFeeTimeBaseFeeNumeratorByPeriod(
8776
9267
  cliffFeeNumerator,
8777
9268
  numberOfPeriod,
8778
- new BN8(numberOfPeriod),
9269
+ new BN9(numberOfPeriod),
8779
9270
  reductionFactor,
8780
- feeSchedulerMode
9271
+ feeTimeSchedulerMode
8781
9272
  );
8782
9273
  }
8783
- function getBaseFeeNumeratorByPeriod(cliffFeeNumerator, numberOfPeriod, period, reductionFactor, feeSchedulerMode) {
8784
- const periodValue = BN8.min(period, new BN8(numberOfPeriod));
9274
+
9275
+ // src/math/poolFees/feeMarketCapScheduler.ts
9276
+ import BN10 from "bn.js";
9277
+ function getFeeMarketCapBaseFeeNumeratorByPeriod(cliffFeeNumerator, numberOfPeriod, period, reductionFactor, feeMarketCapSchedulerMode) {
9278
+ const periodValue = BN10.min(period, new BN10(numberOfPeriod));
8785
9279
  const periodNumber = periodValue.toNumber();
8786
- if (periodNumber > U16_MAX) {
8787
- throw new Error("Math overflow");
8788
- }
8789
- switch (feeSchedulerMode) {
8790
- case 0 /* FeeSchedulerLinear */: {
9280
+ switch (feeMarketCapSchedulerMode) {
9281
+ case 3 /* FeeMarketCapSchedulerLinear */: {
8791
9282
  const feeNumerator = getFeeNumeratorOnLinearFeeScheduler(
8792
9283
  cliffFeeNumerator,
8793
9284
  reductionFactor,
@@ -8795,7 +9286,7 @@ function getBaseFeeNumeratorByPeriod(cliffFeeNumerator, numberOfPeriod, period,
8795
9286
  );
8796
9287
  return feeNumerator;
8797
9288
  }
8798
- case 1 /* FeeSchedulerExponential */: {
9289
+ case 4 /* FeeMarketCapSchedulerExponential */: {
8799
9290
  const feeNumerator = getFeeNumeratorOnExponentialFeeScheduler(
8800
9291
  cliffFeeNumerator,
8801
9292
  reductionFactor,
@@ -8804,42 +9295,46 @@ function getBaseFeeNumeratorByPeriod(cliffFeeNumerator, numberOfPeriod, period,
8804
9295
  return feeNumerator;
8805
9296
  }
8806
9297
  default:
8807
- throw new Error("Invalid fee scheduler mode");
8808
- }
8809
- }
8810
- function getFeeNumeratorOnLinearFeeScheduler(cliffFeeNumerator, reductionFactor, period) {
8811
- const reduction = new BN8(period).mul(reductionFactor);
8812
- return cliffFeeNumerator.sub(reduction);
8813
- }
8814
- function getFeeNumeratorOnExponentialFeeScheduler(cliffFeeNumerator, reductionFactor, period) {
8815
- if (period === 0) {
8816
- return cliffFeeNumerator;
9298
+ throw new Error("Invalid fee market cap scheduler mode");
8817
9299
  }
8818
- const basisPointMax = new BN8(BASIS_POINT_MAX);
8819
- const bps = new BN8(reductionFactor).shln(64).div(basisPointMax);
8820
- const base = ONE_Q64.sub(bps);
8821
- const result = pow(base, new BN8(period));
8822
- return cliffFeeNumerator.mul(result).div(ONE_Q64);
8823
9300
  }
8824
- function getBaseFeeNumerator(cliffFeeNumerator, numberOfPeriod, periodFrequency, reductionFactor, feeSchedulerMode, currentPoint, activationPoint) {
8825
- if (periodFrequency.isZero()) {
8826
- return cliffFeeNumerator;
8827
- }
9301
+ function getFeeMarketCapBaseFeeNumerator(cliffFeeNumerator, numberOfPeriod, sqrtPriceStepBps, schedulerExpirationDuration, reductionFactor, feeMarketCapSchedulerMode, currentPoint, activationPoint, initSqrtPrice, currentSqrtPrice) {
9302
+ const schedulerExpirationPoint = activationPoint.add(
9303
+ new BN10(schedulerExpirationDuration)
9304
+ );
8828
9305
  let period;
8829
- if (currentPoint.lt(activationPoint)) {
8830
- period = new BN8(numberOfPeriod);
9306
+ if (currentPoint.gt(schedulerExpirationPoint) || currentPoint.lt(activationPoint)) {
9307
+ period = new BN10(numberOfPeriod);
8831
9308
  } else {
8832
- period = currentPoint.sub(activationPoint).div(periodFrequency);
8833
- if (period.gt(new BN8(numberOfPeriod))) {
8834
- period = new BN8(numberOfPeriod);
9309
+ if (currentSqrtPrice.lte(initSqrtPrice)) {
9310
+ period = new BN10(0);
9311
+ } else {
9312
+ const maxBps = new BN10(BASIS_POINT_MAX);
9313
+ const stepBps = new BN10(sqrtPriceStepBps);
9314
+ const passedPeriod = currentSqrtPrice.sub(initSqrtPrice).mul(maxBps).div(initSqrtPrice).div(stepBps);
9315
+ if (passedPeriod.gt(new BN10(numberOfPeriod))) {
9316
+ period = new BN10(numberOfPeriod);
9317
+ } else {
9318
+ period = passedPeriod;
9319
+ }
8835
9320
  }
9321
+ period = BN10.min(period, new BN10(numberOfPeriod));
8836
9322
  }
8837
- return getBaseFeeNumeratorByPeriod(
9323
+ return getFeeMarketCapBaseFeeNumeratorByPeriod(
8838
9324
  cliffFeeNumerator,
8839
9325
  numberOfPeriod,
8840
9326
  period,
8841
9327
  reductionFactor,
8842
- feeSchedulerMode
9328
+ feeMarketCapSchedulerMode
9329
+ );
9330
+ }
9331
+ function getFeeMarketCapMinBaseFeeNumerator(cliffFeeNumerator, numberOfPeriod, reductionFactor, feeMarketCapSchedulerMode) {
9332
+ return getFeeMarketCapBaseFeeNumeratorByPeriod(
9333
+ cliffFeeNumerator,
9334
+ numberOfPeriod,
9335
+ new BN10(numberOfPeriod),
9336
+ reductionFactor,
9337
+ feeMarketCapSchedulerMode
8843
9338
  );
8844
9339
  }
8845
9340
 
@@ -8864,7 +9359,7 @@ var FeeRateLimiter = class {
8864
9359
  poolVersion
8865
9360
  );
8866
9361
  }
8867
- getBaseFeeNumeratorFromIncludedFeeAmount(currentPoint, activationPoint, tradeDirection, includedFeeAmount) {
9362
+ getBaseFeeNumeratorFromIncludedFeeAmount(currentPoint, activationPoint, tradeDirection, includedFeeAmount, _initSqrtPrice, _currentSqrtPrice) {
8868
9363
  if (isRateLimiterApplied(
8869
9364
  this.referenceAmount,
8870
9365
  this.maxLimiterDuration,
@@ -8885,7 +9380,7 @@ var FeeRateLimiter = class {
8885
9380
  return this.cliffFeeNumerator;
8886
9381
  }
8887
9382
  }
8888
- getBaseFeeNumeratorFromExcludedFeeAmount(currentPoint, activationPoint, tradeDirection, excludedFeeAmount) {
9383
+ getBaseFeeNumeratorFromExcludedFeeAmount(currentPoint, activationPoint, tradeDirection, excludedFeeAmount, _initSqrtPrice, _currentSqrtPrice) {
8889
9384
  if (isRateLimiterApplied(
8890
9385
  this.referenceAmount,
8891
9386
  this.maxLimiterDuration,
@@ -8906,88 +9401,178 @@ var FeeRateLimiter = class {
8906
9401
  return this.cliffFeeNumerator;
8907
9402
  }
8908
9403
  }
9404
+ validateBaseFeeIsStatic(currentPoint, activationPoint) {
9405
+ return validateFeeRateLimiterBaseFeeIsStatic(
9406
+ currentPoint,
9407
+ activationPoint,
9408
+ this.maxLimiterDuration,
9409
+ this.referenceAmount,
9410
+ this.maxFeeBps,
9411
+ this.feeIncrementBps
9412
+ );
9413
+ }
9414
+ getMinBaseFeeNumerator() {
9415
+ return this.cliffFeeNumerator;
9416
+ }
8909
9417
  };
8910
- var FeeScheduler = class {
8911
- constructor(cliffFeeNumerator, numberOfPeriod, periodFrequency, reductionFactor, feeSchedulerMode) {
9418
+ var FeeTimeScheduler = class {
9419
+ constructor(cliffFeeNumerator, numberOfPeriod, periodFrequency, reductionFactor, feeTimeSchedulerMode) {
8912
9420
  this.cliffFeeNumerator = cliffFeeNumerator;
8913
9421
  this.numberOfPeriod = numberOfPeriod;
8914
9422
  this.periodFrequency = periodFrequency;
8915
9423
  this.reductionFactor = reductionFactor;
8916
- this.feeSchedulerMode = feeSchedulerMode;
9424
+ this.feeTimeSchedulerMode = feeTimeSchedulerMode;
8917
9425
  }
8918
9426
  validate(collectFeeMode, activationType, poolVersion) {
8919
- return validateFeeScheduler(
9427
+ return validateFeeTimeScheduler(
8920
9428
  this.numberOfPeriod,
8921
9429
  this.periodFrequency,
8922
9430
  this.reductionFactor,
8923
9431
  this.cliffFeeNumerator,
8924
- this.feeSchedulerMode,
9432
+ this.feeTimeSchedulerMode,
8925
9433
  poolVersion
8926
9434
  );
8927
9435
  }
8928
- getBaseFeeNumeratorFromIncludedFeeAmount(currentPoint, activationPoint) {
8929
- return getBaseFeeNumerator(
9436
+ getBaseFeeNumeratorFromIncludedFeeAmount(currentPoint, activationPoint, _tradeDirection, _includedFeeAmount, _initSqrtPrice, _currentSqrtPrice) {
9437
+ return getFeeTimeBaseFeeNumerator(
8930
9438
  this.cliffFeeNumerator,
8931
9439
  this.numberOfPeriod,
8932
9440
  this.periodFrequency,
8933
9441
  this.reductionFactor,
8934
- this.feeSchedulerMode,
9442
+ this.feeTimeSchedulerMode,
8935
9443
  currentPoint,
8936
9444
  activationPoint
8937
9445
  );
8938
9446
  }
8939
- getBaseFeeNumeratorFromExcludedFeeAmount(currentPoint, activationPoint) {
8940
- return getBaseFeeNumerator(
9447
+ getBaseFeeNumeratorFromExcludedFeeAmount(currentPoint, activationPoint, _tradeDirection, _excludedFeeAmount, _initSqrtPrice, _currentSqrtPrice) {
9448
+ return getFeeTimeBaseFeeNumerator(
8941
9449
  this.cliffFeeNumerator,
8942
9450
  this.numberOfPeriod,
8943
9451
  this.periodFrequency,
8944
9452
  this.reductionFactor,
8945
- this.feeSchedulerMode,
9453
+ this.feeTimeSchedulerMode,
8946
9454
  currentPoint,
8947
9455
  activationPoint
8948
9456
  );
8949
9457
  }
9458
+ validateBaseFeeIsStatic(currentPoint, activationPoint) {
9459
+ return validateFeeTimeSchedulerBaseFeeIsStatic(
9460
+ currentPoint,
9461
+ activationPoint,
9462
+ new BN11(this.numberOfPeriod),
9463
+ this.periodFrequency
9464
+ );
9465
+ }
9466
+ getMinBaseFeeNumerator() {
9467
+ return getFeeTimeMinBaseFeeNumerator(
9468
+ this.cliffFeeNumerator,
9469
+ this.numberOfPeriod,
9470
+ this.reductionFactor,
9471
+ this.feeTimeSchedulerMode
9472
+ );
9473
+ }
9474
+ };
9475
+ var FeeMarketCapScheduler = class {
9476
+ constructor(cliffFeeNumerator, numberOfPeriod, sqrtPriceStepBps, schedulerExpirationDuration, reductionFactor, feeMarketCapSchedulerMode) {
9477
+ this.cliffFeeNumerator = cliffFeeNumerator;
9478
+ this.numberOfPeriod = numberOfPeriod;
9479
+ this.sqrtPriceStepBps = sqrtPriceStepBps;
9480
+ this.schedulerExpirationDuration = schedulerExpirationDuration;
9481
+ this.reductionFactor = reductionFactor;
9482
+ this.feeMarketCapSchedulerMode = feeMarketCapSchedulerMode;
9483
+ }
9484
+ validate(_collectFeeMode, _activationType, poolVersion) {
9485
+ return validateFeeMarketCapScheduler(
9486
+ this.cliffFeeNumerator,
9487
+ this.numberOfPeriod,
9488
+ new BN11(this.sqrtPriceStepBps),
9489
+ this.reductionFactor,
9490
+ new BN11(this.schedulerExpirationDuration),
9491
+ this.feeMarketCapSchedulerMode,
9492
+ poolVersion
9493
+ );
9494
+ }
9495
+ getBaseFeeNumeratorFromIncludedFeeAmount(currentPoint, activationPoint, _tradeDirection, _includedFeeAmount, initSqrtPrice, currentSqrtPrice) {
9496
+ return getFeeMarketCapBaseFeeNumerator(
9497
+ this.cliffFeeNumerator,
9498
+ this.numberOfPeriod,
9499
+ this.sqrtPriceStepBps,
9500
+ this.schedulerExpirationDuration,
9501
+ this.reductionFactor,
9502
+ this.feeMarketCapSchedulerMode,
9503
+ currentPoint,
9504
+ activationPoint,
9505
+ initSqrtPrice,
9506
+ currentSqrtPrice
9507
+ );
9508
+ }
9509
+ getBaseFeeNumeratorFromExcludedFeeAmount(currentPoint, activationPoint, _tradeDirection, _excludedFeeAmount, initSqrtPrice, currentSqrtPrice) {
9510
+ return getFeeMarketCapBaseFeeNumerator(
9511
+ this.cliffFeeNumerator,
9512
+ this.numberOfPeriod,
9513
+ this.sqrtPriceStepBps,
9514
+ this.schedulerExpirationDuration,
9515
+ this.reductionFactor,
9516
+ this.feeMarketCapSchedulerMode,
9517
+ currentPoint,
9518
+ activationPoint,
9519
+ initSqrtPrice,
9520
+ currentSqrtPrice
9521
+ );
9522
+ }
9523
+ validateBaseFeeIsStatic(currentPoint, activationPoint) {
9524
+ return validateFeeMarketCapBaseFeeIsStatic(
9525
+ currentPoint,
9526
+ activationPoint,
9527
+ new BN11(this.schedulerExpirationDuration)
9528
+ );
9529
+ }
9530
+ getMinBaseFeeNumerator() {
9531
+ return getFeeMarketCapMinBaseFeeNumerator(
9532
+ this.cliffFeeNumerator,
9533
+ this.numberOfPeriod,
9534
+ this.reductionFactor,
9535
+ this.feeMarketCapSchedulerMode
9536
+ );
9537
+ }
8950
9538
  };
8951
- function getBaseFeeHandler(cliffFeeNumerator, firstFactor, secondFactor, thirdFactor, baseFeeMode) {
9539
+ function getBaseFeeHandler(program, rawData) {
9540
+ const data = Buffer.from(rawData);
9541
+ const modeIndex = data.readUInt8(8);
9542
+ const baseFeeMode = modeIndex;
8952
9543
  switch (baseFeeMode) {
8953
- case 0 /* FeeSchedulerLinear */:
8954
- case 1 /* FeeSchedulerExponential */: {
8955
- if (secondFactor.length < 8) {
8956
- throw new Error(
8957
- "TypeCastFailed: secondFactor must be at least 8 bytes"
8958
- );
8959
- }
8960
- const periodFrequency = new BN9(
8961
- Buffer.from(secondFactor.slice(0, 8)),
8962
- "le"
8963
- );
8964
- const feeScheduler = new FeeScheduler(
8965
- cliffFeeNumerator,
8966
- firstFactor,
8967
- periodFrequency,
8968
- thirdFactor,
8969
- baseFeeMode
9544
+ case 0 /* FeeTimeSchedulerLinear */:
9545
+ case 1 /* FeeTimeSchedulerExponential */: {
9546
+ const poolFees = decodePodAlignedFeeTimeScheduler(data);
9547
+ return new FeeTimeScheduler(
9548
+ poolFees.cliffFeeNumerator,
9549
+ poolFees.numberOfPeriod,
9550
+ poolFees.periodFrequency,
9551
+ poolFees.reductionFactor,
9552
+ poolFees.baseFeeMode
8970
9553
  );
8971
- return feeScheduler;
8972
9554
  }
8973
9555
  case 2 /* RateLimiter */: {
8974
- if (secondFactor.length < 8) {
8975
- throw new Error(
8976
- "TypeCastFailed: secondFactor must be at least 8 bytes"
8977
- );
8978
- }
8979
- const maxLimiterDuration = Buffer.from(
8980
- secondFactor.slice(0, 4)
8981
- ).readUInt32LE(0);
8982
- const maxFeeBps = Buffer.from(secondFactor.slice(4, 8)).readUInt32LE(0);
8983
- const feeRateLimiter = new FeeRateLimiter(
8984
- cliffFeeNumerator,
8985
- firstFactor,
8986
- maxFeeBps,
8987
- maxLimiterDuration,
8988
- thirdFactor
9556
+ const poolFees = decodePodAlignedFeeRateLimiter(data);
9557
+ return new FeeRateLimiter(
9558
+ poolFees.cliffFeeNumerator,
9559
+ poolFees.feeIncrementBps,
9560
+ poolFees.maxFeeBps,
9561
+ poolFees.maxLimiterDuration,
9562
+ poolFees.referenceAmount
9563
+ );
9564
+ }
9565
+ case 3 /* FeeMarketCapSchedulerLinear */:
9566
+ case 4 /* FeeMarketCapSchedulerExponential */: {
9567
+ const poolFees = decodePodAlignedFeeMarketCapScheduler(data);
9568
+ return new FeeMarketCapScheduler(
9569
+ poolFees.cliffFeeNumerator,
9570
+ poolFees.numberOfPeriod,
9571
+ poolFees.sqrtPriceStepBps,
9572
+ poolFees.schedulerExpirationDuration,
9573
+ poolFees.reductionFactor,
9574
+ poolFees.baseFeeMode
8989
9575
  );
8990
- return feeRateLimiter;
8991
9576
  }
8992
9577
  default:
8993
9578
  throw new Error("Invalid base fee mode");
@@ -8995,21 +9580,21 @@ function getBaseFeeHandler(cliffFeeNumerator, firstFactor, secondFactor, thirdFa
8995
9580
  }
8996
9581
 
8997
9582
  // src/math/poolFees/dynamicFee.ts
8998
- import BN10 from "bn.js";
9583
+ import BN12 from "bn.js";
8999
9584
  function isDynamicFeeEnabled(dynamicFee) {
9000
9585
  return dynamicFee.initialized !== 0;
9001
9586
  }
9002
9587
  function getDynamicFeeNumerator(volatilityAccumulator, binStep, variableFeeControl) {
9003
- const squareVfaBin = volatilityAccumulator.mul(new BN10(binStep)).pow(new BN10(2));
9588
+ const squareVfaBin = volatilityAccumulator.mul(new BN12(binStep)).pow(new BN12(2));
9004
9589
  const vFee = variableFeeControl.mul(squareVfaBin);
9005
- return vFee.add(new BN10(DYNAMIC_FEE_ROUNDING_OFFSET)).div(new BN10(DYNAMIC_FEE_SCALING_FACTOR));
9590
+ return vFee.add(new BN12(DYNAMIC_FEE_ROUNDING_OFFSET)).div(new BN12(DYNAMIC_FEE_SCALING_FACTOR));
9006
9591
  }
9007
9592
 
9008
9593
  // src/math/quote.ts
9009
- import BN12 from "bn.js";
9594
+ import BN14 from "bn.js";
9010
9595
 
9011
9596
  // src/math/curve.ts
9012
- import BN11 from "bn.js";
9597
+ import BN13 from "bn.js";
9013
9598
  function getNextSqrtPriceFromAmountInBRoundingDown(sqrtPrice, liquidity, amount) {
9014
9599
  const quotient = amount.shln(SCALE_OFFSET * 2).div(liquidity);
9015
9600
  const result = sqrtPrice.add(quotient);
@@ -9039,16 +9624,16 @@ function getNextSqrtPriceFromAmountOutARoundingUp(sqrtPrice, liquidity, amount)
9039
9624
  }
9040
9625
  const product = amount.mul(sqrtPrice);
9041
9626
  const denominator = liquidity.sub(product);
9042
- if (denominator.lte(new BN11(0))) {
9627
+ if (denominator.lte(new BN13(0))) {
9043
9628
  throw new Error("MathOverflow: denominator is zero or negative");
9044
9629
  }
9045
9630
  return mulDiv(liquidity, sqrtPrice, denominator, 0 /* Up */);
9046
9631
  }
9047
9632
  function getNextSqrtPriceFromOutput(sqrtPrice, liquidity, amountOut, aForB) {
9048
- if (sqrtPrice.lte(new BN11(0))) {
9633
+ if (sqrtPrice.lte(new BN13(0))) {
9049
9634
  throw new Error("sqrtPrice must be greater than 0");
9050
9635
  }
9051
- if (liquidity.lte(new BN11(0))) {
9636
+ if (liquidity.lte(new BN13(0))) {
9052
9637
  throw new Error("liquidity must be greater than 0");
9053
9638
  }
9054
9639
  if (aForB) {
@@ -9066,10 +9651,10 @@ function getNextSqrtPriceFromOutput(sqrtPrice, liquidity, amountOut, aForB) {
9066
9651
  }
9067
9652
  }
9068
9653
  function getNextSqrtPriceFromInput(sqrtPrice, liquidity, amountIn, aForB) {
9069
- if (sqrtPrice.lte(new BN11(0))) {
9654
+ if (sqrtPrice.lte(new BN13(0))) {
9070
9655
  throw new Error("sqrtPrice must be greater than 0");
9071
9656
  }
9072
- if (liquidity.lte(new BN11(0))) {
9657
+ if (liquidity.lte(new BN13(0))) {
9073
9658
  throw new Error("liquidity must be greater than 0");
9074
9659
  }
9075
9660
  if (aForB) {
@@ -9100,7 +9685,7 @@ function getDeltaAmountBUnsignedUnchecked(lowerSqrtPrice, upperSqrtPrice, liquid
9100
9685
  const prod = liquidity.mul(deltaSqrtPrice);
9101
9686
  const shift = SCALE_OFFSET * 2;
9102
9687
  if (rounding === 0 /* Up */) {
9103
- const denominator = new BN11(1).ushln(shift);
9688
+ const denominator = new BN13(1).ushln(shift);
9104
9689
  const result = prod.add(denominator.subn(1)).div(denominator);
9105
9690
  return result;
9106
9691
  } else {
@@ -9121,7 +9706,7 @@ function getDeltaAmountAUnsignedUnchecked(lowerSqrtPrice, upperSqrtPrice, liquid
9121
9706
  const numerator1 = liquidity;
9122
9707
  const numerator2 = upperSqrtPrice.sub(lowerSqrtPrice);
9123
9708
  const denominator = lowerSqrtPrice.mul(upperSqrtPrice);
9124
- if (denominator.lte(new BN11(0))) {
9709
+ if (denominator.lte(new BN13(0))) {
9125
9710
  throw new Error("Denominator must be greater than zero");
9126
9711
  }
9127
9712
  const result = mulDiv(numerator1, numerator2, denominator, rounding);
@@ -9139,19 +9724,22 @@ function getLiquidityDeltaFromAmountB(amountB, lowerSqrtPrice, upperSqrtPrice) {
9139
9724
  }
9140
9725
 
9141
9726
  // src/math/quote.ts
9142
- function getSwapResultFromExactInput(poolState, amountIn, feeMode, tradeDirection, currentPoint) {
9143
- let actualProtocolFee = new BN12(0);
9144
- let actualTradingFee = new BN12(0);
9145
- let actualReferralFee = new BN12(0);
9146
- let actualPartnerFee = new BN12(0);
9727
+ function getSwapResultFromExactInput(program, poolState, amountIn, feeMode, tradeDirection, currentPoint) {
9728
+ let actualProtocolFee = new BN14(0);
9729
+ let actualTradingFee = new BN14(0);
9730
+ let actualReferralFee = new BN14(0);
9731
+ let actualPartnerFee = new BN14(0);
9147
9732
  const maxFeeNumerator = getMaxFeeNumerator(poolState.version);
9148
9733
  const tradeFeeNumerator = getTotalTradingFeeFromIncludedFeeAmount(
9734
+ program,
9149
9735
  poolState.poolFees,
9150
9736
  currentPoint,
9151
9737
  poolState.activationPoint,
9152
9738
  amountIn,
9153
9739
  tradeDirection,
9154
- maxFeeNumerator
9740
+ maxFeeNumerator,
9741
+ poolState.poolFees.initSqrtPrice,
9742
+ poolState.sqrtPrice
9155
9743
  );
9156
9744
  let actualAmountIn;
9157
9745
  if (feeMode.feesOnInput) {
@@ -9225,7 +9813,7 @@ function calculateAtoBFromAmountIn(poolState, amountIn) {
9225
9813
  return {
9226
9814
  outputAmount,
9227
9815
  nextSqrtPrice,
9228
- amountLeft: new BN12(0)
9816
+ amountLeft: new BN14(0)
9229
9817
  };
9230
9818
  }
9231
9819
  function calculateBtoAFromAmountIn(poolState, amountIn) {
@@ -9247,22 +9835,25 @@ function calculateBtoAFromAmountIn(poolState, amountIn) {
9247
9835
  return {
9248
9836
  outputAmount,
9249
9837
  nextSqrtPrice,
9250
- amountLeft: new BN12(0)
9838
+ amountLeft: new BN14(0)
9251
9839
  };
9252
9840
  }
9253
- function getSwapResultFromPartialInput(poolState, amountIn, feeMode, tradeDirection, currentPoint) {
9254
- let actualProtocolFee = new BN12(0);
9255
- let actualTradingFee = new BN12(0);
9256
- let actualReferralFee = new BN12(0);
9257
- let actualPartnerFee = new BN12(0);
9841
+ function getSwapResultFromPartialInput(program, poolState, amountIn, feeMode, tradeDirection, currentPoint) {
9842
+ let actualProtocolFee = new BN14(0);
9843
+ let actualTradingFee = new BN14(0);
9844
+ let actualReferralFee = new BN14(0);
9845
+ let actualPartnerFee = new BN14(0);
9258
9846
  const maxFeeNumerator = getMaxFeeNumerator(poolState.version);
9259
9847
  const tradeFeeNumerator = getTotalTradingFeeFromIncludedFeeAmount(
9848
+ program,
9260
9849
  poolState.poolFees,
9261
9850
  currentPoint,
9262
9851
  poolState.activationPoint,
9263
9852
  amountIn,
9264
9853
  tradeDirection,
9265
- maxFeeNumerator
9854
+ maxFeeNumerator,
9855
+ poolState.poolFees.initSqrtPrice,
9856
+ poolState.sqrtPrice
9266
9857
  );
9267
9858
  let actualAmountIn;
9268
9859
  if (feeMode.feesOnInput) {
@@ -9295,16 +9886,19 @@ function getSwapResultFromPartialInput(poolState, amountIn, feeMode, tradeDirect
9295
9886
  }
9296
9887
  let { amountLeft, outputAmount, nextSqrtPrice } = swapAmountFromInput;
9297
9888
  let includedFeeInputAmount;
9298
- if (amountLeft.gt(new BN12(0))) {
9889
+ if (amountLeft.gt(new BN14(0))) {
9299
9890
  actualAmountIn = actualAmountIn.sub(amountLeft);
9300
9891
  if (feeMode.feesOnInput) {
9301
9892
  const tradeFeeNumerator2 = getTotalTradingFeeFromExcludedFeeAmount(
9893
+ program,
9302
9894
  poolState.poolFees,
9303
9895
  currentPoint,
9304
9896
  poolState.activationPoint,
9305
9897
  actualAmountIn,
9306
9898
  tradeDirection,
9307
- maxFeeNumerator
9899
+ maxFeeNumerator,
9900
+ poolState.poolFees.initSqrtPrice,
9901
+ poolState.sqrtPrice
9308
9902
  );
9309
9903
  const { includedFeeAmount, feeAmount } = getIncludedFeeAmount(
9310
9904
  tradeFeeNumerator2,
@@ -9424,23 +10018,26 @@ function calculateBtoAFromPartialAmountIn(poolState, amountIn) {
9424
10018
  amountLeft
9425
10019
  };
9426
10020
  }
9427
- function getSwapResultFromExactOutput(poolState, amountOut, feeMode, tradeDirection, currentPoint) {
9428
- let actualProtocolFee = new BN12(0);
9429
- let actualTradingFee = new BN12(0);
9430
- let actualReferralFee = new BN12(0);
9431
- let actualPartnerFee = new BN12(0);
10021
+ function getSwapResultFromExactOutput(program, poolState, amountOut, feeMode, tradeDirection, currentPoint) {
10022
+ let actualProtocolFee = new BN14(0);
10023
+ let actualTradingFee = new BN14(0);
10024
+ let actualReferralFee = new BN14(0);
10025
+ let actualPartnerFee = new BN14(0);
9432
10026
  const maxFeeNumerator = getMaxFeeNumerator(poolState.version);
9433
10027
  let includedFeeAmountOut;
9434
10028
  if (feeMode.feesOnInput) {
9435
10029
  includedFeeAmountOut = amountOut;
9436
10030
  } else {
9437
10031
  const tradeFeeNumerator = getTotalTradingFeeFromExcludedFeeAmount(
10032
+ program,
9438
10033
  poolState.poolFees,
9439
10034
  currentPoint,
9440
10035
  poolState.activationPoint,
9441
10036
  amountOut,
9442
10037
  tradeDirection,
9443
- maxFeeNumerator
10038
+ maxFeeNumerator,
10039
+ poolState.poolFees.initSqrtPrice,
10040
+ poolState.sqrtPrice
9444
10041
  );
9445
10042
  const { includedFeeAmount, feeAmount } = getIncludedFeeAmount(
9446
10043
  tradeFeeNumerator,
@@ -9474,12 +10071,15 @@ function getSwapResultFromExactOutput(poolState, amountOut, feeMode, tradeDirect
9474
10071
  let includedFeeInputAmount;
9475
10072
  if (feeMode.feesOnInput) {
9476
10073
  const tradeFeeNumerator = getTotalTradingFeeFromExcludedFeeAmount(
10074
+ program,
9477
10075
  poolState.poolFees,
9478
10076
  currentPoint,
9479
10077
  poolState.activationPoint,
9480
10078
  inputAmount,
9481
10079
  tradeDirection,
9482
- maxFeeNumerator
10080
+ maxFeeNumerator,
10081
+ poolState.poolFees.initSqrtPrice,
10082
+ poolState.sqrtPrice
9483
10083
  );
9484
10084
  const { includedFeeAmount, feeAmount } = getIncludedFeeAmount(
9485
10085
  tradeFeeNumerator,
@@ -9500,7 +10100,7 @@ function getSwapResultFromExactOutput(poolState, amountOut, feeMode, tradeDirect
9500
10100
  includedFeeInputAmount = inputAmount;
9501
10101
  }
9502
10102
  return {
9503
- amountLeft: new BN12(0),
10103
+ amountLeft: new BN14(0),
9504
10104
  includedFeeInputAmount,
9505
10105
  excludedFeeInputAmount: inputAmount,
9506
10106
  outputAmount: amountOut,
@@ -9553,8 +10153,8 @@ function calculateBtoAFromAmountOut(poolState, amountOut) {
9553
10153
  nextSqrtPrice
9554
10154
  };
9555
10155
  }
9556
- function swapQuoteExactInput(pool, currentPoint, amountIn, slippage, aToB, hasReferral, tokenADecimal, tokenBDecimal, inputTokenInfo, outputTokenInfo) {
9557
- if (amountIn.lte(new BN12(0))) {
10156
+ function swapQuoteExactInput(program, pool, currentPoint, amountIn, slippage, aToB, hasReferral, tokenADecimal, tokenBDecimal, inputTokenInfo, outputTokenInfo) {
10157
+ if (amountIn.lte(new BN14(0))) {
9558
10158
  throw new Error("Amount in must be greater than 0");
9559
10159
  }
9560
10160
  if (!isSwapEnabled(pool, currentPoint)) {
@@ -9571,6 +10171,7 @@ function swapQuoteExactInput(pool, currentPoint, amountIn, slippage, aToB, hasRe
9571
10171
  ).amount;
9572
10172
  }
9573
10173
  const swapResult = getSwapResultFromExactInput(
10174
+ program,
9574
10175
  pool,
9575
10176
  actualAmountIn,
9576
10177
  feeMode,
@@ -9603,8 +10204,8 @@ function swapQuoteExactInput(pool, currentPoint, amountIn, slippage, aToB, hasRe
9603
10204
  priceImpact
9604
10205
  });
9605
10206
  }
9606
- function swapQuoteExactOutput(pool, currentPoint, amountOut, slippage, aToB, hasReferral, tokenADecimal, tokenBDecimal, inputTokenInfo, outputTokenInfo) {
9607
- if (amountOut.lte(new BN12(0))) {
10207
+ function swapQuoteExactOutput(program, pool, currentPoint, amountOut, slippage, aToB, hasReferral, tokenADecimal, tokenBDecimal, inputTokenInfo, outputTokenInfo) {
10208
+ if (amountOut.lte(new BN14(0))) {
9608
10209
  throw new Error("Amount out must be greater than 0");
9609
10210
  }
9610
10211
  if (!isSwapEnabled(pool, currentPoint)) {
@@ -9621,6 +10222,7 @@ function swapQuoteExactOutput(pool, currentPoint, amountOut, slippage, aToB, has
9621
10222
  ).amount;
9622
10223
  }
9623
10224
  const swapResult = getSwapResultFromExactOutput(
10225
+ program,
9624
10226
  pool,
9625
10227
  actualAmountOut,
9626
10228
  feeMode,
@@ -9653,8 +10255,8 @@ function swapQuoteExactOutput(pool, currentPoint, amountOut, slippage, aToB, has
9653
10255
  priceImpact
9654
10256
  });
9655
10257
  }
9656
- function swapQuotePartialInput(pool, currentPoint, amountIn, slippage, aToB, hasReferral, tokenADecimal, tokenBDecimal, inputTokenInfo, outputTokenInfo) {
9657
- if (amountIn.lte(new BN12(0))) {
10258
+ function swapQuotePartialInput(program, pool, currentPoint, amountIn, slippage, aToB, hasReferral, tokenADecimal, tokenBDecimal, inputTokenInfo, outputTokenInfo) {
10259
+ if (amountIn.lte(new BN14(0))) {
9658
10260
  throw new Error("Amount in must be greater than 0");
9659
10261
  }
9660
10262
  if (!isSwapEnabled(pool, currentPoint)) {
@@ -9671,6 +10273,7 @@ function swapQuotePartialInput(pool, currentPoint, amountIn, slippage, aToB, has
9671
10273
  ).amount;
9672
10274
  }
9673
10275
  const swapResult = getSwapResultFromPartialInput(
10276
+ program,
9674
10277
  pool,
9675
10278
  actualAmountIn,
9676
10279
  feeMode,
@@ -9705,7 +10308,7 @@ function swapQuotePartialInput(pool, currentPoint, amountIn, slippage, aToB, has
9705
10308
  }
9706
10309
 
9707
10310
  // src/math/priceMath.ts
9708
- import { BN as BN13 } from "@coral-xyz/anchor";
10311
+ import { BN as BN15 } from "@coral-xyz/anchor";
9709
10312
  import Decimal3 from "decimal.js";
9710
10313
  function calculateInitSqrtPrice(tokenAAmount, tokenBAmount, minSqrtPrice, maxSqrtPrice) {
9711
10314
  if (tokenAAmount.isZero() || tokenBAmount.isZero()) {
@@ -9728,39 +10331,79 @@ function calculateInitSqrtPrice(tokenAAmount, tokenBAmount, minSqrtPrice, maxSqr
9728
10331
  const discriminant = xyMinusPa.mul(xyMinusPa).add(fourY);
9729
10332
  const sqrtDiscriminant = discriminant.sqrt();
9730
10333
  const result = paMinusXY.add(sqrtDiscriminant).div(new Decimal3(2)).mul(Decimal3.pow(2, 64));
9731
- return new BN13(result.floor().toFixed());
10334
+ return new BN15(result.floor().toFixed());
9732
10335
  }
9733
10336
 
9734
10337
  // src/helpers/validation.ts
9735
- function validateFeeScheduler(numberOfPeriod, periodFrequency, reductionFactor, cliffFeeNumerator, baseFeeMode, poolVersion) {
9736
- if (!periodFrequency.eq(new BN14(0)) || numberOfPeriod !== 0 || !reductionFactor.eq(new BN14(0))) {
9737
- if (numberOfPeriod === 0 || periodFrequency.eq(new BN14(0)) || reductionFactor.eq(new BN14(0))) {
9738
- return false;
10338
+ function validateFeeTimeScheduler(numberOfPeriod, periodFrequency, reductionFactor, cliffFeeNumerator, baseFeeMode, poolVersion) {
10339
+ if (!periodFrequency.eq(new BN16(0)) || numberOfPeriod !== 0 || !reductionFactor.eq(new BN16(0))) {
10340
+ if (numberOfPeriod === 0 || periodFrequency.eq(new BN16(0)) || reductionFactor.eq(new BN16(0))) {
10341
+ throw new Error("PoolError::InvalidFeeTimeScheduler");
9739
10342
  }
9740
10343
  }
9741
- const minFeeNumerator = getMinBaseFeeNumerator(
10344
+ const minFeeNumerator = getFeeTimeMinBaseFeeNumerator(
9742
10345
  cliffFeeNumerator,
9743
10346
  numberOfPeriod,
9744
10347
  reductionFactor,
9745
10348
  baseFeeMode
9746
10349
  );
9747
10350
  const maxFeeNumerator = getMaxBaseFeeNumerator(cliffFeeNumerator);
9748
- validateFeeFraction(minFeeNumerator, new BN14(FEE_DENOMINATOR));
9749
- validateFeeFraction(maxFeeNumerator, new BN14(FEE_DENOMINATOR));
9750
- if (minFeeNumerator.lt(new BN14(MIN_FEE_NUMERATOR)) || maxFeeNumerator.gt(getMaxFeeNumerator(poolVersion))) {
10351
+ validateFeeFraction(minFeeNumerator, new BN16(FEE_DENOMINATOR));
10352
+ validateFeeFraction(maxFeeNumerator, new BN16(FEE_DENOMINATOR));
10353
+ if (minFeeNumerator.lt(new BN16(MIN_FEE_NUMERATOR)) || maxFeeNumerator.gt(getMaxFeeNumerator(poolVersion))) {
10354
+ throw new Error("PoolError::ExceedMaxFeeBps");
10355
+ }
10356
+ return true;
10357
+ }
10358
+ function validateFeeTimeSchedulerBaseFeeIsStatic(currentPoint, activationPoint, numberOfPeriod, periodFrequency) {
10359
+ const schedulerExpirationPoint = activationPoint.add(
10360
+ numberOfPeriod.mul(periodFrequency)
10361
+ );
10362
+ return currentPoint.gt(schedulerExpirationPoint);
10363
+ }
10364
+ function validateFeeMarketCapScheduler(cliffFeeNumerator, numberOfPeriod, sqrtPriceStepBps, reductionFactor, schedulerExpirationDuration, feeMarketCapSchedulerMode, poolVersion) {
10365
+ if (reductionFactor.lte(new BN16(0))) {
10366
+ throw new Error("PoolError::InvalidFeeMarketCapScheduler");
10367
+ }
10368
+ if (sqrtPriceStepBps.lte(new BN16(0))) {
10369
+ throw new Error("PoolError::InvalidFeeMarketCapScheduler");
10370
+ }
10371
+ if (schedulerExpirationDuration.lte(new BN16(0))) {
10372
+ throw new Error("PoolError::InvalidFeeMarketCapScheduler");
10373
+ }
10374
+ if (numberOfPeriod <= 0) {
10375
+ throw new Error("PoolError::InvalidFeeMarketCapScheduler");
10376
+ }
10377
+ const minFeeNumerator = getFeeMarketCapMinBaseFeeNumerator(
10378
+ cliffFeeNumerator,
10379
+ numberOfPeriod,
10380
+ reductionFactor,
10381
+ feeMarketCapSchedulerMode
10382
+ );
10383
+ const maxFeeNumerator = cliffFeeNumerator;
10384
+ validateFeeFraction(minFeeNumerator, new BN16(FEE_DENOMINATOR));
10385
+ validateFeeFraction(maxFeeNumerator, new BN16(FEE_DENOMINATOR));
10386
+ const maxAllowedFeeNumerator = getMaxFeeNumerator(poolVersion);
10387
+ if (minFeeNumerator.lt(new BN16(MIN_FEE_NUMERATOR)) || maxFeeNumerator.gt(maxAllowedFeeNumerator)) {
9751
10388
  throw new Error("PoolError::ExceedMaxFeeBps");
9752
10389
  }
9753
10390
  return true;
9754
10391
  }
10392
+ function validateFeeMarketCapBaseFeeIsStatic(currentPoint, activationPoint, schedulerExpirationDuration) {
10393
+ const schedulerExpirationPoint = activationPoint.add(
10394
+ schedulerExpirationDuration
10395
+ );
10396
+ return currentPoint.gt(schedulerExpirationPoint);
10397
+ }
9755
10398
  function validateFeeRateLimiter(cliffFeeNumerator, feeIncrementBps, maxFeeBps, maxLimiterDuration, referenceAmount, collectFeeMode, activationType, poolVersion) {
9756
10399
  if (collectFeeMode !== 1 /* OnlyB */) {
9757
10400
  return false;
9758
10401
  }
9759
10402
  const maxFeeNumeratorFromBps = toNumerator(
9760
- new BN14(maxFeeBps),
9761
- new BN14(FEE_DENOMINATOR)
10403
+ new BN16(maxFeeBps),
10404
+ new BN16(FEE_DENOMINATOR)
9762
10405
  );
9763
- if (cliffFeeNumerator.lt(new BN14(MIN_FEE_NUMERATOR)) || cliffFeeNumerator.gt(maxFeeNumeratorFromBps)) {
10406
+ if (cliffFeeNumerator.lt(new BN16(MIN_FEE_NUMERATOR)) || cliffFeeNumerator.gt(maxFeeNumeratorFromBps)) {
9764
10407
  return false;
9765
10408
  }
9766
10409
  if (isZeroRateLimiter(
@@ -9779,39 +10422,53 @@ function validateFeeRateLimiter(cliffFeeNumerator, feeIncrementBps, maxFeeBps, m
9779
10422
  )) {
9780
10423
  return false;
9781
10424
  }
9782
- const maxLimiterDurationLimit = activationType === 0 /* Slot */ ? new BN14(MAX_RATE_LIMITER_DURATION_IN_SLOTS) : new BN14(MAX_RATE_LIMITER_DURATION_IN_SECONDS);
9783
- if (new BN14(maxLimiterDuration).gt(maxLimiterDurationLimit)) {
10425
+ const maxLimiterDurationLimit = activationType === 0 /* Slot */ ? new BN16(MAX_RATE_LIMITER_DURATION_IN_SLOTS) : new BN16(MAX_RATE_LIMITER_DURATION_IN_SECONDS);
10426
+ if (new BN16(maxLimiterDuration).gt(maxLimiterDurationLimit)) {
9784
10427
  return false;
9785
10428
  }
9786
10429
  const feeIncrementNumerator = toNumerator(
9787
- new BN14(feeIncrementBps),
9788
- new BN14(FEE_DENOMINATOR)
10430
+ new BN16(feeIncrementBps),
10431
+ new BN16(FEE_DENOMINATOR)
9789
10432
  );
9790
- if (feeIncrementNumerator.gte(new BN14(FEE_DENOMINATOR))) {
10433
+ if (feeIncrementNumerator.gte(new BN16(FEE_DENOMINATOR))) {
9791
10434
  return false;
9792
10435
  }
9793
10436
  if (maxFeeBps > getMaxFeeBps(poolVersion)) {
9794
10437
  return false;
9795
10438
  }
9796
10439
  const minFeeNumerator = getFeeNumeratorFromIncludedFeeAmount(
9797
- new BN14(0),
10440
+ new BN16(0),
9798
10441
  cliffFeeNumerator,
9799
10442
  referenceAmount,
9800
10443
  maxFeeBps,
9801
10444
  feeIncrementBps
9802
10445
  );
9803
10446
  const maxFeeNumeratorFromAmount = getFeeNumeratorFromIncludedFeeAmount(
9804
- new BN14(Number.MAX_SAFE_INTEGER),
10447
+ new BN16(Number.MAX_SAFE_INTEGER),
9805
10448
  cliffFeeNumerator,
9806
10449
  referenceAmount,
9807
10450
  maxFeeBps,
9808
10451
  feeIncrementBps
9809
10452
  );
9810
- if (minFeeNumerator.lt(new BN14(MIN_FEE_NUMERATOR)) || maxFeeNumeratorFromAmount.gt(getMaxFeeNumerator(poolVersion))) {
10453
+ if (minFeeNumerator.lt(new BN16(MIN_FEE_NUMERATOR)) || maxFeeNumeratorFromAmount.gt(getMaxFeeNumerator(poolVersion))) {
9811
10454
  return false;
9812
10455
  }
9813
10456
  return true;
9814
10457
  }
10458
+ function validateFeeRateLimiterBaseFeeIsStatic(currentPoint, activationPoint, maxLimiterDuration, referenceAmount, maxFeeBps, feeIncrementBps) {
10459
+ if (isZeroRateLimiter(
10460
+ referenceAmount,
10461
+ maxLimiterDuration,
10462
+ maxFeeBps,
10463
+ feeIncrementBps
10464
+ )) {
10465
+ return true;
10466
+ }
10467
+ const lastEffectiveRateLimiterPoint = activationPoint.add(
10468
+ new BN16(maxLimiterDuration)
10469
+ );
10470
+ return currentPoint.gt(lastEffectiveRateLimiterPoint);
10471
+ }
9815
10472
  function validateFeeFraction(numerator, denominator) {
9816
10473
  if (denominator.isZero() || numerator.gte(denominator)) {
9817
10474
  throw new Error(
@@ -9822,8 +10479,126 @@ function validateFeeFraction(numerator, denominator) {
9822
10479
 
9823
10480
  // src/helpers/common.ts
9824
10481
  import { PublicKey as PublicKey6 } from "@solana/web3.js";
9825
- import BN15 from "bn.js";
10482
+ import BN18 from "bn.js";
9826
10483
  import Decimal4 from "decimal.js";
10484
+
10485
+ // src/helpers/feeCodec.ts
10486
+ import BN17 from "bn.js";
10487
+ import { BorshCoder } from "@coral-xyz/anchor";
10488
+ var cpAmmCoder = new BorshCoder(cp_amm_default);
10489
+ function encodeFeeTimeSchedulerParams(cliffFeeNumerator, numberOfPeriod, periodFrequency, reductionFactor, baseFeeMode) {
10490
+ const feeTimeScheduler = {
10491
+ cliff_fee_numerator: new BN17(cliffFeeNumerator.toString()),
10492
+ number_of_period: numberOfPeriod,
10493
+ period_frequency: new BN17(periodFrequency.toString()),
10494
+ reduction_factor: new BN17(reductionFactor.toString()),
10495
+ base_fee_mode: baseFeeMode,
10496
+ padding: FEE_PADDING
10497
+ };
10498
+ return cpAmmCoder.types.encode("BorshFeeTimeScheduler", feeTimeScheduler);
10499
+ }
10500
+ function decodeFeeTimeSchedulerParams(data) {
10501
+ const decoded = cpAmmCoder.types.decode("BorshFeeTimeScheduler", data);
10502
+ return {
10503
+ cliffFeeNumerator: decoded.cliff_fee_numerator,
10504
+ numberOfPeriod: decoded.number_of_period,
10505
+ periodFrequency: decoded.period_frequency,
10506
+ reductionFactor: decoded.reduction_factor,
10507
+ baseFeeMode: decoded.base_fee_mode,
10508
+ padding: decoded.padding
10509
+ };
10510
+ }
10511
+ function decodePodAlignedFeeTimeScheduler(data) {
10512
+ const decoded = cpAmmCoder.types.decode("PodAlignedFeeTimeScheduler", data);
10513
+ return {
10514
+ cliffFeeNumerator: decoded.cliff_fee_numerator,
10515
+ numberOfPeriod: decoded.number_of_period,
10516
+ periodFrequency: decoded.period_frequency,
10517
+ reductionFactor: decoded.reduction_factor,
10518
+ baseFeeMode: decoded.base_fee_mode,
10519
+ padding: decoded.padding
10520
+ };
10521
+ }
10522
+ function encodeFeeMarketCapSchedulerParams(cliffFeeNumerator, numberOfPeriod, sqrtPriceStepBps, schedulerExpirationDuration, reductionFactor, baseFeeMode) {
10523
+ const feeMarketCapScheduler = {
10524
+ cliff_fee_numerator: new BN17(cliffFeeNumerator.toString()),
10525
+ number_of_period: numberOfPeriod,
10526
+ sqrt_price_step_bps: sqrtPriceStepBps,
10527
+ scheduler_expiration_duration: schedulerExpirationDuration,
10528
+ reduction_factor: new BN17(reductionFactor.toString()),
10529
+ base_fee_mode: baseFeeMode,
10530
+ padding: FEE_PADDING
10531
+ };
10532
+ return cpAmmCoder.types.encode(
10533
+ "BorshFeeMarketCapScheduler",
10534
+ feeMarketCapScheduler
10535
+ );
10536
+ }
10537
+ function decodeFeeMarketCapSchedulerParams(data) {
10538
+ const decoded = cpAmmCoder.types.decode("BorshFeeMarketCapScheduler", data);
10539
+ return {
10540
+ cliffFeeNumerator: decoded.cliff_fee_numerator,
10541
+ numberOfPeriod: decoded.number_of_period,
10542
+ sqrtPriceStepBps: decoded.sqrt_price_step_bps,
10543
+ schedulerExpirationDuration: decoded.scheduler_expiration_duration,
10544
+ reductionFactor: decoded.reduction_factor,
10545
+ baseFeeMode: decoded.base_fee_mode,
10546
+ padding: decoded.padding
10547
+ };
10548
+ }
10549
+ function decodePodAlignedFeeMarketCapScheduler(data) {
10550
+ const decoded = cpAmmCoder.types.decode(
10551
+ "PodAlignedFeeMarketCapScheduler",
10552
+ data
10553
+ );
10554
+ return {
10555
+ cliffFeeNumerator: decoded.cliff_fee_numerator,
10556
+ numberOfPeriod: decoded.number_of_period,
10557
+ sqrtPriceStepBps: decoded.sqrt_price_step_bps,
10558
+ schedulerExpirationDuration: decoded.scheduler_expiration_duration,
10559
+ reductionFactor: decoded.reduction_factor,
10560
+ baseFeeMode: decoded.base_fee_mode,
10561
+ padding: decoded.padding
10562
+ };
10563
+ }
10564
+ function encodeFeeRateLimiterParams(cliffFeeNumerator, feeIncrementBps, maxLimiterDuration, maxFeeBps, referenceAmount) {
10565
+ const feeRateLimiter = {
10566
+ cliff_fee_numerator: new BN17(cliffFeeNumerator.toString()),
10567
+ fee_increment_bps: feeIncrementBps,
10568
+ max_limiter_duration: maxLimiterDuration,
10569
+ max_fee_bps: maxFeeBps,
10570
+ reference_amount: new BN17(referenceAmount.toString()),
10571
+ base_fee_mode: 2 /* RateLimiter */,
10572
+ padding: FEE_PADDING
10573
+ };
10574
+ return cpAmmCoder.types.encode("BorshFeeRateLimiter", feeRateLimiter);
10575
+ }
10576
+ function decodeFeeRateLimiterParams(data) {
10577
+ const decoded = cpAmmCoder.types.decode("BorshFeeRateLimiter", data);
10578
+ return {
10579
+ cliffFeeNumerator: decoded.cliff_fee_numerator,
10580
+ feeIncrementBps: decoded.fee_increment_bps,
10581
+ maxLimiterDuration: decoded.max_limiter_duration,
10582
+ maxFeeBps: decoded.max_fee_bps,
10583
+ referenceAmount: decoded.reference_amount,
10584
+ baseFeeMode: decoded.base_fee_mode,
10585
+ padding: decoded.padding
10586
+ };
10587
+ }
10588
+ function decodePodAlignedFeeRateLimiter(data) {
10589
+ const decoded = cpAmmCoder.types.decode("PodAlignedFeeRateLimiter", data);
10590
+ return {
10591
+ cliffFeeNumerator: decoded.cliff_fee_numerator,
10592
+ feeIncrementBps: decoded.fee_increment_bps,
10593
+ maxLimiterDuration: decoded.max_limiter_duration,
10594
+ maxFeeBps: decoded.max_fee_bps,
10595
+ referenceAmount: decoded.reference_amount,
10596
+ baseFeeMode: decoded.base_fee_mode,
10597
+ padding: decoded.padding
10598
+ };
10599
+ }
10600
+
10601
+ // src/helpers/common.ts
9827
10602
  function hasPartner(poolState) {
9828
10603
  return !poolState.partner.equals(PublicKey6.default);
9829
10604
  }
@@ -9831,10 +10606,10 @@ function getCurrentPoint(connection, activationType) {
9831
10606
  return __async(this, null, function* () {
9832
10607
  const currentSlot = yield connection.getSlot();
9833
10608
  if (activationType === 0 /* Slot */) {
9834
- return new BN15(currentSlot);
10609
+ return new BN18(currentSlot);
9835
10610
  } else {
9836
10611
  const currentTime = yield connection.getBlockTime(currentSlot);
9837
- return new BN15(currentTime);
10612
+ return new BN18(currentTime);
9838
10613
  }
9839
10614
  });
9840
10615
  }
@@ -9845,7 +10620,7 @@ function convertToFeeSchedulerSecondFactor(value) {
9845
10620
  return Array.from(value.toArrayLike(Buffer, "le", 8));
9846
10621
  }
9847
10622
  function parseFeeSchedulerSecondFactor(secondFactor) {
9848
- return new BN15(Buffer.from(secondFactor), "le");
10623
+ return new BN18(Buffer.from(secondFactor), "le");
9849
10624
  }
9850
10625
  function convertToRateLimiterSecondFactor(maxLimiterDuration, maxFeeBps) {
9851
10626
  const buffer1 = maxLimiterDuration.toArrayLike(Buffer, "le", 4);
@@ -9861,10 +10636,10 @@ function parseRateLimiterSecondFactor(secondFactor) {
9861
10636
  };
9862
10637
  }
9863
10638
  function bpsToFeeNumerator(bps) {
9864
- return new BN15(bps * FEE_DENOMINATOR).divn(BASIS_POINT_MAX);
10639
+ return new BN18(bps * FEE_DENOMINATOR).divn(BASIS_POINT_MAX);
9865
10640
  }
9866
10641
  function feeNumeratorToBps(feeNumerator) {
9867
- return feeNumerator.muln(BASIS_POINT_MAX).div(new BN15(FEE_DENOMINATOR)).toNumber();
10642
+ return feeNumerator.muln(BASIS_POINT_MAX).div(new BN18(FEE_DENOMINATOR)).toNumber();
9868
10643
  }
9869
10644
  function convertToLamports(amount, tokenDecimal) {
9870
10645
  const valueInLamports = new Decimal4(amount).mul(
@@ -9873,19 +10648,22 @@ function convertToLamports(amount, tokenDecimal) {
9873
10648
  return fromDecimalToBN(valueInLamports);
9874
10649
  }
9875
10650
  function fromDecimalToBN(value) {
9876
- return new BN15(value.floor().toFixed());
10651
+ return new BN18(value.floor().toFixed());
9877
10652
  }
9878
- function getFeeSchedulerParams(startingBaseFeeBps, endingBaseFeeBps, baseFeeMode, numberOfPeriod, totalDuration) {
10653
+ function getFeeTimeSchedulerParams(startingBaseFeeBps, endingBaseFeeBps, baseFeeMode, numberOfPeriod, totalDuration) {
9879
10654
  if (startingBaseFeeBps == endingBaseFeeBps) {
9880
10655
  if (numberOfPeriod != 0 || totalDuration != 0) {
9881
10656
  throw new Error("numberOfPeriod and totalDuration must both be zero");
9882
10657
  }
10658
+ const data2 = encodeFeeTimeSchedulerParams(
10659
+ bpsToFeeNumerator(startingBaseFeeBps),
10660
+ 0,
10661
+ new BN18(0),
10662
+ new BN18(0),
10663
+ 0 /* FeeTimeSchedulerLinear */
10664
+ );
9883
10665
  return {
9884
- cliffFeeNumerator: bpsToFeeNumerator(startingBaseFeeBps),
9885
- firstFactor: 0,
9886
- secondFactor: Array.from(new BN15(0).toArrayLike(Buffer, "le", 8)),
9887
- thirdFactor: new BN15(0),
9888
- baseFeeMode: 0 /* FeeSchedulerLinear */
10666
+ data: Array.from(data2)
9889
10667
  };
9890
10668
  }
9891
10669
  if (numberOfPeriod <= 0) {
@@ -9909,23 +10687,68 @@ function getFeeSchedulerParams(startingBaseFeeBps, endingBaseFeeBps, baseFeeMode
9909
10687
  }
9910
10688
  const maxBaseFeeNumerator = bpsToFeeNumerator(startingBaseFeeBps);
9911
10689
  const minBaseFeeNumerator = bpsToFeeNumerator(endingBaseFeeBps);
9912
- const periodFrequency = new BN15(totalDuration / numberOfPeriod);
9913
- const secondFactor = convertToFeeSchedulerSecondFactor(periodFrequency);
10690
+ const periodFrequency = new BN18(totalDuration / numberOfPeriod);
9914
10691
  let reductionFactor;
9915
- if (baseFeeMode == 0 /* FeeSchedulerLinear */) {
10692
+ if (baseFeeMode == 0 /* FeeTimeSchedulerLinear */) {
9916
10693
  const totalReduction = maxBaseFeeNumerator.sub(minBaseFeeNumerator);
9917
10694
  reductionFactor = totalReduction.divn(numberOfPeriod);
9918
10695
  } else {
9919
10696
  const ratio = minBaseFeeNumerator.toNumber() / maxBaseFeeNumerator.toNumber();
9920
10697
  const decayBase = Math.pow(ratio, 1 / numberOfPeriod);
9921
- reductionFactor = new BN15(BASIS_POINT_MAX * (1 - decayBase));
10698
+ reductionFactor = new BN18(BASIS_POINT_MAX * (1 - decayBase));
9922
10699
  }
10700
+ const data = encodeFeeTimeSchedulerParams(
10701
+ maxBaseFeeNumerator,
10702
+ numberOfPeriod,
10703
+ periodFrequency,
10704
+ reductionFactor,
10705
+ baseFeeMode
10706
+ );
9923
10707
  return {
9924
- cliffFeeNumerator: maxBaseFeeNumerator,
9925
- firstFactor: numberOfPeriod,
9926
- secondFactor,
9927
- thirdFactor: reductionFactor,
10708
+ data: Array.from(data)
10709
+ };
10710
+ }
10711
+ function getFeeMarketCapSchedulerParams(startingBaseFeeBps, endingBaseFeeBps, baseFeeMode, numberOfPeriod, sqrtPriceStepBps, schedulerExpirationDuration) {
10712
+ if (numberOfPeriod <= 0) {
10713
+ throw new Error("Total periods must be greater than zero");
10714
+ }
10715
+ const poolMaxFeeBps = getMaxFeeBps(CURRENT_POOL_VERSION);
10716
+ if (startingBaseFeeBps <= endingBaseFeeBps) {
10717
+ throw new Error(
10718
+ `startingBaseFeeBps (${startingBaseFeeBps} bps) must be greater than endingBaseFeeBps (${endingBaseFeeBps} bps)`
10719
+ );
10720
+ }
10721
+ if (startingBaseFeeBps > poolMaxFeeBps) {
10722
+ throw new Error(
10723
+ `startingBaseFeeBps (${startingBaseFeeBps} bps) exceeds maximum allowed value of ${poolMaxFeeBps} bps`
10724
+ );
10725
+ }
10726
+ if (numberOfPeriod == 0 || sqrtPriceStepBps == 0 || schedulerExpirationDuration == 0) {
10727
+ throw new Error(
10728
+ "numberOfPeriod, sqrtPriceStepBps, and schedulerExpirationDuration must be greater than zero"
10729
+ );
10730
+ }
10731
+ const maxBaseFeeNumerator = bpsToFeeNumerator(startingBaseFeeBps);
10732
+ const minBaseFeeNumerator = bpsToFeeNumerator(endingBaseFeeBps);
10733
+ let reductionFactor;
10734
+ if (baseFeeMode == 3 /* FeeMarketCapSchedulerLinear */) {
10735
+ const totalReduction = maxBaseFeeNumerator.sub(minBaseFeeNumerator);
10736
+ reductionFactor = totalReduction.divn(numberOfPeriod);
10737
+ } else {
10738
+ const ratio = minBaseFeeNumerator.toNumber() / maxBaseFeeNumerator.toNumber();
10739
+ const decayBase = Math.pow(ratio, 1 / numberOfPeriod);
10740
+ reductionFactor = new BN18(BASIS_POINT_MAX * (1 - decayBase));
10741
+ }
10742
+ const data = encodeFeeMarketCapSchedulerParams(
10743
+ maxBaseFeeNumerator,
10744
+ numberOfPeriod,
10745
+ sqrtPriceStepBps,
10746
+ schedulerExpirationDuration,
10747
+ reductionFactor,
9928
10748
  baseFeeMode
10749
+ );
10750
+ return {
10751
+ data: Array.from(data)
9929
10752
  };
9930
10753
  }
9931
10754
  function getRateLimiterParams(baseFeeBps, feeIncrementBps, referenceAmount, maxLimiterDuration, maxFeeBps, tokenBDecimal, activationType) {
@@ -9946,7 +10769,7 @@ function getRateLimiterParams(baseFeeBps, feeIncrementBps, referenceAmount, maxL
9946
10769
  `Fee increment (${feeIncrementBps} bps) exceeds maximum allowed value of ${poolMaxFeeBps} bps`
9947
10770
  );
9948
10771
  }
9949
- if (feeIncrementNumerator.gte(new BN15(FEE_DENOMINATOR))) {
10772
+ if (feeIncrementNumerator.gte(new BN18(FEE_DENOMINATOR))) {
9950
10773
  throw new Error(
9951
10774
  "Fee increment numerator must be less than FEE_DENOMINATOR"
9952
10775
  );
@@ -9956,12 +10779,12 @@ function getRateLimiterParams(baseFeeBps, feeIncrementBps, referenceAmount, maxL
9956
10779
  `Max fee (${maxFeeBps} bps) exceeds maximum allowed value of ${poolMaxFeeBps} bps for PoolVersion V${CURRENT_POOL_VERSION}`
9957
10780
  );
9958
10781
  }
9959
- const deltaNumerator = new BN15(poolMaxFeeNumerator).sub(cliffFeeNumerator);
10782
+ const deltaNumerator = new BN18(poolMaxFeeNumerator).sub(cliffFeeNumerator);
9960
10783
  const maxIndex = deltaNumerator.div(feeIncrementNumerator);
9961
- if (maxIndex.lt(new BN15(1))) {
10784
+ if (maxIndex.lt(new BN18(1))) {
9962
10785
  throw new Error("Fee increment is too large for the given base fee");
9963
10786
  }
9964
- if (cliffFeeNumerator.lt(new BN15(MIN_FEE_NUMERATOR)) || cliffFeeNumerator.gt(new BN15(poolMaxFeeNumerator))) {
10787
+ if (cliffFeeNumerator.lt(new BN18(MIN_FEE_NUMERATOR)) || cliffFeeNumerator.gt(new BN18(poolMaxFeeNumerator))) {
9965
10788
  throw new Error("Base fee must be between 0.01% and 99%");
9966
10789
  }
9967
10790
  const maxDuration = activationType === 0 /* Slot */ ? MAX_RATE_LIMITER_DURATION_IN_SLOTS : MAX_RATE_LIMITER_DURATION_IN_SECONDS;
@@ -9974,55 +10797,83 @@ function getRateLimiterParams(baseFeeBps, feeIncrementBps, referenceAmount, maxL
9974
10797
  referenceAmount,
9975
10798
  tokenBDecimal
9976
10799
  );
9977
- const secondFactor = convertToRateLimiterSecondFactor(
9978
- new BN15(maxLimiterDuration),
9979
- new BN15(maxFeeBps)
10800
+ const data = encodeFeeRateLimiterParams(
10801
+ cliffFeeNumerator,
10802
+ feeIncrementBps,
10803
+ maxLimiterDuration,
10804
+ maxFeeBps,
10805
+ referenceAmountInLamports
9980
10806
  );
9981
10807
  return {
9982
- cliffFeeNumerator,
9983
- firstFactor: feeIncrementBps,
9984
- secondFactor,
9985
- thirdFactor: new BN15(referenceAmountInLamports),
9986
- baseFeeMode: 2 /* RateLimiter */
10808
+ data: Array.from(data)
9987
10809
  };
9988
10810
  }
9989
10811
  function getBaseFeeParams(baseFeeParams, tokenBDecimal, activationType) {
9990
- if (baseFeeParams.baseFeeMode === 2 /* RateLimiter */) {
9991
- if (!baseFeeParams.rateLimiterParam) {
9992
- throw new Error(
9993
- "Rate limiter parameters are required for RateLimiter mode"
10812
+ switch (baseFeeParams.baseFeeMode) {
10813
+ case 0 /* FeeTimeSchedulerLinear */:
10814
+ case 1 /* FeeTimeSchedulerExponential */: {
10815
+ if (!baseFeeParams.feeTimeSchedulerParam) {
10816
+ throw new Error(
10817
+ "Fee scheduler parameters are required for FeeTimeScheduler mode"
10818
+ );
10819
+ }
10820
+ const { startingFeeBps, endingFeeBps, numberOfPeriod, totalDuration } = baseFeeParams.feeTimeSchedulerParam;
10821
+ return getFeeTimeSchedulerParams(
10822
+ startingFeeBps,
10823
+ endingFeeBps,
10824
+ baseFeeParams.baseFeeMode,
10825
+ numberOfPeriod,
10826
+ totalDuration
9994
10827
  );
9995
10828
  }
9996
- const {
9997
- baseFeeBps,
9998
- feeIncrementBps,
9999
- referenceAmount,
10000
- maxLimiterDuration,
10001
- maxFeeBps
10002
- } = baseFeeParams.rateLimiterParam;
10003
- return getRateLimiterParams(
10004
- baseFeeBps,
10005
- feeIncrementBps,
10006
- referenceAmount,
10007
- maxLimiterDuration,
10008
- maxFeeBps,
10009
- tokenBDecimal,
10010
- activationType
10011
- );
10012
- } else {
10013
- if (!baseFeeParams.feeSchedulerParam) {
10014
- throw new Error(
10015
- "Fee scheduler parameters are required for FeeScheduler mode"
10829
+ case 2 /* RateLimiter */: {
10830
+ if (!baseFeeParams.rateLimiterParam) {
10831
+ throw new Error(
10832
+ "Rate limiter parameters are required for RateLimiter mode"
10833
+ );
10834
+ }
10835
+ const {
10836
+ baseFeeBps,
10837
+ feeIncrementBps,
10838
+ referenceAmount,
10839
+ maxLimiterDuration,
10840
+ maxFeeBps
10841
+ } = baseFeeParams.rateLimiterParam;
10842
+ return getRateLimiterParams(
10843
+ baseFeeBps,
10844
+ feeIncrementBps,
10845
+ referenceAmount,
10846
+ maxLimiterDuration,
10847
+ maxFeeBps,
10848
+ tokenBDecimal,
10849
+ activationType
10016
10850
  );
10017
10851
  }
10018
- const { startingFeeBps, endingFeeBps, numberOfPeriod, totalDuration } = baseFeeParams.feeSchedulerParam;
10019
- return getFeeSchedulerParams(
10020
- startingFeeBps,
10021
- endingFeeBps,
10022
- baseFeeParams.baseFeeMode,
10023
- numberOfPeriod,
10024
- totalDuration
10025
- );
10852
+ case 3 /* FeeMarketCapSchedulerLinear */:
10853
+ case 4 /* FeeMarketCapSchedulerExponential */: {
10854
+ if (!baseFeeParams.feeMarketCapSchedulerParam) {
10855
+ throw new Error(
10856
+ "Fee scheduler parameters are required for FeeMarketCapScheduler mode"
10857
+ );
10858
+ }
10859
+ const {
10860
+ startingFeeBps,
10861
+ endingFeeBps,
10862
+ numberOfPeriod,
10863
+ sqrtPriceStepBps,
10864
+ schedulerExpirationDuration
10865
+ } = baseFeeParams.feeMarketCapSchedulerParam;
10866
+ return getFeeMarketCapSchedulerParams(
10867
+ startingFeeBps,
10868
+ endingFeeBps,
10869
+ baseFeeParams.baseFeeMode,
10870
+ numberOfPeriod,
10871
+ sqrtPriceStepBps,
10872
+ schedulerExpirationDuration
10873
+ );
10874
+ }
10875
+ default:
10876
+ throw new Error("Invalid base fee mode");
10026
10877
  }
10027
10878
  }
10028
10879
  function getDynamicFeeParams(baseFeeBps, maxPriceChangeBps = MAX_PRICE_CHANGE_BPS_DEFAULT) {
@@ -10032,15 +10883,15 @@ function getDynamicFeeParams(baseFeeBps, maxPriceChangeBps = MAX_PRICE_CHANGE_BP
10032
10883
  );
10033
10884
  }
10034
10885
  const priceRatio = maxPriceChangeBps / BASIS_POINT_MAX + 1;
10035
- const sqrtPriceRatioQ64 = new BN15(
10886
+ const sqrtPriceRatioQ64 = new BN18(
10036
10887
  Decimal4.sqrt(priceRatio.toString()).mul(Decimal4.pow(2, 64)).floor().toFixed()
10037
10888
  );
10038
10889
  const deltaBinId = sqrtPriceRatioQ64.sub(ONE_Q64).div(BIN_STEP_BPS_U128_DEFAULT).muln(2);
10039
- const maxVolatilityAccumulator = new BN15(deltaBinId.muln(BASIS_POINT_MAX));
10040
- const squareVfaBin = maxVolatilityAccumulator.mul(new BN15(BIN_STEP_BPS_DEFAULT)).pow(new BN15(2));
10041
- const baseFeeNumerator = new BN15(bpsToFeeNumerator(baseFeeBps));
10890
+ const maxVolatilityAccumulator = new BN18(deltaBinId.muln(BASIS_POINT_MAX));
10891
+ const squareVfaBin = maxVolatilityAccumulator.mul(new BN18(BIN_STEP_BPS_DEFAULT)).pow(new BN18(2));
10892
+ const baseFeeNumerator = new BN18(bpsToFeeNumerator(baseFeeBps));
10042
10893
  const maxDynamicFeeNumerator = baseFeeNumerator.muln(20).divn(100);
10043
- const vFee = maxDynamicFeeNumerator.mul(new BN15(1e11)).sub(new BN15(99999999999));
10894
+ const vFee = maxDynamicFeeNumerator.mul(new BN18(1e11)).sub(new BN18(99999999999));
10044
10895
  const variableFeeControl = vFee.div(squareVfaBin);
10045
10896
  return {
10046
10897
  binStep: BIN_STEP_BPS_DEFAULT,
@@ -10054,10 +10905,10 @@ function getDynamicFeeParams(baseFeeBps, maxPriceChangeBps = MAX_PRICE_CHANGE_BP
10054
10905
  }
10055
10906
 
10056
10907
  // src/CpAmm.ts
10057
- import BN16, { min as min2, max } from "bn.js";
10908
+ import BN19, { min as min2, max } from "bn.js";
10058
10909
  var CpAmm = class {
10059
10910
  constructor(connection) {
10060
- this._program = new Program(cp_amm_default, {
10911
+ this._program = new Program2(cp_amm_default, {
10061
10912
  connection
10062
10913
  });
10063
10914
  this.poolAuthority = derivePoolAuthority();
@@ -10283,7 +11134,7 @@ var CpAmm = class {
10283
11134
  poolAuthority,
10284
11135
  rentReceiver: owner,
10285
11136
  owner,
10286
- tokenProgram: TOKEN_2022_PROGRAM_ID2
11137
+ tokenProgram: TOKEN_2022_PROGRAM_ID3
10287
11138
  }).instruction();
10288
11139
  });
10289
11140
  }
@@ -10402,7 +11253,7 @@ var CpAmm = class {
10402
11253
  payer,
10403
11254
  pool,
10404
11255
  position,
10405
- tokenProgram: TOKEN_2022_PROGRAM_ID2,
11256
+ tokenProgram: TOKEN_2022_PROGRAM_ID3,
10406
11257
  systemProgram: SystemProgram2.programId
10407
11258
  }).instruction();
10408
11259
  return {
@@ -10576,6 +11427,36 @@ var CpAmm = class {
10576
11427
  return pools;
10577
11428
  });
10578
11429
  }
11430
+ fetchPoolFees(pool) {
11431
+ return __async(this, null, function* () {
11432
+ const poolState = yield this._program.account.pool.fetchNullable(pool);
11433
+ if (!poolState) {
11434
+ throw new Error(`Pool account: ${pool} not found`);
11435
+ }
11436
+ const data = Buffer.from(poolState.poolFees.baseFee.baseFeeInfo.data);
11437
+ const modeIndex = data.readUInt8(8);
11438
+ const baseFeeMode = modeIndex;
11439
+ switch (baseFeeMode) {
11440
+ case 0 /* FeeTimeSchedulerLinear */:
11441
+ case 1 /* FeeTimeSchedulerExponential */: {
11442
+ const poolFees = decodePodAlignedFeeTimeScheduler(data);
11443
+ return poolFees;
11444
+ }
11445
+ case 2 /* RateLimiter */: {
11446
+ const poolFees = decodePodAlignedFeeRateLimiter(data);
11447
+ return poolFees;
11448
+ }
11449
+ case 3 /* FeeMarketCapSchedulerLinear */:
11450
+ case 4 /* FeeMarketCapSchedulerExponential */: {
11451
+ const poolFees = decodePodAlignedFeeMarketCapScheduler(data);
11452
+ return poolFees;
11453
+ }
11454
+ default: {
11455
+ throw new Error(`Invalid base fee mode: ${baseFeeMode}`);
11456
+ }
11457
+ }
11458
+ });
11459
+ }
10579
11460
  /**
10580
11461
  * Fetches the Position state.
10581
11462
  * @param position - Public key of the position.
@@ -10808,8 +11689,9 @@ var CpAmm = class {
10808
11689
  } = params;
10809
11690
  const { activationType } = poolState;
10810
11691
  const aToB = poolState.tokenAMint.equals(inputTokenMint);
10811
- const currentPoint = activationType ? new BN16(currentTime) : new BN16(currentSlot);
11692
+ const currentPoint = activationType ? new BN19(currentTime) : new BN19(currentSlot);
10812
11693
  const swapResult = swapQuoteExactInput(
11694
+ this._program,
10813
11695
  poolState,
10814
11696
  currentPoint,
10815
11697
  inAmount,
@@ -10853,6 +11735,7 @@ var CpAmm = class {
10853
11735
  case 0 /* ExactIn */:
10854
11736
  if ("amountIn" in params) {
10855
11737
  return swapQuoteExactInput(
11738
+ this._program,
10856
11739
  poolState,
10857
11740
  currentPoint,
10858
11741
  params.amountIn,
@@ -10869,6 +11752,7 @@ var CpAmm = class {
10869
11752
  case 2 /* ExactOut */:
10870
11753
  if ("amountOut" in params) {
10871
11754
  return swapQuoteExactOutput(
11755
+ this._program,
10872
11756
  poolState,
10873
11757
  currentPoint,
10874
11758
  params.amountOut,
@@ -10885,6 +11769,7 @@ var CpAmm = class {
10885
11769
  case 1 /* PartialFill */:
10886
11770
  if ("amountIn" in params) {
10887
11771
  return swapQuotePartialInput(
11772
+ this._program,
10888
11773
  poolState,
10889
11774
  currentPoint,
10890
11775
  params.amountIn,
@@ -10952,7 +11837,7 @@ var CpAmm = class {
10952
11837
  0 /* Up */
10953
11838
  )
10954
11839
  };
10955
- const rawOutputAmount = new BN16(rawAmount(liquidityDelta));
11840
+ const rawOutputAmount = new BN19(rawAmount(liquidityDelta));
10956
11841
  const outputAmount = outputTokenInfo ? calculateTransferFeeIncludedAmount(
10957
11842
  rawOutputAmount,
10958
11843
  outputTokenInfo.mint,
@@ -11059,7 +11944,7 @@ var CpAmm = class {
11059
11944
  tokenAInfo,
11060
11945
  tokenBInfo
11061
11946
  } = params;
11062
- if (tokenAAmount.eq(new BN16(0)) && tokenBAmount.eq(new BN16(0))) {
11947
+ if (tokenAAmount.eq(new BN19(0)) && tokenBAmount.eq(new BN19(0))) {
11063
11948
  throw new Error("Invalid input amount");
11064
11949
  }
11065
11950
  const actualAmountAIn = tokenAInfo ? tokenAAmount.sub(
@@ -11175,7 +12060,7 @@ var CpAmm = class {
11175
12060
  tokenBVault,
11176
12061
  payerTokenA,
11177
12062
  payerTokenB,
11178
- token2022Program: TOKEN_2022_PROGRAM_ID2,
12063
+ token2022Program: TOKEN_2022_PROGRAM_ID3,
11179
12064
  tokenAProgram,
11180
12065
  tokenBProgram,
11181
12066
  systemProgram: SystemProgram2.programId
@@ -11226,7 +12111,7 @@ var CpAmm = class {
11226
12111
  tokenAMint,
11227
12112
  tokenBMint,
11228
12113
  tokenAAmount,
11229
- tokenBAmount: tokenBMint.equals(NATIVE_MINT2) ? max(tokenBAmount, new BN16(1)) : tokenBAmount,
12114
+ tokenBAmount: tokenBMint.equals(NATIVE_MINT2) ? max(tokenBAmount, new BN19(1)) : tokenBAmount,
11230
12115
  payer,
11231
12116
  positionNft,
11232
12117
  tokenAProgram,
@@ -11266,7 +12151,7 @@ var CpAmm = class {
11266
12151
  tokenBVault,
11267
12152
  payerTokenA,
11268
12153
  payerTokenB,
11269
- token2022Program: TOKEN_2022_PROGRAM_ID2,
12154
+ token2022Program: TOKEN_2022_PROGRAM_ID3,
11270
12155
  tokenAProgram,
11271
12156
  tokenBProgram,
11272
12157
  systemProgram: SystemProgram2.programId
@@ -11361,7 +12246,7 @@ var CpAmm = class {
11361
12246
  tokenBVault,
11362
12247
  payerTokenA,
11363
12248
  payerTokenB,
11364
- token2022Program: TOKEN_2022_PROGRAM_ID2,
12249
+ token2022Program: TOKEN_2022_PROGRAM_ID3,
11365
12250
  tokenAProgram,
11366
12251
  tokenBProgram,
11367
12252
  systemProgram: SystemProgram2.programId
@@ -11774,20 +12659,21 @@ var CpAmm = class {
11774
12659
  }
11775
12660
  let { poolState } = params;
11776
12661
  poolState = poolState != null ? poolState : yield this.fetchPoolState(pool);
11777
- const { maxLimiterDuration, maxFeeBps } = parseRateLimiterSecondFactor(
11778
- poolState.poolFees.baseFee.secondFactor
11779
- );
12662
+ const data = Buffer.from(poolState.poolFees.baseFee.baseFeeInfo.data);
12663
+ const modeIndex = data.readUInt8(8);
12664
+ const baseFeeMode = modeIndex;
11780
12665
  let rateLimiterApplied = false;
11781
- if (poolState.poolFees.baseFee.baseFeeMode === 2 /* RateLimiter */) {
12666
+ if (baseFeeMode === 2 /* RateLimiter */) {
11782
12667
  const currentPoint = yield getCurrentPoint(
11783
12668
  this._program.provider.connection,
11784
12669
  poolState.activationType
11785
12670
  );
12671
+ const rateLimiterPoolFees = decodePodAlignedFeeRateLimiter(data);
11786
12672
  rateLimiterApplied = isRateLimiterApplied(
11787
- poolState.poolFees.baseFee.thirdFactor,
11788
- maxLimiterDuration,
11789
- maxFeeBps,
11790
- poolState.poolFees.baseFee.firstFactor,
12673
+ rateLimiterPoolFees.referenceAmount,
12674
+ rateLimiterPoolFees.maxLimiterDuration,
12675
+ rateLimiterPoolFees.maxFeeBps,
12676
+ rateLimiterPoolFees.feeIncrementBps,
11791
12677
  currentPoint,
11792
12678
  poolState.activationPoint,
11793
12679
  tradeDirection
@@ -11884,20 +12770,21 @@ var CpAmm = class {
11884
12770
  }
11885
12771
  let { poolState } = params;
11886
12772
  poolState = poolState != null ? poolState : yield this.fetchPoolState(pool);
11887
- const { maxLimiterDuration, maxFeeBps } = parseRateLimiterSecondFactor(
11888
- poolState.poolFees.baseFee.secondFactor
11889
- );
12773
+ const data = Buffer.from(poolState.poolFees.baseFee.baseFeeInfo.data);
12774
+ const modeIndex = data.readUInt8(8);
12775
+ const baseFeeMode = modeIndex;
11890
12776
  let rateLimiterApplied = false;
11891
- if (poolState.poolFees.baseFee.baseFeeMode === 2 /* RateLimiter */) {
12777
+ if (baseFeeMode === 2 /* RateLimiter */) {
11892
12778
  const currentPoint = yield getCurrentPoint(
11893
12779
  this._program.provider.connection,
11894
12780
  poolState.activationType
11895
12781
  );
12782
+ const rateLimiterPoolFees = decodePodAlignedFeeRateLimiter(data);
11896
12783
  rateLimiterApplied = isRateLimiterApplied(
11897
- poolState.poolFees.baseFee.thirdFactor,
11898
- maxLimiterDuration,
11899
- maxFeeBps,
11900
- poolState.poolFees.baseFee.firstFactor,
12784
+ rateLimiterPoolFees.referenceAmount,
12785
+ rateLimiterPoolFees.maxLimiterDuration,
12786
+ rateLimiterPoolFees.maxFeeBps,
12787
+ rateLimiterPoolFees.feeIncrementBps,
11901
12788
  currentPoint,
11902
12789
  poolState.activationPoint,
11903
12790
  tradeDirection
@@ -12166,7 +13053,7 @@ var CpAmm = class {
12166
13053
  );
12167
13054
  return total.add(available);
12168
13055
  },
12169
- new BN16(0)
13056
+ new BN19(0)
12170
13057
  );
12171
13058
  positionBLiquidityDelta = positionBLiquidityDelta.add(
12172
13059
  totalAvailableVestingLiquidity
@@ -12737,8 +13624,10 @@ export {
12737
13624
  DYNAMIC_FEE_ROUNDING_OFFSET,
12738
13625
  DYNAMIC_FEE_SCALING_FACTOR,
12739
13626
  FEE_DENOMINATOR,
13627
+ FEE_PADDING,
13628
+ FeeMarketCapScheduler,
12740
13629
  FeeRateLimiter,
12741
- FeeScheduler,
13630
+ FeeTimeScheduler,
12742
13631
  LIQUIDITY_SCALE,
12743
13632
  MAX,
12744
13633
  MAX_CU_BUFFER,
@@ -12779,10 +13668,18 @@ export {
12779
13668
  convertToFeeSchedulerSecondFactor,
12780
13669
  convertToLamports,
12781
13670
  convertToRateLimiterSecondFactor,
13671
+ cpAmmCoder,
12782
13672
  decimalToQ64,
13673
+ decodeFeeMarketCapSchedulerParams,
13674
+ decodeFeeRateLimiterParams,
13675
+ decodeFeeTimeSchedulerParams,
13676
+ decodePodAlignedFeeMarketCapScheduler,
13677
+ decodePodAlignedFeeRateLimiter,
13678
+ decodePodAlignedFeeTimeScheduler,
12783
13679
  deriveClaimFeeOperatorAddress,
12784
13680
  deriveConfigAddress,
12785
13681
  deriveCustomizablePoolAddress,
13682
+ deriveOperatorAddress,
12786
13683
  derivePoolAddress,
12787
13684
  derivePoolAuthority,
12788
13685
  derivePositionAddress,
@@ -12790,6 +13687,9 @@ export {
12790
13687
  deriveRewardVaultAddress,
12791
13688
  deriveTokenBadgeAddress,
12792
13689
  deriveTokenVaultAddress,
13690
+ encodeFeeMarketCapSchedulerParams,
13691
+ encodeFeeRateLimiterParams,
13692
+ encodeFeeTimeSchedulerParams,
12793
13693
  feeNumeratorToBps,
12794
13694
  fromDecimalToBN,
12795
13695
  getAllPositionNftAccountByOwner,
@@ -12799,8 +13699,6 @@ export {
12799
13699
  getAmountWithSlippage,
12800
13700
  getAvailableVestingLiquidity,
12801
13701
  getBaseFeeHandler,
12802
- getBaseFeeNumerator,
12803
- getBaseFeeNumeratorByPeriod,
12804
13702
  getBaseFeeParams,
12805
13703
  getCheckedAmounts,
12806
13704
  getCurrentPoint,
@@ -12811,13 +13709,20 @@ export {
12811
13709
  getExcludedFeeAmount,
12812
13710
  getExcludedFeeAmountFromIncludedFeeAmount,
12813
13711
  getFeeInPeriod,
13712
+ getFeeMarketCapBaseFeeNumerator,
13713
+ getFeeMarketCapBaseFeeNumeratorByPeriod,
13714
+ getFeeMarketCapMinBaseFeeNumerator,
13715
+ getFeeMarketCapSchedulerParams,
12814
13716
  getFeeMode,
12815
13717
  getFeeNumeratorFromExcludedFeeAmount,
12816
13718
  getFeeNumeratorFromIncludedFeeAmount,
12817
13719
  getFeeNumeratorOnExponentialFeeScheduler,
12818
13720
  getFeeNumeratorOnLinearFeeScheduler,
12819
13721
  getFeeOnAmount,
12820
- getFeeSchedulerParams,
13722
+ getFeeTimeBaseFeeNumerator,
13723
+ getFeeTimeBaseFeeNumeratorByPeriod,
13724
+ getFeeTimeMinBaseFeeNumerator,
13725
+ getFeeTimeSchedulerParams,
12821
13726
  getFirstKey,
12822
13727
  getIncludedFeeAmount,
12823
13728
  getLiquidityDeltaFromAmountA,
@@ -12827,7 +13732,6 @@ export {
12827
13732
  getMaxFeeBps,
12828
13733
  getMaxFeeNumerator,
12829
13734
  getMaxIndex,
12830
- getMinBaseFeeNumerator,
12831
13735
  getNextSqrtPriceFromAmountInARoundingUp,
12832
13736
  getNextSqrtPriceFromAmountInBRoundingDown,
12833
13737
  getNextSqrtPriceFromAmountOutARoundingUp,
@@ -12855,6 +13759,7 @@ export {
12855
13759
  getUnClaimLpFee,
12856
13760
  getUserRewardPending,
12857
13761
  hasPartner,
13762
+ hasTransferHookExtension,
12858
13763
  isDynamicFeeEnabled,
12859
13764
  isNonZeroRateLimiter,
12860
13765
  isRateLimiterApplied,
@@ -12873,11 +13778,18 @@ export {
12873
13778
  swapQuoteExactInput,
12874
13779
  swapQuoteExactOutput,
12875
13780
  swapQuotePartialInput,
13781
+ toBorshFeeTimeScheduler,
12876
13782
  toNumerator,
13783
+ toPodAlignedFeeTimeScheduler,
12877
13784
  unwrapSOLInstruction,
12878
13785
  validateFeeFraction,
13786
+ validateFeeMarketCapBaseFeeIsStatic,
13787
+ validateFeeMarketCapScheduler,
12879
13788
  validateFeeRateLimiter,
12880
- validateFeeScheduler,
13789
+ validateFeeRateLimiterBaseFeeIsStatic,
13790
+ validateFeeTimeScheduler,
13791
+ validateFeeTimeSchedulerBaseFeeIsStatic,
13792
+ validateNoTransferHook,
12881
13793
  vestingByPositionFilter,
12882
13794
  wrapSOLInstruction
12883
13795
  };