Skip to content

Commit 5b92be2

Browse files
feat: goldilocks mint amount setter
1 parent 43f8417 commit 5b92be2

File tree

7 files changed

+173
-104
lines changed

7 files changed

+173
-104
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,46 @@
11
[
22
[
3-
"0xb65d95ec01ffffffffffff0707899ac8be7462151d6515fcd4773dd9267c9911",
4-
"0x2e1cc2f601ffffffffffff0807899ac8be7462151d6515fcd4773dd9267c9911",
5-
"0x095ea7b3010800ffffffffff4186bfc76e2e237523cbc30fd220fe055156b41f",
6-
"0x095ea7b3010800fffffffffff8163eac4c0239a81a7d8bd05b8e14498a5fd880",
7-
"0x70a082310107ffffffffff084186bfc76e2e237523cbc30fd220fe055156b41f",
8-
"0xa391c15b010801ffffffff08ca99eaa38e8f37a168214a3a57c9a45a58563ed5",
9-
"0x095ea7b3010208ffffffffff4186bfc76e2e237523cbc30fd220fe055156b41f",
10-
"0x70a082310107ffffffffff02b1195a6cdb7ef8fb22671bd8321727dbb6ddde03",
11-
"0x70a082310107ffffffffff00fb8283e50c89e367674bc566db3070d9e9ff2fdd",
12-
"0xb6b55f250108ffffffffffffe4dc8142ced52c547384032e43379b0514341c22",
13-
"0x70a082310107ffffffffff09b1195a6cdb7ef8fb22671bd8321727dbb6ddde03",
14-
"0xb67d77c5010902ffffffff09ca99eaa38e8f37a168214a3a57c9a45a58563ed5",
15-
"0x70a082310107ffffffffff02fb8283e50c89e367674bc566db3070d9e9ff2fdd",
3+
"0xb65d95ec01ffffffffffff0807899ac8be7462151d6515fcd4773dd9267c9911",
4+
"0x2e1cc2f601ffffffffffff0907899ac8be7462151d6515fcd4773dd9267c9911",
5+
"0x095ea7b3010900ffffffffff4186bfc76e2e237523cbc30fd220fe055156b41f",
6+
"0x095ea7b3010900fffffffffff8163eac4c0239a81a7d8bd05b8e14498a5fd880",
7+
"0x70a082310108ffffffffff094186bfc76e2e237523cbc30fd220fe055156b41f",
8+
"0x0ff4c9160101ffffffffff0139027795ae6f2b56ada04f0c25cf5adbd095933b",
9+
"0xb67d77c5010901ffffffff09ca99eaa38e8f37a168214a3a57c9a45a58563ed5",
10+
"0x095ea7b3010201ffffffffff4186bfc76e2e237523cbc30fd220fe055156b41f",
11+
"0x70a082310108ffffffffff02b1195a6cdb7ef8fb22671bd8321727dbb6ddde03",
12+
"0x70a082310108ffffffffff00fb8283e50c89e367674bc566db3070d9e9ff2fdd",
13+
"0xb6b55f250101ffffffffffffe4dc8142ced52c547384032e43379b0514341c22",
14+
"0x70a082310108ffffffffff01b1195a6cdb7ef8fb22671bd8321727dbb6ddde03",
15+
"0xb67d77c5010102ffffffff01ca99eaa38e8f37a168214a3a57c9a45a58563ed5",
16+
"0x70a082310108ffffffffff02fb8283e50c89e367674bc566db3070d9e9ff2fdd",
1617
"0xb67d77c5010200ffffffffffca99eaa38e8f37a168214a3a57c9a45a58563ed5",
1718
"0x0ff4c9160103ffffffffff0339027795ae6f2b56ada04f0c25cf5adbd095933b",
18-
"0x0ff4c9160101ffffffffff0139027795ae6f2b56ada04f0c25cf5adbd095933b",
19-
"0x4bf6a8f0010803ffffffff03d0af6f692bfa10d6a535a3a321dc8377f4eeef12",
20-
"0x4bf6a8f0010901ffffffff01d0af6f692bfa10d6a535a3a321dc8377f4eeef12",
21-
"0x0ff4c9160104ffffffffff0239027795ae6f2b56ada04f0c25cf5adbd095933b",
22-
"0x095ea7b3010508ffffffffff4186bfc76e2e237523cbc30fd220fe055156b41f",
23-
"0x095ea7b3010509ffffffffffb1195a6cdb7ef8fb22671bd8321727dbb6ddde03",
19+
"0x0ff4c9160104ffffffffff0439027795ae6f2b56ada04f0c25cf5adbd095933b",
20+
"0x4bf6a8f0010903ffffffff03d0af6f692bfa10d6a535a3a321dc8377f4eeef12",
21+
"0x4bf6a8f0010104ffffffff04d0af6f692bfa10d6a535a3a321dc8377f4eeef12",
22+
"0x0ff4c9160105ffffffffff0239027795ae6f2b56ada04f0c25cf5adbd095933b",
23+
"0x095ea7b3010609ffffffffff4186bfc76e2e237523cbc30fd220fe055156b41f",
24+
"0x095ea7b3010601ffffffffffb1195a6cdb7ef8fb22671bd8321727dbb6ddde03",
2425
"0x74dbc248c1000000000000ffca4a9ae6712aff3948c871503fc46cbe6da3cae5",
25-
"0x06080903010207ffffffffffffffffffffffffffffffffffffffffffffffffff",
26-
"0x095ea7b3010504ffffffffff4186bfc76e2e237523cbc30fd220fe055156b41f",
27-
"0x095ea7b3010504ffffffffffb1195a6cdb7ef8fb22671bd8321727dbb6ddde03",
28-
"0x70a082310107ffffffffff05b1195a6cdb7ef8fb22671bd8321727dbb6ddde03",
29-
"0x24f312690105ffffffffffffe4dc8142ced52c547384032e43379b0514341c22",
30-
"0x70a082310107ffffffffff07fb8283e50c89e367674bc566db3070d9e9ff2fdd",
31-
"0xa9059cbb010407fffffffffffb8283e50c89e367674bc566db3070d9e9ff2fdd"
26+
"0x07090103040208ffffffffffffffffffffffffffffffffffffffffffffffffff",
27+
"0x095ea7b3010605ffffffffff4186bfc76e2e237523cbc30fd220fe055156b41f",
28+
"0x095ea7b3010605ffffffffffb1195a6cdb7ef8fb22671bd8321727dbb6ddde03",
29+
"0x70a082310108ffffffffff06b1195a6cdb7ef8fb22671bd8321727dbb6ddde03",
30+
"0x24f312690106ffffffffffffe4dc8142ced52c547384032e43379b0514341c22",
31+
"0x70a082310108ffffffffff08fb8283e50c89e367674bc566db3070d9e9ff2fdd",
32+
"0xa9059cbb010508fffffffffffb8283e50c89e367674bc566db3070d9e9ff2fdd"
3233
],
3334
[
3435
"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
35-
"0x0000000000000000000000000000000000000000000000000000000000000002",
36+
"0x0000000000000000000000000000000000000000000000000000000000000003",
3637
"0x000000000000000000000000e4dc8142ced52c547384032e43379b0514341c22",
3738
"0x0000000000000000000000000000000000000000000000000000000000000001",
39+
"0x0000000000000000000000000000000000000000000000000000000000000002",
3840
"0x0000000000000000000000000000000000000000000000000000000000000000",
3941
"0x000000000000000000000000ca4a9ae6712aff3948c871503fc46cbe6da3cae5",
4042
"0x000000000000000000000000f8163eac4c0239a81a7d8bd05b8e14498a5fd880",
4143
"0x",
42-
"0x",
4344
"0x"
4445
]
4546
]
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,46 @@
11
[
22
[
3-
"0xb65d95ec01ffffffffffff0707899ac8be7462151d6515fcd4773dd9267c9911",
4-
"0x2e1cc2f601ffffffffffff0807899ac8be7462151d6515fcd4773dd9267c9911",
5-
"0x095ea7b3010800ffffffffffcc0966d8418d412c599a6421b760a847eb169a8c",
6-
"0x095ea7b3010800ffffffffffadd169f7e0905fb2e78cdfbee155c975db0f2cbe",
7-
"0x70a082310107ffffffffff08cc0966d8418d412c599a6421b760a847eb169a8c",
8-
"0xa391c15b010801ffffffff08ca99eaa38e8f37a168214a3a57c9a45a58563ed5",
9-
"0x095ea7b3010208ffffffffffcc0966d8418d412c599a6421b760a847eb169a8c",
10-
"0x70a082310107ffffffffff02a01cb564ecc3f58a4e2ba5fd59d13a6b998de9b8",
11-
"0x70a082310107ffffffffff0089b37108d3eb174673d98f0a5bb419f47270130e",
12-
"0xb6b55f250108ffffffffffffe2f6ef50fd232c7c9698f2f4cae44a6d80aafdee",
13-
"0x70a082310107ffffffffff09a01cb564ecc3f58a4e2ba5fd59d13a6b998de9b8",
14-
"0xb67d77c5010902ffffffff09ca99eaa38e8f37a168214a3a57c9a45a58563ed5",
15-
"0x70a082310107ffffffffff0289b37108d3eb174673d98f0a5bb419f47270130e",
3+
"0xb65d95ec01ffffffffffff0807899ac8be7462151d6515fcd4773dd9267c9911",
4+
"0x2e1cc2f601ffffffffffff0907899ac8be7462151d6515fcd4773dd9267c9911",
5+
"0x095ea7b3010900ffffffffffcc0966d8418d412c599a6421b760a847eb169a8c",
6+
"0x095ea7b3010900ffffffffffadd169f7e0905fb2e78cdfbee155c975db0f2cbe",
7+
"0x70a082310108ffffffffff09cc0966d8418d412c599a6421b760a847eb169a8c",
8+
"0x0ff4c9160101ffffffffff0139027795ae6f2b56ada04f0c25cf5adbd095933b",
9+
"0xb67d77c5010901ffffffff09ca99eaa38e8f37a168214a3a57c9a45a58563ed5",
10+
"0x095ea7b3010201ffffffffffcc0966d8418d412c599a6421b760a847eb169a8c",
11+
"0x70a082310108ffffffffff02a01cb564ecc3f58a4e2ba5fd59d13a6b998de9b8",
12+
"0x70a082310108ffffffffff0089b37108d3eb174673d98f0a5bb419f47270130e",
13+
"0xb6b55f250101ffffffffffffe2f6ef50fd232c7c9698f2f4cae44a6d80aafdee",
14+
"0x70a082310108ffffffffff01a01cb564ecc3f58a4e2ba5fd59d13a6b998de9b8",
15+
"0xb67d77c5010102ffffffff01ca99eaa38e8f37a168214a3a57c9a45a58563ed5",
16+
"0x70a082310108ffffffffff0289b37108d3eb174673d98f0a5bb419f47270130e",
1617
"0xb67d77c5010200ffffffffffca99eaa38e8f37a168214a3a57c9a45a58563ed5",
1718
"0x0ff4c9160103ffffffffff0339027795ae6f2b56ada04f0c25cf5adbd095933b",
18-
"0x0ff4c9160101ffffffffff0139027795ae6f2b56ada04f0c25cf5adbd095933b",
19-
"0x4bf6a8f0010903ffffffff03d0af6f692bfa10d6a535a3a321dc8377f4eeef12",
20-
"0x4bf6a8f0010801ffffffff01d0af6f692bfa10d6a535a3a321dc8377f4eeef12",
21-
"0x0ff4c9160104ffffffffff0239027795ae6f2b56ada04f0c25cf5adbd095933b",
22-
"0x095ea7b3010509ffffffffffa01cb564ecc3f58a4e2ba5fd59d13a6b998de9b8",
23-
"0x095ea7b3010508ffffffffffcc0966d8418d412c599a6421b760a847eb169a8c",
19+
"0x0ff4c9160104ffffffffff0439027795ae6f2b56ada04f0c25cf5adbd095933b",
20+
"0x4bf6a8f0010103ffffffff03d0af6f692bfa10d6a535a3a321dc8377f4eeef12",
21+
"0x4bf6a8f0010904ffffffff04d0af6f692bfa10d6a535a3a321dc8377f4eeef12",
22+
"0x0ff4c9160105ffffffffff0239027795ae6f2b56ada04f0c25cf5adbd095933b",
23+
"0x095ea7b3010601ffffffffffa01cb564ecc3f58a4e2ba5fd59d13a6b998de9b8",
24+
"0x095ea7b3010609ffffffffffcc0966d8418d412c599a6421b760a847eb169a8c",
2425
"0x74dbc248c1000000000000ffca4a9ae6712aff3948c871503fc46cbe6da3cae5",
25-
"0x06090803010207ffffffffffffffffffffffffffffffffffffffffffffffffff",
26-
"0x095ea7b3010504ffffffffffa01cb564ecc3f58a4e2ba5fd59d13a6b998de9b8",
27-
"0x095ea7b3010504ffffffffffcc0966d8418d412c599a6421b760a847eb169a8c",
28-
"0x70a082310107ffffffffff05a01cb564ecc3f58a4e2ba5fd59d13a6b998de9b8",
29-
"0x24f312690105ffffffffffffe2f6ef50fd232c7c9698f2f4cae44a6d80aafdee",
30-
"0x70a082310107ffffffffff0789b37108d3eb174673d98f0a5bb419f47270130e",
31-
"0xa9059cbb010407ffffffffff89b37108d3eb174673d98f0a5bb419f47270130e"
26+
"0x07010903040208ffffffffffffffffffffffffffffffffffffffffffffffffff",
27+
"0x095ea7b3010605ffffffffffa01cb564ecc3f58a4e2ba5fd59d13a6b998de9b8",
28+
"0x095ea7b3010605ffffffffffcc0966d8418d412c599a6421b760a847eb169a8c",
29+
"0x70a082310108ffffffffff06a01cb564ecc3f58a4e2ba5fd59d13a6b998de9b8",
30+
"0x24f312690106ffffffffffffe2f6ef50fd232c7c9698f2f4cae44a6d80aafdee",
31+
"0x70a082310108ffffffffff0889b37108d3eb174673d98f0a5bb419f47270130e",
32+
"0xa9059cbb010508ffffffffff89b37108d3eb174673d98f0a5bb419f47270130e"
3233
],
3334
[
3435
"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
35-
"0x0000000000000000000000000000000000000000000000000000000000000002",
36+
"0x0000000000000000000000000000000000000000000000000000000000000003",
3637
"0x000000000000000000000000e2f6ef50fd232c7c9698f2f4cae44a6d80aafdee",
3738
"0x0000000000000000000000000000000000000000000000000000000000000001",
39+
"0x0000000000000000000000000000000000000000000000000000000000000002",
3840
"0x0000000000000000000000000000000000000000000000000000000000000000",
3941
"0x000000000000000000000000ca4a9ae6712aff3948c871503fc46cbe6da3cae5",
4042
"0x000000000000000000000000add169f7e0905fb2e78cdfbee155c975db0f2cbe",
4143
"0x",
42-
"0x",
4344
"0x"
4445
]
4546
]
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,46 @@
11
[
22
[
3-
"0xb65d95ec01ffffffffffff0707899ac8be7462151d6515fcd4773dd9267c9911",
4-
"0x2e1cc2f601ffffffffffff0807899ac8be7462151d6515fcd4773dd9267c9911",
5-
"0x095ea7b3010800ffffffffffc3827a4bc8224ee2d116637023b124ced6db6e90",
6-
"0x095ea7b3010800ffffffffff1d5224aff66ebb2cf46de98f69a5982f650f098c",
7-
"0x70a082310107ffffffffff08c3827a4bc8224ee2d116637023b124ced6db6e90",
8-
"0xa391c15b010801ffffffff08ca99eaa38e8f37a168214a3a57c9a45a58563ed5",
9-
"0x095ea7b3010208ffffffffffc3827a4bc8224ee2d116637023b124ced6db6e90",
10-
"0x70a082310107ffffffffff02e771779b350d2cc291e9461387d7f41765a7cb8b",
11-
"0x70a082310107ffffffffff00888d15e66b5eb410ea5df520fc46f030bba31299",
12-
"0xb6b55f250108ffffffffffff8742db52a4eaefe88be5d3431980e221aaaa1ee3",
13-
"0x70a082310107ffffffffff09e771779b350d2cc291e9461387d7f41765a7cb8b",
14-
"0xb67d77c5010902ffffffff09ca99eaa38e8f37a168214a3a57c9a45a58563ed5",
15-
"0x70a082310107ffffffffff02888d15e66b5eb410ea5df520fc46f030bba31299",
3+
"0xb65d95ec01ffffffffffff0807899ac8be7462151d6515fcd4773dd9267c9911",
4+
"0x2e1cc2f601ffffffffffff0907899ac8be7462151d6515fcd4773dd9267c9911",
5+
"0x095ea7b3010900ffffffffffc3827a4bc8224ee2d116637023b124ced6db6e90",
6+
"0x095ea7b3010900ffffffffff1d5224aff66ebb2cf46de98f69a5982f650f098c",
7+
"0x70a082310108ffffffffff09c3827a4bc8224ee2d116637023b124ced6db6e90",
8+
"0x0ff4c9160101ffffffffff0139027795ae6f2b56ada04f0c25cf5adbd095933b",
9+
"0xb67d77c5010901ffffffff09ca99eaa38e8f37a168214a3a57c9a45a58563ed5",
10+
"0x095ea7b3010201ffffffffffc3827a4bc8224ee2d116637023b124ced6db6e90",
11+
"0x70a082310108ffffffffff02e771779b350d2cc291e9461387d7f41765a7cb8b",
12+
"0x70a082310108ffffffffff00888d15e66b5eb410ea5df520fc46f030bba31299",
13+
"0xb6b55f250101ffffffffffff8742db52a4eaefe88be5d3431980e221aaaa1ee3",
14+
"0x70a082310108ffffffffff01e771779b350d2cc291e9461387d7f41765a7cb8b",
15+
"0xb67d77c5010102ffffffff01ca99eaa38e8f37a168214a3a57c9a45a58563ed5",
16+
"0x70a082310108ffffffffff02888d15e66b5eb410ea5df520fc46f030bba31299",
1617
"0xb67d77c5010200ffffffffffca99eaa38e8f37a168214a3a57c9a45a58563ed5",
1718
"0x0ff4c9160103ffffffffff0339027795ae6f2b56ada04f0c25cf5adbd095933b",
18-
"0x0ff4c9160101ffffffffff0139027795ae6f2b56ada04f0c25cf5adbd095933b",
19-
"0x4bf6a8f0010803ffffffff03d0af6f692bfa10d6a535a3a321dc8377f4eeef12",
20-
"0x4bf6a8f0010901ffffffff01d0af6f692bfa10d6a535a3a321dc8377f4eeef12",
21-
"0x0ff4c9160104ffffffffff0239027795ae6f2b56ada04f0c25cf5adbd095933b",
22-
"0x095ea7b3010508ffffffffffc3827a4bc8224ee2d116637023b124ced6db6e90",
23-
"0x095ea7b3010509ffffffffffe771779b350d2cc291e9461387d7f41765a7cb8b",
19+
"0x0ff4c9160104ffffffffff0439027795ae6f2b56ada04f0c25cf5adbd095933b",
20+
"0x4bf6a8f0010903ffffffff03d0af6f692bfa10d6a535a3a321dc8377f4eeef12",
21+
"0x4bf6a8f0010104ffffffff04d0af6f692bfa10d6a535a3a321dc8377f4eeef12",
22+
"0x0ff4c9160105ffffffffff0239027795ae6f2b56ada04f0c25cf5adbd095933b",
23+
"0x095ea7b3010609ffffffffffc3827a4bc8224ee2d116637023b124ced6db6e90",
24+
"0x095ea7b3010601ffffffffffe771779b350d2cc291e9461387d7f41765a7cb8b",
2425
"0x74dbc248c1000000000000ffca4a9ae6712aff3948c871503fc46cbe6da3cae5",
25-
"0x06080903010207ffffffffffffffffffffffffffffffffffffffffffffffffff",
26-
"0x095ea7b3010504ffffffffffc3827a4bc8224ee2d116637023b124ced6db6e90",
27-
"0x095ea7b3010504ffffffffffe771779b350d2cc291e9461387d7f41765a7cb8b",
28-
"0x70a082310107ffffffffff05e771779b350d2cc291e9461387d7f41765a7cb8b",
29-
"0x24f312690105ffffffffffff8742db52a4eaefe88be5d3431980e221aaaa1ee3",
30-
"0x70a082310107ffffffffff07888d15e66b5eb410ea5df520fc46f030bba31299",
31-
"0xa9059cbb010407ffffffffff888d15e66b5eb410ea5df520fc46f030bba31299"
26+
"0x07090103040208ffffffffffffffffffffffffffffffffffffffffffffffffff",
27+
"0x095ea7b3010605ffffffffffc3827a4bc8224ee2d116637023b124ced6db6e90",
28+
"0x095ea7b3010605ffffffffffe771779b350d2cc291e9461387d7f41765a7cb8b",
29+
"0x70a082310108ffffffffff06e771779b350d2cc291e9461387d7f41765a7cb8b",
30+
"0x24f312690106ffffffffffff8742db52a4eaefe88be5d3431980e221aaaa1ee3",
31+
"0x70a082310108ffffffffff08888d15e66b5eb410ea5df520fc46f030bba31299",
32+
"0xa9059cbb010508ffffffffff888d15e66b5eb410ea5df520fc46f030bba31299"
3233
],
3334
[
3435
"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
35-
"0x0000000000000000000000000000000000000000000000000000000000000002",
36+
"0x0000000000000000000000000000000000000000000000000000000000000003",
3637
"0x0000000000000000000000008742db52a4eaefe88be5d3431980e221aaaa1ee3",
3738
"0x0000000000000000000000000000000000000000000000000000000000000001",
39+
"0x0000000000000000000000000000000000000000000000000000000000000002",
3840
"0x0000000000000000000000000000000000000000000000000000000000000000",
3941
"0x000000000000000000000000ca4a9ae6712aff3948c871503fc46cbe6da3cae5",
4042
"0x0000000000000000000000001d5224aff66ebb2cf46de98f69a5982f650f098c",
4143
"0x",
42-
"0x",
4344
"0x"
4445
]
4546
]

