@agoric/inter-protocol 0.16.2-dev-857e650.0 → 0.16.2-dev-fb922d3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/bundle-auctioneer-js-meta.json +181 -181
- package/bundles/bundle-auctioneer.js +1 -1
- package/bundles/bundle-econCommitteeCharter-js-meta.json +129 -129
- package/bundles/bundle-econCommitteeCharter.js +1 -1
- package/bundles/bundle-feeDistributor-js-meta.json +115 -115
- package/bundles/bundle-feeDistributor.js +1 -1
- package/bundles/bundle-fluxAggregatorKit-js-meta.json +169 -169
- package/bundles/bundle-fluxAggregatorKit.js +1 -1
- package/bundles/bundle-psm-js-meta.json +167 -167
- package/bundles/bundle-psm.js +1 -1
- package/bundles/bundle-reserve-js-meta.json +169 -169
- package/bundles/bundle-reserve.js +1 -1
- package/bundles/bundle-scaledPriceAuthority-js-meta.json +142 -142
- package/bundles/bundle-scaledPriceAuthority.js +1 -1
- package/bundles/bundle-vaultFactory-js-meta.json +200 -200
- package/bundles/bundle-vaultFactory.js +1 -1
- package/package.json +17 -17
- package/scripts/deploy-contracts.js +12 -2
- package/scripts/init-core.js +5 -6
- package/scripts/manual-price-feed.js +20 -15
- package/src/auction/auctionBook.d.ts +16 -13
- package/src/auction/auctionBook.d.ts.map +1 -1
- package/src/auction/auctionBook.js +68 -56
- package/src/auction/auctioneer.d.ts.map +1 -1
- package/src/auction/auctioneer.js +54 -42
- package/src/auction/offerBook.d.ts.map +1 -1
- package/src/auction/offerBook.js +12 -11
- package/src/auction/params.d.ts +1 -1
- package/src/auction/params.d.ts.map +1 -1
- package/src/auction/params.js +3 -5
- package/src/auction/scheduleMath.d.ts.map +1 -1
- package/src/auction/scheduleMath.js +13 -13
- package/src/auction/scheduler.d.ts +4 -4
- package/src/auction/scheduler.d.ts.map +1 -1
- package/src/auction/scheduler.js +20 -20
- package/src/auction/sortedOffers.d.ts.map +1 -1
- package/src/auction/sortedOffers.js +8 -7
- package/src/auction/util.d.ts +1 -1
- package/src/auction/util.js +4 -4
- package/src/clientSupport.d.ts +65 -27
- package/src/clientSupport.d.ts.map +1 -1
- package/src/clientSupport.js +92 -34
- package/src/contractSupport.js +5 -5
- package/src/econCommitteeCharter.d.ts +4 -6
- package/src/econCommitteeCharter.d.ts.map +1 -1
- package/src/econCommitteeCharter.js +7 -11
- package/src/feeDistributor.d.ts +8 -24
- package/src/feeDistributor.d.ts.map +1 -1
- package/src/feeDistributor.js +26 -28
- package/src/interest.d.ts +1 -0
- package/src/interest.d.ts.map +1 -1
- package/src/interest.js +22 -15
- package/src/price/fluxAggregatorContract.d.ts +1 -0
- package/src/price/fluxAggregatorContract.d.ts.map +1 -1
- package/src/price/fluxAggregatorContract.js +24 -19
- package/src/price/fluxAggregatorKit.d.ts +23 -18
- package/src/price/fluxAggregatorKit.d.ts.map +1 -1
- package/src/price/fluxAggregatorKit.js +47 -32
- package/src/price/priceOracleKit.d.ts +2 -8
- package/src/price/priceOracleKit.d.ts.map +1 -1
- package/src/price/priceOracleKit.js +11 -13
- package/src/price/roundsManager.d.ts +28 -46
- package/src/price/roundsManager.d.ts.map +1 -1
- package/src/price/roundsManager.js +51 -63
- package/src/proposals/committee-proposal.d.ts.map +1 -1
- package/src/proposals/committee-proposal.js +5 -9
- package/src/proposals/core-proposal.d.ts.map +1 -1
- package/src/proposals/core-proposal.js +3 -5
- package/src/proposals/econ-behaviors.d.ts.map +1 -1
- package/src/proposals/econ-behaviors.js +55 -28
- package/src/proposals/price-feed-proposal.d.ts.map +1 -1
- package/src/proposals/price-feed-proposal.js +30 -11
- package/src/proposals/startPSM.d.ts.map +1 -1
- package/src/proposals/startPSM.js +24 -17
- package/src/proposals/utils.d.ts +1 -1
- package/src/proposals/utils.d.ts.map +1 -1
- package/src/proposals/utils.js +26 -7
- package/src/psm/psm.d.ts +14 -22
- package/src/psm/psm.d.ts.map +1 -1
- package/src/psm/psm.js +34 -31
- package/src/reserve/assetReserve.d.ts.map +1 -1
- package/src/reserve/assetReserve.js +16 -13
- package/src/reserve/assetReserveKit.d.ts +14 -26
- package/src/reserve/assetReserveKit.d.ts.map +1 -1
- package/src/reserve/assetReserveKit.js +13 -21
- package/src/tokens.d.ts +3 -3
- package/src/tokens.d.ts.map +1 -1
- package/src/tokens.js +5 -5
- package/src/typeGuards.d.ts +1 -3
- package/src/typeGuards.d.ts.map +1 -1
- package/src/typeGuards.js +1 -3
- package/src/vaultFactory/liquidation.d.ts.map +1 -1
- package/src/vaultFactory/liquidation.js +29 -16
- package/src/vaultFactory/math.d.ts.map +1 -1
- package/src/vaultFactory/math.js +8 -9
- package/src/vaultFactory/orderedVaultStore.d.ts.map +1 -1
- package/src/vaultFactory/orderedVaultStore.js +6 -9
- package/src/vaultFactory/params.d.ts +1 -4
- package/src/vaultFactory/params.d.ts.map +1 -1
- package/src/vaultFactory/params.js +24 -18
- package/src/vaultFactory/prioritizedVaults.js +2 -2
- package/src/vaultFactory/proceeds.d.ts +3 -3
- package/src/vaultFactory/proceeds.d.ts.map +1 -1
- package/src/vaultFactory/proceeds.js +24 -18
- package/src/vaultFactory/storeUtils.d.ts +2 -6
- package/src/vaultFactory/storeUtils.d.ts.map +1 -1
- package/src/vaultFactory/storeUtils.js +8 -12
- package/src/vaultFactory/types.d.ts +16 -11
- package/src/vaultFactory/types.d.ts.map +1 -1
- package/src/vaultFactory/types.js +37 -27
- package/src/vaultFactory/vault.d.ts +103 -159
- package/src/vaultFactory/vault.d.ts.map +1 -1
- package/src/vaultFactory/vault.js +84 -85
- package/src/vaultFactory/vaultDirector.d.ts +21 -43
- package/src/vaultFactory/vaultDirector.d.ts.map +1 -1
- package/src/vaultFactory/vaultDirector.js +30 -40
- package/src/vaultFactory/vaultFactory.d.ts +8 -6
- package/src/vaultFactory/vaultFactory.d.ts.map +1 -1
- package/src/vaultFactory/vaultFactory.js +13 -11
- package/src/vaultFactory/vaultHolder.d.ts +12 -16
- package/src/vaultFactory/vaultHolder.d.ts.map +1 -1
- package/src/vaultFactory/vaultHolder.js +7 -12
- package/src/vaultFactory/vaultKit.d.ts +1 -1
- package/src/vaultFactory/vaultKit.d.ts.map +1 -1
- package/src/vaultFactory/vaultKit.js +3 -2
- package/src/vaultFactory/vaultManager.d.ts +454 -68
- package/src/vaultFactory/vaultManager.d.ts.map +1 -1
- package/src/vaultFactory/vaultManager.js +120 -110
|
@@ -18,6 +18,7 @@ import { prepareFluxAggregatorKit } from './fluxAggregatorKit.js';
|
|
|
18
18
|
const trace = makeTracer('FluxAgg', false);
|
|
19
19
|
/**
|
|
20
20
|
* @typedef {import('@agoric/vat-data').Baggage} Baggage
|
|
21
|
+
*
|
|
21
22
|
* @typedef {import('@agoric/time/src/types').TimerService} TimerService
|
|
22
23
|
*/
|
|
23
24
|
|
|
@@ -39,23 +40,25 @@ export const privateArgsShape = M.splitRecord(
|
|
|
39
40
|
);
|
|
40
41
|
|
|
41
42
|
/**
|
|
42
|
-
* PriceAuthority for their median. Unlike the simpler `priceAggregator.js`,
|
|
43
|
-
* the
|
|
43
|
+
* PriceAuthority for their median. Unlike the simpler `priceAggregator.js`,
|
|
44
|
+
* this approximates the _Node Operator Aggregation_ logic of [Chainlink price
|
|
44
45
|
* feeds](https://blog.chain.link/levels-of-data-aggregation-in-chainlink-price-feeds/).
|
|
45
46
|
*
|
|
46
|
-
* @param {ZCF<
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
*
|
|
47
|
+
* @param {ZCF<
|
|
48
|
+
* import('./fluxAggregatorKit.js').ChainlinkConfig & {
|
|
49
|
+
* timer: TimerService;
|
|
50
|
+
* brandIn: Brand<'nat'>;
|
|
51
|
+
* brandOut: Brand<'nat'>;
|
|
52
|
+
* description: string;
|
|
53
|
+
* unitAmountIn?: Amount<'nat'>;
|
|
54
|
+
* }
|
|
55
|
+
* >} zcf
|
|
53
56
|
* @param {{
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
*
|
|
57
|
+
* highPrioritySendersManager?: import('@agoric/internal/src/priority-senders.js').PrioritySendersManager;
|
|
58
|
+
* initialPoserInvitation: Invitation;
|
|
59
|
+
* marshaller: ERef<Marshaller>;
|
|
60
|
+
* namesByAddressAdmin: ERef<import('@agoric/vats').NameAdmin>;
|
|
61
|
+
* storageNode: StorageNode;
|
|
59
62
|
* }} privateArgs
|
|
60
63
|
* @param {Baggage} baggage
|
|
61
64
|
*/
|
|
@@ -151,20 +154,22 @@ export const prepare = async (zcf, privateArgs, baggage) => {
|
|
|
151
154
|
|
|
152
155
|
const governedApis = {
|
|
153
156
|
/**
|
|
154
|
-
* Add the specified oracles. May partially fail, such that some oracles are
|
|
157
|
+
* Add the specified oracles. May partially fail, such that some oracles are
|
|
158
|
+
* added and others aren't.
|
|
155
159
|
*
|
|
156
160
|
* @param {string[]} addrs
|
|
157
|
-
* @returns {Promise<
|
|
161
|
+
* @returns {Promise<PromiseSettledResult<string>[]>}
|
|
158
162
|
*/
|
|
159
163
|
addOracles: addrs => {
|
|
160
164
|
return Promise.allSettled(addrs.map(addOracle));
|
|
161
165
|
},
|
|
162
166
|
/**
|
|
163
|
-
* Remove the specified oracles. May partially fail, such that some oracles
|
|
164
|
-
* If the oracle was never part of the set
|
|
167
|
+
* Remove the specified oracles. May partially fail, such that some oracles
|
|
168
|
+
* are removed and others aren't. If the oracle was never part of the set
|
|
169
|
+
* that's a PromiseRejectedResult
|
|
165
170
|
*
|
|
166
171
|
* @param {string[]} addrs
|
|
167
|
-
* @returns {Promise<
|
|
172
|
+
* @returns {Promise<PromiseSettledResult<string>[]>}
|
|
168
173
|
*/
|
|
169
174
|
removeOracles: addrs => {
|
|
170
175
|
return Promise.allSettled(addrs.map(removeOracle));
|
|
@@ -10,9 +10,9 @@ export function prepareFluxAggregatorKit(baggage: MapStore<string, unknown>, zcf
|
|
|
10
10
|
* An "oracle invitation" is an invitation to be able to submit data to
|
|
11
11
|
* include in the priceAggregator's results.
|
|
12
12
|
*
|
|
13
|
-
* The offer result from this invitation is a OracleAdmin, which can be
|
|
14
|
-
* directly to manage the price submissions as well as to terminate
|
|
15
|
-
* relationship.
|
|
13
|
+
* The offer result from this invitation is a OracleAdmin, which can be
|
|
14
|
+
* used directly to manage the price submissions as well as to terminate
|
|
15
|
+
* the relationship.
|
|
16
16
|
*
|
|
17
17
|
* @param {string} oracleId unique per contract instance
|
|
18
18
|
*/
|
|
@@ -39,8 +39,9 @@ export function prepareFluxAggregatorKit(baggage: MapStore<string, unknown>, zcf
|
|
|
39
39
|
};
|
|
40
40
|
}>>;
|
|
41
41
|
/**
|
|
42
|
-
* a method to provide all current info oracleStatuses need. Intended
|
|
43
|
-
* only to be callable by oracleStatuses. Not for use by contracts
|
|
42
|
+
* a method to provide all current info oracleStatuses need. Intended
|
|
43
|
+
* only only to be callable by oracleStatuses. Not for use by contracts
|
|
44
|
+
* to read state.
|
|
44
45
|
*
|
|
45
46
|
* @param {string} oracleId
|
|
46
47
|
* @param {bigint} queriedRoundId
|
|
@@ -61,9 +62,9 @@ export function prepareFluxAggregatorKit(baggage: MapStore<string, unknown>, zcf
|
|
|
61
62
|
* An "oracle invitation" is an invitation to be able to submit data to
|
|
62
63
|
* include in the priceAggregator's results.
|
|
63
64
|
*
|
|
64
|
-
* The offer result from this invitation is a OracleAdmin, which can be
|
|
65
|
-
* directly to manage the price submissions as well as to terminate
|
|
66
|
-
* relationship.
|
|
65
|
+
* The offer result from this invitation is a OracleAdmin, which can be
|
|
66
|
+
* used directly to manage the price submissions as well as to terminate
|
|
67
|
+
* the relationship.
|
|
67
68
|
*
|
|
68
69
|
* @param {string} oracleId unique per contract instance
|
|
69
70
|
*/
|
|
@@ -90,8 +91,9 @@ export function prepareFluxAggregatorKit(baggage: MapStore<string, unknown>, zcf
|
|
|
90
91
|
};
|
|
91
92
|
}>>;
|
|
92
93
|
/**
|
|
93
|
-
* a method to provide all current info oracleStatuses need. Intended
|
|
94
|
-
* only to be callable by oracleStatuses. Not for use by contracts
|
|
94
|
+
* a method to provide all current info oracleStatuses need. Intended
|
|
95
|
+
* only only to be callable by oracleStatuses. Not for use by contracts
|
|
96
|
+
* to read state.
|
|
95
97
|
*
|
|
96
98
|
* @param {string} oracleId
|
|
97
99
|
* @param {bigint} queriedRoundId
|
|
@@ -110,7 +112,8 @@ export function prepareFluxAggregatorKit(baggage: MapStore<string, unknown>, zcf
|
|
|
110
112
|
export type Baggage = import('@agoric/vat-data').Baggage;
|
|
111
113
|
export type Timestamp = import('@agoric/time/src/types').Timestamp;
|
|
112
114
|
/**
|
|
113
|
-
* //
|
|
115
|
+
* //
|
|
116
|
+
* TODO: use RelativeTime, not RelativeTimeValue
|
|
114
117
|
*/
|
|
115
118
|
export type RelativeTime = import('@agoric/time/src/types').RelativeTime;
|
|
116
119
|
export type RelativeTimeValue = import('@agoric/time/src/types').RelativeTimeValue;
|
|
@@ -127,22 +130,24 @@ export type ChainlinkConfig = {
|
|
|
127
130
|
maxSubmissionCount: number;
|
|
128
131
|
minSubmissionCount: number;
|
|
129
132
|
/**
|
|
130
|
-
* the number of rounds an Oracle has to wait
|
|
133
|
+
* the number of rounds an Oracle has to wait
|
|
134
|
+
* before they can initiate a round
|
|
131
135
|
*/
|
|
132
136
|
restartDelay: bigint;
|
|
133
137
|
/**
|
|
134
|
-
* an immutable check for a lower bound of
|
|
135
|
-
* submission values are accepted from an oracle
|
|
138
|
+
* an immutable check for a lower bound of
|
|
139
|
+
* what submission values are accepted from an oracle
|
|
136
140
|
*/
|
|
137
141
|
minSubmissionValue: number;
|
|
138
142
|
/**
|
|
139
|
-
* an immutable check for an upper bound
|
|
140
|
-
* submission values are accepted from an oracle
|
|
143
|
+
* an immutable check for an upper bound
|
|
144
|
+
* of what submission values are accepted from an oracle
|
|
141
145
|
*/
|
|
142
146
|
maxSubmissionValue: number;
|
|
143
147
|
/**
|
|
144
|
-
* the number of seconds after the previous round
|
|
145
|
-
* allowed to lapse before allowing an oracle to skip an unfinished
|
|
148
|
+
* the number of seconds after the previous round
|
|
149
|
+
* that allowed to lapse before allowing an oracle to skip an unfinished
|
|
150
|
+
* round
|
|
146
151
|
*/
|
|
147
152
|
timeout: number;
|
|
148
153
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fluxAggregatorKit.d.ts","sourceRoot":"","sources":["fluxAggregatorKit.js"],"names":[],"mappings":"AAsBA,yDAA0D;
|
|
1
|
+
{"version":3,"file":"fluxAggregatorKit.d.ts","sourceRoot":"","sources":["fluxAggregatorKit.js"],"names":[],"mappings":"AAsBA,yDAA0D;AAoEnD;WAZO,YAAY;aACV,MAAM,KAAK,CAAC;cACX,MAAM,KAAK,CAAC;;mBAIlB,YAAY,YACZ,OAAO,oBAAoB,EAAE,QAAQ,eACrC,WAAW,yBACX,MAAM,WAAW,GAAG,CAAC,gBACrB,OAAO,6CAA6C,EAAE,YAAY;;QAmJrE;;;;;;;;;WASG;uCADQ,MAAM;QAsCjB,+BAA+B;+BAAnB,MAAM;;QAalB,+BAA+B;6BAAnB,MAAM;;;;;;;;;;;;;;;;;QAoBlB;;;;;;;;WAQG;mCAHQ,MAAM,kBACN,MAAM,GACJ,QAAQ,UAAU,CAAC;;;;;;;;;;;QAtFhC;;;;;;;;;WASG;uCADQ,MAAM;QAsCjB,+BAA+B;+BAAnB,MAAM;;QAalB,+BAA+B;6BAAnB,MAAM;;;;;;;;;;;;;;;;;QAoBlB;;;;;;;;WAQG;mCAHQ,MAAM,kBACN,MAAM,GACJ,QAAQ,UAAU,CAAC;;;;;;;;;IAqDvC;sBA7VY,OAAO,kBAAkB,EAAE,OAAO;wBAElC,OAAO,wBAAwB,EAAE,SAAS;;;;;2BAE1C,OAAO,wBAAwB,EAAE,YAAY;gCAG7C,OAAO,wBAAwB,EAAE,iBAAiB;2BAElD,OAAO,wBAAwB,EAAE,YAAY;;8BAQ5C,OAAO;oBACP,MAAM;sBACN,MAAM;eACN,SAAS;kBACT,MAAM;iBACN,MAAM;;;wBAMN,MAAM;wBACN,MAAM;;;;;kBACN,MAAM;;;;;wBAEN,MAAM;;;;;wBAEN,MAAM;;;;;;aAEN,MAAM;;gCA2TN,WAAW,QAAQ,WAAW,+BAA+B,CAAC,CAAC,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @file
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
* @file Adaptation of Chainlink algorithm to the Agoric platform. Modeled on
|
|
3
|
+
* https://github.com/smartcontractkit/chainlink/blob/master/contracts/src/v0.6/FluxAggregator.sol
|
|
4
|
+
* (version?)
|
|
5
5
|
*/
|
|
6
6
|
import { AmountMath } from '@agoric/ertp';
|
|
7
7
|
import { assertAllDefined, makeTracer } from '@agoric/internal';
|
|
@@ -24,10 +24,14 @@ export const INVITATION_MAKERS_DESC = 'oracle invitation';
|
|
|
24
24
|
|
|
25
25
|
/**
|
|
26
26
|
* @typedef {import('@agoric/vat-data').Baggage} Baggage
|
|
27
|
+
*
|
|
27
28
|
* @typedef {import('@agoric/time/src/types').Timestamp} Timestamp
|
|
28
|
-
*
|
|
29
|
-
*
|
|
29
|
+
*
|
|
30
|
+
* @typedef {import('@agoric/time/src/types').RelativeTime} RelativeTime //
|
|
31
|
+
* TODO: use RelativeTime, not RelativeTimeValue
|
|
32
|
+
*
|
|
30
33
|
* @typedef {import('@agoric/time/src/types').RelativeTimeValue} RelativeTimeValue
|
|
34
|
+
*
|
|
31
35
|
* @typedef {import('@agoric/time/src/types').TimerService} TimerService
|
|
32
36
|
*/
|
|
33
37
|
|
|
@@ -49,30 +53,35 @@ const priceDescriptionFromQuote = quote => quote.quoteAmount.value[0];
|
|
|
49
53
|
* @typedef {object} ChainlinkConfig
|
|
50
54
|
* @property {number} maxSubmissionCount
|
|
51
55
|
* @property {number} minSubmissionCount
|
|
52
|
-
* @property {bigint} restartDelay the number of rounds an Oracle has to wait
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
*
|
|
56
|
+
* @property {bigint} restartDelay the number of rounds an Oracle has to wait
|
|
57
|
+
* before they can initiate a round
|
|
58
|
+
* @property {number} minSubmissionValue an immutable check for a lower bound of
|
|
59
|
+
* what submission values are accepted from an oracle
|
|
60
|
+
* @property {number} maxSubmissionValue an immutable check for an upper bound
|
|
61
|
+
* of what submission values are accepted from an oracle
|
|
62
|
+
* @property {number} timeout the number of seconds after the previous round
|
|
63
|
+
* that allowed to lapse before allowing an oracle to skip an unfinished
|
|
64
|
+
* round
|
|
59
65
|
*/
|
|
60
66
|
|
|
61
67
|
/**
|
|
62
|
-
* Returns a maker for a single durable FluxAggregatorKit, closed over the
|
|
68
|
+
* Returns a maker for a single durable FluxAggregatorKit, closed over the
|
|
69
|
+
* prepare() arguments.
|
|
63
70
|
*
|
|
64
71
|
* The kit aggregates price inputs to produce a PriceAuthority. Unlike the
|
|
65
|
-
* simpler `priceAggregator.js`, this approximates the
|
|
66
|
-
*
|
|
72
|
+
* simpler `priceAggregator.js`, this approximates the _Node Operator
|
|
73
|
+
* Aggregation_ logic of [Chainlink price
|
|
67
74
|
* feeds](https://blog.chain.link/levels-of-data-aggregation-in-chainlink-price-feeds/).
|
|
68
75
|
*
|
|
69
76
|
* @param {Baggage} baggage
|
|
70
|
-
* @param {ZCF<
|
|
71
|
-
*
|
|
72
|
-
*
|
|
73
|
-
*
|
|
74
|
-
*
|
|
75
|
-
*
|
|
77
|
+
* @param {ZCF<
|
|
78
|
+
* ChainlinkConfig & {
|
|
79
|
+
* timer: TimerService;
|
|
80
|
+
* brandIn: Brand<'nat'>;
|
|
81
|
+
* brandOut: Brand<'nat'>;
|
|
82
|
+
* unitAmountIn?: Amount<'nat'>;
|
|
83
|
+
* }
|
|
84
|
+
* >} zcf
|
|
76
85
|
* @param {TimerService} timerPresence
|
|
77
86
|
* @param {import('./roundsManager.js').QuoteKit} quoteKit
|
|
78
87
|
* @param {StorageNode} storageNode
|
|
@@ -128,7 +137,10 @@ export const prepareFluxAggregatorKit = async (
|
|
|
128
137
|
// end of maker definitions /////////////////////////////////
|
|
129
138
|
|
|
130
139
|
const { answerKit, latestRoundKit, priceKit } = await provideAll(baggage, {
|
|
131
|
-
/**
|
|
140
|
+
/**
|
|
141
|
+
* This is just a signal that there's a new answer, which is read from
|
|
142
|
+
* `lastValueOutForUnitIn`
|
|
143
|
+
*/
|
|
132
144
|
answerKit: () => makeDurablePublishKit(),
|
|
133
145
|
/** For publishing priceAuthority values to off-chain storage */
|
|
134
146
|
priceKit: () =>
|
|
@@ -142,9 +154,11 @@ export const prepareFluxAggregatorKit = async (
|
|
|
142
154
|
E.when(E(storageNode).makeChildNode('latestRound'), node =>
|
|
143
155
|
makeRecorderKit(
|
|
144
156
|
node,
|
|
145
|
-
/**
|
|
146
|
-
|
|
147
|
-
|
|
157
|
+
/**
|
|
158
|
+
* @type {import('@agoric/zoe/src/contractSupport/recorder.js').TypedMatcher<
|
|
159
|
+
* import('./roundsManager.js').LatestRound
|
|
160
|
+
* >}
|
|
161
|
+
*/ (M.any()),
|
|
148
162
|
),
|
|
149
163
|
),
|
|
150
164
|
});
|
|
@@ -223,9 +237,9 @@ export const prepareFluxAggregatorKit = async (
|
|
|
223
237
|
* An "oracle invitation" is an invitation to be able to submit data to
|
|
224
238
|
* include in the priceAggregator's results.
|
|
225
239
|
*
|
|
226
|
-
* The offer result from this invitation is a OracleAdmin, which can be
|
|
227
|
-
* directly to manage the price submissions as well as to terminate
|
|
228
|
-
* relationship.
|
|
240
|
+
* The offer result from this invitation is a OracleAdmin, which can be
|
|
241
|
+
* used directly to manage the price submissions as well as to terminate
|
|
242
|
+
* the relationship.
|
|
229
243
|
*
|
|
230
244
|
* @param {string} oracleId unique per contract instance
|
|
231
245
|
*/
|
|
@@ -235,8 +249,8 @@ export const prepareFluxAggregatorKit = async (
|
|
|
235
249
|
/**
|
|
236
250
|
* If custom arguments are supplied to the `zoe.offer` call, they can
|
|
237
251
|
* indicate an OraclePriceSubmission notifier and a corresponding
|
|
238
|
-
* `shiftValueOut` that should be adapted as part of the
|
|
239
|
-
* reported data.
|
|
252
|
+
* `shiftValueOut` that should be adapted as part of the
|
|
253
|
+
* priceAuthority's reported data.
|
|
240
254
|
*
|
|
241
255
|
* @param {ZCFSeat} seat
|
|
242
256
|
*/
|
|
@@ -299,8 +313,9 @@ export const prepareFluxAggregatorKit = async (
|
|
|
299
313
|
},
|
|
300
314
|
|
|
301
315
|
/**
|
|
302
|
-
* a method to provide all current info oracleStatuses need. Intended
|
|
303
|
-
* only to be callable by oracleStatuses. Not for use by contracts
|
|
316
|
+
* a method to provide all current info oracleStatuses need. Intended
|
|
317
|
+
* only only to be callable by oracleStatuses. Not for use by contracts
|
|
318
|
+
* to read state.
|
|
304
319
|
*
|
|
305
320
|
* @param {string} oracleId
|
|
306
321
|
* @param {bigint} queriedRoundId
|
|
@@ -10,10 +10,7 @@ export function prepareOracleAdminKit(baggage: any): (args_0: HeldParams) => {
|
|
|
10
10
|
* @param {PriceDatum} datum
|
|
11
11
|
*/
|
|
12
12
|
pushPrice({ roundId: roundIdRaw, unitPrice: valueRaw, }: PriceDatum): Promise<void>;
|
|
13
|
-
/**
|
|
14
|
-
*
|
|
15
|
-
* @returns {OracleStatus}
|
|
16
|
-
*/
|
|
13
|
+
/** @returns {OracleStatus} */
|
|
17
14
|
getStatus(): OracleStatus;
|
|
18
15
|
};
|
|
19
16
|
} & import("@endo/eventual-send").RemotableBrand<{}, {
|
|
@@ -27,10 +24,7 @@ export function prepareOracleAdminKit(baggage: any): (args_0: HeldParams) => {
|
|
|
27
24
|
* @param {PriceDatum} datum
|
|
28
25
|
*/
|
|
29
26
|
pushPrice({ roundId: roundIdRaw, unitPrice: valueRaw, }: PriceDatum): Promise<void>;
|
|
30
|
-
/**
|
|
31
|
-
*
|
|
32
|
-
* @returns {OracleStatus}
|
|
33
|
-
*/
|
|
27
|
+
/** @returns {OracleStatus} */
|
|
34
28
|
getStatus(): OracleStatus;
|
|
35
29
|
};
|
|
36
30
|
}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"priceOracleKit.d.ts","sourceRoot":"","sources":["priceOracleKit.js"],"names":[],"mappings":"AAMA,yDAA0D;
|
|
1
|
+
{"version":3,"file":"priceOracleKit.d.ts","sourceRoot":"","sources":["priceOracleKit.js"],"names":[],"mappings":"AAMA,yDAA0D;AA4DnD;;;;;QAcC;;;;WAIG;iEADQ,UAAU;QA0BrB,8BAA8B;qBAAhB,YAAY;;;;;;;QA7B1B;;;;WAIG;iEADQ,UAAU;QA0BrB,8BAA8B;qBAAhB,YAAY;;GAa/B;;cAhHY,MAAM;;6BAGJ,YAAY,UACZ,OAAO,oBAAoB,EAAE,UAAU,KAC5C,QAAQ,YAAY,CAAC;;;yBAKnB;IAAE,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,SAAS,EAAE,QAAQ,CAAA;CAAE;;;uBAKpD,MAAM;sBACN,MAAM;sBACN,MAAM;cACN,MAAM;;6BAGP,SAAS,UAAU,GAAG,EAAE,CAAC;2BAEzB,YAAY,GAAG,EAAE;oBAEhB,cAAc,GAAG,YAAY;wBAyF7B,WAAW,WAAW,4BAA4B,CAAC,CAAC"}
|
|
@@ -8,14 +8,17 @@ export const INVITATION_MAKERS_DESC = 'oracle invitation';
|
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* @typedef {{
|
|
11
|
-
* oracleId: string
|
|
12
|
-
* roundPowers: {
|
|
11
|
+
* oracleId: string;
|
|
12
|
+
* roundPowers: {
|
|
13
|
+
* handlePush: (
|
|
14
|
+
* status: OracleStatus,
|
|
15
|
+
* result: import('./roundsManager.js').PriceRound,
|
|
16
|
+
* ) => Promise<OracleStatus>;
|
|
17
|
+
* };
|
|
13
18
|
* }} HeldParams
|
|
14
19
|
*/
|
|
15
20
|
|
|
16
|
-
/**
|
|
17
|
-
* @typedef {{ roundId: number | undefined, unitPrice: NatValue }} PriceDatum
|
|
18
|
-
*/
|
|
21
|
+
/** @typedef {{ roundId: number | undefined; unitPrice: NatValue }} PriceDatum */
|
|
19
22
|
|
|
20
23
|
/**
|
|
21
24
|
* @typedef {object} OracleStatus
|
|
@@ -26,11 +29,9 @@ export const INVITATION_MAKERS_DESC = 'oracle invitation';
|
|
|
26
29
|
* @property {string} oracleId
|
|
27
30
|
*/
|
|
28
31
|
/**
|
|
29
|
-
* @typedef {Readonly<HeldParams & {
|
|
30
|
-
* }>} ImmutableState
|
|
32
|
+
* @typedef {Readonly<HeldParams & {}>} ImmutableState
|
|
31
33
|
*
|
|
32
|
-
* @typedef {OracleStatus & {
|
|
33
|
-
* }} MutableState
|
|
34
|
+
* @typedef {OracleStatus & {}} MutableState
|
|
34
35
|
*/
|
|
35
36
|
/** @typedef {ImmutableState & MutableState} State */
|
|
36
37
|
|
|
@@ -106,10 +107,7 @@ export const prepareOracleAdminKit = baggage =>
|
|
|
106
107
|
state.lastStartedRound = result.lastStartedRound;
|
|
107
108
|
state.latestSubmission = result.latestSubmission;
|
|
108
109
|
},
|
|
109
|
-
/**
|
|
110
|
-
*
|
|
111
|
-
* @returns {OracleStatus}
|
|
112
|
-
*/
|
|
110
|
+
/** @returns {OracleStatus} */
|
|
113
111
|
getStatus() {
|
|
114
112
|
const { state } = this;
|
|
115
113
|
return {
|
|
@@ -11,22 +11,16 @@ export function prepareRoundsManagerKit(baggage: any): (args_0: Readonly<import(
|
|
|
11
11
|
unitAmountIn: Amount<'nat'>;
|
|
12
12
|
}) => {
|
|
13
13
|
helper: {
|
|
14
|
-
/**
|
|
15
|
-
* @param {bigint} roundId
|
|
16
|
-
*/
|
|
14
|
+
/** @param {bigint} roundId */
|
|
17
15
|
acceptingSubmissions(roundId: bigint): boolean;
|
|
18
16
|
/**
|
|
19
17
|
* @param {OracleStatus} status
|
|
20
18
|
* @param {bigint} roundId
|
|
21
19
|
*/
|
|
22
20
|
delayed(status: OracleStatus, roundId: bigint): boolean;
|
|
23
|
-
/**
|
|
24
|
-
* @param {bigint} roundId
|
|
25
|
-
*/
|
|
21
|
+
/** @param {bigint} roundId */
|
|
26
22
|
deleteRoundDetails(roundId: bigint): void;
|
|
27
|
-
/**
|
|
28
|
-
* @param {bigint} roundId
|
|
29
|
-
*/
|
|
23
|
+
/** @param {bigint} roundId */
|
|
30
24
|
isNextRound(roundId: bigint): boolean;
|
|
31
25
|
/**
|
|
32
26
|
* @param {bigint} roundId
|
|
@@ -77,15 +71,12 @@ export function prepareRoundsManagerKit(baggage: any): (args_0: Readonly<import(
|
|
|
77
71
|
* @param {OracleStatus} status
|
|
78
72
|
* @param {bigint} roundId
|
|
79
73
|
* @param {Timestamp} blockTimestamp
|
|
80
|
-
* @returns {string
|
|
74
|
+
* @returns {string | null} error message, if there is one
|
|
81
75
|
*/
|
|
82
76
|
validateOracleRound(status: OracleStatus, roundId: bigint, blockTimestamp: Timestamp): string | null;
|
|
83
77
|
};
|
|
84
78
|
contract: {
|
|
85
|
-
/**
|
|
86
|
-
*
|
|
87
|
-
* @param {PriceQuoteValue} quote
|
|
88
|
-
*/
|
|
79
|
+
/** @param {PriceQuoteValue} quote */
|
|
89
80
|
authenticateQuote(quote: PriceQuoteValue): Promise<{
|
|
90
81
|
quoteAmount: Amount<"set">;
|
|
91
82
|
quotePayment: Payment<"set">;
|
|
@@ -112,9 +103,8 @@ export function prepareRoundsManagerKit(baggage: any): (args_0: Readonly<import(
|
|
|
112
103
|
*/
|
|
113
104
|
eligibleForSpecificRound(status: OracleStatus, queriedRoundId: bigint, blockTimestamp: Timestamp): boolean;
|
|
114
105
|
/**
|
|
115
|
-
* consumers are encouraged to check
|
|
116
|
-
*
|
|
117
|
-
* answeredInRound return values.
|
|
106
|
+
* consumers are encouraged to check that they're receiving fresh data
|
|
107
|
+
* by inspecting the updatedAt and answeredInRound return values.
|
|
118
108
|
*
|
|
119
109
|
* @param {bigint | number} roundIdRaw
|
|
120
110
|
* @returns {Promise<RoundData>}
|
|
@@ -123,8 +113,9 @@ export function prepareRoundsManagerKit(baggage: any): (args_0: Readonly<import(
|
|
|
123
113
|
/** @type {(roundId: bigint) => Readonly<RoundDetails & Round>} */
|
|
124
114
|
getRoundStatus(roundId: bigint): Readonly<RoundDetails & Round>;
|
|
125
115
|
/**
|
|
126
|
-
* a method to provide all current info oracleStatuses need. Intended
|
|
127
|
-
* only to be callable by oracleStatuses. Not for use by contracts
|
|
116
|
+
* a method to provide all current info oracleStatuses need. Intended
|
|
117
|
+
* only only to be callable by oracleStatuses. Not for use by contracts
|
|
118
|
+
* to read state.
|
|
128
119
|
*
|
|
129
120
|
* @param {OracleStatus} status
|
|
130
121
|
* @param {Timestamp} blockTimestamp
|
|
@@ -148,22 +139,16 @@ export function prepareRoundsManagerKit(baggage: any): (args_0: Readonly<import(
|
|
|
148
139
|
};
|
|
149
140
|
} & import("@endo/eventual-send").RemotableBrand<{}, {
|
|
150
141
|
helper: {
|
|
151
|
-
/**
|
|
152
|
-
* @param {bigint} roundId
|
|
153
|
-
*/
|
|
142
|
+
/** @param {bigint} roundId */
|
|
154
143
|
acceptingSubmissions(roundId: bigint): boolean;
|
|
155
144
|
/**
|
|
156
145
|
* @param {OracleStatus} status
|
|
157
146
|
* @param {bigint} roundId
|
|
158
147
|
*/
|
|
159
148
|
delayed(status: OracleStatus, roundId: bigint): boolean;
|
|
160
|
-
/**
|
|
161
|
-
* @param {bigint} roundId
|
|
162
|
-
*/
|
|
149
|
+
/** @param {bigint} roundId */
|
|
163
150
|
deleteRoundDetails(roundId: bigint): void;
|
|
164
|
-
/**
|
|
165
|
-
* @param {bigint} roundId
|
|
166
|
-
*/
|
|
151
|
+
/** @param {bigint} roundId */
|
|
167
152
|
isNextRound(roundId: bigint): boolean;
|
|
168
153
|
/**
|
|
169
154
|
* @param {bigint} roundId
|
|
@@ -214,15 +199,12 @@ export function prepareRoundsManagerKit(baggage: any): (args_0: Readonly<import(
|
|
|
214
199
|
* @param {OracleStatus} status
|
|
215
200
|
* @param {bigint} roundId
|
|
216
201
|
* @param {Timestamp} blockTimestamp
|
|
217
|
-
* @returns {string
|
|
202
|
+
* @returns {string | null} error message, if there is one
|
|
218
203
|
*/
|
|
219
204
|
validateOracleRound(status: OracleStatus, roundId: bigint, blockTimestamp: Timestamp): string | null;
|
|
220
205
|
};
|
|
221
206
|
contract: {
|
|
222
|
-
/**
|
|
223
|
-
*
|
|
224
|
-
* @param {PriceQuoteValue} quote
|
|
225
|
-
*/
|
|
207
|
+
/** @param {PriceQuoteValue} quote */
|
|
226
208
|
authenticateQuote(quote: PriceQuoteValue): Promise<{
|
|
227
209
|
quoteAmount: Amount<"set">;
|
|
228
210
|
quotePayment: Payment<"set">;
|
|
@@ -249,9 +231,8 @@ export function prepareRoundsManagerKit(baggage: any): (args_0: Readonly<import(
|
|
|
249
231
|
*/
|
|
250
232
|
eligibleForSpecificRound(status: OracleStatus, queriedRoundId: bigint, blockTimestamp: Timestamp): boolean;
|
|
251
233
|
/**
|
|
252
|
-
* consumers are encouraged to check
|
|
253
|
-
*
|
|
254
|
-
* answeredInRound return values.
|
|
234
|
+
* consumers are encouraged to check that they're receiving fresh data
|
|
235
|
+
* by inspecting the updatedAt and answeredInRound return values.
|
|
255
236
|
*
|
|
256
237
|
* @param {bigint | number} roundIdRaw
|
|
257
238
|
* @returns {Promise<RoundData>}
|
|
@@ -260,8 +241,9 @@ export function prepareRoundsManagerKit(baggage: any): (args_0: Readonly<import(
|
|
|
260
241
|
/** @type {(roundId: bigint) => Readonly<RoundDetails & Round>} */
|
|
261
242
|
getRoundStatus(roundId: bigint): Readonly<RoundDetails & Round>;
|
|
262
243
|
/**
|
|
263
|
-
* a method to provide all current info oracleStatuses need. Intended
|
|
264
|
-
* only to be callable by oracleStatuses. Not for use by contracts
|
|
244
|
+
* a method to provide all current info oracleStatuses need. Intended
|
|
245
|
+
* only only to be callable by oracleStatuses. Not for use by contracts
|
|
246
|
+
* to read state.
|
|
265
247
|
*
|
|
266
248
|
* @param {OracleStatus} status
|
|
267
249
|
* @param {Timestamp} blockTimestamp
|
|
@@ -303,20 +285,20 @@ export type Round = {
|
|
|
303
285
|
*/
|
|
304
286
|
answer: bigint;
|
|
305
287
|
/**
|
|
306
|
-
* the timestamp when the round was started.
|
|
307
|
-
* if the round hasn't been started yet.
|
|
288
|
+
* the timestamp when the round was started.
|
|
289
|
+
* This is 0 if the round hasn't been started yet.
|
|
308
290
|
*/
|
|
309
291
|
startedAt: Timestamp;
|
|
310
292
|
/**
|
|
311
|
-
* the timestamp when the round last was updated
|
|
312
|
-
* answer was last computed)
|
|
293
|
+
* the timestamp when the round last was updated
|
|
294
|
+
* (i.e. answer was last computed)
|
|
313
295
|
*/
|
|
314
296
|
updatedAt: Timestamp;
|
|
315
297
|
/**
|
|
316
|
-
* the round ID of the round in which the
|
|
317
|
-
* was computed. answeredInRound may be smaller than roundId when the
|
|
318
|
-
* timed out. answeredInRound is equal to roundId when the round didn't
|
|
319
|
-
* and was completed regularly.
|
|
298
|
+
* the round ID of the round in which the
|
|
299
|
+
* answer was computed. answeredInRound may be smaller than roundId when the
|
|
300
|
+
* round timed out. answeredInRound is equal to roundId when the round didn't
|
|
301
|
+
* time out and was completed regularly.
|
|
320
302
|
*/
|
|
321
303
|
answeredInRound: bigint;
|
|
322
304
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"roundsManager.d.ts","sourceRoot":"","sources":["roundsManager.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"roundsManager.d.ts","sourceRoot":"","sources":["roundsManager.js"],"names":[],"mappings":"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"}
|