From ce7886e7360654963817ea2949e393e5adc8924b Mon Sep 17 00:00:00 2001 From: Turadg Aleahmad Date: Thu, 23 May 2024 13:33:42 -0700 Subject: [PATCH] test: makeFakeBankManagerKit --- .../inter-protocol/test/provisionPool.test.js | 16 +-- packages/orchestration/src/facade.js | 1 - .../test/examples/swapExample.test.ts | 14 +- .../test/examples/unbondExample.test.ts | 7 +- packages/smart-wallet/test/addAsset.test.js | 10 +- packages/smart-wallet/test/supports.js | 17 +-- ...bootstrap-walletFactory-service-upgrade.js | 8 +- packages/vats/src/vat-bank.js | 4 + packages/vats/test/localchain.test.js | 122 ++++++++++-------- packages/vats/tools/bank-utils.js | 35 ++++- packages/vats/tools/fake-bridge.js | 12 +- 11 files changed, 136 insertions(+), 110 deletions(-) diff --git a/packages/inter-protocol/test/provisionPool.test.js b/packages/inter-protocol/test/provisionPool.test.js index c907e3527ed..7f2d3798609 100644 --- a/packages/inter-protocol/test/provisionPool.test.js +++ b/packages/inter-protocol/test/provisionPool.test.js @@ -6,18 +6,19 @@ import { CONTRACT_ELECTORATE, ParamTypes } from '@agoric/governance'; import committeeBundle from '@agoric/governance/bundles/bundle-committee.js'; import { WalletName } from '@agoric/internal'; import { eventLoopIteration } from '@agoric/internal/src/testing-utils.js'; +import { publishDepositFacet } from '@agoric/smart-wallet/src/walletFactory.js'; import { unsafeMakeBundleCache } from '@agoric/swingset-vat/tools/bundleTool.js'; -import { makeScalarBigMapStore } from '@agoric/vat-data'; import centralSupplyBundle from '@agoric/vats/bundles/bundle-centralSupply.js'; import { makeNameHubKit } from '@agoric/vats/src/nameHub.js'; -import { buildRootObject as buildBankRoot } from '@agoric/vats/src/vat-bank.js'; import { PowerFlags } from '@agoric/vats/src/walletFlags.js'; -import { makeFakeBankKit } from '@agoric/vats/tools/bank-utils.js'; +import { + makeFakeBankKit, + makeFakeBankManagerKit, +} from '@agoric/vats/tools/bank-utils.js'; import { makeFakeBoard } from '@agoric/vats/tools/board-utils.js'; import { makeRatio } from '@agoric/zoe/src/contractSupport/ratio.js'; import { E, Far } from '@endo/far'; import path from 'path'; -import { publishDepositFacet } from '@agoric/smart-wallet/src/walletFactory.js'; import { makeBridgeProvisionTool } from '../src/provisionPoolKit.js'; import { makeMockChainStorageRoot, @@ -275,12 +276,7 @@ test('provisionPool trades provided assets for IST', async t => { * @param {string[]} addresses */ const makeWalletFactoryKitForAddresses = async addresses => { - const baggage = makeScalarBigMapStore('bank baggage'); - const bankManager = await buildBankRoot( - undefined, - undefined, - baggage, - ).makeBankManager(); + const { bankManager } = await makeFakeBankManagerKit(); const feeKit = makeIssuerKit('FEE'); const fees = withAmountUtils(feeKit); diff --git a/packages/orchestration/src/facade.js b/packages/orchestration/src/facade.js index 7dcfd9aafe4..ed507e4ab77 100644 --- a/packages/orchestration/src/facade.js +++ b/packages/orchestration/src/facade.js @@ -40,7 +40,6 @@ const makeLocalChainFacade = localchain => { return { deposit(payment) { console.log('deposit got', payment); - // XXX yet again tripped up on remote methods looking local statically return E(account).deposit(payment); }, transferSteps(amount, msg) { diff --git a/packages/orchestration/test/examples/swapExample.test.ts b/packages/orchestration/test/examples/swapExample.test.ts index e4b826f2728..05c8cb4bdd3 100644 --- a/packages/orchestration/test/examples/swapExample.test.ts +++ b/packages/orchestration/test/examples/swapExample.test.ts @@ -7,9 +7,9 @@ import path from 'path'; import { makeFakeStorageKit } from '@agoric/internal/src/storage-test-utils.js'; import { makeHeapZone } from '@agoric/zone'; import { prepareLocalChainTools } from '@agoric/vats/src/localchain.js'; -import { buildRootObject as buildBankVatRoot } from '@agoric/vats/src/vat-bank.js'; import { withAmountUtils } from '@agoric/zoe/tools/test-utils.js'; -import { makeFakeBankBridge } from '@agoric/vats/tools/fake-bridge.js'; +import { makeFakeBankManagerKit } from '@agoric/vats/tools/bank-utils.js'; +import { LOCALCHAIN_DEFAULT_ADDRESS } from '@agoric/vats/tools/fake-bridge.js'; import { makeFakeLocalchainBridge } from '../supports.js'; const dirname = path.dirname(new URL(import.meta.url).pathname); @@ -28,11 +28,7 @@ test('start', async t => { const zone = makeHeapZone(); const { makeLocalChain } = prepareLocalChainTools(zone.subZone('localchain')); - const bankManager = await buildBankVatRoot( - undefined, - undefined, - zone.mapStore('bankManager'), - ).makeBankManager(makeFakeBankBridge(zone)); + const { bankManager, pourPayment } = await makeFakeBankManagerKit(); await E(bankManager).addAsset('uist', 'IST', 'Inter Stable Token', issuerKit); @@ -70,7 +66,7 @@ test('start', async t => { ); const bank = await E(bankManager).getBankForAddress( - 'agoric1fakeBridgeAddress', + LOCALCHAIN_DEFAULT_ADDRESS, ); const istPurse = await E(bank).getPurse(issuerKit.brand); @@ -81,7 +77,7 @@ test('start', async t => { const userSeat = await E(zoe).offer( inv, { give: { Stable: ten } }, - { Stable: stable.mint.mintPayment(ten) }, + { Stable: await pourPayment(ten) }, { staked: ten, validator: { diff --git a/packages/orchestration/test/examples/unbondExample.test.ts b/packages/orchestration/test/examples/unbondExample.test.ts index eebe0bcb930..6af00453834 100644 --- a/packages/orchestration/test/examples/unbondExample.test.ts +++ b/packages/orchestration/test/examples/unbondExample.test.ts @@ -9,6 +9,7 @@ import { withAmountUtils } from '@agoric/zoe/tools/test-utils.js'; import { makeHeapZone } from '@agoric/zone'; import { E } from '@endo/far'; import path from 'path'; +import { makeFakeBankManagerKit } from '@agoric/vats/tools/bank-utils.js'; import { makeFakeLocalchainBridge } from '../supports.js'; const dirname = path.dirname(new URL(import.meta.url).pathname); @@ -26,11 +27,7 @@ test('start', async t => { const zone = makeHeapZone(); const { makeLocalChain } = prepareLocalChainTools(zone.subZone('localchain')); - const bankManager = await buildBankVatRoot( - undefined, - undefined, - zone.mapStore('bankManager'), - ).makeBankManager(); + const { bankManager } = await makeFakeBankManagerKit(); await E(bankManager).addAsset('uist', 'IST', 'Inter Stable Token', issuerKit); diff --git a/packages/smart-wallet/test/addAsset.test.js b/packages/smart-wallet/test/addAsset.test.js index 0ba36801ba4..48018096a94 100644 --- a/packages/smart-wallet/test/addAsset.test.js +++ b/packages/smart-wallet/test/addAsset.test.js @@ -2,14 +2,14 @@ /* eslint @typescript-eslint/no-floating-promises: "warn" */ import { test as anyTest } from '@agoric/zoe/tools/prepare-test-env-ava.js'; import { E, Far } from '@endo/far'; -import { buildRootObject as buildBankVatRoot } from '@agoric/vats/src/vat-bank.js'; import { AmountMath, makeIssuerKit } from '@agoric/ertp'; import { eventLoopIteration } from '@agoric/internal/src/testing-utils.js'; -import { makeCopyBag, makeScalarMapStore } from '@agoric/store'; +import { makeCopyBag } from '@agoric/store'; import { makePromiseKit } from '@endo/promise-kit'; import bundleSource from '@endo/bundle-source'; import { makeMarshal } from '@endo/marshal'; import { resolve as importMetaResolve } from 'import-meta-resolve'; +import { makeFakeBankManagerKit } from '@agoric/vats/tools/bank-utils.js'; import { makeDefaultTestContext } from './contexts.js'; import { ActionType, headValue, makeMockTestSpace } from './supports.js'; import { makeImportContext } from '../src/marshal-contexts.js'; @@ -24,11 +24,7 @@ const test = anyTest; test.before(async t => { const withBankManager = async () => { - const noBridge = undefined; - const baggage = makeScalarMapStore('baggage'); - const bankManager = E( - buildBankVatRoot(undefined, undefined, baggage), - ).makeBankManager(noBridge); + const { bankManager } = await makeFakeBankManagerKit(); const noop = () => {}; const space0 = await makeMockTestSpace(noop); space0.produce.bankManager.reset(); diff --git a/packages/smart-wallet/test/supports.js b/packages/smart-wallet/test/supports.js index 007c2ac39cf..109d93e5d37 100644 --- a/packages/smart-wallet/test/supports.js +++ b/packages/smart-wallet/test/supports.js @@ -13,7 +13,7 @@ import { import { setupClientManager } from '@agoric/vats/src/core/chain-behaviors.js'; import { buildRootObject as boardRoot } from '@agoric/vats/src/vat-board.js'; import { buildRootObject as mintsRoot } from '@agoric/vats/src/vat-mints.js'; -import { makeFakeBankKit } from '@agoric/vats/tools/bank-utils.js'; +import { makeFakeBankManagerKit } from '@agoric/vats/tools/bank-utils.js'; import { makeRatio } from '@agoric/zoe/src/contractSupport/ratio.js'; import { setUpZoeForTest } from '@agoric/zoe/tools/setup-zoe.js'; import { E, Far } from '@endo/far'; @@ -136,18 +136,9 @@ export const makeMockTestSpace = async log => { produce.testFirstAnchorKit.resolve(makeIssuerKit('AUSD', 'nat')); - const fakeBankKit = makeFakeBankKit([]); - - produce.bankManager.resolve( - Promise.resolve( - Far( - 'mockBankManager', - /** @type {any} */ ({ - getBankForAddress: _a => fakeBankKit.bank, - }), - ), - ), - ); + const { bankManager } = await makeFakeBankManagerKit(); + + produce.bankManager.resolve(bankManager); await Promise.all([ // @ts-expect-error diff --git a/packages/smart-wallet/test/swingsetTests/upgradeWalletFactory/bootstrap-walletFactory-service-upgrade.js b/packages/smart-wallet/test/swingsetTests/upgradeWalletFactory/bootstrap-walletFactory-service-upgrade.js index 127a465cdbe..9a556dd926e 100644 --- a/packages/smart-wallet/test/swingsetTests/upgradeWalletFactory/bootstrap-walletFactory-service-upgrade.js +++ b/packages/smart-wallet/test/swingsetTests/upgradeWalletFactory/bootstrap-walletFactory-service-upgrade.js @@ -5,8 +5,8 @@ import { makeTracer } from '@agoric/internal'; import { makeFakeStorageKit } from '@agoric/internal/src/storage-test-utils.js'; import { makeNameHubKit } from '@agoric/vats'; import { makeAgoricNamesAccess } from '@agoric/vats/src/core/utils.js'; +import { makeFakeBankManagerKit } from '@agoric/vats/tools/bank-utils.js'; import { makeFakeBoard } from '@agoric/vats/tools/board-utils.js'; -import { makeFakeBankKit } from '@agoric/vats/tools/bank-utils.js'; import { E } from '@endo/eventual-send'; import { Far } from '@endo/marshal'; import { makePromiseKit } from '@endo/promise-kit'; @@ -20,7 +20,7 @@ const walletAddr = 'agoric1whatever'; const moolaKit = makeIssuerKit('moola'); export const buildRootObject = async () => { - const { bank, addAsset } = makeFakeBankKit([]); + const { bankManager } = await makeFakeBankManagerKit(); const storageKit = makeFakeStorageKit('walletFactoryUpgradeTest'); const statusPath = `walletFactoryUpgradeTest.${walletAddr}`; const currentPath = `${statusPath}.current`; @@ -40,6 +40,8 @@ export const buildRootObject = async () => { /** @type {import('../../../src/smartWallet.js').SmartWallet} */ let wallet; + const bank = await E(bankManager).getBankForAddress(walletAddr); + // for startInstance /** @type {Installation} */ let installation; @@ -104,7 +106,7 @@ export const buildRootObject = async () => { ).storagePath; currentStoragePath === currentPath || Fail`bad storage path`; - addAsset('umoola', 'moola', 'moola', moolaKit); + await E(bankManager).addAsset('umoola', 'moola', 'moola', moolaKit); const depositFacet = E(wallet).getDepositFacet(); const payment = moolaKit.mint.mintPayment( AmountMath.make(moolaKit.brand, 100n), diff --git a/packages/vats/src/vat-bank.js b/packages/vats/src/vat-bank.js index 489df8bb832..55d2771ea1c 100644 --- a/packages/vats/src/vat-bank.js +++ b/packages/vats/src/vat-bank.js @@ -206,6 +206,10 @@ const prepareBankChannelHandler = zone => try { updater.update(value, nonce); } catch (e) { + // ??? Is this an invariant that should complain louder? + + // NB: this failure does not propagate. The update() method is + // responsible for propagating the errow without side-effects. console.error('Error updating balance', update, e); } } diff --git a/packages/vats/test/localchain.test.js b/packages/vats/test/localchain.test.js index c8542ad8da7..4253b72e9d5 100644 --- a/packages/vats/test/localchain.test.js +++ b/packages/vats/test/localchain.test.js @@ -1,23 +1,26 @@ // @ts-check import { test as anyTest } from '@agoric/swingset-vat/tools/prepare-test-env-ava.js'; +import { NonNullish } from '@agoric/assert'; import { AmountMath, AssetKind, makeIssuerKit } from '@agoric/ertp'; import { reincarnate } from '@agoric/swingset-liveslots/tools/setup-vat-data.js'; import { withAmountUtils } from '@agoric/zoe/tools/test-utils.js'; import { makeDurableZone } from '@agoric/zone/durable.js'; import { E } from '@endo/far'; import { getInterfaceOf } from '@endo/marshal'; -import { M } from '@endo/patterns'; import { prepareLocalChainTools } from '../src/localchain.js'; -import { buildRootObject as buildBankVatRoot } from '../src/vat-bank.js'; -import { makeFakeLocalchainBridge } from '../tools/fake-bridge.js'; +import { makeFakeBankManagerKit } from '../tools/bank-utils.js'; +import { + LOCALCHAIN_DEFAULT_ADDRESS, + makeFakeLocalchainBridge, +} from '../tools/fake-bridge.js'; /** * @import {LocalChainAccount, LocalChainPowers} from '../src/localchain.js'; * @import {BridgeHandler, ScopedBridgeManager} from '../src/types.js'; */ -/** @type {import('ava').TestFn>} */ +/** @type {import('ava').TestFn>>} */ const test = anyTest; const { fakeVomKit } = reincarnate({ relaxDurabilityRules: false }); @@ -28,20 +31,20 @@ const provideBaggage = key => { }; const makeTestContext = async _t => { + const issuerKits = ['BLD', 'BEAN'].map(x => + makeIssuerKit(x, AssetKind.NAT, harden({ decimalPlaces: 6 })), + ); + const [bld, bean] = issuerKits.map(withAmountUtils); + const localchainBridge = makeFakeLocalchainBridge( makeDurableZone(provideBaggage('localchain')), ); - const makeBankManager = () => { - const zone = makeDurableZone(provideBaggage('bank')); - return buildBankVatRoot( - undefined, - undefined, - zone.mapStore('bankManager'), - ).makeBankManager(); - }; - - const bankManager = await makeBankManager(); + const { bankManager, pourPayment } = await makeFakeBankManagerKit({ + balances: { + // agoric1fakeBridgeAddress: { ubld: bld.units(100).value }, + }, + }); /** @param {LocalChainPowers} powers */ const makeLocalChain = async powers => { @@ -55,36 +58,34 @@ const makeTestContext = async _t => { }); return { + bld, + bean, bankManager, + issuerKits, localchain, + pourPayment, }; }; -test.beforeEach(t => { - t.context = makeTestContext(t); +test.beforeEach(async t => { + t.context = await makeTestContext(t); }); test('localchain - deposit and withdraw', async t => { - const issuerKits = ['BLD', 'BEAN'].map(x => - makeIssuerKit(x, AssetKind.NAT, harden({ decimalPlaces: 6 })), - ); - const [bld, bean] = issuerKits.map(withAmountUtils); + const { bld, bean, pourPayment } = t.context; const boot = async () => { const { bankManager } = await t.context; await t.notThrowsAsync( - E(bankManager).addAsset('ubld', 'BLD', 'Staking Token', issuerKits[0]), + E(bankManager).addAsset('ubld', 'BLD', 'Staking Token', bld.issuerKit), ); }; await boot(); const makeContract = async () => { - const { localchain } = await t.context; + const { localchain } = t.context; /** @type {LocalChainAccount | undefined} */ let contractsLca; - const contractsBldPurse = bld.issuer.makeEmptyPurse(); - // contract starts with 100 BLD in its Purse - contractsBldPurse.deposit(bld.mint.mintPayment(bld.make(100_000_000n))); return { makeAccount: async () => { @@ -92,54 +93,63 @@ test('localchain - deposit and withdraw', async t => { t.is(getInterfaceOf(lca), 'Alleged: LocalChainAccount'); const address = await E(lca).getAddress(); - t.is(address, 'agoric1fakeLCAAddress'); + t.is(address, LOCALCHAIN_DEFAULT_ADDRESS); contractsLca = lca; }, deposit: async () => { - if (!contractsLca) throw Error('LCA not found.'); - const fiftyBldAmt = bld.make(50_000_000n); + assert(contractsLca, 'first makeAccount'); + t.deepEqual( + await E(contractsLca).getBalance(bld.brand), + bld.makeEmpty(), + ); + + const fiftyBldAmt = bld.units(50); const res = await E(contractsLca).deposit( - contractsBldPurse.withdraw(fiftyBldAmt), + await pourPayment(fiftyBldAmt), ); t.true(AmountMath.isEqual(res, fiftyBldAmt)); - const payment2 = contractsBldPurse.withdraw(fiftyBldAmt); - await t.throwsAsync( - () => - // @ts-expect-error LCA is possibly undefined - E(contractsLca).deposit(payment2, { - brand: M.remotable('Brand'), - value: M.record(), - }), - { - message: /amount(.+) Must be a copyRecord/, - }, + const payment2 = await pourPayment(fiftyBldAmt); + // TODO check optAmountShape after https://github.com/Agoric/agoric-sdk/issues/9407 + // await t.throwsAsync( + // () => + // E(NonNullish(contractsLca)).deposit(payment2, { + // brand: bld.brand, + // value: M.record(), + // }), + // { + // message: /amount(.+) Must be a copyRecord/, + // }, + // ); + await E(contractsLca).deposit(payment2); + t.deepEqual( + await E(contractsLca).getBalance(bld.brand), + bld.units(100), ); - await E(contractsLca).deposit(payment2, { - brand: M.remotable('Brand'), - value: M.nat(), - }); }, withdraw: async () => { - if (!contractsLca) throw Error('LCA not found.'); - const oneHundredBldAmt = bld.make(100_000_000n); - const oneHundredBeanAmt = bean.make(100_000_000n); + assert(contractsLca, 'first makeAccount'); + const oneHundredBldAmt = bld.units(100); + const oneHundredBeanAmt = bean.units(100); + t.deepEqual( + await E(contractsLca).getBalance(bld.brand), + bld.units(100), + ); const payment = await E(contractsLca).withdraw(oneHundredBldAmt); - // @ts-expect-error Argument of type 'Payment' is not assignable to parameter of type 'ERef>'. + t.deepEqual(await E(contractsLca).getBalance(bld.brand), bld.units(0)); const paymentAmount = await E(bld.issuer).getAmountOf(payment); t.true(AmountMath.isEqual(paymentAmount, oneHundredBldAmt)); await t.throwsAsync( - // @ts-expect-error LCA is possibly undefined - () => E(contractsLca).withdraw(oneHundredBldAmt), + () => E(NonNullish(contractsLca)).withdraw(oneHundredBldAmt), + // fake bank is has different error messages than production + ); + + await t.throwsAsync( + () => E(NonNullish(contractsLca)).withdraw(oneHundredBeanAmt), { - message: /Withdrawal (.+) failed (.+) purse only contained/, + message: /not found in collection "brandToAssetRecord"/, }, ); - - // @ts-expect-error LCA is possibly undefined - await t.throwsAsync(() => E(contractsLca).withdraw(oneHundredBeanAmt), { - message: /not found in collection "brandToAssetRecord"/, - }); }, }; }; diff --git a/packages/vats/tools/bank-utils.js b/packages/vats/tools/bank-utils.js index 57b1d133417..eff6af2fbde 100644 --- a/packages/vats/tools/bank-utils.js +++ b/packages/vats/tools/bank-utils.js @@ -1,9 +1,13 @@ import { makeSubscriptionKit } from '@agoric/notifier'; -import { makeScalarMapStore } from '@agoric/vat-data'; +import { makeScalarBigMapStore, makeScalarMapStore } from '@agoric/vat-data'; +import { makeDurableZone } from '@agoric/zone/durable.js'; import { E } from '@endo/far'; import { Far } from '@endo/marshal'; +import { buildRootObject as buildBankVatRoot } from '../src/vat-bank.js'; +import { FAUCET_ADDRESS, makeFakeBankBridge } from './fake-bridge.js'; /** + * @deprecated use makeFakeBankManagerKit * @param {Pick, 'brand' | 'issuer'>[]} issuerKits */ export const makeFakeBankKit = issuerKits => { @@ -57,3 +61,32 @@ export const makeFakeBankKit = issuerKits => { return { addAsset, assetPublication: publication, bank }; }; + +/** + * @param {object} [opts] + * @param {import('./fake-bridge.js').Balances} opts.balances initial balances + */ +export const makeFakeBankManagerKit = async opts => { + const baggage = makeScalarBigMapStore('baggage'); + const zone = makeDurableZone(baggage); + + const bankManager = await buildBankVatRoot( + undefined, + undefined, + zone.mapStore('bankManager'), + ).makeBankManager(makeFakeBankBridge(zone, opts)); + + /** + * Get a payment from the faucet + * + * @param {Amount<'nat'>} amount + * @returns {Promise>} + */ + const pourPayment = async amount => { + const faucet = await E(bankManager).getBankForAddress(FAUCET_ADDRESS); + const purse = await E(faucet).getPurse(amount.brand); + return E(purse).withdraw(amount); + }; + + return { bankManager, pourPayment }; +}; diff --git a/packages/vats/tools/fake-bridge.js b/packages/vats/tools/fake-bridge.js index 3801d7d4fc5..5117d6e7579 100644 --- a/packages/vats/tools/fake-bridge.js +++ b/packages/vats/tools/fake-bridge.js @@ -1,6 +1,5 @@ -import { Fail } from '@agoric/assert'; +import { assert, Fail } from '@agoric/assert'; import { makeTracer, VBankAccount } from '@agoric/internal'; -import assert from 'node:assert/strict'; import { E } from '@endo/far'; import { makeWhen } from '@agoric/vow/src/when.js'; import { Nat } from '@endo/nat'; @@ -10,7 +9,7 @@ import { Nat } from '@endo/nat'; * @import {BridgeHandler, ScopedBridgeManager} from '../src/types.js'; * @import {Remote} from '@agoric/vow'; */ -const trace = makeTracer('FakeBridge', false); +const trace = makeTracer('FakeBridge'); const when = makeWhen(); @@ -28,6 +27,7 @@ const INFINITE_AMOUNT = 99999999999n; * @param {object} opts * @param {Balances} opts.balances initial balances * @returns {ScopedBridgeManager<'bank'>} + * @see {makeFakeBankManagerKit} and its `pourPayment` for a helper */ export const makeFakeBankBridge = (zone, opts = { balances: {} }) => { const { balances } = opts; @@ -102,6 +102,7 @@ export const makeFakeBankBridge = (zone, opts = { balances: {} }) => { }, fromBridge: async obj => { if (!hndlr) throw Error('no handler!'); + trace('fromBridge', obj); return when(E(hndlr).fromBridge(obj)); }, initHandler: h => { @@ -110,7 +111,6 @@ export const makeFakeBankBridge = (zone, opts = { balances: {} }) => { }, setHandler: h => { if (!hndlr) throw Error('must init first'); - trace('fromBridge', obj); hndlr = h; }, }); @@ -151,6 +151,8 @@ export const makeFakeIbcBridge = (zone, onToBridge) => { }); }; +export const LOCALCHAIN_DEFAULT_ADDRESS = 'agoric1fakeLCAAddress'; + /** * @param {import('@agoric/zone').Zone} zone * @param {(obj) => void} [onToBridge] @@ -168,7 +170,7 @@ export const makeFakeLocalchainBridge = (zone, onToBridge = () => {}) => { trace('toBridge', type, method, params); switch (type) { case 'VLOCALCHAIN_ALLOCATE_ADDRESS': - return 'agoric1fakeLCAAddress'; + return LOCALCHAIN_DEFAULT_ADDRESS; case 'VLOCALCHAIN_EXECUTE_TX': { lcaExecuteTxSequence += 1; return obj.messages.map(message => {