src/helpers/simulate.ts

+65-2
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,13 @@ export async function getSetters(
156156
): Promise<Record<string, BigNumber | undefined>> {
157157
const setterInputs = shortcut.setterInputs;
158158

159-
let minAmountOut, minAmount0Bps, minAmount1Bps, usdcToMintHoney, wethTomintBeraeth, usdeToMintNect;
159+
let minAmountOut,
160+
minAmount0Bps,
161+
minAmount1Bps,
162+
usdcToMintHoney,
163+
wethTomintBeraeth,
164+
usdeToMintNect,
165+
amountToMintGoldilocks;
160166
if (setterInputs) {
161167
if (setterInputs.has('minAmountOut')) {
162168
minAmountOut = DEFAULT_SETTER_MIN_AMOUNT_OUT;
@@ -237,9 +243,33 @@ export async function getSetters(
237243

238244
usdeToMintNect = await getUsdeToMintNect(provider, chainId, usdeAmountIn, island, setterArgsBps.skewRatio);
239245
}
246+
247+
if (setterInputs.has('amountToMintGoldilocks')) {
248+
const underlyingAmountIn = amountsIn[0]; // this assumes a single-sided deposit
249+
const island = shortcut.inputs[chainId].island; // assumes we are minting goldilocks for a kodiak island
250+
if (!island) throw 'Error: Shortcut not supported for calculating underlying to mint';
251+
const ot = shortcut.inputs[chainId].ot;
252+
if (!ot) throw 'Error: Shortcut not supported for calculating ot to mint';
253+
254+
amountToMintGoldilocks = await getAmountToMintGoldilocks(
255+
provider,
256+
underlyingAmountIn,
257+
ot,
258+
island,
259+
setterArgsBps.skewRatio,
260+
);
261+
}
240262
}
241263

242-
return { minAmountOut, minAmount0Bps, minAmount1Bps, usdcToMintHoney, wethTomintBeraeth, usdeToMintNect };
264+
return {
265+
minAmountOut,
266+
minAmount0Bps,
267+
minAmount1Bps,
268+
usdcToMintHoney,
269+
wethTomintBeraeth,
270+
usdeToMintNect,
271+
amountToMintGoldilocks,
272+
};
243273
}
244274

245275
export async function simulateShortcutOnQuoter(
@@ -618,6 +648,39 @@ export async function getWethTomintBeraeth(
618648
return wethTomintBeraeth.mul(skewRatio).div(MAX_BPS);
619649
}
620650

651+
async function getAmountToMintGoldilocks(
652+
provider: StaticJsonRpcProvider,
653+
amountIn: BigNumberish,
654+
ot: AddressArg,
655+
island: AddressArg,
656+
skewRatio: BigNumber,
657+
): Promise<BigNumber> {
658+
// Assumes OT is minted 1:1 with ratio!
659+
const { token0, token1 } = await getIslandTokens(provider, island);
660+
if (!isAddressEqual(token0, ot) && !isAddressEqual(token1, ot)) throw 'Error: OT is not on this island';
661+
const zeroToOne = isAddressEqual(token0, ot);
662+
663+
// test 50/50 split
664+
const halfAmountIn = BigNumber.from(amountIn).div(2);
665+
// calculate min
666+
const islandMintAmounts = await getIslandMintAmounts(provider, island, [
667+
halfAmountIn.toString(),
668+
halfAmountIn.toString(),
669+
]);
670+
const { amount0, amount1 } = islandMintAmounts;
671+
// recalculate using the known ratio between amount0 and amount1
672+
const otWithPrecision = zeroToOne ? amount0.mul(PRECISION) : amount1.mul(PRECISION);
673+
const underlyingWithPrecision = zeroToOne ? amount1.mul(PRECISION) : amount0.mul(PRECISION);
674+
675+
// Don't need to adjust for exchange rates as we're assuming 1:1
676+
const totalUnderlyingWithPrecision = otWithPrecision.add(underlyingWithPrecision);
677+
678+
// Calculate the relative pair usdc amount and the subtract is from the amountIn to get honey. With this approach any rounding favours honey
679+
const relativeUnderlying = BigNumber.from(amountIn).mul(underlyingWithPrecision).div(totalUnderlyingWithPrecision);
680+
const underlyingToMintOT = BigNumber.from(amountIn).sub(relativeUnderlying);
681+
return underlyingToMintOT.mul(skewRatio).div(MAX_BPS);
682+
}
683+
621684
async function generateTxData(
622685
provider: StaticJsonRpcProvider,
623686
shortcut: Shortcut,

0 commit comments

Comments
 (0)