diff --git a/packages/cosmic-swingset/lib/block-manager.js b/packages/cosmic-swingset/lib/block-manager.js index b3ac93f8ba9..d563096eb5b 100644 --- a/packages/cosmic-swingset/lib/block-manager.js +++ b/packages/cosmic-swingset/lib/block-manager.js @@ -6,15 +6,20 @@ const BEGIN_BLOCK = 'BEGIN_BLOCK'; const DELIVER_INBOUND = 'DELIVER_INBOUND'; const END_BLOCK = 'END_BLOCK'; const COMMIT_BLOCK = 'COMMIT_BLOCK'; - -export default function makeBlockManager({ - deliverInbound, - beginBlock, - saveChainState, - saveOutsideState, - savedActions, - savedHeight, -}) { +const IBC_PACKET = 'IBC_PACKET'; +const IBC_TIMEOUT = 'IBC_TIMEOUT'; + +export default function makeBlockManager( + { + deliverInbound, + beginBlock, + saveChainState, + saveOutsideState, + savedActions, + savedHeight, + }, + sendToCosmosPort, +) { let computedHeight = savedHeight; let runTime = 0; async function kernelPerformAction(action) { @@ -37,6 +42,22 @@ export default function makeBlockManager({ ); break; + case IBC_PACKET: { + // FIXME: We just ack and disconnect. + sendToCosmosPort(action.channelPort, { + method: 'ack', + data64: Buffer.from(JSON.stringify(action)).toString('base64'), + }); + sendToCosmosPort(action.channelPort, { + method: 'close', + }); + break; + } + + case IBC_TIMEOUT: + console.error(`FIXME: Got IBC timeout; not implemented`, action); + break; + case END_BLOCK: return true; @@ -53,7 +74,7 @@ export default function makeBlockManager({ let decohered; let saveTime = 0; - async function blockManager(action) { + async function blockManager(action, sendToCosmosPort) { if (decohered) { throw decohered; } diff --git a/packages/cosmic-swingset/lib/chain-main.js b/packages/cosmic-swingset/lib/chain-main.js index 2d747622976..4be5da814e0 100644 --- a/packages/cosmic-swingset/lib/chain-main.js +++ b/packages/cosmic-swingset/lib/chain-main.js @@ -135,7 +135,8 @@ export default async function main(progname, args, { path, env, agcc }) { if (!blockManager) { const fns = await launchAndInitializeSwingSet(); - blockManager = makeBlockManager(fns); + const sendToCosmosPort = (port, obj) => agcc.send(port, stringify(obj)); + blockManager = makeBlockManager(fns, sendToCosmosPort); } }