Kana Labs
  • Getting Started
    • Welcome to Kana Labs
  • CROSS CHAIN SWAPS
    • AMM DEX Aggregator
  • INTEGRATE KANA WIDGET
    • Kana Widget
      • Install Widget
      • Configure Widget
      • Configure Aptos Keyless
  • Web3 Aggregator SDK
    • Web3 Aggregator SDK
      • Installation
      • SameChain
      • Cross Chain Swap
      • Aggregator API's
  • SPOT TRADING PLATFORM
    • Kana Trade
      • API Docs
  • PERPETUAL FUTURES
    • Kana Perps
      • Getting Started
        • Mint Tokens on Testnet
        • Mainnet Tutorials
          • Getting Started
          • Connecting Wallet & Enabling “One Click Transaction”
          • Deposit & Withdraw Tokens
          • Placing a Market Trade Order
          • Placing a Limit Trade Order
          • Partially & Fully Closing a Live Trade Order
          • Adding Margin to an Open Position
          • Defining Take Profit & Stop Loss
      • Breaking Down Kana Perps
        • Assets Supported
        • Order Types
        • Orderbook
        • 1-Click Trading in Kana Perps
          • Delegation
        • Funding Rate
        • Leverage
        • Margin and Liquidation
        • Hedge Mode
          • Hedging a Short-Term 2-3% Price Decline
          • Dual Positioning for Flexible Profit-Taking
        • Trading Fees
      • Technical Architecture
      • API Docs
        • Installation Setup
        • Kana Perps Typescript REST API
        • Kana Perps Python Websocket API
        • Kana Perps Python REST API
        • Steps to place an order
        • Perps Contract Error Codes
        • Websocket Connection
        • Supported Markets
  • SPOT & PERP APIs
    • Trading APIs
      • Kana Trade API
      • Kana Perps API
        • Installation Setup
        • Example setup functions
        • Kana Perps Typescript REST API
        • Kana Perps Websocket API
        • Kana Perps Python Websocket API
        • Kana Perps Python REST API
        • Steps to place an order
  • PAYMASTER SERVICE
    • Kana Paymaster For Aptos and Supra
      • How it works?
      • How to Register?
      • Deposit Allowance
      • Manage Users
      • Paymaster SDK Tutorial (Typescript)
      • Paymaster API
      • Module & Function Whitelist
      • Subscription - Coming soon
      • FAQS
  • PERPETUAL OPTIONS
    • OPerps
  • Tokenomics & Governance
    • Kana Labs Tokenomics
  • REWARDS & REFERRAL PROGRAM
    • Rewards Program
      • Reward Program Season 1
      • Reward Program Season 2
      • How to Keep Track of Your Points?
      • Where to find the Missions Dashboard?
  • Referral Program
    • How to Generate Referral Link? (For the Referrer)
    • How to map your wallet to the invite IDs? (For the invited users)
Powered by GitBook
On this page
  • Same Chain Swap
  • 1. SwapQuotes function
  • 2. ExecuteSwapInstruction
  1. Web3 Aggregator SDK
  2. Web3 Aggregator SDK

SameChain

PreviousInstallationNextCross Chain Swap

Last updated 11 days ago

If reading docs isn't your thing, just check out our example code for integration

We are currently updating the repository with more examples, so please hold on.

Same Chain Swap

If you wish to execute the transaction using your own logic that fits your use case, please refer to our aggregator-example repository on Github

1. SwapQuotes function

 swapQuotes = async (params: SameChainSwapParams)

SameChainSwapParams

Description

inputToken

The input token for the swap operation.

outputToken

The output token to receive after the swap.

amountIn

The amount of input tokens to be swapped.

slippage

The allowed slippage percentage for the swap.

network

The network ID for the swap operation.

options

(Optional) Additional options for the swap.

2. ExecuteSwapInstruction

executeSwapInstruction = async (params: SameChainInstructionParams)

executeSwapInstruction

Description

quote

A CommonRouteInterface representing the quote response format.

address

The address related to the instruction.

options

(Optional) An object containing additional options.

options.provider

(Optional) The connection provider to use.

options.integrator

(Optional) A string identifying the integrator.

options.recipient

(Optional) Address of the recipient.

1 . APTOS :

1.1 .Initialising The SDK

import { Account, AccountAddress, Aptos, AptosConfig, Ed25519PrivateKey, Network } from "@aptos-labs/ts-sdk";
import { SwapAggregator, Environment, NetworkId } from '@kanalabs/aggregator';

const aptosConfig = new AptosConfig({ network: Network.MAINNET });
const aptosProvider = new Aptos(aptosConfig)

const aptosSigner = Account.fromPrivateKey({
  privateKey: new Ed25519PrivateKey(process.env.APTOS_PRIVATEKEY || ''),
  address:  AccountAddress.from(process.env.APTOS_ADDRESS || ''),
  legacy: true,
});

const swap = new SwapAggregator(Environment.production, {
  providers: {
    aptos: aptosProvider,
  },
  signers: {
    aptos: aptosSigner,
  },
});

