diff --git a/packages/builders/scripts/inter-protocol/add-collateral-core.js b/packages/builders/scripts/inter-protocol/add-collateral-core.js index d15497ba0ea..eaf4d5b2bc1 100644 --- a/packages/builders/scripts/inter-protocol/add-collateral-core.js +++ b/packages/builders/scripts/inter-protocol/add-collateral-core.js @@ -19,10 +19,11 @@ export const defaultProposalBuilder = async ( const { issuerBoardId = env.INTERCHAIN_ISSUER_BOARD_ID, denom = env.INTERCHAIN_DENOM, - oracleBrand = 'ATOM', - decimalPlaces = 6, keyword = 'ATOM', - proposedName = oracleBrand, + issuerName = keyword, + oracleBrand = issuerName, + decimalPlaces = 6, + proposedName = issuerName, initialPrice = undefined, } = interchainAssetOptions; @@ -45,6 +46,7 @@ export const defaultProposalBuilder = async ( decimalPlaces, initialPrice, keyword, + issuerName, proposedName, oracleBrand, }, diff --git a/packages/inter-protocol/src/proposals/addAssetToVault.js b/packages/inter-protocol/src/proposals/addAssetToVault.js index cbe39b02ff3..3f15fc73dba 100644 --- a/packages/inter-protocol/src/proposals/addAssetToVault.js +++ b/packages/inter-protocol/src/proposals/addAssetToVault.js @@ -16,9 +16,11 @@ export * from './startPSM.js'; * @property {string} [issuerBoardId] * @property {string} [denom] * @property {number} [decimalPlaces] - * @property {string} [proposedName] - * @property {string} keyword - * @property {string} oracleBrand + * @property {string} keyword - used in regstering with reserve, vaultFactory + * @property {string} [issuerName] - used in agoricNames for compatibility: + * defaults to `keyword` if not provided + * @property {string} [proposedName] - defaults to `issuerName` if not provided + * @property {string} [oracleBrand] - defaults to `issuerName` if not provided * @property {number} [initialPrice] */ @@ -32,18 +34,22 @@ export const publishInterchainAssetFromBoardId = async ( { consume: { board, agoricNamesAdmin } }, { options: { interchainAssetOptions } }, ) => { - const { issuerBoardId, keyword } = interchainAssetOptions; + const { + issuerBoardId, + keyword, + issuerName = keyword, + } = interchainAssetOptions; // Incompatible with denom. assert.equal(interchainAssetOptions.denom, undefined); assert.typeof(issuerBoardId, 'string'); - assert.typeof(keyword, 'string'); + assert.typeof(issuerName, 'string'); const issuer = await E(board).getValue(issuerBoardId); const brand = await E(issuer).getBrand(); return Promise.all([ - E(E(agoricNamesAdmin).lookupAdmin('issuer')).update(keyword, issuer), - E(E(agoricNamesAdmin).lookupAdmin('brand')).update(keyword, brand), + E(E(agoricNamesAdmin).lookupAdmin('issuer')).update(issuerName, issuer), + E(E(agoricNamesAdmin).lookupAdmin('brand')).update(issuerName, brand), ]); }; @@ -62,18 +68,23 @@ export const publishInterchainAssetFromBank = async ( }, { options: { interchainAssetOptions } }, ) => { - const { denom, decimalPlaces, proposedName, keyword } = - interchainAssetOptions; + const { + denom, + decimalPlaces, + keyword, + issuerName = keyword, + proposedName = keyword, + } = interchainAssetOptions; // Incompatible with issuerBoardId. assert.equal(interchainAssetOptions.issuerBoardId, undefined); assert.typeof(denom, 'string'); - assert.typeof(keyword, 'string'); assert.typeof(decimalPlaces, 'number'); + assert.typeof(issuerName, 'string'); assert.typeof(proposedName, 'string'); const terms = { - keyword, + keyword: issuerName, // "keyword" is a misnomer in mintHolder terms assetKind: AssetKind.NAT, displayInfo: { decimalPlaces, @@ -83,7 +94,7 @@ export const publishInterchainAssetFromBank = async ( const { creatorFacet: mint, publicFacet: issuer } = await E(startUpgradable)({ installation: mintHolder, - label: keyword, + label: issuerName, privateArgs: undefined, terms, }); @@ -94,9 +105,9 @@ export const publishInterchainAssetFromBank = async ( await E(E.get(reserveKit).creatorFacet).addIssuer(issuer, keyword); await Promise.all([ - E(E(agoricNamesAdmin).lookupAdmin('issuer')).update(keyword, issuer), - E(E(agoricNamesAdmin).lookupAdmin('brand')).update(keyword, brand), - E(bankManager).addAsset(denom, keyword, proposedName, kit), + E(E(agoricNamesAdmin).lookupAdmin('issuer')).update(issuerName, issuer), + E(E(agoricNamesAdmin).lookupAdmin('brand')).update(issuerName, brand), + E(bankManager).addAsset(denom, issuerName, proposedName, kit), ]); }; @@ -119,10 +130,11 @@ export const registerScaledPriceAuthority = async ( ) => { const { keyword, - oracleBrand, + issuerName = keyword, + oracleBrand = issuerName, initialPrice: initialPriceRaw, } = interchainAssetOptions; - assert.typeof(keyword, 'string'); + assert.typeof(issuerName, 'string'); assert.typeof(oracleBrand, 'string'); const [ @@ -133,7 +145,7 @@ export const registerScaledPriceAuthority = async ( ] = await Promise.all([ priceAuthority, reserveThenGetNames(E(agoricNamesAdmin).lookupAdmin('brand'), [ - keyword, + issuerName, 'IST', ]), reserveThenGetNames(E(agoricNamesAdmin).lookupAdmin('oracleBrand'), [ @@ -191,7 +203,7 @@ export const registerScaledPriceAuthority = async ( const spaKit = await E(startUpgradable)({ installation: scaledPriceAuthority, - label: `scaledPriceAuthority-${keyword}`, + label: `scaledPriceAuthority-${issuerName}`, terms, }); @@ -233,12 +245,17 @@ export const addAssetToVault = async ( }, }, ) => { - const { keyword, oracleBrand } = interchainAssetOptions; + const { + keyword, + issuerName = keyword, + oracleBrand = issuerName, + } = interchainAssetOptions; assert.typeof(keyword, 'string'); + assert.typeof(issuerName, 'string'); assert.typeof(oracleBrand, 'string'); const [interchainIssuer] = await reserveThenGetNames( E(agoricNamesAdmin).lookupAdmin('issuer'), - [keyword], + [issuerName], ); const oracleInstanceName = instanceNameFor(oracleBrand, 'USD'); @@ -248,7 +265,7 @@ export const addAssetToVault = async ( const stable = await stableP; const vaultFactoryCreator = E.get(vaultFactoryKit).creatorFacet; - await E(vaultFactoryCreator).addVaultType(interchainIssuer, oracleBrand, { + await E(vaultFactoryCreator).addVaultType(interchainIssuer, keyword, { debtLimit: AmountMath.make(stable, BigInt(debtLimitValue)), interestRate: makeRatio(interestRateValue, stable), // The rest of these we use safe defaults. diff --git a/packages/vats/src/core/types-ambient.d.ts b/packages/vats/src/core/types-ambient.d.ts index d5792bfcd48..86c7691a84b 100644 --- a/packages/vats/src/core/types-ambient.d.ts +++ b/packages/vats/src/core/types-ambient.d.ts @@ -180,6 +180,7 @@ type WellKnownName = { | 'Pegasus' | 'reserve' | 'psm' + | 'scaledPriceAuthority' | 'econCommitteeCharter' | 'priceAggregator'; instance: diff --git a/packages/vats/src/core/utils.js b/packages/vats/src/core/utils.js index 7f66592f697..60a38cac888 100644 --- a/packages/vats/src/core/utils.js +++ b/packages/vats/src/core/utils.js @@ -54,6 +54,7 @@ export const agoricNamesReserved = harden({ psm: 'Parity Stability Module', econCommitteeCharter: 'Charter for Econ Governance questions', priceAggregator: 'simple price aggregator', + scaledPriceAuthority: 'scaled price authority', }, instance: { economicCommittee: 'Economic Committee', diff --git a/packages/vats/src/mintHolder.js b/packages/vats/src/mintHolder.js index 0529d3f16e0..27880481009 100644 --- a/packages/vats/src/mintHolder.js +++ b/packages/vats/src/mintHolder.js @@ -10,6 +10,8 @@ import { /** @typedef {import('@agoric/vat-data').Baggage} Baggage */ /** + * NOTE: "keyword" connotes initial caps constraint, which doesn't apply here. + * * @template {AssetKind} K * @typedef {{ * keyword: string;