diff --git a/packages/cosmic-swingset/Makefile b/packages/cosmic-swingset/Makefile index 01022d385ee..7def4f87c44 100644 --- a/packages/cosmic-swingset/Makefile +++ b/packages/cosmic-swingset/Makefile @@ -77,24 +77,36 @@ scenario2-run-chain: DEBUG=SwingSet:ls,SwingSet:vat \ $(AGC) `$(BREAK_CHAIN) && echo --inspect-brk` --home=t1/n0 start --log_level=warn +scenario2-reset-client: + rm -rf t1/$(BASE_PORT) + $(AG_SOLO) init t1/$(BASE_PORT) --webport=$(BASE_PORT) + $(MAKE) set-local-gci-ingress + # Provision and start a client. scenario2-run-client: t1-provision-one-with-powers t1-start-ag-solo # Provision the ag-solo from an provisionpass-holding address (idempotent). AGORIC_POWERS = agoric.bankManager,agoric.agoricNamesAdmin,agoric.pegasusConnections,agoric.priceAuthorityAdmin,agoric.treasuryCreator,agoric.vattp +SOLO_COINS = 13000000ubld t1-provision-one-with-powers: addr=$$(cat t1/$(BASE_PORT)/ag-cosmos-helper-address); \ $(AGCH) --home=t1/bootstrap query swingset egress $$addr --chain-id=$(CHAIN_ID) || \ + { $(AGCH) --home=t1/bootstrap tx bank send --keyring-backend=test --from=bootstrap \ + --gas=auto --gas-adjustment=1.2 --broadcast-mode=block --yes --chain-id=$(CHAIN_ID) \ + bootstrap $$addr $(SOLO_COINS); \ $(AGCH) --home=t1/bootstrap tx swingset provision-one --keyring-backend=test --from=bootstrap \ --gas=auto --gas-adjustment=1.2 --broadcast-mode=block --yes --chain-id=$(CHAIN_ID) \ - t1/$(BASE_PORT) $$addr $(AGORIC_POWERS) | tee /dev/stderr | grep -q '"code":0' + t1/$(BASE_PORT) $$addr $(AGORIC_POWERS) | tee /dev/stderr | grep -q '"code":0'; } t1-provision-one: addr=$$(cat t1/$(BASE_PORT)/ag-cosmos-helper-address); \ $(AGCH) --home=t1/bootstrap query swingset egress $$addr --chain-id=$(CHAIN_ID) || \ + { $(AGCH) --home=t1/bootstrap tx bank send --keyring-backend=test --from=bootstrap \ + --gas=auto --gas-adjustment=1.2 --broadcast-mode=block --yes --chain-id=$(CHAIN_ID) \ + bootstrap $$addr $(SOLO_COINS); \ $(AGCH) --home=t1/bootstrap tx swingset provision-one --keyring-backend=test --from=bootstrap \ --gas=auto --gas-adjustment=1.2 --broadcast-mode=block --yes --chain-id=$(CHAIN_ID) \ - t1/$(BASE_PORT) $$addr | tee /dev/stderr | grep -q '"code":0' + t1/$(BASE_PORT) $$addr | tee /dev/stderr | grep -q '"code":0'; } # Actually start the ag-solo. t1-start-ag-solo: diff --git a/packages/vats/src/bootstrap.js b/packages/vats/src/bootstrap.js index 00bde1ad23d..c9524874f18 100644 --- a/packages/vats/src/bootstrap.js +++ b/packages/vats/src/bootstrap.js @@ -48,6 +48,7 @@ function makeVattpFrom(vats) { } export function buildRootObject(vatPowers, vatParameters) { + console.error('%%%HAVE vatParameters', vatParameters); const { D } = vatPowers; async function setupCommandDevice(httpVat, cmdDevice, roles) { await E(httpVat).setCommandDevice(cmdDevice, roles); @@ -163,13 +164,15 @@ export function buildRootObject(vatPowers, vatParameters) { } const bank = await E(bankManager).getBankForAddress(bootstrapAddress); const pmt = await E(treasuryCreator).getBootstrapPayment( - amountMath.make(bootstrapValue, centralBrand), + amountMath.make(BigInt(bootstrapValue), centralBrand), ); const purse = E(bank).getPurse(centralBrand); await E(purse).deposit(pmt); } - console.error('have vatParameters', vatParameters); - await payThePiper(vatParameters.bootMsg); + false && + (await payThePiper( + vatParameters && vatParameters.argv && vatParameters.argv.bootMsg, + )); /** @type {[string, import('./issuers').IssuerInitializationRecord]} */ const CENTRAL_ISSUER_ENTRY = [ @@ -211,6 +214,21 @@ export function buildRootObject(vatPowers, vatParameters) { issuerName, harden({ ...record, brand, issuer }), ); + if (!record.bankDenom || !record.bankPurse) { + return issuer; + } + + // We need to obtain the mint in order to mint the tokens when they + // come from the bank. + // FIXME: Be more careful with the mint. + const mint = await E(vats.mints).getMint(issuerName); + const kit = harden({ brand, issuer, mint }); + await E(bankManager).addAsset( + record.bankDenom, + issuerName, + record.bankPurse, + kit, + ); return issuer; }), ); diff --git a/packages/vats/src/issuers.js b/packages/vats/src/issuers.js index 6fce463c51a..5d4fada056d 100644 --- a/packages/vats/src/issuers.js +++ b/packages/vats/src/issuers.js @@ -23,6 +23,8 @@ export const CENTRAL_ISSUER_NAME = 'RUN'; * @property {Brand} [brand] * @property {Array} [issuerArgs] * @property {CollateralConfig} [collateralConfig] + * @property {string} [bankDenom] + * @property {string} [bankPurse] * @property {Array<[string, Bigish]>} [defaultPurses] * @property {Array<[Bigish, Bigish]>} [tradesGivenCentral] */ @@ -70,7 +72,8 @@ const fromCosmosIssuerEntries = [ 'BLD', { issuerArgs: [undefined, { decimalPlaces: 6 }], - defaultPurses: [['Agoric staking token', scaleMicro(73)]], + bankDenom: 'ubld', + bankPurse: 'Agoric staking token', collateralConfig: { keyword: 'BLD', collateralValue: scaleMicro(1000000n), diff --git a/packages/vats/src/vat-bank.js b/packages/vats/src/vat-bank.js index fdbdd023c9e..834ded5d7a2 100644 --- a/packages/vats/src/vat-bank.js +++ b/packages/vats/src/vat-bank.js @@ -111,6 +111,7 @@ export function buildRootObject(_vatPowers) { * @typedef {Object} AssetDescriptor * @property {Brand} brand * @property {Issuer} issuer + * @property {string} issuerName * @property {string} denom * @property {string} proposedName */ @@ -134,11 +135,13 @@ export function buildRootObject(_vatPowers) { * Add an asset to the bank, and publish it to the subscriptions. * * @param {string} denom lower-level denomination string + * @param {string} issuerName * @param {string} proposedName * @param {IssuerKit} kit ERTP issuer kit (mint, brand, issuer) */ - async addAsset(denom, proposedName, kit) { + async addAsset(denom, issuerName, proposedName, kit) { assert.typeof(denom, 'string'); + assert.typeof(issuerName, 'string'); assert.typeof(proposedName, 'string'); const brand = await kit.brand; @@ -153,7 +156,13 @@ export function buildRootObject(_vatPowers) { brandToAssetRecord.init(brand, assetRecord); denomToAddressUpdater.init(denom, makeStore('address')); assetPublication.updateState( - harden({ brand, denom, issuer: kit.issuer, proposedName }), + harden({ + brand, + denom, + issuerName, + issuer: kit.issuer, + proposedName, + }), ); }, /** diff --git a/packages/vats/test/test-vat-bank.js b/packages/vats/test/test-vat-bank.js index 8928d294881..326ac913a9d 100644 --- a/packages/vats/test/test-vat-bank.js +++ b/packages/vats/test/test-vat-bank.js @@ -82,7 +82,7 @@ test('communication', async t => { let itResult; const p = it.next().then(r => (itResult = r)); t.is(itResult, undefined); - await E(bankMgr).addAsset('ubld', 'BLD Staking Tokens', kit); + await E(bankMgr).addAsset('ubld', 'BLD', 'Staking Tokens', kit); await p; t.is(itResult && itResult.done, false);