@kaiachain/kss-bridges-celer
Version:
TypeScript client and use-cases for cBridge
77 lines (68 loc) • 2.73 kB
text/typescript
import {
EstimateWithdrawAmt,
EstimateWithdrawAmtResponse,
GetTransferStatusRequest,
GetTransferStatusResponse,
WithdrawInfo,
} from "../ts-proto/gateway/gateway_pb"
import { WebClient } from "../ts-proto/gateway/GatewayServiceClientPb"
import { BigNumber } from "ethers"
import { estimateWithdrawAmt } from "./Estimate"
import axios from "axios"
import { ITransferConfigs } from "../constants/type"
import { safeParseUnits } from "celer-web-utils/lib/format"
export const getTransferConfigs = (rpc: string): Promise<ITransferConfigs> =>
axios
.get(`${rpc}/v2/getTransferConfigsForAll`)
.then(({ data }) => data)
.catch((err) => console.log(err))
export const getTransferStatus = async (
rpc: string,
transferId: string
): Promise<GetTransferStatusResponse.AsObject> => {
const client = new WebClient(rpc, null, null)
const statusRequest = new GetTransferStatusRequest()
statusRequest.setTransferId(transferId)
const transferStatus = await client.getTransferStatus(statusRequest, null)
// console.log("Transfer Status:", transferStatus.toObject())
return transferStatus.toObject()
}
export const getWithdrawInfo = (
chainId: number,
amount: string,
slippageTolerance: number
): WithdrawInfo => {
const withdrawInfo = new WithdrawInfo()
withdrawInfo.setChainId(chainId)
withdrawInfo.setAmount(safeParseUnits(amount, 6).toString())
withdrawInfo.setSlippageTolerance(slippageTolerance)
return withdrawInfo
}
export const getEstimation = async (
rpc: string,
addr: string,
chainId: number,
tokenSymbol: string,
amount: string,
slippageTolerance: number
) => {
const client = new WebClient(rpc, null, null)
const withdrawInfo = getWithdrawInfo(chainId, amount, slippageTolerance)
const estimateRequest = estimateWithdrawAmt(Array(withdrawInfo), chainId, tokenSymbol, addr)
const res: EstimateWithdrawAmtResponse = await client.estimateWithdrawAmt(estimateRequest, null)
let estimateResult = ""
if (!res.getErr() && res.getReqAmtMap()) {
const resMap = res.getReqAmtMap()
resMap.forEach((entry: EstimateWithdrawAmt, key: number) => {
if (key === chainId) {
const totleFee =
(Number(entry.getBaseFee()) + Number(entry.getPercFee())).toString() || "0"
const eqValueTokenAmtBigNum = BigNumber.from(entry.getEqValueTokenAmt())
const feeBigNum = BigNumber.from(totleFee)
const targetReceiveAmounts = eqValueTokenAmtBigNum.sub(feeBigNum)
estimateResult = targetReceiveAmounts.toString()
}
})
}
return estimateResult
}