escrow-market-sdk
v0.1.6
Published
SDK for Escrow Market Solana Program
Maintainers
Readme
Escrow Market SDK
SDK for the Escrow Market program on the Solana blockchain.
Installation
npm install escrow-market-sdkor
yarn add escrow-market-sdkSDK Structure
The SDK is organized into the following modules:
- EscrowMarketClient: The main class for interacting with the program
- Types: Interfaces and types for accounts, instructions, and events
- Utils: Utility functions for finding PDAs, data type conversions, etc.
- Constants: Constants used in the program
Basic Usage
import { Connection, Keypair, PublicKey, sendAndConfirmTransaction } from '@solana/web3.js';
import { EscrowMarketClient } from 'escrow-market-sdk';
// Connect to Solana cluster
const connection = new Connection('https://api.devnet.solana.com', 'confirmed');
// Initialize client with program ID
const programId = 'your_program_id_here'; // Program ID as string
const client = new EscrowMarketClient(connection, programId);
// Send a transaction with your keypair
const tx = await client.someMethod(...);
const signature = await sendAndConfirmTransaction(connection, tx, [yourKeypair]);Main Functions
1. Initialize
Initialize the Config account for the escrow market:
const admin = new PublicKey('...');
const operator = new PublicKey('...');
// Creates transaction object that needs to be signed and sent
const tx = await client.initialize(feePayer, admin, operator);
const signature = await sendAndConfirmTransaction(connection, tx, [feePayerKeypair]);
console.log(`Initialize successful: ${signature}`);2. Initialize Vault
Initialize a vault for a mint:
const mint = new PublicKey('...');
// Creates transaction object that needs to be signed and sent
const tx = await client.initializeVault(feePayer, mint);
const signature = await sendAndConfirmTransaction(connection, tx, [feePayerKeypair]);
console.log(`Initialize vault successful: ${signature}`);3. Deposit
Deposit tokens into the vault:
const mint = new PublicKey('...');
const amount = 1_000_000; // 1 token with 6 decimals
// Creates transaction object that needs to be signed and sent
const tx = await client.deposit(depositor, mint, amount);
const signature = await sendAndConfirmTransaction(connection, tx, [depositorKeypair]);
console.log(`Deposit successful: ${signature}`);4. Withdraw
Withdraw tokens from the vault:
const mint = new PublicKey('...');
const amount = 1_000_000; // 1 token with 6 decimals
const nonce = 123456; // Unique nonce to prevent replay attacks
// Creates transaction object that needs to be signed and sent
const tx = await client.withdraw(operatorPubkey, user, mint, amount, nonce);
const signature = await sendAndConfirmTransaction(connection, tx, [operatorKeypair]);
console.log(`Withdraw successful: ${signature}`);5. Settle
Complete a deal:
const dealId = 'deal-123';
const buyer = new PublicKey('...');
const seller = new PublicKey('...');
const tokenTransfer = new PublicKey('...'); // Token being transferred from seller to buyer
const tokenWithdraw = new PublicKey('...'); // Token being withdrawn from vault to seller
const transferAmount = 1_000_000; // Amount of tokenTransfer
const withdrawAmount = 2_000_000; // Amount of tokenWithdraw
// Creates transaction object that needs to be signed and sent
const tx = await client.settle(
operatorPubkey,
dealId,
buyer,
seller,
tokenTransfer,
tokenWithdraw,
transferAmount,
withdrawAmount
);
const signature = await sendAndConfirmTransaction(connection, tx, [operatorKeypair]);
console.log(`Settle successful: ${signature}`);6. Operator Cancel
Cancel a deal by the operator:
const dealId = 'deal-123';
const buyer = new PublicKey('...');
const tokenWithdraw = new PublicKey('...');
const amount = 1_000_000;
// Creates transaction object that needs to be signed and sent
const tx = await client.operatorCancel(
operatorPubkey,
dealId,
buyer,
tokenWithdraw,
amount
);
const signature = await sendAndConfirmTransaction(connection, tx, [operatorKeypair]);
console.log(`Cancel successful: ${signature}`);7. Parse Events
Parse events from a transaction:
const signature = "..."; // Transaction signature
const events = await client.parseEventsFromTransaction(signature);
console.log('Events:', events);8. Get Information
// Get config
const config = await client.getConfig();
console.log('Config:', config);
// Get deal information
const dealId = 'deal-123';
const deal = await client.getDeal(dealId);
console.log('Deal:', deal);
// Get vault balance
const mint = new PublicKey('...');
const balance = await client.getVaultBalance(mint);
console.log(`Vault balance: ${balance}`);9. Subscribe to Events
// Register event listener
const listenerId = client.subscribeToEvents('SettleEvent', (event) => {
console.log('Settle event:', event);
});
// Unsubscribe
await client.unsubscribeFromEvent(listenerId);Examples
The SDK comes with examples to help you get started.
Development Notes
- PDA Management: Make sure you use the correct seeds for PDAs when interacting with the program.
- Error Handling: Always wrap function calls in try/catch blocks to handle errors.
- Token Balance: Check token balances before performing deposit, withdraw, or settle transactions.
- Permissions: Only the admin can initialize the program, and only the operator can cancel deals.
- Token Programs: The SDK supports both standard SPL tokens and custom token programs.
License
MIT
