diff --git a/package.json b/package.json index dcd4d50ab6..e20c68dc2e 100644 --- a/package.json +++ b/package.json @@ -10,9 +10,9 @@ "node": ">=22.18.0" }, "dependencies": { - "@across-protocol/constants": "^3.1.102", - "@across-protocol/contracts": "5.0.4", - "@across-protocol/sdk": "4.3.136", + "@across-protocol/constants": "^3.1.105", + "@across-protocol/contracts": "5.0.5-alpha.0", + "@across-protocol/sdk": "4.3.137-alpha.3", "@arbitrum/sdk": "^4.0.2", "@consensys/linea-sdk": "^0.3.0", "@coral-xyz/anchor": "^0.31.1", diff --git a/src/adapter/BaseChainAdapter.ts b/src/adapter/BaseChainAdapter.ts index 4e1eff5402..8b5aa3c7b6 100644 --- a/src/adapter/BaseChainAdapter.ts +++ b/src/adapter/BaseChainAdapter.ts @@ -33,6 +33,7 @@ import { stringifyThrownValue, ZERO_BYTES, isEVMSpokePoolClient, + isTVMSpokePoolClient, EvmAddress, chainIsEvm, sendAndConfirmSolanaTransaction, @@ -111,7 +112,7 @@ export class BaseChainAdapter { protected getSigner(chainId: number): Signer { const spokePoolClient = this.spokePoolManager.getClient(chainId); assert(isDefined(spokePoolClient), `SpokePoolClient not found for chainId ${chainId}`); - assert(isEVMSpokePoolClient(spokePoolClient)); + assert(isEVMSpokePoolClient(spokePoolClient) || isTVMSpokePoolClient(spokePoolClient)); return spokePoolClient.spokePool.signer; } diff --git a/src/adapter/bridges/OFTBridge.ts b/src/adapter/bridges/OFTBridge.ts index f82e13af8c..09f7b4acb9 100644 --- a/src/adapter/bridges/OFTBridge.ts +++ b/src/adapter/bridges/OFTBridge.ts @@ -52,8 +52,8 @@ export class OFTBridge extends BaseBridgeAdapter { ); // Route discovery via configured IOFT messengers: if both L1 and L2 messengers exist, the route exists - const l1OftMessenger = OFT.getMessengerEvm(l1TokenAddress, l1ChainId); - const l2OftMessenger = OFT.getMessengerEvm(l1TokenAddress, l2ChainId); + const l1OftMessenger = OFT.getMessengerEvm(l1TokenAddress, l1ChainId, l2ChainId); + const l2OftMessenger = OFT.getMessengerEvm(l1TokenAddress, l2ChainId, l2ChainId); super(l2ChainId, l1ChainId, l1Signer, [l1OftMessenger]); diff --git a/src/adapter/l2Bridges/OFTL2Bridge.ts b/src/adapter/l2Bridges/OFTL2Bridge.ts index 7bd5425236..5eeb23c01a 100644 --- a/src/adapter/l2Bridges/OFTL2Bridge.ts +++ b/src/adapter/l2Bridges/OFTL2Bridge.ts @@ -41,8 +41,8 @@ export class OFTL2Bridge extends BaseL2BridgeAdapter { assert(translatedL2Token.isEVM()); this.l2Token = translatedL2Token; - const l1OftMessenger = OFT.getMessengerEvm(l1Token, hubChainId); - const l2OftMessenger = OFT.getMessengerEvm(l1Token, l2chainId); + const l1OftMessenger = OFT.getMessengerEvm(l1Token, hubChainId, l2chainId); + const l2OftMessenger = OFT.getMessengerEvm(l1Token, l2chainId, l2chainId); this.nativeFeeCap = OFT_FEE_CAP_OVERRIDES[this.l2chainId] ?? OFT_DEFAULT_FEE_CAP; diff --git a/src/clients/ProfitClient.ts b/src/clients/ProfitClient.ts index ed0a426253..8a6bbc689f 100644 --- a/src/clients/ProfitClient.ts +++ b/src/clients/ProfitClient.ts @@ -873,12 +873,15 @@ export class ProfitClient { // Fallback to Coingecko's free API for now. // TODO: Add support for Coingecko Pro. const coingeckoProApiKey = undefined; + const spokePoolAddress = chainIsEvm(chainId) + ? toAddressType(getDeployedAddress("SpokePool", chainId), chainId).toEvmAddress() + : getDeployedAddress("SvmSpoke", chainId); // Call the factory to create a new QueryBase instance. return relayFeeCalculator.QueryBase__factory.create( chainId, provider, undefined, // symbolMapping - chainIsEvm(chainId) ? undefined : getDeployedAddress("SvmSpoke", chainId), // spokePoolAddress + spokePoolAddress, undefined, // simulatedRelayerAddress coingeckoProApiKey, this.logger diff --git a/src/clients/TokenClient.ts b/src/clients/TokenClient.ts index 4bb67bdf91..415077aa43 100644 --- a/src/clients/TokenClient.ts +++ b/src/clients/TokenClient.ts @@ -23,6 +23,7 @@ import { getRemoteTokenForL1Token, getTokenInfo, isEVMSpokePoolClient, + isTVMSpokePoolClient, assert, Address, toAddressType, @@ -240,7 +241,7 @@ export class TokenClient { resolveRemoteTokens(chainId: number, hubPoolTokens: L1Token[]): Contract[] { const spokePoolClient = this.spokePoolManager.getClient(chainId); assert(isDefined(spokePoolClient), `SpokePoolClient not found for chainId ${chainId}`); - assert(isEVMSpokePoolClient(spokePoolClient)); + assert(isEVMSpokePoolClient(spokePoolClient) || isTVMSpokePoolClient(spokePoolClient)); const { provider } = spokePoolClient.spokePool; const erc20 = this.erc20.connect(provider); @@ -292,7 +293,7 @@ export class TokenClient { const spokePoolClient = this.spokePoolManager.getClient(chainId); assert(isDefined(spokePoolClient), `SpokePoolClient not found for chainId ${chainId}`); - if (isEVMSpokePoolClient(spokePoolClient)) { + if (isEVMSpokePoolClient(spokePoolClient) || isTVMSpokePoolClient(spokePoolClient)) { return this.updateEVM(chainId, hubPoolTokens); } else if (isSVMSpokePoolClient(spokePoolClient)) { return this.fetchSolanaTokenData(chainId, hubPoolTokens); @@ -341,7 +342,7 @@ export class TokenClient { ): Promise> { const spokePoolClient = this.spokePoolManager.getClient(chainId); assert(isDefined(spokePoolClient), `SpokePoolClient not found for chainId ${chainId}`); - assert(isEVMSpokePoolClient(spokePoolClient)); + assert(isEVMSpokePoolClient(spokePoolClient) || isTVMSpokePoolClient(spokePoolClient)); const tokenData = Object.fromEntries( await sdkUtils.mapAsync(this.resolveRemoteTokens(chainId, hubPoolTokens), async (token: Contract) => { @@ -356,7 +357,7 @@ export class TokenClient { private async updateEVM(chainId: number, hubPoolTokens: L1Token[]) { const spokePoolClient = this.spokePoolManager.getClient(chainId); - assert(isEVMSpokePoolClient(spokePoolClient)); + assert(isEVMSpokePoolClient(spokePoolClient) || isTVMSpokePoolClient(spokePoolClient)); const { spokePool: { provider }, spokePoolAddress, diff --git a/src/clients/bridges/AdapterManager.ts b/src/clients/bridges/AdapterManager.ts index 91c2240d0b..392f7696ca 100644 --- a/src/clients/bridges/AdapterManager.ts +++ b/src/clients/bridges/AdapterManager.ts @@ -21,6 +21,7 @@ import { getRemoteTokenForL1Token, getTokenInfo, isEVMSpokePoolClient, + isTVMSpokePoolClient, Address, isSVMSpokePoolClient, bnZero, @@ -84,7 +85,7 @@ export class AdapterManager { SUPPORTED_TOKENS[chainId]?.map((symbol) => { const spokePoolClient = this.spokePoolManager.getClient(chainId); let l2SignerOrProvider; - if (isEVMSpokePoolClient(spokePoolClient)) { + if (isEVMSpokePoolClient(spokePoolClient) || isTVMSpokePoolClient(spokePoolClient)) { l2SignerOrProvider = spokePoolClient.spokePool.signer; } else if (isSVMSpokePoolClient(spokePoolClient)) { l2SignerOrProvider = spokePoolClient.svmEventsClient.getRpc(); @@ -109,7 +110,7 @@ export class AdapterManager { } const spokePoolClient = this.spokePoolManager.getClient(chainId); let l2SignerOrSvmProvider; - if (isEVMSpokePoolClient(spokePoolClient)) { + if (isEVMSpokePoolClient(spokePoolClient) || isTVMSpokePoolClient(spokePoolClient)) { l2SignerOrSvmProvider = spokePoolClient.spokePool.signer; } else if (isSVMSpokePoolClient(spokePoolClient)) { l2SignerOrSvmProvider = spokePoolClient.svmEventsClient.getRpc(); @@ -325,7 +326,7 @@ export class AdapterManager { getSigner(chainId: number): Signer { const spokePoolClient = this.spokePoolManager.getClient(chainId); assert(isDefined(spokePoolClient), `SpokePoolClient not found for chainId ${chainId}`); - assert(isEVMSpokePoolClient(spokePoolClient)); + assert(isEVMSpokePoolClient(spokePoolClient) || isTVMSpokePoolClient(spokePoolClient)); return spokePoolClient.spokePool.signer; } diff --git a/src/clients/index.ts b/src/clients/index.ts index 643e3d3d88..a6f7ea6089 100644 --- a/src/clients/index.ts +++ b/src/clients/index.ts @@ -4,8 +4,10 @@ export type SpokePoolManager = clients.SpokePoolManager; export type SpokePoolClient = clients.SpokePoolClient; export type EVMSpokePoolClient = clients.EVMSpokePoolClient; export type SVMSpokePoolClient = clients.SVMSpokePoolClient; +export type TVMSpokePoolClient = clients.TVMSpokePoolClient; export type SpokePoolUpdate = clients.SpokePoolUpdate; -export const { EVMSpokePoolClient, SpokePoolClient, SVMSpokePoolClient, SpokePoolManager } = clients; +export const { EVMSpokePoolClient, SpokePoolClient, SVMSpokePoolClient, SpokePoolManager, TVMSpokePoolClient } = + clients; export { SpokeListener, SpokePoolClientWithListener, isSpokePoolClientWithListener } from "./SpokePoolClient"; export class BundleDataClient extends clients.BundleDataClient.BundleDataClient {} diff --git a/src/common/ClientHelper.ts b/src/common/ClientHelper.ts index 4da369b5f7..7b1e723031 100644 --- a/src/common/ClientHelper.ts +++ b/src/common/ClientHelper.ts @@ -2,6 +2,7 @@ import assert from "assert"; import winston from "winston"; import { chainIsSvm, + chainIsTvm, getProvider, getDeployedContract, getDeploymentBlockNumber, @@ -17,6 +18,7 @@ import { chainIsEvm, forEachAsync, isEVMSpokePoolClient, + isTVMSpokePoolClient, getSvmProvider, getBlockFinder, } from "../utils"; @@ -26,6 +28,7 @@ import { ConfigStoreClient, EVMSpokePoolClient, SVMSpokePoolClient, + TVMSpokePoolClient, SpokePoolClient, } from "../clients"; import { CommonConfig } from "./Config"; @@ -309,10 +312,19 @@ export async function getSpokePoolClientsForContract( } const spokePoolClientSearchSettings = { from: fromBlocks[chainId] ? Math.max(fromBlocks[chainId], registrationBlock) : registrationBlock, - to: toBlocks[chainId], + to: chainIsTvm(chainId) ? undefined : toBlocks[chainId], maxLookBack: config.maxBlockLookBack[chainId], }; - if (chainIsEvm(chainId)) { + if (chainIsTvm(chainId)) { + spokePoolClients[chainId] = new TVMSpokePoolClient( + logger, + contract, + hubPoolClient, + chainId, + registrationBlock, + spokePoolClientSearchSettings + ); + } else if (chainIsEvm(chainId)) { spokePoolClients[chainId] = new EVMSpokePoolClient( logger, contract, @@ -423,7 +435,7 @@ export function spokePoolClientsToProviders(spokePoolClients: { [chainId: number return Object.fromEntries( Object.entries(spokePoolClients) .map(([chainId, client]): [number, ethers.providers.Provider] => { - if (isEVMSpokePoolClient(client)) { + if (isEVMSpokePoolClient(client) || isTVMSpokePoolClient(client)) { return [Number(chainId), client.spokePool.signer.provider]; } return [Number(chainId), undefined]; diff --git a/src/common/Constants.ts b/src/common/Constants.ts index 588ec3ad21..e2fe541050 100644 --- a/src/common/Constants.ts +++ b/src/common/Constants.ts @@ -81,7 +81,14 @@ export const MAX_RELAYER_DEPOSIT_LOOK_BACK = 4 * 60 * 60; export const FINALIZER_TOKENBRIDGE_LOOKBACK = 14 * 24 * 60 * 60; // Chain IDs using the Succinct/Helios SP1 messaging bridge. -export const UNIVERSAL_CHAINS = [CHAIN_IDs.BSC, CHAIN_IDs.HYPEREVM, CHAIN_IDs.PLASMA, CHAIN_IDs.MONAD, CHAIN_IDs.TEMPO]; +export const UNIVERSAL_CHAINS = [ + CHAIN_IDs.BSC, + CHAIN_IDs.HYPEREVM, + CHAIN_IDs.PLASMA, + CHAIN_IDs.MONAD, + CHAIN_IDs.TEMPO, + CHAIN_IDs.TRON, +]; // Reorgs are anticipated on Ethereum and Polygon. We use different following distances when processing deposit // events based on the USD amount of the deposit. This protects the relayer from the worst case situation where it fills @@ -118,6 +125,7 @@ export const MIN_DEPOSIT_CONFIRMATIONS: { [threshold: number | string]: { [chain [CHAIN_IDs.POLYGON]: 64, // Probabilistically safe level based on historic Polygon reorgs [CHAIN_IDs.BSC]: 2, // Average takes 2.5 blocks to finalize but reorgs rarely happen [CHAIN_IDs.SCROLL]: 8, + [CHAIN_IDs.TRON]: 19, // 19 Blocks to finalize. }, 100: { [CHAIN_IDs.HYPEREVM]: 1, @@ -129,6 +137,7 @@ export const MIN_DEPOSIT_CONFIRMATIONS: { [threshold: number | string]: { [chain [CHAIN_IDs.POLYGON]: 16, [CHAIN_IDs.SCROLL]: 2, [CHAIN_IDs.TEMPO]: 2, + [CHAIN_IDs.TRON]: 0, [CHAIN_IDs.BSC]: 0, [CHAIN_IDs.ZK_SYNC]: 0, }, @@ -191,6 +200,7 @@ const resolveChainBundleBuffers = () => { [CHAIN_IDs.POLYGON]: 128, // ~2s/block. Polygon has historically re-orged often. [CHAIN_IDs.SCROLL]: 40, // ~3s/block. [CHAIN_IDs.TEMPO]: 400, // ~500ms a block. + [CHAIN_IDs.TRON]: 40, // 3s/block. [CHAIN_IDs.ZK_SYNC]: defaultBuffers[ChainFamily.ZK_STACK], // Inherit ZK_STACK default. }; @@ -244,6 +254,7 @@ const resolveChainCacheDelay = () => { [CHAIN_IDs.POLYGON]: 256, [CHAIN_IDs.SCROLL]: 100, [CHAIN_IDs.TEMPO]: 400, + [CHAIN_IDs.TRON]: 20, // 19 blocks for finalization. [CHAIN_IDs.ZK_SYNC]: cacheDelays[ChainFamily.ZK_STACK], }; @@ -281,6 +292,7 @@ export const DEFAULT_NO_TTL_DISTANCE: { [chainId: number]: number } = { [CHAIN_IDs.SOLANA]: 432000, [CHAIN_IDs.SONEIUM]: 86400, [CHAIN_IDs.TEMPO]: 345600, + [CHAIN_IDs.TRON]: 57600, [CHAIN_IDs.UNICHAIN]: 86400, [CHAIN_IDs.WORLD_CHAIN]: 86400, [CHAIN_IDs.ZK_SYNC]: 172800, @@ -351,6 +363,7 @@ export const SUPPORTED_TOKENS: { [chainId: number]: string[] } = { [CHAIN_IDs.SOLANA]: ["USDC"], [CHAIN_IDs.SONEIUM]: ["WETH", "USDC"], [CHAIN_IDs.TEMPO]: ["USDC"], + [CHAIN_IDs.TRON]: ["USDT"], [CHAIN_IDs.UNICHAIN]: ["ETH", "WETH", "USDC", "USDT", "ezETH"], [CHAIN_IDs.WORLD_CHAIN]: ["WETH", "WBTC", "USDC", "WLD", "POOL"], [CHAIN_IDs.ZK_SYNC]: ["USDC", "USDT", "WETH", "WBTC", "DAI"], @@ -528,6 +541,9 @@ export const CUSTOM_BRIDGE: Record> = new Map( ], ]); +export const LEGACY_MESH_NETWORKS: number[] = [CHAIN_IDs.TRON]; + +export const EVM_LEGACY_MESH_MESSENGERS: Map> = new Map([ + [ + TOKEN_SYMBOLS_MAP.USDT.addresses[CHAIN_IDs.MAINNET], + new Map([ + [CHAIN_IDs.MAINNET, EvmAddress.from("0x1F748c76dE468e9D11bd340fA9D5CBADf315dFB0")], + [CHAIN_IDs.TRON, EvmAddress.from("0x3a08f76772e200653bb55c2a92998daca62e0e97")], // Cast this address to an EvmAddress + ]), + ], +]); + // In rare circumstances, we may need to pay the LZ bridge fee in a custom token, such as when // the network we are bridging on does not have a native token. Specify that here. export const LZ_FEE_TOKENS: { [chainId: number]: EvmAddress } = { diff --git a/src/rebalancer/adapters/oftAdapter.ts b/src/rebalancer/adapters/oftAdapter.ts index 11cf193804..a404cc4e33 100644 --- a/src/rebalancer/adapters/oftAdapter.ts +++ b/src/rebalancer/adapters/oftAdapter.ts @@ -62,7 +62,7 @@ export class OftAdapter extends BaseAdapter { const connectedSigner = this.baseSigner.connect(await getProvider(chainId)); if (EVM_OFT_MESSENGERS.get(TOKEN_SYMBOLS_MAP.USDT.addresses[CHAIN_IDs.MAINNET])?.has(chainId)) { const usdt = new Contract(this._getTokenInfo("USDT", chainId).address.toNative(), ERC20.abi, connectedSigner); - const oftMessenger = await this._getOftMessenger(chainId); + const oftMessenger = await this._getOftMessenger(chainId, chainId); const oftAllowance = await usdt.allowance(this.baseSignerAddress.toNative(), oftMessenger.address); if (oftAllowance.lt(toBN(MAX_SAFE_ALLOWANCE).div(2))) { this.multicallerClient.enqueueTransaction({ @@ -187,10 +187,11 @@ export class OftAdapter extends BaseAdapter { return this._redisGetPendingBridgesPreDeposit(); } - protected async _getOftMessenger(chainId: number): Promise { + protected async _getOftMessenger(chainId: number, destinationChainId: number): Promise { const oftMessengerAddress = getMessengerEvm( EvmAddress.from(this._getTokenInfo("USDT", CHAIN_IDs.MAINNET).address.toNative()), - chainId + chainId, + destinationChainId ); const originProvider = await getProvider(chainId); return new Contract(oftMessengerAddress.toNative(), IOFT_ABI_FULL, this.baseSigner.connect(originProvider)); @@ -205,7 +206,7 @@ export class OftAdapter extends BaseAdapter { sendParamStruct: SendParamStruct; oftMessenger: Contract; }> { - const oftMessenger = await this._getOftMessenger(originChain); + const oftMessenger = await this._getOftMessenger(originChain, destinationChain); const sharedDecimals = await oftMessenger.sharedDecimals(); const roundedAmount = roundAmountToSend( diff --git a/src/utils/BridgeUtils.ts b/src/utils/BridgeUtils.ts index 1dde72c9a4..81301fcce8 100644 --- a/src/utils/BridgeUtils.ts +++ b/src/utils/BridgeUtils.ts @@ -5,20 +5,24 @@ import axios, { RawAxiosRequestHeaders } from "axios"; // API supports multiple destination tokens for a single L1 token. export const BRIDGE_API_DESTINATION_TOKENS: { [l2ChainId: number]: string } = { [CHAIN_IDs.TEMPO]: TOKEN_SYMBOLS_MAP.pathUSD.addresses[CHAIN_IDs.TEMPO], + [CHAIN_IDs.TRON]: TOKEN_SYMBOLS_MAP.USDT.addresses[CHAIN_IDs.TRON], }; export const BRIDGE_API_DESTINATION_TOKEN_SYMBOLS: { [address: string]: string } = { [TOKEN_SYMBOLS_MAP.pathUSD.addresses[CHAIN_IDs.TEMPO]]: "path_usd", + [TOKEN_SYMBOLS_MAP.USDT.addresses[CHAIN_IDs.TRON]]: "usdt", }; const NETWORK_NAMES: { [chainId: number]: string } = { [CHAIN_IDs.MAINNET]: "ethereum", [CHAIN_IDs.TEMPO]: "tempo", + [CHAIN_IDs.TRON]: "tron", }; export const BRIDGE_API_MINIMUMS: { [sourceChainId: number]: { [dstChainId: number]: BigNumber } } = { [CHAIN_IDs.MAINNET]: { [CHAIN_IDs.TEMPO]: toBN(5_000_000), // 5 USD + [CHAIN_IDs.TRON]: toBN(5_000_000), // 5 USD }, [CHAIN_IDs.TEMPO]: { [CHAIN_IDs.MAINNET]: toBN(5_000_000), // 5 USD diff --git a/src/utils/ContractUtils.ts b/src/utils/ContractUtils.ts index a074f90bcb..c8b8219230 100644 --- a/src/utils/ContractUtils.ts +++ b/src/utils/ContractUtils.ts @@ -7,8 +7,8 @@ import { getDeployedBlockNumber, EvmAddress, chainIsEvm, - SvmAddress, Address, + toAddressType, isDefined, } from "."; import { CONTRACT_ADDRESSES } from "../common"; @@ -58,7 +58,7 @@ export function getPermit2(chainId: number, address?: string): Contract { export function getSpokePoolAddress(chainId: number): Address { const evmChain = chainIsEvm(chainId); const addr = getDeployedAddress(evmChain ? "SpokePool" : "SvmSpoke", chainId, true); - return evmChain ? EvmAddress.from(addr) : SvmAddress.from(addr); + return toAddressType(addr, chainId); } export function getHubPoolAddress(chainId: number): EvmAddress { diff --git a/src/utils/OFTUtils.ts b/src/utils/OFTUtils.ts index 39fcc0b0c0..5df2be67fe 100644 --- a/src/utils/OFTUtils.ts +++ b/src/utils/OFTUtils.ts @@ -15,7 +15,7 @@ import { } from "."; import { BytesLike } from "ethers"; import axios from "axios"; -import { EVM_OFT_MESSENGERS } from "../common"; +import { EVM_OFT_MESSENGERS, LEGACY_MESH_NETWORKS, EVM_LEGACY_MESH_MESSENGERS } from "../common"; import { SortableEvent } from "../interfaces"; export type SendParamStruct = { @@ -78,8 +78,9 @@ export function getChainIdFromEndpointId(eid: number): number { * @returns IOFT messenger for a given chain. Only supports EVM chains for now * @throws If EVM_OFT_MESSENGERS mapping doesn't have an entry for the l1Token - chainId combination */ -export function getMessengerEvm(l1TokenAddress: EvmAddress, chainId: number): EvmAddress { - const messenger = EVM_OFT_MESSENGERS.get(l1TokenAddress.toNative())?.get(chainId); +export function getMessengerEvm(l1TokenAddress: EvmAddress, chainId: number, l2ChainId): EvmAddress { + const messengerMap = LEGACY_MESH_NETWORKS.includes(l2ChainId) ? EVM_LEGACY_MESH_MESSENGERS : EVM_OFT_MESSENGERS; + const messenger = messengerMap.get(l1TokenAddress.toNative())?.get(chainId); assert(isDefined(messenger), `No OFT messenger configured for ${l1TokenAddress.toNative()} on chain ${chainId}`); return messenger; } @@ -89,7 +90,7 @@ export function getMessengerEvm(l1TokenAddress: EvmAddress, chainId: number): Ev * @returns If the input chain ID's OFT adapter requires payment in the input token. */ export function isStargateBridge(chainId: number): boolean { - return [CHAIN_IDs.PLASMA, CHAIN_IDs.TEMPO].includes(chainId); + return [CHAIN_IDs.PLASMA, CHAIN_IDs.TRON, CHAIN_IDs.TEMPO].includes(chainId); } /** diff --git a/src/utils/SDKUtils.ts b/src/utils/SDKUtils.ts index 08a0b75573..ad0be4dcdb 100644 --- a/src/utils/SDKUtils.ts +++ b/src/utils/SDKUtils.ts @@ -12,11 +12,12 @@ export class SvmCpiEventsClient extends sdk.arch.svm.SvmCpiEventsClient {} export class PriceClient extends sdk.priceClient.PriceClient {} export const { acrossApi, coingecko, defiLlama } = sdk.priceClient.adapters; -export const { isEVMSpokePoolClient, isSVMSpokePoolClient } = sdk.clients; +export const { isEVMSpokePoolClient, isSVMSpokePoolClient, isTVMSpokePoolClient } = sdk.clients; export class Address extends sdk.utils.Address {} export class EvmAddress extends sdk.utils.EvmAddress {} export class SvmAddress extends sdk.utils.SvmAddress {} +export class TvmAddress extends sdk.utils.TvmAddress {} export type EvmGasPriceEstimate = sdk.gasPriceOracle.EvmGasPriceEstimate; @@ -115,6 +116,7 @@ export const { unpackDepositEvent, unpackFillEvent, chainHasNativeToken, + chainIsTvm, } = sdk.utils; export const { diff --git a/yarn.lock b/yarn.lock index dd405a91de..baa41db1de 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7,15 +7,15 @@ resolved "https://registry.yarnpkg.com/@across-protocol/constants/-/constants-3.1.100.tgz#ac7f7910340e62abb66dceea451e96f590742211" integrity sha512-HWALdgQHY7Q0IQFMCThi/bcUp1CTgb/sdVmRvj5sLkjz2tFZfCcPA0nKzKK+5pXD3hdd2W44uqQA58Z19XhSSw== -"@across-protocol/constants@^3.1.102": - version "3.1.103" - resolved "https://registry.yarnpkg.com/@across-protocol/constants/-/constants-3.1.103.tgz#cce4f1518b07f7f0006489fdf5d4bc26e4e9972a" - integrity sha512-ghMBQLm1PpCAwMQ/VVR3hXc1eHnhvHecIAAM+JYxre/lfQnt9LriPTHRDHdnXt18GRfKsLPKnQdfoZUfNWXJ8A== +"@across-protocol/constants@^3.1.105", "@across-protocol/constants@^3.1.106": + version "3.1.107" + resolved "https://registry.yarnpkg.com/@across-protocol/constants/-/constants-3.1.107.tgz#2cee35c44bf51e9dbf698692042e05669b81173e" + integrity sha512-KNl33gft0pAyA0jSmEXMZzF0GUfycbFabl8/TdsfeK6i+qonThxIC44y1u0EJ17WNe0aY7917Tr1IDp6UpqaoA== -"@across-protocol/contracts@5.0.4": - version "5.0.4" - resolved "https://registry.yarnpkg.com/@across-protocol/contracts/-/contracts-5.0.4.tgz#1cb63c81538a75f67f8df8421a088b96d51b7c06" - integrity sha512-6XADW4ntJZYAH0vYjTazL0lfakwp1uOWHtcrELSdSir4TRSMf9ieaXAHt/oDHkSFQaNSiyJ+xU63cNsdX05CgQ== +"@across-protocol/contracts@5.0.5-alpha.0": + version "5.0.5-alpha.0" + resolved "https://registry.yarnpkg.com/@across-protocol/contracts/-/contracts-5.0.5-alpha.0.tgz#1c7f86d41bdf2e839bcd28940079173492b95050" + integrity sha512-qQ2DoN2gBGkdNlWlV2b3K5WGd9IQLQkkqYECDMXk4rHPZCDjh/uUPoIxqlIYtSvLSSEPpf/sWM2MB8IArBuFyg== dependencies: "@across-protocol/constants" "^3.1.100" "@coral-xyz/anchor" "^0.31.1" @@ -28,25 +28,23 @@ "@openzeppelin/contracts-upgradeable-v4" "npm:@openzeppelin/contracts-upgradeable@4.9.6" "@openzeppelin/contracts-v4" "npm:@openzeppelin/contracts@4.9.6" "@openzeppelin/foundry-upgrades" "^0.4.0" - "@safe-global/protocol-kit" "^6.1.1" "@scroll-tech/contracts" "^0.1.0" "@solana-program/address-lookup-table" "0.10.0" "@solana-program/token" "0.9.0" "@solana/kit" "^5.4.0" "@solana/spl-token" "0.4.14" "@solana/web3.js" "1.98.2" - "@types/yargs" "^17.0.33" bs58 "^6.0.0" + tronweb "^6.2.0" yargs "^17.7.2" - zksync-web3 "^0.14.3" -"@across-protocol/sdk@4.3.136": - version "4.3.136" - resolved "https://registry.yarnpkg.com/@across-protocol/sdk/-/sdk-4.3.136.tgz#d85b681a088c31eab261dc66c15c4fa087c517cb" - integrity sha512-uo9Ran/+z/Vive+TJezzfc6j3Kvh59aoJJQ+udgpaR1Qix0lFZTB+VJJi/1097rk31ovHUTSoZfDlWJmsmt/FQ== +"@across-protocol/sdk@4.3.137-alpha.3": + version "4.3.137-alpha.3" + resolved "https://registry.yarnpkg.com/@across-protocol/sdk/-/sdk-4.3.137-alpha.3.tgz#feb2ed03b2bd3974583d43039b9768e92204f891" + integrity sha512-d2IKDQrYxow8jZcIyzCRL/BUC2HeGkpeRGfz3G03fYIAoABML5AU7uaOZJR9lb1wvmwXF1GpXaPMQxcr0jYw1g== dependencies: - "@across-protocol/constants" "^3.1.100" - "@across-protocol/contracts" "5.0.4" + "@across-protocol/constants" "^3.1.106" + "@across-protocol/contracts" "5.0.5-alpha.0" "@coral-xyz/anchor" "^0.30.1" "@eth-optimism/sdk" "^3.3.1" "@ethersproject/bignumber" "^5.7.0" @@ -69,6 +67,7 @@ lodash.get "^4.4.2" node-gyp "^11.0.0" superstruct "^0.15.4" + tronweb "^6.2.2" tslib "^2.6.2" viem "^2.21.15" winston "^3.17.0" @@ -137,6 +136,13 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.0.tgz#da950e622420bf96ca0d0f2909cdddac3acd8719" integrity sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw== +"@babel/runtime@7.26.10": + version "7.26.10" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.26.10.tgz#a07b4d8fa27af131a633d7b3524db803eb4764c2" + integrity sha512-2WJMeRQPHKSPemqk/awGrAiuFfzBmOIPXKizAsVhWH9YJqLZ0H+HS4c8loHGgW6utJ3E/ejXQUsiGaQy2NZ9Fw== + dependencies: + regenerator-runtime "^0.14.0" + "@babel/runtime@^7.25.0": version "7.26.0" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.26.0.tgz#8600c2f595f277c60815256418b85356a65173c1" @@ -1356,7 +1362,7 @@ dependencies: "@noble/hashes" "1.8.0" -"@noble/curves@^1.4.2", "@noble/curves@^1.6.0": +"@noble/curves@^1.4.2": version "1.6.0" resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.6.0.tgz#be5296ebcd5a1730fccea4786d420f87abfeb40b" integrity sha512-TlaHRXDehJuRNR9TfZDNQ45mMEd5dwUwmicsafcIX4SsNiqnCHKjE/1alYPd/lDRVhxdhUAlv8uEhMCI5zjIJQ== @@ -1872,15 +1878,6 @@ browser-or-node "^2.0.0" cross-fetch "^3.0.6" -"@peculiar/asn1-schema@^2.3.13": - version "2.5.0" - resolved "https://registry.yarnpkg.com/@peculiar/asn1-schema/-/asn1-schema-2.5.0.tgz#4e58d7c3087c4259cebf5363e092f85b9cbf0ca1" - integrity sha512-YM/nFfskFJSlHqv59ed6dZlLZqtZQwjRVJ4bBAiWV08Oc+1rSd5lDZcBEx0lGDHfSoH3UziI2pXt2UM33KerPQ== - dependencies: - asn1js "^3.0.6" - pvtsutils "^1.3.6" - tslib "^2.8.1" - "@pinata/sdk@^2.1.0": version "2.1.0" resolved "https://registry.yarnpkg.com/@pinata/sdk/-/sdk-2.1.0.tgz#d61aa8f21ec1206e867f4b65996db52b70316945" @@ -2073,40 +2070,6 @@ node-fetch "^2.3.0" viem "^2.37.2" -"@safe-global/protocol-kit@^6.1.1": - version "6.1.1" - resolved "https://registry.yarnpkg.com/@safe-global/protocol-kit/-/protocol-kit-6.1.1.tgz#f9c262f7b9fbafa0f58e2e9185b3e4cb28d43e26" - integrity sha512-SlRosKB52h1CV2gMlKG4UOvh2j4tXuzz1GZ/yQ1HD0Zvm5azUlaytFwKzHun9xNVvfe+vvSNHUEGX2Umy+rQ9A== - dependencies: - "@safe-global/safe-deployments" "^1.37.42" - "@safe-global/safe-modules-deployments" "^2.2.14" - "@safe-global/types-kit" "^3.0.0" - abitype "^1.0.2" - semver "^7.7.2" - viem "^2.21.8" - optionalDependencies: - "@noble/curves" "^1.6.0" - "@peculiar/asn1-schema" "^2.3.13" - -"@safe-global/safe-deployments@^1.37.42": - version "1.37.47" - resolved "https://registry.yarnpkg.com/@safe-global/safe-deployments/-/safe-deployments-1.37.47.tgz#9343451979d8ec53676ec71eb6ee422732ca1cd8" - integrity sha512-abxu9nmvjfDahCIFdrHw4ENZ1CD60z/bgrv5cV3+sygADU1vuh96jFumebo+6PR/Q5qz5glrQuLwEtZ8K/lvJQ== - dependencies: - semver "^7.6.2" - -"@safe-global/safe-modules-deployments@^2.2.14": - version "2.2.18" - resolved "https://registry.yarnpkg.com/@safe-global/safe-modules-deployments/-/safe-modules-deployments-2.2.18.tgz#51cf689da2b979d9b0bbccd7d2dbf4741b33b872" - integrity sha512-OQwoguGdano/XPMSbzc9cMuRXW84KCSAoG9avKRo5O4AcGLMNDqXTYG993a3k6QeWGpPwpl9LFEpwT0oAZ6UwQ== - -"@safe-global/types-kit@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@safe-global/types-kit/-/types-kit-3.0.0.tgz#b35826af0e417fa02a540b874c109b5ddb5ed086" - integrity sha512-AZWIlR5MguDPdGiOj7BB4JQPY2afqmWQww1mu8m8Oi16HHBW99G01kFOu4NEHBwEU1cgwWOMY19hsI5KyL4W2w== - dependencies: - abitype "^1.0.2" - "@sapphire/async-queue@^1.5.0": version "1.5.0" resolved "https://registry.yarnpkg.com/@sapphire/async-queue/-/async-queue-1.5.0.tgz#2f255a3f186635c4fb5a2381e375d3dfbc5312d8" @@ -3213,18 +3176,6 @@ dependencies: "@types/node" "*" -"@types/yargs-parser@*": - version "21.0.3" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" - integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== - -"@types/yargs@^17.0.33": - version "17.0.33" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.33.tgz#8c32303da83eec050a84b3c7ae7b9f922d13e32d" - integrity sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA== - dependencies: - "@types/yargs-parser" "*" - "@typescript-eslint/eslint-plugin@^8": version "8.57.2" resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.57.2.tgz#ad0dcefeca9c2ecbe09f730d478063666aee010b" @@ -3369,7 +3320,7 @@ abitype@1.2.3, abitype@^1.2.3: resolved "https://registry.yarnpkg.com/abitype/-/abitype-1.2.3.tgz#bec3e09dea97d99ef6c719140bee663a329ad1f4" integrity sha512-Ofer5QUnuUdTFsBRwARMoWKOH1ND5ehwYhJ3OJ/BQO+StkwQjHw0XyVh4vDttzHB7QOFhPHa/o413PJ82gU/Tg== -abitype@^1.0.2, abitype@^1.0.9: +abitype@^1.0.9: version "1.1.1" resolved "https://registry.yarnpkg.com/abitype/-/abitype-1.1.1.tgz#b50ed400f8bfca5452eb4033445c309d3e1117c8" integrity sha512-Loe5/6tAgsBukY95eGaPSDmQHIjRZYQq8PB1MpsNccDIK8WiV+Uw6WzaIXipvaxTEL2yEB0OpEaQv3gs8pkS9Q== @@ -3711,15 +3662,6 @@ asn1@~0.2.3: dependencies: safer-buffer "~2.1.0" -asn1js@^3.0.6: - version "3.0.6" - resolved "https://registry.yarnpkg.com/asn1js/-/asn1js-3.0.6.tgz#53e002ebe00c5f7fd77c1c047c3557d7c04dce25" - integrity sha512-UOCGPYbl0tv8+006qks/dTgV9ajs97X2p0FAbyS2iyCRrmLSRolDaHdp+v/CLgnzHc3fVB+CwYiUmei7ndFcgA== - dependencies: - pvtsutils "^1.3.6" - pvutils "^1.1.3" - tslib "^2.8.1" - assert-plus@1.0.0, assert-plus@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" @@ -3792,6 +3734,15 @@ aws4@^1.8.0: resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== +axios@1.13.5: + version "1.13.5" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.13.5.tgz#5e464688fa127e11a660a2c49441c009f6567a43" + integrity sha512-cz4ur7Vb0xS4/KUN0tPWe44eqxrIu31me+fbang3ijiNscE129POzipJJA6zniq2C/Z6sJCjMimjS8Lc/GAs8Q== + dependencies: + follow-redirects "^1.15.11" + form-data "^4.0.5" + proxy-from-env "^1.1.0" + axios@^0.21.1, axios@^0.21.2: version "0.21.4" resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" @@ -3884,16 +3835,16 @@ bigint-buffer@^1.1.5: dependencies: bindings "^1.3.0" +bignumber.js@9.1.2, bignumber.js@^9.0.2: + version "9.1.2" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.2.tgz#b7c4242259c008903b13707983b5f4bbd31eda0c" + integrity sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug== + bignumber.js@^9.0.0, bignumber.js@^9.0.1: version "9.0.2" resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.2.tgz#71c6c6bed38de64e24a65ebe16cfcf23ae693673" integrity sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw== -bignumber.js@^9.0.2: - version "9.1.2" - resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.2.tgz#b7c4242259c008903b13707983b5f4bbd31eda0c" - integrity sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug== - bin-links@^2.2.1: version "2.3.0" resolved "https://registry.yarnpkg.com/bin-links/-/bin-links-2.3.0.tgz#1ff241c86d2c29b24ae52f49544db5d78a4eb967" @@ -5593,6 +5544,16 @@ ethereum-cryptography@0.1.3, ethereum-cryptography@^0.1.3: secp256k1 "^4.0.1" setimmediate "^1.0.5" +ethereum-cryptography@2.2.1, ethereum-cryptography@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz#58f2810f8e020aecb97de8c8c76147600b0b8ccf" + integrity sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg== + dependencies: + "@noble/curves" "1.4.2" + "@noble/hashes" "1.4.0" + "@scure/bip32" "1.4.0" + "@scure/bip39" "1.3.0" + ethereum-cryptography@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-1.0.3.tgz#b1f8f4e702434b2016248dbb2f9fdd60c54772d8" @@ -5603,16 +5564,6 @@ ethereum-cryptography@^1.0.3: "@scure/bip32" "1.0.1" "@scure/bip39" "1.0.0" -ethereum-cryptography@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz#58f2810f8e020aecb97de8c8c76147600b0b8ccf" - integrity sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg== - dependencies: - "@noble/curves" "1.4.2" - "@noble/hashes" "1.4.0" - "@scure/bip32" "1.4.0" - "@scure/bip39" "1.3.0" - ethereumjs-util@^7.0.3, ethereumjs-util@^7.1.0, ethereumjs-util@^7.1.4, ethereumjs-util@^7.1.5: version "7.1.5" resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz#9ecf04861e4fbbeed7465ece5f23317ad1129181" @@ -5624,6 +5575,19 @@ ethereumjs-util@^7.0.3, ethereumjs-util@^7.1.0, ethereumjs-util@^7.1.4, ethereum ethereum-cryptography "^0.1.3" rlp "^2.2.4" +ethers@6.13.5: + version "6.13.5" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.13.5.tgz#8c1d6ac988ac08abc3c1d8fabbd4b8b602851ac4" + integrity sha512-+knKNieu5EKRThQJWwqaJ10a6HE9sSehGeqWN65//wE7j47ZpFhKAnHB/JJFibwwg61I/koxaPsXbXpD/skNOQ== + dependencies: + "@adraffy/ens-normalize" "1.10.1" + "@noble/curves" "1.2.0" + "@noble/hashes" "1.3.2" + "@types/node" "22.7.5" + aes-js "4.0.0-beta.5" + tslib "2.7.0" + ws "8.17.1" + ethers@^5.1.0, ethers@^5.5.1, ethers@^5.5.3, ethers@^5.7.2, ethers@~5.7.0: version "5.7.2" resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.2.tgz#3a7deeabbb8c030d4126b24f84e525466145872e" @@ -5934,6 +5898,11 @@ follow-redirects@^1.12.1, follow-redirects@^1.14.0, follow-redirects@^1.14.9, fo resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.9.tgz#a604fa10e443bf98ca94228d9eebcc2e8a2c8ee1" integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== +follow-redirects@^1.15.11: + version "1.15.11" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.11.tgz#777d73d72a92f8ec4d2e410eb47352a56b8e8340" + integrity sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ== + foreground-child@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" @@ -5976,6 +5945,17 @@ form-data@^4.0.4: hasown "^2.0.2" mime-types "^2.1.12" +form-data@^4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.5.tgz#b49e48858045ff4cbf6b03e1805cebcad3679053" + integrity sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + es-set-tostringtag "^2.1.0" + hasown "^2.0.2" + mime-types "^2.1.12" + form-data@~2.3.2: version "2.3.3" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" @@ -6448,6 +6428,11 @@ google-p12-pem@^4.0.0: dependencies: node-forge "^1.3.1" +google-protobuf@3.21.4: + version "3.21.4" + resolved "https://registry.yarnpkg.com/google-protobuf/-/google-protobuf-3.21.4.tgz#2f933e8b6e5e9f8edde66b7be0024b68f77da6c9" + integrity sha512-MnG7N936zcKTco4Jd2PX2U96Kf9PxygAPKBug+74LHzmHXmceN16MmRcdgZv+DGef/S9YvQAfRsNCn4cjf9yyQ== + gopd@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" @@ -9316,18 +9301,6 @@ punycode@^2.1.0, punycode@^2.1.1: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== -pvtsutils@^1.3.6: - version "1.3.6" - resolved "https://registry.yarnpkg.com/pvtsutils/-/pvtsutils-1.3.6.tgz#ec46e34db7422b9e4fdc5490578c1883657d6001" - integrity sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg== - dependencies: - tslib "^2.8.1" - -pvutils@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/pvutils/-/pvutils-1.1.3.tgz#f35fc1d27e7cd3dfbd39c0826d173e806a03f5a3" - integrity sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ== - qrcode-terminal@^0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz#bb5b699ef7f9f0505092a3748be4464fe71b5819" @@ -9812,6 +9785,11 @@ semaphore-async-await@^1.5.1: resolved "https://registry.yarnpkg.com/semaphore-async-await/-/semaphore-async-await-1.5.1.tgz#857bef5e3644601ca4b9570b87e9df5ca12974fa" integrity sha1-hXvvXjZEYBykuVcLh+nfXKEpdPo= +semver@7.7.1: + version "7.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.1.tgz#abd5098d82b18c6c81f6074ff2647fd3e7220c9f" + integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA== + semver@^5.3.0, semver@^5.5.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" @@ -9846,11 +9824,6 @@ semver@^7.6.0: dependencies: lru-cache "^6.0.0" -semver@^7.6.2, semver@^7.7.2: - version "7.7.3" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.3.tgz#4b5f4143d007633a8dc671cd0a6ef9147b8bb946" - integrity sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q== - send@0.19.0: version "0.19.0" resolved "https://registry.yarnpkg.com/send/-/send-0.19.0.tgz#bbc5a388c8ea6c048967049dbeac0e4a3f09d7f8" @@ -10603,6 +10576,21 @@ triple-beam@^1.3.0: resolved "https://registry.yarnpkg.com/triple-beam/-/triple-beam-1.3.0.tgz#a595214c7298db8339eeeee083e4d10bd8cb8dd9" integrity sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw== +tronweb@^6.2.0, tronweb@^6.2.2: + version "6.2.2" + resolved "https://registry.yarnpkg.com/tronweb/-/tronweb-6.2.2.tgz#84e3e89b903d76b5becfdbd0c451f7169abaf1c1" + integrity sha512-jRBf4+7fJ0HUVzveBi0tE21r3EygCNtbYE92T38Sxlwr/x320W2vz+dvGLOIpp4kW/CvJ4HLvtnb6U30A0V2eA== + dependencies: + "@babel/runtime" "7.26.10" + axios "1.13.5" + bignumber.js "9.1.2" + ethereum-cryptography "2.2.1" + ethers "6.13.5" + eventemitter3 "5.0.1" + google-protobuf "3.21.4" + semver "7.7.1" + validator "13.15.23" + ts-api-utils@^2.4.0: version "2.5.0" resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-2.5.0.tgz#4acd4a155e22734990a5ed1fe9e97f113bcb37c1" @@ -10960,6 +10948,11 @@ validate-npm-package-name@^3.0.0, validate-npm-package-name@~3.0.0: dependencies: builtins "^1.0.3" +validator@13.15.23: + version "13.15.23" + resolved "https://registry.yarnpkg.com/validator/-/validator-13.15.23.tgz#59a874f84e4594588e3409ab1edbe64e96d0c62d" + integrity sha512-4yoz1kEWqUjzi5zsPbAS/903QXSYp0UOtHsPpp7p9rHAw/W+dkInskAE386Fat3oKRROwO98d9ZB0G4cObgUyw== + validator@^13.9.0: version "13.11.0" resolved "https://registry.yarnpkg.com/validator/-/validator-13.11.0.tgz#23ab3fd59290c61248364eabf4067f04955fbb1b" @@ -10998,20 +10991,6 @@ viem@^2.21.15, viem@~2.46.0: ox "0.12.1" ws "8.18.3" -viem@^2.21.8: - version "2.38.3" - resolved "https://registry.yarnpkg.com/viem/-/viem-2.38.3.tgz#316905584d60188d3a921fc3960e55e9e46cb3f4" - integrity sha512-By2TutLv07iNHHtWqHHzjGipevYsfGqT7KQbGEmqLco1qTJxKnvBbSviqiu6/v/9REV6Q/FpmIxf2Z7/l5AbcQ== - dependencies: - "@noble/curves" "1.9.1" - "@noble/hashes" "1.8.0" - "@scure/bip32" "1.7.0" - "@scure/bip39" "1.6.0" - abitype "1.1.0" - isows "1.0.7" - ox "0.9.6" - ws "8.18.3" - viem@^2.37.2: version "2.37.8" resolved "https://registry.yarnpkg.com/viem/-/viem-2.37.8.tgz#5290a041c9bfbf9ea92e6348d65bb05e928c2ee0"