diff --git a/packages/portfolio-contract/src/portfolio.flows.ts b/packages/portfolio-contract/src/portfolio.flows.ts index 1d8d4b20cee..51fa8b2c681 100644 --- a/packages/portfolio-contract/src/portfolio.flows.ts +++ b/packages/portfolio-contract/src/portfolio.flows.ts @@ -167,6 +167,25 @@ const range = (n: number) => Array.from(Array(n).keys()); const fullOrder = (length: number): Job['order'] => range(length - 1).map(lo => [lo + 1, [lo]]); +/** + * Extract a linked list of FlowErrors from an array of results + */ +export const makeErrorList = ( + results: PromiseSettledResult[], + moves: Pick[], +): FlowErrors | undefined => + [...results].reverse().reduce((next, r, ix) => { + if (r.status !== 'rejected') return next; + const step = moves.length - ix; + const errs: FlowErrors = { + step, + how: moves[step - 1].how, + error: errmsg(r.reason), + next, + }; + return errs; + }, undefined); + /** * **Failure Handling**: Logs failures and publishes status without attempting * to unwind already-completed steps. Operators must resolve any partial @@ -220,18 +239,11 @@ const trackFlow = async ( }; const job: Job = { taskQty: moves.length, order }; - const results = await runJob(job, runTask, traceFlow); + const results = await runJob(job, runTask, traceFlow, (ix, reason) => + Error(`predecessor ${ix + 1} failed`, { cause: reason }), + ); if (results.some(r => r.status === 'rejected')) { - const reasons = results.reduce((next, r, ix) => { - if (r.status !== 'rejected') return next; - const errs: FlowErrors = { - step: ix + 1, - how: moves[ix].how, - error: errmsg(r.reason), - next, - }; - return errs; - }, undefined); + const reasons = makeErrorList(results, moves); assert(reasons); // guaranteed by results.some(...) above reporter.publishFlowStatus(flowId, { state: 'fail', diff --git a/packages/portfolio-contract/src/pos-gmp.flows.ts b/packages/portfolio-contract/src/pos-gmp.flows.ts index 89d658422b6..177177f9377 100644 --- a/packages/portfolio-contract/src/pos-gmp.flows.ts +++ b/packages/portfolio-contract/src/pos-gmp.flows.ts @@ -225,6 +225,13 @@ export const CCTPfromEVM = { } as const satisfies TransportDetail<'CCTP', AxelarChain, 'agoric', EVMContext>; harden(CCTPfromEVM); +/** + * Noble CCTP relayer policy is to not relay very small amounts. + * + * XXX could be configurable for test networks + */ +const CCTP_OUTBOUND_THRESHOLD = 1_000_000n; + export const CCTP = { how: 'CCTP', connections: keys(AxelarChain).map((dest: AxelarChain) => ({ @@ -236,6 +243,8 @@ export const CCTP = { const denomAmount: DenomAmount = { denom: 'uusdc', value: amount.value }; const { chainId, remoteAddress } = dest; traceTransfer('transfer', denomAmount, 'to', remoteAddress); + amount.value >= CCTP_OUTBOUND_THRESHOLD || + Fail`too small to relay: ${q(amount)} below ${CCTP_OUTBOUND_THRESHOLD}`; const destinationAddress: AccountId = `${chainId}:${remoteAddress}`; const { ica } = src; diff --git a/packages/portfolio-contract/src/schedule-order.ts b/packages/portfolio-contract/src/schedule-order.ts index ff18944f4cb..17c879600ba 100644 --- a/packages/portfolio-contract/src/schedule-order.ts +++ b/packages/portfolio-contract/src/schedule-order.ts @@ -84,6 +84,10 @@ export const runJob = async ( job: Job, runTask: (ix: Ix, running: number[]) => Promise, trace: (...args: unknown[]) => void, + makeError = (ix: Ix, reason) => + Error(`predecessor ${ix} failed`, { + cause: reason, + }), ): Promise[]> => { const running = new Map>(); @@ -100,7 +104,7 @@ export const runJob = async ( todo.delete(ix); results[ix] = { status: 'rejected', reason }; - const cascade = Error(`predecessor ${ix} failed`, { cause: reason }); + const cascade = makeError(ix, reason); for (const [candidate, deps] of order.entries()) { if (deps.has(ix)) { failTaskAndAncestors(candidate, cascade); diff --git a/packages/portfolio-contract/test/portfolio.flows.test.ts b/packages/portfolio-contract/test/portfolio.flows.test.ts index 739e1132dae..7842ce2fe67 100644 --- a/packages/portfolio-contract/test/portfolio.flows.test.ts +++ b/packages/portfolio-contract/test/portfolio.flows.test.ts @@ -47,6 +47,7 @@ import { } from '../src/portfolio.exo.ts'; import { executePlan, + makeErrorList, onAgoricTransfer, openPortfolio, provideCosmosAccount, @@ -652,7 +653,7 @@ test( ); test('open portfolio with Aave position', async t => { - const amount = AmountMath.make(USDC, 300n); + const amount = AmountMath.make(USDC, 2_000_000n); const feeAcct = AmountMath.make(BLD, 50n); const detail = { evmGas: 50n }; const feeCall = AmountMath.make(BLD, 100n); @@ -687,7 +688,7 @@ test('open portfolio with Aave position', async t => { { _method: 'transfer', address: { chainId: 'axelar-6' } }, { _method: 'localTransfer', - amounts: { Deposit: { value: 300n } }, + amounts: { Deposit: { value: 2_000_000n } }, }, { _method: 'transfer', address: { chainId: 'noble-5' } }, { _method: 'depositForBurn' }, @@ -710,7 +711,7 @@ test.skip('reject missing fee before committing anything', t => { test('open portfolio with Compound position', async t => { const { give, steps } = await makePortfolioSteps( - { Compound: make(USDC, 300n) }, + { Compound: make(USDC, 2_000_000n) }, { fees: { Compound: { Account: make(BLD, 300n), Call: make(BLD, 100n) } } }, ); const { orch, tapPK, ctx, offer, storage, txResolver } = mocks({}, give); @@ -730,7 +731,7 @@ test('open portfolio with Compound position', async t => { { _method: 'transfer', address: { chainId: 'noble-5' } }, { _method: 'send' }, { _method: 'transfer', address: { chainId: 'axelar-6' } }, - { _method: 'localTransfer', amounts: { Deposit: { value: 300n } } }, + { _method: 'localTransfer', amounts: { Deposit: { value: 2_000_000n } } }, { _method: 'transfer', address: { chainId: 'noble-5' } }, { _method: 'depositForBurn' }, { _method: 'send' }, @@ -935,7 +936,7 @@ test.skip('rebalance handles stepFlow failure correctly', async t => { }); test('claim rewards on Aave position', async t => { - const amount = AmountMath.make(USDC, 300n); + const amount = AmountMath.make(USDC, 2_000_000n); const emptyAmount = AmountMath.make(USDC, 0n); const feeCall = AmountMath.make(BLD, 100n); const { orch, tapPK, ctx, offer, storage, txResolver } = mocks( @@ -990,7 +991,7 @@ test('claim rewards on Aave position', async t => { }); test('open portfolio with Beefy position', async t => { - const amount = AmountMath.make(USDC, 300n); + const amount = AmountMath.make(USDC, 2_000_000n); const feeAcct = AmountMath.make(BLD, 50n); const detail = { evmGas: 50n }; const feeCall = AmountMath.make(BLD, 100n); @@ -1026,7 +1027,7 @@ test('open portfolio with Beefy position', async t => { { _method: 'transfer', address: { chainId: 'axelar-6' } }, { _method: 'localTransfer', - amounts: { Deposit: { value: 300n } }, + amounts: { Deposit: { value: 2_000_000n } }, }, { _method: 'transfer', address: { chainId: 'noble-5' } }, { _method: 'depositForBurn' }, @@ -1047,7 +1048,7 @@ test('open portfolio with Beefy position', async t => { }); test('wayFromSrcToDesc handles +agoric -> @agoric', t => { - const amount = AmountMath.make(USDC, 300n); + const amount = AmountMath.make(USDC, 2_000_000n); const actual = wayFromSrcToDesc({ src: '+agoric', dest: '@agoric', amount }); t.deepEqual(actual, { how: 'send' }); }); @@ -1056,7 +1057,7 @@ test('Engine can move deposits +agoric -> @agoric', async t => { const { orch, ctx, offer, storage } = mocks({}, {}); const { log } = offer; - const amount = AmountMath.make(USDC, 300n); + const amount = AmountMath.make(USDC, 2_000_000n); const kit = await ctx.makePortfolioKit(); await rebalance( @@ -1084,7 +1085,7 @@ test('client can move to deposit LCA', async t => { const { orch, ctx, offer, storage } = mocks({}, {}); const { log } = offer; - const amount = AmountMath.make(USDC, 300n); + const amount = AmountMath.make(USDC, 2_000_000n); const kit = await ctx.makePortfolioKit(); await rebalance( @@ -1167,7 +1168,7 @@ test('handle failure in provideCosmosAccount makeAccount', async t => { test('handle failure in provideEVMAccount sendMakeAccountCall', async t => { const unlucky = make(BLD, 13n); const { give, steps } = await makePortfolioSteps( - { Compound: make(USDC, 300n) }, + { Compound: make(USDC, 2_000_000n) }, { fees: { Compound: { Account: unlucky, Call: make(BLD, 100n) } }, evm: 'Arbitrum', @@ -1229,7 +1230,7 @@ test('handle failure in provideEVMAccount sendMakeAccountCall', async t => { // Recovery attempt - avoid the unlucky 13n fee using same portfolio const { give: giveGood, steps: stepsGood } = await makePortfolioSteps( - { Compound: make(USDC, 300n) }, + { Compound: make(USDC, 2_000_000n) }, { fees: { Compound: { Account: make(BLD, 300n), Call: make(BLD, 100n) } } }, ); const seat2 = makeMockSeat(giveGood, undefined, log); @@ -1290,7 +1291,7 @@ test('withdraw in coordination with planner', async t => { } const webUiDone = (async () => { - const Cash = make(USDC, 300n); + const Cash = make(USDC, 2_000_000n); const wSeat = makeMockSeat({}, { Cash }, offer.log); await executePlan(orch, ctx, wSeat, {}, kit, { type: 'withdraw', @@ -1341,7 +1342,7 @@ test('withdraw in coordination with planner', async t => { }, { _method: 'send', _cap: 'agoric11014' }, { _method: 'transfer' }, // depositForBurn - { _method: 'withdrawToSeat', amounts: { Cash: { value: 300n } } }, + { _method: 'withdrawToSeat', amounts: { Cash: { value: 2_000_000n } } }, { _method: 'exit' }, ]); t.snapshot(log, 'call log'); // see snapshot for remaining arg details @@ -1456,17 +1457,17 @@ test('simple rebalance in coordination with planner', async t => { // Planner provides steps to move from USDN to mixed allocation const steps: MovementDesc[] = [ - { src: 'USDN', dest: '@noble', amount: make(USDC, 5000n) }, + { src: 'USDN', dest: '@noble', amount: make(USDC, 5_000_000n) }, { src: '@noble', dest: '@Arbitrum', - amount: make(USDC, 5000n), + amount: make(USDC, 5_000_000n), fee: make(BLD, 100n), }, { src: '@Arbitrum', dest: 'Aave_Arbitrum', - amount: make(USDC, 5000n), + amount: make(USDC, 5_000_000n), fee: make(BLD, 50n), }, ]; @@ -1751,6 +1752,7 @@ test('A transfers to axelar; B arrives', makeAccountEVMRace, 'txfr'); test('A times out on axelar; B arrives', makeAccountEVMRace, 'txfr', 'txfr'); test('A gets rejected txN; B arrives', makeAccountEVMRace, 'txfr', 'resolve'); test('A finishes before attempt B starts', makeAccountEVMRace, 'resolve'); + test('planner rejects plan and flow fails gracefully', async t => { const { orch, ctx, offer, storage } = mocks({}); @@ -1843,6 +1845,146 @@ test('failed transaction publishes rejectionReason to vstorage', async t => { await t.throwsAsync(() => vowTools.when(result), { message: rejectionReason, }); + await documentStorageSchema(t, storage, docOpts); +}); + +test('asking to relay less than 1 USDC over CCTP is refused by contract', async t => { + const { give, steps } = await makePortfolioSteps( + { Aave: make(USDC, 250_000n) }, + { feeBrand: BLD }, + ); + const { Deposit } = give; + const { orch, tapPK, ctx, offer, storage, txResolver } = mocks( + {}, + { Deposit }, + ); + + const [actual] = await Promise.all([ + openPortfolio(orch, ctx, offer.seat, { flow: steps }), + Promise.all([tapPK.promise, offer.factoryPK.promise]).then(async () => { + await txResolver.drainPending(); + }), + ]); + const { log } = offer; + t.log(log.map(msg => msg._method).join(', ')); + t.like(log, [ + { _method: 'monitorTransfers' }, + { _method: 'transfer' }, + { _method: 'send' }, + { _method: 'transfer' }, + { _method: 'localTransfer' }, + { _method: 'transfer', address: { chainId: 'noble-5' } }, + { _method: 'fail' }, + ]); + t.snapshot(log, 'call log'); + t.is(passStyleOf(actual.invitationMakers), 'remotable'); + await documentStorageSchema(t, storage, docOpts); +}); + +test('makeErrorList collects any number of errors', t => { + { + const fromNoRejections = makeErrorList( + [{ status: 'fulfilled', value: undefined }], + [], + ); + t.deepEqual(fromNoRejections, undefined, 'no errors'); + } + + { + const fromOneRejection = makeErrorList( + [ + { status: 'fulfilled', value: undefined }, + { status: 'rejected', reason: Error('insufficient funds') }, + ], + [{ how: 'IBC' }, { how: 'Aave' }], + ); + t.log('single error', fromOneRejection); + t.deepEqual( + fromOneRejection, + { + error: 'insufficient funds', + how: 'Aave', + next: undefined, + step: 2, + }, + 'single error', + ); + } + + { + const fromSeveralRejections = makeErrorList( + [ + { status: 'fulfilled', value: undefined }, + { status: 'rejected', reason: Error('insufficient funds') }, + { status: 'fulfilled', value: undefined }, + { status: 'rejected', reason: Error('no route') }, + { status: 'fulfilled', value: undefined }, + { status: 'rejected', reason: Error('prereq 4 failed') }, + ], + [ + { how: 'IBC' }, + { how: 'Aave' }, + { how: 'send' }, + { how: 'pidgeon' }, + { how: 'IBC' }, + { how: 'Compound' }, + ], + ); + t.log('several errors', fromSeveralRejections); + t.deepEqual( + fromSeveralRejections, + { + error: 'insufficient funds', + how: 'Aave', + next: { + error: 'no route', + how: 'pidgeon', + next: { + error: 'prereq 4 failed', + how: 'Compound', + next: undefined, + step: 6, + }, + step: 4, + }, + step: 2, + }, + 'several errors', + ); + } +}); + +test('asking to relay less than 1 USDC over CCTP is refused by contract', async t => { + const { give, steps } = await makePortfolioSteps( + { Aave: make(USDC, 250_000n) }, + { feeBrand: BLD }, + ); + const { Deposit } = give; + const { orch, tapPK, ctx, offer, storage, txResolver } = mocks( + {}, + { Deposit }, + ); + + const [actual] = await Promise.all([ + openPortfolio(orch, ctx, offer.seat, { flow: steps }), + Promise.all([tapPK.promise, offer.factoryPK.promise]).then(async () => { + await txResolver.drainPending(); + }), + ]); + const { log } = offer; + t.log(log.map(msg => msg._method).join(', ')); + t.like(log, [ + { _method: 'monitorTransfers' }, + { _method: 'transfer' }, + { _method: 'send' }, + { _method: 'transfer' }, + { _method: 'localTransfer' }, + { _method: 'transfer', address: { chainId: 'noble-5' } }, + { _method: 'fail' }, + ]); + + t.snapshot(log, 'call log'); + t.is(passStyleOf(actual.invitationMakers), 'remotable'); await documentStorageSchema(t, storage, docOpts); }); diff --git a/packages/portfolio-contract/test/snapshots/portfolio.flows.test.ts.md b/packages/portfolio-contract/test/snapshots/portfolio.flows.test.ts.md index 7a213f8eb8a..aa7a6452e46 100644 --- a/packages/portfolio-contract/test/snapshots/portfolio.flows.test.ts.md +++ b/packages/portfolio-contract/test/snapshots/portfolio.flows.test.ts.md @@ -702,7 +702,7 @@ Generated by [AVA](https://avajs.dev). amounts: { Deposit: { brand: Object @Alleged: USDC brand {}, - value: 300n, + value: 2000000n, }, }, localAccount: Object @Alleged: AgoricAccount { @@ -729,7 +729,7 @@ Generated by [AVA](https://avajs.dev). }, amount: { denom: 'ibc/40F1B2458AEDA66431F9D44F48413240B8D28C072463E2BF53655728683583E3', - value: 300n, + value: 2000000n, }, opts: undefined, }, @@ -738,7 +738,7 @@ Generated by [AVA](https://avajs.dev). _method: 'depositForBurn', denomAmount: { denom: 'uusdc', - value: 300n, + value: 2000000n, }, destinationAddress: 'eip155:42161:0x36b64aa4b7023599ec4ea8dc97bfa86f68769c87', }, @@ -767,7 +767,7 @@ Generated by [AVA](https://avajs.dev). value: 100n, }, opts: { - memo: '{"destination_chain":"arbitrum","destination_address":"0x36b64aa4b7023599ec4ea8dc97bfa86f68769c87","payload":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,116,120,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,202,199,255,168,44,15,67,235,176,252,17,252,211,33,35,236,164,102,38,207,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,68,9,94,167,179,0,0,0,0,0,0,0,0,0,0,0,0,135,135,11,202,63,63,214,51,92,63,76,232,57,45,105,53,11,79,164,226,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,135,135,11,202,63,63,214,51,92,63,76,232,57,45,105,53,11,79,164,226,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,132,97,123,160,55,0,0,0,0,0,0,0,0,0,0,0,0,202,199,255,168,44,15,67,235,176,252,17,252,211,33,35,236,164,102,38,207,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,44,0,0,0,0,0,0,0,0,0,0,0,0,54,182,74,164,183,2,53,153,236,78,168,220,151,191,168,111,104,118,156,135,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"type":1,"fee":{"amount":"100","recipient":"axelar1aythygn6z5thymj6tmzfwekzh05ewg3l7d6y89"}}', + memo: '{"destination_chain":"arbitrum","destination_address":"0x36b64aa4b7023599ec4ea8dc97bfa86f68769c87","payload":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,116,120,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,202,199,255,168,44,15,67,235,176,252,17,252,211,33,35,236,164,102,38,207,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,68,9,94,167,179,0,0,0,0,0,0,0,0,0,0,0,0,135,135,11,202,63,63,214,51,92,63,76,232,57,45,105,53,11,79,164,226,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,132,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,135,135,11,202,63,63,214,51,92,63,76,232,57,45,105,53,11,79,164,226,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,132,97,123,160,55,0,0,0,0,0,0,0,0,0,0,0,0,202,199,255,168,44,15,67,235,176,252,17,252,211,33,35,236,164,102,38,207,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,132,128,0,0,0,0,0,0,0,0,0,0,0,0,54,182,74,164,183,2,53,153,236,78,168,220,151,191,168,111,104,118,156,135,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"type":1,"fee":{"amount":"100","recipient":"axelar1aythygn6z5thymj6tmzfwekzh05ewg3l7d6y89"}}', }, }, { @@ -795,7 +795,7 @@ Generated by [AVA](https://avajs.dev). [ 'published.ymax0.pendingTxs.tx1', { - amount: 300n, + amount: 2000000n, destinationAddress: 'eip155:42161:0x36b64aa4b7023599ec4ea8dc97bfa86f68769c87', status: 'success', type: 'CCTP_TO_EVM', @@ -848,7 +848,7 @@ Generated by [AVA](https://avajs.dev). { amount: { brand: Object @Alleged: USDC brand {}, - value: 300n, + value: 2000000n, }, dest: '@agoric', how: 'localTransfer', @@ -857,7 +857,7 @@ Generated by [AVA](https://avajs.dev). { amount: { brand: Object @Alleged: USDC brand {}, - value: 300n, + value: 2000000n, }, dest: '@noble', how: 'IBC to Noble', @@ -866,7 +866,7 @@ Generated by [AVA](https://avajs.dev). { amount: { brand: Object @Alleged: USDC brand {}, - value: 300n, + value: 2000000n, }, dest: '@Arbitrum', how: 'CCTP', @@ -875,7 +875,7 @@ Generated by [AVA](https://avajs.dev). { amount: { brand: Object @Alleged: USDC brand {}, - value: 300n, + value: 2000000n, }, dest: 'Aave_Arbitrum', how: 'Aave', @@ -890,7 +890,7 @@ Generated by [AVA](https://avajs.dev). protocol: 'Aave', totalIn: { brand: Object @Alleged: USDC brand {}, - value: 300n, + value: 2000000n, }, totalOut: { brand: Object @Alleged: USDC brand {}, @@ -958,7 +958,7 @@ Generated by [AVA](https://avajs.dev). amounts: { Deposit: { brand: Object @Alleged: USDC brand {}, - value: 300n, + value: 2000000n, }, }, localAccount: Object @Alleged: AgoricAccount { @@ -985,7 +985,7 @@ Generated by [AVA](https://avajs.dev). }, amount: { denom: 'ibc/40F1B2458AEDA66431F9D44F48413240B8D28C072463E2BF53655728683583E3', - value: 300n, + value: 2000000n, }, opts: undefined, }, @@ -994,7 +994,7 @@ Generated by [AVA](https://avajs.dev). _method: 'depositForBurn', denomAmount: { denom: 'uusdc', - value: 300n, + value: 2000000n, }, destinationAddress: 'eip155:42161:0x36b64aa4b7023599ec4ea8dc97bfa86f68769c87', }, @@ -1023,7 +1023,7 @@ Generated by [AVA](https://avajs.dev). value: 100n, }, opts: { - memo: '{"destination_chain":"arbitrum","destination_address":"0x36b64aa4b7023599ec4ea8dc97bfa86f68769c87","payload":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,116,120,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,202,199,255,168,44,15,67,235,176,252,17,252,211,33,35,236,164,102,38,207,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,68,9,94,167,179,0,0,0,0,0,0,0,0,0,0,0,0,195,214,136,182,103,3,73,125,170,25,33,30,237,255,71,242,83,132,205,195,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,195,214,136,182,103,3,73,125,170,25,33,30,237,255,71,242,83,132,205,195,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,68,242,185,253,184,0,0,0,0,0,0,0,0,0,0,0,0,202,199,255,168,44,15,67,235,176,252,17,252,211,33,35,236,164,102,38,207,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"type":1,"fee":{"amount":"100","recipient":"axelar1aythygn6z5thymj6tmzfwekzh05ewg3l7d6y89"}}', + memo: '{"destination_chain":"arbitrum","destination_address":"0x36b64aa4b7023599ec4ea8dc97bfa86f68769c87","payload":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,116,120,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,202,199,255,168,44,15,67,235,176,252,17,252,211,33,35,236,164,102,38,207,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,68,9,94,167,179,0,0,0,0,0,0,0,0,0,0,0,0,195,214,136,182,103,3,73,125,170,25,33,30,237,255,71,242,83,132,205,195,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,132,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,195,214,136,182,103,3,73,125,170,25,33,30,237,255,71,242,83,132,205,195,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,68,242,185,253,184,0,0,0,0,0,0,0,0,0,0,0,0,202,199,255,168,44,15,67,235,176,252,17,252,211,33,35,236,164,102,38,207,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,132,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"type":1,"fee":{"amount":"100","recipient":"axelar1aythygn6z5thymj6tmzfwekzh05ewg3l7d6y89"}}', }, }, { @@ -1051,7 +1051,7 @@ Generated by [AVA](https://avajs.dev). [ 'published.ymax0.pendingTxs.tx1', { - amount: 300n, + amount: 2000000n, destinationAddress: 'eip155:42161:0x36b64aa4b7023599ec4ea8dc97bfa86f68769c87', status: 'success', type: 'CCTP_TO_EVM', @@ -1104,7 +1104,7 @@ Generated by [AVA](https://avajs.dev). { amount: { brand: Object @Alleged: USDC brand {}, - value: 300n, + value: 2000000n, }, dest: '@agoric', how: 'localTransfer', @@ -1113,7 +1113,7 @@ Generated by [AVA](https://avajs.dev). { amount: { brand: Object @Alleged: USDC brand {}, - value: 300n, + value: 2000000n, }, dest: '@noble', how: 'IBC to Noble', @@ -1122,7 +1122,7 @@ Generated by [AVA](https://avajs.dev). { amount: { brand: Object @Alleged: USDC brand {}, - value: 300n, + value: 2000000n, }, dest: '@Arbitrum', how: 'CCTP', @@ -1131,7 +1131,7 @@ Generated by [AVA](https://avajs.dev). { amount: { brand: Object @Alleged: USDC brand {}, - value: 300n, + value: 2000000n, }, dest: 'Compound_Arbitrum', how: 'Compound', @@ -1146,7 +1146,7 @@ Generated by [AVA](https://avajs.dev). protocol: 'Compound', totalIn: { brand: Object @Alleged: USDC brand {}, - value: 300n, + value: 2000000n, }, totalOut: { brand: Object @Alleged: USDC brand {}, @@ -2455,7 +2455,7 @@ Generated by [AVA](https://avajs.dev). amounts: { Deposit: { brand: Object @Alleged: USDC brand {}, - value: 300n, + value: 2000000n, }, }, localAccount: Object @Alleged: AgoricAccount { @@ -2482,7 +2482,7 @@ Generated by [AVA](https://avajs.dev). }, amount: { denom: 'ibc/40F1B2458AEDA66431F9D44F48413240B8D28C072463E2BF53655728683583E3', - value: 300n, + value: 2000000n, }, opts: undefined, }, @@ -2491,7 +2491,7 @@ Generated by [AVA](https://avajs.dev). _method: 'depositForBurn', denomAmount: { denom: 'uusdc', - value: 300n, + value: 2000000n, }, destinationAddress: 'eip155:43114:0x310ebefc848a3c96e3cee25861cb17c92844d423', }, @@ -2520,7 +2520,7 @@ Generated by [AVA](https://avajs.dev). value: 100n, }, opts: { - memo: '{"destination_chain":"Avalanche","destination_address":"0x310ebefc848a3c96e3cee25861cb17c92844d423","payload":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,116,120,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,202,199,255,168,44,15,67,235,176,252,17,252,211,33,35,236,164,102,38,207,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,68,9,94,167,179,0,0,0,0,0,0,0,0,0,0,0,0,195,214,136,182,103,3,73,125,170,25,33,30,237,255,71,242,83,132,205,195,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,195,214,136,182,103,3,73,125,170,25,33,30,237,255,71,242,83,132,205,195,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,36,182,181,95,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"type":1,"fee":{"amount":"100","recipient":"axelar1aythygn6z5thymj6tmzfwekzh05ewg3l7d6y89"}}', + memo: '{"destination_chain":"Avalanche","destination_address":"0x310ebefc848a3c96e3cee25861cb17c92844d423","payload":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,116,120,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,202,199,255,168,44,15,67,235,176,252,17,252,211,33,35,236,164,102,38,207,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,68,9,94,167,179,0,0,0,0,0,0,0,0,0,0,0,0,195,214,136,182,103,3,73,125,170,25,33,30,237,255,71,242,83,132,205,195,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,132,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,195,214,136,182,103,3,73,125,170,25,33,30,237,255,71,242,83,132,205,195,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,36,182,181,95,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,132,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"type":1,"fee":{"amount":"100","recipient":"axelar1aythygn6z5thymj6tmzfwekzh05ewg3l7d6y89"}}', }, }, { @@ -2548,7 +2548,7 @@ Generated by [AVA](https://avajs.dev). [ 'published.ymax0.pendingTxs.tx1', { - amount: 300n, + amount: 2000000n, destinationAddress: 'eip155:43114:0x310ebefc848a3c96e3cee25861cb17c92844d423', status: 'success', type: 'CCTP_TO_EVM', @@ -2601,7 +2601,7 @@ Generated by [AVA](https://avajs.dev). { amount: { brand: Object @Alleged: USDC brand {}, - value: 300n, + value: 2000000n, }, dest: '@agoric', how: 'localTransfer', @@ -2610,7 +2610,7 @@ Generated by [AVA](https://avajs.dev). { amount: { brand: Object @Alleged: USDC brand {}, - value: 300n, + value: 2000000n, }, dest: '@noble', how: 'IBC to Noble', @@ -2619,7 +2619,7 @@ Generated by [AVA](https://avajs.dev). { amount: { brand: Object @Alleged: USDC brand {}, - value: 300n, + value: 2000000n, }, dest: '@Avalanche', how: 'CCTP', @@ -2628,7 +2628,7 @@ Generated by [AVA](https://avajs.dev). { amount: { brand: Object @Alleged: USDC brand {}, - value: 300n, + value: 2000000n, }, dest: 'Beefy_re7_Avalanche', how: 'Beefy', @@ -2643,7 +2643,7 @@ Generated by [AVA](https://avajs.dev). protocol: 'Beefy', totalIn: { brand: Object @Alleged: USDC brand {}, - value: 300n, + value: 2000000n, }, totalOut: { brand: Object @Alleged: USDC brand {}, @@ -2660,13 +2660,13 @@ Generated by [AVA](https://avajs.dev). { args: [ '0xc3d688B66703497DAA19211EEdff47f25384cdc3', - 300n, + 2000000n, ], functionName: 'approve', }, { args: [ - 300n, + 2000000n, ], functionName: 'deposit', }, @@ -2689,7 +2689,7 @@ Generated by [AVA](https://avajs.dev). _method: 'send', amount: { brand: Object @Alleged: USDC brand {}, - value: 300n, + value: 2000000n, }, toAccount: { chainId: 'agoric-6', @@ -2744,7 +2744,7 @@ Generated by [AVA](https://avajs.dev). { amount: { brand: Object @Alleged: USDC brand {}, - value: 300n, + value: 2000000n, }, dest: '@agoric', how: 'send', @@ -2769,7 +2769,7 @@ Generated by [AVA](https://avajs.dev). amounts: { Deposit: { brand: Object @Alleged: USDC brand {}, - value: 300n, + value: 2000000n, }, }, localAccount: Object @Alleged: AgoricAccount { @@ -2835,7 +2835,7 @@ Generated by [AVA](https://avajs.dev). { amount: { brand: Object @Alleged: USDC brand {}, - value: 300n, + value: 2000000n, }, dest: '+agoric', how: 'localTransfer', @@ -2986,7 +2986,7 @@ Generated by [AVA](https://avajs.dev). value: 100n, }, opts: { - memo: '{"destination_chain":"arbitrum","destination_address":"0x36b64aa4b7023599ec4ea8dc97bfa86f68769c87","payload":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,116,120,51,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,0,0,0,0,0,135,135,11,202,63,63,214,51,92,63,76,232,57,45,105,53,11,79,164,226,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,100,105,50,141,236,0,0,0,0,0,0,0,0,0,0,0,0,202,199,255,168,44,15,67,235,176,252,17,252,211,33,35,236,164,102,38,207,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,44,0,0,0,0,0,0,0,0,0,0,0,0,54,182,74,164,183,2,53,153,236,78,168,220,151,191,168,111,104,118,156,135,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"type":1,"fee":{"amount":"100","recipient":"axelar1aythygn6z5thymj6tmzfwekzh05ewg3l7d6y89"}}', + memo: '{"destination_chain":"arbitrum","destination_address":"0x36b64aa4b7023599ec4ea8dc97bfa86f68769c87","payload":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,116,120,51,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,0,0,0,0,0,135,135,11,202,63,63,214,51,92,63,76,232,57,45,105,53,11,79,164,226,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,100,105,50,141,236,0,0,0,0,0,0,0,0,0,0,0,0,202,199,255,168,44,15,67,235,176,252,17,252,211,33,35,236,164,102,38,207,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,132,128,0,0,0,0,0,0,0,0,0,0,0,0,54,182,74,164,183,2,53,153,236,78,168,220,151,191,168,111,104,118,156,135,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"type":1,"fee":{"amount":"100","recipient":"axelar1aythygn6z5thymj6tmzfwekzh05ewg3l7d6y89"}}', }, }, { @@ -3014,7 +3014,7 @@ Generated by [AVA](https://avajs.dev). value: 0n, }, opts: { - memo: '{"destination_chain":"arbitrum","destination_address":"0x36b64aa4b7023599ec4ea8dc97bfa86f68769c87","payload":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,116,120,53,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,202,199,255,168,44,15,67,235,176,252,17,252,211,33,35,236,164,102,38,207,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,68,9,94,167,179,0,0,0,0,0,0,0,0,0,0,0,0,159,59,134,121,199,60,47,239,139,89,180,243,68,77,78,21,111,183,10,165,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,59,134,121,199,60,47,239,139,89,180,243,68,77,78,21,111,183,10,165,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,132,111,211,80,78,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,64,224,198,184,129,31,220,225,4,223,85,14,22,207,21,208,36,23,190,250,0,0,0,0,0,0,0,0,0,0,0,0,202,199,255,168,44,15,67,235,176,252,17,252,211,33,35,236,164,102,38,207,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"type":1,"fee":{"amount":"0","recipient":"axelar1aythygn6z5thymj6tmzfwekzh05ewg3l7d6y89"}}', + memo: '{"destination_chain":"arbitrum","destination_address":"0x36b64aa4b7023599ec4ea8dc97bfa86f68769c87","payload":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,116,120,53,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,202,199,255,168,44,15,67,235,176,252,17,252,211,33,35,236,164,102,38,207,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,68,9,94,167,179,0,0,0,0,0,0,0,0,0,0,0,0,159,59,134,121,199,60,47,239,139,89,180,243,68,77,78,21,111,183,10,165,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,132,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,159,59,134,121,199,60,47,239,139,89,180,243,68,77,78,21,111,183,10,165,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,132,111,211,80,78,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,132,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,64,224,198,184,129,31,220,225,4,223,85,14,22,207,21,208,36,23,190,250,0,0,0,0,0,0,0,0,0,0,0,0,202,199,255,168,44,15,67,235,176,252,17,252,211,33,35,236,164,102,38,207,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"type":1,"fee":{"amount":"0","recipient":"axelar1aythygn6z5thymj6tmzfwekzh05ewg3l7d6y89"}}', }, }, { @@ -3022,7 +3022,7 @@ Generated by [AVA](https://avajs.dev). amounts: { Cash: { brand: Object @Alleged: USDC brand {}, - value: 300n, + value: 2000000n, }, }, destSeat: { @@ -3090,7 +3090,7 @@ Generated by [AVA](https://avajs.dev). [ 'published.ymax0.pendingTxs.tx4', { - amount: 300n, + amount: 2000000n, destinationAddress: 'cosmos:agoric-6:agoric11028', status: 'success', type: 'CCTP_TO_AGORIC', @@ -3183,7 +3183,7 @@ Generated by [AVA](https://avajs.dev). { amount: { brand: Object @Alleged: USDC brand {}, - value: 300n, + value: 2000000n, }, state: 'done', type: 'withdraw', @@ -3195,7 +3195,7 @@ Generated by [AVA](https://avajs.dev). { amount: { brand: Object @Alleged: USDC brand {}, - value: 300n, + value: 2000000n, }, dest: '@Arbitrum', how: 'Aave', @@ -3204,7 +3204,7 @@ Generated by [AVA](https://avajs.dev). { amount: { brand: Object @Alleged: USDC brand {}, - value: 300n, + value: 2000000n, }, dest: '@agoric', how: 'CCTP', @@ -3213,7 +3213,7 @@ Generated by [AVA](https://avajs.dev). { amount: { brand: Object @Alleged: USDC brand {}, - value: 300n, + value: 2000000n, }, dest: '', how: 'withdrawToSeat', @@ -3232,7 +3232,7 @@ Generated by [AVA](https://avajs.dev). }, totalOut: { brand: Object @Alleged: USDC brand {}, - value: 300n, + value: 2000000n, }, }, ], @@ -3492,7 +3492,7 @@ Generated by [AVA](https://avajs.dev). msgs: [ { typeUrl: '/noble.swap.v1.MsgSwap', - value: 'Cgpub2JsZTExMDU2Eg0KBXV1c2RuEgQ1MDAwGgcSBXV1c2RjIg0KBXV1c2RjEgQ1MDAw', + value: 'Cgpub2JsZTExMDU2EhAKBXV1c2RuEgc1MDAwMDAwGgcSBXV1c2RjIhAKBXV1c2RjEgc1MDAwMDAw', }, ], }, @@ -3501,7 +3501,7 @@ Generated by [AVA](https://avajs.dev). _method: 'depositForBurn', denomAmount: { denom: 'uusdc', - value: 5000n, + value: 5000000n, }, destinationAddress: 'eip155:42161:0x36b64aa4b7023599ec4ea8dc97bfa86f68769c87', }, @@ -3530,7 +3530,7 @@ Generated by [AVA](https://avajs.dev). value: 50n, }, opts: { - memo: '{"destination_chain":"arbitrum","destination_address":"0x36b64aa4b7023599ec4ea8dc97bfa86f68769c87","payload":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,116,120,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,202,199,255,168,44,15,67,235,176,252,17,252,211,33,35,236,164,102,38,207,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,68,9,94,167,179,0,0,0,0,0,0,0,0,0,0,0,0,135,135,11,202,63,63,214,51,92,63,76,232,57,45,105,53,11,79,164,226,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,136,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,135,135,11,202,63,63,214,51,92,63,76,232,57,45,105,53,11,79,164,226,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,132,97,123,160,55,0,0,0,0,0,0,0,0,0,0,0,0,202,199,255,168,44,15,67,235,176,252,17,252,211,33,35,236,164,102,38,207,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,136,0,0,0,0,0,0,0,0,0,0,0,0,54,182,74,164,183,2,53,153,236,78,168,220,151,191,168,111,104,118,156,135,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"type":1,"fee":{"amount":"50","recipient":"axelar1aythygn6z5thymj6tmzfwekzh05ewg3l7d6y89"}}', + memo: '{"destination_chain":"arbitrum","destination_address":"0x36b64aa4b7023599ec4ea8dc97bfa86f68769c87","payload":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,116,120,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,202,199,255,168,44,15,67,235,176,252,17,252,211,33,35,236,164,102,38,207,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,68,9,94,167,179,0,0,0,0,0,0,0,0,0,0,0,0,135,135,11,202,63,63,214,51,92,63,76,232,57,45,105,53,11,79,164,226,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,76,75,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,135,135,11,202,63,63,214,51,92,63,76,232,57,45,105,53,11,79,164,226,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,132,97,123,160,55,0,0,0,0,0,0,0,0,0,0,0,0,202,199,255,168,44,15,67,235,176,252,17,252,211,33,35,236,164,102,38,207,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,76,75,64,0,0,0,0,0,0,0,0,0,0,0,0,54,182,74,164,183,2,53,153,236,78,168,220,151,191,168,111,104,118,156,135,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"type":1,"fee":{"amount":"50","recipient":"axelar1aythygn6z5thymj6tmzfwekzh05ewg3l7d6y89"}}', }, }, { @@ -3558,7 +3558,7 @@ Generated by [AVA](https://avajs.dev). [ 'published.ymax0.pendingTxs.tx1', { - amount: 5000n, + amount: 5000000n, destinationAddress: 'eip155:42161:0x36b64aa4b7023599ec4ea8dc97bfa86f68769c87', status: 'success', type: 'CCTP_TO_EVM', @@ -3655,7 +3655,7 @@ Generated by [AVA](https://avajs.dev). { amount: { brand: Object @Alleged: USDC brand {}, - value: 5000n, + value: 5000000n, }, dest: '@noble', how: 'USDN', @@ -3664,7 +3664,7 @@ Generated by [AVA](https://avajs.dev). { amount: { brand: Object @Alleged: USDC brand {}, - value: 5000n, + value: 5000000n, }, dest: '@Arbitrum', how: 'CCTP', @@ -3673,7 +3673,7 @@ Generated by [AVA](https://avajs.dev). { amount: { brand: Object @Alleged: USDC brand {}, - value: 5000n, + value: 5000000n, }, dest: 'Aave_Arbitrum', how: 'Aave', @@ -3688,7 +3688,7 @@ Generated by [AVA](https://avajs.dev). protocol: 'Aave', totalIn: { brand: Object @Alleged: USDC brand {}, - value: 5000n, + value: 5000000n, }, totalOut: { brand: Object @Alleged: USDC brand {}, @@ -3707,7 +3707,7 @@ Generated by [AVA](https://avajs.dev). }, totalOut: { brand: Object @Alleged: USDC brand {}, - value: 5000n, + value: 5000000n, }, }, ], @@ -4049,3 +4049,207 @@ Generated by [AVA](https://avajs.dev). }, ], ] + +## asking to relay less than 1 USDC over CCTP is refused by contract + +> call log + + [ + { + _cap: 'agoric11028', + _method: 'monitorTransfers', + tap: Object @Alleged: Portfolio tap {}, + }, + { + _cap: 'agoric11014', + _method: 'transfer', + address: { + chainId: 'noble-5', + value: 'noble11056', + }, + amount: { + denom: 'ubld', + value: 1n, + }, + opts: { + memo: '{"noble":{"forwarding":{"channel":"channel-21","recipient":"agoric11028"}}}', + }, + }, + { + _cap: 'agoric11014', + _method: 'send', + amount: { + denom: 'uaxl', + value: 150n, + }, + toAccount: { + chainId: 'agoric-6', + value: 'agoric11028', + }, + }, + { + _cap: 'agoric11028', + _method: 'transfer', + address: { + chainId: 'axelar-6', + encoding: 'bech32', + value: 'axelar1dv4u5k73pzqrxlzujxg3qp8kvc3pje7jtdvu72npnt5zhq05ejcsn5qme5', + }, + amount: { + denom: 'uaxl', + value: 150n, + }, + opts: { + memo: '{"destination_chain":"arbitrum","destination_address":"0xef8651dD30cF990A1e831224f2E0996023163A81","payload":[],"type":1,"fee":{"amount":"150","recipient":"axelar1aythygn6z5thymj6tmzfwekzh05ewg3l7d6y89"}}', + }, + }, + { + _method: 'localTransfer', + amounts: { + Deposit: { + brand: Object @Alleged: USDC brand {}, + value: 250000n, + }, + }, + localAccount: Object @Alleged: AgoricAccount { + executeEncodedTx: AsyncFunction {}, + getAddress: Function getAddress {}, + monitorTransfers: AsyncFunction {}, + parseInboundTransfer: AsyncFunction {}, + send: AsyncFunction {}, + transfer: AsyncFunction {}, + }, + sourceSeat: { + exit: Function exit {}, + fail: Function fail {}, + getProposal: Function getProposal {}, + hasExited: Function hasExited {}, + }, + }, + { + _cap: 'agoric11028', + _method: 'transfer', + address: { + chainId: 'noble-5', + value: 'noble11056', + }, + amount: { + denom: 'ibc/40F1B2458AEDA66431F9D44F48413240B8D28C072463E2BF53655728683583E3', + value: 250000n, + }, + opts: undefined, + }, + { + _cap: 'seat', + _method: 'fail', + reason: { + error: 'too small to relay: {"brand":"[Alleged: USDC brand]","value":"[250000n]"} below "[1000000n]"', + how: 'CCTP', + next: { + error: 'predecessor 3 failed', + how: 'Aave', + next: undefined, + step: 4, + }, + step: 3, + }, + }, + ] + +> Under "published", the "ymax0" node is delegated to ymax. +> The example below illustrates the schema of the data published there. +> +> See also board marshalling conventions (_to appear_). + + [ + [ + 'published.ymax0.pendingTxs.tx0', + { + destinationAddress: 'eip155:42161:0xef8651dD30cF990A1e831224f2E0996023163A81', + expectedAddr: '0x36b64aa4b7023599ec4ea8dc97bfa86f68769c87', + status: 'success', + type: 'MAKE_ACCOUNT', + }, + ], + [ + 'published.ymax0.portfolios', + { + addPortfolio: 'portfolio1', + }, + ], + [ + 'published.ymax0.portfolios.portfolio1', + { + accountIdByChain: { + Arbitrum: 'eip155:42161:0x36b64aa4b7023599ec4ea8dc97bfa86f68769c87', + agoric: 'cosmos:agoric-6:agoric11028', + noble: 'cosmos:noble-5:noble11056', + }, + accountsPending: [], + depositAddress: 'agoric11042', + flowCount: 1, + flowsRunning: {}, + nobleForwardingAddress: 'noble1grsvdwyprlwwzpxl258pdnc46qjp00h6rm5nqc', + policyVersion: 0, + positionKeys: [], + rebalanceCount: 0, + }, + ], + [ + 'published.ymax0.portfolios.portfolio1.flows.flow1', + { + error: 'too small to relay: {"brand":"[Alleged: USDC brand]","value":"[250000n]"} below "[1000000n]"', + how: 'CCTP', + next: { + error: 'predecessor 3 failed', + how: 'Aave', + next: undefined, + step: 4, + }, + state: 'fail', + step: 3, + type: 'rebalance', + }, + ], + [ + 'published.ymax0.portfolios.portfolio1.flows.flow1.steps', + [ + { + amount: { + brand: Object @Alleged: USDC brand {}, + value: 250000n, + }, + dest: '@agoric', + how: 'localTransfer', + src: '', + }, + { + amount: { + brand: Object @Alleged: USDC brand {}, + value: 250000n, + }, + dest: '@noble', + how: 'IBC to Noble', + src: '@agoric', + }, + { + amount: { + brand: Object @Alleged: USDC brand {}, + value: 250000n, + }, + dest: '@Arbitrum', + how: 'CCTP', + src: '@noble', + }, + { + amount: { + brand: Object @Alleged: USDC brand {}, + value: 250000n, + }, + dest: 'Aave_Arbitrum', + how: 'Aave', + src: '@Arbitrum', + }, + ], + ], + ] diff --git a/packages/portfolio-contract/test/snapshots/portfolio.flows.test.ts.snap b/packages/portfolio-contract/test/snapshots/portfolio.flows.test.ts.snap index 3d845f28bc8..0e414cfa139 100644 Binary files a/packages/portfolio-contract/test/snapshots/portfolio.flows.test.ts.snap and b/packages/portfolio-contract/test/snapshots/portfolio.flows.test.ts.snap differ