NOTE : SIGNER CAN BE A APTOS ACCOUNT INSTANCE DERIVED FROM PRIVATE KEY OR A SIGN AND SUBMIT FUNCTION FROM APTOS WALLET ADAPTER

1.2 .Getting Swap Quotes

const quote = await swap.swapQuotes({
  apiKey: APIKEY,
  inputToken: '0x1::aptos_coin::AptosCoin',
  outputToken: '0x6f986d146e4a90b828d8c12c14b6f4e003fdff11a8eecceceb63744363eaac01::mod_coin::MOD',
  amountIn: '100000',
  slippage: 0.5,
  network: NetworkId.aptos,
  options:{
      integratorAddress :'0x000...........', // if ur an integrator and want to collect fee then u can pass ur address here
      is_fee_coin_in: true , // u can pass this one as true if u want collect fee from input Token , but by Default it will be false (Output Token)
      isFeeReferrer:true, // this one should be true , if integrator wants to collect fee 
    }
});

const optimalQuote = quote.data[0];

Please note that the feature of switching fee from output token to input token is only available in aptos chain only

1.3 .Executing Swap Quotes

const executeSwap = await swap.executeSwapInstruction({
  apiKey: APIKEY,
  quote: optimalQuote,
  address: swap.signer?.aptos?.accountAddress.toString(),
});

2 . SUI :

2.1 .Initialising The SDK```typescript

import { Ed25519Keypair, JsonRpcProvider, RawSigner, Connection as SuiConnection } from '@mysten/sui.js';
import { SwapAggregator, Environment, NetworkId } from '@kanalabs/aggregator';

const suiProvider = new JsonRpcProvider(new SuiConnection({ fullnode: 'SUI RPC NODE ' }));

const suiSigner = new RawSigner(Ed25519Keypair.deriveKeypair(process.env.SUIMNEMONICS || ''), suiProvider);

const swap = new SwapAggregator(Environment.production, {
  providers: {
    sui: suiProvider,
  },
  signers: {
    sui: suiSigner,
  },
});

2.2 .Getting Swap Quotes

const quote = await swap.swapQuotes({
  apiKey: APIKEY,
  inputToken: '0x2::sui::SUI',
  outputToken: '0xf0fe2210b4f0c4e3aff7ed147f14980cf14f1114c6ad8fd531ab748ccf33373b::bswt::BSWT',
  amountIn: '10000',
  slippage: 1,
  network: NetworkId.sui,
});
const optimalQuote = quote.data[0];

2.3 .Executing Swap Quotes

const executeSwap = await swap.executeSwapInstruction({
  apiKey: APIKEY,
  quote: optimalQuote,
  address: await swap.signer?.sui?.getAddress(),
});

3 . SOLANA :

3.1 .Initialising The SDK```typescript

import { Connection, Keypair, clusterApiUrl } from '@solana/web3.js';
import { SwapAggregator, Environment, NetworkId } from '@kanalabs/aggregator';

const solanaProvider = new Connection(clusterApiUrl('mainnet-beta'));
const solanaSigner = Keypair.fromSecretKey(bs58.decode(process.env.SOLANAPAYER || ''));

const swap = new SwapAggregator(Environment.production, {
  providers: {
    solana: solanaProvider,
  },
  signers: {
    solana: solanaSigner,
  },
});

3.2 .Getting Swap Quotes

const quote = await swap.swapQuotes({
  apiKey: APIKEY,
  inputToken: 'So11111111111111111111111111111111111111112',
  outputToken: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
  amountIn: '1000',
  slippage: 1,
  network: NetworkId.solana,
});
const optimalQuote = quote.data[0];

3.3 .Executing Swap Quotes

const executeSwap = await swap.executeSwapInstruction({
  apiKey: APIKEY,
  quote: optimalQuote,
  address: swap.signer?.solana?.publicKey.toString(),
});

4 . EVM CHAINS :

4.1 .Initialising The SDK

import { ethers, utils } from 'ethers';
import { SwapAggregator, Environment, NetworkId } from '@kanalabs/aggregator';

const polygonRpc = process.env.ETH_NODE_URI_POLYGON as string;
const polygonProvider = ethers.getDefaultProvider(polygonRpc);
const polygonSigner = new ethers.Wallet(privateKey, polygonProvider);

const swap = new SwapAggregator(Environment.production, {
  providers: {
    polygon: polygonProvider,
  },
  signers: {
    polygon: polygonSigner,
  },
});

4.2 .Getting Swap Quotes

const quote = await swap.swapQuotes({
  apiKey: APIKEY,
  inputToken: '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee',
  outputToken: '0xc2132D05D31c914a87C6611C10748AEb04B58e8F',
  amountIn: utils.parseEther('0.05').toString(),
  slippage: 1,
  network: NetworkId.polygon,
});
const optimalQuote = quote.data[0];

4.3 .Executing Swap Quotes

const executeSwap = await swap.executeSwapInstruction({
  apiKey: APIKEY,
  quote: optimalQuote,
  address: await swap.signer?.polygon?.getAddress(),
});

GitHub - kanalabs/aggregator-example: Kanalabs aggregator SDK example implementationGitHub
Logo