npm install @neoswap/solana-collection-swap
type SwapData = {
maker: string, // maker public key
nftMintMaker: string, // nft mint of the maker
bids: Bid[], // array of bids to initiate with ( max 15 )
taker?: string, // taker public key
nftMintTaker?: string, // nft mint of the taker
acceptedBid?: Bid, // accepted bid
refererMaker?: string, // unused
refererTaker?: string, // unused
endTime: number, // date when the swap gets obsolete
royaltiesPaidMaker: boolean, // royalties paid for maker NFT
royaltiesPaidTaker: boolean, // royalties paid for taker NFT
claimed: boolean, // is swap claimed
status: "active" | "expired" | "accepted",
paymentMint: string, // mint of the payment token
};
type Bid = {
collection: string,
amount: number,
makerNeoswapFee: number,
takerNeoswapFee: number,
takerRoyalties: number,
makerRoyalties: number,
};
type BundleTransaction = {
tx: Transaction | VersionedTransaction, // transaction object
stx: Transaction | VersionedTransaction, // signed transaction object
details: MakeSArg | TakeSArg | ClaimSArg | UpdateSArgs | RmBidArgs | SetNewTime, // arguments passed to the package to construct the transactions
blockheight?: number, // signature blockheight
description: string, // description of the transaction
priority: number, // order of the transactions 0 means should be sent first
status: "pending" | "broadcast" | "success" | "failed" | "Timeout",
hash?: string,
failedReason?: string,
retries?: number,
};
type EnvOpts = {
clusterOrUrl?: Cluster | string, // cluster or url to construct connection ( default is mainnet )
program?: Program<CollectionSwap>, // if you want to pass your own program
programId?: string, // if you want to use a different program id
idl?: Idl | true, // if you want to use your own idl, true willl fetch the onchain IDL
prioritizationFee?: number, // if a prioritization fee is to be added to the transaction
};
You can also find imports in a destructured way accessible in the package
import { UTILS, CREATE_INSTRUCTIONS as CI, TYPES } from "@neoswap/solana-collection-swap";
let initData = await CI.createMakeSwapInstructions({
maker: string;
nftMintMaker: string;
paymentMint: string;
bids: Bid[];
endDate: number;
});
let addBT = await CI.createAddBidBt({
bids: Bid[];
swapDataAccount: string;
maker: string;
});
let rmBT = await CI.createRmBidBt({
rmBids: Bid[];
swapDataAccount: string;
maker: string;
});
let setNewTimeBT = await CI.createSetNewTime({
swapDataAccount: string;
newTime: number;
maker: string;
});
let takeData = await CI.createTakeAndCloseSwapInstructions({
swapDataAccount: string;
taker: string;
signer?: string; // if you want to finalize the swap on behalf of the taker
nftMintTaker: string;
bid: Bid;
verifyTaker?: boolean; // if you want to make sure the taker is the one who is taking the swap
unwrap?:boolean // if wrappedSol is to be unwrapped
});
let cancelBT = await CI.createCancelSwapInstructions({
signer,
swapDataAccount,
});
let BT : BundleTransaction[];
// BT will be updated with most recent information
BT = await UTILS.sendBundledTransactionsV2({
bundleTransactions: BT,
signer?, // should be a keypair if not provided, function expects the transaction stx to be already signed
clusterOrUrl?, // provide or RPC or connection
connection?,
commitment?,
prioritizationFee?,
retryDelay?,
skipSimulation?,
skipConfirmation?,
})