Disputes
startDispute
async startDispute(walletClient: WalletClient, escrowId: bigint): Promise<string>
Called by buyer or seller when something goes wrong:
- Seller never delivered
- Item not as described
- Buyer claims non-delivery
- Any disagreement after deposit
Calling this:
- Pauses the escrow
- Moves state to
DISPUTED - Opens the dispute resolution phase
- Arbiter (if set) or platform will decide winner
Parameters
walletClient: WalletClient– Buyer or seller walletescrowId: bigint
Returns
Promise<string> – Transaction hash
import { createPalindromeSDK } from '@/lib/createSDK';
const { sdk, walletClient } = await connectAndInitSDK();
try {
const txHash = await sdk.startDispute(walletClient, 42n);
console.log("Dispute opened successfully!");
console.log("Arbiter will now review evidence");
console.log("Transaction:", txHash);
// Escrow state → DISPUTED
// Next: both parties submit evidence via submitDisputeMessage()
} catch (error: any) {
if (error.code === "INVALID_STATE") {
alert("Cannot dispute — escrow not in valid state (must be AWAITING_DELIVERY or similar)");
} else if (error.message.includes("Dispute already started")) {
alert("Dispute already in progress");
} else {
console.error("Failed to start dispute:", error.shortMessage || error.message);
}
}
