UNPKG

cosmic-interchain-cli

Version:

A command-line utility for Cosmic Wire's interchain messaging protocol

47 lines 2.48 kB
import { stringify as yamlStringify } from 'yaml'; import { PopulatedTransactionsSchema, } from '@hyperlane-xyz/sdk'; import { assert, errorToString } from '@hyperlane-xyz/utils'; import { logGray, logRed } from '../logger.js'; import { getSubmitterBuilder } from '../submit/submit.js'; import { indentYamlOrJson, readYamlOrJson, writeYamlOrJson, } from '../utils/files.js'; export async function runSubmit({ context, transactionsFilepath, receiptsFilepath, submissionStrategy, }) { const { chainMetadata, multiProvider } = context; assert(submissionStrategy, 'Submission strategy required to submit transactions.\nPlease create a submission strategy. See examples in cli/examples/submit/strategy/*.'); const transactions = getTransactions(transactionsFilepath); const chain = getChainFromTxs(multiProvider, transactions); const protocol = chainMetadata[chain].protocol; const submitterBuilder = await getSubmitterBuilder({ submissionStrategy, multiProvider, }); try { const transactionReceipts = await submitterBuilder.submit(...transactions); if (transactionReceipts) { logGray('🧾 Transaction receipts:\n\n', indentYamlOrJson(yamlStringify(transactionReceipts, null, 2), 4)); writeYamlOrJson(receiptsFilepath, transactionReceipts, 'yaml'); } } catch (error) { logRed(`⛔️ Failed to submit ${transactions.length} transactions:`, errorToString(error)); throw new Error('Failed to submit transactions.'); } } /** * Retrieves the chain name from transactions[0]. * * @param multiProvider - The MultiProvider instance to use for chain name lookup. * @param transactions - The list of populated transactions. * @returns The name of the chain that the transactions are submitted on. * @throws If the transactions are not all on the same chain or chain is not found */ function getChainFromTxs(multiProvider, transactions) { const firstTransaction = transactions[0]; const sameChainIds = transactions.every((t) => t.chainId === firstTransaction.chainId); assert(sameChainIds, 'Transactions must be submitted on the same chains'); return multiProvider.getChainName(firstTransaction.chainId); } function getTransactions(transactionsFilepath) { const transactionsFileContent = readYamlOrJson(transactionsFilepath.trim()); return PopulatedTransactionsSchema.parse(transactionsFileContent); } //# sourceMappingURL=submit.js.map