@mania-labs/mania-sdk 1.0.2 → 1.0.3
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 +89 -1
- package/dist/index.d.mts +273 -1
- package/dist/index.d.ts +273 -1
- package/dist/index.js +231 -1
- package/dist/index.mjs +229 -1
- package/package.json +1 -1
- package/src/abi/NonfungiblePositionManager.json +1221 -0
- package/src/abi/Permit2.json +865 -0
- package/src/abi/QuoterV2.json +267 -0
- package/src/abi/SwapRouter02.json +1063 -0
- package/src/abi/UniswapV3Factory.json +236 -0
- package/src/abi/UniversalRouter.json +443 -0
- package/src/abi.ts +135 -0
- package/src/constants.ts +3 -0
- package/src/index.ts +1 -1
- package/src/mania.ts +108 -2
package/dist/index.d.ts
CHANGED
|
@@ -411,6 +411,15 @@ declare class ManiaSDK {
|
|
|
411
411
|
* @param token - Token address
|
|
412
412
|
*/
|
|
413
413
|
getTokenInfo(token: Address): Promise<TokenInfo>;
|
|
414
|
+
/**
|
|
415
|
+
* Get token name and symbol
|
|
416
|
+
*
|
|
417
|
+
* @param token - Token address
|
|
418
|
+
*/
|
|
419
|
+
getTokenMetadata(token: Address): Promise<{
|
|
420
|
+
name: string;
|
|
421
|
+
symbol: string;
|
|
422
|
+
}>;
|
|
414
423
|
/**
|
|
415
424
|
* Get buy quote from contract
|
|
416
425
|
*
|
|
@@ -548,6 +557,36 @@ declare class ManiaSDK {
|
|
|
548
557
|
* Get the wallet client
|
|
549
558
|
*/
|
|
550
559
|
getWalletClient(): WalletClient | null;
|
|
560
|
+
/**
|
|
561
|
+
* Get chain config or throw if not found
|
|
562
|
+
*/
|
|
563
|
+
private getChainConfigOrThrow;
|
|
564
|
+
/**
|
|
565
|
+
* Get quote for buying tokens with ETH on Kumbaya DEX (Uniswap V3)
|
|
566
|
+
* Use this for tokens that have migrated from the bonding curve
|
|
567
|
+
*
|
|
568
|
+
* @param token - Token address
|
|
569
|
+
* @param ethAmount - ETH amount in wei
|
|
570
|
+
* @returns Token amount out
|
|
571
|
+
*/
|
|
572
|
+
getMigratedBuyQuote(token: Address, ethAmount: bigint): Promise<bigint>;
|
|
573
|
+
/**
|
|
574
|
+
* Get quote for selling tokens for ETH on Kumbaya DEX (Uniswap V3)
|
|
575
|
+
* Use this for tokens that have migrated from the bonding curve
|
|
576
|
+
*
|
|
577
|
+
* @param token - Token address
|
|
578
|
+
* @param tokenAmount - Token amount to sell
|
|
579
|
+
* @returns ETH amount out in wei
|
|
580
|
+
*/
|
|
581
|
+
getMigratedSellQuote(token: Address, tokenAmount: bigint): Promise<bigint>;
|
|
582
|
+
/**
|
|
583
|
+
* Get the Uniswap V3 pool address for a token/WETH pair
|
|
584
|
+
*
|
|
585
|
+
* @param token - Token address
|
|
586
|
+
* @returns Pool address
|
|
587
|
+
* @throws Error if pool not found
|
|
588
|
+
*/
|
|
589
|
+
getPoolAddress(token: Address): Promise<Address>;
|
|
551
590
|
}
|
|
552
591
|
|
|
553
592
|
/**
|
|
@@ -587,6 +626,7 @@ interface ChainConfig {
|
|
|
587
626
|
wethAddress: Address;
|
|
588
627
|
nonfungiblePositionManager: Address;
|
|
589
628
|
uniswapV3Factory: Address;
|
|
629
|
+
quoterV2: Address;
|
|
590
630
|
blockExplorer: string;
|
|
591
631
|
}
|
|
592
632
|
/**
|
|
@@ -1026,6 +1066,238 @@ declare const MANIA_FACTORY_ABI: readonly [{
|
|
|
1026
1066
|
}];
|
|
1027
1067
|
readonly anonymous: false;
|
|
1028
1068
|
}];
|
|
1069
|
+
declare const QUOTER_V2_ABI: readonly [{
|
|
1070
|
+
readonly inputs: readonly [{
|
|
1071
|
+
readonly internalType: "address";
|
|
1072
|
+
readonly name: "_factory";
|
|
1073
|
+
readonly type: "address";
|
|
1074
|
+
}, {
|
|
1075
|
+
readonly internalType: "address";
|
|
1076
|
+
readonly name: "_WETH9";
|
|
1077
|
+
readonly type: "address";
|
|
1078
|
+
}];
|
|
1079
|
+
readonly stateMutability: "nonpayable";
|
|
1080
|
+
readonly type: "constructor";
|
|
1081
|
+
}, {
|
|
1082
|
+
readonly inputs: readonly [];
|
|
1083
|
+
readonly name: "WETH9";
|
|
1084
|
+
readonly outputs: readonly [{
|
|
1085
|
+
readonly internalType: "address";
|
|
1086
|
+
readonly name: "";
|
|
1087
|
+
readonly type: "address";
|
|
1088
|
+
}];
|
|
1089
|
+
readonly stateMutability: "view";
|
|
1090
|
+
readonly type: "function";
|
|
1091
|
+
}, {
|
|
1092
|
+
readonly inputs: readonly [];
|
|
1093
|
+
readonly name: "factory";
|
|
1094
|
+
readonly outputs: readonly [{
|
|
1095
|
+
readonly internalType: "address";
|
|
1096
|
+
readonly name: "";
|
|
1097
|
+
readonly type: "address";
|
|
1098
|
+
}];
|
|
1099
|
+
readonly stateMutability: "view";
|
|
1100
|
+
readonly type: "function";
|
|
1101
|
+
}, {
|
|
1102
|
+
readonly inputs: readonly [{
|
|
1103
|
+
readonly internalType: "bytes";
|
|
1104
|
+
readonly name: "path";
|
|
1105
|
+
readonly type: "bytes";
|
|
1106
|
+
}, {
|
|
1107
|
+
readonly internalType: "uint256";
|
|
1108
|
+
readonly name: "amountIn";
|
|
1109
|
+
readonly type: "uint256";
|
|
1110
|
+
}];
|
|
1111
|
+
readonly name: "quoteExactInput";
|
|
1112
|
+
readonly outputs: readonly [{
|
|
1113
|
+
readonly internalType: "uint256";
|
|
1114
|
+
readonly name: "amountOut";
|
|
1115
|
+
readonly type: "uint256";
|
|
1116
|
+
}, {
|
|
1117
|
+
readonly internalType: "uint160[]";
|
|
1118
|
+
readonly name: "sqrtPriceX96AfterList";
|
|
1119
|
+
readonly type: "uint160[]";
|
|
1120
|
+
}, {
|
|
1121
|
+
readonly internalType: "uint32[]";
|
|
1122
|
+
readonly name: "initializedTicksCrossedList";
|
|
1123
|
+
readonly type: "uint32[]";
|
|
1124
|
+
}, {
|
|
1125
|
+
readonly internalType: "uint256";
|
|
1126
|
+
readonly name: "gasEstimate";
|
|
1127
|
+
readonly type: "uint256";
|
|
1128
|
+
}];
|
|
1129
|
+
readonly stateMutability: "nonpayable";
|
|
1130
|
+
readonly type: "function";
|
|
1131
|
+
}, {
|
|
1132
|
+
readonly inputs: readonly [{
|
|
1133
|
+
readonly components: readonly [{
|
|
1134
|
+
readonly internalType: "address";
|
|
1135
|
+
readonly name: "tokenIn";
|
|
1136
|
+
readonly type: "address";
|
|
1137
|
+
}, {
|
|
1138
|
+
readonly internalType: "address";
|
|
1139
|
+
readonly name: "tokenOut";
|
|
1140
|
+
readonly type: "address";
|
|
1141
|
+
}, {
|
|
1142
|
+
readonly internalType: "uint256";
|
|
1143
|
+
readonly name: "amountIn";
|
|
1144
|
+
readonly type: "uint256";
|
|
1145
|
+
}, {
|
|
1146
|
+
readonly internalType: "uint24";
|
|
1147
|
+
readonly name: "fee";
|
|
1148
|
+
readonly type: "uint24";
|
|
1149
|
+
}, {
|
|
1150
|
+
readonly internalType: "uint160";
|
|
1151
|
+
readonly name: "sqrtPriceLimitX96";
|
|
1152
|
+
readonly type: "uint160";
|
|
1153
|
+
}];
|
|
1154
|
+
readonly internalType: "struct IQuoterV2.QuoteExactInputSingleParams";
|
|
1155
|
+
readonly name: "params";
|
|
1156
|
+
readonly type: "tuple";
|
|
1157
|
+
}];
|
|
1158
|
+
readonly name: "quoteExactInputSingle";
|
|
1159
|
+
readonly outputs: readonly [{
|
|
1160
|
+
readonly internalType: "uint256";
|
|
1161
|
+
readonly name: "amountOut";
|
|
1162
|
+
readonly type: "uint256";
|
|
1163
|
+
}, {
|
|
1164
|
+
readonly internalType: "uint160";
|
|
1165
|
+
readonly name: "sqrtPriceX96After";
|
|
1166
|
+
readonly type: "uint160";
|
|
1167
|
+
}, {
|
|
1168
|
+
readonly internalType: "uint32";
|
|
1169
|
+
readonly name: "initializedTicksCrossed";
|
|
1170
|
+
readonly type: "uint32";
|
|
1171
|
+
}, {
|
|
1172
|
+
readonly internalType: "uint256";
|
|
1173
|
+
readonly name: "gasEstimate";
|
|
1174
|
+
readonly type: "uint256";
|
|
1175
|
+
}];
|
|
1176
|
+
readonly stateMutability: "nonpayable";
|
|
1177
|
+
readonly type: "function";
|
|
1178
|
+
}, {
|
|
1179
|
+
readonly inputs: readonly [{
|
|
1180
|
+
readonly internalType: "bytes";
|
|
1181
|
+
readonly name: "path";
|
|
1182
|
+
readonly type: "bytes";
|
|
1183
|
+
}, {
|
|
1184
|
+
readonly internalType: "uint256";
|
|
1185
|
+
readonly name: "amountOut";
|
|
1186
|
+
readonly type: "uint256";
|
|
1187
|
+
}];
|
|
1188
|
+
readonly name: "quoteExactOutput";
|
|
1189
|
+
readonly outputs: readonly [{
|
|
1190
|
+
readonly internalType: "uint256";
|
|
1191
|
+
readonly name: "amountIn";
|
|
1192
|
+
readonly type: "uint256";
|
|
1193
|
+
}, {
|
|
1194
|
+
readonly internalType: "uint160[]";
|
|
1195
|
+
readonly name: "sqrtPriceX96AfterList";
|
|
1196
|
+
readonly type: "uint160[]";
|
|
1197
|
+
}, {
|
|
1198
|
+
readonly internalType: "uint32[]";
|
|
1199
|
+
readonly name: "initializedTicksCrossedList";
|
|
1200
|
+
readonly type: "uint32[]";
|
|
1201
|
+
}, {
|
|
1202
|
+
readonly internalType: "uint256";
|
|
1203
|
+
readonly name: "gasEstimate";
|
|
1204
|
+
readonly type: "uint256";
|
|
1205
|
+
}];
|
|
1206
|
+
readonly stateMutability: "nonpayable";
|
|
1207
|
+
readonly type: "function";
|
|
1208
|
+
}, {
|
|
1209
|
+
readonly inputs: readonly [{
|
|
1210
|
+
readonly components: readonly [{
|
|
1211
|
+
readonly internalType: "address";
|
|
1212
|
+
readonly name: "tokenIn";
|
|
1213
|
+
readonly type: "address";
|
|
1214
|
+
}, {
|
|
1215
|
+
readonly internalType: "address";
|
|
1216
|
+
readonly name: "tokenOut";
|
|
1217
|
+
readonly type: "address";
|
|
1218
|
+
}, {
|
|
1219
|
+
readonly internalType: "uint256";
|
|
1220
|
+
readonly name: "amount";
|
|
1221
|
+
readonly type: "uint256";
|
|
1222
|
+
}, {
|
|
1223
|
+
readonly internalType: "uint24";
|
|
1224
|
+
readonly name: "fee";
|
|
1225
|
+
readonly type: "uint24";
|
|
1226
|
+
}, {
|
|
1227
|
+
readonly internalType: "uint160";
|
|
1228
|
+
readonly name: "sqrtPriceLimitX96";
|
|
1229
|
+
readonly type: "uint160";
|
|
1230
|
+
}];
|
|
1231
|
+
readonly internalType: "struct IQuoterV2.QuoteExactOutputSingleParams";
|
|
1232
|
+
readonly name: "params";
|
|
1233
|
+
readonly type: "tuple";
|
|
1234
|
+
}];
|
|
1235
|
+
readonly name: "quoteExactOutputSingle";
|
|
1236
|
+
readonly outputs: readonly [{
|
|
1237
|
+
readonly internalType: "uint256";
|
|
1238
|
+
readonly name: "amountIn";
|
|
1239
|
+
readonly type: "uint256";
|
|
1240
|
+
}, {
|
|
1241
|
+
readonly internalType: "uint160";
|
|
1242
|
+
readonly name: "sqrtPriceX96After";
|
|
1243
|
+
readonly type: "uint160";
|
|
1244
|
+
}, {
|
|
1245
|
+
readonly internalType: "uint32";
|
|
1246
|
+
readonly name: "initializedTicksCrossed";
|
|
1247
|
+
readonly type: "uint32";
|
|
1248
|
+
}, {
|
|
1249
|
+
readonly internalType: "uint256";
|
|
1250
|
+
readonly name: "gasEstimate";
|
|
1251
|
+
readonly type: "uint256";
|
|
1252
|
+
}];
|
|
1253
|
+
readonly stateMutability: "nonpayable";
|
|
1254
|
+
readonly type: "function";
|
|
1255
|
+
}, {
|
|
1256
|
+
readonly inputs: readonly [{
|
|
1257
|
+
readonly internalType: "int256";
|
|
1258
|
+
readonly name: "amount0Delta";
|
|
1259
|
+
readonly type: "int256";
|
|
1260
|
+
}, {
|
|
1261
|
+
readonly internalType: "int256";
|
|
1262
|
+
readonly name: "amount1Delta";
|
|
1263
|
+
readonly type: "int256";
|
|
1264
|
+
}, {
|
|
1265
|
+
readonly internalType: "bytes";
|
|
1266
|
+
readonly name: "path";
|
|
1267
|
+
readonly type: "bytes";
|
|
1268
|
+
}];
|
|
1269
|
+
readonly name: "uniswapV3SwapCallback";
|
|
1270
|
+
readonly outputs: readonly [];
|
|
1271
|
+
readonly stateMutability: "view";
|
|
1272
|
+
readonly type: "function";
|
|
1273
|
+
}];
|
|
1274
|
+
declare const UNISWAP_V3_FACTORY_ABI: readonly [{
|
|
1275
|
+
readonly inputs: readonly [];
|
|
1276
|
+
readonly stateMutability: "nonpayable";
|
|
1277
|
+
readonly type: "constructor";
|
|
1278
|
+
}, {
|
|
1279
|
+
readonly inputs: readonly [{
|
|
1280
|
+
readonly internalType: "address";
|
|
1281
|
+
readonly name: "tokenA";
|
|
1282
|
+
readonly type: "address";
|
|
1283
|
+
}, {
|
|
1284
|
+
readonly internalType: "address";
|
|
1285
|
+
readonly name: "tokenB";
|
|
1286
|
+
readonly type: "address";
|
|
1287
|
+
}, {
|
|
1288
|
+
readonly internalType: "uint24";
|
|
1289
|
+
readonly name: "fee";
|
|
1290
|
+
readonly type: "uint24";
|
|
1291
|
+
}];
|
|
1292
|
+
readonly name: "getPool";
|
|
1293
|
+
readonly outputs: readonly [{
|
|
1294
|
+
readonly internalType: "address";
|
|
1295
|
+
readonly name: "";
|
|
1296
|
+
readonly type: "address";
|
|
1297
|
+
}];
|
|
1298
|
+
readonly stateMutability: "view";
|
|
1299
|
+
readonly type: "function";
|
|
1300
|
+
}];
|
|
1029
1301
|
declare const ERC20_ABI: readonly [{
|
|
1030
1302
|
readonly type: "function";
|
|
1031
1303
|
readonly name: "name";
|
|
@@ -1113,4 +1385,4 @@ declare const ERC20_ABI: readonly [{
|
|
|
1113
1385
|
readonly stateMutability: "nonpayable";
|
|
1114
1386
|
}];
|
|
1115
1387
|
|
|
1116
|
-
export { BPS_DENOMINATOR, BondingCurve, type BondingCurveState, type BuyParams, type BuyQuote, CHAIN_CONFIGS, CREATOR_FEE_BASIS_POINTS, type ChainConfig, type CompleteEvent, type CreateAndBuyParams, type CreateEvent, type CreateTokenParams, DEFAULT_SLIPPAGE_BPS, ERC20_ABI, type GlobalState, MANIA_FACTORY_ABI, MAX_FEE_BASIS_POINTS, MAX_MIGRATE_FEES, MIGRATION_THRESHOLD, ManiaSDK, type ManiaSDKConfig, type MigrateParams, type MigrationEvent, PROTOCOL_FEE_BASIS_POINTS, type SellParams, type SellQuote, type SetParamsInput, type SlippageConfig, TICK_LOWER, TICK_UPPER, TOKENS_FOR_LP, TOTAL_FEE_BASIS_POINTS, type TokenInfo, type TradeEvent, type TransactionResult, UNISWAP_FEE_TIER, bpsToPercent, calculateBuyAmount, calculateMigrationProgress, calculatePriceImpact, calculateSellAmount, calculateWithSlippage, formatEthValue, formatMarketCap, formatPrice, formatTokenAmount, getChainConfig, isValidAddress, parseEthValue, percentToBps, sleep, truncateAddress, withRetry };
|
|
1388
|
+
export { BPS_DENOMINATOR, BondingCurve, type BondingCurveState, type BuyParams, type BuyQuote, CHAIN_CONFIGS, CREATOR_FEE_BASIS_POINTS, type ChainConfig, type CompleteEvent, type CreateAndBuyParams, type CreateEvent, type CreateTokenParams, DEFAULT_SLIPPAGE_BPS, ERC20_ABI, type GlobalState, MANIA_FACTORY_ABI, MAX_FEE_BASIS_POINTS, MAX_MIGRATE_FEES, MIGRATION_THRESHOLD, ManiaSDK, type ManiaSDKConfig, type MigrateParams, type MigrationEvent, PROTOCOL_FEE_BASIS_POINTS, QUOTER_V2_ABI, type SellParams, type SellQuote, type SetParamsInput, type SlippageConfig, TICK_LOWER, TICK_UPPER, TOKENS_FOR_LP, TOTAL_FEE_BASIS_POINTS, type TokenInfo, type TradeEvent, type TransactionResult, UNISWAP_FEE_TIER, UNISWAP_V3_FACTORY_ABI, bpsToPercent, calculateBuyAmount, calculateMigrationProgress, calculatePriceImpact, calculateSellAmount, calculateWithSlippage, formatEthValue, formatMarketCap, formatPrice, formatTokenAmount, getChainConfig, isValidAddress, parseEthValue, percentToBps, sleep, truncateAddress, withRetry };
|
package/dist/index.js
CHANGED
|
@@ -32,11 +32,13 @@ __export(index_exports, {
|
|
|
32
32
|
MIGRATION_THRESHOLD: () => MIGRATION_THRESHOLD,
|
|
33
33
|
ManiaSDK: () => ManiaSDK,
|
|
34
34
|
PROTOCOL_FEE_BASIS_POINTS: () => PROTOCOL_FEE_BASIS_POINTS,
|
|
35
|
+
QUOTER_V2_ABI: () => QUOTER_V2_ABI,
|
|
35
36
|
TICK_LOWER: () => TICK_LOWER,
|
|
36
37
|
TICK_UPPER: () => TICK_UPPER,
|
|
37
38
|
TOKENS_FOR_LP: () => TOKENS_FOR_LP,
|
|
38
39
|
TOTAL_FEE_BASIS_POINTS: () => TOTAL_FEE_BASIS_POINTS,
|
|
39
40
|
UNISWAP_FEE_TIER: () => UNISWAP_FEE_TIER,
|
|
41
|
+
UNISWAP_V3_FACTORY_ABI: () => UNISWAP_V3_FACTORY_ABI,
|
|
40
42
|
bpsToPercent: () => bpsToPercent,
|
|
41
43
|
calculateBuyAmount: () => calculateBuyAmount,
|
|
42
44
|
calculateMigrationProgress: () => calculateMigrationProgress,
|
|
@@ -83,6 +85,7 @@ var CHAIN_CONFIGS = {
|
|
|
83
85
|
wethAddress: "0x4200000000000000000000000000000000000006",
|
|
84
86
|
nonfungiblePositionManager: "0xa204A97EF8Bd2E3198f19EB5a804680467BD85f5",
|
|
85
87
|
uniswapV3Factory: "0x619fb6C12c36b57a8bAb05e98F42C43745DCf69f",
|
|
88
|
+
quoterV2: "0xfb230b93803F90238cB03f254452bA3a3b0Ec38d",
|
|
86
89
|
blockExplorer: "https://megaeth-testnet-v2.blockscout.com"
|
|
87
90
|
},
|
|
88
91
|
// Mega Eth Mainnet
|
|
@@ -93,6 +96,7 @@ var CHAIN_CONFIGS = {
|
|
|
93
96
|
wethAddress: "0x4200000000000000000000000000000000000006",
|
|
94
97
|
nonfungiblePositionManager: "0x2b781C57e6358f64864Ff8EC464a03Fdaf9974bA",
|
|
95
98
|
uniswapV3Factory: "0x68b34591f662508076927803c567Cc8006988a09",
|
|
99
|
+
quoterV2: "0x1F1a8dC7E138C34b503Ca080962aC10B75384a27",
|
|
96
100
|
blockExplorer: "https://megaeth.blockscout.com/"
|
|
97
101
|
}
|
|
98
102
|
};
|
|
@@ -518,6 +522,139 @@ var MANIA_FACTORY_ABI = [
|
|
|
518
522
|
anonymous: false
|
|
519
523
|
}
|
|
520
524
|
];
|
|
525
|
+
var QUOTER_V2_ABI = [
|
|
526
|
+
{
|
|
527
|
+
inputs: [
|
|
528
|
+
{ internalType: "address", name: "_factory", type: "address" },
|
|
529
|
+
{ internalType: "address", name: "_WETH9", type: "address" }
|
|
530
|
+
],
|
|
531
|
+
stateMutability: "nonpayable",
|
|
532
|
+
type: "constructor"
|
|
533
|
+
},
|
|
534
|
+
{
|
|
535
|
+
inputs: [],
|
|
536
|
+
name: "WETH9",
|
|
537
|
+
outputs: [{ internalType: "address", name: "", type: "address" }],
|
|
538
|
+
stateMutability: "view",
|
|
539
|
+
type: "function"
|
|
540
|
+
},
|
|
541
|
+
{
|
|
542
|
+
inputs: [],
|
|
543
|
+
name: "factory",
|
|
544
|
+
outputs: [{ internalType: "address", name: "", type: "address" }],
|
|
545
|
+
stateMutability: "view",
|
|
546
|
+
type: "function"
|
|
547
|
+
},
|
|
548
|
+
{
|
|
549
|
+
inputs: [
|
|
550
|
+
{ internalType: "bytes", name: "path", type: "bytes" },
|
|
551
|
+
{ internalType: "uint256", name: "amountIn", type: "uint256" }
|
|
552
|
+
],
|
|
553
|
+
name: "quoteExactInput",
|
|
554
|
+
outputs: [
|
|
555
|
+
{ internalType: "uint256", name: "amountOut", type: "uint256" },
|
|
556
|
+
{ internalType: "uint160[]", name: "sqrtPriceX96AfterList", type: "uint160[]" },
|
|
557
|
+
{ internalType: "uint32[]", name: "initializedTicksCrossedList", type: "uint32[]" },
|
|
558
|
+
{ internalType: "uint256", name: "gasEstimate", type: "uint256" }
|
|
559
|
+
],
|
|
560
|
+
stateMutability: "nonpayable",
|
|
561
|
+
type: "function"
|
|
562
|
+
},
|
|
563
|
+
{
|
|
564
|
+
inputs: [
|
|
565
|
+
{
|
|
566
|
+
components: [
|
|
567
|
+
{ internalType: "address", name: "tokenIn", type: "address" },
|
|
568
|
+
{ internalType: "address", name: "tokenOut", type: "address" },
|
|
569
|
+
{ internalType: "uint256", name: "amountIn", type: "uint256" },
|
|
570
|
+
{ internalType: "uint24", name: "fee", type: "uint24" },
|
|
571
|
+
{ internalType: "uint160", name: "sqrtPriceLimitX96", type: "uint160" }
|
|
572
|
+
],
|
|
573
|
+
internalType: "struct IQuoterV2.QuoteExactInputSingleParams",
|
|
574
|
+
name: "params",
|
|
575
|
+
type: "tuple"
|
|
576
|
+
}
|
|
577
|
+
],
|
|
578
|
+
name: "quoteExactInputSingle",
|
|
579
|
+
outputs: [
|
|
580
|
+
{ internalType: "uint256", name: "amountOut", type: "uint256" },
|
|
581
|
+
{ internalType: "uint160", name: "sqrtPriceX96After", type: "uint160" },
|
|
582
|
+
{ internalType: "uint32", name: "initializedTicksCrossed", type: "uint32" },
|
|
583
|
+
{ internalType: "uint256", name: "gasEstimate", type: "uint256" }
|
|
584
|
+
],
|
|
585
|
+
stateMutability: "nonpayable",
|
|
586
|
+
type: "function"
|
|
587
|
+
},
|
|
588
|
+
{
|
|
589
|
+
inputs: [
|
|
590
|
+
{ internalType: "bytes", name: "path", type: "bytes" },
|
|
591
|
+
{ internalType: "uint256", name: "amountOut", type: "uint256" }
|
|
592
|
+
],
|
|
593
|
+
name: "quoteExactOutput",
|
|
594
|
+
outputs: [
|
|
595
|
+
{ internalType: "uint256", name: "amountIn", type: "uint256" },
|
|
596
|
+
{ internalType: "uint160[]", name: "sqrtPriceX96AfterList", type: "uint160[]" },
|
|
597
|
+
{ internalType: "uint32[]", name: "initializedTicksCrossedList", type: "uint32[]" },
|
|
598
|
+
{ internalType: "uint256", name: "gasEstimate", type: "uint256" }
|
|
599
|
+
],
|
|
600
|
+
stateMutability: "nonpayable",
|
|
601
|
+
type: "function"
|
|
602
|
+
},
|
|
603
|
+
{
|
|
604
|
+
inputs: [
|
|
605
|
+
{
|
|
606
|
+
components: [
|
|
607
|
+
{ internalType: "address", name: "tokenIn", type: "address" },
|
|
608
|
+
{ internalType: "address", name: "tokenOut", type: "address" },
|
|
609
|
+
{ internalType: "uint256", name: "amount", type: "uint256" },
|
|
610
|
+
{ internalType: "uint24", name: "fee", type: "uint24" },
|
|
611
|
+
{ internalType: "uint160", name: "sqrtPriceLimitX96", type: "uint160" }
|
|
612
|
+
],
|
|
613
|
+
internalType: "struct IQuoterV2.QuoteExactOutputSingleParams",
|
|
614
|
+
name: "params",
|
|
615
|
+
type: "tuple"
|
|
616
|
+
}
|
|
617
|
+
],
|
|
618
|
+
name: "quoteExactOutputSingle",
|
|
619
|
+
outputs: [
|
|
620
|
+
{ internalType: "uint256", name: "amountIn", type: "uint256" },
|
|
621
|
+
{ internalType: "uint160", name: "sqrtPriceX96After", type: "uint160" },
|
|
622
|
+
{ internalType: "uint32", name: "initializedTicksCrossed", type: "uint32" },
|
|
623
|
+
{ internalType: "uint256", name: "gasEstimate", type: "uint256" }
|
|
624
|
+
],
|
|
625
|
+
stateMutability: "nonpayable",
|
|
626
|
+
type: "function"
|
|
627
|
+
},
|
|
628
|
+
{
|
|
629
|
+
inputs: [
|
|
630
|
+
{ internalType: "int256", name: "amount0Delta", type: "int256" },
|
|
631
|
+
{ internalType: "int256", name: "amount1Delta", type: "int256" },
|
|
632
|
+
{ internalType: "bytes", name: "path", type: "bytes" }
|
|
633
|
+
],
|
|
634
|
+
name: "uniswapV3SwapCallback",
|
|
635
|
+
outputs: [],
|
|
636
|
+
stateMutability: "view",
|
|
637
|
+
type: "function"
|
|
638
|
+
}
|
|
639
|
+
];
|
|
640
|
+
var UNISWAP_V3_FACTORY_ABI = [
|
|
641
|
+
{
|
|
642
|
+
inputs: [],
|
|
643
|
+
stateMutability: "nonpayable",
|
|
644
|
+
type: "constructor"
|
|
645
|
+
},
|
|
646
|
+
{
|
|
647
|
+
inputs: [
|
|
648
|
+
{ internalType: "address", name: "tokenA", type: "address" },
|
|
649
|
+
{ internalType: "address", name: "tokenB", type: "address" },
|
|
650
|
+
{ internalType: "uint24", name: "fee", type: "uint24" }
|
|
651
|
+
],
|
|
652
|
+
name: "getPool",
|
|
653
|
+
outputs: [{ internalType: "address", name: "", type: "address" }],
|
|
654
|
+
stateMutability: "view",
|
|
655
|
+
type: "function"
|
|
656
|
+
}
|
|
657
|
+
];
|
|
521
658
|
var ERC20_ABI = [
|
|
522
659
|
{
|
|
523
660
|
type: "function",
|
|
@@ -737,7 +874,7 @@ var ManiaSDK = class _ManiaSDK {
|
|
|
737
874
|
}
|
|
738
875
|
/**
|
|
739
876
|
* Get comprehensive token information
|
|
740
|
-
*
|
|
877
|
+
*
|
|
741
878
|
* @param token - Token address
|
|
742
879
|
*/
|
|
743
880
|
async getTokenInfo(token) {
|
|
@@ -751,6 +888,18 @@ var ManiaSDK = class _ManiaSDK {
|
|
|
751
888
|
migrationProgress: curve.getMigrationProgress()
|
|
752
889
|
};
|
|
753
890
|
}
|
|
891
|
+
/**
|
|
892
|
+
* Get token name and symbol
|
|
893
|
+
*
|
|
894
|
+
* @param token - Token address
|
|
895
|
+
*/
|
|
896
|
+
async getTokenMetadata(token) {
|
|
897
|
+
const [name, symbol] = await Promise.all([
|
|
898
|
+
this.publicClient.readContract({ address: token, abi: ERC20_ABI, functionName: "name" }),
|
|
899
|
+
this.publicClient.readContract({ address: token, abi: ERC20_ABI, functionName: "symbol" })
|
|
900
|
+
]);
|
|
901
|
+
return { name, symbol };
|
|
902
|
+
}
|
|
754
903
|
/**
|
|
755
904
|
* Get buy quote from contract
|
|
756
905
|
*
|
|
@@ -1105,6 +1254,85 @@ var ManiaSDK = class _ManiaSDK {
|
|
|
1105
1254
|
getWalletClient() {
|
|
1106
1255
|
return this.walletClient;
|
|
1107
1256
|
}
|
|
1257
|
+
// ========== MIGRATED TOKEN METHODS ==========
|
|
1258
|
+
/**
|
|
1259
|
+
* Get chain config or throw if not found
|
|
1260
|
+
*/
|
|
1261
|
+
getChainConfigOrThrow() {
|
|
1262
|
+
const config = getChainConfig(this.chainId);
|
|
1263
|
+
if (!config) {
|
|
1264
|
+
throw new Error(`Chain config not found for chain ID: ${this.chainId}`);
|
|
1265
|
+
}
|
|
1266
|
+
return config;
|
|
1267
|
+
}
|
|
1268
|
+
/**
|
|
1269
|
+
* Get quote for buying tokens with ETH on Kumbaya DEX (Uniswap V3)
|
|
1270
|
+
* Use this for tokens that have migrated from the bonding curve
|
|
1271
|
+
*
|
|
1272
|
+
* @param token - Token address
|
|
1273
|
+
* @param ethAmount - ETH amount in wei
|
|
1274
|
+
* @returns Token amount out
|
|
1275
|
+
*/
|
|
1276
|
+
async getMigratedBuyQuote(token, ethAmount) {
|
|
1277
|
+
const chainConfig = this.getChainConfigOrThrow();
|
|
1278
|
+
const { result } = await this.publicClient.simulateContract({
|
|
1279
|
+
address: chainConfig.quoterV2,
|
|
1280
|
+
abi: QUOTER_V2_ABI,
|
|
1281
|
+
functionName: "quoteExactInputSingle",
|
|
1282
|
+
args: [{
|
|
1283
|
+
tokenIn: chainConfig.wethAddress,
|
|
1284
|
+
tokenOut: token,
|
|
1285
|
+
amountIn: ethAmount,
|
|
1286
|
+
fee: UNISWAP_FEE_TIER,
|
|
1287
|
+
sqrtPriceLimitX96: 0n
|
|
1288
|
+
}]
|
|
1289
|
+
});
|
|
1290
|
+
return result[0];
|
|
1291
|
+
}
|
|
1292
|
+
/**
|
|
1293
|
+
* Get quote for selling tokens for ETH on Kumbaya DEX (Uniswap V3)
|
|
1294
|
+
* Use this for tokens that have migrated from the bonding curve
|
|
1295
|
+
*
|
|
1296
|
+
* @param token - Token address
|
|
1297
|
+
* @param tokenAmount - Token amount to sell
|
|
1298
|
+
* @returns ETH amount out in wei
|
|
1299
|
+
*/
|
|
1300
|
+
async getMigratedSellQuote(token, tokenAmount) {
|
|
1301
|
+
const chainConfig = this.getChainConfigOrThrow();
|
|
1302
|
+
const { result } = await this.publicClient.simulateContract({
|
|
1303
|
+
address: chainConfig.quoterV2,
|
|
1304
|
+
abi: QUOTER_V2_ABI,
|
|
1305
|
+
functionName: "quoteExactInputSingle",
|
|
1306
|
+
args: [{
|
|
1307
|
+
tokenIn: token,
|
|
1308
|
+
tokenOut: chainConfig.wethAddress,
|
|
1309
|
+
amountIn: tokenAmount,
|
|
1310
|
+
fee: UNISWAP_FEE_TIER,
|
|
1311
|
+
sqrtPriceLimitX96: 0n
|
|
1312
|
+
}]
|
|
1313
|
+
});
|
|
1314
|
+
return result[0];
|
|
1315
|
+
}
|
|
1316
|
+
/**
|
|
1317
|
+
* Get the Uniswap V3 pool address for a token/WETH pair
|
|
1318
|
+
*
|
|
1319
|
+
* @param token - Token address
|
|
1320
|
+
* @returns Pool address
|
|
1321
|
+
* @throws Error if pool not found
|
|
1322
|
+
*/
|
|
1323
|
+
async getPoolAddress(token) {
|
|
1324
|
+
const chainConfig = this.getChainConfigOrThrow();
|
|
1325
|
+
const poolAddress = await this.publicClient.readContract({
|
|
1326
|
+
address: chainConfig.uniswapV3Factory,
|
|
1327
|
+
abi: UNISWAP_V3_FACTORY_ABI,
|
|
1328
|
+
functionName: "getPool",
|
|
1329
|
+
args: [token, chainConfig.wethAddress, UNISWAP_FEE_TIER]
|
|
1330
|
+
});
|
|
1331
|
+
if (poolAddress === "0x0000000000000000000000000000000000000000") {
|
|
1332
|
+
throw new Error(`Pool not found for token ${token}`);
|
|
1333
|
+
}
|
|
1334
|
+
return poolAddress;
|
|
1335
|
+
}
|
|
1108
1336
|
};
|
|
1109
1337
|
|
|
1110
1338
|
// src/utils.ts
|
|
@@ -1210,11 +1438,13 @@ async function withRetry(fn, maxRetries = 3, baseDelayMs = 1e3) {
|
|
|
1210
1438
|
MIGRATION_THRESHOLD,
|
|
1211
1439
|
ManiaSDK,
|
|
1212
1440
|
PROTOCOL_FEE_BASIS_POINTS,
|
|
1441
|
+
QUOTER_V2_ABI,
|
|
1213
1442
|
TICK_LOWER,
|
|
1214
1443
|
TICK_UPPER,
|
|
1215
1444
|
TOKENS_FOR_LP,
|
|
1216
1445
|
TOTAL_FEE_BASIS_POINTS,
|
|
1217
1446
|
UNISWAP_FEE_TIER,
|
|
1447
|
+
UNISWAP_V3_FACTORY_ABI,
|
|
1218
1448
|
bpsToPercent,
|
|
1219
1449
|
calculateBuyAmount,
|
|
1220
1450
|
calculateMigrationProgress,
|