navi-sdk
Version:
The NAVI SDK Client provides tools for interacting with the Sui blockchain networks, designed for handling transactions, accounts, and smart contracts efficiently. This documentation covers the setup, account management, and transaction handling within th
62 lines (55 loc) • 2.01 kB
text/typescript
import { Transaction, TransactionResult } from "@mysten/sui/transactions";
import { AggregatorConfig } from "../config";
import { SUI_CLOCK_OBJECT_ID, normalizeSuiAddress } from "@mysten/sui/utils";
import BigNumber from "bignumber.js";;
export async function makeBluefinPTB(txb: Transaction, poolId: string, pathTempCoin: any, amount: any, a2b: boolean, typeArguments: string[]) {
const coinA = a2b ? pathTempCoin : zeroCoin(txb, typeArguments[0])
const coinB = a2b ? zeroCoin(txb, typeArguments[1]) : pathTempCoin
const coinAInBalance = coinToBalance(txb, coinA, typeArguments[0])
const coinBInBalance = coinToBalance(txb, coinB, typeArguments[1])
const sqrtPriceLimit = BigInt(a2b ? '4295048017' : '79226673515401279992447579054');
const args =
[
txb.object(SUI_CLOCK_OBJECT_ID),
txb.object(AggregatorConfig.bluefinGlobalConfig),
txb.object(poolId),
coinAInBalance,
coinBInBalance,
txb.pure.bool(a2b),
txb.pure.bool(true),
amount,
txb.pure.u64(0),
txb.pure.u128(sqrtPriceLimit.toString())
]
const [coinAOutInBalance, coinBOutInBalance] = txb.moveCall({
target: `${AggregatorConfig.bluefinPackageId}::pool::swap`,
typeArguments: typeArguments,
arguments: args,
});
const coinAOut = balanceToCoin(txb, coinAOutInBalance, typeArguments[0]);
const coinBOut = balanceToCoin(txb, coinBOutInBalance, typeArguments[1]);
return {
coinAOut,
coinBOut
}
}
const zeroCoin = (txb: Transaction, coinType: string) => {
return txb.moveCall({
target: "0x2::coin::zero",
typeArguments: [coinType]
});
}
function coinToBalance(txb: Transaction, coin: any, coinType: string) {
return txb.moveCall({
target: "0x2::coin::into_balance",
arguments: [coin],
typeArguments: [coinType],
});
}
function balanceToCoin(txb: Transaction, coin: any, coinType: string) {
return txb.moveCall({
target: `0x2::coin::from_balance`,
arguments: [coin],
typeArguments: [coinType]
});
}