import { DZapClient } from "@dzapio/sdk";
import { Connection, VersionedTransaction } from "@solana/web3.js";
const dZap = DZapClient.getInstance();
const connection = new Connection("https://api.mainnet-beta.solana.com");
const walletAddress = wallet.publicKey.toString();
// 1. Get quote
const zapQuote = await dZap.getZapQuote({
srcChainId: 7565164,
destChainId: 7565164,
account: walletAddress,
srcToken: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
destToken: "9BEcn9aPEmhSPbPQeFGjidRiEKki46fVQDyPpSQXPA2D",
amount: "959349",
recipient: walletAddress,
refundee: walletAddress,
slippage: 1,
});
console.log("Route:", zapQuote.data.path.map((p) => p.protocol.name).join(" → "));
// 2. Execute zap (builds transactions)
const zapResult = await dZap.zap({
request: {
srcChainId: 7565164,
destChainId: 7565164,
account: walletAddress,
srcToken: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
destToken: "9BEcn9aPEmhSPbPQeFGjidRiEKki46fVQDyPpSQXPA2D",
amount: "959349",
recipient: walletAddress,
refundee: walletAddress,
slippage: 1,
},
signer: wallet,
});
const step = zapResult.steps[0].data;
// 3. Sign and send
const txBuffers = step.data.map((b64) =>
VersionedTransaction.deserialize(Buffer.from(b64, "base64"))
);
if (step.isJitoTx) {
// Submit via Jito
const signed = await wallet.signTransaction(txBuffers[0]);
await fetch("https://mainnet.block-engine.jito.wtf/api/v1/transactions", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
jsonrpc: "2.0",
id: 1,
method: "sendTransaction",
params: [Buffer.from(signed.serialize()).toString("base64"), { encoding: "base64" }],
}),
});
} else if (txBuffers.length === 1) {
const signed = await wallet.signTransaction(txBuffers[0]);
const sig = await connection.sendRawTransaction(signed.serialize());
await connection.confirmTransaction(sig, "confirmed");
console.log("Signature:", sig);
} else {
const signedAll = await wallet.signAllTransactions(txBuffers);
for (const tx of signedAll) {
const sig = await connection.sendRawTransaction(tx.serialize());
await connection.confirmTransaction(sig, "confirmed");
console.log("Signature:", sig);
}
}
// 4. Track status
const finalStatus = await waitForZap(step.txnId);
console.log("Zap status:", finalStatus.status);