@strkfarm/sdk 2.0.0-dev.5 → 2.0.0-dev.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.browser.global.js +100 -48
- package/dist/index.browser.mjs +100 -48
- package/dist/index.js +100 -48
- package/dist/index.mjs +100 -48
- package/package.json +1 -1
- package/src/strategies/universal-adapters/avnu-adapter.ts +1 -1
- package/src/strategies/universal-adapters/extended-adapter.ts +150 -73
- package/src/strategies/vesu-extended-strategy/utils/helper.ts +2 -4
- package/src/strategies/vesu-extended-strategy/vesu-extended-strategy.tsx +8 -7
package/dist/index.js
CHANGED
|
@@ -28207,8 +28207,7 @@ var calculateAmountDistribution = async (amount, client, marketName, collateralP
|
|
|
28207
28207
|
vesu_leverage: 0
|
|
28208
28208
|
};
|
|
28209
28209
|
}
|
|
28210
|
-
const
|
|
28211
|
-
const extendedExposureUSD = extendedBTCExposure.multipliedBy(collateralPrice);
|
|
28210
|
+
const extendedExposureUSD = extendedPosition.length > 0 ? new Web3Number(extendedPosition[0].value, WBTC_TOKEN_DECIMALS) : new Web3Number(0, WBTC_TOKEN_DECIMALS);
|
|
28212
28211
|
const vesuBTCExposureUSD = collateralUnits.multipliedBy(collateralPrice);
|
|
28213
28212
|
const numerator1 = vesu_leverage * amount + vesuBTCExposureUSD.toNumber();
|
|
28214
28213
|
const numerator2 = extendedExposureUSD.toNumber();
|
|
@@ -29777,7 +29776,10 @@ var ExtendedAdapter = class _ExtendedAdapter extends BaseAdapter {
|
|
|
29777
29776
|
//abstract means the method has no implementation in this class; instead, child classes must implement it.
|
|
29778
29777
|
async getAPY(supportedPosition) {
|
|
29779
29778
|
const side = supportedPosition.isDebt ? "LONG" : "SHORT";
|
|
29780
|
-
const fundingRates = await this.client.getFundingRates(
|
|
29779
|
+
const fundingRates = await this.client.getFundingRates(
|
|
29780
|
+
this.config.extendedMarketName,
|
|
29781
|
+
side
|
|
29782
|
+
);
|
|
29781
29783
|
if (fundingRates.status !== "OK") {
|
|
29782
29784
|
logger.error("error getting funding rates", fundingRates);
|
|
29783
29785
|
return { apy: 0, type: "base" /* BASE */ };
|
|
@@ -29821,14 +29823,14 @@ var ExtendedAdapter = class _ExtendedAdapter extends BaseAdapter {
|
|
|
29821
29823
|
});
|
|
29822
29824
|
}
|
|
29823
29825
|
_getDepositLeaf() {
|
|
29824
|
-
const usdceToken = Global.getDefaultTokens().find(
|
|
29826
|
+
const usdceToken = Global.getDefaultTokens().find(
|
|
29827
|
+
(token) => token.symbol === "USDCe"
|
|
29828
|
+
);
|
|
29825
29829
|
return [
|
|
29826
29830
|
{
|
|
29827
29831
|
target: this.config.supportedPositions[0].asset.address,
|
|
29828
29832
|
method: "approve",
|
|
29829
|
-
packedArguments: [
|
|
29830
|
-
AVNU_EXCHANGE_FOR_LEGACY_USDC.toBigInt()
|
|
29831
|
-
],
|
|
29833
|
+
packedArguments: [AVNU_EXCHANGE_FOR_LEGACY_USDC.toBigInt()],
|
|
29832
29834
|
id: `extended_approve_${this.config.supportedPositions[0].asset.symbol}`,
|
|
29833
29835
|
sanitizer: AVNU_LEGACY_SANITIZER
|
|
29834
29836
|
},
|
|
@@ -29859,25 +29861,33 @@ var ExtendedAdapter = class _ExtendedAdapter extends BaseAdapter {
|
|
|
29859
29861
|
const leafConfigs = this._getSwapFromLegacyLeaf();
|
|
29860
29862
|
const leaves = leafConfigs.map((config) => {
|
|
29861
29863
|
const { target, method, packedArguments, sanitizer, id } = config;
|
|
29862
|
-
const leaf = this.constructSimpleLeafData(
|
|
29863
|
-
|
|
29864
|
-
|
|
29865
|
-
|
|
29866
|
-
|
|
29867
|
-
|
|
29864
|
+
const leaf = this.constructSimpleLeafData(
|
|
29865
|
+
{
|
|
29866
|
+
id,
|
|
29867
|
+
target,
|
|
29868
|
+
method,
|
|
29869
|
+
packedArguments
|
|
29870
|
+
},
|
|
29871
|
+
sanitizer
|
|
29872
|
+
);
|
|
29868
29873
|
return leaf;
|
|
29869
29874
|
});
|
|
29870
|
-
return {
|
|
29875
|
+
return {
|
|
29876
|
+
leaves,
|
|
29877
|
+
callConstructor: this.getSwapFromLegacyCall.bind(
|
|
29878
|
+
this
|
|
29879
|
+
)
|
|
29880
|
+
};
|
|
29871
29881
|
}
|
|
29872
29882
|
_getSwapFromLegacyLeaf() {
|
|
29873
|
-
const usdceToken = Global.getDefaultTokens().find(
|
|
29883
|
+
const usdceToken = Global.getDefaultTokens().find(
|
|
29884
|
+
(token) => token.symbol === "USDCe"
|
|
29885
|
+
);
|
|
29874
29886
|
return [
|
|
29875
29887
|
{
|
|
29876
29888
|
target: usdceToken.address,
|
|
29877
29889
|
method: "approve",
|
|
29878
|
-
packedArguments: [
|
|
29879
|
-
AVNU_EXCHANGE_FOR_LEGACY_USDC.toBigInt()
|
|
29880
|
-
],
|
|
29890
|
+
packedArguments: [AVNU_EXCHANGE_FOR_LEGACY_USDC.toBigInt()],
|
|
29881
29891
|
id: `extendedswaplegacyapprove_${usdceToken.symbol}`,
|
|
29882
29892
|
sanitizer: AVNU_LEGACY_SANITIZER
|
|
29883
29893
|
},
|
|
@@ -29896,11 +29906,13 @@ var ExtendedAdapter = class _ExtendedAdapter extends BaseAdapter {
|
|
|
29896
29906
|
async getDepositCall(params) {
|
|
29897
29907
|
try {
|
|
29898
29908
|
const usdcToken = this.config.supportedPositions[0].asset;
|
|
29899
|
-
const usdceToken = Global.getDefaultTokens().find(
|
|
29900
|
-
|
|
29901
|
-
|
|
29909
|
+
const usdceToken = Global.getDefaultTokens().find(
|
|
29910
|
+
(token) => token.symbol === "USDCe"
|
|
29911
|
+
);
|
|
29912
|
+
const salt = Math.floor(Math.random() * 10 ** usdcToken.decimals);
|
|
29913
|
+
const amount = import_starknet22.uint256.bnToUint256(
|
|
29914
|
+
params.amount.multipliedBy(10).toWei()
|
|
29902
29915
|
);
|
|
29903
|
-
const amount = import_starknet22.uint256.bnToUint256(params.amount.multipliedBy(10).toWei());
|
|
29904
29916
|
const quotes = await this.config.avnuAdapter.getQuotesAvnu(
|
|
29905
29917
|
usdcToken.address.toString(),
|
|
29906
29918
|
usdceToken.address.toString(),
|
|
@@ -29913,7 +29925,9 @@ var ExtendedAdapter = class _ExtendedAdapter extends BaseAdapter {
|
|
|
29913
29925
|
logger.error("error getting quotes from avnu");
|
|
29914
29926
|
return [];
|
|
29915
29927
|
}
|
|
29916
|
-
const getCalldata = await this.config.avnuAdapter.getSwapCallData(
|
|
29928
|
+
const getCalldata = await this.config.avnuAdapter.getSwapCallData(
|
|
29929
|
+
quotes
|
|
29930
|
+
);
|
|
29917
29931
|
const swapCallData = getCalldata[0];
|
|
29918
29932
|
return [
|
|
29919
29933
|
{
|
|
@@ -29989,8 +30003,12 @@ var ExtendedAdapter = class _ExtendedAdapter extends BaseAdapter {
|
|
|
29989
30003
|
async getSwapFromLegacyCall(params) {
|
|
29990
30004
|
try {
|
|
29991
30005
|
const usdcToken = this.config.supportedPositions[0].asset;
|
|
29992
|
-
const usdceToken = Global.getDefaultTokens().find(
|
|
29993
|
-
|
|
30006
|
+
const usdceToken = Global.getDefaultTokens().find(
|
|
30007
|
+
(token) => token.symbol === "USDCe"
|
|
30008
|
+
);
|
|
30009
|
+
const amount = import_starknet22.uint256.bnToUint256(
|
|
30010
|
+
params.amount.multipliedBy(10).toWei()
|
|
30011
|
+
);
|
|
29994
30012
|
const quotes = await this.config.avnuAdapter.getQuotesAvnu(
|
|
29995
30013
|
usdceToken.address.toString(),
|
|
29996
30014
|
usdcToken.address.toString(),
|
|
@@ -30003,7 +30021,9 @@ var ExtendedAdapter = class _ExtendedAdapter extends BaseAdapter {
|
|
|
30003
30021
|
logger.error("error getting quotes from avnu");
|
|
30004
30022
|
return [];
|
|
30005
30023
|
}
|
|
30006
|
-
const getCalldata = await this.config.avnuAdapter.getSwapCallData(
|
|
30024
|
+
const getCalldata = await this.config.avnuAdapter.getSwapCallData(
|
|
30025
|
+
quotes
|
|
30026
|
+
);
|
|
30007
30027
|
const swapCallData = getCalldata[0];
|
|
30008
30028
|
return [
|
|
30009
30029
|
{
|
|
@@ -30051,9 +30071,14 @@ var ExtendedAdapter = class _ExtendedAdapter extends BaseAdapter {
|
|
|
30051
30071
|
if (!this.client) {
|
|
30052
30072
|
throw new Error("Client not initialized");
|
|
30053
30073
|
}
|
|
30054
|
-
const withdrawalRequest = await this.client.withdrawUSDC(
|
|
30074
|
+
const withdrawalRequest = await this.client.withdrawUSDC(
|
|
30075
|
+
amount.toFixed(2)
|
|
30076
|
+
);
|
|
30055
30077
|
if (withdrawalRequest.status === "OK") {
|
|
30056
|
-
const withdrawalStatus = await this.getDepositOrWithdrawalStatus(
|
|
30078
|
+
const withdrawalStatus = await this.getDepositOrWithdrawalStatus(
|
|
30079
|
+
withdrawalRequest.data,
|
|
30080
|
+
"WITHDRAWAL" /* WITHDRAWAL */
|
|
30081
|
+
);
|
|
30057
30082
|
return withdrawalStatus;
|
|
30058
30083
|
}
|
|
30059
30084
|
return false;
|
|
@@ -30126,18 +30151,34 @@ var ExtendedAdapter = class _ExtendedAdapter extends BaseAdapter {
|
|
|
30126
30151
|
logger.error("error initializing client");
|
|
30127
30152
|
return null;
|
|
30128
30153
|
}
|
|
30129
|
-
|
|
30130
|
-
const orderhistory = await this.getOrderHistory(marketName);
|
|
30154
|
+
let orderhistory = await this.getOrderHistory(marketName);
|
|
30131
30155
|
if (!orderhistory || orderhistory.length === 0) {
|
|
30132
|
-
logger.error(`error getting order: ${orderId}`);
|
|
30133
|
-
|
|
30156
|
+
logger.error(`error getting order history: ${orderId}`);
|
|
30157
|
+
} else {
|
|
30158
|
+
const order = orderhistory.slice(0, 5).find((order2) => order2.id.toString() === orderId);
|
|
30159
|
+
if (order) {
|
|
30160
|
+
return order;
|
|
30161
|
+
}
|
|
30134
30162
|
}
|
|
30135
|
-
|
|
30136
|
-
|
|
30137
|
-
|
|
30138
|
-
|
|
30163
|
+
for (let attempt = 1; attempt <= 3; attempt++) {
|
|
30164
|
+
await new Promise((resolve) => setTimeout(resolve, 3e3));
|
|
30165
|
+
orderhistory = await this.getOrderHistory(marketName);
|
|
30166
|
+
if (!orderhistory || orderhistory.length === 0) {
|
|
30167
|
+
logger.error(
|
|
30168
|
+
`error getting order history on retry ${attempt}: ${orderId}`
|
|
30169
|
+
);
|
|
30170
|
+
continue;
|
|
30171
|
+
}
|
|
30172
|
+
const order = orderhistory.slice(0, 5).find((order2) => order2.id.toString() === orderId);
|
|
30173
|
+
if (order) {
|
|
30174
|
+
return order;
|
|
30175
|
+
}
|
|
30176
|
+
logger.error(
|
|
30177
|
+
`order not found in top 5 entries on retry ${attempt}: ${orderId}`
|
|
30178
|
+
);
|
|
30139
30179
|
}
|
|
30140
|
-
|
|
30180
|
+
logger.error(`error getting order after all retries: ${orderId}`);
|
|
30181
|
+
return null;
|
|
30141
30182
|
}
|
|
30142
30183
|
async fetchOrderBookBTCUSDC() {
|
|
30143
30184
|
try {
|
|
@@ -30210,7 +30251,10 @@ var ExtendedAdapter = class _ExtendedAdapter extends BaseAdapter {
|
|
|
30210
30251
|
return null;
|
|
30211
30252
|
}
|
|
30212
30253
|
await new Promise((resolve) => setTimeout(resolve, 5e3));
|
|
30213
|
-
const openOrder = await this.getOrderStatus(
|
|
30254
|
+
const openOrder = await this.getOrderStatus(
|
|
30255
|
+
result.position_id,
|
|
30256
|
+
this.config.extendedMarketName
|
|
30257
|
+
);
|
|
30214
30258
|
if (!openOrder || openOrder.status !== "FILLED" /* FILLED */) {
|
|
30215
30259
|
if (attempt >= maxAttempts) {
|
|
30216
30260
|
logger.error("Max retries reached \u2014 could not verify open position");
|
|
@@ -30233,7 +30277,9 @@ var ExtendedAdapter = class _ExtendedAdapter extends BaseAdapter {
|
|
|
30233
30277
|
};
|
|
30234
30278
|
}
|
|
30235
30279
|
} catch (err) {
|
|
30236
|
-
logger.error(
|
|
30280
|
+
logger.error(
|
|
30281
|
+
`createShortOrder failed on attempt ${attempt}: ${err.message}`
|
|
30282
|
+
);
|
|
30237
30283
|
if (attempt < maxAttempts) {
|
|
30238
30284
|
const backoff = 1200 * attempt;
|
|
30239
30285
|
logger.info(`Retrying after ${backoff}ms...`);
|
|
@@ -30278,13 +30324,17 @@ var ExtendedAdapter = class _ExtendedAdapter extends BaseAdapter {
|
|
|
30278
30324
|
operationsStatus: ["COMPLETED" /* COMPLETED */]
|
|
30279
30325
|
});
|
|
30280
30326
|
if (operationsType === "DEPOSIT" /* DEPOSIT */) {
|
|
30281
|
-
const myTransferStatus = transferHistory.data.find(
|
|
30327
|
+
const myTransferStatus = transferHistory.data.find(
|
|
30328
|
+
(operation) => operation.transactionHash === orderId
|
|
30329
|
+
);
|
|
30282
30330
|
if (!myTransferStatus) {
|
|
30283
30331
|
return true;
|
|
30284
30332
|
}
|
|
30285
30333
|
return true;
|
|
30286
30334
|
} else {
|
|
30287
|
-
const myTransferStatus = transferHistory.data.find(
|
|
30335
|
+
const myTransferStatus = transferHistory.data.find(
|
|
30336
|
+
(operation) => operation.id.toString() === orderId.toString()
|
|
30337
|
+
);
|
|
30288
30338
|
if (!myTransferStatus) {
|
|
30289
30339
|
return true;
|
|
30290
30340
|
}
|
|
@@ -33902,6 +33952,7 @@ var AvnuAdapter = class _AvnuAdapter extends BaseAdapter {
|
|
|
33902
33952
|
toToken.decimals,
|
|
33903
33953
|
true
|
|
33904
33954
|
);
|
|
33955
|
+
console.log(`${_AvnuAdapter.name}::getDepositCall quote: ${quote?.sellAmountInUsd}`);
|
|
33905
33956
|
if (!quote) {
|
|
33906
33957
|
logger.error("error getting quote from avnu");
|
|
33907
33958
|
return [];
|
|
@@ -34020,7 +34071,7 @@ var AvnuAdapter = class _AvnuAdapter extends BaseAdapter {
|
|
|
34020
34071
|
}
|
|
34021
34072
|
throw new Error("Failed to fetch quote after retries");
|
|
34022
34073
|
}
|
|
34023
|
-
async getQuotesAvnu(from_token_address, to_token_address, amount, takerAddress, toTokenDecimals, usdcToBtc, maxIterations = 5, tolerance =
|
|
34074
|
+
async getQuotesAvnu(from_token_address, to_token_address, amount, takerAddress, toTokenDecimals, usdcToBtc, maxIterations = 5, tolerance = 5e3) {
|
|
34024
34075
|
try {
|
|
34025
34076
|
const fromToken = this.config.supportedPositions[0].asset;
|
|
34026
34077
|
const toToken = this.config.supportedPositions[1].asset;
|
|
@@ -34260,7 +34311,8 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
34260
34311
|
}
|
|
34261
34312
|
const balance = await this.getUnusedBalance();
|
|
34262
34313
|
const usdcBalanceOnExtended = await extendedAdapter.getExtendedDepositAmount();
|
|
34263
|
-
const amountToInvest = balance.
|
|
34314
|
+
const amountToInvest = new Web3Number(balance.usdValue, USDC_TOKEN_DECIMALS).plus(usdcBalanceOnExtended?.availableForWithdrawal ?? 0).minus(LIMIT_BALANCE);
|
|
34315
|
+
logger.info(`${_VesuExtendedMultiplierStrategy.name}::shouldInvest amountToInvest: ${amountToInvest.toNumber()}`);
|
|
34264
34316
|
if (amountToInvest.lessThan(0)) {
|
|
34265
34317
|
return {
|
|
34266
34318
|
shouldInvest: false,
|
|
@@ -34313,6 +34365,7 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
34313
34365
|
vesuLeverage: 0
|
|
34314
34366
|
};
|
|
34315
34367
|
}
|
|
34368
|
+
logger.info(`${_VesuExtendedMultiplierStrategy.name}::shouldInvest vesu_amount: ${vesu_amount.toNumber()}, extended_amount: ${extended_amount.toNumber()}`);
|
|
34316
34369
|
return {
|
|
34317
34370
|
shouldInvest: true,
|
|
34318
34371
|
vesuAmount: vesu_amount,
|
|
@@ -34392,15 +34445,15 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
34392
34445
|
}
|
|
34393
34446
|
const usdcAmountInWallet = (await this.getUnusedBalance()).amount;
|
|
34394
34447
|
const usdcAmountOnExtended = parseFloat(
|
|
34395
|
-
extendedHoldings.
|
|
34448
|
+
extendedHoldings.availableForWithdrawal
|
|
34396
34449
|
);
|
|
34397
|
-
if (extendedAmount.
|
|
34450
|
+
if (extendedAmount.minus(usdcAmountOnExtended).greaterThan(0)) {
|
|
34398
34451
|
try {
|
|
34399
34452
|
const { calls: extendedCalls } = await this.moveAssets(
|
|
34400
34453
|
{
|
|
34401
34454
|
to: Protocols.EXTENDED.name,
|
|
34402
34455
|
from: Protocols.VAULT.name,
|
|
34403
|
-
amount: extendedAmount.
|
|
34456
|
+
amount: extendedAmount.minus(usdcAmountOnExtended)
|
|
34404
34457
|
},
|
|
34405
34458
|
extendedAdapter,
|
|
34406
34459
|
vesuAdapter
|
|
@@ -34638,7 +34691,7 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
34638
34691
|
};
|
|
34639
34692
|
}
|
|
34640
34693
|
const extendedHoldingAmount = new Web3Number(
|
|
34641
|
-
extendedHoldings.
|
|
34694
|
+
extendedHoldings.availableForWithdrawal,
|
|
34642
34695
|
USDC_TOKEN_DECIMALS
|
|
34643
34696
|
);
|
|
34644
34697
|
const {
|
|
@@ -34698,7 +34751,6 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
34698
34751
|
extendedAmountInBTC: new Web3Number(0, 0),
|
|
34699
34752
|
calls: []
|
|
34700
34753
|
};
|
|
34701
|
-
;
|
|
34702
34754
|
}
|
|
34703
34755
|
}
|
|
34704
34756
|
async checkPriceDifferenceBetweenAvnuAndExtended(extendedAdapter, vesuAdapter, avnuAdapter) {
|
package/dist/index.mjs
CHANGED
|
@@ -28065,8 +28065,7 @@ var calculateAmountDistribution = async (amount, client, marketName, collateralP
|
|
|
28065
28065
|
vesu_leverage: 0
|
|
28066
28066
|
};
|
|
28067
28067
|
}
|
|
28068
|
-
const
|
|
28069
|
-
const extendedExposureUSD = extendedBTCExposure.multipliedBy(collateralPrice);
|
|
28068
|
+
const extendedExposureUSD = extendedPosition.length > 0 ? new Web3Number(extendedPosition[0].value, WBTC_TOKEN_DECIMALS) : new Web3Number(0, WBTC_TOKEN_DECIMALS);
|
|
28070
28069
|
const vesuBTCExposureUSD = collateralUnits.multipliedBy(collateralPrice);
|
|
28071
28070
|
const numerator1 = vesu_leverage * amount + vesuBTCExposureUSD.toNumber();
|
|
28072
28071
|
const numerator2 = extendedExposureUSD.toNumber();
|
|
@@ -29635,7 +29634,10 @@ var ExtendedAdapter = class _ExtendedAdapter extends BaseAdapter {
|
|
|
29635
29634
|
//abstract means the method has no implementation in this class; instead, child classes must implement it.
|
|
29636
29635
|
async getAPY(supportedPosition) {
|
|
29637
29636
|
const side = supportedPosition.isDebt ? "LONG" : "SHORT";
|
|
29638
|
-
const fundingRates = await this.client.getFundingRates(
|
|
29637
|
+
const fundingRates = await this.client.getFundingRates(
|
|
29638
|
+
this.config.extendedMarketName,
|
|
29639
|
+
side
|
|
29640
|
+
);
|
|
29639
29641
|
if (fundingRates.status !== "OK") {
|
|
29640
29642
|
logger.error("error getting funding rates", fundingRates);
|
|
29641
29643
|
return { apy: 0, type: "base" /* BASE */ };
|
|
@@ -29679,14 +29681,14 @@ var ExtendedAdapter = class _ExtendedAdapter extends BaseAdapter {
|
|
|
29679
29681
|
});
|
|
29680
29682
|
}
|
|
29681
29683
|
_getDepositLeaf() {
|
|
29682
|
-
const usdceToken = Global.getDefaultTokens().find(
|
|
29684
|
+
const usdceToken = Global.getDefaultTokens().find(
|
|
29685
|
+
(token) => token.symbol === "USDCe"
|
|
29686
|
+
);
|
|
29683
29687
|
return [
|
|
29684
29688
|
{
|
|
29685
29689
|
target: this.config.supportedPositions[0].asset.address,
|
|
29686
29690
|
method: "approve",
|
|
29687
|
-
packedArguments: [
|
|
29688
|
-
AVNU_EXCHANGE_FOR_LEGACY_USDC.toBigInt()
|
|
29689
|
-
],
|
|
29691
|
+
packedArguments: [AVNU_EXCHANGE_FOR_LEGACY_USDC.toBigInt()],
|
|
29690
29692
|
id: `extended_approve_${this.config.supportedPositions[0].asset.symbol}`,
|
|
29691
29693
|
sanitizer: AVNU_LEGACY_SANITIZER
|
|
29692
29694
|
},
|
|
@@ -29717,25 +29719,33 @@ var ExtendedAdapter = class _ExtendedAdapter extends BaseAdapter {
|
|
|
29717
29719
|
const leafConfigs = this._getSwapFromLegacyLeaf();
|
|
29718
29720
|
const leaves = leafConfigs.map((config) => {
|
|
29719
29721
|
const { target, method, packedArguments, sanitizer, id } = config;
|
|
29720
|
-
const leaf = this.constructSimpleLeafData(
|
|
29721
|
-
|
|
29722
|
-
|
|
29723
|
-
|
|
29724
|
-
|
|
29725
|
-
|
|
29722
|
+
const leaf = this.constructSimpleLeafData(
|
|
29723
|
+
{
|
|
29724
|
+
id,
|
|
29725
|
+
target,
|
|
29726
|
+
method,
|
|
29727
|
+
packedArguments
|
|
29728
|
+
},
|
|
29729
|
+
sanitizer
|
|
29730
|
+
);
|
|
29726
29731
|
return leaf;
|
|
29727
29732
|
});
|
|
29728
|
-
return {
|
|
29733
|
+
return {
|
|
29734
|
+
leaves,
|
|
29735
|
+
callConstructor: this.getSwapFromLegacyCall.bind(
|
|
29736
|
+
this
|
|
29737
|
+
)
|
|
29738
|
+
};
|
|
29729
29739
|
}
|
|
29730
29740
|
_getSwapFromLegacyLeaf() {
|
|
29731
|
-
const usdceToken = Global.getDefaultTokens().find(
|
|
29741
|
+
const usdceToken = Global.getDefaultTokens().find(
|
|
29742
|
+
(token) => token.symbol === "USDCe"
|
|
29743
|
+
);
|
|
29732
29744
|
return [
|
|
29733
29745
|
{
|
|
29734
29746
|
target: usdceToken.address,
|
|
29735
29747
|
method: "approve",
|
|
29736
|
-
packedArguments: [
|
|
29737
|
-
AVNU_EXCHANGE_FOR_LEGACY_USDC.toBigInt()
|
|
29738
|
-
],
|
|
29748
|
+
packedArguments: [AVNU_EXCHANGE_FOR_LEGACY_USDC.toBigInt()],
|
|
29739
29749
|
id: `extendedswaplegacyapprove_${usdceToken.symbol}`,
|
|
29740
29750
|
sanitizer: AVNU_LEGACY_SANITIZER
|
|
29741
29751
|
},
|
|
@@ -29754,11 +29764,13 @@ var ExtendedAdapter = class _ExtendedAdapter extends BaseAdapter {
|
|
|
29754
29764
|
async getDepositCall(params) {
|
|
29755
29765
|
try {
|
|
29756
29766
|
const usdcToken = this.config.supportedPositions[0].asset;
|
|
29757
|
-
const usdceToken = Global.getDefaultTokens().find(
|
|
29758
|
-
|
|
29759
|
-
|
|
29767
|
+
const usdceToken = Global.getDefaultTokens().find(
|
|
29768
|
+
(token) => token.symbol === "USDCe"
|
|
29769
|
+
);
|
|
29770
|
+
const salt = Math.floor(Math.random() * 10 ** usdcToken.decimals);
|
|
29771
|
+
const amount = uint25613.bnToUint256(
|
|
29772
|
+
params.amount.multipliedBy(10).toWei()
|
|
29760
29773
|
);
|
|
29761
|
-
const amount = uint25613.bnToUint256(params.amount.multipliedBy(10).toWei());
|
|
29762
29774
|
const quotes = await this.config.avnuAdapter.getQuotesAvnu(
|
|
29763
29775
|
usdcToken.address.toString(),
|
|
29764
29776
|
usdceToken.address.toString(),
|
|
@@ -29771,7 +29783,9 @@ var ExtendedAdapter = class _ExtendedAdapter extends BaseAdapter {
|
|
|
29771
29783
|
logger.error("error getting quotes from avnu");
|
|
29772
29784
|
return [];
|
|
29773
29785
|
}
|
|
29774
|
-
const getCalldata = await this.config.avnuAdapter.getSwapCallData(
|
|
29786
|
+
const getCalldata = await this.config.avnuAdapter.getSwapCallData(
|
|
29787
|
+
quotes
|
|
29788
|
+
);
|
|
29775
29789
|
const swapCallData = getCalldata[0];
|
|
29776
29790
|
return [
|
|
29777
29791
|
{
|
|
@@ -29847,8 +29861,12 @@ var ExtendedAdapter = class _ExtendedAdapter extends BaseAdapter {
|
|
|
29847
29861
|
async getSwapFromLegacyCall(params) {
|
|
29848
29862
|
try {
|
|
29849
29863
|
const usdcToken = this.config.supportedPositions[0].asset;
|
|
29850
|
-
const usdceToken = Global.getDefaultTokens().find(
|
|
29851
|
-
|
|
29864
|
+
const usdceToken = Global.getDefaultTokens().find(
|
|
29865
|
+
(token) => token.symbol === "USDCe"
|
|
29866
|
+
);
|
|
29867
|
+
const amount = uint25613.bnToUint256(
|
|
29868
|
+
params.amount.multipliedBy(10).toWei()
|
|
29869
|
+
);
|
|
29852
29870
|
const quotes = await this.config.avnuAdapter.getQuotesAvnu(
|
|
29853
29871
|
usdceToken.address.toString(),
|
|
29854
29872
|
usdcToken.address.toString(),
|
|
@@ -29861,7 +29879,9 @@ var ExtendedAdapter = class _ExtendedAdapter extends BaseAdapter {
|
|
|
29861
29879
|
logger.error("error getting quotes from avnu");
|
|
29862
29880
|
return [];
|
|
29863
29881
|
}
|
|
29864
|
-
const getCalldata = await this.config.avnuAdapter.getSwapCallData(
|
|
29882
|
+
const getCalldata = await this.config.avnuAdapter.getSwapCallData(
|
|
29883
|
+
quotes
|
|
29884
|
+
);
|
|
29865
29885
|
const swapCallData = getCalldata[0];
|
|
29866
29886
|
return [
|
|
29867
29887
|
{
|
|
@@ -29909,9 +29929,14 @@ var ExtendedAdapter = class _ExtendedAdapter extends BaseAdapter {
|
|
|
29909
29929
|
if (!this.client) {
|
|
29910
29930
|
throw new Error("Client not initialized");
|
|
29911
29931
|
}
|
|
29912
|
-
const withdrawalRequest = await this.client.withdrawUSDC(
|
|
29932
|
+
const withdrawalRequest = await this.client.withdrawUSDC(
|
|
29933
|
+
amount.toFixed(2)
|
|
29934
|
+
);
|
|
29913
29935
|
if (withdrawalRequest.status === "OK") {
|
|
29914
|
-
const withdrawalStatus = await this.getDepositOrWithdrawalStatus(
|
|
29936
|
+
const withdrawalStatus = await this.getDepositOrWithdrawalStatus(
|
|
29937
|
+
withdrawalRequest.data,
|
|
29938
|
+
"WITHDRAWAL" /* WITHDRAWAL */
|
|
29939
|
+
);
|
|
29915
29940
|
return withdrawalStatus;
|
|
29916
29941
|
}
|
|
29917
29942
|
return false;
|
|
@@ -29984,18 +30009,34 @@ var ExtendedAdapter = class _ExtendedAdapter extends BaseAdapter {
|
|
|
29984
30009
|
logger.error("error initializing client");
|
|
29985
30010
|
return null;
|
|
29986
30011
|
}
|
|
29987
|
-
|
|
29988
|
-
const orderhistory = await this.getOrderHistory(marketName);
|
|
30012
|
+
let orderhistory = await this.getOrderHistory(marketName);
|
|
29989
30013
|
if (!orderhistory || orderhistory.length === 0) {
|
|
29990
|
-
logger.error(`error getting order: ${orderId}`);
|
|
29991
|
-
|
|
30014
|
+
logger.error(`error getting order history: ${orderId}`);
|
|
30015
|
+
} else {
|
|
30016
|
+
const order = orderhistory.slice(0, 5).find((order2) => order2.id.toString() === orderId);
|
|
30017
|
+
if (order) {
|
|
30018
|
+
return order;
|
|
30019
|
+
}
|
|
29992
30020
|
}
|
|
29993
|
-
|
|
29994
|
-
|
|
29995
|
-
|
|
29996
|
-
|
|
30021
|
+
for (let attempt = 1; attempt <= 3; attempt++) {
|
|
30022
|
+
await new Promise((resolve) => setTimeout(resolve, 3e3));
|
|
30023
|
+
orderhistory = await this.getOrderHistory(marketName);
|
|
30024
|
+
if (!orderhistory || orderhistory.length === 0) {
|
|
30025
|
+
logger.error(
|
|
30026
|
+
`error getting order history on retry ${attempt}: ${orderId}`
|
|
30027
|
+
);
|
|
30028
|
+
continue;
|
|
30029
|
+
}
|
|
30030
|
+
const order = orderhistory.slice(0, 5).find((order2) => order2.id.toString() === orderId);
|
|
30031
|
+
if (order) {
|
|
30032
|
+
return order;
|
|
30033
|
+
}
|
|
30034
|
+
logger.error(
|
|
30035
|
+
`order not found in top 5 entries on retry ${attempt}: ${orderId}`
|
|
30036
|
+
);
|
|
29997
30037
|
}
|
|
29998
|
-
|
|
30038
|
+
logger.error(`error getting order after all retries: ${orderId}`);
|
|
30039
|
+
return null;
|
|
29999
30040
|
}
|
|
30000
30041
|
async fetchOrderBookBTCUSDC() {
|
|
30001
30042
|
try {
|
|
@@ -30068,7 +30109,10 @@ var ExtendedAdapter = class _ExtendedAdapter extends BaseAdapter {
|
|
|
30068
30109
|
return null;
|
|
30069
30110
|
}
|
|
30070
30111
|
await new Promise((resolve) => setTimeout(resolve, 5e3));
|
|
30071
|
-
const openOrder = await this.getOrderStatus(
|
|
30112
|
+
const openOrder = await this.getOrderStatus(
|
|
30113
|
+
result.position_id,
|
|
30114
|
+
this.config.extendedMarketName
|
|
30115
|
+
);
|
|
30072
30116
|
if (!openOrder || openOrder.status !== "FILLED" /* FILLED */) {
|
|
30073
30117
|
if (attempt >= maxAttempts) {
|
|
30074
30118
|
logger.error("Max retries reached \u2014 could not verify open position");
|
|
@@ -30091,7 +30135,9 @@ var ExtendedAdapter = class _ExtendedAdapter extends BaseAdapter {
|
|
|
30091
30135
|
};
|
|
30092
30136
|
}
|
|
30093
30137
|
} catch (err) {
|
|
30094
|
-
logger.error(
|
|
30138
|
+
logger.error(
|
|
30139
|
+
`createShortOrder failed on attempt ${attempt}: ${err.message}`
|
|
30140
|
+
);
|
|
30095
30141
|
if (attempt < maxAttempts) {
|
|
30096
30142
|
const backoff = 1200 * attempt;
|
|
30097
30143
|
logger.info(`Retrying after ${backoff}ms...`);
|
|
@@ -30136,13 +30182,17 @@ var ExtendedAdapter = class _ExtendedAdapter extends BaseAdapter {
|
|
|
30136
30182
|
operationsStatus: ["COMPLETED" /* COMPLETED */]
|
|
30137
30183
|
});
|
|
30138
30184
|
if (operationsType === "DEPOSIT" /* DEPOSIT */) {
|
|
30139
|
-
const myTransferStatus = transferHistory.data.find(
|
|
30185
|
+
const myTransferStatus = transferHistory.data.find(
|
|
30186
|
+
(operation) => operation.transactionHash === orderId
|
|
30187
|
+
);
|
|
30140
30188
|
if (!myTransferStatus) {
|
|
30141
30189
|
return true;
|
|
30142
30190
|
}
|
|
30143
30191
|
return true;
|
|
30144
30192
|
} else {
|
|
30145
|
-
const myTransferStatus = transferHistory.data.find(
|
|
30193
|
+
const myTransferStatus = transferHistory.data.find(
|
|
30194
|
+
(operation) => operation.id.toString() === orderId.toString()
|
|
30195
|
+
);
|
|
30146
30196
|
if (!myTransferStatus) {
|
|
30147
30197
|
return true;
|
|
30148
30198
|
}
|
|
@@ -33760,6 +33810,7 @@ var AvnuAdapter = class _AvnuAdapter extends BaseAdapter {
|
|
|
33760
33810
|
toToken.decimals,
|
|
33761
33811
|
true
|
|
33762
33812
|
);
|
|
33813
|
+
console.log(`${_AvnuAdapter.name}::getDepositCall quote: ${quote?.sellAmountInUsd}`);
|
|
33763
33814
|
if (!quote) {
|
|
33764
33815
|
logger.error("error getting quote from avnu");
|
|
33765
33816
|
return [];
|
|
@@ -33878,7 +33929,7 @@ var AvnuAdapter = class _AvnuAdapter extends BaseAdapter {
|
|
|
33878
33929
|
}
|
|
33879
33930
|
throw new Error("Failed to fetch quote after retries");
|
|
33880
33931
|
}
|
|
33881
|
-
async getQuotesAvnu(from_token_address, to_token_address, amount, takerAddress, toTokenDecimals, usdcToBtc, maxIterations = 5, tolerance =
|
|
33932
|
+
async getQuotesAvnu(from_token_address, to_token_address, amount, takerAddress, toTokenDecimals, usdcToBtc, maxIterations = 5, tolerance = 5e3) {
|
|
33882
33933
|
try {
|
|
33883
33934
|
const fromToken = this.config.supportedPositions[0].asset;
|
|
33884
33935
|
const toToken = this.config.supportedPositions[1].asset;
|
|
@@ -34118,7 +34169,8 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
34118
34169
|
}
|
|
34119
34170
|
const balance = await this.getUnusedBalance();
|
|
34120
34171
|
const usdcBalanceOnExtended = await extendedAdapter.getExtendedDepositAmount();
|
|
34121
|
-
const amountToInvest = balance.
|
|
34172
|
+
const amountToInvest = new Web3Number(balance.usdValue, USDC_TOKEN_DECIMALS).plus(usdcBalanceOnExtended?.availableForWithdrawal ?? 0).minus(LIMIT_BALANCE);
|
|
34173
|
+
logger.info(`${_VesuExtendedMultiplierStrategy.name}::shouldInvest amountToInvest: ${amountToInvest.toNumber()}`);
|
|
34122
34174
|
if (amountToInvest.lessThan(0)) {
|
|
34123
34175
|
return {
|
|
34124
34176
|
shouldInvest: false,
|
|
@@ -34171,6 +34223,7 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
34171
34223
|
vesuLeverage: 0
|
|
34172
34224
|
};
|
|
34173
34225
|
}
|
|
34226
|
+
logger.info(`${_VesuExtendedMultiplierStrategy.name}::shouldInvest vesu_amount: ${vesu_amount.toNumber()}, extended_amount: ${extended_amount.toNumber()}`);
|
|
34174
34227
|
return {
|
|
34175
34228
|
shouldInvest: true,
|
|
34176
34229
|
vesuAmount: vesu_amount,
|
|
@@ -34250,15 +34303,15 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
34250
34303
|
}
|
|
34251
34304
|
const usdcAmountInWallet = (await this.getUnusedBalance()).amount;
|
|
34252
34305
|
const usdcAmountOnExtended = parseFloat(
|
|
34253
|
-
extendedHoldings.
|
|
34306
|
+
extendedHoldings.availableForWithdrawal
|
|
34254
34307
|
);
|
|
34255
|
-
if (extendedAmount.
|
|
34308
|
+
if (extendedAmount.minus(usdcAmountOnExtended).greaterThan(0)) {
|
|
34256
34309
|
try {
|
|
34257
34310
|
const { calls: extendedCalls } = await this.moveAssets(
|
|
34258
34311
|
{
|
|
34259
34312
|
to: Protocols.EXTENDED.name,
|
|
34260
34313
|
from: Protocols.VAULT.name,
|
|
34261
|
-
amount: extendedAmount.
|
|
34314
|
+
amount: extendedAmount.minus(usdcAmountOnExtended)
|
|
34262
34315
|
},
|
|
34263
34316
|
extendedAdapter,
|
|
34264
34317
|
vesuAdapter
|
|
@@ -34496,7 +34549,7 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
34496
34549
|
};
|
|
34497
34550
|
}
|
|
34498
34551
|
const extendedHoldingAmount = new Web3Number(
|
|
34499
|
-
extendedHoldings.
|
|
34552
|
+
extendedHoldings.availableForWithdrawal,
|
|
34500
34553
|
USDC_TOKEN_DECIMALS
|
|
34501
34554
|
);
|
|
34502
34555
|
const {
|
|
@@ -34556,7 +34609,6 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
34556
34609
|
extendedAmountInBTC: new Web3Number(0, 0),
|
|
34557
34610
|
calls: []
|
|
34558
34611
|
};
|
|
34559
|
-
;
|
|
34560
34612
|
}
|
|
34561
34613
|
}
|
|
34562
34614
|
async checkPriceDifferenceBetweenAvnuAndExtended(extendedAdapter, vesuAdapter, avnuAdapter) {
|
package/package.json
CHANGED
|
@@ -303,7 +303,7 @@ export class AvnuAdapter extends BaseAdapter<DepositParams, WithdrawParams> {
|
|
|
303
303
|
toTokenDecimals: number,
|
|
304
304
|
usdcToBtc: boolean,
|
|
305
305
|
maxIterations: number = 5,
|
|
306
|
-
tolerance: number =
|
|
306
|
+
tolerance: number = 5000
|
|
307
307
|
): Promise<Quote | null>{
|
|
308
308
|
try {
|
|
309
309
|
const fromToken = this.config.supportedPositions[0].asset;
|