From 0cda6230210add2bbedc40100dbfe8f0f8e98826 Mon Sep 17 00:00:00 2001 From: Chip Morningstar Date: Thu, 29 Jul 2021 14:17:41 -0700 Subject: [PATCH] feat: require that buildRootObject always returns a Far reference --- packages/SwingSet/src/kernel/liveSlots.js | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/packages/SwingSet/src/kernel/liveSlots.js b/packages/SwingSet/src/kernel/liveSlots.js index 00169af3f20..525959ee62c 100644 --- a/packages/SwingSet/src/kernel/liveSlots.js +++ b/packages/SwingSet/src/kernel/liveSlots.js @@ -1,6 +1,11 @@ /* global HandledPromise */ -import { Remotable, passStyleOf, makeMarshal } from '@agoric/marshal'; +import { + Remotable, + passStyleOf, + getInterfaceOf, + makeMarshal, +} from '@agoric/marshal'; import { assert, details as X } from '@agoric/assert'; import { isPromise } from '@agoric/promise-kit'; import { insistVatType, makeVatSlot, parseVatSlot } from '../parseVatSlots.js'; @@ -973,7 +978,11 @@ function build( assert.equal( passStyleOf(rootObject), 'remotable', - `buildRootObject() (${buildRootObject}) returned ${rootObject}, which is not Far`, + X`buildRootObject() for vat ${forVatID} returned ${rootObject}, which is not Far`, + ); + assert( + getInterfaceOf(rootObject) !== undefined, + X`buildRootObject() for vat ${forVatID} returned ${rootObject} with no interface`, ); const rootSlot = makeVatSlot('object', true, BigInt(0));