diff --git a/packages/orchestration/src/exos/local-orchestration-account.js b/packages/orchestration/src/exos/local-orchestration-account.js index 579d27adc07..4be1b0f27b5 100644 --- a/packages/orchestration/src/exos/local-orchestration-account.js +++ b/packages/orchestration/src/exos/local-orchestration-account.js @@ -250,6 +250,8 @@ export const prepareLocalOrchestrationAccountKit = ( // TODO #9211 lookup denom from brand if ('brand' in amount) throw Fail`ERTP Amounts not yet supported`; + // TODO consider using `getChainsAndConnection` but right now it's keyed by chain name + // and we only have chainId for destination. const agoricChainInfo = await chainHub.getChainInfo('agoric'); const { transferChannel } = await chainHub.getConnectionInfo( agoricChainInfo, diff --git a/packages/orchestration/src/proposals/start-stakeAtom.js b/packages/orchestration/src/proposals/start-stakeAtom.js index 1fd954c52e1..470236c54f8 100644 --- a/packages/orchestration/src/proposals/start-stakeAtom.js +++ b/packages/orchestration/src/proposals/start-stakeAtom.js @@ -1,7 +1,7 @@ import { makeTracer } from '@agoric/internal'; import { makeStorageNodeChild } from '@agoric/internal/src/lib-chainStorage.js'; import { E } from '@endo/far'; -import { makeChainHub } from '../utils/chainHub.js'; +import { getChainsAndConnection, makeChainHub } from '../utils/chainHub.js'; /** * @import {IBCConnectionID} from '@agoric/vats'; @@ -46,9 +46,11 @@ export const startStakeAtom = async ({ const chainHub = makeChainHub(await agoricNames); - const agoric = await chainHub.getChainInfo('agoric'); - const cosmoshub = await chainHub.getChainInfo('cosmoshub'); - const connectionInfo = await chainHub.getConnectionInfo(agoric, cosmoshub); + const [_, cosmoshub, connectionInfo] = await getChainsAndConnection( + chainHub, + 'agoric', + 'cosmoshub', + ); /** @type {StartUpgradableOpts} */ const startOpts = { diff --git a/packages/orchestration/src/proposals/start-stakeOsmo.js b/packages/orchestration/src/proposals/start-stakeOsmo.js index 96c8ea69fbe..d61b73b5ae6 100644 --- a/packages/orchestration/src/proposals/start-stakeOsmo.js +++ b/packages/orchestration/src/proposals/start-stakeOsmo.js @@ -1,7 +1,7 @@ import { makeTracer } from '@agoric/internal'; import { makeStorageNodeChild } from '@agoric/internal/src/lib-chainStorage.js'; import { E } from '@endo/far'; -import { makeChainHub } from '../utils/chainHub.js'; +import { getChainsAndConnection, makeChainHub } from '../utils/chainHub.js'; /** * @import {IBCConnectionID} from '@agoric/vats'; @@ -47,11 +47,10 @@ export const startStakeOsmo = async ({ const chainHub = makeChainHub(await agoricNames); - const agoric = await chainHub.getChainInfo('agoric'); - const osmosis = await chainHub.getChainInfo('osmosis'); - const connectionInfo = await chainHub.getConnectionInfo( - agoric.chainId, - osmosis.chainId, + const [_, osmosis, connectionInfo] = await getChainsAndConnection( + chainHub, + 'agoric', + 'osmosis', ); /** @type {StartUpgradableOpts} */ diff --git a/packages/orchestration/src/utils/chainHub.js b/packages/orchestration/src/utils/chainHub.js index c85fd1d0308..6e7a0387239 100644 --- a/packages/orchestration/src/utils/chainHub.js +++ b/packages/orchestration/src/utils/chainHub.js @@ -13,6 +13,13 @@ const { Fail } = assert; * @import {Zone} from '@agoric/zone'; */ +/** + * @template {string} K + * @typedef {K extends keyof KnownChains + * ? Omit + * : ChainInfo} ActualChainInfo + */ + /** agoricNames key for ChainInfo hub */ export const CHAIN_KEY = 'chain'; /** namehub for connection info */ @@ -82,11 +89,7 @@ export const makeChainHub = (agoricNames, zone = makeHeapZone()) => { /** * @template {string} K * @param {K} chainName - * @returns {Promise< - * K extends keyof KnownChains - * ? Omit - * : ChainInfo - * >} + * @returns {Promise>} */ async getChainInfo(chainName) { // Either from registerChain or memoized remote lookup() @@ -177,3 +180,27 @@ export const registerChain = async ( // Bundle to pipeline IO await Promise.all(promises); }; + +/** + * @template {string} C1 + * @template {string} C2 + * @param {ChainHub} chainHub + * @param {C1} chainName1 + * @param {C2} chainName2 + * @returns {Promise< + * [ActualChainInfo, ActualChainInfo, IBCConnectionInfo] + * >} + */ +export const getChainsAndConnection = async ( + chainHub, + chainName1, + chainName2, +) => { + const [chain1, chain2] = await Promise.all([ + chainHub.getChainInfo(chainName1), + chainHub.getChainInfo(chainName2), + ]); + const connectionInfo = await chainHub.getConnectionInfo(chain2, chain1); + + return [chain1, chain2, connectionInfo]; +};