Usage Examples
Connecting to a Node
import { connectComet } from "1matrix-cometbft";
// Auto-detect node version and connect
const client = await connectComet("http://localhost:26657");
// Or connect to a specific version
import { Tendermint34Client, Tendermint37Client, Comet38Client } from "1matrix-cometbft";
const tm34Client = await Tendermint34Client.connect("http://localhost:26657");
const tm37Client = await Tendermint37Client.connect("http://localhost:26657");
const comet38Client = await Comet38Client.connect("http://localhost:26657");
Querying Node Status
const status = await client.status();
console.log("Node info:", status.nodeInfo);
console.log("Sync info:", status.syncInfo);
console.log("Validator info:", status.validatorInfo);
Fetching Blockchain Data
// Get the latest block
const latestBlock = await client.block();
console.log("Latest block height:", latestBlock.block.header.height);
// Get a specific block by height
const blockAtHeight = await client.block(1234);
console.log("Block time:", blockAtHeight.block.header.time);
// Get block results (contains events)
const blockResults = await client.blockResults(1234);
console.log("Begin block events:", blockResults.beginBlockEvents);
console.log("End block events:", blockResults.endBlockEvents);
// Query validators
const validators = await client.validators();
console.log("Validator count:", validators.validators.length);
// Query blockchain info (block range)
const blockchain = await client.blockchain(1, 10);
console.log("Block metas:", blockchain.blockMetas);
Working with Transactions
// Example signed transaction bytes (replace with your actual tx)
const txBytes = new Uint8Array([/* your signed transaction bytes */]);
// Broadcast transaction asynchronously (fire and forget)
const asyncResult = await client.broadcastTxAsync(txBytes);
console.log("Broadcast result (async):", asyncResult);
// Broadcast transaction synchronously (wait for CheckTx)
const syncResult = await client.broadcastTxSync(txBytes);
console.log("Broadcast result (sync):", syncResult);
// Broadcast transaction and wait for commit (wait for DeliverTx)
const commitResult = await client.broadcastTxCommit(txBytes);
console.log("Broadcast result (commit):", commitResult);
// Query transaction by hash
const txHash = "ABCDEF1234567890"; // Replace with actual tx hash
const tx = await client.tx(txHash);
console.log("Transaction:", tx);
// Search for transactions by query
const txSearchResults = await client.txSearch({
query: "tx.height > 1000 AND tx.height < 1500",
page: 1,
per_page: 10,
order_by: "desc",
});
console.log("Transaction search results:", txSearchResults);
// Search for all transactions matching query (automatic pagination)
const allTxSearchResults = await client.txSearchAll({
query: "tx.height > 1000 AND tx.height < 1500",
per_page: 100, // Optional: how many results per page
order_by: "desc", // Optional: sort order
});
console.log("All matching transactions:", allTxSearchResults);
// Get number of unconfirmed transactions
const numUnconfirmedTxs = await client.numUnconfirmedTxs();
console.log("Number of unconfirmed transactions:", numUnconfirmedTxs);
ABCI Query Functions
// Query application state via ABCI
const abciQueryResult = await client.abciQuery({
path: "/store/acc/key", // Example path
data: new Uint8Array([1, 2, 3, 4]), // Example query data
height: 1000, // Optional: specific height
prove: true, // Optional: with merkle proof
});
console.log("ABCI Query Result:", abciQueryResult);
// Query with shorter syntax
const simpleQuery = await client.abciQuery({
path: "/custom/route",
data: new TextEncoder().encode("query-data"),
});
console.log("Simple ABCI Query:", simpleQuery);
Validator Functions
// Get validators at specific height
const height = 1000;
const validators = await client.validators(height);
console.log(`Validators at height ${height}:`, validators);
// Get validators with pagination
const paginatedValidators = await client.validators({
height: 1000,
page:1,
per_page: 10,
});
console.log("First 10 validators:", paginatedValidators);
Event Subscription
// Subscribe to new blocks
const newBlockSubscription = client.subscribeNewBlock().subscribe({
next: (event) => {
console.log("New block:", event);
},
error: (error) => {
console.error("Subscription error:", error);
},
complete: () => {
console.log("Subscription completed");
},
});
// Subscribe to new block headers (lighter than full blocks)
const newBlockHeaderSubscription = client.subscribeNewBlockHeader().subscribe({
next: (event) => {
console.log("New block header:", event);
},
error: (error) => console.error(error),
complete: () => console.log("Completed"),
});
// Subscribe to transactions matching a query
const txSubscription = client.subscribeTx().subscribe({
next: (event) => {
console.log("Transaction event:", event);
console.log("Transaction data:", event.tx);
console.log("Transaction result:", event.result);
},
error: (error) => console.error(error),
complete: () => console.log("Completed"),
});
// Later, unsubscribe from all
setTimeout(() => {
console.log("Unsubscribing from all events");
newBlockSubscription.unsubscribe();
newBlockHeaderSubscription.unsubscribe();
txSubscription.unsubscribe();
}, 60000); // Unsubscribe after 1 minute