API Reference

Swap Assets

You can use the swapAssets() function to swap an asset for another asset on a specific pool.

Let's assume we're trading on the SUI-USDC pool:

aToBbyAmountInResult
TRUETRUETrading SUI for USDC by specifying the amount of SUI to put in
TRUEFALSETrading SUI for USDC by specifying the amount of USDC you require
FALSETRUETrading USDC for SUI by specifying the amount USDC to put in
FALSEFALSETrading USDC for SUI by specifying the amount of SUI you require

Example

import { OnChainCalls, QueryChain, ISwapParams } from "@firefly-exchange/library-sui/dist/src/spot"
import { Ed25519Keypair, toBigNumber, SuiClient } from "@firefly-exchange/library-sui";
import { mainnet } from './config'

const client = new SuiClient({ url: "https://fullnode.mainnet.sui.io:443" });

/// Parameters:
/// - privateKey        : The private key of the user making the blockchain call
/// - poolID            : The id of the the pool ex: 0x3b585786b13af1d8ea067ab37101b6513a05d2f90cfe60e8b1d9e1b46a63c4fa 
/// - amount            : The amount of coinA you're swapping
/// - aToB              : If true, then the swap is coinA -> coinB
///                       if false then the swap is coinB -> coinA
/// - byAmountIn        : If true, then you're specifying the amount you're putting in
///                       If false, then you're specifying the amount you're getting back
/// - slippage			: The difference between the expected price of a trade and the actual price at which it is executed.
///						  This should be a number between 0 and 1, eg: 0.2                

async function swapAssets(privateKey: string, poolID: string, amount : number, aToB : boolean, byAmountIn: boolean, slippage: number){
    const keyPair = Ed25519Keypair.fromSecretKey(Buffer.from(privateKey, 'hex'));

    let oc = new OnChainCalls(client,mainnet, {signer: keyPair});
    let qc = new QueryChain(client);

    let poolState = await qc.getPool(poolID);

    let iSwapParams : ISwapParams = {
        pool: poolState, 
        amountIn : byAmountIn == true ? toBigNumber(amount, (aToB == true ? poolState.coin_a.decimals : poolState.coin_b.decimals))  : 0,
        amountOut: byAmountIn == true ? 0 : toBigNumber(amount, (aToB == true ? poolState.coin_b.decimals : poolState.coin_a.decimals)),
        aToB: aToB,
        byAmountIn: byAmountIn,
        slippage: slippage
    }
    
    let resp = await oc.swapAssets(iSwapParams);
    return resp
}

swapAssets("<private_key>","0x0c89fd0320b406311c05f1ed8c4656b4ab7ed14999a992cc6c878c2fad405140", 1, true, true, 0.1)
    .then((resp) => console.log(JSON.stringify(resp)))
    .catch((err) => console.error("Error: ", err));

Response

