@shapeshiftoss/swapper 20.2.0 → 20.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/.tsbuildinfo +1 -1
- package/dist/cjs/swappers/BobGatewaySwapper/BobGatewaySwapper.js +10 -1
- package/dist/cjs/swappers/BobGatewaySwapper/endpoints.js +2 -33
- package/dist/cjs/swappers/BobGatewaySwapper/swapperApi/getTradeQuote.js +5 -8
- package/dist/cjs/swappers/BobGatewaySwapper/swapperApi/getTradeRate.js +1 -2
- package/dist/cjs/swappers/BobGatewaySwapper/types.d.ts +3 -3
- package/dist/cjs/swappers/BobGatewaySwapper/utils/constants.d.ts +3 -2
- package/dist/cjs/swappers/BobGatewaySwapper/utils/constants.js +8 -5
- package/dist/cjs/swappers/BobGatewaySwapper/utils/getBobGatewayStepData.d.ts +2 -2
- package/dist/cjs/swappers/BobGatewaySwapper/utils/getBobGatewayStepData.js +30 -34
- package/dist/cjs/swappers/BobGatewaySwapper/utils/getBobGatewayStepData.test.d.ts +1 -0
- package/dist/cjs/swappers/BobGatewaySwapper/utils/getBobGatewayStepData.test.js +117 -0
- package/dist/cjs/swappers/BobGatewaySwapper/utils/getBobGatewayTradeContext.js +1 -2
- package/dist/cjs/swappers/BobGatewaySwapper/utils/helpers.d.ts +8 -11
- package/dist/cjs/swappers/BobGatewaySwapper/utils/helpers.js +36 -31
- package/dist/cjs/swappers/ButterSwap/swapperApi/getTradeQuote.js +2 -3
- package/dist/cjs/swappers/ButterSwap/types.d.ts +0 -11
- package/dist/cjs/swappers/ButterSwap/utils/constants.d.ts +2 -0
- package/dist/cjs/swappers/ButterSwap/utils/constants.js +4 -1
- package/dist/cjs/swappers/ButterSwap/utils/getButterSwapStepData.d.ts +2 -3
- package/dist/cjs/swappers/ButterSwap/utils/getButterSwapStepData.js +42 -14
- package/dist/cjs/swappers/ButterSwap/utils/getButterSwapStepData.test.js +120 -17
- package/dist/cjs/swappers/ButterSwap/utils/helpers.js +1 -2
- package/dist/cjs/swappers/ButterSwap/xhr.js +3 -3
- package/dist/cjs/swappers/ChainflipSwapper/endpoints.js +3 -19
- package/dist/cjs/swappers/ChainflipSwapper/utils/getChainflipStepData.d.ts +1 -1
- package/dist/cjs/swappers/ChainflipSwapper/utils/getChainflipStepData.js +31 -12
- package/dist/cjs/swappers/NearIntentsSwapper/constants.d.ts +1 -0
- package/dist/cjs/swappers/NearIntentsSwapper/constants.js +3 -1
- package/dist/cjs/swappers/NearIntentsSwapper/utils/getNearIntentsStepData.js +10 -5
- package/dist/cjs/swappers/NearIntentsSwapper/utils/helpers.js +1 -1
- package/dist/cjs/swappers/RelaySwapper/constant.d.ts +1 -1
- package/dist/cjs/swappers/RelaySwapper/constant.js +3 -2
- package/dist/cjs/swappers/RelaySwapper/getTradeQuote/getTradeQuote.js +1 -2
- package/dist/cjs/swappers/RelaySwapper/utils/getRelayAssetAddress.js +2 -1
- package/dist/cjs/swappers/RelaySwapper/utils/getRelayStepData.d.ts +2 -3
- package/dist/cjs/swappers/RelaySwapper/utils/getRelayStepData.js +46 -13
- package/dist/cjs/swappers/RelaySwapper/utils/getRelayStepData.test.d.ts +1 -0
- package/dist/cjs/swappers/RelaySwapper/utils/getRelayStepData.test.js +139 -0
- package/dist/cjs/swappers/RelaySwapper/utils/helpers.js +1 -2
- package/dist/cjs/swappers/RelaySwapper/utils/relayTokenToAssetId.js +1 -1
- package/dist/cjs/swappers/RelaySwapper/utils/types.d.ts +1 -4
- package/dist/cjs/swappers/SunioSwapper/endpoints.js +3 -63
- package/dist/cjs/swappers/SunioSwapper/getSunioTradeQuote/getSunioTradeQuote.js +3 -4
- package/dist/cjs/swappers/SunioSwapper/getSunioTradeRate/getSunioTradeRate.js +7 -1
- package/dist/cjs/swappers/SunioSwapper/types.d.ts +0 -3
- package/dist/cjs/swappers/SunioSwapper/utils/buildSwapContractCall.d.ts +11 -6
- package/dist/cjs/swappers/SunioSwapper/utils/buildSwapContractCall.js +33 -30
- package/dist/cjs/swappers/SunioSwapper/utils/constants.d.ts +3 -3
- package/dist/cjs/swappers/SunioSwapper/utils/constants.js +5 -9
- package/dist/cjs/swappers/SunioSwapper/utils/getSunioStepData.d.ts +8 -3
- package/dist/cjs/swappers/SunioSwapper/utils/getSunioStepData.js +54 -20
- package/dist/cjs/swappers/SunioSwapper/utils/getSunioStepData.test.d.ts +1 -0
- package/dist/cjs/swappers/SunioSwapper/utils/getSunioStepData.test.js +177 -0
- package/dist/cjs/swappers/SunioSwapper/utils/getSunioTradeContext.js +3 -2
- package/dist/cjs/swappers/SunioSwapper/utils/helpers.js +2 -1
- package/dist/cjs/swappers/ThorchainSwapper/endpoints.js +3 -4
- package/dist/cjs/swappers/ThorchainSwapper/utils/addL1ToLongtailPartsToMemo/addL1ToLongtailPartsToMemo.js +6 -1
- package/dist/cjs/swappers/ThorchainSwapper/utils/addL1ToLongtailPartsToMemo/addL1ToLongtailPartsToMemo.test.js +15 -0
- package/dist/cjs/swappers/ThorchainSwapper/utils/assertValidLongtailTrade.js +7 -0
- package/dist/cjs/swappers/ThorchainSwapper/utils/getL1ToLongtailQuote.js +0 -2
- package/dist/cjs/swappers/ThorchainSwapper/utils/getL1ToLongtailRate.js +0 -2
- package/dist/cjs/swappers/ThorchainSwapper/utils/getUniqueAddressSubstring/getUniqueAddressSubstring.d.ts +1 -1
- package/dist/cjs/swappers/ThorchainSwapper/utils/getUniqueAddressSubstring/getUniqueAddressSubstring.js +17 -20
- package/dist/cjs/swappers/ThorchainSwapper/utils/getUniqueAddressSubstring/getUniqueAddressSubstring.test.js +31 -0
- package/dist/cjs/types.d.ts +9 -8
- package/dist/cjs/utils/thorchain/getThorStepData.js +32 -49
- package/dist/cjs/utils/thorchain/getThorStepData.tron.test.d.ts +1 -0
- package/dist/cjs/utils/thorchain/getThorStepData.tron.test.js +93 -0
- package/dist/cjs/utils/thorchain/index.d.ts +0 -1
- package/dist/cjs/utils/thorchain/index.js +1 -14
- package/dist/cjs/utils/tron/constants.d.ts +1 -0
- package/dist/cjs/utils/tron/constants.js +5 -0
- package/dist/cjs/utils/tron/getTronNetworkFeeCryptoBaseUnit.d.ts +27 -0
- package/dist/cjs/utils/tron/getTronNetworkFeeCryptoBaseUnit.js +64 -0
- package/dist/cjs/utils/tron/getTronNetworkFeeCryptoBaseUnit.test.d.ts +1 -0
- package/dist/cjs/utils/tron/getTronNetworkFeeCryptoBaseUnit.test.js +157 -0
- package/dist/cjs/utils/tron/getUnsignedTronTransaction.d.ts +2 -1
- package/dist/cjs/utils/tron/getUnsignedTronTransaction.js +14 -48
- package/dist/cjs/utils/tron/getUnsignedTronTransaction.test.d.ts +1 -0
- package/dist/cjs/utils/tron/getUnsignedTronTransaction.test.js +76 -0
- package/dist/cjs/utils/tron/index.d.ts +2 -0
- package/dist/cjs/utils/tron/index.js +2 -0
- package/dist/esm/.tsbuildinfo +1 -1
- package/dist/esm/swappers/BobGatewaySwapper/BobGatewaySwapper.js +11 -2
- package/dist/esm/swappers/BobGatewaySwapper/endpoints.js +5 -36
- package/dist/esm/swappers/BobGatewaySwapper/swapperApi/getTradeQuote.js +5 -8
- package/dist/esm/swappers/BobGatewaySwapper/swapperApi/getTradeRate.js +1 -2
- package/dist/esm/swappers/BobGatewaySwapper/types.d.ts +3 -3
- package/dist/esm/swappers/BobGatewaySwapper/utils/constants.d.ts +3 -2
- package/dist/esm/swappers/BobGatewaySwapper/utils/constants.js +8 -7
- package/dist/esm/swappers/BobGatewaySwapper/utils/getBobGatewayStepData.d.ts +2 -2
- package/dist/esm/swappers/BobGatewaySwapper/utils/getBobGatewayStepData.js +21 -25
- package/dist/esm/swappers/BobGatewaySwapper/utils/getBobGatewayStepData.test.d.ts +1 -0
- package/dist/esm/swappers/BobGatewaySwapper/utils/getBobGatewayStepData.test.js +115 -0
- package/dist/esm/swappers/BobGatewaySwapper/utils/getBobGatewayTradeContext.js +1 -2
- package/dist/esm/swappers/BobGatewaySwapper/utils/helpers.d.ts +8 -11
- package/dist/esm/swappers/BobGatewaySwapper/utils/helpers.js +13 -30
- package/dist/esm/swappers/ButterSwap/swapperApi/getTradeQuote.js +2 -3
- package/dist/esm/swappers/ButterSwap/types.d.ts +0 -11
- package/dist/esm/swappers/ButterSwap/utils/constants.d.ts +2 -0
- package/dist/esm/swappers/ButterSwap/utils/constants.js +3 -0
- package/dist/esm/swappers/ButterSwap/utils/getButterSwapStepData.d.ts +2 -3
- package/dist/esm/swappers/ButterSwap/utils/getButterSwapStepData.js +42 -14
- package/dist/esm/swappers/ButterSwap/utils/getButterSwapStepData.test.js +120 -17
- package/dist/esm/swappers/ButterSwap/utils/helpers.js +1 -2
- package/dist/esm/swappers/ButterSwap/xhr.js +3 -3
- package/dist/esm/swappers/ChainflipSwapper/endpoints.js +3 -19
- package/dist/esm/swappers/ChainflipSwapper/utils/getChainflipStepData.d.ts +1 -1
- package/dist/esm/swappers/ChainflipSwapper/utils/getChainflipStepData.js +32 -13
- package/dist/esm/swappers/NearIntentsSwapper/constants.d.ts +1 -0
- package/dist/esm/swappers/NearIntentsSwapper/constants.js +2 -0
- package/dist/esm/swappers/NearIntentsSwapper/utils/getNearIntentsStepData.js +10 -5
- package/dist/esm/swappers/NearIntentsSwapper/utils/helpers.js +2 -2
- package/dist/esm/swappers/RelaySwapper/constant.d.ts +1 -1
- package/dist/esm/swappers/RelaySwapper/constant.js +2 -1
- package/dist/esm/swappers/RelaySwapper/getTradeQuote/getTradeQuote.js +1 -2
- package/dist/esm/swappers/RelaySwapper/utils/getRelayAssetAddress.js +3 -2
- package/dist/esm/swappers/RelaySwapper/utils/getRelayStepData.d.ts +2 -3
- package/dist/esm/swappers/RelaySwapper/utils/getRelayStepData.js +46 -13
- package/dist/esm/swappers/RelaySwapper/utils/getRelayStepData.test.d.ts +1 -0
- package/dist/esm/swappers/RelaySwapper/utils/getRelayStepData.test.js +137 -0
- package/dist/esm/swappers/RelaySwapper/utils/helpers.js +1 -2
- package/dist/esm/swappers/RelaySwapper/utils/relayTokenToAssetId.js +3 -3
- package/dist/esm/swappers/RelaySwapper/utils/types.d.ts +1 -4
- package/dist/esm/swappers/SunioSwapper/endpoints.js +5 -65
- package/dist/esm/swappers/SunioSwapper/getSunioTradeQuote/getSunioTradeQuote.js +3 -4
- package/dist/esm/swappers/SunioSwapper/getSunioTradeRate/getSunioTradeRate.js +7 -1
- package/dist/esm/swappers/SunioSwapper/types.d.ts +0 -3
- package/dist/esm/swappers/SunioSwapper/utils/buildSwapContractCall.d.ts +11 -6
- package/dist/esm/swappers/SunioSwapper/utils/buildSwapContractCall.js +31 -28
- package/dist/esm/swappers/SunioSwapper/utils/constants.d.ts +3 -3
- package/dist/esm/swappers/SunioSwapper/utils/constants.js +4 -8
- package/dist/esm/swappers/SunioSwapper/utils/getSunioStepData.d.ts +8 -3
- package/dist/esm/swappers/SunioSwapper/utils/getSunioStepData.js +52 -18
- package/dist/esm/swappers/SunioSwapper/utils/getSunioStepData.test.d.ts +1 -0
- package/dist/esm/swappers/SunioSwapper/utils/getSunioStepData.test.js +175 -0
- package/dist/esm/swappers/SunioSwapper/utils/getSunioTradeContext.js +2 -1
- package/dist/esm/swappers/SunioSwapper/utils/helpers.js +3 -2
- package/dist/esm/swappers/ThorchainSwapper/endpoints.js +4 -5
- package/dist/esm/swappers/ThorchainSwapper/utils/addL1ToLongtailPartsToMemo/addL1ToLongtailPartsToMemo.js +6 -1
- package/dist/esm/swappers/ThorchainSwapper/utils/addL1ToLongtailPartsToMemo/addL1ToLongtailPartsToMemo.test.js +15 -0
- package/dist/esm/swappers/ThorchainSwapper/utils/assertValidLongtailTrade.js +7 -0
- package/dist/esm/swappers/ThorchainSwapper/utils/getL1ToLongtailQuote.js +0 -2
- package/dist/esm/swappers/ThorchainSwapper/utils/getL1ToLongtailRate.js +0 -2
- package/dist/esm/swappers/ThorchainSwapper/utils/getUniqueAddressSubstring/getUniqueAddressSubstring.d.ts +1 -1
- package/dist/esm/swappers/ThorchainSwapper/utils/getUniqueAddressSubstring/getUniqueAddressSubstring.js +17 -20
- package/dist/esm/swappers/ThorchainSwapper/utils/getUniqueAddressSubstring/getUniqueAddressSubstring.test.js +29 -1
- package/dist/esm/types.d.ts +9 -8
- package/dist/esm/utils/thorchain/getThorStepData.js +32 -49
- package/dist/esm/utils/thorchain/getThorStepData.tron.test.d.ts +1 -0
- package/dist/esm/utils/thorchain/getThorStepData.tron.test.js +91 -0
- package/dist/esm/utils/thorchain/index.d.ts +0 -1
- package/dist/esm/utils/thorchain/index.js +0 -1
- package/dist/esm/utils/tron/constants.d.ts +1 -0
- package/dist/esm/utils/tron/constants.js +2 -0
- package/dist/esm/utils/tron/getTronNetworkFeeCryptoBaseUnit.d.ts +27 -0
- package/dist/esm/utils/tron/getTronNetworkFeeCryptoBaseUnit.js +59 -0
- package/dist/esm/utils/tron/getTronNetworkFeeCryptoBaseUnit.test.d.ts +1 -0
- package/dist/esm/utils/tron/getTronNetworkFeeCryptoBaseUnit.test.js +155 -0
- package/dist/esm/utils/tron/getUnsignedTronTransaction.d.ts +2 -1
- package/dist/esm/utils/tron/getUnsignedTronTransaction.js +14 -48
- package/dist/esm/utils/tron/getUnsignedTronTransaction.test.d.ts +1 -0
- package/dist/esm/utils/tron/getUnsignedTronTransaction.test.js +74 -0
- package/dist/esm/utils/tron/index.d.ts +2 -0
- package/dist/esm/utils/tron/index.js +2 -0
- package/package.json +8 -8
- package/dist/cjs/swappers/SunioSwapper/utils/buildSwapRouteParameters.d.ts +0 -14
- package/dist/cjs/swappers/SunioSwapper/utils/buildSwapRouteParameters.js +0 -32
- package/dist/cjs/swappers/SunioSwapper/utils/estimateSunioNetworkFee.d.ts +0 -12
- package/dist/cjs/swappers/SunioSwapper/utils/estimateSunioNetworkFee.js +0 -78
- package/dist/cjs/swappers/SunioSwapper/utils/getSunioTransactionFees.d.ts +0 -2
- package/dist/cjs/swappers/SunioSwapper/utils/getSunioTransactionFees.js +0 -36
- package/dist/cjs/utils/thorchain/tron/getTronTransactionFees.d.ts +0 -2
- package/dist/cjs/utils/thorchain/tron/getTronTransactionFees.js +0 -68
- package/dist/cjs/utils/thorchain/tron/getUnsignedTronTransaction.d.ts +0 -3
- package/dist/cjs/utils/thorchain/tron/getUnsignedTronTransaction.js +0 -35
- package/dist/cjs/utils/thorchain/tron/index.d.ts +0 -2
- package/dist/cjs/utils/thorchain/tron/index.js +0 -18
- package/dist/esm/swappers/SunioSwapper/utils/buildSwapRouteParameters.d.ts +0 -14
- package/dist/esm/swappers/SunioSwapper/utils/buildSwapRouteParameters.js +0 -28
- package/dist/esm/swappers/SunioSwapper/utils/estimateSunioNetworkFee.d.ts +0 -12
- package/dist/esm/swappers/SunioSwapper/utils/estimateSunioNetworkFee.js +0 -74
- package/dist/esm/swappers/SunioSwapper/utils/getSunioTransactionFees.d.ts +0 -2
- package/dist/esm/swappers/SunioSwapper/utils/getSunioTransactionFees.js +0 -32
- package/dist/esm/utils/thorchain/tron/getTronTransactionFees.d.ts +0 -2
- package/dist/esm/utils/thorchain/tron/getTronTransactionFees.js +0 -64
- package/dist/esm/utils/thorchain/tron/getUnsignedTronTransaction.d.ts +0 -3
- package/dist/esm/utils/thorchain/tron/getUnsignedTronTransaction.js +0 -31
- package/dist/esm/utils/thorchain/tron/index.d.ts +0 -2
- package/dist/esm/utils/thorchain/tron/index.js +0 -2
- /package/dist/cjs/swappers/SunioSwapper/utils/{fetchFromSunio.d.ts → fetchSunioQuote.d.ts} +0 -0
- /package/dist/cjs/swappers/SunioSwapper/utils/{fetchFromSunio.js → fetchSunioQuote.js} +0 -0
- /package/dist/esm/swappers/SunioSwapper/utils/{fetchFromSunio.d.ts → fetchSunioQuote.d.ts} +0 -0
- /package/dist/esm/swappers/SunioSwapper/utils/{fetchFromSunio.js → fetchSunioQuote.js} +0 -0
package/dist/cjs/types.d.ts
CHANGED
|
@@ -12,14 +12,12 @@ import type { InterpolationOptions } from 'node-polyglot';
|
|
|
12
12
|
import type { AvnuMetadata } from './swappers/AvnuSwapper/types';
|
|
13
13
|
import type { BebopMetadata } from './swappers/BebopSwapper/types';
|
|
14
14
|
import type { BobGatewayMetadata } from './swappers/BobGatewaySwapper/types';
|
|
15
|
-
import type { ButterSwapTransactionMetadata } from './swappers/ButterSwap/types';
|
|
16
15
|
import type { ChainflipMetadata } from './swappers/ChainflipSwapper/types';
|
|
17
16
|
import type { CowMessageToSign } from './swappers/CowSwapper/types';
|
|
18
17
|
import type { DebridgeMetadata } from './swappers/DebridgeSwapper/utils/types';
|
|
19
18
|
import type { NearIntentsMetadata } from './swappers/NearIntentsSwapper/types';
|
|
20
|
-
import type { RelayMetadata
|
|
19
|
+
import type { RelayMetadata } from './swappers/RelaySwapper/utils/types';
|
|
21
20
|
import type { StonfiMetadata, StonfiTransactionData } from './swappers/StonfiSwapper/types';
|
|
22
|
-
import type { SunioTransactionData } from './swappers/SunioSwapper/types';
|
|
23
21
|
import type { makeSwapperAxiosServiceMonadic } from './utils';
|
|
24
22
|
import type { MayachainMetadata, ThorchainMetadata } from './utils/thorchain/types';
|
|
25
23
|
export type SwapperConfig = {
|
|
@@ -323,8 +321,9 @@ export type TxBuildData = {
|
|
|
323
321
|
} | {
|
|
324
322
|
type: 'tron';
|
|
325
323
|
to: string;
|
|
326
|
-
data: string;
|
|
327
324
|
value: string;
|
|
325
|
+
data?: string;
|
|
326
|
+
memo?: string;
|
|
328
327
|
} | {
|
|
329
328
|
type: 'cowswap';
|
|
330
329
|
chainId: ChainId;
|
|
@@ -344,9 +343,6 @@ export type TradeStepCommon = {
|
|
|
344
343
|
estimatedExecutionTimeMs: number | undefined;
|
|
345
344
|
swapperMetadata?: SwapperMetadata;
|
|
346
345
|
stonfiTransactionData?: StonfiTransactionData;
|
|
347
|
-
sunioTransactionData?: SunioTransactionData;
|
|
348
|
-
relayTransactionMetadata?: RelayTransactionMetadata;
|
|
349
|
-
butterSwapTransactionMetadata?: ButterSwapTransactionMetadata;
|
|
350
346
|
chainflipSpecific?: {
|
|
351
347
|
depositAddress?: string;
|
|
352
348
|
};
|
|
@@ -477,6 +473,11 @@ export type EvmMessageExecutionProps = {
|
|
|
477
473
|
};
|
|
478
474
|
export type UtxoTransactionExecutionProps = {
|
|
479
475
|
signAndBroadcastTransaction: (txToSign: SignTx<UtxoChainId>) => Promise<string>;
|
|
476
|
+
signTransaction?: (txToSign: SignTx<UtxoChainId>) => Promise<string>;
|
|
477
|
+
};
|
|
478
|
+
export type UtxoTransactionExecutionContext = {
|
|
479
|
+
config: SwapperConfig;
|
|
480
|
+
swapperMetadata: SwapperMetadata | undefined;
|
|
480
481
|
};
|
|
481
482
|
export type CosmosSdkTransactionExecutionProps = {
|
|
482
483
|
signAndBroadcastTransaction: (txToSign: SignTx<CosmosSdkChainId>) => Promise<string>;
|
|
@@ -587,7 +588,7 @@ export type Swapper = {
|
|
|
587
588
|
supportsExternalPayment?: boolean;
|
|
588
589
|
executeEvmTransaction?: (txToSign: SignTx<EvmChainId>, callbacks: EvmTransactionExecutionProps) => Promise<string>;
|
|
589
590
|
executeEvmMessage?: (txMetaToSign: EvmMessageToSign, callbacks: EvmMessageExecutionProps, config: SwapperConfig) => Promise<string>;
|
|
590
|
-
executeUtxoTransaction?: (txToSign: SignTx<UtxoChainId>, callbacks: UtxoTransactionExecutionProps) => Promise<string>;
|
|
591
|
+
executeUtxoTransaction?: (txToSign: SignTx<UtxoChainId>, callbacks: UtxoTransactionExecutionProps, context?: UtxoTransactionExecutionContext) => Promise<string>;
|
|
591
592
|
executeCosmosSdkTransaction?: (txToSign: SignTx<CosmosSdkChainId>, callbacks: CosmosSdkTransactionExecutionProps) => Promise<string>;
|
|
592
593
|
executeSolanaTransaction?: (txToSign: SolanaSignTx, callbacks: SolanaTransactionExecutionProps) => Promise<string>;
|
|
593
594
|
executeSolanaMessage?: (messageData: SolanaMessageToSign, callbacks: SolanaMessageExecutionProps, config: SwapperConfig) => Promise<string>;
|
|
@@ -5,7 +5,6 @@ const caip_1 = require("@shapeshiftoss/caip");
|
|
|
5
5
|
const contracts_1 = require("@shapeshiftoss/contracts");
|
|
6
6
|
const utils_1 = require("@shapeshiftoss/utils");
|
|
7
7
|
const monads_1 = require("@sniptt/monads");
|
|
8
|
-
const tronweb_1 = require("tronweb");
|
|
9
8
|
const viem_1 = require("viem");
|
|
10
9
|
const types_1 = require("../../types");
|
|
11
10
|
const utils_2 = require("../../utils");
|
|
@@ -272,58 +271,42 @@ async function getThorStepData({ type, input, from, deps, swapperName, tradeType
|
|
|
272
271
|
}
|
|
273
272
|
case caip_1.CHAIN_NAMESPACE.Tron: {
|
|
274
273
|
const { vault } = await (0, getThorTxData_1.getThorTxData)({ sellAsset, config, swapperName });
|
|
275
|
-
const
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
const bandwidthPrice = params.find(p => p.key === 'getTransactionFee')?.value ?? 1000;
|
|
291
|
-
const energyPrice = params.find(p => p.key === 'getEnergyFee')?.value ?? 100;
|
|
292
|
-
if (contractAddress) {
|
|
293
|
-
// TRC20: Estimate energy with actual recipient
|
|
294
|
-
try {
|
|
295
|
-
const result = await tronWeb.transactionBuilder.triggerConstantContract(contractAddress, 'transfer(address,uint256)', {}, [
|
|
296
|
-
{ type: 'address', value: vault },
|
|
297
|
-
{ type: 'uint256', value: sellAmountCryptoBaseUnit },
|
|
298
|
-
], input.receiveAddress);
|
|
299
|
-
const energyUsed = result.energy_used ?? 65000;
|
|
300
|
-
const energyFee = energyUsed * energyPrice * 1.5; // 1.5x safety margin
|
|
301
|
-
const bandwidthFee = 276 * bandwidthPrice; // TRC20 bandwidth
|
|
302
|
-
return String(Math.ceil(energyFee + bandwidthFee));
|
|
303
|
-
}
|
|
304
|
-
catch {
|
|
305
|
-
// Fallback: Conservative estimate
|
|
306
|
-
return String(13_000_000); // 13 TRX worst case
|
|
307
|
-
}
|
|
308
|
-
}
|
|
309
|
-
// TRX transfer bandwidth: Base tx + memo bytes
|
|
310
|
-
const baseBytes = 198;
|
|
311
|
-
const memoBytes = rawMemo ? Buffer.from(rawMemo, 'utf8').length : 0;
|
|
312
|
-
const totalBandwidth = baseBytes + memoBytes;
|
|
313
|
-
return String(totalBandwidth * bandwidthPrice);
|
|
314
|
-
}
|
|
315
|
-
catch {
|
|
316
|
-
// Leave as undefined if estimation fails
|
|
317
|
-
return undefined;
|
|
318
|
-
}
|
|
319
|
-
})();
|
|
274
|
+
const adapter = deps.assertGetTronChainAdapter(sellAsset.chainId);
|
|
275
|
+
const contractAddress = (0, utils_1.contractAddressOrUndefined)(sellAsset.assetId);
|
|
276
|
+
const estimate = async (txMemo) => {
|
|
277
|
+
const { fast } = await adapter.getFeeData({
|
|
278
|
+
to: vault,
|
|
279
|
+
value: sellAmountCryptoBaseUnit,
|
|
280
|
+
chainSpecific: {
|
|
281
|
+
from,
|
|
282
|
+
contractAddress,
|
|
283
|
+
memo: txMemo,
|
|
284
|
+
requireEnergyShare: type === 'quote',
|
|
285
|
+
},
|
|
286
|
+
});
|
|
287
|
+
return fast.txFee;
|
|
288
|
+
};
|
|
320
289
|
if (type === 'rate') {
|
|
290
|
+
// Rates size the memo with the raw thornode memo (processed memo is '' for rates)
|
|
291
|
+
const networkFeeCryptoBaseUnit = await (async () => {
|
|
292
|
+
try {
|
|
293
|
+
return await estimate(rawMemo);
|
|
294
|
+
}
|
|
295
|
+
catch { }
|
|
296
|
+
})();
|
|
321
297
|
const stepData = { networkFeeCryptoBaseUnit };
|
|
322
298
|
return (0, monads_1.Ok)(stepData);
|
|
323
299
|
}
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
300
|
+
try {
|
|
301
|
+
const stepData = {
|
|
302
|
+
transactionData: { type: 'tron', to: vault, value: sellAmountCryptoBaseUnit, memo },
|
|
303
|
+
networkFeeCryptoBaseUnit: await estimate(memo),
|
|
304
|
+
};
|
|
305
|
+
return (0, monads_1.Ok)(stepData);
|
|
306
|
+
}
|
|
307
|
+
catch (error) {
|
|
308
|
+
return (0, monads_1.Err)((0, utils_2.makeNetworkFeeEstimationFailedErr)('getThorStepData', error));
|
|
309
|
+
}
|
|
327
310
|
}
|
|
328
311
|
default:
|
|
329
312
|
return (0, monads_1.Err)((0, utils_2.makeSwapErrorRight)({
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const caip_1 = require("@shapeshiftoss/caip");
|
|
4
|
+
const vitest_1 = require("vitest");
|
|
5
|
+
const types_1 = require("../../types");
|
|
6
|
+
const assets_1 = require("../test-data/assets");
|
|
7
|
+
const getThorStepData_1 = require("./getThorStepData");
|
|
8
|
+
const types_2 = require("./types");
|
|
9
|
+
vitest_1.vi.mock('./getThorTxData', () => ({
|
|
10
|
+
getThorTxData: vitest_1.vi.fn().mockResolvedValue({ vault: 'TVault' }),
|
|
11
|
+
getThorRouterAndVault: vitest_1.vi.fn(),
|
|
12
|
+
}));
|
|
13
|
+
const USDT = 'TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t';
|
|
14
|
+
const USDT_TRON = { ...assets_1.ETH, assetId: `${caip_1.tronChainId}/trc20:${USDT}`, chainId: caip_1.tronChainId };
|
|
15
|
+
const FROM = 'TT2T17KZhoDu47i2E4FWxfG79zdkEWkU9N';
|
|
16
|
+
const tronAdapter = (txFee = '9000000') => ({
|
|
17
|
+
getFeeData: vitest_1.vi.fn().mockResolvedValue({ fast: { txFee } }),
|
|
18
|
+
});
|
|
19
|
+
const makeDeps = (tron) => ({ config: {}, assertGetTronChainAdapter: () => tron });
|
|
20
|
+
const baseArgs = {
|
|
21
|
+
swapperName: types_1.SwapperName.Thorchain,
|
|
22
|
+
tradeType: types_2.TradeType.L1ToL1,
|
|
23
|
+
sellAsset: USDT_TRON,
|
|
24
|
+
sellAmountCryptoBaseUnit: '100000000',
|
|
25
|
+
expiry: 0,
|
|
26
|
+
rawMemo: '=:ETH.ETH:0xabc:1',
|
|
27
|
+
};
|
|
28
|
+
(0, vitest_1.describe)('getThorStepData tron', () => {
|
|
29
|
+
(0, vitest_1.it)('carries the vault transfer as transactionData and estimates it for a quote', async () => {
|
|
30
|
+
const adapter = tronAdapter();
|
|
31
|
+
const actual = await (0, getThorStepData_1.getThorStepData)({
|
|
32
|
+
...baseArgs,
|
|
33
|
+
type: 'quote',
|
|
34
|
+
input: {},
|
|
35
|
+
deps: makeDeps(adapter),
|
|
36
|
+
from: FROM,
|
|
37
|
+
memo: '=:ETH.ETH:0xabc:1/1/0:ss:55',
|
|
38
|
+
});
|
|
39
|
+
(0, vitest_1.expect)(actual.unwrap()).toEqual({
|
|
40
|
+
transactionData: {
|
|
41
|
+
type: 'tron',
|
|
42
|
+
to: 'TVault',
|
|
43
|
+
value: '100000000',
|
|
44
|
+
memo: '=:ETH.ETH:0xabc:1/1/0:ss:55',
|
|
45
|
+
},
|
|
46
|
+
networkFeeCryptoBaseUnit: '9000000',
|
|
47
|
+
});
|
|
48
|
+
(0, vitest_1.expect)(adapter.getFeeData).toHaveBeenCalledWith({
|
|
49
|
+
to: 'TVault',
|
|
50
|
+
value: '100000000',
|
|
51
|
+
chainSpecific: {
|
|
52
|
+
from: FROM,
|
|
53
|
+
contractAddress: USDT,
|
|
54
|
+
memo: '=:ETH.ETH:0xabc:1/1/0:ss:55',
|
|
55
|
+
requireEnergyShare: true,
|
|
56
|
+
},
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
(0, vitest_1.it)('fails the quote when estimation fails', async () => {
|
|
60
|
+
const adapter = tronAdapter();
|
|
61
|
+
adapter.getFeeData.mockRejectedValue(new Error('rpc down'));
|
|
62
|
+
const actual = await (0, getThorStepData_1.getThorStepData)({
|
|
63
|
+
...baseArgs,
|
|
64
|
+
type: 'quote',
|
|
65
|
+
input: {},
|
|
66
|
+
deps: makeDeps(adapter),
|
|
67
|
+
from: FROM,
|
|
68
|
+
memo: '=:ETH.ETH:0xabc:1/1/0:ss:55',
|
|
69
|
+
});
|
|
70
|
+
(0, vitest_1.expect)(actual.isErr()).toBe(true);
|
|
71
|
+
});
|
|
72
|
+
(0, vitest_1.it)('sizes a rate with the raw memo and no sender', async () => {
|
|
73
|
+
const adapter = tronAdapter();
|
|
74
|
+
const actual = await (0, getThorStepData_1.getThorStepData)({
|
|
75
|
+
...baseArgs,
|
|
76
|
+
type: 'rate',
|
|
77
|
+
input: {},
|
|
78
|
+
deps: makeDeps(adapter),
|
|
79
|
+
memo: '',
|
|
80
|
+
});
|
|
81
|
+
(0, vitest_1.expect)(actual.unwrap()).toEqual({ networkFeeCryptoBaseUnit: '9000000' });
|
|
82
|
+
(0, vitest_1.expect)(adapter.getFeeData).toHaveBeenCalledWith({
|
|
83
|
+
to: 'TVault',
|
|
84
|
+
value: '100000000',
|
|
85
|
+
chainSpecific: {
|
|
86
|
+
from: undefined,
|
|
87
|
+
contractAddress: USDT,
|
|
88
|
+
memo: '=:ETH.ETH:0xabc:1',
|
|
89
|
+
requireEnergyShare: false,
|
|
90
|
+
},
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
});
|
|
@@ -15,7 +15,6 @@ export * from './getThorL1TradeContexts';
|
|
|
15
15
|
export * from './getThorL1TradeQuote';
|
|
16
16
|
export * from './getThorL1TradeRate';
|
|
17
17
|
export * from './getPoolDetails';
|
|
18
|
-
export * as tron from './tron';
|
|
19
18
|
export declare const getChainIdBySwapper: (swapperName: SwapperName) => import("@shapeshiftoss/caip").ChainId;
|
|
20
19
|
export declare const isThorTradeRate: (quote: TradeRate | undefined) => quote is ThorTradeRate;
|
|
21
20
|
export declare const isThorTradeQuote: (quote: TradeQuote | undefined) => quote is ThorTradeQuote;
|
|
@@ -10,23 +10,11 @@ var __createBinding = (this && this.__createBinding) || (Object.create ? (functi
|
|
|
10
10
|
if (k2 === undefined) k2 = k;
|
|
11
11
|
o[k2] = m[k];
|
|
12
12
|
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
13
|
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
19
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
20
15
|
};
|
|
21
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
22
|
-
if (mod && mod.__esModule) return mod;
|
|
23
|
-
var result = {};
|
|
24
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
25
|
-
__setModuleDefault(result, mod);
|
|
26
|
-
return result;
|
|
27
|
-
};
|
|
28
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
-
exports.getSwapSource = exports.getPoolAssetId = exports.getAffiliate = exports.getNativePrecision = exports.isNativeAsset = exports.getMidgardUrl = exports.getDaemonUrl = exports.isThorTradeQuote = exports.isThorTradeRate = exports.getChainIdBySwapper =
|
|
17
|
+
exports.getSwapSource = exports.getPoolAssetId = exports.getAffiliate = exports.getNativePrecision = exports.isNativeAsset = exports.getMidgardUrl = exports.getDaemonUrl = exports.isThorTradeQuote = exports.isThorTradeRate = exports.getChainIdBySwapper = void 0;
|
|
30
18
|
const caip_1 = require("@shapeshiftoss/caip");
|
|
31
19
|
const MayachainSwapper_1 = require("../../swappers/MayachainSwapper");
|
|
32
20
|
const ThorchainSwapper_1 = require("../../swappers/ThorchainSwapper");
|
|
@@ -44,7 +32,6 @@ __exportStar(require("./getThorL1TradeContexts"), exports);
|
|
|
44
32
|
__exportStar(require("./getThorL1TradeQuote"), exports);
|
|
45
33
|
__exportStar(require("./getThorL1TradeRate"), exports);
|
|
46
34
|
__exportStar(require("./getPoolDetails"), exports);
|
|
47
|
-
exports.tron = __importStar(require("./tron"));
|
|
48
35
|
const getChainIdBySwapper = (swapperName) => {
|
|
49
36
|
switch (swapperName) {
|
|
50
37
|
case types_1.SwapperName.Thorchain:
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const TRON_PLACEHOLDER_ADDRESS = "TT2T17KZhoDu47i2E4FWxfG79zdkEWkU9N";
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TRON_PLACEHOLDER_ADDRESS = void 0;
|
|
4
|
+
// An activated mainnet account, standing in as the sender/recipient for walletless rate estimation
|
|
5
|
+
exports.TRON_PLACEHOLDER_ADDRESS = 'TT2T17KZhoDu47i2E4FWxfG79zdkEWkU9N';
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { tron } from '@shapeshiftoss/chain-adapters';
|
|
2
|
+
import type { Asset } from '@shapeshiftoss/types';
|
|
3
|
+
import type { TxBuildData } from '../../types';
|
|
4
|
+
export type TronContractCall = Omit<Extract<TxBuildData, {
|
|
5
|
+
type: 'tron';
|
|
6
|
+
}>, 'type' | 'data' | 'memo'> & {
|
|
7
|
+
data: string;
|
|
8
|
+
};
|
|
9
|
+
type GetTronContractCallFallbackFeeArgs = {
|
|
10
|
+
adapter: tron.ChainAdapter;
|
|
11
|
+
energy: string;
|
|
12
|
+
bandwidthBytes: number;
|
|
13
|
+
contractAddress?: string;
|
|
14
|
+
fullEnergyOnShareLookupFailure?: boolean;
|
|
15
|
+
};
|
|
16
|
+
export declare const getTronContractCallFallbackFeeCryptoBaseUnit: ({ adapter, energy, bandwidthBytes, contractAddress, fullEnergyOnShareLookupFailure, }: GetTronContractCallFallbackFeeArgs) => Promise<string>;
|
|
17
|
+
type GetTronContractCallNetworkFeeArgs = {
|
|
18
|
+
adapter: tron.ChainAdapter;
|
|
19
|
+
transactionData: TronContractCall;
|
|
20
|
+
from: string;
|
|
21
|
+
sellAsset: Asset;
|
|
22
|
+
sellAmountCryptoBaseUnit: string;
|
|
23
|
+
spenderAddress: string;
|
|
24
|
+
fallbackEnergy: string;
|
|
25
|
+
};
|
|
26
|
+
export declare const getTronContractCallNetworkFeeCryptoBaseUnit: ({ adapter, transactionData, from, sellAsset, sellAmountCryptoBaseUnit, spenderAddress, fallbackEnergy, }: GetTronContractCallNetworkFeeArgs) => Promise<string>;
|
|
27
|
+
export {};
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getTronContractCallNetworkFeeCryptoBaseUnit = exports.getTronContractCallFallbackFeeCryptoBaseUnit = void 0;
|
|
4
|
+
const caip_1 = require("@shapeshiftoss/caip");
|
|
5
|
+
const chain_adapters_1 = require("@shapeshiftoss/chain-adapters");
|
|
6
|
+
const unchained_client_1 = require("@shapeshiftoss/unchained-client");
|
|
7
|
+
const utils_1 = require("@shapeshiftoss/utils");
|
|
8
|
+
// A measured worst-case energy under the adapter's margin, at live prices
|
|
9
|
+
const getTronContractCallFallbackFeeCryptoBaseUnit = async ({ adapter, energy, bandwidthBytes, contractAddress, fullEnergyOnShareLookupFailure = false, }) => {
|
|
10
|
+
const { httpProvider } = adapter;
|
|
11
|
+
const [{ energyPrice, bandwidthPrice }, share] = await Promise.all([
|
|
12
|
+
httpProvider.getChainPrices(),
|
|
13
|
+
contractAddress
|
|
14
|
+
? httpProvider.getContractEnergyShare(chain_adapters_1.tron.toTronBase58(contractAddress)).catch(error => {
|
|
15
|
+
if (!fullEnergyOnShareLookupFailure)
|
|
16
|
+
throw error;
|
|
17
|
+
return undefined;
|
|
18
|
+
})
|
|
19
|
+
: undefined,
|
|
20
|
+
]);
|
|
21
|
+
const callerEnergy = share ? unchained_client_1.tron.getCallerEnergy(Number(energy), share) : energy;
|
|
22
|
+
return (0, utils_1.bn)(callerEnergy)
|
|
23
|
+
.times(chain_adapters_1.tron.TRON_ENERGY_SAFETY_MARGIN)
|
|
24
|
+
.times(energyPrice)
|
|
25
|
+
.plus((0, utils_1.bn)(bandwidthBytes).times(bandwidthPrice))
|
|
26
|
+
.toFixed(0);
|
|
27
|
+
};
|
|
28
|
+
exports.getTronContractCallFallbackFeeCryptoBaseUnit = getTronContractCallFallbackFeeCryptoBaseUnit;
|
|
29
|
+
// Quote arm: a funded token sell that reverts for want of its allowance prices the measured worst case, anything else throws
|
|
30
|
+
const getTronContractCallNetworkFeeCryptoBaseUnit = async ({ adapter, transactionData, from, sellAsset, sellAmountCryptoBaseUnit, spenderAddress, fallbackEnergy, }) => {
|
|
31
|
+
const { to, value, data } = transactionData;
|
|
32
|
+
try {
|
|
33
|
+
const { fast } = await adapter.getFeeData({
|
|
34
|
+
to,
|
|
35
|
+
value,
|
|
36
|
+
chainSpecific: { from, data, requireEnergyShare: true },
|
|
37
|
+
});
|
|
38
|
+
return fast.txFee;
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
if (!(0, utils_1.isToken)(sellAsset.assetId))
|
|
42
|
+
throw error;
|
|
43
|
+
const contractAddress = (0, caip_1.fromAssetId)(sellAsset.assetId).assetReference;
|
|
44
|
+
const { httpProvider } = adapter;
|
|
45
|
+
const [allowance, balance] = await Promise.all([
|
|
46
|
+
httpProvider.getTrc20Allowance({
|
|
47
|
+
contractAddress,
|
|
48
|
+
owner: from,
|
|
49
|
+
spender: chain_adapters_1.tron.toTronBase58(spenderAddress),
|
|
50
|
+
}),
|
|
51
|
+
httpProvider.getTrc20Balance({ contractAddress, address: from }),
|
|
52
|
+
]);
|
|
53
|
+
const sellAmount = BigInt(sellAmountCryptoBaseUnit);
|
|
54
|
+
if (BigInt(allowance) >= sellAmount || BigInt(balance) < sellAmount)
|
|
55
|
+
throw error;
|
|
56
|
+
return (0, exports.getTronContractCallFallbackFeeCryptoBaseUnit)({
|
|
57
|
+
adapter,
|
|
58
|
+
energy: fallbackEnergy,
|
|
59
|
+
bandwidthBytes: chain_adapters_1.tron.getTronContractCallBandwidthBytes(data),
|
|
60
|
+
contractAddress: to,
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
exports.getTronContractCallNetworkFeeCryptoBaseUnit = getTronContractCallNetworkFeeCryptoBaseUnit;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const caip_1 = require("@shapeshiftoss/caip");
|
|
4
|
+
const vitest_1 = require("vitest");
|
|
5
|
+
const assets_1 = require("../test-data/assets");
|
|
6
|
+
const getTronNetworkFeeCryptoBaseUnit_1 = require("./getTronNetworkFeeCryptoBaseUnit");
|
|
7
|
+
const USDT = 'TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t';
|
|
8
|
+
const TRX = { ...assets_1.ETH, assetId: `${caip_1.tronChainId}/slip44:195`, chainId: caip_1.tronChainId };
|
|
9
|
+
const USDT_TRON = { ...assets_1.ETH, assetId: `${caip_1.tronChainId}/trc20:${USDT}`, chainId: caip_1.tronChainId };
|
|
10
|
+
const FROM = 'TT2T17KZhoDu47i2E4FWxfG79zdkEWkU9N';
|
|
11
|
+
const SPENDER_HEX = '4107a39ae4c49dee86e892450b20881f32cd5d500d';
|
|
12
|
+
const SPENDER = 'TAfbit1ENsRmtZbPQfYU3srURpfYuWYS7K';
|
|
13
|
+
const transactionData = { to: SPENDER, data: '0x2213bc0b', value: '0' };
|
|
14
|
+
const makeAdapter = ({ allowance = '0', balance = '100000000', simulation = 'ok', } = {}) => {
|
|
15
|
+
const getFeeData = simulation === 'ok'
|
|
16
|
+
? vitest_1.vi.fn().mockResolvedValue({ fast: { txFee: '9000000' } })
|
|
17
|
+
: vitest_1.vi.fn().mockRejectedValue(new Error('REVERT opcode executed'));
|
|
18
|
+
const getTrc20Allowance = vitest_1.vi.fn().mockResolvedValue(allowance);
|
|
19
|
+
const getTrc20Balance = vitest_1.vi.fn().mockResolvedValue(balance);
|
|
20
|
+
const getContractEnergyShare = vitest_1.vi.fn().mockResolvedValue({
|
|
21
|
+
callerPercent: 100,
|
|
22
|
+
originEnergyLimit: 0,
|
|
23
|
+
originEnergyAvailable: 0,
|
|
24
|
+
});
|
|
25
|
+
const adapter = {
|
|
26
|
+
getFeeData,
|
|
27
|
+
httpProvider: {
|
|
28
|
+
getTrc20Allowance,
|
|
29
|
+
getTrc20Balance,
|
|
30
|
+
getContractEnergyShare,
|
|
31
|
+
getChainPrices: () => Promise.resolve({ energyPrice: 100, bandwidthPrice: 1000 }),
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
return {
|
|
35
|
+
adapter: adapter,
|
|
36
|
+
getFeeData,
|
|
37
|
+
getTrc20Allowance,
|
|
38
|
+
getTrc20Balance,
|
|
39
|
+
getContractEnergyShare,
|
|
40
|
+
};
|
|
41
|
+
};
|
|
42
|
+
const baseArgs = {
|
|
43
|
+
transactionData,
|
|
44
|
+
from: FROM,
|
|
45
|
+
sellAmountCryptoBaseUnit: '100000000',
|
|
46
|
+
spenderAddress: SPENDER_HEX,
|
|
47
|
+
fallbackEnergy: '400000',
|
|
48
|
+
};
|
|
49
|
+
// 400000 energy * 1.2 margin * 100 sun + (4 calldata + 279 envelope) bytes * 1000 sun
|
|
50
|
+
const FALLBACK_FEE = '48283000';
|
|
51
|
+
(0, vitest_1.describe)('getTronContractCallFallbackFeeCryptoBaseUnit', () => {
|
|
52
|
+
(0, vitest_1.it)('prices the energy under the adapter margin at live prices plus the bandwidth', async () => {
|
|
53
|
+
const { adapter, getContractEnergyShare } = makeAdapter();
|
|
54
|
+
(0, vitest_1.expect)(await (0, getTronNetworkFeeCryptoBaseUnit_1.getTronContractCallFallbackFeeCryptoBaseUnit)({
|
|
55
|
+
adapter,
|
|
56
|
+
energy: '400000',
|
|
57
|
+
bandwidthBytes: 283,
|
|
58
|
+
})).toBe(FALLBACK_FEE);
|
|
59
|
+
(0, vitest_1.expect)(getContractEnergyShare).not.toHaveBeenCalled();
|
|
60
|
+
});
|
|
61
|
+
(0, vitest_1.it)('bills the caller only their share of a contract whose deployer covers the rest', async () => {
|
|
62
|
+
const { adapter, getContractEnergyShare } = makeAdapter();
|
|
63
|
+
getContractEnergyShare.mockResolvedValue({
|
|
64
|
+
callerPercent: 5,
|
|
65
|
+
originEnergyLimit: 10_000_000,
|
|
66
|
+
originEnergyAvailable: 5_000_000,
|
|
67
|
+
});
|
|
68
|
+
// 20000 caller energy * 1.2 margin * 100 sun + 283 bytes * 1000 sun
|
|
69
|
+
(0, vitest_1.expect)(await (0, getTronNetworkFeeCryptoBaseUnit_1.getTronContractCallFallbackFeeCryptoBaseUnit)({
|
|
70
|
+
adapter,
|
|
71
|
+
energy: '400000',
|
|
72
|
+
bandwidthBytes: 283,
|
|
73
|
+
contractAddress: SPENDER,
|
|
74
|
+
})).toBe('2683000');
|
|
75
|
+
(0, vitest_1.expect)(getContractEnergyShare).toHaveBeenCalledWith(SPENDER);
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
(0, vitest_1.describe)('getTronContractCallFallbackFeeCryptoBaseUnit share lookup failure', () => {
|
|
79
|
+
(0, vitest_1.it)('rejects by default', async () => {
|
|
80
|
+
const { adapter, getContractEnergyShare } = makeAdapter();
|
|
81
|
+
getContractEnergyShare.mockRejectedValue(new Error('429'));
|
|
82
|
+
await (0, vitest_1.expect)((0, getTronNetworkFeeCryptoBaseUnit_1.getTronContractCallFallbackFeeCryptoBaseUnit)({
|
|
83
|
+
adapter,
|
|
84
|
+
energy: '400000',
|
|
85
|
+
bandwidthBytes: 283,
|
|
86
|
+
contractAddress: SPENDER,
|
|
87
|
+
})).rejects.toThrow('429');
|
|
88
|
+
});
|
|
89
|
+
(0, vitest_1.it)('prices the caller in full when the caller opts in', async () => {
|
|
90
|
+
const { adapter, getContractEnergyShare } = makeAdapter();
|
|
91
|
+
getContractEnergyShare.mockRejectedValue(new Error('429'));
|
|
92
|
+
(0, vitest_1.expect)(await (0, getTronNetworkFeeCryptoBaseUnit_1.getTronContractCallFallbackFeeCryptoBaseUnit)({
|
|
93
|
+
adapter,
|
|
94
|
+
energy: '400000',
|
|
95
|
+
bandwidthBytes: 283,
|
|
96
|
+
contractAddress: SPENDER,
|
|
97
|
+
fullEnergyOnShareLookupFailure: true,
|
|
98
|
+
})).toBe(FALLBACK_FEE);
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
(0, vitest_1.describe)('getTronContractCallNetworkFeeCryptoBaseUnit', () => {
|
|
102
|
+
(0, vitest_1.it)('prices a successful simulation without reading the allowance', async () => {
|
|
103
|
+
const { adapter, getFeeData, getTrc20Allowance } = makeAdapter();
|
|
104
|
+
const actual = await (0, getTronNetworkFeeCryptoBaseUnit_1.getTronContractCallNetworkFeeCryptoBaseUnit)({
|
|
105
|
+
...baseArgs,
|
|
106
|
+
adapter,
|
|
107
|
+
sellAsset: USDT_TRON,
|
|
108
|
+
});
|
|
109
|
+
(0, vitest_1.expect)(actual).toBe('9000000');
|
|
110
|
+
(0, vitest_1.expect)(getFeeData).toHaveBeenCalledWith({
|
|
111
|
+
to: SPENDER,
|
|
112
|
+
value: '0',
|
|
113
|
+
chainSpecific: { from: FROM, data: '0x2213bc0b', requireEnergyShare: true },
|
|
114
|
+
});
|
|
115
|
+
(0, vitest_1.expect)(getTrc20Allowance).not.toHaveBeenCalled();
|
|
116
|
+
});
|
|
117
|
+
(0, vitest_1.it)('prices the measured worst case when a funded token sell reverts without its allowance', async () => {
|
|
118
|
+
const { adapter, getTrc20Allowance, getTrc20Balance, getContractEnergyShare } = makeAdapter({
|
|
119
|
+
simulation: 'revert',
|
|
120
|
+
allowance: '0',
|
|
121
|
+
});
|
|
122
|
+
const actual = await (0, getTronNetworkFeeCryptoBaseUnit_1.getTronContractCallNetworkFeeCryptoBaseUnit)({
|
|
123
|
+
...baseArgs,
|
|
124
|
+
adapter,
|
|
125
|
+
sellAsset: USDT_TRON,
|
|
126
|
+
});
|
|
127
|
+
(0, vitest_1.expect)(actual).toBe(FALLBACK_FEE);
|
|
128
|
+
(0, vitest_1.expect)(getTrc20Allowance).toHaveBeenCalledWith({
|
|
129
|
+
contractAddress: USDT,
|
|
130
|
+
owner: FROM,
|
|
131
|
+
spender: SPENDER,
|
|
132
|
+
});
|
|
133
|
+
(0, vitest_1.expect)(getTrc20Balance).toHaveBeenCalledWith({ contractAddress: USDT, address: FROM });
|
|
134
|
+
(0, vitest_1.expect)(getContractEnergyShare).toHaveBeenCalledWith(SPENDER);
|
|
135
|
+
});
|
|
136
|
+
(0, vitest_1.it)('fails the quote rather than guessing when the share lookup fails', async () => {
|
|
137
|
+
const { adapter, getContractEnergyShare } = makeAdapter({
|
|
138
|
+
simulation: 'revert',
|
|
139
|
+
allowance: '0',
|
|
140
|
+
});
|
|
141
|
+
getContractEnergyShare.mockRejectedValue(new Error('429'));
|
|
142
|
+
await (0, vitest_1.expect)((0, getTronNetworkFeeCryptoBaseUnit_1.getTronContractCallNetworkFeeCryptoBaseUnit)({ ...baseArgs, adapter, sellAsset: USDT_TRON })).rejects.toThrow('429');
|
|
143
|
+
});
|
|
144
|
+
(0, vitest_1.it)('throws when a token sell reverts with a sufficient allowance', async () => {
|
|
145
|
+
const { adapter } = makeAdapter({ simulation: 'revert', allowance: '100000000' });
|
|
146
|
+
await (0, vitest_1.expect)((0, getTronNetworkFeeCryptoBaseUnit_1.getTronContractCallNetworkFeeCryptoBaseUnit)({ ...baseArgs, adapter, sellAsset: USDT_TRON })).rejects.toThrow('REVERT opcode executed');
|
|
147
|
+
});
|
|
148
|
+
(0, vitest_1.it)('throws when the token balance cannot cover the sell', async () => {
|
|
149
|
+
const { adapter } = makeAdapter({ simulation: 'revert', allowance: '0', balance: '1' });
|
|
150
|
+
await (0, vitest_1.expect)((0, getTronNetworkFeeCryptoBaseUnit_1.getTronContractCallNetworkFeeCryptoBaseUnit)({ ...baseArgs, adapter, sellAsset: USDT_TRON })).rejects.toThrow('REVERT opcode executed');
|
|
151
|
+
});
|
|
152
|
+
(0, vitest_1.it)('throws when a native sell reverts', async () => {
|
|
153
|
+
const { adapter, getTrc20Allowance } = makeAdapter({ simulation: 'revert' });
|
|
154
|
+
await (0, vitest_1.expect)((0, getTronNetworkFeeCryptoBaseUnit_1.getTronContractCallNetworkFeeCryptoBaseUnit)({ ...baseArgs, adapter, sellAsset: TRX })).rejects.toThrow('REVERT opcode executed');
|
|
155
|
+
(0, vitest_1.expect)(getTrc20Allowance).not.toHaveBeenCalled();
|
|
156
|
+
});
|
|
157
|
+
});
|
|
@@ -1,2 +1,3 @@
|
|
|
1
|
+
import { tron } from '@shapeshiftoss/chain-adapters';
|
|
1
2
|
import type { GetUnsignedTronTransactionArgs } from '../../types';
|
|
2
|
-
export declare const getUnsignedTronTransaction: ({ stepIndex, tradeQuote, from, assertGetTronChainAdapter, }: GetUnsignedTronTransactionArgs) => Promise<
|
|
3
|
+
export declare const getUnsignedTronTransaction: ({ stepIndex, tradeQuote, from, assertGetTronChainAdapter, }: GetUnsignedTronTransactionArgs) => Promise<tron.TronSignTx>;
|
|
@@ -1,64 +1,30 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getUnsignedTronTransaction = void 0;
|
|
4
|
-
const
|
|
4
|
+
const chain_adapters_1 = require("@shapeshiftoss/chain-adapters");
|
|
5
5
|
const utils_1 = require("@shapeshiftoss/utils");
|
|
6
|
-
const tronweb_1 = require("tronweb");
|
|
7
6
|
const utils_2 = require("../../utils");
|
|
8
7
|
const getUnsignedTronTransaction = ({ stepIndex, tradeQuote, from, assertGetTronChainAdapter, }) => {
|
|
9
8
|
if (!(0, utils_2.isExecutableTradeQuote)(tradeQuote))
|
|
10
|
-
throw new Error('Unable to execute a trade rate
|
|
9
|
+
throw new Error('Unable to execute a trade rate');
|
|
11
10
|
const step = (0, utils_2.getExecutableTradeStep)(tradeQuote, stepIndex);
|
|
12
|
-
const { accountNumber, sellAsset,
|
|
11
|
+
const { accountNumber, sellAsset, transactionData, feeData } = step;
|
|
12
|
+
if (transactionData?.type !== 'tron')
|
|
13
|
+
throw new Error('Missing tron transactionData');
|
|
13
14
|
const adapter = assertGetTronChainAdapter(sellAsset.chainId);
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
if (!data)
|
|
19
|
-
throw new Error('Missing Butter swap transaction data');
|
|
20
|
-
// Use Butter's value field which includes swap fees for same-chain swaps
|
|
21
|
-
// For native TRX sells, also include the sell amount
|
|
22
|
-
const isNativeTron = sellAsset.assetId === caip_1.tronAssetId;
|
|
23
|
-
const value = isNativeTron ? step.sellAmountIncludingProtocolFeesCryptoBaseUnit : butterValue;
|
|
24
|
-
return adapter.buildCustomApiTx({
|
|
25
|
-
from,
|
|
26
|
-
to,
|
|
27
|
-
accountNumber,
|
|
28
|
-
data,
|
|
29
|
-
value,
|
|
30
|
-
method,
|
|
31
|
-
args,
|
|
32
|
-
});
|
|
33
|
-
}
|
|
34
|
-
if (relayTransactionMetadata?.data) {
|
|
35
|
-
if (!relayTransactionMetadata.to) {
|
|
36
|
-
throw new Error('Missing Relay transaction destination address');
|
|
37
|
-
}
|
|
38
|
-
const to = tronweb_1.TronWeb.address.fromHex(relayTransactionMetadata.to);
|
|
39
|
-
const isNativeTron = sellAsset.assetId === caip_1.tronAssetId;
|
|
40
|
-
const value = isNativeTron ? step.sellAmountIncludingProtocolFeesCryptoBaseUnit : '0';
|
|
41
|
-
return adapter.buildCustomApiTx({
|
|
42
|
-
from,
|
|
43
|
-
to,
|
|
44
|
-
accountNumber,
|
|
45
|
-
data: relayTransactionMetadata.data,
|
|
46
|
-
value,
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
const nearIntentsDepositAddress = step.swapperMetadata?.name === 'nearIntents' ? step.swapperMetadata.depositAddress : undefined;
|
|
50
|
-
const to = relayTransactionMetadata?.to ?? nearIntentsDepositAddress;
|
|
51
|
-
if (!to)
|
|
52
|
-
throw new Error('Missing transaction destination address');
|
|
53
|
-
const value = step.sellAmountIncludingProtocolFeesCryptoBaseUnit;
|
|
54
|
-
const contractAddress = (0, utils_1.contractAddressOrUndefined)(sellAsset.assetId);
|
|
15
|
+
const { to, value, data, memo } = transactionData;
|
|
16
|
+
const feeLimit = chain_adapters_1.tron.getTronFeeLimit(feeData.networkFeeCryptoBaseUnit);
|
|
17
|
+
if (data)
|
|
18
|
+
return adapter.buildCustomApiTx({ from, to, accountNumber, data, value, feeLimit });
|
|
55
19
|
return adapter.buildSendApiTransaction({
|
|
56
|
-
to,
|
|
57
20
|
from,
|
|
58
|
-
|
|
21
|
+
to,
|
|
59
22
|
accountNumber,
|
|
23
|
+
value,
|
|
60
24
|
chainSpecific: {
|
|
61
|
-
contractAddress,
|
|
25
|
+
contractAddress: (0, utils_1.contractAddressOrUndefined)(sellAsset.assetId),
|
|
26
|
+
memo,
|
|
27
|
+
feeLimit,
|
|
62
28
|
},
|
|
63
29
|
});
|
|
64
30
|
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|