Skip to content

Commit

Permalink
xxx for non-durable param managers
Browse files Browse the repository at this point in the history
  • Loading branch information
turadg committed Apr 27, 2023
1 parent 7c8f88f commit 364c659
Show file tree
Hide file tree
Showing 2 changed files with 63 additions and 16 deletions.
57 changes: 56 additions & 1 deletion packages/inter-protocol/src/vaultFactory/params.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,10 @@ import {
makeParamManagerSync,
ParamTypes,
} from '@agoric/governance';
import { M } from '@agoric/store';
import { makeStoredPublisherKit } from '@agoric/notifier';
import { M, makeScalarMapStore } from '@agoric/store';
import { TimeMath } from '@agoric/time';
import { provideDurableMapStore } from '@agoric/vat-data';
import { subtractRatios } from '@agoric/zoe/src/contractSupport/ratio.js';
import { amountPattern, ratioPattern } from '../contractSupport.js';

Expand Down Expand Up @@ -160,3 +162,56 @@ export const makeGovernedTerms = ({
});
};
harden(makeGovernedTerms);
/**
* Stop-gap which restores initial param values
* UNTIL https://github.com/Agoric/agoric-sdk/issues/5200
*
* NB: changes from initial values will be lost upon restart
*
* @param {import('@agoric/vat-data').Baggage} baggage
* @param {ERef<Marshaller>} marshaller
*/
export const provideVaultParamManagers = (baggage, marshaller) => {
/** @type {MapStore<Brand, VaultParamManager>} */
const managers = makeScalarMapStore();

// the managers aren't durable but their arguments are
/** @type {MapStore<Brand, {storageNode: StorageNode, initialParamValues: VaultManagerParamValues}>} */
const managerArgs = provideDurableMapStore(
baggage,
'vault param manager parts',
);

const makeManager = (brand, { storageNode, initialParamValues }) => {
const manager = makeVaultParamManager(
makeStoredPublisherKit(storageNode, marshaller, 'governance'),
initialParamValues,
);
managers.init(brand, manager);
return manager;
};

// restore from baggage
[...managerArgs.entries()].map(([brand, args]) => makeManager(brand, args));

return {
/**
*
* @param {Brand} brand
* @param {StorageNode} storageNode
* @param {VaultManagerParamValues} initialParamValues
*/
addParamManager(brand, storageNode, initialParamValues) {
const args = harden({ storageNode, initialParamValues });
managerArgs.init(brand, args);
return makeManager(brand, args);
},
/**
* @param {Brand} brand
*/
get(brand) {
return managers.get(brand);
},
};
};
harden(provideVaultParamManagers);
22 changes: 7 additions & 15 deletions packages/inter-protocol/src/vaultFactory/vaultDirector.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,7 @@ import '@agoric/governance/exported.js';
import { AmountMath, AmountShape, BrandShape, IssuerShape } from '@agoric/ertp';
import { GovernorFacetShape } from '@agoric/governance/src/typeGuards.js';
import { makeTracer } from '@agoric/internal';
import { makeStoredPublisherKit } from '@agoric/notifier';
import { M, makeScalarMapStore, mustMatch } from '@agoric/store';
import { M, mustMatch } from '@agoric/store';
import { prepareExoClassKit, provideDurableMapStore } from '@agoric/vat-data';
import { assertKeywordName } from '@agoric/zoe/src/cleanProposal.js';
import {
Expand All @@ -27,7 +26,7 @@ import { Far } from '@endo/marshal';
import { makeCollectFeesInvitation } from '../collectFees.js';
import { scheduleLiquidationWakeups } from './liquidation.js';
import {
makeVaultParamManager,
provideVaultParamManagers,
SHORTFALL_INVITATION_KEY,
vaultParamPattern,
} from './params.js';
Expand Down Expand Up @@ -105,10 +104,8 @@ export const prepareVaultDirector = (

// Non-durable map because param managers aren't durable.
// In the event they're needed they can be reconstructed from contract terms and off-chain data.
/**
* @type {MapStore<Brand, ReturnType<typeof makeVaultParamManager>>}
*/
const vaultParamManagers = makeScalarMapStore('vaultParamManagers');
/** a powerful object; can modify parameters */
const vaultParamManagers = provideVaultParamManagers(baggage, marshaller);

const metricsNode = E(storageNode).makeChildNode('metrics');

Expand Down Expand Up @@ -378,16 +375,11 @@ export const prepareVaultDirector = (
managerId,
);

/** a powerful object; can modify parameters */
const vaultParamManager = makeVaultParamManager(
makeStoredPublisherKit(
managerStorageNode,
marshaller,
'governance',
),
vaultParamManagers.addParamManager(
collateralBrand,
managerStorageNode,
initialParamValues,
);
vaultParamManagers.init(collateralBrand, vaultParamManager);

const startTimeStamp = await E(timer).getCurrentTimestamp();

Expand Down

0 comments on commit 364c659

Please sign in to comment.