{
   "digest":"FbDvEuFHTabTYtRbvgEjPNgW9YCv8FPSSb79tFQ7VCR4",
   "transaction":{
      "data":{
         "messageVersion":"v1",
         "transaction":{
            "kind":"ProgrammableTransaction",
            "inputs":[
               {
                  "type":"pure",
                  "valueType":"u64",
                  "value":"200000000"
               },
               {
                  "type":"object",
                  "objectType":"sharedObject",
                  "objectId":"0x0000000000000000000000000000000000000000000000000000000000000006",
                  "initialSharedVersion":"1",
                  "mutable":false
               },
               {
                  "type":"object",
                  "objectType":"sharedObject",
                  "objectId":"0x03db251ba509a8d5d8777b6338836082335d93eecbdd09a11e190a1cff51c352",
                  "initialSharedVersion":"406496849",
                  "mutable":false
               },
               {
                  "type":"object",
                  "objectType":"sharedObject",
                  "objectId":"0x3b585786b13af1d8ea067ab37101b6513a05d2f90cfe60e8b1d9e1b46a63c4fa",
                  "initialSharedVersion":"406731547",
                  "mutable":true
               },
               {
                  "type":"pure",
                  "valueType":"bool",
                  "value":true
               },
               {
                  "type":"pure",
                  "valueType":"bool",
                  "value":true
               },
               {
                  "type":"pure",
                  "valueType":"u64",
                  "value":"200000000"
               },
               {
                  "type":"pure",
                  "valueType":"u64",
                  "value":"0"
               },
               {
                  "type":"pure",
                  "valueType":"u128",
                  "value":"764880688336009915"
               }
            ],
            "transactions":[
               {
                  "SplitCoins":[
                     "GasCoin",
                     [
                        {
                           "Input":0
                        }
                     ]
                  ]
               },
               {
                  "MoveCall":{
                     "package":"0x0000000000000000000000000000000000000000000000000000000000000002",
                     "module":"coin",
                     "function":"zero",
                     "type_arguments":[
                        "0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC"
                     ]
                  }
               },
               {
                  "MoveCall":{
                     "package":"0xb104ecc75397f3a65735ef26c85a037da1d197e26f4f275a9990a577ba0e6c4c",
                     "module":"gateway",
                     "function":"swap_assets",
                     "type_arguments":[
                        "0x2::sui::SUI",
                        "0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC"
                     ],
                     "arguments":[
                        {
                           "Input":1
                        },
                        {
                           "Input":2
                        },
                        {
                           "Input":3
                        },
                        {
                           "Result":0
                        },
                        {
                           "Result":1
                        },
                        {
                           "Input":4
                        },
                        {
                           "Input":5
                        },
                        {
                           "Input":6
                        },
                        {
                           "Input":7
                        },
                        {
                           "Input":8
                        }
                     ]
                  }
               }
            ]
         },
         "sender":"0xa2d6fcd5ed2ae13fe527a96c96100120d519900599f33e38ee112d80e51f9269",
         "gasData":{
            "payment":[
               {
                  "objectId":"0x10611c2158f9d0456e6eb47b8b4168fd0fcab2102a1338cededb8cfbfc764367",
                  "version":410525748,
                  "digest":"4MZ7i2J8ymMzTBhYpbbu7AkGMezTHoGTRsRSccZdSbTB"
               },
               {
                  "objectId":"0x4682287b2248eceacecd263e9c6239b278a8b05de0dcde171602b6c88e3ebfe8",
                  "version":410525748,
                  "digest":"2XbVKjQ2EUzvRfTL2aH5iHiKrso8NXEuj55awAU4YAoA"
               }
            ],
            "owner":"0xa2d6fcd5ed2ae13fe527a96c96100120d519900599f33e38ee112d80e51f9269",
            "price":"750",
            "budget":"3879028"
         }
      },
      "txSignatures":[
         "AI0J6M5uQ6rddmz8Bpdca3ETWlX4syawwW9yri1vokgN2Ce8u5J62fKoBVEVIUNDTufT305iKs0FcReNL48h3gVwIesVczXTTL/3Q5yIJFnOVC24GMSqzrdNJIY1vK3z9w=="
      ]
   },
   "effects":{
      "messageVersion":"v1",
      "status":{
         "status":"success"
      },
      "executedEpoch":"569",
      "gasUsed":{
         "computationCost":"750000",
         "storageCost":"9173200",
         "storageRebate":"8750412",
         "nonRefundableStorageFee":"88388"
      },
      "modifiedAtVersions":[
         {
            "objectId":"0x10611c2158f9d0456e6eb47b8b4168fd0fcab2102a1338cededb8cfbfc764367",
            "sequenceNumber":"410525748"
         },
         {
            "objectId":"0x3b585786b13af1d8ea067ab37101b6513a05d2f90cfe60e8b1d9e1b46a63c4fa",
            "sequenceNumber":"410525748"
         },
         {
            "objectId":"0x4682287b2248eceacecd263e9c6239b278a8b05de0dcde171602b6c88e3ebfe8",
            "sequenceNumber":"410525748"
         }
      ],
      "sharedObjects":[
         {
            "objectId":"0x3b585786b13af1d8ea067ab37101b6513a05d2f90cfe60e8b1d9e1b46a63c4fa",
            "version":410525748,
            "digest":"Zi6o3C3bt9UsWoodvEaJNsr7Z5qikvnmAgkgx6mLUA6"
         },
         {
            "objectId":"0x0000000000000000000000000000000000000000000000000000000000000006",
            "version":161661005,
            "digest":"D3FAuD9cAtYf5d7WS18PsQky71sY3oEYwPRhXxnThLnb"
         },
         {
            "objectId":"0x03db251ba509a8d5d8777b6338836082335d93eecbdd09a11e190a1cff51c352",
            "version":409452196,
            "digest":"cHY3mzy38rXW9RSBJZFvBuGA95wpNTjZet4NR136suv"
         }
      ],
      "transactionDigest":"FbDvEuFHTabTYtRbvgEjPNgW9YCv8FPSSb79tFQ7VCR4",
      "created":[
         {
            "owner":{
               "AddressOwner":"0xa2d6fcd5ed2ae13fe527a96c96100120d519900599f33e38ee112d80e51f9269"
            },
            "reference":{
               "objectId":"0x66243ddef46317b0041ef8228d992f50e4ab7171f59a49032a40328ab11a68aa",
               "version":410525749,
               "digest":"4sPiM6KwTudeTBqpUa8tJYS1UsVCLxaBBbvjfmjgb4GB"
            }
         }
      ],
      "mutated":[
         {
            "owner":{
               "AddressOwner":"0xa2d6fcd5ed2ae13fe527a96c96100120d519900599f33e38ee112d80e51f9269"
            },
            "reference":{
               "objectId":"0x10611c2158f9d0456e6eb47b8b4168fd0fcab2102a1338cededb8cfbfc764367",
               "version":410525749,
               "digest":"2UDbfZPJDLTnMGnxN1WmiJ51nNkLp2VA5pCkesE2RU5m"
            }
         },
         {
            "owner":{
               "Shared":{
                  "initial_shared_version":406731547
               }
            },
            "reference":{
               "objectId":"0x3b585786b13af1d8ea067ab37101b6513a05d2f90cfe60e8b1d9e1b46a63c4fa",
               "version":410525749,
               "digest":"6VKtD7GKQCzCaKqB3VDkLNh6DMaAkR61xyWhJQJ9DNsv"
            }
         }
      ],
      "deleted":[
         {
            "objectId":"0x4682287b2248eceacecd263e9c6239b278a8b05de0dcde171602b6c88e3ebfe8",
            "version":410525749,
            "digest":"7gyGAp71YXQRoxmFBaHxofQXAipvgHyBKPyxmdSJxyvz"
         }
      ],
      "gasObject":{
         "owner":{
            "AddressOwner":"0xa2d6fcd5ed2ae13fe527a96c96100120d519900599f33e38ee112d80e51f9269"
         },
         "reference":{
            "objectId":"0x10611c2158f9d0456e6eb47b8b4168fd0fcab2102a1338cededb8cfbfc764367",
            "version":410525749,
            "digest":"2UDbfZPJDLTnMGnxN1WmiJ51nNkLp2VA5pCkesE2RU5m"
         }
      },
      "eventsDigest":"BtDmDYjfzNKgStRHSfiRMUm1UtUUS3fvhnVLYnXE5diu",
      "dependencies":[
         "2mo91Mn8imFuBYrsoWTMgtpa2cCWjMXdPE9mJeQtvf3a",
         "49puDQZwHRnu7zYoARCjco1dFKMiK7LVSS8B5Si1yVdh",
         "7DkJSrf5sPWGxqHbH2X1wXwFcftRm6myhJJnuTJbaMYr",
         "Atpejs9MU4EGVAzBETZqppC8jUtpc8cmozj7yEHGB73g",
         "CUQmrEssKtB8WxBYj3YQZJCrFTTDLqz3UWq1nRiWGCLS",
         "HzzEA9X29bCpPE7AJqoxN8zUgefPHztVJu1c73ScgxGa"
      ]
   },
   "events":[
      {
         "id":{
            "txDigest":"FbDvEuFHTabTYtRbvgEjPNgW9YCv8FPSSb79tFQ7VCR4",
            "eventSeq":"0"
         },
         "packageId":"0xb104ecc75397f3a65735ef26c85a037da1d197e26f4f275a9990a577ba0e6c4c",
         "transactionModule":"gateway",
         "sender":"0xa2d6fcd5ed2ae13fe527a96c96100120d519900599f33e38ee112d80e51f9269",
         "type":"0x3492c874c1e3b3e2984e8c41b589e642d4d0a5d6459e5a9cfc2d52fd7c89c267::events::AssetSwap",
         "parsedJson":{
            "a2b":true,
            "after_liquidity":"4777281631688",
            "after_sqrt_price":"806253565480128302",
            "amount_in":"200000000",
            "amount_out":"381298",
            "before_liquidity":"4777281631688",
            "before_sqrt_price":"806255037806392276",
            "current_tick":{
               "bits":4294904687
            },
            "exceeded":false,
            "fee":"300000",
            "pool_coin_a_amount":"2919491509461",
            "pool_coin_b_amount":"1597778886",
            "pool_id":"0x3b585786b13af1d8ea067ab37101b6513a05d2f90cfe60e8b1d9e1b46a63c4fa",
            "sequence_number":"3957"
         },
         "bcs":"6NWSg8Zmcjfa6V4AXKfpNAeFVvJpChrkBZmegqXQSn5pjga88KhRoUXS9uVEcRZR1oVHJcLpEzKhNrDHhKL3a7kgefGhw7BTFE8zcAZBjzcFTrur2PzuhRoL7tMAbmX3Wz5J9ETUWCUMwuXXPTyyHNEBSGymfpWiY8gBRKihLoWNE3r81Fo7DxCqywr4YbChDRT712CoBwCkpW4guiF7YgKy"
      }
   ],
   "objectChanges":[
      {
         "type":"mutated",
         "sender":"0xa2d6fcd5ed2ae13fe527a96c96100120d519900599f33e38ee112d80e51f9269",
         "owner":{
            "AddressOwner":"0xa2d6fcd5ed2ae13fe527a96c96100120d519900599f33e38ee112d80e51f9269"
         },
         "objectType":"0x2::coin::Coin<0x2::sui::SUI>",
         "objectId":"0x10611c2158f9d0456e6eb47b8b4168fd0fcab2102a1338cededb8cfbfc764367",
         "version":"410525749",
         "previousVersion":"410525748",
         "digest":"2UDbfZPJDLTnMGnxN1WmiJ51nNkLp2VA5pCkesE2RU5m"
      },
      {
         "type":"mutated",
         "sender":"0xa2d6fcd5ed2ae13fe527a96c96100120d519900599f33e38ee112d80e51f9269",
         "owner":{
            "Shared":{
               "initial_shared_version":406731547
            }
         },
         "objectType":"0x3492c874c1e3b3e2984e8c41b589e642d4d0a5d6459e5a9cfc2d52fd7c89c267::pool::Pool<0x2::sui::SUI, 0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC>",
         "objectId":"0x3b585786b13af1d8ea067ab37101b6513a05d2f90cfe60e8b1d9e1b46a63c4fa",
         "version":"410525749",
         "previousVersion":"410525748",
         "digest":"6VKtD7GKQCzCaKqB3VDkLNh6DMaAkR61xyWhJQJ9DNsv"
      },
      {
         "type":"created",
         "sender":"0xa2d6fcd5ed2ae13fe527a96c96100120d519900599f33e38ee112d80e51f9269",
         "owner":{
            "AddressOwner":"0xa2d6fcd5ed2ae13fe527a96c96100120d519900599f33e38ee112d80e51f9269"
         },
         "objectType":"0x2::coin::Coin<0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC>",
         "objectId":"0x66243ddef46317b0041ef8228d992f50e4ab7171f59a49032a40328ab11a68aa",
         "version":"410525749",
         "digest":"4sPiM6KwTudeTBqpUa8tJYS1UsVCLxaBBbvjfmjgb4GB"
      },
      {
         "type":"deleted",
         "sender":"0xa2d6fcd5ed2ae13fe527a96c96100120d519900599f33e38ee112d80e51f9269",
         "objectType":"0x2::coin::Coin<0x2::sui::SUI>",
         "objectId":"0x4682287b2248eceacecd263e9c6239b278a8b05de0dcde171602b6c88e3ebfe8",
         "version":"410525749"
      }
   ],
   "confirmedLocalExecution":false
}