Skip to content

Commit

Permalink
WIP: buggy contract refac to upgrade sa
Browse files Browse the repository at this point in the history
  • Loading branch information
iomekam committed Nov 7, 2024
1 parent 53a8a32 commit 38ded26
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 46 deletions.
18 changes: 8 additions & 10 deletions packages/boot/test/orchestration/contract-upgrade.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,9 +44,7 @@ test('resume', async t => {

t.log('start sendAnywhere');
await evalProposal(
buildProposal(
'@agoric/builders/scripts/testing/start-buggy-sendAnywhere.js',
),
buildProposal('@agoric/builders/scripts/testing/start-send-anywhere.js'),
);

t.log('making offer');
Expand All @@ -70,15 +68,10 @@ test('resume', async t => {

// XXX golden test
const getLogged = () =>
JSON.parse(storage.data.get('published.sendAnywhere.log')!).values;
JSON.parse(storage.data.get('published.send-anywhere.log')!).values;

// This log shows the flow started, but didn't get past the name lookup
t.deepEqual(getLogged(), ['sending {0} from cosmoshub to cosmos1whatever']);

t.log('upgrade sendAnywhere with fix');
await evalProposal(
buildProposal('@agoric/builders/scripts/testing/fix-buggy-sendAnywhere.js'),
);
// t.deepEqual(getLogged(), ['sending {0} from cosmoshub to cosmos1whatever']);

t.deepEqual(getLogged(), [
'sending {0} from cosmoshub to cosmos1whatever',
Expand All @@ -87,6 +80,11 @@ test('resume', async t => {
'completed transfer to localAccount',
]);

t.log('upgrade sendAnywhere with fix');
await evalProposal(
buildProposal('@agoric/builders/scripts/testing/upgrade-send-anywhere.js'),
);

// simulate ibc/MsgTransfer ack from remote chain, enabling `.transfer()` promise
// to resolve
await runInbound(
Expand Down
2 changes: 0 additions & 2 deletions packages/builders/scripts/testing/start-send-anywhere.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,6 @@ import {
makeTracer,
NonNullish,
} from '@agoric/internal';
import { registerKnownChainsAndAssets } from '@agoric/orchestration';
import fetchedChainInfo from '@agoric/orchestration/src/fetched-chain-info';
import { E } from '@endo/far';

/// <reference types="@agoric/vats/src/core/types-ambient"/>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import { E, Far } from '@endo/far';
* @import {Installation, Instance} from '@agoric/zoe/src/zoeService/utils.js';
*/

const trace = makeTracer('FixBuggySA', true);
const trace = makeTracer('UpgradeSA', true);

/**
* @import {start as StartFn} from '@agoric/orchestration/src/examples/send-anywhere.contract.js';
Expand All @@ -30,7 +30,7 @@ const trace = makeTracer('FixBuggySA', true);
* }} powers
* @param {...any} rest
*/
export const fixSendAnywhere = async (
export const upgradeSendAnywhere = async (
{
consume: {
agoricNames,
Expand All @@ -45,50 +45,43 @@ export const fixSendAnywhere = async (
},
{ options: { sendAnywhereRef } },
) => {
trace(fixSendAnywhere.name);
trace(upgradeSendAnywhere.name);

const saInstance = await instances.consume.sendAnywhere;
trace('saInstance', saInstance);
const saKit = await E(contractKits).get(saInstance);

const marshaller = await E(board).getReadonlyMarshaller();

// This apparently pointless wrapper is to maintain structural parity
// with the buggy core-eval's wrapper to make lookup() hang.
const agoricNamesResolves = Far('agoricNames that resolves', {
lookup: async (...args) => {
return E(agoricNames).lookup(...args);
},
});

const privateArgs = await deeplyFulfilledObject(
harden({
agoricNames: agoricNamesResolves,
agoricNames,
localchain,
marshaller,
orchestrationService: cosmosInterchainService,
storageNode: E(NonNullish(await chainStorage)).makeChildNode(
'sendAnywhere',
'send-anywhere',
),
timerService: chainTimerService,
}),
);

trace('upgrading...');
trace('ref', sendAnywhereRef);
await E(saKit.adminFacet).upgradeContract(
sendAnywhereRef.bundleID,
privateArgs,
);

trace('done');
};
harden(fixSendAnywhere);
harden(upgradeSendAnywhere);

export const getManifestForValueVow = ({ restoreRef }, { sendAnywhereRef }) => {
console.log('sendAnywhereRef', sendAnywhereRef);
return {
manifest: {
[fixSendAnywhere.name]: {
[upgradeSendAnywhere.name]: {
consume: {
agoricNames: true,
board: true,
Expand Down Expand Up @@ -120,7 +113,7 @@ export const getManifestForValueVow = ({ restoreRef }, { sendAnywhereRef }) => {
export const defaultProposalBuilder = async ({ publishRef, install }) =>
harden({
// Somewhat unorthodox, source the exports from this builder module
sourceSpec: '@agoric/builders/scripts/testing/fix-buggy-sendAnywhere.js',
sourceSpec: '@agoric/builders/scripts/testing/upgrade-send-anywhere.js',
getManifestCall: [
'getManifestForValueVow',
{
Expand All @@ -139,5 +132,5 @@ export default async (homeP, endowments) => {
const dspModule = await import('@agoric/deploy-script-support');
const { makeHelpers } = dspModule;
const { writeCoreEval } = await makeHelpers(homeP, endowments);
await writeCoreEval(fixSendAnywhere.name, defaultProposalBuilder);
await writeCoreEval(upgradeSendAnywhere.name, defaultProposalBuilder);
};
33 changes: 16 additions & 17 deletions packages/orchestration/src/examples/send-anywhere.contract.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,7 @@ import { AnyNatAmountShape } from '../typeGuards.js';
import { withOrchestration } from '../utils/start-helper.js';
import * as flows from './send-anywhere.flows.js';
import * as sharedFlows from './shared.flows.js';

const { values } = Object;
import { registerKnownChainsAndAssets } from '../utils/chain-hub-helper.js';

Check failure on line 10 in packages/orchestration/src/examples/send-anywhere.contract.js

View workflow job for this annotation

GitHub Actions / lint-rest

'registerKnownChainsAndAssets' is defined but never used. Allowed unused vars must match /^_/u

/**
* @import {Vow} from '@agoric/vow';
Expand Down Expand Up @@ -74,23 +73,23 @@ export const contract = async (
/** @type {import('@agoric/vats/src/vat-bank.js').AssetInfo[]} */ (
await E(E(privateArgs.agoricNames).lookup('vbankAsset')).values()
);
for (const chainName of ['agoric', 'cosmoshub']) {
chainHub.registerChain(chainName, fetchedChainInfo[chainName]);
}
for (const brand of values(zcf.getTerms().brands)) {
const info = assets.find(a => a.brand === brand);
if (info) {
chainHub.registerAsset(info.denom, {
// we are only registering agoric assets, so safe to use denom and
// hardcode chainName
baseDenom: info.denom,
baseName: 'agoric',
chainName: 'agoric',
brand,
});
}

/** @type {Record<string, Brand<'nat'>>} */
const brands = {};

for (const asset of assets) {
brands[asset.issuerName] = /** @type {Brand<'nat'>} */ (asset.brand);
}

// await registerKnownChainsAndAssets(
// {
// vowTools,
// chainHubAdmin: creatorFacet,
// },
// fetchedChainInfo,
// brands,
// );

const publicFacet = zone.exo(
'Send PF',
M.interface('Send PF', {
Expand Down

0 comments on commit 38ded26

Please sign in to comment.