diff --git a/apps/ui/package.json b/apps/ui/package.json index 1f2a4ea9e..34482be9b 100644 --- a/apps/ui/package.json +++ b/apps/ui/package.json @@ -51,13 +51,13 @@ "@solana/spl-token": "^0.3.5", "@solana/web3.js": "^1.62.0", "@swim-io/aptos": "workspace:^", - "@swim-io/core": "^0.40.0", + "@swim-io/core": "workspace:^", "@swim-io/evm": "^0.40.0", "@swim-io/evm-contracts": "^0.40.0", "@swim-io/pool-math": "^0.40.0", "@swim-io/solana": "^0.40.0", "@swim-io/solana-contracts": "^0.40.0", - "@swim-io/token-projects": "^0.40.0", + "@swim-io/token-projects": "workspace:^", "@swim-io/utils": "^0.40.0", "@swim-io/wormhole": "^0.40.0", "bn.js": "^5.2.1", diff --git a/apps/ui/src/hooks/swim/usePoolMaths.ts b/apps/ui/src/hooks/swim/usePoolMaths.ts index 4bf1e6c08..343aafc17 100644 --- a/apps/ui/src/hooks/swim/usePoolMaths.ts +++ b/apps/ui/src/hooks/swim/usePoolMaths.ts @@ -7,7 +7,7 @@ import { bnOrBigNumberToDecimal } from "../../amounts"; import { getTokenDetailsForEcosystem } from "../../config"; import { selectConfig } from "../../core/selectors"; import { useEnvironment } from "../../core/store"; -import { Amount, isEvmPoolState } from "../../models"; +import { Amount, isAptosPoolState, isEvmPoolState } from "../../models"; import type { PoolData } from "./usePools"; import { usePools } from "./usePools"; @@ -47,6 +47,10 @@ const getPoolMath = ({ ); } + if (isAptosPoolState(poolState)) { + return null; // TODO aptos + } + if ( poolLpMint === null || poolTokenAccounts === null || diff --git a/apps/ui/src/hooks/swim/usePoolStateQueries.ts b/apps/ui/src/hooks/swim/usePoolStateQueries.ts index 629a970b6..71fdeb5a3 100644 --- a/apps/ui/src/hooks/swim/usePoolStateQueries.ts +++ b/apps/ui/src/hooks/swim/usePoolStateQueries.ts @@ -10,6 +10,7 @@ import { selectConfig } from "../../core/selectors"; import { useEnvironment } from "../../core/store"; import type { PoolState } from "../../models"; import { getEvmPoolState, getSolanaPoolState } from "../../models"; +import { useAptosClient } from "../aptos"; import { useGetEvmClient } from "../evm"; import { useSolanaClient } from "../solana"; @@ -18,6 +19,7 @@ export const usePoolStateQueries = ( ): readonly UseQueryResult[] => { const { env } = useEnvironment(); const { tokens } = useEnvironment(selectConfig, shallow); + const aptosClient = useAptosClient(); const getEvmConnection = useGetEvmClient(); const solanaClient = useSolanaClient(); @@ -30,7 +32,12 @@ export const usePoolStateQueries = ( return await getSolanaPoolState(solanaClient, poolSpec); } if (ecosystem === APTOS_ECOSYSTEM_ID) { - return null; // TODO aptos + const poolState = await aptosClient.getPoolState(poolSpec.id); + + return { + ...poolState, + ecosystem: APTOS_ECOSYSTEM_ID, + }; } const evmConnection = getEvmConnection(ecosystem); const routingContractAddress = diff --git a/apps/ui/src/hooks/swim/usePools.ts b/apps/ui/src/hooks/swim/usePools.ts index 066416e49..6cbc24423 100644 --- a/apps/ui/src/hooks/swim/usePools.ts +++ b/apps/ui/src/hooks/swim/usePools.ts @@ -9,7 +9,11 @@ import { getSolanaTokenDetails } from "../../config"; import { selectConfig } from "../../core/selectors"; import { useEnvironment } from "../../core/store"; import type { PoolState } from "../../models"; -import { getPoolUsdValue, isEvmPoolState } from "../../models"; +import { + getPoolUsdValue, + isAptosPoolState, + isEvmPoolState, +} from "../../models"; import { useSolanaTokenAccountQueries, useSolanaWallet, @@ -73,6 +77,22 @@ const constructPool = ( }; } + if (isAptosPoolState(poolState)) { + return { + spec: poolSpec, + nativeEcosystems, + lpToken, + tokens, + state: poolState, + poolUsdValue: Decimal.sum(...poolState.balances), + isPoolPaused: poolState.isPaused, + // solana based attributes + poolLpMint: null, + poolTokenAccounts: null, + userLpTokenAccount: null, + }; + } + if (isEvmPoolState(poolState)) { return { spec: poolSpec, diff --git a/apps/ui/src/hooks/swim/useUserLpBalances.ts b/apps/ui/src/hooks/swim/useUserLpBalances.ts index 9cb8799d4..321047c82 100644 --- a/apps/ui/src/hooks/swim/useUserLpBalances.ts +++ b/apps/ui/src/hooks/swim/useUserLpBalances.ts @@ -6,6 +6,7 @@ import { SOLANA_ECOSYSTEM_ID } from "@swim-io/solana"; import type { EcosystemId, TokenConfig } from "../../config"; import { getTokenDetailsForEcosystem } from "../../config"; import { Amount } from "../../models"; +import { useAptosTokenBalanceQuery } from "../aptos"; import { useErc20BalanceQuery } from "../evm"; export const useUserLpBalances = ( @@ -45,8 +46,20 @@ export const useUserLpBalances = ( ? Amount.fromHuman(lpTokenConfig, userLpBalanceBnbHuman) : null; + // aptos + const aptosTokenDetails = + getTokenDetailsForEcosystem(lpTokenConfig, APTOS_ECOSYSTEM_ID) ?? null; + const { data: userLpBalanceAptosHuman = null } = useAptosTokenBalanceQuery( + aptosTokenDetails, + { enabled: !!aptosTokenDetails }, + ); + const userLpBalanceAptos = + aptosTokenDetails && userLpBalanceAptosHuman + ? Amount.fromHuman(lpTokenConfig, userLpBalanceAptosHuman) + : null; + return { - [APTOS_ECOSYSTEM_ID]: null, + [APTOS_ECOSYSTEM_ID]: userLpBalanceAptos, [SOLANA_ECOSYSTEM_ID]: userLpBalanceSolana, [EvmEcosystemId.Ethereum]: userLpBalanceEthereum, [EvmEcosystemId.Bnb]: userLpBalanceBnb, diff --git a/apps/ui/src/models/swim/pool.ts b/apps/ui/src/models/swim/pool.ts index 636fd6ca6..4d675af85 100644 --- a/apps/ui/src/models/swim/pool.ts +++ b/apps/ui/src/models/swim/pool.ts @@ -1,4 +1,7 @@ import { PublicKey } from "@solana/web3.js"; +import type { AptosEcosystemId } from "@swim-io/aptos"; +import { APTOS_ECOSYSTEM_ID } from "@swim-io/aptos"; +import type { PoolState as CorePoolState } from "@swim-io/core"; import type { EvmClient, EvmEcosystemId } from "@swim-io/evm"; import { isEvmEcosystemId } from "@swim-io/evm"; import { Routing__factory } from "@swim-io/evm-contracts"; @@ -44,7 +47,11 @@ export interface EvmPoolState { readonly governanceFee: Decimal; } -export type PoolState = SolanaPoolState | EvmPoolState; +export interface AptosPoolState extends CorePoolState { + readonly ecosystem: AptosEcosystemId; +} + +export type PoolState = AptosPoolState | SolanaPoolState | EvmPoolState; export type TokensByPoolId = ReadonlyRecord< string, // Pool ID @@ -157,6 +164,11 @@ export const isEvmPoolState = ( ): poolState is EvmPoolState => poolState !== null && isEvmEcosystemId(poolState.ecosystem); +export const isAptosPoolState = ( + poolState: PoolState | null, +): poolState is AptosPoolState => + poolState !== null && poolState.ecosystem === APTOS_ECOSYSTEM_ID; + export const isSolanaPoolState = ( poolState: PoolState, ): poolState is SolanaPoolState => poolState.ecosystem === SOLANA_ECOSYSTEM_ID; diff --git a/apps/ui/src/pages/PoolPage.tsx b/apps/ui/src/pages/PoolPage.tsx index e79b0b49f..5db1e6578 100644 --- a/apps/ui/src/pages/PoolPage.tsx +++ b/apps/ui/src/pages/PoolPage.tsx @@ -47,7 +47,7 @@ import { } from "../hooks"; import BNB_SVG from "../images/ecosystems/bnb.svg"; import ETHEREUM_SVG from "../images/ecosystems/ethereum.svg"; -import { isEvmPoolState } from "../models"; +import { isAptosPoolState, isEvmPoolState } from "../models"; import "./PoolPage.scss"; @@ -135,7 +135,27 @@ export const PoolPageInner = ({ ); const reserveStats = tokens.map((tokenConfig, i) => { - const solanaDetails = getSolanaTokenDetails(tokenConfig); + // loading state + if (poolState === null) { + return { + title: , + description: "-", + key: tokenConfig.id, + }; + } + + if (isAptosPoolState(poolState)) { + return { + title: ( + + ), + description: atomicToHumanString( + new Decimal(poolState.balances[i].toString()), + 2, + ), + key: tokenConfig.id, + }; + } if (isEvmPoolState(poolState)) { return { @@ -150,6 +170,7 @@ export const PoolPageInner = ({ }; } + const solanaDetails = getSolanaTokenDetails(tokenConfig); const poolTokenAccount = poolTokenAccounts?.find( (account) => diff --git a/packages/aptos/package.json b/packages/aptos/package.json index 44680ff9a..0e7159279 100644 --- a/packages/aptos/package.json +++ b/packages/aptos/package.json @@ -31,6 +31,7 @@ "prepare": "yarn verify && yarn build" }, "dependencies": { + "@pontem/liquidswap-sdk": "^0.0.1", "@swim-io/core": "workspace:^", "@swim-io/token-projects": "workspace:^", "@swim-io/utils": "workspace:^", diff --git a/packages/aptos/src/client.ts b/packages/aptos/src/client.ts index 5cf562d69..c94db0b16 100644 --- a/packages/aptos/src/client.ts +++ b/packages/aptos/src/client.ts @@ -1,7 +1,6 @@ -import type { TokenDetails, TxGeneratorResult } from "@swim-io/core"; +import type { PoolState, TokenDetails, TxGeneratorResult } from "@swim-io/core"; import { Client } from "@swim-io/core"; -import { atomicToHuman } from "@swim-io/utils"; -import type { Types } from "aptos"; +import { atomicToHuman, findOrThrow } from "@swim-io/utils"; import { APTOS_COIN, ApiError, @@ -10,6 +9,8 @@ import { } from "aptos"; import Decimal from "decimal.js"; +import { DAO_FEE_DECIMALS, FEE_DECIMALS, getPoolBalances } from "./liquidswap"; +import type { PoolResource } from "./liquidswap"; import type { AptosChainConfig, AptosEcosystemId, @@ -17,24 +18,14 @@ import type { AptosTxType, } from "./protocol"; import { APTOS_ECOSYSTEM_ID } from "./protocol"; +import type { CoinInfoResource, CoinResource, GasScheduleV2 } from "./types"; +import { getCoinInfoSupply, getCoinInfoType, getCoinStoreType } from "./utils"; import type { AptosWalletAdapter } from "./walletAdapters"; -interface GasScheduleV2 { - readonly entries: readonly { - readonly key: string; - readonly value: string; - }[]; -} - export interface AptosClientOptions { readonly endpoint: string; } -interface CoinResource { - readonly data: { readonly coin: { readonly value: string } }; - readonly type: Types.MoveStructTag; -} - export class AptosClient extends Client< AptosEcosystemId, AptosChainConfig, @@ -71,7 +62,7 @@ export class AptosClient extends Client< try { const resource = (await this.sdkClient.getAccountResource( account.address(), - tokenDetails.address, + getCoinStoreType(tokenDetails.address), )) as CoinResource; return atomicToHuman( new Decimal(resource.data.coin.value), @@ -142,4 +133,51 @@ export class AptosClient extends Client< > { throw new Error("Not implemented"); } + + public async getPoolState(poolId: string): Promise { + const { address, owner, lpTokenId, tokenIds } = findOrThrow( + this.chainConfig.pools, + (poolConfig) => poolConfig.id === poolId, + ); + const lpToken = findOrThrow( + this.chainConfig.tokens, + (token) => token.id === lpTokenId, + ); + const [tokenX, tokenY]: readonly TokenDetails[] = tokenIds.map( + (tokenId) => { + if (/swimusd$/.test(tokenId)) return this.chainConfig.swimUsdDetails; // TODO is there a better way to do this? + + return findOrThrow( + this.chainConfig.tokens, + (token) => token.id === tokenId, + ).nativeDetails; + }, + ); + + const [lpTokenSupplyResponse, poolResponse] = await Promise.all([ + this.sdkClient.getAccountResource( + owner, + getCoinInfoType(lpToken.nativeDetails.address), + ), + this.sdkClient.getAccountResource(owner, address), + ]); + + const totalLpSupply = getCoinInfoSupply( + lpTokenSupplyResponse as CoinInfoResource, + ); + const pool = poolResponse as PoolResource; + const balances = getPoolBalances(pool, [tokenX, tokenY]); + + return { + isPaused: false, // TODO ? https://exsphere.slack.com/archives/C03SQTXMFT9/p1666390318707959?thread_ts=1666352227.333479&cid=C03SQTXMFT9 + ampFactor: new Decimal("1"), // no ampFactor for liquidswap pool ? + lpFee: atomicToHuman(new Decimal(pool.data.fee), FEE_DECIMALS), + governanceFee: atomicToHuman( + new Decimal(pool.data.dao_fee), + DAO_FEE_DECIMALS, + ), + balances, + totalLpSupply, + }; + } } diff --git a/packages/aptos/src/liquidswap/constants.ts b/packages/aptos/src/liquidswap/constants.ts new file mode 100644 index 000000000..f01595dc7 --- /dev/null +++ b/packages/aptos/src/liquidswap/constants.ts @@ -0,0 +1,3 @@ +// From https://github.com/pontem-network/liquidswap/blob/b89aed9adb96c0b083134765f75be814418be670/sources/swap/liquidity_pool.move#L70-L74 +export const FEE_DECIMALS = 4; +export const DAO_FEE_DECIMALS = 2; diff --git a/packages/aptos/src/liquidswap/index.ts b/packages/aptos/src/liquidswap/index.ts new file mode 100644 index 000000000..227a133b3 --- /dev/null +++ b/packages/aptos/src/liquidswap/index.ts @@ -0,0 +1,3 @@ +export * from "./constants"; +export * from "./types"; +export * from "./utils"; diff --git a/packages/aptos/src/liquidswap/types.ts b/packages/aptos/src/liquidswap/types.ts new file mode 100644 index 000000000..ca7a067fd --- /dev/null +++ b/packages/aptos/src/liquidswap/types.ts @@ -0,0 +1,20 @@ +import type { Types } from "aptos"; + +export interface PoolResource { + readonly data: { + readonly coin_x_reserve: { + readonly value: string; + }; + readonly coin_y_reserve: { + readonly value: string; + }; + readonly dao_fee: string; + readonly fee: string; + readonly last_block_timestamp: string; + readonly last_price_x_cumulative: string; + readonly last_price_y_cumulative: string; + readonly x_scale: string; + readonly y_scale: string; + }; + readonly type: Types.MoveStructTag; +} diff --git a/packages/aptos/src/liquidswap/utils.ts b/packages/aptos/src/liquidswap/utils.ts new file mode 100644 index 000000000..8299e4938 --- /dev/null +++ b/packages/aptos/src/liquidswap/utils.ts @@ -0,0 +1,24 @@ +import { isSortedSymbols } from "@pontem/liquidswap-sdk/dist/tsc/utils/contracts.js"; +import type { PoolState, TokenDetails } from "@swim-io/core"; +import { atomicToHuman } from "@swim-io/utils"; +import { Decimal } from "decimal.js"; + +import type { PoolResource } from "./types"; + +export const getPoolBalances = ( + pool: PoolResource, + tokens: readonly [TokenDetails, TokenDetails], +): PoolState["balances"] => { + const reserves = [ + pool.data.coin_x_reserve.value, + pool.data.coin_y_reserve.value, + ]; + const atomicBalances = isSortedSymbols(tokens[0].address, tokens[1].address) + ? reserves + : [...reserves].reverse(); + + return [ + atomicToHuman(new Decimal(atomicBalances[0]), tokens[0].decimals), + atomicToHuman(new Decimal(atomicBalances[1]), tokens[1].decimals), + ]; +}; diff --git a/packages/aptos/src/types.ts b/packages/aptos/src/types.ts new file mode 100644 index 000000000..607cdabf2 --- /dev/null +++ b/packages/aptos/src/types.ts @@ -0,0 +1,36 @@ +import type { Types } from "aptos"; + +export interface GasScheduleV2 { + readonly entries: readonly { + readonly key: string; + readonly value: string; + }[]; +} + +export interface CoinInfoResource { + readonly data: { + readonly decimals: number; + readonly name: string; + readonly supply: { + readonly vec: readonly [ + { + readonly integer: { + readonly vec: readonly [ + { + readonly limit: string; + readonly value: string; + }, + ]; + }; + }, + ]; + }; + readonly symbol: string; + }; + readonly type: Types.MoveStructTag; +} + +export interface CoinResource { + readonly data: { readonly coin: { readonly value: string } }; + readonly type: Types.MoveStructTag; +} diff --git a/packages/aptos/src/utils.ts b/packages/aptos/src/utils.ts new file mode 100644 index 000000000..62db1eada --- /dev/null +++ b/packages/aptos/src/utils.ts @@ -0,0 +1,17 @@ +import { atomicToHuman } from "@swim-io/utils"; +import { Decimal } from "decimal.js"; + +import type { CoinInfoResource } from "./types"; + +export const getCoinInfoType = (address: string) => + `0x1::coin::CoinInfo<${address}>`; + +export const getCoinStoreType = (address: string) => + `0x1::coin::CoinStore<${address}>`; + +export const getCoinInfoSupply = (coinInfo: CoinInfoResource): Decimal => { + return atomicToHuman( + new Decimal(coinInfo.data.supply.vec[0].integer.vec[0].value), + coinInfo.data.decimals, + ); +}; diff --git a/packages/core/package.json b/packages/core/package.json index 5dfe4d12f..4aefbcf73 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -32,8 +32,7 @@ }, "dependencies": { "@swim-io/token-projects": "workspace:^", - "@swim-io/utils": "workspace:^", - "decimal.js": "^10.3.1" + "@swim-io/utils": "workspace:^" }, "devDependencies": { "@certusone/wormhole-sdk": "^0.6.2", @@ -42,6 +41,7 @@ "@types/jest": "^28.1.3", "@typescript-eslint/eslint-plugin": "^5.38.1", "@typescript-eslint/parser": "^5.38.1", + "decimal.js": "^10.3.1", "eslint": "^8.18.0", "eslint-config-prettier": "^8.5.0", "eslint-plugin-deprecation": "^1.3.2", @@ -56,6 +56,7 @@ "typescript": "~4.8.4" }, "peerDependencies": { - "@certusone/wormhole-sdk": "^0.6.2" + "@certusone/wormhole-sdk": "^0.6.2", + "decimal.js": "^10.3.1" } } diff --git a/packages/core/src/client.ts b/packages/core/src/client.ts index 312808b33..0e39ab426 100644 --- a/packages/core/src/client.ts +++ b/packages/core/src/client.ts @@ -3,6 +3,7 @@ import type { TokenProjectId } from "@swim-io/token-projects"; import type Decimal from "decimal.js"; import type { ChainConfig } from "./chain"; +import type { PoolState } from "./pool"; import type { TokenDetails } from "./token"; import type { Tx } from "./tx"; @@ -83,6 +84,8 @@ export abstract class Client< tokenDetails: readonly TokenDetails[], ): Promise; + public abstract getPoolState(poolId: string): Promise; + public abstract generateInitiatePortalTransferTxs( params: InitiatePortalTransferParams, ): AsyncGenerator>; diff --git a/packages/core/src/pool.ts b/packages/core/src/pool.ts index 8cce3f985..3a44cf296 100644 --- a/packages/core/src/pool.ts +++ b/packages/core/src/pool.ts @@ -1,3 +1,5 @@ +import type { Decimal } from "decimal.js"; + /** Ecosystem-neutral configuration object for a Swim liquidity pool */ export interface PoolConfig { readonly id: string; @@ -12,3 +14,12 @@ export interface PoolConfig { readonly isLegacyPool?: boolean; readonly isDisabled?: boolean; } + +export interface PoolState { + readonly isPaused: boolean; + readonly ampFactor: Decimal; + readonly lpFee: Decimal; + readonly governanceFee: Decimal; + readonly balances: readonly Decimal[]; + readonly totalLpSupply: Decimal; +} diff --git a/packages/evm/src/client.ts b/packages/evm/src/client.ts index 5e80f9b32..a52ec2afe 100644 --- a/packages/evm/src/client.ts +++ b/packages/evm/src/client.ts @@ -9,6 +9,7 @@ import type { CompletePortalTransferParams, InitiatePortalTransferParams, InitiatePropellerParams, + PoolState, TokenDetails, TxGeneratorResult, } from "@swim-io/core"; @@ -348,6 +349,12 @@ export class EvmClient extends Client< } } + public getPoolState(poolId: string): Promise { + throw new Error( + `getPoolState not implemented. Called with poolId: ${poolId}`, + ); + } + private async getTxReceipt( txIdOrResponse: string | TransactionResponse, ): Promise { diff --git a/packages/solana/src/client.ts b/packages/solana/src/client.ts index 2f9dfdbaa..bd3b24728 100644 --- a/packages/solana/src/client.ts +++ b/packages/solana/src/client.ts @@ -30,6 +30,7 @@ import type { CompletePortalTransferParams, InitiatePortalTransferParams, InitiatePropellerParams, + PoolState, TokenDetails, TxGeneratorResult, } from "@swim-io/core"; @@ -614,6 +615,12 @@ export class SolanaClient extends Client< }); } + public getPoolState(poolId: string): Promise { + throw new Error( + `getPoolState not implemented. Called with poolId: ${poolId}`, + ); + } + private incrementRpcProvider() { if ( this.endpoints.length === 1 && diff --git a/yarn.lock b/yarn.lock index 6980d7cd4..07240d877 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5014,6 +5014,17 @@ __metadata: languageName: node linkType: hard +"@pontem/liquidswap-sdk@npm:^0.0.1": + version: 0.0.1 + resolution: "@pontem/liquidswap-sdk@npm:0.0.1" + dependencies: + aptos: ^1.2.0 + axios: ^0.27.2 + decimal.js: ^10.3.1 + checksum: 559a9f6e965fd068b7e497df3057a4e808ecec7f9fad1c389679bfc0ec5e62edf92bae2ba9962ab2ffa23ae2cebd0c6d14628b3758b30ccf015684152fecfaf5 + languageName: node + linkType: hard + "@project-serum/anchor@npm:^0.22.1": version: 0.22.1 resolution: "@project-serum/anchor@npm:0.22.1" @@ -7160,6 +7171,7 @@ __metadata: version: 0.0.0-use.local resolution: "@swim-io/aptos@workspace:packages/aptos" dependencies: + "@pontem/liquidswap-sdk": ^0.0.1 "@swim-io/core": "workspace:^" "@swim-io/eslint-config": "workspace:^" "@swim-io/token-projects": "workspace:^" @@ -7288,6 +7300,7 @@ __metadata: typescript: ~4.8.4 peerDependencies: "@certusone/wormhole-sdk": ^0.6.2 + decimal.js: ^10.3.1 languageName: unknown linkType: soft @@ -7959,14 +7972,14 @@ __metadata: "@storybook/node-logger": ^6.5.10 "@storybook/react": ^6.5.10 "@swim-io/aptos": "workspace:^" - "@swim-io/core": ^0.40.0 + "@swim-io/core": "workspace:^" "@swim-io/eslint-config": "workspace:^" "@swim-io/evm": ^0.40.0 "@swim-io/evm-contracts": ^0.40.0 "@swim-io/pool-math": ^0.40.0 "@swim-io/solana": ^0.40.0 "@swim-io/solana-contracts": ^0.40.0 - "@swim-io/token-projects": ^0.40.0 + "@swim-io/token-projects": "workspace:^" "@swim-io/tsconfig": "workspace:^" "@swim-io/utils": ^0.40.0 "@swim-io/wormhole": ^0.40.0 @@ -10662,30 +10675,30 @@ __metadata: languageName: node linkType: hard -"aptos@npm:^1.3.13": - version: 1.3.13 - resolution: "aptos@npm:1.3.13" +"aptos@npm:^1.2.0, aptos@npm:^1.3.16": + version: 1.3.16 + resolution: "aptos@npm:1.3.16" dependencies: - "@noble/hashes": 1.1.2 + "@noble/hashes": 1.1.3 "@scure/bip39": 1.1.0 axios: 0.27.2 form-data: 4.0.0 - js-sha3: 0.8.0 tweetnacl: 1.0.3 - checksum: 128e63b57c4e49230472d47cd3f23fc8a0789b182c312c1188bb3fb75cedd09adf1c175ecfe442b2ba4a0ea48964434121311ef2fcbf4469587c794e15027f70 + checksum: 7c16e5f588ee81ec727102d71b62e779759c0e871b30a3ba8b22e8f2fcf5534fbd54e08e172a24252f1bd49e6fecd1a1b277517d518e24f593647f47d5597fa3 languageName: node linkType: hard -"aptos@npm:^1.3.16": - version: 1.3.16 - resolution: "aptos@npm:1.3.16" +"aptos@npm:^1.3.13": + version: 1.3.13 + resolution: "aptos@npm:1.3.13" dependencies: - "@noble/hashes": 1.1.3 + "@noble/hashes": 1.1.2 "@scure/bip39": 1.1.0 axios: 0.27.2 form-data: 4.0.0 + js-sha3: 0.8.0 tweetnacl: 1.0.3 - checksum: 7c16e5f588ee81ec727102d71b62e779759c0e871b30a3ba8b22e8f2fcf5534fbd54e08e172a24252f1bd49e6fecd1a1b277517d518e24f593647f47d5597fa3 + checksum: 128e63b57c4e49230472d47cd3f23fc8a0789b182c312c1188bb3fb75cedd09adf1c175ecfe442b2ba4a0ea48964434121311ef2fcbf4469587c794e15027f70 languageName: node linkType: hard