add getInterchain: trace a transaction/block to validator blocks + interchain anchors
All checks were successful
Build and Test / build (20.x) (push) Successful in 45s
Build and Test / build (18.x) (push) Successful in 48s
Build and Test / build (16.x) (push) Successful in 52s

New transaction.getInterchain and block.getInterchain call the prime-node
/api/v1/{transaction,block}/{id}/interchain endpoints, returning an
InterchainTrace { blockId, validatorBlocks, interchainTransactions }. Adds
VerificationBlock / InterchainTransaction / InterchainTrace interfaces and
method-existence assertions.
This commit is contained in:
2026-06-02 14:12:59 -04:00
parent e4430ae27c
commit 2ffa63df41
4 changed files with 63 additions and 1 deletions

View File

@@ -3,7 +3,7 @@
*/ */
import { DragonchainClient } from './client'; import { DragonchainClient } from './client';
import { Block } from './types'; import { Block, InterchainTrace } from './types';
export class BlockClient { export class BlockClient {
private client: DragonchainClient; private client: DragonchainClient;
@@ -18,4 +18,12 @@ export class BlockClient {
async get(blockId: string): Promise<Block> { async get(blockId: string): Promise<Block> {
return this.client.get<Block>(`/api/v1/block/${blockId}`); return this.client.get<Block>(`/api/v1/block/${blockId}`);
} }
/**
* Traces a block to the validator (verification) blocks that validated it and
* the public-chain interchain anchors those validator blocks were bundled into.
*/
async getInterchain(blockId: string): Promise<InterchainTrace> {
return this.client.get<InterchainTrace>(`/api/v1/block/${blockId}/interchain`);
}
} }

View File

@@ -11,6 +11,7 @@ import {
TransactionBulkResponse, TransactionBulkResponse,
Transaction, Transaction,
ListTransactionsResponse, ListTransactionsResponse,
InterchainTrace,
} from './types'; } from './types';
export class TransactionClient { export class TransactionClient {
@@ -49,6 +50,16 @@ export class TransactionClient {
return this.client.get<Transaction>(`/api/v1/transaction/${transactionId}`); return this.client.get<Transaction>(`/api/v1/transaction/${transactionId}`);
} }
/**
* Traces a transaction to the validator (verification) blocks that validated
* its prime block and the public-chain interchain anchors those validator
* blocks were bundled into. If the transaction is still pending (not yet in a
* block) the trace's arrays are empty.
*/
async getInterchain(transactionId: string): Promise<InterchainTrace> {
return this.client.get<InterchainTrace>(`/api/v1/transaction/${transactionId}/interchain`);
}
/** /**
* Lists all transactions * Lists all transactions
*/ */

View File

@@ -142,6 +142,47 @@ export interface Block {
proof: BlockProof; proof: BlockProof;
} }
// Interchain Trace Types
/** A validator's verification of a prime block. */
export interface VerificationBlock {
version: string;
primeChainId: string;
primeBlockId: string;
timestamp: string;
verifierPublicKey: string;
verifierSignature: string;
}
/**
* An anchor broadcast to a public blockchain (e.g. ETH/BTC) bundling one or more
* validator blocks. `validatorBlocks` holds the covered prime block ids;
* `coveredPrimeChainIds` the prime chains they belong to.
*/
export interface InterchainTransaction {
id: number;
version: string;
timestamp: string;
chainId: string;
transHash: string;
blockId: string;
validatorBlocks: string[];
validatorBlockhash: string;
signature: string;
coveredPrimeChainIds: string[];
}
/**
* Links a prime block to the validator (verification) blocks that validated it
* and the public-chain interchain anchors those validator blocks were bundled
* into. Returned by `transaction.getInterchain` and `block.getInterchain`.
*/
export interface InterchainTrace {
blockId: string;
validatorBlocks: VerificationBlock[];
interchainTransactions: InterchainTransaction[];
}
// System Types // System Types
export interface SystemStatus { export interface SystemStatus {
id: string; id: string;

View File

@@ -47,6 +47,7 @@ describe('DragonchainSDK', () => {
expect(typeof sdk.transaction.create).toBe('function'); expect(typeof sdk.transaction.create).toBe('function');
expect(typeof sdk.transaction.createBulk).toBe('function'); expect(typeof sdk.transaction.createBulk).toBe('function');
expect(typeof sdk.transaction.get).toBe('function'); expect(typeof sdk.transaction.get).toBe('function');
expect(typeof sdk.transaction.getInterchain).toBe('function');
expect(typeof sdk.transaction.list).toBe('function'); expect(typeof sdk.transaction.list).toBe('function');
}); });
@@ -68,6 +69,7 @@ describe('DragonchainSDK', () => {
it('should have block module with correct methods', () => { it('should have block module with correct methods', () => {
expect(typeof sdk.block.get).toBe('function'); expect(typeof sdk.block.get).toBe('function');
expect(typeof sdk.block.getInterchain).toBe('function');
}); });
it('should have system module with correct methods', () => { it('should have system module with correct methods', () => {