From 2916c8f43b23a6c4d38796dd7135e9d712d12f8c Mon Sep 17 00:00:00 2001 From: Turadg Aleahmad Date: Fri, 6 Dec 2024 17:37:00 -0800 Subject: [PATCH] feat: publish CctpTxEvidence --- packages/fast-usdc/src/exos/status-manager.js | 16 +++++++++++++++- packages/fast-usdc/test/exos/advancer.test.ts | 19 ++++++++++--------- 2 files changed, 25 insertions(+), 10 deletions(-) diff --git a/packages/fast-usdc/src/exos/status-manager.js b/packages/fast-usdc/src/exos/status-manager.js index dbffbd07946..89afafef0bd 100644 --- a/packages/fast-usdc/src/exos/status-manager.js +++ b/packages/fast-usdc/src/exos/status-manager.js @@ -2,7 +2,7 @@ import { M } from '@endo/patterns'; import { Fail, makeError, q } from '@endo/errors'; import { appendToStoredArray } from '@agoric/store/src/stores/store-utils.js'; import { E } from '@endo/eventual-send'; -import { makeTracer } from '@agoric/internal'; +import { makeTracer, pureDataMarshaller } from '@agoric/internal'; import { CctpTxEvidenceShape, EvmHashShape, @@ -83,6 +83,19 @@ export const prepareStatusManager = ( keyShape: M.string(), }); + /** + * @param {CctpTxEvidence['txHash']} hash + * @param {CctpTxEvidence} evidence + */ + const publishEvidence = (hash, evidence) => { + const txNode = E(transactionsNode).makeChildNode(hash); + // Don't await, just writing to vstorage. + void E(txNode).setValue( + // @ts-expect-error XXX CopyRecordI expects an index signature + JSON.stringify(pureDataMarshaller.toCapData(evidence)), + ); + }; + /** * @param {CctpTxEvidence['txHash']} hash * @param {TxStatus} status @@ -114,6 +127,7 @@ export const prepareStatusManager = ( pendingTxKeyOf(evidence), harden({ ...evidence, status }), ); + publishEvidence(txHash, evidence); publishStatus(txHash, status); }; diff --git a/packages/fast-usdc/test/exos/advancer.test.ts b/packages/fast-usdc/test/exos/advancer.test.ts index 4e7780bc2c3..0f1be85ee9f 100644 --- a/packages/fast-usdc/test/exos/advancer.test.ts +++ b/packages/fast-usdc/test/exos/advancer.test.ts @@ -1,29 +1,30 @@ -import type { TestFn } from 'ava'; import { test as anyTest } from '@agoric/zoe/tools/prepare-test-env-ava.js'; + +import { + decodeAddressHook, + encodeAddressHook, +} from '@agoric/cosmic-proto/address-hooks.js'; +import type { NatAmount } from '@agoric/ertp'; import { eventLoopIteration } from '@agoric/internal/src/testing-utils.js'; import { denomHash } from '@agoric/orchestration'; import fetchedChainInfo from '@agoric/orchestration/src/fetched-chain-info.js'; -import { Far } from '@endo/pass-style'; -import type { NatAmount } from '@agoric/ertp'; import { type ZoeTools } from '@agoric/orchestration/src/utils/zoe-tools.js'; import { q } from '@endo/errors'; -import { - decodeAddressHook, - encodeAddressHook, -} from '@agoric/cosmic-proto/address-hooks.js'; +import { Far } from '@endo/pass-style'; +import type { TestFn } from 'ava'; import { PendingTxStatus } from '../../src/constants.js'; import { prepareAdvancer } from '../../src/exos/advancer.js'; import type { SettlerKit } from '../../src/exos/settler.js'; import { prepareStatusManager } from '../../src/exos/status-manager.js'; +import type { LiquidityPoolKit } from '../../src/types.js'; import { makeFeeTools } from '../../src/utils/fees.js'; -import { commonSetup } from '../supports.js'; import { MockCctpTxEvidences, intermediateRecipient } from '../fixtures.js'; import { makeTestFeeConfig, makeTestLogger, prepareMockOrchAccounts, } from '../mocks.js'; -import type { LiquidityPoolKit } from '../../src/types.js'; +import { commonSetup } from '../supports.js'; const LOCAL_DENOM = `ibc/${denomHash({ denom: 'uusdc',