Skip to content

Commit

Permalink
feat: introduce auctioneer to econCommitteeCharter
Browse files Browse the repository at this point in the history
 - test: propose change to auction governance param
  • Loading branch information
dckc committed Apr 1, 2023
1 parent 813d7bf commit 9ccc069
Show file tree
Hide file tree
Showing 2 changed files with 85 additions and 7 deletions.
26 changes: 19 additions & 7 deletions packages/inter-protocol/src/proposals/committee-proposal.js
Original file line number Diff line number Diff line change
Expand Up @@ -72,28 +72,39 @@ export const startEconCharter = async ({
harden(startEconCharter);

/**
* Introduce charter to governed creator facets.
*
* @param {import('./econ-behaviors').EconomyBootstrapPowers} powers
*/
export const addGovernorsToEconCharter = async ({
consume: { reserveKit, vaultFactoryKit, econCharterKit },
consume: { reserveKit, vaultFactoryKit, econCharterKit, auctioneerKit },
instance: {
consume: { reserve, VaultFactory },
consume: { reserve, VaultFactory, auctioneer },
},
}) => {
const { creatorFacet } = E.get(econCharterKit);

// Introduce charter to governed creator facets.
await Promise.all(
[
{ instanceP: reserve, facetP: E.get(reserveKit).governorCreatorFacet },
{
label: 'reserve',
instanceP: reserve,
facetP: E.get(reserveKit).governorCreatorFacet,
},
{
label: 'VaultFactory',
instanceP: VaultFactory,
facetP: E.get(vaultFactoryKit).governorCreatorFacet,
},
].map(async ({ instanceP, facetP }) => {
{
label: 'auctioneer',
instanceP: auctioneer,
facetP: E.get(auctioneerKit).governorCreatorFacet,
},
].map(async ({ label, instanceP, facetP }) => {
const [instance, govFacet] = await Promise.all([instanceP, facetP]);

return E(creatorFacet).addInstance(instance, govFacet);
return E(creatorFacet).addInstance(instance, govFacet, label);
}),
);
};
Expand Down Expand Up @@ -146,6 +157,7 @@ export const getManifestForInviteCommittee = async (
},
[addGovernorsToEconCharter.name]: {
consume: {
auctioneerKit: t,
reserveGovernorCreatorFacet: t,
vaultFactoryGovernorCreator: t,
econCharterKit: t,
Expand All @@ -160,7 +172,7 @@ export const getManifestForInviteCommittee = async (
consume: { binaryVoteCounter: t },
},
instance: {
consume: { reserve: t, VaultFactory: t },
consume: { auctioneer: t, reserve: t, VaultFactory: t },
},
},
[inviteToEconCharter.name]: {
Expand Down
66 changes: 66 additions & 0 deletions packages/vats/test/bootstrapTests/test-vaults-integration.js
Original file line number Diff line number Diff line change
Expand Up @@ -288,3 +288,69 @@ test('exit bid', async t => {
},
});
});

test('propose change to auction governance param', async t => {
const { walletFactoryDriver, agoricNamesRemotes, storage } = t.context;

const gov1 = 'agoric1ldmtatp24qlllgxmrsjzcpe20fvlkp448zcuce';
const wd = await walletFactoryDriver.provideSmartWallet(gov1);

t.log('accept charter invitation');
{
const instance = agoricNamesRemotes.instance.econCommitteeCharter;

await wd.executeOffer({
id: 'accept-charter-invitation',
invitationSpec: {
source: 'purse',
instance,
description: 'charter member invitation',
},
proposal: {},
});

await eventLoopIteration();

t.like(wd.getLatestUpdateRecord(), { status: { numWantsSatisfied: 1 } });
}

const instance = agoricNamesRemotes.instance.auctioneer;
const timerBrand = agoricNamesRemotes.brand.timer;
assert(timerBrand);

t.log('propose param change');
/* XXX @type {Partial<AuctionParams>} */
const params = {
StartFrequency: { timerBrand, relValue: 5n * 60n },
};

/** @type {import('@agoric/inter-protocol/src/econCommitteeCharter.js').ParamChangesOfferArgs} */
const offerArgs = {
deadline: 1000n,
params,
instance,
path: { paramPath: { key: 'governedParams' } },
};

await wd.executeOffer({
id: 'propose-param-change',
invitationSpec: {
source: 'continuing',
previousOffer: 'accept-charter-invitation',
invitationMakerName: 'VoteOnParamChange',
},
offerArgs,
proposal: {},
});

await eventLoopIteration();

t.like(wd.getLatestUpdateRecord(), { status: { numWantsSatisfied: 1 } });

const key = `published.committees.Economic_Committee.latestQuestion`;
const capData = JSON.parse(storage.data.get(key)?.at(-1));
const lastQuestion = JSON.parse(capData.body);
const changes = lastQuestion?.issue?.spec?.changes;
t.log('check Economic_Committee.latestQuestion against proposal');
t.like(changes, { StartFrequency: { relValue: { digits: '300' } } });
});

0 comments on commit 9ccc069

Please sign in to comment.