kleros-escrow-data-service
Version:
Data service for interacting with Kleros Escrow
85 lines (84 loc) • 4.37 kB
JavaScript
import { ethers } from "ethers";
import { createKlerosEscrowClient } from "../index";
import MultipleArbitrableTransactionABI from "../reference/MultipleArbitrableTransaction_ABI.json";
// Replace with your own RPC URL or use a public one
const RPC_URL = "https://eth-mainnet.public.blastapi.io";
// You can also use other public RPC endpoints like:
// const RPC_URL = "https://ethereum.publicnode.com";
// const RPC_URL = "https://rpc.ankr.com/eth";
// Configuration for mainnet with the specified contract address
const config = {
provider: {
url: RPC_URL,
networkId: 1, // Ethereum mainnet
},
multipleArbitrableTransaction: {
address: "0x0d67440946949FE293B45c52eFD8A9b3d51e2522",
abi: MultipleArbitrableTransactionABI,
},
ipfsGateway: "https://cdn.kleros.link",
};
/**
* Simple test function to test all read operations
*/
async function testReadFunctions() {
console.log("Initializing Kleros Escrow client with read-only access...");
const client = createKlerosEscrowClient(config);
try {
// Test 1: Get transaction count
console.log("\n--- Testing getTransactionCount ---");
const count = await client.services.transaction.getTransactionCount();
console.log(`Total transactions: ${count}`);
if (count === 0) {
console.log("No transactions found. Some tests will be skipped.");
return;
}
// Test 2: Get a transaction (using the first one)
console.log("\n--- Testing getTransaction ---");
const transactionId = "58"; // Start with the first transaction
const transaction = await client.services.transaction.getTransaction(transactionId);
console.log("Transaction details:", JSON.stringify(transaction, null, 2));
// Test 3: Check if transaction can be executed
console.log("\n--- Testing canExecuteTransaction ---");
const canExecute = await client.services.transaction.canExecuteTransaction(transactionId);
console.log(`Can execute transaction ${transactionId}: ${canExecute}`);
// Test 4: Check timeout status
console.log("\n--- Testing canTimeOut ---");
const timeoutStatus = await client.services.transaction.canTimeOut(transactionId);
console.log("Timeout status:", timeoutStatus);
// Test 5: Get dispute (if exists)
console.log("\n--- Testing getDispute ---");
const dispute = await client.services.dispute.getDispute(transactionId);
if (dispute) {
console.log("Dispute details:", JSON.stringify(dispute, null, 2));
// Test 6: Get arbitration cost (if dispute exists)
console.log("\n--- Testing getArbitrationCost ---");
const arbitrationCost = await client.services.dispute.getArbitrationCost();
console.log(`Arbitration cost: ${ethers.utils.formatEther(arbitrationCost)} ETH`);
// Test 7: Get appeal cost (if dispute exists)
console.log("\n--- Testing getAppealCost ---");
const appealCost = await client.services.dispute.getAppealCost(dispute.id);
console.log(`Appeal cost: ${ethers.utils.formatEther(appealCost)} ETH`);
// Test 8: Get fee timeout
console.log("\n--- Testing getFeeTimeout ---");
const feeTimeout = await client.services.dispute.getFeeTimeout();
console.log(`Fee timeout: ${feeTimeout} seconds`);
}
else {
console.log("No dispute found for this transaction.");
}
// Test 9: Get arbitrator info
console.log("\n--- Testing getArbitrator ---");
const arbitrator = await client.services.arbitrator.getArbitrator();
console.log("Arbitrator details:", JSON.stringify(arbitrator, null, 2));
// Test 10: Get events for transaction - SKIPPED due to RPC limitations
console.log("\n--- SKIPPING getEventsForTransaction due to RPC limitations ---");
console.log("To test events, use a premium RPC provider with an API key");
console.log("\n--- All read tests completed successfully ---");
}
catch (error) {
console.error("Error during testing:", error.message || String(error));
}
}
// Run the tests
testReadFunctions().catch((error) => console.error("Unhandled error:", error.message || String(error)));