kleros-escrow-data-service
Version:
Data service for interacting with Kleros Escrow
127 lines (126 loc) ⢠7.14 kB
JavaScript
import { createKlerosEscrowEthClient, createKlerosEscrowTokenClient } from '../index';
// ETH Configuration (existing functionality)
const ethConfig = {
provider: {
url: "https://eth-mainnet.public.blastapi.io",
networkId: 1,
},
multipleArbitrableTransactionEth: {
address: "0x0d67440946949FE293B45c52eFD8A9b3d51e2522", // Real deployed contract
// abi not specified - will use default ABI
},
ipfsGateway: "https://cdn.kleros.link",
};
// Token Configuration (new functionality)
const tokenConfig = {
provider: {
url: "https://eth-mainnet.public.blastapi.io",
networkId: 1,
},
multipleArbitrableTransactionToken: {
address: "0x0d67440946949FE293B45c52eFD8A9b3d51e2522", // Replace with actual token contract when available
abi: [], // Will use default ABI
},
ipfsGateway: "https://cdn.kleros.link",
};
describe('Real Data Retrieval Test', () => {
it('should retrieve real ETH transaction data', async () => {
console.log("\nš ETH TRANSACTIONS (Original Functionality)");
console.log("-".repeat(50));
const ethClient = createKlerosEscrowEthClient(ethConfig);
console.log("Testing ETH client initialization...");
// Test getting a specific transaction (using transaction ID 1)
console.log("Fetching transaction details for transaction ID 1...");
const ethDetails = await ethClient.getEthTransactionDetails("93");
console.log(`ā
Transaction Details Retrieved`);
console.log(` Meta Evidence: ${ethDetails.metaEvidences.length} items`);
console.log(` Payments: ${ethDetails.payments.length} items`);
console.log(` Disputes: ${ethDetails.disputes.length} items`);
console.log(` Evidence: ${ethDetails.evidences.length} items`);
// Test getting contract transaction data
console.log("\nš Getting contract transaction data...");
const contractTx = await ethClient.getEthTransaction("1");
console.log(` Transaction ID: ${contractTx.id}`);
console.log(` Sender: ${contractTx.sender}`);
console.log(` Receiver: ${contractTx.receiver}`);
console.log(` Amount: ${contractTx.amount} wei`);
console.log(` Status: ${contractTx.status}`);
// Verify we got actual data
expect(ethDetails).toBeDefined();
expect(contractTx).toBeDefined();
expect(contractTx.id).toBe("1");
}, 30000); // 30 second timeout for network calls
it('should retrieve real token transaction data', async () => {
var _a;
console.log("\nšŖ TOKEN TRANSACTIONS (New Functionality)");
console.log("-".repeat(50));
try {
const tokenClient = createKlerosEscrowTokenClient(tokenConfig);
console.log("Testing token client initialization...");
// Test getting all token transactions from subgraph
console.log("Fetching all token transactions from subgraph...");
const tokenTransactions = await tokenClient.getAllTokenTransactions();
console.log(`ā
Found ${tokenTransactions.length} token transactions`);
if (tokenTransactions.length > 0) {
const firstTokenTx = tokenTransactions[0];
console.log("\nš First Token Transaction:");
console.log(` ID: ${firstTokenTx._transactionID}`);
console.log(` Sender: ${firstTokenTx._sender}`);
console.log(` Receiver: ${firstTokenTx._receiver}`);
console.log(` Token: ${firstTokenTx._token}`);
console.log(` Amount: ${firstTokenTx._amount} tokens`);
console.log(` Block: ${firstTokenTx.blockNumber}`);
console.log(` Time: ${new Date(parseInt(firstTokenTx.blockTimestamp) * 1000).toISOString()}`);
// Get token information
console.log("\nš·ļø Getting token information...");
try {
const tokenInfo = await tokenClient.getTokenInfo(firstTokenTx._token);
console.log(` Token Name: ${tokenInfo.name}`);
console.log(` Token Symbol: ${tokenInfo.symbol}`);
console.log(` Token Decimals: ${tokenInfo.decimals}`);
}
catch (tokenError) {
console.log(` ā ļø Could not get token info: ${(tokenError === null || tokenError === void 0 ? void 0 : tokenError.message) || 'Unknown error'}`);
}
// Get transaction details
console.log("\nš Getting token transaction details...");
const tokenDetails = await tokenClient.getTokenTransactionDetails(firstTokenTx._transactionID);
console.log(` Meta Evidence: ${tokenDetails.metaEvidences.length} items`);
console.log(` Payments: ${tokenDetails.payments.length} items`);
console.log(` Disputes: ${tokenDetails.disputes.length} items`);
console.log(` Evidence: ${tokenDetails.evidences.length} items`);
expect(tokenTransactions.length).toBeGreaterThanOrEqual(0);
expect(tokenDetails).toBeDefined();
}
else {
console.log("š No token transactions found in subgraph");
console.log("š” This might be because:");
console.log(" - The token subgraph has no indexed data yet");
console.log(" - The contract address is incorrect");
console.log(" - No token transactions have been created");
// This is expected - just verify the client works
expect(tokenTransactions).toBeDefined();
expect(Array.isArray(tokenTransactions)).toBe(true);
}
}
catch (error) {
console.log(`ā Token Error: ${(error === null || error === void 0 ? void 0 : error.message) || 'Unknown error'}`);
if ((_a = error === null || error === void 0 ? void 0 : error.message) === null || _a === void 0 ? void 0 : _a.includes('multipleArbitrableTransactionToken')) {
console.log("š” This is expected - token contract configuration is required");
expect(error.message).toContain('multipleArbitrableTransactionToken');
}
else {
throw error; // Re-throw unexpected errors
}
}
}, 30000); // 30 second timeout for network calls
it('should show endpoint comparison', () => {
console.log("\nš ENDPOINT COMPARISON");
console.log("-".repeat(50));
console.log("ETH Endpoint: https://api.studio.thegraph.com/query/74379/kleros-escrow-v1/version/latest");
console.log("Token Endpoint: https://api.studio.thegraph.com/query/74379/kleros-escrow-v1-erc20-subgraph/version/latest");
console.log("\nā
Data retrieval test completed!");
console.log("=".repeat(50));
expect(true).toBe(true); // Simple assertion to make Jest happy
});
});