Skip to content

Latest commit

 

History

History
263 lines (198 loc) · 5.65 KB

README.md

File metadata and controls

263 lines (198 loc) · 5.65 KB

SDK

Description: provides high level functionality to working with fusion mode

Real world example

import {FusionSDK, NetworkEnum} from '@1inch/fusion-sdk'

async function main() {
    const sdk = new FusionSDK({
        url: 'https://api.1inch.dev/fusion',
        network: NetworkEnum.ETHEREUM,
        authKey: 'your-auth-key'
    })

    const orders = await sdk.getActiveOrders({page: 1, limit: 2})
}

main()

Creation

Constructor arguments: params: FusionSDKConfigParams

interface HttpProviderConnector {
    get<T>(url: string): Promise<T>

    post<T>(url: string, data: unknown): Promise<T>
}

interface BlockchainProviderConnector {
    signTypedData(
        walletAddress: string,
        typedData: EIP712TypedData
    ): Promise<string>

    ethCall(contractAddress: string, callData: string): Promise<string>
}

type FusionSDKConfigParams = {
    url: string
    network: NetworkEnum
    blockchainProvider?: BlockchainProviderConnector
    httpProvider?: HttpProviderConnector // by default we are using axios
}

Example with custom httpProvider:

import {api} from 'my-api-lib'

class CustomHttpProvider implements HttpProviderConnector {
    get<T>(url: string): Promise<T> {
        return api.get(url)
    }

    post<T>(url: string, data: unknown): Promise<T> {
        return api.post(url, data)
    }
}

Methods

getActiveOrders

Description: used to get the list of active orders Arguments:

  • [0] PaginationParams

Example:

import {FusionSDK, NetworkEnum} from '@1inch/fusion-sdk'
const sdk = new FusionSDK({
    url: 'https://api.1inch.dev/fusion',
    network: NetworkEnum.ETHEREUM
})
const orders = await sdk.getActiveOrders({page: 1, limit: 2})

getOrdersByMaker

Description: used to get orders by maker

Arguments:

  • [0] params: PaginationParams & {address: string}

Example:

import {FusionSDK, NetworkEnum} from '@1inch/fusion-sdk'
const sdk = new FusionSDK({
    url: 'https://api.1inch.dev/fusion',
    network: NetworkEnum.ETHEREUM
})

const orders = await sdk.getOrdersByMaker({
    page: 1,
    limit: 2,
    address: '0xfa80cd9b3becc0b4403b0f421384724f2810775f'
})

getQuote

Description: Get quote details based on input data

Arguments:

  • [0] params: QuoteParams

Example:

import {FusionSDK, NetworkEnum, QuoteParams} from '@1inch/fusion-sdk'
const sdk = new FusionSDK({
    url: 'https://api.1inch.dev/fusion',
    network: NetworkEnum.ETHEREUM
})

const params = {
    fromTokenAddress: '0x6b175474e89094c44da98b954eedeac495271d0f',
    toTokenAddress: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
    amount: '1000000000000000000000'
}

const quote = await sdk.getQuote(params)

getQuoteWithCustomPreset

Description: Get quote details with custom preset

Arguments:

  • [0] params: QuoteParams
  • [1] body params: QuoteCustomPresetParams
import {FusionSDK, NetworkEnum, QuoteParams} from '@1inch/fusion-sdk'
const sdk = new FusionSDK({
    url: 'https://api.1inch.dev/fusion',
    network: NetworkEnum.ETHEREUM
})

const params = {
    fromTokenAddress: '0x6b175474e89094c44da98b954eedeac495271d0f',
    toTokenAddress: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
    amount: '1000000000000000000000'
}

const body = {
    customPreset: {
        auctionDuration: 180,
        auctionStartAmount: '100000',
        auctionEndAmount: '50000',
        // you can pass points to get custom non linear curve
        points: [
            {toTokenAmount: '90000', delay: 20}, // auctionStartAmount >= toTokenAmount >= auctionEndAmount
            {toTokenAmount: '70000', delay: 40}
        ]
    }
}

const quote = await sdk.getQuoteWithCustomPreset(params, body)

placeOrder

Description: used to create a fusion order

Arguments:

  • [0] params: OrderParams

Example:

const makerPrivateKey = '0x123....'
const makerAddress = '0x123....'

const nodeUrl = '....'

const blockchainProvider = new PrivateKeyProviderConnector(
    makerPrivateKey,
    new Web3(nodeUrl)
)

const sdk = new FusionSDK({
    url: 'https://api.1inch.dev/fusion',
    network: 1,
    blockchainProvider
})

sdk.placeOrder({
    fromTokenAddress: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', // WETH
    toTokenAddress: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', // USDC
    amount: '50000000000000000', // 0.05 ETH
    walletAddress: makerAddress,
    // fee is an optional field
    fee: {
        takingFeeBps: 100, // 1% as we use bps format, 1% is equal to 100bps
        takingFeeReceiver: '0x0000000000000000000000000000000000000000' //  fee receiver address
    }
}).then(console.log)

Types

PaginationParams

type PaginationParams = {
    page?: number // default is 1
    limit?: number // default is 2, min is 1, max is 500
}

QuoteParams

type QuoteParams = {
    fromTokenAddress: string
    toTokenAddress: string
    amount: string
    permit?: string // a permit (EIP-2612) call data, user approval sign
    takingFeeBps?: number // 100 == 1%
}

OrderParams

enum PresetEnum {
    fast = 'fast',
    medium = 'medium',
    slow = 'slow'
}

type OrderParams = {
    fromTokenAddress: string
    toTokenAddress: string
    amount: string
    walletAddress: string
    permit?: string // a permit (EIP-2612) call data, user approval sign
    receiver?: string // address
    preset?: PresetEnum
    nonce?: OrderNonce | string | number // allows to batch cancel orders. by default: not used
    fee?: TakingFeeInfo
}

export type TakingFeeInfo = {
    takingFeeBps: number // 100 == 1%
    takingFeeReceiver: string
}