@nradko/metric-omm-sdk-v1 0.2.0 → 0.3.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/README.md +105 -18
- package/dist/abis/DepositAllowlistExtension.d.ts +440 -0
- package/dist/abis/DepositAllowlistExtension.d.ts.map +1 -0
- package/dist/abis/DepositAllowlistExtension.js +572 -0
- package/dist/abis/DepositAllowlistExtension.js.map +1 -0
- package/dist/abis/MetricOmmPool.d.ts +136 -30
- package/dist/abis/MetricOmmPool.d.ts.map +1 -1
- package/dist/abis/MetricOmmPool.js +168 -34
- package/dist/abis/MetricOmmPool.js.map +1 -1
- package/dist/abis/MetricOmmPoolDataProvider.d.ts +4 -4
- package/dist/abis/MetricOmmPoolDataProvider.js +4 -4
- package/dist/abis/MetricOmmPoolDataProvider.js.map +1 -1
- package/dist/abis/MetricOmmPoolFactory.d.ts +76 -18
- package/dist/abis/MetricOmmPoolFactory.d.ts.map +1 -1
- package/dist/abis/MetricOmmPoolFactory.js +93 -19
- package/dist/abis/MetricOmmPoolFactory.js.map +1 -1
- package/dist/abis/MetricOmmPoolLiquidityAdder.d.ts +68 -8
- package/dist/abis/MetricOmmPoolLiquidityAdder.d.ts.map +1 -1
- package/dist/abis/MetricOmmPoolLiquidityAdder.js +85 -9
- package/dist/abis/MetricOmmPoolLiquidityAdder.js.map +1 -1
- package/dist/abis/MetricOmmPoolSwapper.d.ts +8 -8
- package/dist/abis/MetricOmmPoolSwapper.js +8 -8
- package/dist/abis/MetricOmmPoolSwapper.js.map +1 -1
- package/dist/abis/OracleValueStopLossExtension.d.ts +936 -0
- package/dist/abis/OracleValueStopLossExtension.d.ts.map +1 -0
- package/dist/abis/OracleValueStopLossExtension.js +1214 -0
- package/dist/abis/OracleValueStopLossExtension.js.map +1 -0
- package/dist/abis/PriceProvider.d.ts +1 -113
- package/dist/abis/PriceProvider.d.ts.map +1 -1
- package/dist/abis/PriceProvider.js +1 -146
- package/dist/abis/PriceProvider.js.map +1 -1
- package/dist/abis/PriceVelocityGuardExtension.d.ts +454 -0
- package/dist/abis/PriceVelocityGuardExtension.d.ts.map +1 -0
- package/dist/abis/PriceVelocityGuardExtension.js +590 -0
- package/dist/abis/PriceVelocityGuardExtension.js.map +1 -0
- package/dist/abis/SwapAllowlistExtension.d.ts +440 -0
- package/dist/abis/SwapAllowlistExtension.d.ts.map +1 -0
- package/dist/abis/SwapAllowlistExtension.js +572 -0
- package/dist/abis/SwapAllowlistExtension.js.map +1 -0
- package/dist/abis/index.d.ts +4 -0
- package/dist/abis/index.d.ts.map +1 -1
- package/dist/abis/index.js +4 -0
- package/dist/abis/index.js.map +1 -1
- package/dist/addresses.d.ts +13 -6
- package/dist/addresses.d.ts.map +1 -1
- package/dist/addresses.js +33 -16
- package/dist/addresses.js.map +1 -1
- package/dist/extensions/admin/depositAllowlist.d.ts +8 -0
- package/dist/extensions/admin/depositAllowlist.d.ts.map +1 -0
- package/dist/extensions/admin/depositAllowlist.js +10 -0
- package/dist/extensions/admin/depositAllowlist.js.map +1 -0
- package/dist/extensions/admin/oracleStopLoss.d.ts +56 -0
- package/dist/extensions/admin/oracleStopLoss.d.ts.map +1 -0
- package/dist/extensions/admin/oracleStopLoss.js +87 -0
- package/dist/extensions/admin/oracleStopLoss.js.map +1 -0
- package/dist/extensions/admin/priceVelocityGuard.d.ts +12 -0
- package/dist/extensions/admin/priceVelocityGuard.d.ts.map +1 -0
- package/dist/extensions/admin/priceVelocityGuard.js +17 -0
- package/dist/extensions/admin/priceVelocityGuard.js.map +1 -0
- package/dist/extensions/admin/swapAllowlist.d.ts +8 -0
- package/dist/extensions/admin/swapAllowlist.d.ts.map +1 -0
- package/dist/extensions/admin/swapAllowlist.js +10 -0
- package/dist/extensions/admin/swapAllowlist.js.map +1 -0
- package/dist/extensions/index.d.ts +8 -0
- package/dist/extensions/index.d.ts.map +1 -0
- package/dist/extensions/index.js +8 -0
- package/dist/extensions/index.js.map +1 -0
- package/dist/extensions/init/index.d.ts +13 -0
- package/dist/extensions/init/index.d.ts.map +1 -0
- package/dist/extensions/init/index.js +12 -0
- package/dist/extensions/init/index.js.map +1 -0
- package/dist/extensions/orders.d.ts +7 -0
- package/dist/extensions/orders.d.ts.map +1 -0
- package/dist/extensions/orders.js +24 -0
- package/dist/extensions/orders.js.map +1 -0
- package/dist/extensions/types.d.ts +23 -0
- package/dist/extensions/types.d.ts.map +1 -0
- package/dist/extensions/types.js +10 -0
- package/dist/extensions/types.js.map +1 -0
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/pool/create.d.ts +11 -6
- package/dist/pool/create.d.ts.map +1 -1
- package/dist/pool/create.js +5 -3
- package/dist/pool/create.js.map +1 -1
- package/dist/pool/index.d.ts +1 -1
- package/dist/pool/index.d.ts.map +1 -1
- package/dist/pool/index.js.map +1 -1
- package/dist/pool/liquidity.d.ts +13 -5
- package/dist/pool/liquidity.d.ts.map +1 -1
- package/dist/pool/liquidity.js +25 -10
- package/dist/pool/liquidity.js.map +1 -1
- package/dist/pool/read.d.ts +0 -6
- package/dist/pool/read.d.ts.map +1 -1
- package/dist/pool/read.js +21 -14
- package/dist/pool/read.js.map +1 -1
- package/dist/router/swap.d.ts +1 -1
- package/dist/router/swap.d.ts.map +1 -1
- package/dist/router/swap.js +14 -14
- package/dist/router/swap.js.map +1 -1
- package/dist/types.d.ts +3 -4
- package/dist/types.d.ts.map +1 -1
- package/package.json +4 -5
- package/src/abis/DepositAllowlistExtension.ts +571 -0
- package/src/abis/MetricOmmPool.ts +168 -34
- package/src/abis/MetricOmmPoolDataProvider.ts +4 -4
- package/src/abis/MetricOmmPoolFactory.ts +93 -19
- package/src/abis/MetricOmmPoolLiquidityAdder.ts +85 -9
- package/src/abis/MetricOmmPoolSwapper.ts +8 -8
- package/src/abis/OracleValueStopLossExtension.ts +1213 -0
- package/src/abis/PriceProvider.ts +1 -146
- package/src/abis/PriceVelocityGuardExtension.ts +589 -0
- package/src/abis/SwapAllowlistExtension.ts +571 -0
- package/src/abis/index.ts +4 -0
- package/src/addresses.ts +44 -18
- package/src/extensions/admin/depositAllowlist.ts +16 -0
- package/src/extensions/admin/oracleStopLoss.ts +141 -0
- package/src/extensions/admin/priceVelocityGuard.ts +27 -0
- package/src/extensions/admin/swapAllowlist.ts +16 -0
- package/src/extensions/index.ts +31 -0
- package/src/extensions/init/index.ts +21 -0
- package/src/extensions/orders.ts +33 -0
- package/src/extensions/types.ts +33 -0
- package/src/index.ts +33 -0
- package/src/pool/create.ts +12 -8
- package/src/pool/index.ts +1 -0
- package/src/pool/liquidity.ts +41 -15
- package/src/pool/read.ts +34 -16
- package/src/router/swap.ts +16 -16
- package/src/types.ts +3 -4
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import type { Address, Hex } from "viem";
|
|
2
|
+
import { encodeFunctionData } from "viem";
|
|
3
|
+
import { OracleValueStopLossExtensionAbi } from "../../abis/OracleValueStopLossExtension.js";
|
|
4
|
+
|
|
5
|
+
export function encodeProposeOracleStopLossTimelockCalldata(params: {
|
|
6
|
+
extension: Address;
|
|
7
|
+
pool: Address;
|
|
8
|
+
newTimelock: number;
|
|
9
|
+
}): Hex {
|
|
10
|
+
return encodeFunctionData({
|
|
11
|
+
abi: OracleValueStopLossExtensionAbi,
|
|
12
|
+
functionName: "proposeOracleStopLossTimelock",
|
|
13
|
+
args: [params.pool, params.newTimelock],
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export function encodeExecuteOracleStopLossTimelockCalldata(params: {
|
|
18
|
+
extension: Address;
|
|
19
|
+
pool: Address;
|
|
20
|
+
}): Hex {
|
|
21
|
+
return encodeFunctionData({
|
|
22
|
+
abi: OracleValueStopLossExtensionAbi,
|
|
23
|
+
functionName: "executeOracleStopLossTimelock",
|
|
24
|
+
args: [params.pool],
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export function encodeCancelOracleStopLossTimelockCalldata(params: {
|
|
29
|
+
extension: Address;
|
|
30
|
+
pool: Address;
|
|
31
|
+
}): Hex {
|
|
32
|
+
return encodeFunctionData({
|
|
33
|
+
abi: OracleValueStopLossExtensionAbi,
|
|
34
|
+
functionName: "cancelOracleStopLossTimelock",
|
|
35
|
+
args: [params.pool],
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export function encodeProposeOracleStopLossDrawdownCalldata(params: {
|
|
40
|
+
extension: Address;
|
|
41
|
+
pool: Address;
|
|
42
|
+
newMaxDrawdownE6: bigint;
|
|
43
|
+
}): Hex {
|
|
44
|
+
return encodeFunctionData({
|
|
45
|
+
abi: OracleValueStopLossExtensionAbi,
|
|
46
|
+
functionName: "proposeOracleStopLossDrawdown",
|
|
47
|
+
args: [params.pool, params.newMaxDrawdownE6],
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export function encodeExecuteOracleStopLossDrawdownCalldata(params: {
|
|
52
|
+
extension: Address;
|
|
53
|
+
pool: Address;
|
|
54
|
+
}): Hex {
|
|
55
|
+
return encodeFunctionData({
|
|
56
|
+
abi: OracleValueStopLossExtensionAbi,
|
|
57
|
+
functionName: "executeOracleStopLossDrawdown",
|
|
58
|
+
args: [params.pool],
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export function encodeCancelOracleStopLossDrawdownCalldata(params: {
|
|
63
|
+
extension: Address;
|
|
64
|
+
pool: Address;
|
|
65
|
+
}): Hex {
|
|
66
|
+
return encodeFunctionData({
|
|
67
|
+
abi: OracleValueStopLossExtensionAbi,
|
|
68
|
+
functionName: "cancelOracleStopLossDrawdown",
|
|
69
|
+
args: [params.pool],
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export function encodeProposeOracleStopLossDecayCalldata(params: {
|
|
74
|
+
extension: Address;
|
|
75
|
+
pool: Address;
|
|
76
|
+
newDecayPerSecondE8: bigint;
|
|
77
|
+
}): Hex {
|
|
78
|
+
return encodeFunctionData({
|
|
79
|
+
abi: OracleValueStopLossExtensionAbi,
|
|
80
|
+
functionName: "proposeOracleStopLossDecay",
|
|
81
|
+
args: [params.pool, params.newDecayPerSecondE8],
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
export function encodeExecuteOracleStopLossDecayCalldata(params: {
|
|
86
|
+
extension: Address;
|
|
87
|
+
pool: Address;
|
|
88
|
+
}): Hex {
|
|
89
|
+
return encodeFunctionData({
|
|
90
|
+
abi: OracleValueStopLossExtensionAbi,
|
|
91
|
+
functionName: "executeOracleStopLossDecay",
|
|
92
|
+
args: [params.pool],
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
export function encodeCancelOracleStopLossDecayCalldata(params: {
|
|
97
|
+
extension: Address;
|
|
98
|
+
pool: Address;
|
|
99
|
+
}): Hex {
|
|
100
|
+
return encodeFunctionData({
|
|
101
|
+
abi: OracleValueStopLossExtensionAbi,
|
|
102
|
+
functionName: "cancelOracleStopLossDecay",
|
|
103
|
+
args: [params.pool],
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
export function encodeProposeOracleStopLossHighWatermarksCalldata(params: {
|
|
108
|
+
extension: Address;
|
|
109
|
+
pool: Address;
|
|
110
|
+
binIdx: number;
|
|
111
|
+
newHwmToken0: bigint;
|
|
112
|
+
newHwmToken1: bigint;
|
|
113
|
+
}): Hex {
|
|
114
|
+
return encodeFunctionData({
|
|
115
|
+
abi: OracleValueStopLossExtensionAbi,
|
|
116
|
+
functionName: "proposeOracleStopLossHighWatermarks",
|
|
117
|
+
args: [params.pool, params.binIdx, params.newHwmToken0, params.newHwmToken1],
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
export function encodeExecuteOracleStopLossHighWatermarksCalldata(params: {
|
|
122
|
+
extension: Address;
|
|
123
|
+
pool: Address;
|
|
124
|
+
}): Hex {
|
|
125
|
+
return encodeFunctionData({
|
|
126
|
+
abi: OracleValueStopLossExtensionAbi,
|
|
127
|
+
functionName: "executeOracleStopLossHighWatermarks",
|
|
128
|
+
args: [params.pool],
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
export function encodeCancelOracleStopLossHighWatermarksCalldata(params: {
|
|
133
|
+
extension: Address;
|
|
134
|
+
pool: Address;
|
|
135
|
+
}): Hex {
|
|
136
|
+
return encodeFunctionData({
|
|
137
|
+
abi: OracleValueStopLossExtensionAbi,
|
|
138
|
+
functionName: "cancelOracleStopLossHighWatermarks",
|
|
139
|
+
args: [params.pool],
|
|
140
|
+
});
|
|
141
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { Address, Hex } from "viem";
|
|
2
|
+
import { encodeFunctionData } from "viem";
|
|
3
|
+
import { PriceVelocityGuardExtensionAbi } from "../../abis/PriceVelocityGuardExtension.js";
|
|
4
|
+
|
|
5
|
+
export function encodeSetMaxChangePerBlockCalldata(params: {
|
|
6
|
+
extension: Address;
|
|
7
|
+
pool: Address;
|
|
8
|
+
maxChangePerBlockE18: bigint;
|
|
9
|
+
}): Hex {
|
|
10
|
+
return encodeFunctionData({
|
|
11
|
+
abi: PriceVelocityGuardExtensionAbi,
|
|
12
|
+
functionName: "setMaxChangePerBlock",
|
|
13
|
+
args: [params.pool, params.maxChangePerBlockE18],
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export function encodeSetLastMidPriceCalldata(params: {
|
|
18
|
+
extension: Address;
|
|
19
|
+
pool: Address;
|
|
20
|
+
lastMidPriceX64: bigint;
|
|
21
|
+
}): Hex {
|
|
22
|
+
return encodeFunctionData({
|
|
23
|
+
abi: PriceVelocityGuardExtensionAbi,
|
|
24
|
+
functionName: "setLastMidPrice",
|
|
25
|
+
args: [params.pool, params.lastMidPriceX64],
|
|
26
|
+
});
|
|
27
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { Address, Hex } from "viem";
|
|
2
|
+
import { encodeFunctionData } from "viem";
|
|
3
|
+
import { SwapAllowlistExtensionAbi } from "../../abis/SwapAllowlistExtension.js";
|
|
4
|
+
|
|
5
|
+
export function encodeSetAllowedToSwapCalldata(params: {
|
|
6
|
+
extension: Address;
|
|
7
|
+
pool: Address;
|
|
8
|
+
swapper: Address;
|
|
9
|
+
allowed: boolean;
|
|
10
|
+
}): Hex {
|
|
11
|
+
return encodeFunctionData({
|
|
12
|
+
abi: SwapAllowlistExtensionAbi,
|
|
13
|
+
functionName: "setAllowedToSwap",
|
|
14
|
+
args: [params.pool, params.swapper, params.allowed],
|
|
15
|
+
});
|
|
16
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export {
|
|
2
|
+
EMPTY_EXTENSION_DATA,
|
|
3
|
+
EMPTY_EXTENSION_ORDERS,
|
|
4
|
+
type ExtensionOrders,
|
|
5
|
+
type PoolExtensions,
|
|
6
|
+
} from "./types.js";
|
|
7
|
+
|
|
8
|
+
export { encodeExtensionOrder, buildExtensionOrders, type ExtensionOrderAction } from "./orders.js";
|
|
9
|
+
|
|
10
|
+
export { EMPTY_EXTENSION_INIT_DATA, encodeOracleStopLossInitData } from "./init/index.js";
|
|
11
|
+
|
|
12
|
+
export { encodeSetAllowedToDepositCalldata } from "./admin/depositAllowlist.js";
|
|
13
|
+
export { encodeSetAllowedToSwapCalldata } from "./admin/swapAllowlist.js";
|
|
14
|
+
export {
|
|
15
|
+
encodeSetMaxChangePerBlockCalldata,
|
|
16
|
+
encodeSetLastMidPriceCalldata,
|
|
17
|
+
} from "./admin/priceVelocityGuard.js";
|
|
18
|
+
export {
|
|
19
|
+
encodeProposeOracleStopLossTimelockCalldata,
|
|
20
|
+
encodeExecuteOracleStopLossTimelockCalldata,
|
|
21
|
+
encodeCancelOracleStopLossTimelockCalldata,
|
|
22
|
+
encodeProposeOracleStopLossDrawdownCalldata,
|
|
23
|
+
encodeExecuteOracleStopLossDrawdownCalldata,
|
|
24
|
+
encodeCancelOracleStopLossDrawdownCalldata,
|
|
25
|
+
encodeProposeOracleStopLossDecayCalldata,
|
|
26
|
+
encodeExecuteOracleStopLossDecayCalldata,
|
|
27
|
+
encodeCancelOracleStopLossDecayCalldata,
|
|
28
|
+
encodeProposeOracleStopLossHighWatermarksCalldata,
|
|
29
|
+
encodeExecuteOracleStopLossHighWatermarksCalldata,
|
|
30
|
+
encodeCancelOracleStopLossHighWatermarksCalldata,
|
|
31
|
+
} from "./admin/oracleStopLoss.js";
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Hex } from "viem";
|
|
2
|
+
import { encodeAbiParameters } from "viem";
|
|
3
|
+
import { EMPTY_EXTENSION_DATA } from "../types.js";
|
|
4
|
+
|
|
5
|
+
/** Default init payload for extensions whose `initialize` is a no-op. */
|
|
6
|
+
export const EMPTY_EXTENSION_INIT_DATA = EMPTY_EXTENSION_DATA;
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Init data for `OracleValueStopLossExtension.initialize`.
|
|
10
|
+
* `abi.encode(uint32 drawdownE6, uint32 decayPerSecondE8, uint32 timelockSeconds)`.
|
|
11
|
+
*/
|
|
12
|
+
export function encodeOracleStopLossInitData(params: {
|
|
13
|
+
drawdownE6: number;
|
|
14
|
+
decayPerSecondE8: number;
|
|
15
|
+
timelockSeconds: number;
|
|
16
|
+
}): Hex {
|
|
17
|
+
return encodeAbiParameters(
|
|
18
|
+
[{ type: "uint32" }, { type: "uint32" }, { type: "uint32" }],
|
|
19
|
+
[params.drawdownE6, params.decayPerSecondE8, params.timelockSeconds],
|
|
20
|
+
);
|
|
21
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { ExtensionOrders } from "./types.js";
|
|
2
|
+
import { EMPTY_EXTENSION_ORDERS } from "./types.js";
|
|
3
|
+
|
|
4
|
+
/** Pack up to seven 3-bit extension indices (0 = end of sequence). */
|
|
5
|
+
export function encodeExtensionOrder(slots: readonly number[]): bigint {
|
|
6
|
+
if (slots.length > 7) {
|
|
7
|
+
throw new Error("encodeExtensionOrder accepts at most 7 slots");
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
let order = 0n;
|
|
11
|
+
for (let i = 0; i < slots.length; i++) {
|
|
12
|
+
const slot = slots[i];
|
|
13
|
+
if (!Number.isInteger(slot) || slot < 0 || slot > 7) {
|
|
14
|
+
throw new Error(`encodeExtensionOrder slot ${i} must be an integer in [0, 7]`);
|
|
15
|
+
}
|
|
16
|
+
order |= BigInt(slot) << BigInt(i * 3);
|
|
17
|
+
}
|
|
18
|
+
return order;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export type ExtensionOrderAction = keyof ExtensionOrders;
|
|
22
|
+
|
|
23
|
+
/** Build extension orders from per-action slot arrays. Omitted actions default to zero. */
|
|
24
|
+
export function buildExtensionOrders(
|
|
25
|
+
partial: Partial<Record<ExtensionOrderAction, readonly number[]>>,
|
|
26
|
+
): ExtensionOrders {
|
|
27
|
+
return {
|
|
28
|
+
...EMPTY_EXTENSION_ORDERS,
|
|
29
|
+
...Object.fromEntries(
|
|
30
|
+
Object.entries(partial).map(([action, slots]) => [action, encodeExtensionOrder(slots ?? [])]),
|
|
31
|
+
),
|
|
32
|
+
} as ExtensionOrders;
|
|
33
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { Address, Hex } from "viem";
|
|
2
|
+
|
|
3
|
+
/** Invocation order for a single extension action (packed 3-bit slots). */
|
|
4
|
+
export interface ExtensionOrders {
|
|
5
|
+
beforeAddLiquidity: bigint;
|
|
6
|
+
afterAddLiquidity: bigint;
|
|
7
|
+
beforeRemoveLiquidity: bigint;
|
|
8
|
+
afterRemoveLiquidity: bigint;
|
|
9
|
+
beforeSwap: bigint;
|
|
10
|
+
afterSwap: bigint;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/** Up to seven extension addresses configured on a pool (index 1–7). */
|
|
14
|
+
export interface PoolExtensions {
|
|
15
|
+
extension1: Address;
|
|
16
|
+
extension2: Address;
|
|
17
|
+
extension3: Address;
|
|
18
|
+
extension4: Address;
|
|
19
|
+
extension5: Address;
|
|
20
|
+
extension6: Address;
|
|
21
|
+
extension7: Address;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export const EMPTY_EXTENSION_DATA = "0x" as Hex;
|
|
25
|
+
|
|
26
|
+
export const EMPTY_EXTENSION_ORDERS: ExtensionOrders = {
|
|
27
|
+
beforeAddLiquidity: 0n,
|
|
28
|
+
afterAddLiquidity: 0n,
|
|
29
|
+
beforeRemoveLiquidity: 0n,
|
|
30
|
+
afterRemoveLiquidity: 0n,
|
|
31
|
+
beforeSwap: 0n,
|
|
32
|
+
afterSwap: 0n,
|
|
33
|
+
};
|
package/src/index.ts
CHANGED
|
@@ -49,6 +49,10 @@ export {
|
|
|
49
49
|
MetricOmmPoolSwapperAbi,
|
|
50
50
|
MetricOmmPoolLiquidityAdderAbi,
|
|
51
51
|
MetricOmmPoolFactoryAbi,
|
|
52
|
+
DepositAllowlistExtensionAbi,
|
|
53
|
+
SwapAllowlistExtensionAbi,
|
|
54
|
+
PriceVelocityGuardExtensionAbi,
|
|
55
|
+
OracleValueStopLossExtensionAbi,
|
|
52
56
|
} from "./abis/index.js";
|
|
53
57
|
|
|
54
58
|
// ============ Utils ============
|
|
@@ -71,6 +75,7 @@ export {
|
|
|
71
75
|
preparePoolBinData,
|
|
72
76
|
type CreatePoolFactoryParams,
|
|
73
77
|
type CreatePoolParams,
|
|
78
|
+
type ExtensionOrders,
|
|
74
79
|
getPoolImmutables,
|
|
75
80
|
getPoolFeeConfig,
|
|
76
81
|
getPoolState,
|
|
@@ -157,3 +162,31 @@ export {
|
|
|
157
162
|
type CollectedFactoryFeeTx,
|
|
158
163
|
type CollectFactoryFeesResult,
|
|
159
164
|
} from "./factory/index.js";
|
|
165
|
+
|
|
166
|
+
// ============ Extension Functions ============
|
|
167
|
+
export {
|
|
168
|
+
EMPTY_EXTENSION_DATA,
|
|
169
|
+
EMPTY_EXTENSION_ORDERS,
|
|
170
|
+
EMPTY_EXTENSION_INIT_DATA,
|
|
171
|
+
encodeExtensionOrder,
|
|
172
|
+
buildExtensionOrders,
|
|
173
|
+
encodeOracleStopLossInitData,
|
|
174
|
+
encodeSetAllowedToDepositCalldata,
|
|
175
|
+
encodeSetAllowedToSwapCalldata,
|
|
176
|
+
encodeSetMaxChangePerBlockCalldata,
|
|
177
|
+
encodeSetLastMidPriceCalldata,
|
|
178
|
+
encodeProposeOracleStopLossTimelockCalldata,
|
|
179
|
+
encodeExecuteOracleStopLossTimelockCalldata,
|
|
180
|
+
encodeCancelOracleStopLossTimelockCalldata,
|
|
181
|
+
encodeProposeOracleStopLossDrawdownCalldata,
|
|
182
|
+
encodeExecuteOracleStopLossDrawdownCalldata,
|
|
183
|
+
encodeCancelOracleStopLossDrawdownCalldata,
|
|
184
|
+
encodeProposeOracleStopLossDecayCalldata,
|
|
185
|
+
encodeExecuteOracleStopLossDecayCalldata,
|
|
186
|
+
encodeCancelOracleStopLossDecayCalldata,
|
|
187
|
+
encodeProposeOracleStopLossHighWatermarksCalldata,
|
|
188
|
+
encodeExecuteOracleStopLossHighWatermarksCalldata,
|
|
189
|
+
encodeCancelOracleStopLossHighWatermarksCalldata,
|
|
190
|
+
type PoolExtensions,
|
|
191
|
+
type ExtensionOrderAction,
|
|
192
|
+
} from "./extensions/index.js";
|
package/src/pool/create.ts
CHANGED
|
@@ -3,11 +3,12 @@
|
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
5
|
import type { Address, PublicClient, WalletClient, Hex } from "viem";
|
|
6
|
-
import { encodeFunctionData
|
|
6
|
+
import { encodeFunctionData } from "viem";
|
|
7
7
|
import { POOL_FACTORY_ABI } from "../constants.js";
|
|
8
8
|
import { createUniformBins } from "../utils/binData.js";
|
|
9
|
+
import { EMPTY_EXTENSION_ORDERS, type ExtensionOrders } from "../extensions/types.js";
|
|
9
10
|
|
|
10
|
-
|
|
11
|
+
export type { ExtensionOrders };
|
|
11
12
|
|
|
12
13
|
/**
|
|
13
14
|
* Parameters for creating a new pool via the v1 factory.
|
|
@@ -17,10 +18,12 @@ export interface CreatePoolFactoryParams {
|
|
|
17
18
|
token1: Address;
|
|
18
19
|
priceProvider: Address;
|
|
19
20
|
admin: Address;
|
|
20
|
-
/** Defaults to
|
|
21
|
-
|
|
22
|
-
/** Defaults to
|
|
23
|
-
|
|
21
|
+
/** Defaults to empty (no extensions). */
|
|
22
|
+
extensions?: Address[];
|
|
23
|
+
/** Defaults to all-zero orders (no extension calls). */
|
|
24
|
+
extensionOrders?: ExtensionOrders;
|
|
25
|
+
/** Defaults to empty; length must match `extensions` when extensions are set. */
|
|
26
|
+
extensionInitData?: Hex[];
|
|
24
27
|
/** Defaults to 0. */
|
|
25
28
|
priceProviderTimelock?: bigint;
|
|
26
29
|
nonNegativeBins: bigint[];
|
|
@@ -69,8 +72,9 @@ export function prepareFactoryCreatePoolParams(params: CreatePoolFactoryParams)
|
|
|
69
72
|
token0: params.token0,
|
|
70
73
|
token1: params.token1,
|
|
71
74
|
priceProvider: params.priceProvider,
|
|
72
|
-
|
|
73
|
-
|
|
75
|
+
extensions: params.extensions ?? [],
|
|
76
|
+
extensionOrders: params.extensionOrders ?? EMPTY_EXTENSION_ORDERS,
|
|
77
|
+
extensionInitData: params.extensionInitData ?? [],
|
|
74
78
|
priceProviderTimelock: params.priceProviderTimelock ?? 0n,
|
|
75
79
|
admin: params.admin,
|
|
76
80
|
initialAmount0PerShareE18: params.initialScaledToken0PerShareE18,
|
package/src/pool/index.ts
CHANGED
package/src/pool/liquidity.ts
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
import type { Address, PublicClient, Hex } from "viem";
|
|
7
7
|
import { encodeFunctionData } from "viem";
|
|
8
8
|
import { MAX_UINT104, MAX_INT104, MAX_INT128, LIQUIDITY_ADDER_ABI } from "../constants.js";
|
|
9
|
+
import { EMPTY_EXTENSION_DATA } from "../extensions/types.js";
|
|
9
10
|
import { MetricOmmPoolAbi } from "../abis/MetricOmmPool.js";
|
|
10
11
|
import type { LiquidityDelta, LiquidityBinValueInput, PoolLiquidityDelta } from "../types.js";
|
|
11
12
|
import { getPoolImmutables } from "./read.js";
|
|
@@ -28,7 +29,16 @@ export { convertToken0ToToken1, convertToken1ToToken0 };
|
|
|
28
29
|
export const getPositionShares = getPositionBinSharesRange;
|
|
29
30
|
export const getPositionSharesForBins = getPositionBinSharesForBins;
|
|
30
31
|
|
|
31
|
-
|
|
32
|
+
function getLiquidityAdderFunction(name: string, inputCount: number) {
|
|
33
|
+
const item = (LIQUIDITY_ADDER_ABI as readonly any[]).find(
|
|
34
|
+
(entry) =>
|
|
35
|
+
entry?.type === "function" && entry?.name === name && entry?.inputs?.length === inputCount,
|
|
36
|
+
);
|
|
37
|
+
if (!item) {
|
|
38
|
+
throw new Error(`LiquidityAdder ABI missing ${name} overload (${inputCount} inputs)`);
|
|
39
|
+
}
|
|
40
|
+
return item;
|
|
41
|
+
}
|
|
32
42
|
|
|
33
43
|
export interface RemoveLiquidityParams {
|
|
34
44
|
percentageToRemove: number;
|
|
@@ -711,10 +721,10 @@ export function encodeAddLiquidityExactSharesSelfCalldata(params: {
|
|
|
711
721
|
deltas: PoolLiquidityDelta;
|
|
712
722
|
maxAmountToken0: bigint;
|
|
713
723
|
maxAmountToken1: bigint;
|
|
714
|
-
|
|
724
|
+
extensionData?: Hex;
|
|
715
725
|
}): Hex {
|
|
716
726
|
return encodeFunctionData({
|
|
717
|
-
abi:
|
|
727
|
+
abi: [getLiquidityAdderFunction("addLiquidityExactShares", 6)],
|
|
718
728
|
functionName: "addLiquidityExactShares",
|
|
719
729
|
args: [
|
|
720
730
|
params.pool,
|
|
@@ -722,7 +732,7 @@ export function encodeAddLiquidityExactSharesSelfCalldata(params: {
|
|
|
722
732
|
{ binIdxs: [...params.deltas.binIdxs], shares: [...params.deltas.shares] },
|
|
723
733
|
params.maxAmountToken0,
|
|
724
734
|
params.maxAmountToken1,
|
|
725
|
-
params.
|
|
735
|
+
params.extensionData ?? EMPTY_EXTENSION_DATA,
|
|
726
736
|
],
|
|
727
737
|
});
|
|
728
738
|
}
|
|
@@ -734,10 +744,10 @@ export function encodeAddLiquidityExactSharesWithOwnerCalldata(params: {
|
|
|
734
744
|
deltas: PoolLiquidityDelta;
|
|
735
745
|
maxAmountToken0: bigint;
|
|
736
746
|
maxAmountToken1: bigint;
|
|
737
|
-
|
|
747
|
+
extensionData?: Hex;
|
|
738
748
|
}): Hex {
|
|
739
749
|
return encodeFunctionData({
|
|
740
|
-
abi:
|
|
750
|
+
abi: [getLiquidityAdderFunction("addLiquidityExactShares", 7)],
|
|
741
751
|
functionName: "addLiquidityExactShares",
|
|
742
752
|
args: [
|
|
743
753
|
params.pool,
|
|
@@ -746,7 +756,7 @@ export function encodeAddLiquidityExactSharesWithOwnerCalldata(params: {
|
|
|
746
756
|
{ binIdxs: [...params.deltas.binIdxs], shares: [...params.deltas.shares] },
|
|
747
757
|
params.maxAmountToken0,
|
|
748
758
|
params.maxAmountToken1,
|
|
749
|
-
params.
|
|
759
|
+
params.extensionData ?? EMPTY_EXTENSION_DATA,
|
|
750
760
|
],
|
|
751
761
|
});
|
|
752
762
|
}
|
|
@@ -757,10 +767,14 @@ export function encodeAddLiquidityWeightedSelfCalldata(params: {
|
|
|
757
767
|
weightDeltas: PoolLiquidityDelta;
|
|
758
768
|
maxAmountToken0: bigint;
|
|
759
769
|
maxAmountToken1: bigint;
|
|
760
|
-
|
|
770
|
+
minimalCurBin?: number;
|
|
771
|
+
minimalPosition?: bigint;
|
|
772
|
+
maximalCurBin?: number;
|
|
773
|
+
maximalPosition?: bigint;
|
|
774
|
+
extensionData?: Hex;
|
|
761
775
|
}): Hex {
|
|
762
776
|
return encodeFunctionData({
|
|
763
|
-
abi:
|
|
777
|
+
abi: [getLiquidityAdderFunction("addLiquidityWeighted", 10)],
|
|
764
778
|
functionName: "addLiquidityWeighted",
|
|
765
779
|
args: [
|
|
766
780
|
params.pool,
|
|
@@ -768,7 +782,11 @@ export function encodeAddLiquidityWeightedSelfCalldata(params: {
|
|
|
768
782
|
{ binIdxs: [...params.weightDeltas.binIdxs], shares: [...params.weightDeltas.shares] },
|
|
769
783
|
params.maxAmountToken0,
|
|
770
784
|
params.maxAmountToken1,
|
|
771
|
-
params.
|
|
785
|
+
params.minimalCurBin ?? -128,
|
|
786
|
+
params.minimalPosition ?? 0n,
|
|
787
|
+
params.maximalCurBin ?? 127,
|
|
788
|
+
params.maximalPosition ?? MAX_UINT104,
|
|
789
|
+
params.extensionData ?? EMPTY_EXTENSION_DATA,
|
|
772
790
|
],
|
|
773
791
|
});
|
|
774
792
|
}
|
|
@@ -780,10 +798,14 @@ export function encodeAddLiquidityWeightedWithOwnerCalldata(params: {
|
|
|
780
798
|
weightDeltas: PoolLiquidityDelta;
|
|
781
799
|
maxAmountToken0: bigint;
|
|
782
800
|
maxAmountToken1: bigint;
|
|
783
|
-
|
|
801
|
+
minimalCurBin?: number;
|
|
802
|
+
minimalPosition?: bigint;
|
|
803
|
+
maximalCurBin?: number;
|
|
804
|
+
maximalPosition?: bigint;
|
|
805
|
+
extensionData?: Hex;
|
|
784
806
|
}): Hex {
|
|
785
807
|
return encodeFunctionData({
|
|
786
|
-
abi:
|
|
808
|
+
abi: [getLiquidityAdderFunction("addLiquidityWeighted", 11)],
|
|
787
809
|
functionName: "addLiquidityWeighted",
|
|
788
810
|
args: [
|
|
789
811
|
params.pool,
|
|
@@ -792,7 +814,11 @@ export function encodeAddLiquidityWeightedWithOwnerCalldata(params: {
|
|
|
792
814
|
{ binIdxs: [...params.weightDeltas.binIdxs], shares: [...params.weightDeltas.shares] },
|
|
793
815
|
params.maxAmountToken0,
|
|
794
816
|
params.maxAmountToken1,
|
|
795
|
-
params.
|
|
817
|
+
params.minimalCurBin ?? -128,
|
|
818
|
+
params.minimalPosition ?? 0n,
|
|
819
|
+
params.maximalCurBin ?? 127,
|
|
820
|
+
params.maximalPosition ?? MAX_UINT104,
|
|
821
|
+
params.extensionData ?? EMPTY_EXTENSION_DATA,
|
|
796
822
|
],
|
|
797
823
|
});
|
|
798
824
|
}
|
|
@@ -801,7 +827,7 @@ export function encodeRemoveLiquidityCalldata(params: {
|
|
|
801
827
|
owner: Address;
|
|
802
828
|
salt: bigint;
|
|
803
829
|
deltas: PoolLiquidityDelta;
|
|
804
|
-
|
|
830
|
+
extensionData?: Hex;
|
|
805
831
|
}): Hex {
|
|
806
832
|
return encodeFunctionData({
|
|
807
833
|
abi: MetricOmmPoolAbi,
|
|
@@ -810,7 +836,7 @@ export function encodeRemoveLiquidityCalldata(params: {
|
|
|
810
836
|
params.owner,
|
|
811
837
|
params.salt,
|
|
812
838
|
{ binIdxs: [...params.deltas.binIdxs], shares: [...params.deltas.shares] },
|
|
813
|
-
params.
|
|
839
|
+
params.extensionData ?? EMPTY_EXTENSION_DATA,
|
|
814
840
|
],
|
|
815
841
|
});
|
|
816
842
|
}
|
package/src/pool/read.ts
CHANGED
|
@@ -28,10 +28,21 @@ export async function getPoolImmutables(
|
|
|
28
28
|
initialScaledToken1PerShareE18: bigint;
|
|
29
29
|
minimalMintableLiquidity: bigint;
|
|
30
30
|
immutablePriceProvider: Address;
|
|
31
|
-
hooks: Address;
|
|
32
|
-
hooksPermissions: number;
|
|
33
31
|
lowestBin: bigint;
|
|
34
32
|
highestBin: bigint;
|
|
33
|
+
extension1: Address;
|
|
34
|
+
extension2: Address;
|
|
35
|
+
extension3: Address;
|
|
36
|
+
extension4: Address;
|
|
37
|
+
extension5: Address;
|
|
38
|
+
extension6: Address;
|
|
39
|
+
extension7: Address;
|
|
40
|
+
beforeAddLiquidityOrder: bigint;
|
|
41
|
+
afterAddLiquidityOrder: bigint;
|
|
42
|
+
beforeRemoveLiquidityOrder: bigint;
|
|
43
|
+
afterRemoveLiquidityOrder: bigint;
|
|
44
|
+
beforeSwapOrder: bigint;
|
|
45
|
+
afterSwapOrder: bigint;
|
|
35
46
|
};
|
|
36
47
|
|
|
37
48
|
return {
|
|
@@ -44,10 +55,23 @@ export async function getPoolImmutables(
|
|
|
44
55
|
initialScaledToken1PerShareE18: imm.initialScaledToken1PerShareE18,
|
|
45
56
|
minimalMintableLiquidity: imm.minimalMintableLiquidity,
|
|
46
57
|
immutablePriceProvider: imm.immutablePriceProvider,
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
58
|
+
extensions: {
|
|
59
|
+
extension1: imm.extension1,
|
|
60
|
+
extension2: imm.extension2,
|
|
61
|
+
extension3: imm.extension3,
|
|
62
|
+
extension4: imm.extension4,
|
|
63
|
+
extension5: imm.extension5,
|
|
64
|
+
extension6: imm.extension6,
|
|
65
|
+
extension7: imm.extension7,
|
|
66
|
+
},
|
|
67
|
+
extensionOrders: {
|
|
68
|
+
beforeAddLiquidity: imm.beforeAddLiquidityOrder,
|
|
69
|
+
afterAddLiquidity: imm.afterAddLiquidityOrder,
|
|
70
|
+
beforeRemoveLiquidity: imm.beforeRemoveLiquidityOrder,
|
|
71
|
+
afterRemoveLiquidity: imm.afterRemoveLiquidityOrder,
|
|
72
|
+
beforeSwap: imm.beforeSwapOrder,
|
|
73
|
+
afterSwap: imm.afterSwapOrder,
|
|
74
|
+
},
|
|
51
75
|
lowestBin: Number(imm.lowestBin),
|
|
52
76
|
highestBin: Number(imm.highestBin),
|
|
53
77
|
};
|
|
@@ -109,9 +133,6 @@ export async function getPoolState(
|
|
|
109
133
|
};
|
|
110
134
|
}
|
|
111
135
|
|
|
112
|
-
/**
|
|
113
|
-
* Read bin state (scaled balances) via MetricOmmPoolDataProvider.
|
|
114
|
-
*/
|
|
115
136
|
export async function getBinState(
|
|
116
137
|
publicClient: PublicClient,
|
|
117
138
|
dataProviderAddress: Address,
|
|
@@ -122,7 +143,7 @@ export async function getBinState(
|
|
|
122
143
|
address: dataProviderAddress,
|
|
123
144
|
abi: DATA_PROVIDER_ABI,
|
|
124
145
|
functionName: "binState",
|
|
125
|
-
args: [poolAddress, binIdx],
|
|
146
|
+
args: [poolAddress, BigInt(binIdx)],
|
|
126
147
|
})) as readonly [bigint, bigint, number, number, number];
|
|
127
148
|
|
|
128
149
|
return {
|
|
@@ -134,9 +155,6 @@ export async function getBinState(
|
|
|
134
155
|
};
|
|
135
156
|
}
|
|
136
157
|
|
|
137
|
-
/**
|
|
138
|
-
* Get user position shares in a specific bin (DataProvider).
|
|
139
|
-
*/
|
|
140
158
|
export async function getPositionBinShares(
|
|
141
159
|
publicClient: PublicClient,
|
|
142
160
|
dataProviderAddress: Address,
|
|
@@ -145,10 +163,10 @@ export async function getPositionBinShares(
|
|
|
145
163
|
salt: bigint,
|
|
146
164
|
binIdx: number,
|
|
147
165
|
): Promise<bigint> {
|
|
148
|
-
return
|
|
166
|
+
return publicClient.readContract({
|
|
149
167
|
address: dataProviderAddress,
|
|
150
168
|
abi: DATA_PROVIDER_ABI,
|
|
151
169
|
functionName: "positionBinShares",
|
|
152
|
-
args: [poolAddress, owner, salt, binIdx],
|
|
153
|
-
})
|
|
170
|
+
args: [poolAddress, owner, salt, BigInt(binIdx)],
|
|
171
|
+
}) as Promise<bigint>;
|
|
154
172
|
}
|