Request and Response

the detail of all the request&response types needed while using the SDK.

Request Types​

All the request data structure needed to interact with the SDK


The request parameter data structure for bridge action.

export type BridgeRequestParam = {
  fromAddress: string;
  fromToken: BaseCurrency;
  fromChainId: string;
  toChainId: string;
  toAddress: string;
  amount: string; // in minimal uint
  options: ButterTransactionOption;


The request parameter data structure for swap action.

export type SwapRequestParam = {
  fromAddress: string;
  fromToken: BaseCurrency;
  toAddress: string;
  toToken: BaseCurrency;
  amountIn: string; // in minimal uint
  swapRouteStr: string; // cross-chain swap route, in string format.
  slippage?: number; // in bps, e.g. 100 = 1%
  options: ButterTransactionOption;


The request parameter data structure for omnichain payment.

export type PaymentRequestParam = {
    fromAddress: string;
    paidToken: BaseCurrency; // token user paid
    paidAmount: string; // in minimal uint
    toAddress: string; // seller's receiving address 
    requiredToken: BaseCurrency; // required token by seller
    requiredAmount: string; // required amount
    swapRouteStr: string;
    options: ButterTransactionOption;


options needed to do a cross-chain swap

export type ButterTransactionOption = {
  signerOrProvider?: Signer | Provider | Eth; // When source chain is EVM provide Ethers.js Signer/Provider or Web3.js Eth info
  nearProvider?: NearProviderType; // mandatory when src chain is near
  gas?: string;
  gasPrice?: string;

signerOrProvider: Butter supports both ethers.js and web3.js. If you are using ethers.js, provider the Signer object. If your application choose to use web3.js, please provide Eth object in order to send a transaction.

nearProvider: Whenever send a transaction from Near Protocol, you have to provide NearNetworkConfig with keystore provided or WalletConnection object

export type NearProviderType = NearNetworkConfig | WalletConnection;

Response Types​

All the response data structure when interacting the SDK



interface VaultBalance {
  token: BaseCurrency; // token in vault
  balance: string; // amount of token in vault on target chain
  isMintable: boolean; // if token is mintable by Butter

Fee Related​


export interface ButterFee {
  feeToken: BaseCurrency; // the token that to be charged
  amount: string; // in minimal unit
  feeRate: ButterFeeRate; // fee rate inforamtion
  feeDistribution?: ButterFeeDistribution; // fee distribution inforamtion


Fee rate

export type ButterFeeRate = {
  lowest: string; // lowest AMOUNT of fee token to be charged
  highest: string; // highest AMOUNT of fee token to be charged
  rate: string; // fee rate in bps


Fee distribution

export type ButterFeeDistribution = {
    protocol: string; // protocol rate in bps
    relayer: string; // relayer rate in bps, prepaid destination gas fee
    lp: string; // lp fee rate in bps

Best Route​


export type RouteResponse = {
  data?: string; // json string
  msg: string;
  status: number;

Transaction Response​


Response datatype when invoke cross-chain transaction

export interface ButterTransactionResponse {
  hash: string;
  wait?: () => Promise<ButterTransactionReceipt>;
  promiReceipt?: PromiEvent<Web3TransactionReceipt>; // only when use web3.js

promiReceipt is only available when you are using web.js.


Transaction receipt

export interface ButterTransactionReceipt {
  to: string;
  from: string;
  gasUsed: string;
  transactionHash: string;
  logs: Array<Log> | string[]; // string[] for Near logs
  blockHash?: string;
  blockNumber?: number;
  success?: boolean; // 1 success, 0 failed

Last updated