Skip to content

Commit

Permalink
feat: save PSM adminFacet in bootstrap (#6101)
Browse files Browse the repository at this point in the history
* feat: save PSM adminFacet in bootstrap

Additionally, the contractGovernor will now make the adminFacet available.

* chore: export AdminFacet type from Zoe

* chore: correct permissions in startPSM.js

Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
  • Loading branch information
Chris-Hibbert and mergify[bot] authored Sep 1, 2022
1 parent 64241cd commit 14b20e6
Show file tree
Hide file tree
Showing 5 changed files with 21 additions and 10 deletions.
2 changes: 2 additions & 0 deletions packages/governance/src/contractGovernor.js
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,7 @@ const start = async (zcf, privateArgs) => {
creatorFacet: governedCF,
instance: governedInstance,
publicFacet: governedPF,
adminFacet,
} = await E(zoe).startInstance(
governedContractInstallation,
governedIssuerKeywordRecord,
Expand Down Expand Up @@ -281,6 +282,7 @@ const start = async (zcf, privateArgs) => {
voteOnApiInvocation,
voteOnOfferFilter: voteOnFilter,
getCreatorFacet: () => limitedCreatorFacet,
getAdminFacet: () => adminFacet,
getInstance: () => governedInstance,
getPublicFacet: () => governedPF,
});
Expand Down
1 change: 1 addition & 0 deletions packages/inter-protocol/src/proposals/econ-behaviors.js
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ const sanitizePathSegment = name => {
* bankMints: Mint[],
* psmCreatorFacet: unknown,
* psmGovernorCreatorFacet: GovernedContractFacetAccess<{},{}>,
* psmAdminFacet: AdminFacet,
* reservePublicFacet: import('../reserve/assetReserve.js').AssetReservePublicFacet,
* reserveCreatorFacet: import('../reserve/assetReserve.js').AssetReserveLimitedCreatorFacet,
* reserveGovernorCreatorFacet: GovernedAssetReserveFacetAccess,
Expand Down
17 changes: 9 additions & 8 deletions packages/inter-protocol/src/proposals/startPSM.js
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ export const startPSM = async (
chainStorage,
chainTimerService,
},
produce: { psmCreatorFacet, psmGovernorCreatorFacet },
produce: { psmCreatorFacet, psmGovernorCreatorFacet, psmAdminFacet },
installation: {
consume: { contractGovernor, psm: psmInstall },
},
Expand Down Expand Up @@ -138,14 +138,11 @@ export const startPSM = async (
}),
);

const governedInstance = await E(governorFacets.creatorFacet).getInstance();
const creatorFacet = E(governorFacets.creatorFacet).getCreatorFacet();

psmInstanceR.resolve(governedInstance);
psmInstanceR.resolve(await E(governorFacets.creatorFacet).getInstance());
psmGovernorR.resolve(governorFacets.instance);
psmCreatorFacet.resolve(creatorFacet);
psmCreatorFacet.resolve(E(governorFacets.creatorFacet).getCreatorFacet());
psmAdminFacet.resolve(E(governorFacets.creatorFacet).getAdminFacet());
psmGovernorCreatorFacet.resolve(governorFacets.creatorFacet);
psmInstanceR.resolve(governedInstance);
};
harden(startPSM);

Expand Down Expand Up @@ -262,7 +259,11 @@ export const PSM_MANIFEST = harden({
economicCommitteeCreatorFacet: 'economicCommittee',
chainTimerService: 'timer',
},
produce: { psmCreatorFacet: 'psm', psmGovernorCreatorFacet: 'psmGovernor' },
produce: {
psmCreatorFacet: 'psm',
psmAdminFacet: 'psm',
psmGovernorCreatorFacet: 'psmGovernor',
},
installation: {
consume: { contractGovernor: 'zoe', psm: 'zoe' },
},
Expand Down
4 changes: 4 additions & 0 deletions packages/zoe/src/contractFacet/types.js
Original file line number Diff line number Diff line change
Expand Up @@ -243,3 +243,7 @@
* @template S
* @typedef {import('../zoeService/utils').ContractOf<S>} ContractOf
*/

/**
* @typedef {import('../zoeService/utils').AdminFacet} AdminFacet
*/
7 changes: 5 additions & 2 deletions packages/zoe/src/zoeService/utils.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,11 @@ type ContractFacet<T extends {} = {}> = {
readonly [P in keyof T]: T[P] extends Callable ? T[P] : never;
};

type AdminFacet = {
getVatShutdownPromise: () => Promise<any>; // Completion, which is currently any
export type AdminFacet = {
// Completion, which is currently any
getVatShutdownPromise: () => Promise<any>;
upgradeContract: (contractBundleId: string, newPrivateArgs: any) => void;
restartContract: (newPrivateArgs: any) => void;
};

/**
Expand Down

0 comments on commit 14b20e6

Please # to comment.