Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor: add Zoe methods for getting assured invitation values #1474

Merged
merged 1 commit into from
Aug 15, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions packages/zoe/src/types.js
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,18 @@
* @property {(instance: Instance) => IssuerKeywordRecord} getIssuers
* @property {(instance: Instance) => BrandKeywordRecord} getBrands
* @property {(instance: Instance) => Object} getTerms
* @property {(invitation: invitation) => Promise<Instance>} getInstance
* @property {(invitation: invitation) => Promise<Installation>} getInstallation
* @property {(invitation: invitation) => Promise<InvitationDetails>}
* getInvitationDetails - return an object with the instance,
* installation, description, invitation handle, and any custom properties
* specific to the contract.
*
* @typedef {Object} InvitationDetails
* @property {Installation} installation
* @property {Instance} instance
* @property {InvitationHandle} handle
* @property {string} description
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We're going to need to capture the custom properties by doing something like this:

 * @typedef {StandardInvitationDetails & Record<string, any>} InvitationDetails

Where StandardInvitationDetails is what you have now

*/

/**
Expand Down
12 changes: 12 additions & 0 deletions packages/zoe/src/zoeService/zoe.js
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,18 @@ function makeZoe(vatAdminSvc) {
getBrands: instance => instanceToInstanceAdmin.get(instance).getBrands(),
getIssuers: instance => instanceToInstanceAdmin.get(instance).getIssuers(),
getTerms: instance => instanceToInstanceAdmin.get(instance).getTerms(),
getInstance: invitation =>
E(invitationKit.issuer)
.getAmountOf(invitation)
.then(amount => amount.value[0].instance),
getInstallation: invitation =>
E(invitationKit.issuer)
.getAmountOf(invitation)
.then(amount => amount.value[0].installation),
getInvitationDetails: invitation =>
E(invitationKit.issuer)
.getAmountOf(invitation)
.then(amount => amount.value[0]),
startInstance: async (
installation,
uncleanIssuerKeywordRecord = harden({}),
Expand Down
48 changes: 15 additions & 33 deletions packages/zoe/test/swingsetTests/zoe/vat-bob.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ import { assert, details } from '@agoric/assert';
import { sameStructure } from '@agoric/same-structure';
import { makeLocalAmountMath } from '@agoric/ertp';
import { showPurseBalance, setupIssuers } from '../helpers';
import { getInvitationFields } from '../../zoeTestHelpers';

const build = async (log, zoe, issuers, payments, installations, timer) => {
const {
Expand All @@ -22,10 +21,8 @@ const build = async (log, zoe, issuers, payments, installations, timer) => {
return harden({
doAutomaticRefund: async inviteP => {
const invite = await inviteP;
const { instance, installation } = await getInvitationFields(
inviteIssuer,
invite,
);
const instance = await E(zoe).getInstance(invite);
const installation = await E(zoe).getInstallation(invite);
const exclInvite = await E(inviteIssuer).claim(invite);

const issuerKeywordRecord = await E(zoe).getIssuers(instance);
Expand Down Expand Up @@ -72,10 +69,8 @@ const build = async (log, zoe, issuers, payments, installations, timer) => {
doCoveredCall: async inviteP => {
// Bob claims all with the Zoe inviteIssuer
const invite = await inviteP;
const { instance, installation } = await getInvitationFields(
inviteIssuer,
invite,
);
const instance = await E(zoe).getInstance(invite);
const installation = await E(zoe).getInstallation(invite);
const exclInvite = await E(inviteIssuer).claim(invite);
const issuerKeywordRecord = await E(zoe).getIssuers(instance);

Expand Down Expand Up @@ -139,10 +134,8 @@ const build = async (log, zoe, issuers, payments, installations, timer) => {
doSwapForOption: async (inviteP, daveP) => {
// Bob claims all with the Zoe inviteIssuer
const invite = await inviteP;
const { instance, installation } = await getInvitationFields(
inviteIssuer,
invite,
);
const instance = await E(zoe).getInstance(invite);
const installation = await E(zoe).getInstallation(invite);
const exclInvite = await E(inviteIssuer).claim(invite);

const { UnderlyingAsset, StrikePrice } = await E(zoe).getIssuers(
Expand Down Expand Up @@ -226,10 +219,8 @@ const build = async (log, zoe, issuers, payments, installations, timer) => {
},
doPublicAuction: async inviteP => {
const invite = await inviteP;
const { instance, installation } = await getInvitationFields(
inviteIssuer,
invite,
);
const instance = await E(zoe).getInstance(invite);
const installation = await E(zoe).getInstallation(invite);
const terms = await E(zoe).getTerms(instance);
const issuerKeywordRecord = await E(zoe).getIssuers(instance);
const exclInvite = await E(inviteIssuer).claim(invite);
Expand Down Expand Up @@ -277,10 +268,8 @@ const build = async (log, zoe, issuers, payments, installations, timer) => {
},
doAtomicSwap: async inviteP => {
const invite = await inviteP;
const { instance, installation } = await getInvitationFields(
inviteIssuer,
invite,
);
const instance = await E(zoe).getInstance(invite);
const installation = await E(zoe).getInstallation(invite);
const issuerKeywordRecord = await E(zoe).getIssuers(instance);
const exclInvite = await E(inviteIssuer).claim(invite);
const { value: inviteValue } = await E(inviteIssuer).getAmountOf(
Expand Down Expand Up @@ -334,10 +323,8 @@ const build = async (log, zoe, issuers, payments, installations, timer) => {

doSimpleExchange: async inviteP => {
const invite = await inviteP;
const { installation, instance } = await getInvitationFields(
inviteIssuer,
invite,
);
const instance = await E(zoe).getInstance(invite);
const installation = await E(zoe).getInstallation(invite);
const exclInvite = await E(inviteIssuer).claim(invite);
const issuerKeywordRecord = await E(zoe).getIssuers(instance);

Expand Down Expand Up @@ -380,10 +367,8 @@ const build = async (log, zoe, issuers, payments, installations, timer) => {
},
doSimpleExchangeUpdates: async (inviteP, m, s) => {
const invite = await E(inviteIssuer).claim(inviteP);
const { installation, instance } = await getInvitationFields(
inviteIssuer,
invite,
);
const instance = await E(zoe).getInstance(invite);
const installation = await E(zoe).getInstallation(invite);
const issuerKeywordRecord = await E(zoe).getIssuers(instance);

assert(
Expand Down Expand Up @@ -433,10 +418,7 @@ const build = async (log, zoe, issuers, payments, installations, timer) => {
doAutoswap: async instance => {
const publicFacet = await E(zoe).getPublicFacet(instance);
const buyBInvite = await E(publicFacet).makeSwapInvite();
const { installation } = await getInvitationFields(
inviteIssuer,
buyBInvite,
);
const installation = await E(zoe).getInstallation(buyBInvite);
const issuerKeywordRecord = await E(zoe).getIssuers(instance);
assert(
installation === installations.autoswap,
Expand Down
7 changes: 2 additions & 5 deletions packages/zoe/test/swingsetTests/zoe/vat-carol.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ import { E } from '@agoric/eventual-send';
import { assert, details } from '@agoric/assert';
import { sameStructure } from '@agoric/same-structure';
import { showPurseBalance, setupIssuers } from '../helpers';
import { getInvitationFields } from '../../zoeTestHelpers';

const build = async (log, zoe, issuers, payments, installations) => {
const { moola, simoleans, purses } = await setupIssuers(zoe, issuers);
Expand All @@ -14,10 +13,8 @@ const build = async (log, zoe, issuers, payments, installations) => {
return harden({
doPublicAuction: async inviteP => {
const invite = await E(inviteIssuer).claim(inviteP);
const { instance, installation } = await getInvitationFields(
inviteIssuer,
invite,
);
const instance = await E(zoe).getInstance(invite);
const installation = await E(zoe).getInstallation(invite);
const terms = await E(zoe).getTerms(instance);
const issuerKeywordRecord = await E(zoe).getIssuers(instance);
const { value: inviteValue } = await E(inviteIssuer).getAmountOf(invite);
Expand Down
13 changes: 4 additions & 9 deletions packages/zoe/test/swingsetTests/zoe/vat-dave.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ import { E } from '@agoric/eventual-send';
import { assert, details } from '@agoric/assert';
import { sameStructure } from '@agoric/same-structure';
import { showPurseBalance, setupIssuers } from '../helpers';
import { getInvitationFields } from '../../zoeTestHelpers';

const build = async (log, zoe, issuers, payments, installations, timer) => {
const {
Expand All @@ -21,10 +20,8 @@ const build = async (log, zoe, issuers, payments, installations, timer) => {
return harden({
doPublicAuction: async inviteP => {
const invite = await inviteP;
const { instance, installation } = await getInvitationFields(
inviteIssuer,
invite,
);
const instance = await E(zoe).getInstance(invite);
const installation = await E(zoe).getInstallation(invite);
const issuerKeywordRecord = await E(zoe).getIssuers(instance);
const exclInvite = await E(inviteIssuer).claim(invite);
const { value: inviteValue } = await E(inviteIssuer).getAmountOf(
Expand Down Expand Up @@ -76,10 +73,8 @@ const build = async (log, zoe, issuers, payments, installations, timer) => {
// Dave is looking to buy the option to trade his 7 simoleans for
// 3 moola, and is willing to pay 1 buck for the option.
const invite = await inviteP;
const { instance, installation } = await getInvitationFields(
inviteIssuer,
invite,
);
const instance = await E(zoe).getInstance(invite);
const installation = await E(zoe).getInstallation(invite);
const issuerKeywordRecord = await E(zoe).getIssuers(instance);
const exclInvite = await E(inviteIssuer).claim(invite);
const { value: inviteValue } = await E(inviteIssuer).getAmountOf(
Expand Down
14 changes: 3 additions & 11 deletions packages/zoe/test/unitTests/contracts/test-atomicSwap.js
Original file line number Diff line number Diff line change
Expand Up @@ -85,10 +85,7 @@ test('zoe - atomicSwap', async t => {
// transform an untrusted invitation that Alice also has access to, to
// an
const invitation = await invitationIssuer.claim(untrustedInvitation);

const {
value: [invitationValue],
} = await invitationIssuer.getAmountOf(invitation);
const invitationValue = await E(zoe).getInvitationDetails(invitation);

t.equals(
invitationValue.installation,
Expand Down Expand Up @@ -248,10 +245,7 @@ test('zoe - non-fungible atomicSwap', async t => {
// transform an untrusted invitation that Alice also has access to, to
// an
const invitation = await invitationIssuer.claim(untrustedInvitation);

const {
value: [invitationValue],
} = await invitationIssuer.getAmountOf(invitation);
const invitationValue = await E(zoe).getInvitationDetails(invitation);

t.equals(
invitationValue.installation,
Expand Down Expand Up @@ -383,9 +377,7 @@ test('zoe - atomicSwap like-for-like', async t => {

const bobInviteP = E(aliceSeat).getOfferResult();
const bobExclusiveInvite = await invitationIssuer.claim(bobInviteP);
const {
value: [bobInviteValue],
} = await invitationIssuer.getAmountOf(bobExclusiveInvite);
const bobInviteValue = await E(zoe).getInvitationDetails(bobExclusiveInvite);

const bobIssuers = zoe.getIssuers(bobInviteValue.instance);

Expand Down
18 changes: 5 additions & 13 deletions packages/zoe/test/unitTests/contracts/test-autoswap.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,7 @@ import { makeLocalAmountMath } from '@agoric/ertp';

import { setup } from '../setupBasicMints';
import { installationPFromSource } from '../installFromSource';
import {
assertOfferResult,
assertPayoutAmount,
getInvitationFields,
} from '../../zoeTestHelpers';
import { assertOfferResult, assertPayoutAmount } from '../../zoeTestHelpers';

const autoswap = `${__dirname}/../../../src/contracts/autoswap`;

Expand Down Expand Up @@ -86,10 +82,8 @@ test('autoSwap with valid offers', async t => {

// Bob claims it
const bobExclInvite = await inviteIssuer.claim(bobInvite);
const {
installation: bobInstallation,
instance: bobInstance,
} = await getInvitationFields(inviteIssuer, bobExclInvite);
const bobInstance = await E(zoe).getInstance(bobExclInvite);
const bobInstallation = await E(zoe).getInstallation(bobExclInvite);
t.equals(bobInstallation, installation, `installation`);
const bobAutoswap = E(zoe).getPublicFacet(bobInstance);

Expand Down Expand Up @@ -283,10 +277,8 @@ test('autoSwap - test fee', async t => {

// Bob claims it
const bobExclInvite = await inviteIssuer.claim(bobInvite);
const {
installation: bobInstallation,
instance: bobInstance,
} = await getInvitationFields(inviteIssuer, bobExclInvite);
const bobInstance = await E(zoe).getInstance(bobExclInvite);
const bobInstallation = await E(zoe).getInstallation(bobExclInvite);
t.equals(bobInstallation, bobInstallation);

const bobAutoswap = E(zoe).getPublicFacet(bobInstance);
Expand Down
12 changes: 3 additions & 9 deletions packages/zoe/test/unitTests/contracts/test-barter.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,7 @@ import { E } from '@agoric/eventual-send';

import { setup } from '../setupBasicMints';
import { installationPFromSource } from '../installFromSource';
import {
assertPayoutAmount,
assertOfferResult,
getInvitationFields,
} from '../../zoeTestHelpers';
import { assertPayoutAmount, assertOfferResult } from '../../zoeTestHelpers';

const barter = `${__dirname}/../../../src/contracts/barterExchange`;

Expand Down Expand Up @@ -67,10 +63,8 @@ test('barter with valid offers', async t => {
const bobInvitation = await E(
E(zoe).getPublicFacet(instance),
).makeInvitation();
const {
installation: bobInstallation,
instance: bobInstance,
} = await getInvitationFields(invitationIssuer, bobInvitation);
const bobInstance = await E(zoe).getInstance(bobInvitation);
const bobInstallation = await E(zoe).getInstallation(bobInvitation);

// 4: Bob decides to join.
const bobExclusiveInvitation = await invitationIssuer.claim(bobInvitation);
Expand Down
20 changes: 5 additions & 15 deletions packages/zoe/test/unitTests/contracts/test-coveredCall.js
Original file line number Diff line number Diff line change
Expand Up @@ -97,9 +97,7 @@ test('zoe - coveredCall', async t => {
untrustedInvitation,
);

const {
value: [invitationValue],
} = await invitationIssuer.getAmountOf(invitation);
const invitationValue = await E(zoe).getInvitationDetails(invitation);

t.equals(
invitationValue.installation,
Expand Down Expand Up @@ -246,9 +244,7 @@ test(`zoe - coveredCall - alice's deadline expires, cancelling alice and bob`, a

const invitationIssuer = zoe.getInvitationIssuer();
const bobExclOption = await invitationIssuer.claim(optionP);
const {
value: [optionValue],
} = await invitationIssuer.getAmountOf(bobExclOption);
const optionValue = await E(zoe).getInvitationDetails(bobExclOption);
t.equal(optionValue.installation, coveredCallInstallation);
t.equal(optionValue.description, 'exerciseOption');
t.ok(moolaR.amountMath.isEqual(optionValue.underlyingAsset, moola(3)));
Expand Down Expand Up @@ -648,9 +644,7 @@ test('zoe - coveredCall with coveredCall for invitation', async t => {
const invitationIssuer = zoe.getInvitationIssuer();
const invitationAmountMath = await makeLocalAmountMath(invitationIssuer);
const bobExclOption = await invitationIssuer.claim(optionP);
const {
value: [optionValue],
} = await invitationIssuer.getAmountOf(bobExclOption);
const optionValue = await E(zoe).getInvitationDetails(bobExclOption);
t.equal(optionValue.installation, coveredCallInstallation);
t.equal(optionValue.description, 'exerciseOption');
t.ok(moolaR.amountMath.isEqual(optionValue.underlyingAsset, moola(3)));
Expand Down Expand Up @@ -701,9 +695,7 @@ test('zoe - coveredCall with coveredCall for invitation', async t => {
// 3 moola, and is willing to pay 1 buck for the option. He
// checks that this invitation matches what he wants
const daveExclOption = await invitationIssuer.claim(invitationForDaveP);
const {
value: [daveOptionValue],
} = await invitationIssuer.getAmountOf(daveExclOption);
const daveOptionValue = await E(zoe).getInvitationDetails(daveExclOption);
t.equal(daveOptionValue.installation, coveredCallInstallation);
t.equal(daveOptionValue.description, 'exerciseOption');
t.ok(bucksR.amountMath.isEqual(daveOptionValue.strikePrice, bucks(1)));
Expand Down Expand Up @@ -908,9 +900,7 @@ test('zoe - coveredCall non-fungible', async t => {

const invitationIssuer = zoe.getInvitationIssuer();
const bobExclOption = await invitationIssuer.claim(optionP);
const {
value: [optionValue],
} = await invitationIssuer.getAmountOf(bobExclOption);
const optionValue = await E(zoe).getInvitationDetails(bobExclOption);
t.equal(optionValue.installation, coveredCallInstallation);
t.equal(optionValue.description, 'exerciseOption');
t.ok(
Expand Down
Loading