@t2000/sdk 0.16.16 → 0.16.18
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/adapters/index.cjs +47 -25
- package/dist/adapters/index.cjs.map +1 -1
- package/dist/adapters/index.d.cts +1 -1
- package/dist/adapters/index.d.ts +1 -1
- package/dist/adapters/index.js +47 -25
- package/dist/adapters/index.js.map +1 -1
- package/dist/{index-BOkO4S7r.d.cts → index-BRjfwac2.d.cts} +7 -0
- package/dist/{index-BOkO4S7r.d.ts → index-BRjfwac2.d.ts} +7 -0
- package/dist/index.cjs +51 -30
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +51 -30
- package/dist/index.js.map +1 -1
- package/package.json +12 -12
- package/LICENSE +0 -21
package/dist/index.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { I as InvestmentTrade, S as StrategyDefinition, A as AutoInvestSchedule, a as AutoInvestStatus, T as T2000Options, b as SendResult, B as BalanceResponse, c as TransactionRecord, D as DepositInfo, L as LendingAdapter, d as SwapAdapter, e as SaveResult, W as WithdrawResult, M as MaxWithdrawResult, f as BorrowResult, R as RepayResult, g as MaxBorrowResult, H as HealthFactorResult, h as SwapResult, i as InvestResult, j as InvestEarnResult, k as StrategyBuyResult, l as StrategySellResult, m as StrategyRebalanceResult, n as StrategyStatusResult, o as AutoInvestRunResult, P as PortfolioResult, p as InvestmentPosition, q as PositionsResult, r as RatesResult, s as LendingRates, t as RebalanceResult, E as EarningsResult, F as FundStatusResult, u as SentinelAgent, v as SentinelAttackResult, G as GasMethod } from './index-
|
|
2
|
-
export { w as AdapterCapability, x as AdapterPositions, y as AdapterTxResult, z as AssetRates, C as CetusAdapter, J as GasReserve, K as HealthInfo, N as NaviAdapter, O as PerpsAdapter, Q as PerpsPosition, U as PositionEntry, V as PositionSide, X as ProtocolDescriptor, Y as ProtocolRegistry, Z as RebalanceStep, _ as SentinelVerdict, $ as SuilendAdapter, a0 as SwapQuote, a1 as TradePositionsResult, a2 as TradeResult, a3 as allDescriptors, a4 as cetusDescriptor, a5 as getSentinelInfo, a6 as listSentinels, a7 as naviDescriptor, a8 as requestAttack, a9 as sentinelAttack, aa as sentinelDescriptor, ab as settleAttack, ac as submitPrompt, ad as suilendDescriptor } from './index-
|
|
1
|
+
import { I as InvestmentTrade, S as StrategyDefinition, A as AutoInvestSchedule, a as AutoInvestStatus, T as T2000Options, b as SendResult, B as BalanceResponse, c as TransactionRecord, D as DepositInfo, L as LendingAdapter, d as SwapAdapter, e as SaveResult, W as WithdrawResult, M as MaxWithdrawResult, f as BorrowResult, R as RepayResult, g as MaxBorrowResult, H as HealthFactorResult, h as SwapResult, i as InvestResult, j as InvestEarnResult, k as StrategyBuyResult, l as StrategySellResult, m as StrategyRebalanceResult, n as StrategyStatusResult, o as AutoInvestRunResult, P as PortfolioResult, p as InvestmentPosition, q as PositionsResult, r as RatesResult, s as LendingRates, t as RebalanceResult, E as EarningsResult, F as FundStatusResult, u as SentinelAgent, v as SentinelAttackResult, G as GasMethod } from './index-BRjfwac2.cjs';
|
|
2
|
+
export { w as AdapterCapability, x as AdapterPositions, y as AdapterTxResult, z as AssetRates, C as CetusAdapter, J as GasReserve, K as HealthInfo, N as NaviAdapter, O as PerpsAdapter, Q as PerpsPosition, U as PositionEntry, V as PositionSide, X as ProtocolDescriptor, Y as ProtocolRegistry, Z as RebalanceStep, _ as SentinelVerdict, $ as SuilendAdapter, a0 as SwapQuote, a1 as TradePositionsResult, a2 as TradeResult, a3 as allDescriptors, a4 as cetusDescriptor, a5 as getSentinelInfo, a6 as listSentinels, a7 as naviDescriptor, a8 as requestAttack, a9 as sentinelAttack, aa as sentinelDescriptor, ab as settleAttack, ac as submitPrompt, ad as suilendDescriptor } from './index-BRjfwac2.cjs';
|
|
3
3
|
import { EventEmitter } from 'eventemitter3';
|
|
4
4
|
import { SuiJsonRpcClient } from '@mysten/sui/jsonRpc';
|
|
5
5
|
import { Ed25519Keypair } from '@mysten/sui/keypairs/ed25519';
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { I as InvestmentTrade, S as StrategyDefinition, A as AutoInvestSchedule, a as AutoInvestStatus, T as T2000Options, b as SendResult, B as BalanceResponse, c as TransactionRecord, D as DepositInfo, L as LendingAdapter, d as SwapAdapter, e as SaveResult, W as WithdrawResult, M as MaxWithdrawResult, f as BorrowResult, R as RepayResult, g as MaxBorrowResult, H as HealthFactorResult, h as SwapResult, i as InvestResult, j as InvestEarnResult, k as StrategyBuyResult, l as StrategySellResult, m as StrategyRebalanceResult, n as StrategyStatusResult, o as AutoInvestRunResult, P as PortfolioResult, p as InvestmentPosition, q as PositionsResult, r as RatesResult, s as LendingRates, t as RebalanceResult, E as EarningsResult, F as FundStatusResult, u as SentinelAgent, v as SentinelAttackResult, G as GasMethod } from './index-
|
|
2
|
-
export { w as AdapterCapability, x as AdapterPositions, y as AdapterTxResult, z as AssetRates, C as CetusAdapter, J as GasReserve, K as HealthInfo, N as NaviAdapter, O as PerpsAdapter, Q as PerpsPosition, U as PositionEntry, V as PositionSide, X as ProtocolDescriptor, Y as ProtocolRegistry, Z as RebalanceStep, _ as SentinelVerdict, $ as SuilendAdapter, a0 as SwapQuote, a1 as TradePositionsResult, a2 as TradeResult, a3 as allDescriptors, a4 as cetusDescriptor, a5 as getSentinelInfo, a6 as listSentinels, a7 as naviDescriptor, a8 as requestAttack, a9 as sentinelAttack, aa as sentinelDescriptor, ab as settleAttack, ac as submitPrompt, ad as suilendDescriptor } from './index-
|
|
1
|
+
import { I as InvestmentTrade, S as StrategyDefinition, A as AutoInvestSchedule, a as AutoInvestStatus, T as T2000Options, b as SendResult, B as BalanceResponse, c as TransactionRecord, D as DepositInfo, L as LendingAdapter, d as SwapAdapter, e as SaveResult, W as WithdrawResult, M as MaxWithdrawResult, f as BorrowResult, R as RepayResult, g as MaxBorrowResult, H as HealthFactorResult, h as SwapResult, i as InvestResult, j as InvestEarnResult, k as StrategyBuyResult, l as StrategySellResult, m as StrategyRebalanceResult, n as StrategyStatusResult, o as AutoInvestRunResult, P as PortfolioResult, p as InvestmentPosition, q as PositionsResult, r as RatesResult, s as LendingRates, t as RebalanceResult, E as EarningsResult, F as FundStatusResult, u as SentinelAgent, v as SentinelAttackResult, G as GasMethod } from './index-BRjfwac2.js';
|
|
2
|
+
export { w as AdapterCapability, x as AdapterPositions, y as AdapterTxResult, z as AssetRates, C as CetusAdapter, J as GasReserve, K as HealthInfo, N as NaviAdapter, O as PerpsAdapter, Q as PerpsPosition, U as PositionEntry, V as PositionSide, X as ProtocolDescriptor, Y as ProtocolRegistry, Z as RebalanceStep, _ as SentinelVerdict, $ as SuilendAdapter, a0 as SwapQuote, a1 as TradePositionsResult, a2 as TradeResult, a3 as allDescriptors, a4 as cetusDescriptor, a5 as getSentinelInfo, a6 as listSentinels, a7 as naviDescriptor, a8 as requestAttack, a9 as sentinelAttack, aa as sentinelDescriptor, ab as settleAttack, ac as submitPrompt, ad as suilendDescriptor } from './index-BRjfwac2.js';
|
|
3
3
|
import { EventEmitter } from 'eventemitter3';
|
|
4
4
|
import { SuiJsonRpcClient } from '@mysten/sui/jsonRpc';
|
|
5
5
|
import { Ed25519Keypair } from '@mysten/sui/keypairs/ed25519';
|
package/dist/index.js
CHANGED
|
@@ -183,11 +183,10 @@ function parseMoveAbortMessage(msg) {
|
|
|
183
183
|
if (abortMatch) {
|
|
184
184
|
const code = parseInt(abortMatch[1], 10);
|
|
185
185
|
const mapped = mapMoveAbortCode(code);
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
}
|
|
190
|
-
return mapped;
|
|
186
|
+
const moduleMatch = msg.match(/Identifier\("([^"]+)"\)/) ?? msg.match(/in '([^']+)'/);
|
|
187
|
+
const fnMatch = msg.match(/function_name:\s*Some\("([^"]+)"\)/);
|
|
188
|
+
const suffix = moduleMatch ? ` [${moduleMatch[1]}${fnMatch ? `::${fnMatch[1]}` : ""}]` : "";
|
|
189
|
+
return `${mapped}${suffix}`;
|
|
191
190
|
}
|
|
192
191
|
return msg;
|
|
193
192
|
}
|
|
@@ -1774,6 +1773,7 @@ SUPPORTED_ASSETS.USDC.type;
|
|
|
1774
1773
|
var WAD = 1e18;
|
|
1775
1774
|
var MIN_HEALTH_FACTOR2 = 1.5;
|
|
1776
1775
|
var CLOCK2 = "0x6";
|
|
1776
|
+
var SUI_SYSTEM_STATE2 = "0x5";
|
|
1777
1777
|
var LENDING_MARKET_ID = "0x84030d26d85eaa7035084a057f2f11f701b7e2e4eda87551becbc7c97505ece1";
|
|
1778
1778
|
var LENDING_MARKET_TYPE = "0xf95b06141ed4a174f239417323bde3f209b972f5930d8521ea38a52aff3a6ddf::suilend::MAIN_POOL";
|
|
1779
1779
|
var SUILEND_PACKAGE = "0xf95b06141ed4a174f239417323bde3f209b972f5930d8521ea38a52aff3a6ddf";
|
|
@@ -1789,6 +1789,9 @@ var descriptor4 = {
|
|
|
1789
1789
|
"lending_market::create_obligation": "save",
|
|
1790
1790
|
"lending_market::withdraw_ctokens": "withdraw",
|
|
1791
1791
|
"lending_market::redeem_ctokens_and_withdraw_liquidity": "withdraw",
|
|
1792
|
+
"lending_market::redeem_ctokens_and_withdraw_liquidity_request": "withdraw",
|
|
1793
|
+
"lending_market::fulfill_liquidity_request": "withdraw",
|
|
1794
|
+
"lending_market::unstake_sui_from_staker": "withdraw",
|
|
1792
1795
|
"lending_market::borrow": "borrow",
|
|
1793
1796
|
"lending_market::repay": "repay"
|
|
1794
1797
|
}
|
|
@@ -2133,7 +2136,9 @@ var SuilendAdapter = class {
|
|
|
2133
2136
|
const deposited = dep ? dep.ctokenAmount * ratio / 10 ** reserve.mintDecimals : 0;
|
|
2134
2137
|
const effectiveAmount = Math.min(amount, deposited);
|
|
2135
2138
|
if (effectiveAmount <= 0) throw new T2000Error("NO_COLLATERAL", `Nothing to withdraw for ${assetInfo.displayName} on Suilend`);
|
|
2136
|
-
const
|
|
2139
|
+
const U64_MAX = "18446744073709551615";
|
|
2140
|
+
const isFullWithdraw = dep && effectiveAmount >= deposited * 0.999;
|
|
2141
|
+
const withdrawArg = isFullWithdraw ? U64_MAX : String(Math.floor(effectiveAmount * 10 ** reserve.mintDecimals / ratio));
|
|
2137
2142
|
const tx = new Transaction();
|
|
2138
2143
|
tx.setSender(address);
|
|
2139
2144
|
const [ctokens] = tx.moveCall({
|
|
@@ -2144,25 +2149,10 @@ var SuilendAdapter = class {
|
|
|
2144
2149
|
tx.pure.u64(reserve.arrayIndex),
|
|
2145
2150
|
tx.object(caps[0].id),
|
|
2146
2151
|
tx.object(CLOCK2),
|
|
2147
|
-
tx.pure
|
|
2148
|
-
]
|
|
2149
|
-
});
|
|
2150
|
-
const exemptionType = `${SUILEND_PACKAGE}::lending_market::RateLimiterExemption<${LENDING_MARKET_TYPE}, ${assetInfo.type}>`;
|
|
2151
|
-
const [none] = tx.moveCall({
|
|
2152
|
-
target: "0x1::option::none",
|
|
2153
|
-
typeArguments: [exemptionType]
|
|
2154
|
-
});
|
|
2155
|
-
const [coin] = tx.moveCall({
|
|
2156
|
-
target: `${pkg}::lending_market::redeem_ctokens_and_withdraw_liquidity`,
|
|
2157
|
-
typeArguments: [LENDING_MARKET_TYPE, assetInfo.type],
|
|
2158
|
-
arguments: [
|
|
2159
|
-
tx.object(LENDING_MARKET_ID),
|
|
2160
|
-
tx.pure.u64(reserve.arrayIndex),
|
|
2161
|
-
tx.object(CLOCK2),
|
|
2162
|
-
ctokens,
|
|
2163
|
-
none
|
|
2152
|
+
tx.pure("u64", BigInt(withdrawArg))
|
|
2164
2153
|
]
|
|
2165
2154
|
});
|
|
2155
|
+
const coin = this.redeemCtokens(tx, pkg, reserve, assetInfo.type, assetKey, ctokens);
|
|
2166
2156
|
tx.transferObjects([coin], address);
|
|
2167
2157
|
return { tx, effectiveAmount };
|
|
2168
2158
|
}
|
|
@@ -2180,7 +2170,7 @@ var SuilendAdapter = class {
|
|
|
2180
2170
|
const deposited = dep ? dep.ctokenAmount * ratio / 10 ** reserve.mintDecimals : 0;
|
|
2181
2171
|
const effectiveAmount = Math.min(amount, deposited);
|
|
2182
2172
|
if (effectiveAmount <= 0) throw new T2000Error("NO_COLLATERAL", `Nothing to withdraw for ${assetInfo.displayName} on Suilend`);
|
|
2183
|
-
const
|
|
2173
|
+
const ctokenAmount = dep && effectiveAmount >= deposited * 0.999 ? dep.ctokenAmount : Math.floor(effectiveAmount * 10 ** reserve.mintDecimals / ratio);
|
|
2184
2174
|
const [ctokens] = tx.moveCall({
|
|
2185
2175
|
target: `${pkg}::lending_market::withdraw_ctokens`,
|
|
2186
2176
|
typeArguments: [LENDING_MARKET_TYPE, assetInfo.type],
|
|
@@ -2189,17 +2179,27 @@ var SuilendAdapter = class {
|
|
|
2189
2179
|
tx.pure.u64(reserve.arrayIndex),
|
|
2190
2180
|
tx.object(caps[0].id),
|
|
2191
2181
|
tx.object(CLOCK2),
|
|
2192
|
-
tx.pure.u64(
|
|
2182
|
+
tx.pure.u64(ctokenAmount)
|
|
2193
2183
|
]
|
|
2194
2184
|
});
|
|
2195
|
-
const
|
|
2185
|
+
const coin = this.redeemCtokens(tx, pkg, reserve, assetInfo.type, assetKey, ctokens);
|
|
2186
|
+
return { coin, effectiveAmount };
|
|
2187
|
+
}
|
|
2188
|
+
/**
|
|
2189
|
+
* 3-step cToken redemption matching the official Suilend SDK flow:
|
|
2190
|
+
* 1. redeem_ctokens_and_withdraw_liquidity_request — creates a LiquidityRequest
|
|
2191
|
+
* 2. unstake_sui_from_staker — (SUI only) unstakes from validators to replenish available_liquidity
|
|
2192
|
+
* 3. fulfill_liquidity_request — splits underlying tokens from the reserve
|
|
2193
|
+
*/
|
|
2194
|
+
redeemCtokens(tx, pkg, reserve, coinType, assetKey, ctokens) {
|
|
2195
|
+
const exemptionType = `${SUILEND_PACKAGE}::lending_market::RateLimiterExemption<${LENDING_MARKET_TYPE}, ${coinType}>`;
|
|
2196
2196
|
const [none] = tx.moveCall({
|
|
2197
2197
|
target: "0x1::option::none",
|
|
2198
2198
|
typeArguments: [exemptionType]
|
|
2199
2199
|
});
|
|
2200
|
-
const [
|
|
2201
|
-
target: `${pkg}::lending_market::
|
|
2202
|
-
typeArguments: [LENDING_MARKET_TYPE,
|
|
2200
|
+
const [liquidityRequest] = tx.moveCall({
|
|
2201
|
+
target: `${pkg}::lending_market::redeem_ctokens_and_withdraw_liquidity_request`,
|
|
2202
|
+
typeArguments: [LENDING_MARKET_TYPE, coinType],
|
|
2203
2203
|
arguments: [
|
|
2204
2204
|
tx.object(LENDING_MARKET_ID),
|
|
2205
2205
|
tx.pure.u64(reserve.arrayIndex),
|
|
@@ -2208,7 +2208,28 @@ var SuilendAdapter = class {
|
|
|
2208
2208
|
none
|
|
2209
2209
|
]
|
|
2210
2210
|
});
|
|
2211
|
-
|
|
2211
|
+
if (assetKey === "SUI") {
|
|
2212
|
+
tx.moveCall({
|
|
2213
|
+
target: `${pkg}::lending_market::unstake_sui_from_staker`,
|
|
2214
|
+
typeArguments: [LENDING_MARKET_TYPE],
|
|
2215
|
+
arguments: [
|
|
2216
|
+
tx.object(LENDING_MARKET_ID),
|
|
2217
|
+
tx.pure.u64(reserve.arrayIndex),
|
|
2218
|
+
liquidityRequest,
|
|
2219
|
+
tx.object(SUI_SYSTEM_STATE2)
|
|
2220
|
+
]
|
|
2221
|
+
});
|
|
2222
|
+
}
|
|
2223
|
+
const [coin] = tx.moveCall({
|
|
2224
|
+
target: `${pkg}::lending_market::fulfill_liquidity_request`,
|
|
2225
|
+
typeArguments: [LENDING_MARKET_TYPE, coinType],
|
|
2226
|
+
arguments: [
|
|
2227
|
+
tx.object(LENDING_MARKET_ID),
|
|
2228
|
+
tx.pure.u64(reserve.arrayIndex),
|
|
2229
|
+
liquidityRequest
|
|
2230
|
+
]
|
|
2231
|
+
});
|
|
2232
|
+
return coin;
|
|
2212
2233
|
}
|
|
2213
2234
|
async addSaveToTx(tx, address, coin, asset, options) {
|
|
2214
2235
|
const assetKey = asset in SUPPORTED_ASSETS ? asset : "USDC";
|