mirror of
https://github.com/orionprotocol/sdk.git
synced 2026-03-14 14:12:35 +03:00
fix error with denormolized user wallet balance
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@orionprotocol/sdk",
|
||||
"version": "0.20.14-rc0",
|
||||
"version": "0.20.14-rc1",
|
||||
"description": "Orion Protocol SDK",
|
||||
"main": "./lib/index.cjs",
|
||||
"module": "./lib/index.js",
|
||||
|
||||
@@ -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()
|
||||
|
||||
|
||||
@@ -17,8 +17,7 @@ import type { SingleSwap } from "../../types.js";
|
||||
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";
|
||||
|
||||
@@ -57,17 +56,14 @@ export async function generateSwapCalldataWithUnit({
|
||||
}
|
||||
const wethAddress = safeGet(unit.contracts, "WETH");
|
||||
const curveRegistryAddress = safeGet(unit.contracts, "curveRegistry");
|
||||
const { assetToAddress, swapExecutorContractAddress, exchangeContractAddress } = await simpleFetch(
|
||||
const { assetToAddress, swapExecutorContractAddress } = await simpleFetch(
|
||||
unit.blockchainService.getInfo
|
||||
)();
|
||||
|
||||
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 +77,7 @@ export async function generateSwapCalldataWithUnit({
|
||||
amount,
|
||||
minReturnAmount,
|
||||
receiverAddress,
|
||||
useContractBalance: BigInt(wallet.toString()) < BigInt(amount),
|
||||
useContractBalance: walletBalance < BigInt(amount),
|
||||
path,
|
||||
wethAddress,
|
||||
curveRegistryAddress,
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user