diff --git a/packages/fast-usdc/src/constants.js b/packages/fast-usdc/src/constants.js index 1bda5e82b53..a03a8cf8827 100644 --- a/packages/fast-usdc/src/constants.js +++ b/packages/fast-usdc/src/constants.js @@ -4,6 +4,8 @@ * @enum {(typeof TxStatus)[keyof typeof TxStatus]} */ export const TxStatus = /** @type {const} */ ({ + /** tx was observed but not advanced */ + Observed: 'OBSERVED', /** IBC transfer is initiated */ Advancing: 'ADVANCING', /** IBC transfer is complete */ @@ -34,6 +36,8 @@ export const TerminalTxStatus = { * @enum {(typeof PendingTxStatus)[keyof typeof PendingTxStatus]} */ export const PendingTxStatus = /** @type {const} */ ({ + /** tx was observed but not advanced */ + Observed: 'OBSERVED', /** IBC transfer is initiated */ Advancing: 'ADVANCING', /** IBC transfer failed (timed out) */ diff --git a/packages/fast-usdc/test/exos/settler.test.ts b/packages/fast-usdc/test/exos/settler.test.ts index a4350643701..efb28c45d44 100644 --- a/packages/fast-usdc/test/exos/settler.test.ts +++ b/packages/fast-usdc/test/exos/settler.test.ts @@ -295,7 +295,7 @@ test('happy path: disburse to LPs; StatusManager removes tx', async t => { await eventLoopIteration(); const { storage } = t.context; t.deepEqual(storage.getDeserialized(`fun.txns.${cctpTxEvidence.txHash}`), [ - { evidence: cctpTxEvidence, status: undefined }, + { evidence: cctpTxEvidence, status: 'OBSERVED' }, { status: 'ADVANCING' }, { status: 'ADVANCED' }, { split: expectedSplit, status: 'DISBURSED' }, @@ -363,7 +363,7 @@ test('slow path: forward to EUD; remove pending tx', async t => { accounts.settlement.transferVResolver.resolve(undefined); await eventLoopIteration(); t.deepEqual(storage.getDeserialized(`fun.txns.${cctpTxEvidence.txHash}`), [ - { evidence: cctpTxEvidence, status: undefined }, + { evidence: cctpTxEvidence, status: 'OBSERVED' }, { risksIdentified: ['TOO_LARGE_AMOUNT'], status: 'ADVANCE_SKIPPED' }, { status: 'FORWARDED' }, ]); @@ -439,7 +439,7 @@ test('skip advance: forward to EUD; remove pending tx', async t => { ); const { storage } = t.context; t.deepEqual(storage.getDeserialized(`fun.txns.${cctpTxEvidence.txHash}`), [ - { evidence: cctpTxEvidence, status: undefined }, + { evidence: cctpTxEvidence, status: 'OBSERVED' }, { status: 'ADVANCE_SKIPPED', risksIdentified: ['TOO_LARGE_AMOUNT'] }, { status: 'FORWARDED' }, ]); @@ -514,7 +514,7 @@ test('Settlement for unknown transaction (minted early)', async t => { accounts.settlement.transferVResolver.resolve(undefined); await eventLoopIteration(); t.deepEqual(storage.getDeserialized(`fun.txns.${evidence.txHash}`), [ - { evidence, status: undefined }, + { evidence, status: 'OBSERVED' }, { status: 'FORWARDED' }, ]); }); @@ -681,7 +681,7 @@ test('Settlement for Advancing transaction (advance succeeds)', async t => { simulate.finishAdvance(cctpTxEvidence, true); await eventLoopIteration(); t.deepEqual(storage.getDeserialized(`fun.txns.${cctpTxEvidence.txHash}`), [ - { evidence: cctpTxEvidence, status: undefined }, + { evidence: cctpTxEvidence, status: 'OBSERVED' }, { status: 'ADVANCING' }, { status: 'ADVANCED' }, { split: expectedSplit, status: 'DISBURSED' }, @@ -745,7 +745,7 @@ test('Settlement for Advancing transaction (advance fails)', async t => { accounts.settlement.transferVResolver.resolve(undefined); await eventLoopIteration(); t.deepEqual(storage.getDeserialized(`fun.txns.${cctpTxEvidence.txHash}`), [ - { evidence: cctpTxEvidence, status: undefined }, + { evidence: cctpTxEvidence, status: 'OBSERVED' }, { status: 'ADVANCING' }, { status: 'ADVANCE_FAILED' }, { status: 'FORWARDED' }, @@ -795,7 +795,7 @@ test('slow path, and forward fails (terminal state)', async t => { ]); t.deepEqual(storage.getDeserialized(`fun.txns.${evidence.txHash}`), [ - { evidence, status: undefined }, + { evidence, status: 'OBSERVED' }, { status: 'FORWARD_FAILED' }, ]); }); diff --git a/packages/fast-usdc/test/exos/status-manager.test.ts b/packages/fast-usdc/test/exos/status-manager.test.ts index 3ae3737be1b..0c7f7828a63 100644 --- a/packages/fast-usdc/test/exos/status-manager.test.ts +++ b/packages/fast-usdc/test/exos/status-manager.test.ts @@ -64,7 +64,7 @@ test('ADVANCED transactions are published to vstorage', async t => { const { storage } = t.context; t.deepEqual(storage.getDeserialized(`fun.txns.${evidence.txHash}`), [ - { evidence, status: undefined }, + { evidence, status: 'OBSERVED' }, { status: 'ADVANCING' }, ]); }); @@ -92,7 +92,7 @@ test('ADVANCE_SKIPPED transactions are published to vstorage', async t => { const { storage } = t.context; t.deepEqual(storage.getDeserialized(`fun.txns.${evidence.txHash}`), [ - { evidence, status: undefined }, + { evidence, status: 'OBSERVED' }, { status: 'ADVANCE_SKIPPED', risksIdentified: ['RISK1'] }, ]); }); @@ -213,7 +213,7 @@ test('advanceOutcome transitions to ADVANCED and ADVANCE_FAILED', async t => { ]); await eventLoopIteration(); t.deepEqual(storage.getDeserialized(`fun.txns.${e1.txHash}`), [ - { evidence: e1, status: undefined }, + { evidence: e1, status: 'OBSERVED' }, { status: 'ADVANCING' }, { status: 'ADVANCED' }, ]); @@ -227,7 +227,7 @@ test('advanceOutcome transitions to ADVANCED and ADVANCE_FAILED', async t => { ]); await eventLoopIteration(); t.deepEqual(storage.getDeserialized(`fun.txns.${e2.txHash}`), [ - { evidence: e2, status: undefined }, + { evidence: e2, status: 'OBSERVED' }, { status: 'ADVANCING' }, { status: 'ADVANCE_FAILED' }, ]); diff --git a/packages/fast-usdc/test/fast-usdc.contract.test.ts b/packages/fast-usdc/test/fast-usdc.contract.test.ts index d9ec8e1e000..802689a09fd 100644 --- a/packages/fast-usdc/test/fast-usdc.contract.test.ts +++ b/packages/fast-usdc/test/fast-usdc.contract.test.ts @@ -632,7 +632,7 @@ test.serial('STORY01: advancing happy path for 100 USDC', async t => { const sent1 = await cust1.sendFast(t, 108_000_000n, 'osmo1234advanceHappy'); await transmitTransferAck(); // ack IBC transfer for advance const expectedTransitions = [ - { evidence: sent1, status: undefined }, + { evidence: sent1, status: 'OBSERVED' }, { status: 'ADVANCING' }, { status: 'ADVANCED' }, ]; @@ -841,7 +841,7 @@ test.serial('withdraw all liquidity while ADVANCING', async t => { await mint(sent); await utils.transmitTransferAck(); t.like(storage.getDeserialized(`fun.txns.${sent.txHash}`), [ - { evidence: sent, status: undefined }, + { evidence: sent, status: 'OBSERVED' }, { status: 'ADVANCING' }, { status: 'ADVANCED' }, { status: 'DISBURSED' }, @@ -1025,7 +1025,7 @@ test.serial('Settlement for unknown transaction (operator down)', async t => { await eventLoopIteration(); t.deepEqual(storage.getDeserialized(`fun.txns.${sent.txHash}`), [ - { evidence: sent, status: undefined }, + { evidence: sent, status: 'OBSERVED' }, { status: 'FORWARDED' }, ]); }); @@ -1064,7 +1064,7 @@ test.serial('mint received while ADVANCING', async t => { const split = makeFeeTools(feeConfig).calculateSplit(usdc.make(5_000_000n)); t.deepEqual(storage.getDeserialized(`fun.txns.${sent.txHash}`), [ - { evidence: sent, status: undefined }, + { evidence: sent, status: 'OBSERVED' }, { status: 'ADVANCING' }, { status: 'ADVANCED' }, { split, status: 'DISBURSED' },