@cryptoscan/orca-sdk
Version:
The fastest and easiest way to trade on Orca.
104 lines (103 loc) • 3.63 kB
JavaScript
import { swap } from "@cryptoscan/swap-sdk";
import { getRate } from '@cryptoscan/scanner-sdk';
import { Connection } from "@solana/web3.js";
import { getBalance } from '@cryptoscan/solana-wallet-sdk';
export class OrcaApi {
params = {
buySlippage: 1,
sellSlippage: 10,
bumpSlippage: 10,
buyFee: 0.00005,
sellFee: 0.00005,
transferFee: 0.00005,
connection: new Connection('https://api.mainnet-beta.solana.com/'),
};
constructor(params) {
if (params) {
this.params = {
...this.params,
...params,
};
}
}
async buy(_params) {
const params = {
..._params,
type: 'swap',
network: 'solana',
amount: _params.sol,
wallet: _params.payerWallet || _params.wallet,
from: 'So11111111111111111111111111111111111111112',
to: _params.coinAddress,
fee: _params.fee || this.params.buyFee,
slippage: _params.slippage || this.params.buySlippage,
connection: this.params.connection,
};
return swap(params);
}
async sell(_params) {
let sol = _params.sol;
let amount;
if (!_params.sol) {
const balance = await getBalance(_params.wallet.publicKey.toString(), _params.coinAddress);
amount = balance;
}
if (!amount) {
amount = await getRate({
network: 'solana',
from: 'So11111111111111111111111111111111111111112',
to: _params.coinAddress,
amount: sol,
}).then((r) => r?.amount);
}
if (!amount) {
throw new Error('Failed to get price');
}
const params = {
..._params,
type: 'swap',
network: 'solana',
amount,
wallet: _params.payerWallet || _params.wallet,
from: _params.coinAddress,
to: 'So11111111111111111111111111111111111111112',
fee: _params.fee || this.params.sellFee,
slippage: _params.slippage || this.params.sellSlippage,
connection: this.params.connection,
};
return swap(params);
}
async transfer(_params) {
let amount = _params.sol;
if (!_params.sol) {
amount = await getBalance(_params.walletFrom.publicKey.toString());
}
if (!!_params.coinAddress || _params.coinAddress?.toLowerCase() === 'so11111111111111111111111111111111111111112') {
amount = await getRate({
network: 'solana',
from: 'So11111111111111111111111111111111111111112',
to: _params.coinAddress,
amount,
}).then((r) => r?.amount);
if (!amount) {
throw new Error('Failed to get price');
}
}
const params = {
..._params,
type: 'transfer',
network: 'solana',
wallet: _params.payerWallet || _params.walletFrom,
coinAddress: _params.coinAddress || 'So11111111111111111111111111111111111111112',
from: _params.walletFrom.publicKey.toString(),
to: _params.walletTo.publicKey.toString(),
amount: amount,
fee: _params.fee || this.params.transferFee,
connection: this.params.connection,
};
return swap(params);
}
async listenTransactions(address, onTransaction) {
throw new Error('is not implemented');
}
}