@steerprotocol/sdk 3.4.2 → 3.5.0
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.browser.mjs +774 -70
- package/dist/index.browser.mjs.map +1 -1
- package/dist/index.cjs +791 -69
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.mts +360 -2
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +774 -70
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -9257,7 +9257,7 @@ const steerSubgraphConfig = {
|
|
|
9257
9257
|
[Chain.Zircuit]: offlineSubgraphUrl("zircuit"),
|
|
9258
9258
|
[Chain.Moonbeam]: offlineSubgraphUrl("moonbeam"),
|
|
9259
9259
|
[Chain.Sei]: offlineSubgraphUrl("sei"),
|
|
9260
|
-
[Chain.Sonic]:
|
|
9260
|
+
[Chain.Sonic]: "https://api.subgraph.ormilabs.com/api/public/803c8c8c-be12-4188-8523-b9853e23051d/subgraphs/steer-protocol-sonic/prod/gn",
|
|
9261
9261
|
[Chain.Zeta]: offlineSubgraphUrl("zeta"),
|
|
9262
9262
|
[Chain.Mainnet]: "https://api.subgraph.ormilabs.com/api/public/803c8c8c-be12-4188-8523-b9853e23051d/subgraphs/steer-protocol-mainnet/prod/gn",
|
|
9263
9263
|
[Chain.Soneium]: offlineSubgraphUrl("soneium"),
|
|
@@ -24415,7 +24415,7 @@ const PROVENANCE_BY_VARIANT = Object.freeze({
|
|
|
24415
24415
|
"integral-v1": provenance$1(SDK_CONFIG_URL, "https://github.com/cryptoalgebra/Algebra/blob/3eae63f432a889fca5b000e9bd61078c6f923995/src/core/contracts/interfaces/IAlgebraFactory.sol"),
|
|
24416
24416
|
"integral-v2": provenance$1(SDK_CONFIG_URL, "https://github.com/cryptoalgebra/Algebra/blob/62f01348af24b96d7d16f6b56fbaa61e512ba1c5/src/core/contracts/interfaces/IAlgebraFactory.sol", "https://github.com/cryptoalgebra/Algebra/blob/62f01348af24b96d7d16f6b56fbaa61e512ba1c5/src/periphery/contracts/interfaces/IAlgebraCustomPoolEntryPoint.sol")
|
|
24417
24417
|
});
|
|
24418
|
-
function deployment$
|
|
24418
|
+
function deployment$2(input) {
|
|
24419
24419
|
const shape = input.variant === "directional" ? {
|
|
24420
24420
|
adapter: "algebra-directional-pair-v1",
|
|
24421
24421
|
version: 1,
|
|
@@ -24457,179 +24457,179 @@ function deployment$1(input) {
|
|
|
24457
24457
|
* a runtime fallback.
|
|
24458
24458
|
*/
|
|
24459
24459
|
const ALGEBRA_LIFECYCLE_DEPLOYMENTS = Object.freeze([
|
|
24460
|
-
deployment$
|
|
24460
|
+
deployment$2({
|
|
24461
24461
|
chainId: ChainId.Polygon,
|
|
24462
24462
|
protocol: Protocol.QuickSwap,
|
|
24463
24463
|
variant: "legacy",
|
|
24464
24464
|
factory: "0x411b0fAcC3489691f28ad58c47006AF5E3Ab3A28"
|
|
24465
24465
|
}),
|
|
24466
|
-
deployment$
|
|
24466
|
+
deployment$2({
|
|
24467
24467
|
chainId: ChainId.PolygonzkEVM,
|
|
24468
24468
|
protocol: Protocol.QuickSwap,
|
|
24469
24469
|
variant: "legacy",
|
|
24470
24470
|
factory: "0x4B9f4d2435Ef65559567e5DbFC1BbB37abC43B57"
|
|
24471
24471
|
}),
|
|
24472
|
-
deployment$
|
|
24472
|
+
deployment$2({
|
|
24473
24473
|
chainId: ChainId.Zircuit,
|
|
24474
24474
|
protocol: Protocol.Ocelex,
|
|
24475
24475
|
variant: "legacy",
|
|
24476
24476
|
factory: "0x03057ae6294292b299a1863420edD65e0197AFEf"
|
|
24477
24477
|
}),
|
|
24478
|
-
deployment$
|
|
24478
|
+
deployment$2({
|
|
24479
24479
|
chainId: ChainId.Arbitrum,
|
|
24480
24480
|
protocol: Protocol.Camelot,
|
|
24481
24481
|
variant: "directional",
|
|
24482
24482
|
factory: "0x1a3c9B1d2F0529D97f2afC5136Cc23e58f1FD35B"
|
|
24483
24483
|
}),
|
|
24484
|
-
deployment$
|
|
24484
|
+
deployment$2({
|
|
24485
24485
|
chainId: ChainId.Apechain,
|
|
24486
24486
|
protocol: Protocol.Camelot,
|
|
24487
24487
|
variant: "directional",
|
|
24488
24488
|
factory: "0x1a3c9B1d2F0529D97f2afC5136Cc23e58f1FD35B"
|
|
24489
24489
|
}),
|
|
24490
|
-
deployment$
|
|
24490
|
+
deployment$2({
|
|
24491
24491
|
chainId: ChainId.Linea,
|
|
24492
24492
|
protocol: Protocol.Lynex,
|
|
24493
24493
|
variant: "legacy",
|
|
24494
24494
|
factory: "0x622b2c98123D303ae067DB4925CD6282B3A08D0F"
|
|
24495
24495
|
}),
|
|
24496
|
-
deployment$
|
|
24496
|
+
deployment$2({
|
|
24497
24497
|
chainId: ChainId.BSC,
|
|
24498
24498
|
protocol: Protocol.Thena,
|
|
24499
24499
|
variant: "legacy",
|
|
24500
24500
|
factory: "0x306F06C147f064A010530292A1EB6737c3e378e4"
|
|
24501
24501
|
}),
|
|
24502
|
-
deployment$
|
|
24502
|
+
deployment$2({
|
|
24503
24503
|
chainId: ChainId.Metis,
|
|
24504
24504
|
protocol: Protocol.Hercules,
|
|
24505
24505
|
variant: "directional",
|
|
24506
24506
|
factory: "0xC5BfA92f27dF36d268422EE314a1387bB5ffB06A"
|
|
24507
24507
|
}),
|
|
24508
|
-
deployment$
|
|
24508
|
+
deployment$2({
|
|
24509
24509
|
chainId: ChainId.XLayer,
|
|
24510
24510
|
protocol: Protocol.QuickSwapAlgebra,
|
|
24511
24511
|
variant: "legacy",
|
|
24512
24512
|
factory: "0xd2480162Aa7F02Ead7BF4C127465446150D58452"
|
|
24513
24513
|
}),
|
|
24514
|
-
deployment$
|
|
24514
|
+
deployment$2({
|
|
24515
24515
|
chainId: ChainId.Moonbeam,
|
|
24516
24516
|
protocol: Protocol.StellaSwap,
|
|
24517
24517
|
variant: "legacy",
|
|
24518
24518
|
factory: "0xabE1655110112D0E45EF91e94f8d757e4ddBA59C"
|
|
24519
24519
|
}),
|
|
24520
|
-
deployment$
|
|
24520
|
+
deployment$2({
|
|
24521
24521
|
chainId: ChainId.Mode,
|
|
24522
24522
|
protocol: Protocol.Kim,
|
|
24523
24523
|
variant: "integral-v1",
|
|
24524
24524
|
factory: "0xB5F00c2C5f8821155D8ed27E31932CFD9DB3C5D5"
|
|
24525
24525
|
}),
|
|
24526
|
-
deployment$
|
|
24526
|
+
deployment$2({
|
|
24527
24527
|
chainId: ChainId.Base,
|
|
24528
24528
|
protocol: Protocol.Kim,
|
|
24529
24529
|
variant: "integral-v1",
|
|
24530
24530
|
factory: "0x2F0d41f94d5D1550b79A83D2fe85C82d68c5a3ca"
|
|
24531
24531
|
}),
|
|
24532
|
-
deployment$
|
|
24532
|
+
deployment$2({
|
|
24533
24533
|
chainId: ChainId.Telos,
|
|
24534
24534
|
protocol: Protocol.Swapsicle,
|
|
24535
24535
|
variant: "integral-v1",
|
|
24536
24536
|
factory: "0xA09BAbf9A48003ae9b9333966a8Bda94d820D0d9"
|
|
24537
24537
|
}),
|
|
24538
|
-
deployment$
|
|
24538
|
+
deployment$2({
|
|
24539
24539
|
chainId: ChainId.Blast,
|
|
24540
24540
|
protocol: Protocol.Fenix,
|
|
24541
24541
|
variant: "integral-v1",
|
|
24542
24542
|
factory: "0x7a44CD060afC1B6F4c80A2B9b37f4473E74E25Df"
|
|
24543
24543
|
}),
|
|
24544
|
-
deployment$
|
|
24544
|
+
deployment$2({
|
|
24545
24545
|
chainId: ChainId.Taiko,
|
|
24546
24546
|
protocol: Protocol.Henjin,
|
|
24547
24547
|
variant: "integral-v1",
|
|
24548
24548
|
factory: "0x42B08e7a9211482d3643a126a7dF1895448d3509",
|
|
24549
24549
|
customPoolEntryPoint: "0x441013A52DDedc8D02eB9B90F7A555F6848188b5"
|
|
24550
24550
|
}),
|
|
24551
|
-
deployment$
|
|
24551
|
+
deployment$2({
|
|
24552
24552
|
chainId: ChainId.Sonic,
|
|
24553
24553
|
protocol: Protocol.SilverSwap,
|
|
24554
24554
|
variant: "integral-v1",
|
|
24555
24555
|
factory: "0xb860200BD68dc39cEAfd6ebb82883f189f4CdA76"
|
|
24556
24556
|
}),
|
|
24557
|
-
deployment$
|
|
24557
|
+
deployment$2({
|
|
24558
24558
|
chainId: ChainId.Nibiru,
|
|
24559
24559
|
protocol: Protocol.SilverSwap,
|
|
24560
24560
|
variant: "integral-v1",
|
|
24561
24561
|
factory: "0xb860200BD68dc39cEAfd6ebb82883f189f4CdA76"
|
|
24562
24562
|
}),
|
|
24563
|
-
deployment$
|
|
24563
|
+
deployment$2({
|
|
24564
24564
|
chainId: ChainId.Zeta,
|
|
24565
24565
|
protocol: Protocol.Beam,
|
|
24566
24566
|
variant: "integral-v1",
|
|
24567
24567
|
factory: "0x28b5244B6CA7Cb07f2f7F40edE944c07C2395603"
|
|
24568
24568
|
}),
|
|
24569
|
-
deployment$
|
|
24569
|
+
deployment$2({
|
|
24570
24570
|
chainId: ChainId.Core,
|
|
24571
24571
|
protocol: Protocol.Glyph,
|
|
24572
24572
|
variant: "integral-v1",
|
|
24573
24573
|
factory: "0x74EfE55beA4988e7D92D03EFd8ddB8BF8b7bD597"
|
|
24574
24574
|
}),
|
|
24575
|
-
deployment$
|
|
24575
|
+
deployment$2({
|
|
24576
24576
|
chainId: ChainId.Hyperevm,
|
|
24577
24577
|
protocol: Protocol.Nest,
|
|
24578
24578
|
variant: "integral-v1",
|
|
24579
24579
|
factory: "0xF77Bd082c627aA54591cF2f2EaA811fd1AB3b1F3"
|
|
24580
24580
|
}),
|
|
24581
|
-
deployment$
|
|
24581
|
+
deployment$2({
|
|
24582
24582
|
chainId: ChainId.Soneium,
|
|
24583
24583
|
protocol: Protocol.QuickSwapIntegral,
|
|
24584
24584
|
variant: "integral-v2",
|
|
24585
24585
|
factory: "0x8Ff309F68F6Caf77a78E9C20d2Af7Ed4bE2D7093"
|
|
24586
24586
|
}),
|
|
24587
|
-
deployment$
|
|
24587
|
+
deployment$2({
|
|
24588
24588
|
chainId: ChainId.Base,
|
|
24589
24589
|
protocol: Protocol.QuickSwapIntegral,
|
|
24590
24590
|
variant: "integral-v2",
|
|
24591
24591
|
factory: "0xC5396866754799B9720125B104AE01d935Ab9C7b",
|
|
24592
24592
|
customPoolEntryPoint: "0xb9ce7698cE3dCf21cc88bf7dCc1fE20C85E4226E"
|
|
24593
24593
|
}),
|
|
24594
|
-
deployment$
|
|
24594
|
+
deployment$2({
|
|
24595
24595
|
chainId: ChainId.Polygon,
|
|
24596
24596
|
protocol: Protocol.QuickSwapIntegral,
|
|
24597
24597
|
variant: "integral-v2",
|
|
24598
24598
|
factory: "0x134c1dBE4860A9cAaf89002574fFe814772D9904",
|
|
24599
24599
|
customPoolEntryPoint: "0xfcfE065bc131Fa8Bb31A227b2fF4F0EC47D3F1a2"
|
|
24600
24600
|
}),
|
|
24601
|
-
deployment$
|
|
24601
|
+
deployment$2({
|
|
24602
24602
|
chainId: ChainId.Bera,
|
|
24603
24603
|
protocol: Protocol.Wasabee,
|
|
24604
24604
|
variant: "integral-v2",
|
|
24605
24605
|
factory: "0x7d53327D78EFD0b463bd8d7dc938C52402323b95"
|
|
24606
24606
|
}),
|
|
24607
|
-
deployment$
|
|
24607
|
+
deployment$2({
|
|
24608
24608
|
chainId: ChainId.Ronin,
|
|
24609
24609
|
protocol: Protocol.KatanaIntegral,
|
|
24610
24610
|
variant: "integral-v2",
|
|
24611
24611
|
factory: "0x7ecaf729C6FFb04448aA89A722cA370724BF70De"
|
|
24612
24612
|
}),
|
|
24613
|
-
deployment$
|
|
24613
|
+
deployment$2({
|
|
24614
24614
|
chainId: ChainId.Avalanche,
|
|
24615
24615
|
protocol: Protocol.Blackhole,
|
|
24616
24616
|
variant: "integral-v2",
|
|
24617
24617
|
factory: "0x512eb749541B7cf294be882D636218c84a5e9E5F"
|
|
24618
24618
|
}),
|
|
24619
|
-
deployment$
|
|
24619
|
+
deployment$2({
|
|
24620
24620
|
chainId: ChainId.Mainnet,
|
|
24621
24621
|
protocol: Protocol.Cypher,
|
|
24622
24622
|
variant: "integral-v2",
|
|
24623
24623
|
factory: "0xfb8Ed3485EfA29a0e4bed93351dD51B59fC4b0f0",
|
|
24624
24624
|
customPoolEntryPoint: "0x79616564DB0294ecBa5912f1cE985FD1c11eeF51"
|
|
24625
24625
|
}),
|
|
24626
|
-
deployment$
|
|
24626
|
+
deployment$2({
|
|
24627
24627
|
chainId: ChainId.Flare,
|
|
24628
24628
|
protocol: Protocol.SparkIntegral,
|
|
24629
24629
|
variant: "integral-v2",
|
|
24630
24630
|
factory: "0x805488DaA81c1b9e7C5cE3f1DCeA28F21448EC6A"
|
|
24631
24631
|
}),
|
|
24632
|
-
deployment$
|
|
24632
|
+
deployment$2({
|
|
24633
24633
|
chainId: ChainId.Base,
|
|
24634
24634
|
protocol: Protocol.Hydrex,
|
|
24635
24635
|
variant: "integral-v2",
|
|
@@ -24662,6 +24662,164 @@ function validateAlgebraLifecycleDeployment(value) {
|
|
|
24662
24662
|
return configured;
|
|
24663
24663
|
}
|
|
24664
24664
|
//#endregion
|
|
24665
|
+
//#region src/pool-lifecycle/capabilities/aerodrome-slipstream.ts
|
|
24666
|
+
const factoryRegistry = (0, viem.getAddress)("0x5C3F18F06CC09CA1910767A34a20F771039E37C0");
|
|
24667
|
+
const voter = (0, viem.getAddress)("0x16613524e02aD97edfef371Bc883F2f5D6c480A5");
|
|
24668
|
+
const originalFactory = (0, viem.getAddress)("0x5e7BB104d84c7CB9B682AaC2F3d509f5F406809A");
|
|
24669
|
+
function deployment$1(input) {
|
|
24670
|
+
return Object.freeze({
|
|
24671
|
+
supported: true,
|
|
24672
|
+
schemaVersion: 1,
|
|
24673
|
+
family: "aerodrome-slipstream",
|
|
24674
|
+
adapter: "aerodrome-slipstream-factory-v1",
|
|
24675
|
+
version: 1,
|
|
24676
|
+
...input
|
|
24677
|
+
});
|
|
24678
|
+
}
|
|
24679
|
+
const AERODROME_SLIPSTREAM_LIFECYCLE_DEPLOYMENTS = Object.freeze([
|
|
24680
|
+
deployment$1({
|
|
24681
|
+
chainId: ChainId.Base,
|
|
24682
|
+
protocol: Protocol.Aerodrome,
|
|
24683
|
+
generation: 1,
|
|
24684
|
+
latest: false,
|
|
24685
|
+
factory: originalFactory,
|
|
24686
|
+
factoryRuntimeCodeHash: "0x7340cf80843bd721bcaefbfc050e38304cb4174c239e6e914e3056f27f39b11c",
|
|
24687
|
+
poolImplementation: (0, viem.getAddress)("0xeC8E5342B19977B4eF8892e02D8DAEcfa1315831"),
|
|
24688
|
+
poolImplementationRuntimeCodeHash: "0x772fb5c610b40a122036f544e5b9b5bce6becb19db9524331289d1aaed2d5888",
|
|
24689
|
+
poolProxyRuntimeCodeHash: "0xacd6710f7037ad095b1e4d5f8ee5b2681069cb4dd316e77e4e0cb8f85716a2a1",
|
|
24690
|
+
factoryRegistry,
|
|
24691
|
+
voter,
|
|
24692
|
+
legacyCLFactory: null,
|
|
24693
|
+
sourceVerification: Object.freeze({
|
|
24694
|
+
sourceRevision: "0x4ef07edcf5aaac5c22bcef6718c77e0416e7e472",
|
|
24695
|
+
compilerVersion: "0.7.6+commit.7338295f",
|
|
24696
|
+
optimizer: Object.freeze({
|
|
24697
|
+
enabled: true,
|
|
24698
|
+
runs: 200
|
|
24699
|
+
}),
|
|
24700
|
+
executableRuntimeMatch: true,
|
|
24701
|
+
immutableAnchors: Object.freeze({
|
|
24702
|
+
factoryRegistry,
|
|
24703
|
+
voter,
|
|
24704
|
+
poolImplementation: (0, viem.getAddress)("0xeC8E5342B19977B4eF8892e02D8DAEcfa1315831"),
|
|
24705
|
+
legacyCLFactory: null
|
|
24706
|
+
})
|
|
24707
|
+
}),
|
|
24708
|
+
provenance: Object.freeze({
|
|
24709
|
+
source: "official-deployment",
|
|
24710
|
+
urls: Object.freeze([
|
|
24711
|
+
"https://github.com/aerodrome-finance/slipstream/commit/37eead2c7e5302a204dec78bfa0775bbb8ff48a2",
|
|
24712
|
+
"https://github.com/aerodrome-finance/slipstream/blob/4ef07edcf5aaac5c22bcef6718c77e0416e7e472/contracts/core/CLFactory.sol",
|
|
24713
|
+
"https://github.com/aerodrome-finance/slipstream/blob/4ef07edcf5aaac5c22bcef6718c77e0416e7e472/contracts/core/CLPool.sol",
|
|
24714
|
+
"https://basescan.org/address/0x5e7BB104d84c7CB9B682AaC2F3d509f5F406809A#code"
|
|
24715
|
+
])
|
|
24716
|
+
})
|
|
24717
|
+
}),
|
|
24718
|
+
deployment$1({
|
|
24719
|
+
chainId: ChainId.Base,
|
|
24720
|
+
protocol: Protocol.AerodromeV2,
|
|
24721
|
+
generation: 2,
|
|
24722
|
+
latest: false,
|
|
24723
|
+
factory: (0, viem.getAddress)("0xaDe65c38CD4849aDBA595a4323a8C7DdfE89716a"),
|
|
24724
|
+
factoryRuntimeCodeHash: "0x0e72100f63ce8e32c95370fa9636d38c8cf434a820f2a7a69985e50930d2cb85",
|
|
24725
|
+
poolImplementation: (0, viem.getAddress)("0x942e97a4c6FdC38B4CD1c0298D37d81fDD8E5A16"),
|
|
24726
|
+
poolImplementationRuntimeCodeHash: "0x916bc5496cc07ea86289bc3a08a90f93dcae34686be6634f6e89ef260c3df4fa",
|
|
24727
|
+
poolProxyRuntimeCodeHash: "0x18308290b554b22918ea53c7e4e49eb871181d182749bf9e3a65ef949d3be808",
|
|
24728
|
+
factoryRegistry,
|
|
24729
|
+
voter,
|
|
24730
|
+
legacyCLFactory: originalFactory,
|
|
24731
|
+
sourceVerification: Object.freeze({
|
|
24732
|
+
sourceRevision: "0xaa539f4cdb59212aaf846cce60f6ac5e9470c157",
|
|
24733
|
+
compilerVersion: "0.7.6+commit.7338295f",
|
|
24734
|
+
optimizer: Object.freeze({
|
|
24735
|
+
enabled: true,
|
|
24736
|
+
runs: 200
|
|
24737
|
+
}),
|
|
24738
|
+
executableRuntimeMatch: true,
|
|
24739
|
+
immutableAnchors: Object.freeze({
|
|
24740
|
+
factoryRegistry,
|
|
24741
|
+
voter,
|
|
24742
|
+
poolImplementation: (0, viem.getAddress)("0x942e97a4c6FdC38B4CD1c0298D37d81fDD8E5A16"),
|
|
24743
|
+
legacyCLFactory: originalFactory
|
|
24744
|
+
})
|
|
24745
|
+
}),
|
|
24746
|
+
provenance: Object.freeze({
|
|
24747
|
+
source: "official-deployment",
|
|
24748
|
+
urls: Object.freeze([
|
|
24749
|
+
"https://github.com/aerodrome-finance/slipstream/commit/aa539f4cdb59212aaf846cce60f6ac5e9470c157",
|
|
24750
|
+
"https://github.com/aerodrome-finance/slipstream/blob/aa539f4cdb59212aaf846cce60f6ac5e9470c157/contracts/core/CLFactory.sol",
|
|
24751
|
+
"https://github.com/aerodrome-finance/slipstream/blob/aa539f4cdb59212aaf846cce60f6ac5e9470c157/contracts/core/CLPool.sol",
|
|
24752
|
+
"https://github.com/aerodrome-finance/slipstream/blob/aa539f4cdb59212aaf846cce60f6ac5e9470c157/script/constants/output/DeployCL-Base-Gauge-Caps.json",
|
|
24753
|
+
"https://basescan.org/address/0xaDe65c38CD4849aDBA595a4323a8C7DdfE89716a#code"
|
|
24754
|
+
])
|
|
24755
|
+
})
|
|
24756
|
+
}),
|
|
24757
|
+
deployment$1({
|
|
24758
|
+
chainId: ChainId.Base,
|
|
24759
|
+
protocol: Protocol.AerodromeV3,
|
|
24760
|
+
generation: 3,
|
|
24761
|
+
latest: true,
|
|
24762
|
+
factory: (0, viem.getAddress)("0xf8f2eB4940CFE7d13603DDDD87f123820Fc061Ef"),
|
|
24763
|
+
factoryRuntimeCodeHash: "0x4961963494e47f363617ab9a0f3999a28b33c519e51392952db06350cce700bd",
|
|
24764
|
+
poolImplementation: (0, viem.getAddress)("0xc770898522D2A9c8Da7A10D63989b6b58305B665"),
|
|
24765
|
+
poolImplementationRuntimeCodeHash: "0xe63484f408c701770737a3c40e435c8183c66b1663f3a8777ce44dd73aff339b",
|
|
24766
|
+
poolProxyRuntimeCodeHash: "0xad8972486d67a48db1f32f254a4c2f4be28df0b5f399559d1e7cd8fbcfbedc96",
|
|
24767
|
+
factoryRegistry,
|
|
24768
|
+
voter,
|
|
24769
|
+
legacyCLFactory: originalFactory,
|
|
24770
|
+
sourceVerification: Object.freeze({
|
|
24771
|
+
sourceRevision: "0x618c88df58f1fa271e9b3bc6bc476a4c37d068dd",
|
|
24772
|
+
compilerVersion: "0.7.6+commit.7338295f",
|
|
24773
|
+
optimizer: Object.freeze({
|
|
24774
|
+
enabled: true,
|
|
24775
|
+
runs: 200
|
|
24776
|
+
}),
|
|
24777
|
+
executableRuntimeMatch: true,
|
|
24778
|
+
immutableAnchors: Object.freeze({
|
|
24779
|
+
factoryRegistry,
|
|
24780
|
+
voter,
|
|
24781
|
+
poolImplementation: (0, viem.getAddress)("0xc770898522D2A9c8Da7A10D63989b6b58305B665"),
|
|
24782
|
+
legacyCLFactory: originalFactory
|
|
24783
|
+
})
|
|
24784
|
+
}),
|
|
24785
|
+
provenance: Object.freeze({
|
|
24786
|
+
source: "official-deployment",
|
|
24787
|
+
urls: Object.freeze([
|
|
24788
|
+
"https://github.com/aerodrome-finance/slipstream/commit/618c88df58f1fa271e9b3bc6bc476a4c37d068dd",
|
|
24789
|
+
"https://github.com/aerodrome-finance/slipstream/blob/618c88df58f1fa271e9b3bc6bc476a4c37d068dd/contracts/core/CLFactory.sol",
|
|
24790
|
+
"https://github.com/aerodrome-finance/slipstream/blob/618c88df58f1fa271e9b3bc6bc476a4c37d068dd/contracts/core/CLPool.sol",
|
|
24791
|
+
"https://github.com/aerodrome-finance/slipstream/blob/618c88df58f1fa271e9b3bc6bc476a4c37d068dd/script/constants/output/DeployCL-Base-MinUnstake.json",
|
|
24792
|
+
"https://basescan.org/address/0xf8f2eB4940CFE7d13603DDDD87f123820Fc061Ef#code"
|
|
24793
|
+
])
|
|
24794
|
+
})
|
|
24795
|
+
})
|
|
24796
|
+
]);
|
|
24797
|
+
const registry = buildCheckedRegistry(AERODROME_SLIPSTREAM_LIFECYCLE_DEPLOYMENTS, (item) => `${item.chainId}:${item.protocol}`, "Aerodrome Slipstream lifecycle deployment");
|
|
24798
|
+
function resolveAerodromeSlipstreamLifecycleDeployment(params) {
|
|
24799
|
+
return registry[`${params.chainId}:${params.protocol}`];
|
|
24800
|
+
}
|
|
24801
|
+
/** Resolve the only factory generation that is eligible for a new pool deployment. */
|
|
24802
|
+
function resolveLatestAerodromeSlipstreamLifecycleDeployment(chainId) {
|
|
24803
|
+
return AERODROME_SLIPSTREAM_LIFECYCLE_DEPLOYMENTS.find((item) => item.chainId === chainId && item.latest);
|
|
24804
|
+
}
|
|
24805
|
+
function assertLatestAerodromeSlipstreamLifecycleDeployment(value) {
|
|
24806
|
+
const configured = validateAerodromeSlipstreamLifecycleDeployment(value);
|
|
24807
|
+
if (!configured.latest) throw new PoolLifecycleError("UNSUPPORTED_DEPLOYMENT", `Aerodrome Slipstream generation ${configured.generation} is read/verification-only; new pools must use the latest generation.`);
|
|
24808
|
+
return configured;
|
|
24809
|
+
}
|
|
24810
|
+
/** Reject mutable or forged deployment metadata at every public boundary. */
|
|
24811
|
+
function validateAerodromeSlipstreamLifecycleDeployment(value) {
|
|
24812
|
+
const candidate = value;
|
|
24813
|
+
const configured = typeof candidate?.chainId === "number" && typeof candidate.protocol === "string" ? resolveAerodromeSlipstreamLifecycleDeployment({
|
|
24814
|
+
chainId: candidate.chainId,
|
|
24815
|
+
protocol: candidate.protocol
|
|
24816
|
+
}) : void 0;
|
|
24817
|
+
try {
|
|
24818
|
+
if (configured && candidate.supported === true && candidate.schemaVersion === configured.schemaVersion && candidate.family === configured.family && candidate.adapter === configured.adapter && candidate.version === configured.version && candidate.generation === configured.generation && candidate.latest === configured.latest && (0, viem.getAddress)(candidate.factory) === configured.factory && candidate.factoryRuntimeCodeHash === configured.factoryRuntimeCodeHash && (0, viem.getAddress)(candidate.poolImplementation) === configured.poolImplementation && candidate.poolImplementationRuntimeCodeHash === configured.poolImplementationRuntimeCodeHash && candidate.poolProxyRuntimeCodeHash === configured.poolProxyRuntimeCodeHash && (0, viem.getAddress)(candidate.factoryRegistry) === configured.factoryRegistry && (0, viem.getAddress)(candidate.voter) === configured.voter && (configured.legacyCLFactory === null ? candidate.legacyCLFactory === null : (0, viem.getAddress)(candidate.legacyCLFactory) === configured.legacyCLFactory)) return configured;
|
|
24819
|
+
} catch {}
|
|
24820
|
+
throw new PoolLifecycleError("UNSUPPORTED_DEPLOYMENT", `Aerodrome Slipstream lifecycle deployment is not configured for chain ${String(candidate?.chainId)} and protocol ${String(candidate?.protocol)}.`);
|
|
24821
|
+
}
|
|
24822
|
+
//#endregion
|
|
24665
24823
|
//#region src/pool-lifecycle/capabilities/v3.ts
|
|
24666
24824
|
const STANDARD_V3_POOL_INIT_CODE_HASH = "0xe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b54";
|
|
24667
24825
|
const SDK_CONFIG_ROOT = "https://github.com/SteerProtocol/sdk/blob/2dfaa0ee00bb80be684206f73e67b8d35f8ce9ff/src/const/amm/configs/protocols";
|
|
@@ -25341,7 +25499,8 @@ function buildLifecycleRegistry() {
|
|
|
25341
25499
|
return buildCheckedRegistry([
|
|
25342
25500
|
...Object.values(V3_LIFECYCLE_DEPLOYMENTS).filter((deployment) => deployment !== void 0),
|
|
25343
25501
|
...CURRENT_V4_LIFECYCLE_DEPLOYMENTS,
|
|
25344
|
-
...ALGEBRA_LIFECYCLE_DEPLOYMENTS
|
|
25502
|
+
...ALGEBRA_LIFECYCLE_DEPLOYMENTS,
|
|
25503
|
+
...AERODROME_SLIPSTREAM_LIFECYCLE_DEPLOYMENTS
|
|
25345
25504
|
], deploymentKey, "pool lifecycle deployment");
|
|
25346
25505
|
}
|
|
25347
25506
|
/**
|
|
@@ -25410,6 +25569,29 @@ const algebraIntegralPoolStateAbi = (0, viem.parseAbi)(["function globalState()
|
|
|
25410
25569
|
*/
|
|
25411
25570
|
const algebraCustomPoolEntryPointAbi = (0, viem.parseAbi)(["function factory() view returns (address)", "function createCustomPool(address deployer,address creator,address tokenA,address tokenB,bytes data) returns (address customPool)"]);
|
|
25412
25571
|
//#endregion
|
|
25572
|
+
//#region src/pool-lifecycle/abis/aerodrome-slipstream.ts
|
|
25573
|
+
/** Exact Base Aerodrome Slipstream CLFactory lifecycle surface. */
|
|
25574
|
+
const aerodromeSlipstreamFactoryAbi = (0, viem.parseAbi)([
|
|
25575
|
+
"event PoolCreated(address indexed token0,address indexed token1,int24 indexed tickSpacing,address pool)",
|
|
25576
|
+
"function getPool(address tokenA,address tokenB,int24 tickSpacing) view returns (address pool)",
|
|
25577
|
+
"function tickSpacingToFee(int24 tickSpacing) view returns (uint24 fee)",
|
|
25578
|
+
"function poolImplementation() view returns (address)",
|
|
25579
|
+
"function factoryRegistry() view returns (address)",
|
|
25580
|
+
"function voter() view returns (address)",
|
|
25581
|
+
"function legacyCLFactory() view returns (address)",
|
|
25582
|
+
"function isPool(address pool) view returns (bool)",
|
|
25583
|
+
"function createPool(address tokenA,address tokenB,int24 tickSpacing,uint160 sqrtPriceX96) returns (address pool)"
|
|
25584
|
+
]);
|
|
25585
|
+
/** Exact Aerodrome Slipstream CLPool lifecycle read and event surface. */
|
|
25586
|
+
const aerodromeSlipstreamPoolAbi = (0, viem.parseAbi)([
|
|
25587
|
+
"event Initialize(uint160 sqrtPriceX96,int24 tick)",
|
|
25588
|
+
"function factory() view returns (address)",
|
|
25589
|
+
"function token0() view returns (address)",
|
|
25590
|
+
"function token1() view returns (address)",
|
|
25591
|
+
"function tickSpacing() view returns (int24)",
|
|
25592
|
+
"function slot0() view returns (uint160 sqrtPriceX96,int24 tick,uint16 observationIndex,uint16 observationCardinality,uint16 observationCardinalityNext,bool unlocked)"
|
|
25593
|
+
]);
|
|
25594
|
+
//#endregion
|
|
25413
25595
|
//#region src/pool-lifecycle/abis/v3.ts
|
|
25414
25596
|
/** Minimal canonical Uniswap V3-compatible factory ABI used by pool lifecycle flows. */
|
|
25415
25597
|
const v3FactoryAbi = [
|
|
@@ -25683,8 +25865,8 @@ function assertAlgebraInitialPrice(key, price) {
|
|
|
25683
25865
|
}
|
|
25684
25866
|
//#endregion
|
|
25685
25867
|
//#region src/pool-lifecycle/algebra/inspect.ts
|
|
25686
|
-
const ZERO = (0, viem.getAddress)("0x0000000000000000000000000000000000000000");
|
|
25687
|
-
async function requireCode(client, address, label, blockNumber) {
|
|
25868
|
+
const ZERO$2 = (0, viem.getAddress)("0x0000000000000000000000000000000000000000");
|
|
25869
|
+
async function requireCode$1(client, address, label, blockNumber) {
|
|
25688
25870
|
const code = await client.getCode({
|
|
25689
25871
|
address,
|
|
25690
25872
|
blockNumber
|
|
@@ -25700,7 +25882,7 @@ async function inspectAlgebraCustomPoolEntryPoint(params) {
|
|
|
25700
25882
|
const blockNumber = params.blockNumber ?? await params.publicClient.getBlockNumber();
|
|
25701
25883
|
const entryPoint = deployment.customPoolEntryPoint;
|
|
25702
25884
|
const factory = deployment.factory;
|
|
25703
|
-
await requireCode(params.publicClient, entryPoint, "Algebra custom pool entry point", blockNumber);
|
|
25885
|
+
await requireCode$1(params.publicClient, entryPoint, "Algebra custom pool entry point", blockNumber);
|
|
25704
25886
|
const entryFactory = (0, viem.getAddress)(await params.publicClient.readContract({
|
|
25705
25887
|
address: entryPoint,
|
|
25706
25888
|
abi: algebraCustomPoolEntryPointAbi,
|
|
@@ -25723,9 +25905,9 @@ async function inspectAlgebraPool(params) {
|
|
|
25723
25905
|
const blockNumber = params.blockNumber ?? await publicClient.getBlockNumber();
|
|
25724
25906
|
const factory = (0, viem.getAddress)(deployment.factory);
|
|
25725
25907
|
await Promise.all([
|
|
25726
|
-
requireCode(publicClient, factory, "Algebra factory", blockNumber),
|
|
25727
|
-
requireCode(publicClient, key.token0, "token0", blockNumber),
|
|
25728
|
-
requireCode(publicClient, key.token1, "token1", blockNumber)
|
|
25908
|
+
requireCode$1(publicClient, factory, "Algebra factory", blockNumber),
|
|
25909
|
+
requireCode$1(publicClient, key.token0, "token0", blockNumber),
|
|
25910
|
+
requireCode$1(publicClient, key.token1, "token1", blockNumber)
|
|
25729
25911
|
]);
|
|
25730
25912
|
const factoryAbi = deployment.createPool === "pair-with-plugin-data" ? algebraIntegralPluginDataFactoryAbi : deployment.variant === "integral-v1" ? algebraIntegralPairFactoryAbi : algebraPairFactoryAbi;
|
|
25731
25913
|
const [poolRaw, poolDeployerRaw] = await Promise.all([publicClient.readContract({
|
|
@@ -25741,8 +25923,8 @@ async function inspectAlgebraPool(params) {
|
|
|
25741
25923
|
blockNumber
|
|
25742
25924
|
})]);
|
|
25743
25925
|
const poolDeployer = (0, viem.getAddress)(poolDeployerRaw);
|
|
25744
|
-
if (poolDeployer === ZERO) throw new PoolLifecycleError("DEPLOYMENT_MISMATCH", `Algebra factory ${factory} reports a zero pool deployer.`);
|
|
25745
|
-
await requireCode(publicClient, poolDeployer, "Algebra pool deployer", blockNumber);
|
|
25926
|
+
if (poolDeployer === ZERO$2) throw new PoolLifecycleError("DEPLOYMENT_MISMATCH", `Algebra factory ${factory} reports a zero pool deployer.`);
|
|
25927
|
+
await requireCode$1(publicClient, poolDeployer, "Algebra pool deployer", blockNumber);
|
|
25746
25928
|
let defaultTickSpacing = null;
|
|
25747
25929
|
let defaultFee = null;
|
|
25748
25930
|
if (deployment.variant === "integral-v1") {
|
|
@@ -25771,7 +25953,7 @@ async function inspectAlgebraPool(params) {
|
|
|
25771
25953
|
}
|
|
25772
25954
|
if (defaultTickSpacing !== null && (!Number.isInteger(defaultTickSpacing) || defaultTickSpacing <= 0)) throw new PoolLifecycleError("DEPLOYMENT_MISMATCH", `Algebra factory ${factory} reports invalid default tick spacing.`);
|
|
25773
25955
|
const poolAddress = (0, viem.getAddress)(poolRaw);
|
|
25774
|
-
if (poolAddress === ZERO) return {
|
|
25956
|
+
if (poolAddress === ZERO$2) return {
|
|
25775
25957
|
schemaVersion: 1,
|
|
25776
25958
|
blockNumber,
|
|
25777
25959
|
deployment,
|
|
@@ -25787,7 +25969,7 @@ async function inspectAlgebraPool(params) {
|
|
|
25787
25969
|
pluginConfig: null,
|
|
25788
25970
|
unlocked: null
|
|
25789
25971
|
};
|
|
25790
|
-
await requireCode(publicClient, poolAddress, "Algebra pool", blockNumber);
|
|
25972
|
+
await requireCode$1(publicClient, poolAddress, "Algebra pool", blockNumber);
|
|
25791
25973
|
const [actualFactoryRaw, token0Raw, token1Raw, tickSpacingRaw] = await Promise.all([
|
|
25792
25974
|
publicClient.readContract({
|
|
25793
25975
|
address: poolAddress,
|
|
@@ -25855,7 +26037,7 @@ async function inspectAlgebraPool(params) {
|
|
|
25855
26037
|
pluginConfig = Number(state[3]);
|
|
25856
26038
|
unlocked = state[5];
|
|
25857
26039
|
const pluginAddress = (0, viem.getAddress)(pluginRaw);
|
|
25858
|
-
plugin = pluginAddress === ZERO ? null : pluginAddress;
|
|
26040
|
+
plugin = pluginAddress === ZERO$2 ? null : pluginAddress;
|
|
25859
26041
|
} else {
|
|
25860
26042
|
const state = await publicClient.readContract({
|
|
25861
26043
|
address: poolAddress,
|
|
@@ -26029,29 +26211,29 @@ async function prepareAlgebraPool(params) {
|
|
|
26029
26211
|
}
|
|
26030
26212
|
//#endregion
|
|
26031
26213
|
//#region src/pool-lifecycle/algebra/types.ts
|
|
26032
|
-
function invalid$
|
|
26214
|
+
function invalid$2(message) {
|
|
26033
26215
|
throw new PoolLifecycleError("INVALID_INPUT", message);
|
|
26034
26216
|
}
|
|
26035
|
-
function record$
|
|
26036
|
-
if (!value || typeof value !== "object" || Array.isArray(value)) return invalid$
|
|
26217
|
+
function record$2(value, label) {
|
|
26218
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) return invalid$2(`${label} must be an object.`);
|
|
26037
26219
|
return value;
|
|
26038
26220
|
}
|
|
26039
26221
|
function address$1(value, label, nullable = false) {
|
|
26040
26222
|
if (nullable && value === null) return null;
|
|
26041
|
-
if (typeof value !== "string" || !(0, viem.isAddress)(value, { strict: true })) return invalid$
|
|
26223
|
+
if (typeof value !== "string" || !(0, viem.isAddress)(value, { strict: true })) return invalid$2(`${label} must be a valid address.`);
|
|
26042
26224
|
const result = (0, viem.getAddress)(value);
|
|
26043
|
-
if (result === "0x0000000000000000000000000000000000000000") return invalid$
|
|
26225
|
+
if (result === "0x0000000000000000000000000000000000000000") return invalid$2(`${label} must not be zero.`);
|
|
26044
26226
|
return result;
|
|
26045
26227
|
}
|
|
26046
|
-
function hex(value, label) {
|
|
26047
|
-
if (typeof value !== "string" || !/^0x(?:[0-9a-fA-F]{2})*$/.test(value)) return invalid$
|
|
26228
|
+
function hex$1(value, label) {
|
|
26229
|
+
if (typeof value !== "string" || !/^0x(?:[0-9a-fA-F]{2})*$/.test(value)) return invalid$2(`${label} must be hex bytes.`);
|
|
26048
26230
|
return value;
|
|
26049
26231
|
}
|
|
26050
26232
|
function key(value) {
|
|
26051
|
-
const item = record$
|
|
26233
|
+
const item = record$2(value, "Algebra key");
|
|
26052
26234
|
const token0 = address$1(item.token0, "Algebra token0");
|
|
26053
26235
|
const token1 = address$1(item.token1, "Algebra token1");
|
|
26054
|
-
if (BigInt(token0) >= BigInt(token1)) return invalid$
|
|
26236
|
+
if (BigInt(token0) >= BigInt(token1)) return invalid$2("Algebra tokens must be canonically ordered and distinct.");
|
|
26055
26237
|
return {
|
|
26056
26238
|
token0,
|
|
26057
26239
|
token1
|
|
@@ -26059,30 +26241,30 @@ function key(value) {
|
|
|
26059
26241
|
}
|
|
26060
26242
|
/** Re-derive target and calldata after a plan crosses a UI/CLI/JSON boundary. */
|
|
26061
26243
|
function validatePreparedAlgebraPoolAction(value) {
|
|
26062
|
-
const action = record$
|
|
26063
|
-
if (action.schemaVersion !== 1 || action.kind !== "algebra-create" && action.kind !== "algebra-initialize") return invalid$
|
|
26064
|
-
if (typeof action.protocol !== "string") return invalid$
|
|
26065
|
-
const tx = record$
|
|
26066
|
-
if (!Number.isSafeInteger(tx.chainId) || Number(tx.chainId) <= 0) return invalid$
|
|
26067
|
-
if (tx.value !== 0n) return invalid$
|
|
26244
|
+
const action = record$2(value, "Prepared Algebra action");
|
|
26245
|
+
if (action.schemaVersion !== 1 || action.kind !== "algebra-create" && action.kind !== "algebra-initialize") return invalid$2("Prepared Algebra action kind or schema version is unsupported.");
|
|
26246
|
+
if (typeof action.protocol !== "string") return invalid$2("Algebra action protocol must be a string.");
|
|
26247
|
+
const tx = record$2(action.transaction, "Algebra transaction");
|
|
26248
|
+
if (!Number.isSafeInteger(tx.chainId) || Number(tx.chainId) <= 0) return invalid$2("Algebra chainId must be a positive safe integer.");
|
|
26249
|
+
if (tx.value !== 0n) return invalid$2("Algebra lifecycle transactions must have zero value.");
|
|
26068
26250
|
const to = address$1(tx.to, "Algebra transaction target");
|
|
26069
|
-
const data = hex(tx.data, "Algebra calldata");
|
|
26251
|
+
const data = hex$1(tx.data, "Algebra calldata");
|
|
26070
26252
|
const deployment = resolveAlgebraLifecycleDeployment({
|
|
26071
26253
|
chainId: Number(tx.chainId),
|
|
26072
26254
|
protocol: action.protocol
|
|
26073
26255
|
});
|
|
26074
26256
|
if (!deployment) throw new PoolLifecycleError("UNSUPPORTED_DEPLOYMENT", `No Algebra lifecycle deployment is configured for chain ${tx.chainId} and protocol ${action.protocol}.`);
|
|
26075
|
-
const identity = record$
|
|
26257
|
+
const identity = record$2(action.identity, "Algebra identity");
|
|
26076
26258
|
const poolKey = key(identity.key);
|
|
26077
|
-
if (identity.family !== "algebra" || identity.adapter !== deployment.adapter || identity.version !== deployment.version || identity.variant !== deployment.variant || identity.chainId !== deployment.chainId || address$1(identity.factory, "Algebra identity factory") !== (0, viem.getAddress)(deployment.factory)) return invalid$
|
|
26078
|
-
const expected = record$
|
|
26079
|
-
const preflight = record$
|
|
26080
|
-
if (typeof preflight.blockNumber !== "bigint" || preflight.blockNumber < 0n) return invalid$
|
|
26259
|
+
if (identity.family !== "algebra" || identity.adapter !== deployment.adapter || identity.version !== deployment.version || identity.variant !== deployment.variant || identity.chainId !== deployment.chainId || address$1(identity.factory, "Algebra identity factory") !== (0, viem.getAddress)(deployment.factory)) return invalid$2("Algebra identity does not match the configured deployment.");
|
|
26260
|
+
const expected = record$2(action.expected, "Algebra expectation");
|
|
26261
|
+
const preflight = record$2(action.preflight, "Algebra preflight");
|
|
26262
|
+
if (typeof preflight.blockNumber !== "bigint" || preflight.blockNumber < 0n) return invalid$2("Algebra preflight blockNumber must be a non-negative bigint.");
|
|
26081
26263
|
let expectedTo;
|
|
26082
26264
|
let expectedData;
|
|
26083
26265
|
if (action.kind === "algebra-create") {
|
|
26084
|
-
if (identity.poolAddress !== null || expected.sqrtPriceX96 !== null || preflight.status !== "absent" || preflight.poolAddress !== null || preflight.sqrtPriceX96 !== 0n) return invalid$
|
|
26085
|
-
const pluginData = hex(expected.pluginData, "Algebra plugin data");
|
|
26266
|
+
if (identity.poolAddress !== null || expected.sqrtPriceX96 !== null || preflight.status !== "absent" || preflight.poolAddress !== null || preflight.sqrtPriceX96 !== 0n) return invalid$2("Algebra create cannot bind an existing pool or price.");
|
|
26267
|
+
const pluginData = hex$1(expected.pluginData, "Algebra plugin data");
|
|
26086
26268
|
expectedTo = (0, viem.getAddress)(deployment.factory);
|
|
26087
26269
|
expectedData = deployment.createPool === "pair-with-plugin-data" ? (0, viem.encodeFunctionData)({
|
|
26088
26270
|
abi: algebraIntegralPluginDataFactoryAbi,
|
|
@@ -26099,11 +26281,11 @@ function validatePreparedAlgebraPoolAction(value) {
|
|
|
26099
26281
|
});
|
|
26100
26282
|
} else {
|
|
26101
26283
|
const pool = address$1(identity.poolAddress, "Algebra pool address");
|
|
26102
|
-
if (expected.pluginData !== null || typeof expected.sqrtPriceX96 !== "bigint" || preflight.status !== "uninitialized" || address$1(preflight.poolAddress, "Algebra preflight pool") !== pool || preflight.sqrtPriceX96 !== 0n) return invalid$
|
|
26284
|
+
if (expected.pluginData !== null || typeof expected.sqrtPriceX96 !== "bigint" || preflight.status !== "uninitialized" || address$1(preflight.poolAddress, "Algebra preflight pool") !== pool || preflight.sqrtPriceX96 !== 0n) return invalid$2("Algebra initialize expectation is invalid.");
|
|
26103
26285
|
try {
|
|
26104
26286
|
validateSqrtPriceX96(expected.sqrtPriceX96);
|
|
26105
26287
|
} catch (error) {
|
|
26106
|
-
return invalid$
|
|
26288
|
+
return invalid$2(error instanceof Error ? error.message : "Invalid Algebra price.");
|
|
26107
26289
|
}
|
|
26108
26290
|
expectedTo = pool;
|
|
26109
26291
|
expectedData = (0, viem.encodeFunctionData)({
|
|
@@ -26112,7 +26294,7 @@ function validatePreparedAlgebraPoolAction(value) {
|
|
|
26112
26294
|
args: [expected.sqrtPriceX96]
|
|
26113
26295
|
});
|
|
26114
26296
|
}
|
|
26115
|
-
if (to !== expectedTo || data.toLowerCase() !== expectedData.toLowerCase()) return invalid$
|
|
26297
|
+
if (to !== expectedTo || data.toLowerCase() !== expectedData.toLowerCase()) return invalid$2("Algebra transaction does not match its trusted deployment and expectation.");
|
|
26116
26298
|
return deployment;
|
|
26117
26299
|
}
|
|
26118
26300
|
function deserializePreparedAlgebraPoolAction(serialized) {
|
|
@@ -26390,6 +26572,528 @@ async function verifyAlgebraPoolAction(params) {
|
|
|
26390
26572
|
}
|
|
26391
26573
|
}
|
|
26392
26574
|
//#endregion
|
|
26575
|
+
//#region src/pool-lifecycle/aerodrome-slipstream/key.ts
|
|
26576
|
+
function canonicalizeAerodromeSlipstreamPoolKey(key) {
|
|
26577
|
+
let tokenA;
|
|
26578
|
+
let tokenB;
|
|
26579
|
+
try {
|
|
26580
|
+
tokenA = (0, viem.getAddress)(key.tokenA);
|
|
26581
|
+
tokenB = (0, viem.getAddress)(key.tokenB);
|
|
26582
|
+
} catch {
|
|
26583
|
+
throw new PoolLifecycleError("INVALID_INPUT", "Slipstream pool tokens must be valid addresses.");
|
|
26584
|
+
}
|
|
26585
|
+
if (tokenA === tokenB || tokenA === "0x0000000000000000000000000000000000000000" || tokenB === "0x0000000000000000000000000000000000000000") throw new PoolLifecycleError("INVALID_INPUT", "Slipstream pool tokens must be distinct non-zero addresses.");
|
|
26586
|
+
if (!Number.isSafeInteger(key.tickSpacing) || key.tickSpacing <= 0 || key.tickSpacing >= 16384) throw new PoolLifecycleError("INVALID_INPUT", "Slipstream tick spacing must be an int24 between 1 and 16383.");
|
|
26587
|
+
return BigInt(tokenA) < BigInt(tokenB) ? {
|
|
26588
|
+
token0: tokenA,
|
|
26589
|
+
token1: tokenB,
|
|
26590
|
+
tickSpacing: key.tickSpacing
|
|
26591
|
+
} : {
|
|
26592
|
+
token0: tokenB,
|
|
26593
|
+
token1: tokenA,
|
|
26594
|
+
tickSpacing: key.tickSpacing
|
|
26595
|
+
};
|
|
26596
|
+
}
|
|
26597
|
+
function assertAerodromeSlipstreamInitialPrice(value) {
|
|
26598
|
+
if (typeof value !== "bigint" || value <= 0n || value >= 1n << 160n) throw new PoolLifecycleError("INVALID_INPUT", "Slipstream sqrtPriceX96 must be a non-zero uint160.");
|
|
26599
|
+
return value;
|
|
26600
|
+
}
|
|
26601
|
+
//#endregion
|
|
26602
|
+
//#region src/pool-lifecycle/aerodrome-slipstream/types.ts
|
|
26603
|
+
function invalid$1(message) {
|
|
26604
|
+
throw new PoolLifecycleError("INVALID_INPUT", message);
|
|
26605
|
+
}
|
|
26606
|
+
function record$1(value, label) {
|
|
26607
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) return invalid$1(`${label} must be an object.`);
|
|
26608
|
+
return value;
|
|
26609
|
+
}
|
|
26610
|
+
function nonZeroAddress(value, label) {
|
|
26611
|
+
if (typeof value !== "string" || !(0, viem.isAddress)(value, { strict: true })) return invalid$1(`${label} must be a valid address.`);
|
|
26612
|
+
const address = (0, viem.getAddress)(value);
|
|
26613
|
+
if (address === "0x0000000000000000000000000000000000000000") return invalid$1(`${label} must not be zero.`);
|
|
26614
|
+
return address;
|
|
26615
|
+
}
|
|
26616
|
+
function hex(value, label) {
|
|
26617
|
+
if (typeof value !== "string" || !/^0x(?:[0-9a-fA-F]{2})*$/.test(value)) return invalid$1(`${label} must be hex bytes.`);
|
|
26618
|
+
return value;
|
|
26619
|
+
}
|
|
26620
|
+
/** Re-derive all trusted calldata after a plan crosses a JSON boundary. */
|
|
26621
|
+
function validatePreparedAerodromeSlipstreamPoolAction(value) {
|
|
26622
|
+
const action = record$1(value, "Prepared Slipstream action");
|
|
26623
|
+
if (action.schemaVersion !== 1 || action.kind !== "aerodrome-slipstream-create-and-initialize" || typeof action.protocol !== "string") return invalid$1("Slipstream action kind, protocol, or schema version is unsupported.");
|
|
26624
|
+
const transaction = record$1(action.transaction, "Slipstream transaction");
|
|
26625
|
+
if (!Number.isSafeInteger(transaction.chainId) || Number(transaction.chainId) <= 0 || transaction.value !== 0n) return invalid$1("Slipstream transaction chainId or value is invalid.");
|
|
26626
|
+
const deployment = resolveAerodromeSlipstreamLifecycleDeployment({
|
|
26627
|
+
chainId: Number(transaction.chainId),
|
|
26628
|
+
protocol: action.protocol
|
|
26629
|
+
});
|
|
26630
|
+
if (!deployment) throw new PoolLifecycleError("UNSUPPORTED_DEPLOYMENT", "No Slipstream lifecycle deployment is configured for this action.");
|
|
26631
|
+
const identity = record$1(action.identity, "Slipstream identity");
|
|
26632
|
+
const key = canonicalizeAerodromeSlipstreamPoolKey({
|
|
26633
|
+
tokenA: nonZeroAddress(record$1(identity.key, "Slipstream key").token0, "Slipstream token0"),
|
|
26634
|
+
tokenB: nonZeroAddress(record$1(identity.key, "Slipstream key").token1, "Slipstream token1"),
|
|
26635
|
+
tickSpacing: Number(record$1(identity.key, "Slipstream key").tickSpacing)
|
|
26636
|
+
});
|
|
26637
|
+
if (identity.family !== deployment.family || identity.adapter !== deployment.adapter || identity.version !== deployment.version || identity.chainId !== deployment.chainId || nonZeroAddress(identity.factory, "Slipstream factory") !== deployment.factory || identity.poolAddress !== null) return invalid$1("Slipstream identity does not match the configured deployment.");
|
|
26638
|
+
const sqrtPriceX96 = assertAerodromeSlipstreamInitialPrice(record$1(action.expected, "Slipstream expectation").sqrtPriceX96);
|
|
26639
|
+
const preflight = record$1(action.preflight, "Slipstream preflight");
|
|
26640
|
+
if (typeof preflight.blockNumber !== "bigint" || preflight.blockNumber < 0n || preflight.status !== "absent" || preflight.poolAddress !== null) return invalid$1("Slipstream action must be bound to an absent pool preflight.");
|
|
26641
|
+
const expectedData = (0, viem.encodeFunctionData)({
|
|
26642
|
+
abi: aerodromeSlipstreamFactoryAbi,
|
|
26643
|
+
functionName: "createPool",
|
|
26644
|
+
args: [
|
|
26645
|
+
key.token0,
|
|
26646
|
+
key.token1,
|
|
26647
|
+
key.tickSpacing,
|
|
26648
|
+
sqrtPriceX96
|
|
26649
|
+
]
|
|
26650
|
+
});
|
|
26651
|
+
if (nonZeroAddress(transaction.to, "Slipstream transaction target") !== deployment.factory || hex(transaction.data, "Slipstream transaction calldata").toLowerCase() !== expectedData.toLowerCase()) return invalid$1("Slipstream transaction does not match its trusted deployment and expectation.");
|
|
26652
|
+
return deployment;
|
|
26653
|
+
}
|
|
26654
|
+
function deserializePreparedAerodromeSlipstreamPoolAction(serialized) {
|
|
26655
|
+
const action = deserializePreparedPoolAction(serialized);
|
|
26656
|
+
validatePreparedAerodromeSlipstreamPoolAction(action);
|
|
26657
|
+
return action;
|
|
26658
|
+
}
|
|
26659
|
+
//#endregion
|
|
26660
|
+
//#region src/pool-lifecycle/aerodrome-slipstream/inspect.ts
|
|
26661
|
+
const ZERO$1 = (0, viem.getAddress)("0x0000000000000000000000000000000000000000");
|
|
26662
|
+
async function requireRuntimeHash(client, address, expected, label, blockNumber) {
|
|
26663
|
+
const code = await client.getCode({
|
|
26664
|
+
address,
|
|
26665
|
+
blockNumber
|
|
26666
|
+
});
|
|
26667
|
+
if (!code || code === "0x") throw new PoolLifecycleError("CONTRACT_NOT_DEPLOYED", `${label} ${address} has no bytecode at block ${blockNumber}.`);
|
|
26668
|
+
if ((0, viem.keccak256)(code) !== expected) throw new PoolLifecycleError("DEPLOYMENT_MISMATCH", `${label} ${address} runtime hash does not match the configured deployment.`);
|
|
26669
|
+
}
|
|
26670
|
+
async function requireCode(client, address, label, blockNumber) {
|
|
26671
|
+
const code = await client.getCode({
|
|
26672
|
+
address,
|
|
26673
|
+
blockNumber
|
|
26674
|
+
});
|
|
26675
|
+
if (!code || code === "0x") throw new PoolLifecycleError("CONTRACT_NOT_DEPLOYED", `${label} ${address} has no bytecode at block ${blockNumber}.`);
|
|
26676
|
+
}
|
|
26677
|
+
async function inspectAerodromeSlipstreamPool(params) {
|
|
26678
|
+
const deployment = validateAerodromeSlipstreamLifecycleDeployment(params.deployment);
|
|
26679
|
+
const key = canonicalizeAerodromeSlipstreamPoolKey(params.key);
|
|
26680
|
+
if (await params.publicClient.getChainId() !== deployment.chainId) throw new PoolLifecycleError("CHAIN_MISMATCH", `Public client chain does not match Slipstream deployment chain ${deployment.chainId}.`);
|
|
26681
|
+
const blockNumber = params.blockNumber ?? await params.publicClient.getBlockNumber();
|
|
26682
|
+
await Promise.all([
|
|
26683
|
+
requireRuntimeHash(params.publicClient, deployment.factory, deployment.factoryRuntimeCodeHash, "Slipstream factory", blockNumber),
|
|
26684
|
+
requireRuntimeHash(params.publicClient, deployment.poolImplementation, deployment.poolImplementationRuntimeCodeHash, "Slipstream pool implementation", blockNumber),
|
|
26685
|
+
requireCode(params.publicClient, key.token0, "token0", blockNumber),
|
|
26686
|
+
requireCode(params.publicClient, key.token1, "token1", blockNumber)
|
|
26687
|
+
]);
|
|
26688
|
+
const [implementation, factoryRegistry, voter, enabledFee, pool, legacyCLFactory] = await Promise.all([
|
|
26689
|
+
params.publicClient.readContract({
|
|
26690
|
+
address: deployment.factory,
|
|
26691
|
+
abi: aerodromeSlipstreamFactoryAbi,
|
|
26692
|
+
functionName: "poolImplementation",
|
|
26693
|
+
blockNumber
|
|
26694
|
+
}),
|
|
26695
|
+
params.publicClient.readContract({
|
|
26696
|
+
address: deployment.factory,
|
|
26697
|
+
abi: aerodromeSlipstreamFactoryAbi,
|
|
26698
|
+
functionName: "factoryRegistry",
|
|
26699
|
+
blockNumber
|
|
26700
|
+
}),
|
|
26701
|
+
params.publicClient.readContract({
|
|
26702
|
+
address: deployment.factory,
|
|
26703
|
+
abi: aerodromeSlipstreamFactoryAbi,
|
|
26704
|
+
functionName: "voter",
|
|
26705
|
+
blockNumber
|
|
26706
|
+
}),
|
|
26707
|
+
params.publicClient.readContract({
|
|
26708
|
+
address: deployment.factory,
|
|
26709
|
+
abi: aerodromeSlipstreamFactoryAbi,
|
|
26710
|
+
functionName: "tickSpacingToFee",
|
|
26711
|
+
args: [key.tickSpacing],
|
|
26712
|
+
blockNumber
|
|
26713
|
+
}),
|
|
26714
|
+
params.publicClient.readContract({
|
|
26715
|
+
address: deployment.factory,
|
|
26716
|
+
abi: aerodromeSlipstreamFactoryAbi,
|
|
26717
|
+
functionName: "getPool",
|
|
26718
|
+
args: [
|
|
26719
|
+
key.token0,
|
|
26720
|
+
key.token1,
|
|
26721
|
+
key.tickSpacing
|
|
26722
|
+
],
|
|
26723
|
+
blockNumber
|
|
26724
|
+
}),
|
|
26725
|
+
deployment.legacyCLFactory === null ? Promise.resolve(null) : params.publicClient.readContract({
|
|
26726
|
+
address: deployment.factory,
|
|
26727
|
+
abi: aerodromeSlipstreamFactoryAbi,
|
|
26728
|
+
functionName: "legacyCLFactory",
|
|
26729
|
+
blockNumber
|
|
26730
|
+
})
|
|
26731
|
+
]);
|
|
26732
|
+
if ((0, viem.getAddress)(implementation) !== deployment.poolImplementation || (0, viem.getAddress)(factoryRegistry) !== deployment.factoryRegistry || (0, viem.getAddress)(voter) !== deployment.voter || deployment.legacyCLFactory !== null && (0, viem.getAddress)(legacyCLFactory) !== deployment.legacyCLFactory) throw new PoolLifecycleError("DEPLOYMENT_MISMATCH", "Slipstream factory immutable deployment references do not match configuration.");
|
|
26733
|
+
const fee = Number(enabledFee);
|
|
26734
|
+
if (!Number.isSafeInteger(fee) || fee <= 0) throw new PoolLifecycleError("INVALID_INPUT", `Slipstream tick spacing ${key.tickSpacing} is not enabled.`);
|
|
26735
|
+
const poolAddress = (0, viem.getAddress)(pool);
|
|
26736
|
+
if (poolAddress === ZERO$1) return {
|
|
26737
|
+
schemaVersion: 1,
|
|
26738
|
+
blockNumber,
|
|
26739
|
+
deployment,
|
|
26740
|
+
key,
|
|
26741
|
+
enabledFee: fee,
|
|
26742
|
+
status: "absent",
|
|
26743
|
+
poolAddress: null,
|
|
26744
|
+
sqrtPriceX96: 0n,
|
|
26745
|
+
tick: null
|
|
26746
|
+
};
|
|
26747
|
+
const [isPool, actualFactory, token0, token1, tickSpacing, slot0] = await Promise.all([
|
|
26748
|
+
params.publicClient.readContract({
|
|
26749
|
+
address: deployment.factory,
|
|
26750
|
+
abi: aerodromeSlipstreamFactoryAbi,
|
|
26751
|
+
functionName: "isPool",
|
|
26752
|
+
args: [poolAddress],
|
|
26753
|
+
blockNumber
|
|
26754
|
+
}),
|
|
26755
|
+
params.publicClient.readContract({
|
|
26756
|
+
address: poolAddress,
|
|
26757
|
+
abi: aerodromeSlipstreamPoolAbi,
|
|
26758
|
+
functionName: "factory",
|
|
26759
|
+
blockNumber
|
|
26760
|
+
}),
|
|
26761
|
+
params.publicClient.readContract({
|
|
26762
|
+
address: poolAddress,
|
|
26763
|
+
abi: aerodromeSlipstreamPoolAbi,
|
|
26764
|
+
functionName: "token0",
|
|
26765
|
+
blockNumber
|
|
26766
|
+
}),
|
|
26767
|
+
params.publicClient.readContract({
|
|
26768
|
+
address: poolAddress,
|
|
26769
|
+
abi: aerodromeSlipstreamPoolAbi,
|
|
26770
|
+
functionName: "token1",
|
|
26771
|
+
blockNumber
|
|
26772
|
+
}),
|
|
26773
|
+
params.publicClient.readContract({
|
|
26774
|
+
address: poolAddress,
|
|
26775
|
+
abi: aerodromeSlipstreamPoolAbi,
|
|
26776
|
+
functionName: "tickSpacing",
|
|
26777
|
+
blockNumber
|
|
26778
|
+
}),
|
|
26779
|
+
params.publicClient.readContract({
|
|
26780
|
+
address: poolAddress,
|
|
26781
|
+
abi: aerodromeSlipstreamPoolAbi,
|
|
26782
|
+
functionName: "slot0",
|
|
26783
|
+
blockNumber
|
|
26784
|
+
})
|
|
26785
|
+
]);
|
|
26786
|
+
await requireRuntimeHash(params.publicClient, poolAddress, deployment.poolProxyRuntimeCodeHash, "Slipstream pool proxy", blockNumber);
|
|
26787
|
+
if (!isPool || (0, viem.getAddress)(actualFactory) !== deployment.factory || (0, viem.getAddress)(token0) !== key.token0 || (0, viem.getAddress)(token1) !== key.token1 || Number(tickSpacing) !== key.tickSpacing || slot0[0] === 0n) throw new PoolLifecycleError("DEPLOYMENT_MISMATCH", `Slipstream pool ${poolAddress} does not match the configured factory, key, or initialized state.`);
|
|
26788
|
+
return {
|
|
26789
|
+
schemaVersion: 1,
|
|
26790
|
+
blockNumber,
|
|
26791
|
+
deployment,
|
|
26792
|
+
key,
|
|
26793
|
+
enabledFee: fee,
|
|
26794
|
+
status: "initialized",
|
|
26795
|
+
poolAddress,
|
|
26796
|
+
sqrtPriceX96: slot0[0],
|
|
26797
|
+
tick: Number(slot0[1])
|
|
26798
|
+
};
|
|
26799
|
+
}
|
|
26800
|
+
//#endregion
|
|
26801
|
+
//#region src/pool-lifecycle/aerodrome-slipstream/actions.ts
|
|
26802
|
+
function assertAbsentPreflight(deployment, key, preflight) {
|
|
26803
|
+
if (preflight.schemaVersion !== 1 || preflight.deployment !== deployment || preflight.key.token0 !== key.token0 || preflight.key.token1 !== key.token1 || preflight.key.tickSpacing !== key.tickSpacing || preflight.status !== "absent" || preflight.poolAddress !== null || preflight.sqrtPriceX96 !== 0n || preflight.tick !== null) throw new PoolLifecycleError("INVALID_INPUT", "Slipstream preflight does not prove this pool key is absent.");
|
|
26804
|
+
}
|
|
26805
|
+
function buildAerodromeSlipstreamCreateAndInitializeTransaction(params) {
|
|
26806
|
+
const deployment = assertLatestAerodromeSlipstreamLifecycleDeployment(params.deployment);
|
|
26807
|
+
const key = canonicalizeAerodromeSlipstreamPoolKey(params.key);
|
|
26808
|
+
const sqrtPriceX96 = assertAerodromeSlipstreamInitialPrice(params.initialPrice);
|
|
26809
|
+
assertAbsentPreflight(deployment, key, params.preflight);
|
|
26810
|
+
return {
|
|
26811
|
+
schemaVersion: 1,
|
|
26812
|
+
kind: "aerodrome-slipstream-create-and-initialize",
|
|
26813
|
+
protocol: deployment.protocol,
|
|
26814
|
+
transaction: {
|
|
26815
|
+
chainId: deployment.chainId,
|
|
26816
|
+
to: deployment.factory,
|
|
26817
|
+
data: (0, viem.encodeFunctionData)({
|
|
26818
|
+
abi: aerodromeSlipstreamFactoryAbi,
|
|
26819
|
+
functionName: "createPool",
|
|
26820
|
+
args: [
|
|
26821
|
+
key.token0,
|
|
26822
|
+
key.token1,
|
|
26823
|
+
key.tickSpacing,
|
|
26824
|
+
sqrtPriceX96
|
|
26825
|
+
]
|
|
26826
|
+
}),
|
|
26827
|
+
value: 0n
|
|
26828
|
+
},
|
|
26829
|
+
identity: {
|
|
26830
|
+
family: deployment.family,
|
|
26831
|
+
adapter: deployment.adapter,
|
|
26832
|
+
version: deployment.version,
|
|
26833
|
+
chainId: deployment.chainId,
|
|
26834
|
+
factory: (0, viem.getAddress)(deployment.factory),
|
|
26835
|
+
key,
|
|
26836
|
+
poolAddress: null
|
|
26837
|
+
},
|
|
26838
|
+
expected: { sqrtPriceX96 },
|
|
26839
|
+
preflight: {
|
|
26840
|
+
blockNumber: params.preflight.blockNumber,
|
|
26841
|
+
status: "absent",
|
|
26842
|
+
poolAddress: null
|
|
26843
|
+
}
|
|
26844
|
+
};
|
|
26845
|
+
}
|
|
26846
|
+
async function prepareAerodromeSlipstreamPool(params) {
|
|
26847
|
+
const deployment = assertLatestAerodromeSlipstreamLifecycleDeployment(params.deployment);
|
|
26848
|
+
const snapshot = await inspectAerodromeSlipstreamPool({
|
|
26849
|
+
...params,
|
|
26850
|
+
deployment
|
|
26851
|
+
});
|
|
26852
|
+
const sqrtPriceX96 = assertAerodromeSlipstreamInitialPrice(params.initialPrice);
|
|
26853
|
+
if (snapshot.status === "absent") return {
|
|
26854
|
+
status: "ready",
|
|
26855
|
+
snapshot,
|
|
26856
|
+
action: buildAerodromeSlipstreamCreateAndInitializeTransaction({
|
|
26857
|
+
deployment: snapshot.deployment,
|
|
26858
|
+
key: params.key,
|
|
26859
|
+
initialPrice: sqrtPriceX96,
|
|
26860
|
+
preflight: snapshot
|
|
26861
|
+
})
|
|
26862
|
+
};
|
|
26863
|
+
if (snapshot.sqrtPriceX96 !== sqrtPriceX96) throw new PoolLifecycleError("POOL_STATE_MISMATCH", `Slipstream pool ${snapshot.poolAddress} is already initialized at a different price.`);
|
|
26864
|
+
return {
|
|
26865
|
+
status: "already-initialized-matching",
|
|
26866
|
+
snapshot,
|
|
26867
|
+
action: null
|
|
26868
|
+
};
|
|
26869
|
+
}
|
|
26870
|
+
/** Prepare a new pool only through the newest verified factory in this family. */
|
|
26871
|
+
async function prepareLatestAerodromeSlipstreamPool(params) {
|
|
26872
|
+
const deployment = resolveLatestAerodromeSlipstreamLifecycleDeployment(params.chainId);
|
|
26873
|
+
if (!deployment) throw new PoolLifecycleError("UNSUPPORTED_DEPLOYMENT", `No latest Aerodrome Slipstream lifecycle deployment is configured for chain ${params.chainId}.`);
|
|
26874
|
+
return prepareAerodromeSlipstreamPool({
|
|
26875
|
+
...params,
|
|
26876
|
+
deployment
|
|
26877
|
+
});
|
|
26878
|
+
}
|
|
26879
|
+
//#endregion
|
|
26880
|
+
//#region src/pool-lifecycle/aerodrome-slipstream/simulate.ts
|
|
26881
|
+
const ZERO = (0, viem.getAddress)("0x0000000000000000000000000000000000000000");
|
|
26882
|
+
async function simulateAerodromeSlipstreamPoolAction(params) {
|
|
26883
|
+
if (!(0, viem.isAddress)(params.account, { strict: true }) || (0, viem.getAddress)(params.account) === ZERO) throw new PoolLifecycleError("INVALID_INPUT", "Simulation account must be a non-zero EVM address.");
|
|
26884
|
+
const deployment = validatePreparedAerodromeSlipstreamPoolAction(params.action);
|
|
26885
|
+
const blockNumber = params.blockNumber ?? await params.publicClient.getBlockNumber();
|
|
26886
|
+
const snapshot = await inspectAerodromeSlipstreamPool({
|
|
26887
|
+
publicClient: params.publicClient,
|
|
26888
|
+
deployment,
|
|
26889
|
+
key: {
|
|
26890
|
+
tokenA: params.action.identity.key.token0,
|
|
26891
|
+
tokenB: params.action.identity.key.token1,
|
|
26892
|
+
tickSpacing: params.action.identity.key.tickSpacing
|
|
26893
|
+
},
|
|
26894
|
+
blockNumber
|
|
26895
|
+
});
|
|
26896
|
+
if (snapshot.status !== "absent") throw new PoolLifecycleError("POOL_STATE_MISMATCH", `Slipstream pool already exists at ${snapshot.poolAddress}; refresh the action.`);
|
|
26897
|
+
try {
|
|
26898
|
+
const request = {
|
|
26899
|
+
account: (0, viem.getAddress)(params.account),
|
|
26900
|
+
to: params.action.transaction.to,
|
|
26901
|
+
data: params.action.transaction.data,
|
|
26902
|
+
value: 0n,
|
|
26903
|
+
blockNumber
|
|
26904
|
+
};
|
|
26905
|
+
const [call, gasEstimate] = await Promise.all([params.publicClient.call({
|
|
26906
|
+
...request,
|
|
26907
|
+
batch: false
|
|
26908
|
+
}), params.publicClient.estimateGas(request)]);
|
|
26909
|
+
if (!call.data || call.data === "0x") throw new PoolLifecycleError("SIMULATION_FAILED", "Slipstream create simulation returned no pool address.");
|
|
26910
|
+
return {
|
|
26911
|
+
transaction: params.action.transaction,
|
|
26912
|
+
blockNumber,
|
|
26913
|
+
returnData: call.data,
|
|
26914
|
+
returnedPoolAddress: (0, viem.getAddress)((0, viem.decodeFunctionResult)({
|
|
26915
|
+
abi: aerodromeSlipstreamFactoryAbi,
|
|
26916
|
+
functionName: "createPool",
|
|
26917
|
+
data: call.data
|
|
26918
|
+
})),
|
|
26919
|
+
gasEstimate
|
|
26920
|
+
};
|
|
26921
|
+
} catch (error) {
|
|
26922
|
+
if (error instanceof PoolLifecycleError) throw error;
|
|
26923
|
+
throw new PoolLifecycleError("SIMULATION_FAILED", error instanceof Error ? error.message : "Slipstream action simulation failed.", error);
|
|
26924
|
+
}
|
|
26925
|
+
}
|
|
26926
|
+
//#endregion
|
|
26927
|
+
//#region src/pool-lifecycle/aerodrome-slipstream/verify.ts
|
|
26928
|
+
function assertCanonicalLog(log, receipt) {
|
|
26929
|
+
if (log.transactionHash !== receipt.transactionHash || log.blockHash !== receipt.blockHash || log.blockNumber !== receipt.blockNumber || log.transactionIndex !== receipt.transactionIndex || log.removed !== false) throw new PoolLifecycleError("POOL_STATE_MISMATCH", "Slipstream lifecycle log does not belong to the canonical receipt.");
|
|
26930
|
+
}
|
|
26931
|
+
function decodeAerodromeSlipstreamPoolActionReceipt(action, receipt) {
|
|
26932
|
+
validatePreparedAerodromeSlipstreamPoolAction(action);
|
|
26933
|
+
const created = [];
|
|
26934
|
+
const initialized = [];
|
|
26935
|
+
for (const log of receipt.logs) {
|
|
26936
|
+
if ((0, viem.getAddress)(log.address) === action.identity.factory) try {
|
|
26937
|
+
const event = (0, viem.decodeEventLog)({
|
|
26938
|
+
abi: aerodromeSlipstreamFactoryAbi,
|
|
26939
|
+
eventName: "PoolCreated",
|
|
26940
|
+
data: log.data,
|
|
26941
|
+
topics: log.topics
|
|
26942
|
+
});
|
|
26943
|
+
if ((0, viem.getAddress)(event.args.token0) === action.identity.key.token0 && (0, viem.getAddress)(event.args.token1) === action.identity.key.token1 && Number(event.args.tickSpacing) === action.identity.key.tickSpacing) {
|
|
26944
|
+
assertCanonicalLog(log, receipt);
|
|
26945
|
+
created.push({
|
|
26946
|
+
poolAddress: (0, viem.getAddress)(event.args.pool),
|
|
26947
|
+
logIndex: log.logIndex
|
|
26948
|
+
});
|
|
26949
|
+
}
|
|
26950
|
+
} catch (error) {
|
|
26951
|
+
if (error instanceof PoolLifecycleError) throw error;
|
|
26952
|
+
}
|
|
26953
|
+
try {
|
|
26954
|
+
const event = (0, viem.decodeEventLog)({
|
|
26955
|
+
abi: aerodromeSlipstreamPoolAbi,
|
|
26956
|
+
eventName: "Initialize",
|
|
26957
|
+
data: log.data,
|
|
26958
|
+
topics: log.topics
|
|
26959
|
+
});
|
|
26960
|
+
assertCanonicalLog(log, receipt);
|
|
26961
|
+
initialized.push({
|
|
26962
|
+
poolAddress: (0, viem.getAddress)(log.address),
|
|
26963
|
+
sqrtPriceX96: event.args.sqrtPriceX96,
|
|
26964
|
+
tick: Number(event.args.tick),
|
|
26965
|
+
logIndex: log.logIndex
|
|
26966
|
+
});
|
|
26967
|
+
} catch (error) {
|
|
26968
|
+
if (error instanceof PoolLifecycleError) throw error;
|
|
26969
|
+
}
|
|
26970
|
+
}
|
|
26971
|
+
if (created.length > 1 || initialized.length > 1) throw new PoolLifecycleError("POOL_STATE_MISMATCH", "Receipt contains duplicate matching Slipstream lifecycle events.");
|
|
26972
|
+
return {
|
|
26973
|
+
receiptStatus: receipt.status,
|
|
26974
|
+
poolCreated: created[0] ?? null,
|
|
26975
|
+
initialization: initialized[0] ?? null
|
|
26976
|
+
};
|
|
26977
|
+
}
|
|
26978
|
+
async function verifyAerodromeSlipstreamPoolAction(params) {
|
|
26979
|
+
const deployment = validatePreparedAerodromeSlipstreamPoolAction(params.action);
|
|
26980
|
+
let receipt;
|
|
26981
|
+
try {
|
|
26982
|
+
const [chainId, transaction, canonical] = await Promise.all([
|
|
26983
|
+
params.publicClient.getChainId(),
|
|
26984
|
+
params.publicClient.getTransaction({ hash: params.receipt.transactionHash }),
|
|
26985
|
+
params.publicClient.getTransactionReceipt({ hash: params.receipt.transactionHash })
|
|
26986
|
+
]);
|
|
26987
|
+
if (chainId !== deployment.chainId || canonical.transactionHash !== params.receipt.transactionHash || canonical.blockHash !== params.receipt.blockHash || transaction.to === null || transaction.value !== 0n || (0, viem.getAddress)(transaction.to) !== params.action.transaction.to || transaction.input.toLowerCase() !== params.action.transaction.data.toLowerCase()) return {
|
|
26988
|
+
verified: false,
|
|
26989
|
+
outcome: "wrong-deployment",
|
|
26990
|
+
blockNumber: params.receipt.blockNumber,
|
|
26991
|
+
identity: params.action.identity,
|
|
26992
|
+
state: null,
|
|
26993
|
+
evidence: {
|
|
26994
|
+
receiptStatus: params.receipt.status,
|
|
26995
|
+
poolCreated: null,
|
|
26996
|
+
initialization: null
|
|
26997
|
+
},
|
|
26998
|
+
warnings: ["Canonical transaction does not match the prepared Slipstream action."]
|
|
26999
|
+
};
|
|
27000
|
+
receipt = canonical;
|
|
27001
|
+
} catch (error) {
|
|
27002
|
+
return {
|
|
27003
|
+
verified: false,
|
|
27004
|
+
outcome: "verification-unavailable",
|
|
27005
|
+
blockNumber: params.receipt.blockNumber,
|
|
27006
|
+
identity: params.action.identity,
|
|
27007
|
+
state: null,
|
|
27008
|
+
evidence: {
|
|
27009
|
+
receiptStatus: params.receipt.status,
|
|
27010
|
+
poolCreated: null,
|
|
27011
|
+
initialization: null
|
|
27012
|
+
},
|
|
27013
|
+
warnings: [error instanceof Error ? error.message : "Could not load canonical transaction evidence."]
|
|
27014
|
+
};
|
|
27015
|
+
}
|
|
27016
|
+
let evidence;
|
|
27017
|
+
try {
|
|
27018
|
+
evidence = decodeAerodromeSlipstreamPoolActionReceipt(params.action, receipt);
|
|
27019
|
+
} catch (error) {
|
|
27020
|
+
return {
|
|
27021
|
+
verified: false,
|
|
27022
|
+
outcome: "wrong-deployment",
|
|
27023
|
+
blockNumber: receipt.blockNumber,
|
|
27024
|
+
identity: params.action.identity,
|
|
27025
|
+
state: null,
|
|
27026
|
+
evidence: {
|
|
27027
|
+
receiptStatus: receipt.status,
|
|
27028
|
+
poolCreated: null,
|
|
27029
|
+
initialization: null
|
|
27030
|
+
},
|
|
27031
|
+
warnings: [error instanceof Error ? error.message : "Invalid receipt evidence."]
|
|
27032
|
+
};
|
|
27033
|
+
}
|
|
27034
|
+
if (receipt.status === "reverted") return {
|
|
27035
|
+
verified: false,
|
|
27036
|
+
outcome: "reverted",
|
|
27037
|
+
blockNumber: receipt.blockNumber,
|
|
27038
|
+
identity: params.action.identity,
|
|
27039
|
+
state: null,
|
|
27040
|
+
evidence,
|
|
27041
|
+
warnings: []
|
|
27042
|
+
};
|
|
27043
|
+
try {
|
|
27044
|
+
const snapshot = await inspectAerodromeSlipstreamPool({
|
|
27045
|
+
publicClient: params.publicClient,
|
|
27046
|
+
deployment,
|
|
27047
|
+
key: {
|
|
27048
|
+
tokenA: params.action.identity.key.token0,
|
|
27049
|
+
tokenB: params.action.identity.key.token1,
|
|
27050
|
+
tickSpacing: params.action.identity.key.tickSpacing
|
|
27051
|
+
},
|
|
27052
|
+
blockNumber: receipt.blockNumber
|
|
27053
|
+
});
|
|
27054
|
+
const identity = {
|
|
27055
|
+
...params.action.identity,
|
|
27056
|
+
poolAddress: snapshot.poolAddress
|
|
27057
|
+
};
|
|
27058
|
+
if (!evidence.poolCreated || !evidence.initialization || snapshot.status !== "initialized" || evidence.poolCreated.poolAddress !== snapshot.poolAddress || evidence.initialization.poolAddress !== snapshot.poolAddress || evidence.initialization.sqrtPriceX96 !== params.action.expected.sqrtPriceX96) return {
|
|
27059
|
+
verified: false,
|
|
27060
|
+
outcome: "wrong-deployment",
|
|
27061
|
+
blockNumber: receipt.blockNumber,
|
|
27062
|
+
identity,
|
|
27063
|
+
state: snapshot,
|
|
27064
|
+
evidence,
|
|
27065
|
+
warnings: ["Receipt evidence does not prove the expected atomic Slipstream lifecycle."]
|
|
27066
|
+
};
|
|
27067
|
+
return snapshot.sqrtPriceX96 === params.action.expected.sqrtPriceX96 ? {
|
|
27068
|
+
verified: true,
|
|
27069
|
+
outcome: "created-and-initialized",
|
|
27070
|
+
blockNumber: receipt.blockNumber,
|
|
27071
|
+
identity,
|
|
27072
|
+
state: snapshot,
|
|
27073
|
+
evidence,
|
|
27074
|
+
warnings: []
|
|
27075
|
+
} : {
|
|
27076
|
+
verified: true,
|
|
27077
|
+
outcome: "initialized-then-price-moved",
|
|
27078
|
+
blockNumber: receipt.blockNumber,
|
|
27079
|
+
identity,
|
|
27080
|
+
state: snapshot,
|
|
27081
|
+
evidence,
|
|
27082
|
+
warnings: ["Pool price moved after initialization in the receipt block."]
|
|
27083
|
+
};
|
|
27084
|
+
} catch (error) {
|
|
27085
|
+
return {
|
|
27086
|
+
verified: false,
|
|
27087
|
+
outcome: "wrong-deployment",
|
|
27088
|
+
blockNumber: receipt.blockNumber,
|
|
27089
|
+
identity: params.action.identity,
|
|
27090
|
+
state: null,
|
|
27091
|
+
evidence,
|
|
27092
|
+
warnings: [error instanceof Error ? error.message : "Slipstream state verification failed."]
|
|
27093
|
+
};
|
|
27094
|
+
}
|
|
27095
|
+
}
|
|
27096
|
+
//#endregion
|
|
26393
27097
|
//#region src/pool-lifecycle/v3/types.ts
|
|
26394
27098
|
function invalidPreparedAction(message) {
|
|
26395
27099
|
throw new PoolLifecycleError("INVALID_INPUT", message);
|
|
@@ -28036,6 +28740,7 @@ async function verifyV4PoolAction(params) {
|
|
|
28036
28740
|
*/
|
|
28037
28741
|
//#endregion
|
|
28038
28742
|
exports.AERODROME_PROTOCOLS = AERODROME_PROTOCOLS;
|
|
28743
|
+
exports.AERODROME_SLIPSTREAM_LIFECYCLE_DEPLOYMENTS = AERODROME_SLIPSTREAM_LIFECYCLE_DEPLOYMENTS;
|
|
28039
28744
|
exports.ALGEBRA_INTEGRAL_PROTOCOLS = ALGEBRA_INTEGRAL_PROTOCOLS;
|
|
28040
28745
|
exports.ALGEBRA_INTEGRAL_V_2_0_PROTOCOLS = ALGEBRA_INTEGRAL_V_2_0_PROTOCOLS;
|
|
28041
28746
|
exports.ALGEBRA_LIFECYCLE_DEPLOYMENTS = ALGEBRA_LIFECYCLE_DEPLOYMENTS;
|
|
@@ -28093,6 +28798,8 @@ exports.V4_ZERO_ADDRESS = V4_ZERO_ADDRESS;
|
|
|
28093
28798
|
exports.VAULT_FEES_ABI = VAULT_FEES_ABI;
|
|
28094
28799
|
exports.VaultClient = VaultClient;
|
|
28095
28800
|
exports.abis = abis;
|
|
28801
|
+
exports.aerodromeSlipstreamFactoryAbi = aerodromeSlipstreamFactoryAbi;
|
|
28802
|
+
exports.aerodromeSlipstreamPoolAbi = aerodromeSlipstreamPoolAbi;
|
|
28096
28803
|
exports.algebraCustomPoolEntryPointAbi = algebraCustomPoolEntryPointAbi;
|
|
28097
28804
|
exports.algebraDirectionalPoolStateAbi = algebraDirectionalPoolStateAbi;
|
|
28098
28805
|
exports.algebraIntegralPairFactoryAbi = algebraIntegralPairFactoryAbi;
|
|
@@ -28105,7 +28812,9 @@ exports.apechainAddresses = apechainAddresses;
|
|
|
28105
28812
|
exports.arbitrumAddresses = arbitrumAddresses;
|
|
28106
28813
|
exports.arbitrumgoerliAddresses = arbitrumgoerliAddresses;
|
|
28107
28814
|
exports.arthswapConfig = arthswapConfig;
|
|
28815
|
+
exports.assertAerodromeSlipstreamInitialPrice = assertAerodromeSlipstreamInitialPrice;
|
|
28108
28816
|
exports.assertAlgebraInitialPrice = assertAlgebraInitialPrice;
|
|
28817
|
+
exports.assertLatestAerodromeSlipstreamLifecycleDeployment = assertLatestAerodromeSlipstreamLifecycleDeployment;
|
|
28109
28818
|
exports.assertPreparedV3PoolAction = assertPreparedV3PoolAction;
|
|
28110
28819
|
exports.assertPreparedV4PoolAction = assertPreparedV4PoolAction;
|
|
28111
28820
|
exports.assertV3InitialPrice = assertV3InitialPrice;
|
|
@@ -28122,6 +28831,7 @@ exports.bittensorAddresses = bittensorAddresses;
|
|
|
28122
28831
|
exports.bittensorUniV3Config = bittensorUniV3Config;
|
|
28123
28832
|
exports.blastAddresses = blastAddresses;
|
|
28124
28833
|
exports.bscAddresses = bscAddresses;
|
|
28834
|
+
exports.buildAerodromeSlipstreamCreateAndInitializeTransaction = buildAerodromeSlipstreamCreateAndInitializeTransaction;
|
|
28125
28835
|
exports.buildAlgebraCreatePoolTransaction = buildAlgebraCreatePoolTransaction;
|
|
28126
28836
|
exports.buildAlgebraInitializePoolTransaction = buildAlgebraInitializePoolTransaction;
|
|
28127
28837
|
exports.buildV3CreateAndInitializeTransaction = buildV3CreateAndInitializeTransaction;
|
|
@@ -28131,6 +28841,7 @@ exports.buildV4InitializePoolTransaction = buildV4InitializePoolTransaction;
|
|
|
28131
28841
|
exports.calculateLimitPrice = calculateLimitPrice;
|
|
28132
28842
|
exports.calculateSwapAmount = calculateSwapAmount;
|
|
28133
28843
|
exports.camelotConfig = camelotConfig;
|
|
28844
|
+
exports.canonicalizeAerodromeSlipstreamPoolKey = canonicalizeAerodromeSlipstreamPoolKey;
|
|
28134
28845
|
exports.canonicalizeAlgebraPoolKey = canonicalizeAlgebraPoolKey;
|
|
28135
28846
|
exports.canonicalizeV3PoolKey = canonicalizeV3PoolKey;
|
|
28136
28847
|
exports.canonicalizeV4PoolKey = canonicalizeV4PoolKey;
|
|
@@ -28138,10 +28849,12 @@ exports.celoAddresses = celoAddresses;
|
|
|
28138
28849
|
exports.chainIdToName = chainIdToName;
|
|
28139
28850
|
exports.chainNameToId = chainNameToId;
|
|
28140
28851
|
exports.crustConfig = crustConfig;
|
|
28852
|
+
exports.decodeAerodromeSlipstreamPoolActionReceipt = decodeAerodromeSlipstreamPoolActionReceipt;
|
|
28141
28853
|
exports.decodeAlgebraPoolActionReceipt = decodeAlgebraPoolActionReceipt;
|
|
28142
28854
|
exports.decodeV3PoolActionReceipt = decodeV3PoolActionReceipt;
|
|
28143
28855
|
exports.decodeV4PoolActionReceipt = decodeV4PoolActionReceipt;
|
|
28144
28856
|
exports.deprecatedBundlesURL = deprecatedBundlesURL;
|
|
28857
|
+
exports.deserializePreparedAerodromeSlipstreamPoolAction = deserializePreparedAerodromeSlipstreamPoolAction;
|
|
28145
28858
|
exports.deserializePreparedAlgebraPoolAction = deserializePreparedAlgebraPoolAction;
|
|
28146
28859
|
exports.deserializePreparedPoolAction = deserializePreparedPoolAction;
|
|
28147
28860
|
exports.deserializePreparedV3PoolAction = deserializePreparedV3PoolAction;
|
|
@@ -28205,6 +28918,7 @@ exports.hemiAddresses = hemiAddresses;
|
|
|
28205
28918
|
exports.henjinConfig = henjinConfig;
|
|
28206
28919
|
exports.herculesConfig = herculesConfig;
|
|
28207
28920
|
exports.horizaConfig = horizaConfig;
|
|
28921
|
+
exports.inspectAerodromeSlipstreamPool = inspectAerodromeSlipstreamPool;
|
|
28208
28922
|
exports.inspectAlgebraCustomPoolEntryPoint = inspectAlgebraCustomPoolEntryPoint;
|
|
28209
28923
|
exports.inspectAlgebraPool = inspectAlgebraPool;
|
|
28210
28924
|
exports.inspectV3Pool = inspectV3Pool;
|
|
@@ -28258,7 +28972,9 @@ exports.parseExactDecimal = parseExactDecimal;
|
|
|
28258
28972
|
exports.polygonAddresses = polygonAddresses;
|
|
28259
28973
|
exports.polyzkevmAddresses = polyzkevmAddresses;
|
|
28260
28974
|
exports.poolsharkConfig = poolsharkConfig;
|
|
28975
|
+
exports.prepareAerodromeSlipstreamPool = prepareAerodromeSlipstreamPool;
|
|
28261
28976
|
exports.prepareAlgebraPool = prepareAlgebraPool;
|
|
28977
|
+
exports.prepareLatestAerodromeSlipstreamPool = prepareLatestAerodromeSlipstreamPool;
|
|
28262
28978
|
exports.prepareV3CreateAndInitialize = prepareV3CreateAndInitialize;
|
|
28263
28979
|
exports.prepareV3CreatePool = prepareV3CreatePool;
|
|
28264
28980
|
exports.prepareV3InitializePool = prepareV3InitializePool;
|
|
@@ -28267,8 +28983,10 @@ exports.quickSwapAlgebraConfig = quickSwapAlgebraConfig;
|
|
|
28267
28983
|
exports.quickSwapConfig = quickSwapConfig;
|
|
28268
28984
|
exports.quickSwapIntegralConfig = quickSwapIntegralConfig;
|
|
28269
28985
|
exports.quickSwapUniv3Config = quickSwapUniv3Config;
|
|
28986
|
+
exports.resolveAerodromeSlipstreamLifecycleDeployment = resolveAerodromeSlipstreamLifecycleDeployment;
|
|
28270
28987
|
exports.resolveAlgebraLifecycleDeployment = resolveAlgebraLifecycleDeployment;
|
|
28271
28988
|
exports.resolveCurrentV4LifecycleDeployment = resolveCurrentV4LifecycleDeployment;
|
|
28989
|
+
exports.resolveLatestAerodromeSlipstreamLifecycleDeployment = resolveLatestAerodromeSlipstreamLifecycleDeployment;
|
|
28272
28990
|
exports.resolvePoolLifecycleDeployment = resolvePoolLifecycleDeployment;
|
|
28273
28991
|
exports.resolveV3LifecycleDeployment = resolveV3LifecycleDeployment;
|
|
28274
28992
|
exports.resolveV4LifecycleDeployment = resolveV4LifecycleDeployment;
|
|
@@ -28282,6 +29000,7 @@ exports.seiAddresses = seiAddresses;
|
|
|
28282
29000
|
exports.serializePreparedPoolAction = serializePreparedPoolAction;
|
|
28283
29001
|
exports.shadowConfig = shadowConfig;
|
|
28284
29002
|
exports.shouldValidateUniswapV4VaultHook = shouldValidateUniswapV4VaultHook;
|
|
29003
|
+
exports.simulateAerodromeSlipstreamPoolAction = simulateAerodromeSlipstreamPoolAction;
|
|
28285
29004
|
exports.simulateAlgebraPoolAction = simulateAlgebraPoolAction;
|
|
28286
29005
|
exports.simulateSwap = simulateSwap;
|
|
28287
29006
|
exports.simulateV3PoolAction = simulateV3PoolAction;
|
|
@@ -28313,7 +29032,9 @@ exports.v3PoolInitializerAbi = v3PoolInitializerAbi;
|
|
|
28313
29032
|
exports.v4PoolKeysEqual = v4PoolKeysEqual;
|
|
28314
29033
|
exports.v4PoolManagerAbi = v4PoolManagerAbi;
|
|
28315
29034
|
exports.v4StateViewAbi = v4StateViewAbi;
|
|
29035
|
+
exports.validateAerodromeSlipstreamLifecycleDeployment = validateAerodromeSlipstreamLifecycleDeployment;
|
|
28316
29036
|
exports.validateAlgebraLifecycleDeployment = validateAlgebraLifecycleDeployment;
|
|
29037
|
+
exports.validatePreparedAerodromeSlipstreamPoolAction = validatePreparedAerodromeSlipstreamPoolAction;
|
|
28317
29038
|
exports.validatePreparedAlgebraPoolAction = validatePreparedAlgebraPoolAction;
|
|
28318
29039
|
exports.validatePreparedV3PoolAction = validatePreparedV3PoolAction;
|
|
28319
29040
|
exports.validatePreparedV4PoolAction = validatePreparedV4PoolAction;
|
|
@@ -28322,6 +29043,7 @@ exports.validateSqrtPriceX96 = validateSqrtPriceX96;
|
|
|
28322
29043
|
exports.validateSwapParams = validateSwapParams;
|
|
28323
29044
|
exports.validateV4LifecycleDeployment = validateV4LifecycleDeployment;
|
|
28324
29045
|
exports.validateV4PoolKey = validateV4PoolKey;
|
|
29046
|
+
exports.verifyAerodromeSlipstreamPoolAction = verifyAerodromeSlipstreamPoolAction;
|
|
28325
29047
|
exports.verifyAlgebraPoolAction = verifyAlgebraPoolAction;
|
|
28326
29048
|
exports.verifyV3PoolAction = verifyV3PoolAction;
|
|
28327
29049
|
exports.verifyV4PoolAction = verifyV4PoolAction;
|