From 47e68cc7fa3ca4cb841e17db9fa00cce9d245899 Mon Sep 17 00:00:00 2001 From: lomonoshka Date: Fri, 3 Nov 2023 13:16:16 +0400 Subject: [PATCH] fix denormolized wallet balance error --- package.json | 2 +- src/Unit/Exchange/callGenerators/utils.ts | 4 ++++ src/Unit/Exchange/generateSwapCalldata.ts | 9 +++------ src/utils/getBalance.ts | 19 +++++++++++++++++++ 4 files changed, 27 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index b256294..fa10312 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@orionprotocol/sdk", - "version": "0.20.13", + "version": "0.20.14-rc0", "description": "Orion Protocol SDK", "main": "./lib/index.cjs", "module": "./lib/index.js", diff --git a/src/Unit/Exchange/callGenerators/utils.ts b/src/Unit/Exchange/callGenerators/utils.ts index e49217b..ad10f6b 100644 --- a/src/Unit/Exchange/callGenerators/utils.ts +++ b/src/Unit/Exchange/callGenerators/utils.ts @@ -87,6 +87,10 @@ export function generateCalls(calls: BytesLike[]) { } export async function exchangeToNativeDecimals(token: AddressLike, amount: BigNumberish, provider: ethers.JsonRpcProvider) { + return await toNativeDecimals(token, amount, provider) / (BigInt(10) ** 8n) +} + +export async function toNativeDecimals(token: AddressLike, amount: BigNumberish, provider: ethers.JsonRpcProvider) { token = await token if (typeof token !== "string") token = await token.getAddress() diff --git a/src/Unit/Exchange/generateSwapCalldata.ts b/src/Unit/Exchange/generateSwapCalldata.ts index e792a27..ffbddcb 100644 --- a/src/Unit/Exchange/generateSwapCalldata.ts +++ b/src/Unit/Exchange/generateSwapCalldata.ts @@ -18,7 +18,7 @@ import type { AddressLike } from "ethers"; import { addressLikeToString } from "../../utils/addressLikeToString.js"; import { generateUnwrapAndTransferCall, generateWrapAndTransferCall } from "./callGenerators/weth.js"; import { Exchange__factory } from "@orionprotocol/contracts/lib/ethers-v6/index.js"; -import getBalance from "../../utils/getBalance.js"; +import { getWalletBalance } from "../../utils/getBalance.js"; export type Factory = "UniswapV2" | "UniswapV3" | "Curve" | "OrionV2" | "OrionV3"; @@ -62,12 +62,9 @@ export async function generateSwapCalldataWithUnit({ )(); let path = SafeArray.from(arrayLikePath); - const { wallet } = await getBalance( - unit.aggregator, + const walletBalance = await getWalletBalance( path.first().assetIn, - safeGet(assetToAddress, path.first().assetIn), receiverAddress, - Exchange__factory.connect(exchangeContractAddress, unit.provider), unit.provider ); @@ -81,7 +78,7 @@ export async function generateSwapCalldataWithUnit({ amount, minReturnAmount, receiverAddress, - useContractBalance: BigInt(wallet.toString()) < BigInt(amount), + useContractBalance: walletBalance < BigInt(amount), path, wethAddress, curveRegistryAddress, diff --git a/src/utils/getBalance.ts b/src/utils/getBalance.ts index 35738ce..e7c84b2 100644 --- a/src/utils/getBalance.ts +++ b/src/utils/getBalance.ts @@ -41,3 +41,22 @@ export default async function getBalance( wallet: denormalizedAssetInWalletBalance, }; } + +export async function getWalletBalance( + assetAddress: string, + walletAddress: string, + provider: ethers.Provider, +) { + const assetIsNativeCryptocurrency = assetAddress === ethers.ZeroAddress; + + let assetWalletBalance: bigint | undefined; + + if (!assetIsNativeCryptocurrency) { + const assetContract = ERC20__factory.connect(assetAddress, provider); + assetWalletBalance = await assetContract.balanceOf(walletAddress); + } else { + assetWalletBalance = await provider.getBalance(walletAddress); + } + + return assetWalletBalance +}