@agoric/builders 0.1.1-orchestration-dev-096c4e8.0 → 0.1.1-other-dev-fbe72e7.0.fbe72e7

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.
Files changed (86) hide show
  1. package/package.json +39 -36
  2. package/scripts/inter-protocol/add-STARS.js +8 -7
  3. package/scripts/inter-protocol/add-collateral-core.js +12 -8
  4. package/scripts/inter-protocol/init-core.js +6 -5
  5. package/scripts/inter-protocol/invite-committee-core.js +5 -4
  6. package/scripts/inter-protocol/manual-price-feed.js +4 -0
  7. package/scripts/inter-protocol/price-feed-core.js +5 -5
  8. package/scripts/inter-protocol/replace-electorate-core.js +163 -0
  9. package/scripts/inter-protocol/replace-feeDistributor-combo.js +82 -0
  10. package/scripts/inter-protocol/replace-feeDistributor.js +36 -0
  11. package/scripts/inter-protocol/updatePriceFeeds.js +128 -0
  12. package/scripts/inter-protocol/withdraw-reserve.build.js +68 -0
  13. package/scripts/orchestration/axelar-gmp.build.js +81 -0
  14. package/scripts/orchestration/get-chain-config.js +121 -0
  15. package/scripts/orchestration/helpers.js +46 -0
  16. package/scripts/orchestration/hook-localchain-msg-send.js +30 -0
  17. package/scripts/orchestration/init-basic-flows.js +36 -0
  18. package/scripts/orchestration/init-stakeAtom.js +33 -0
  19. package/scripts/orchestration/init-stakeBld.js +24 -0
  20. package/scripts/orchestration/init-stakeOsmo.js +33 -0
  21. package/scripts/orchestration/write-chain-info.js +14 -0
  22. package/scripts/pegasus/init-core.js +4 -3
  23. package/scripts/smart-wallet/build-game1-start.js +5 -4
  24. package/scripts/smart-wallet/build-wallet-factory2-upgrade.js +4 -3
  25. package/scripts/smart-wallet/build-walletFactory-upgrade.js +4 -3
  26. package/scripts/testing/add-LEMONS.js +24 -0
  27. package/scripts/testing/add-OLIVES.js +23 -0
  28. package/scripts/testing/add-USD-LEMONS.js +19 -0
  29. package/scripts/testing/add-USD-OLIVES.js +19 -0
  30. package/scripts/testing/append-chain-info.js +50 -0
  31. package/scripts/testing/init-auto-stake-it.js +42 -0
  32. package/scripts/testing/init-send-anywhere.js +36 -0
  33. package/scripts/testing/init-swap-anything.js +36 -0
  34. package/scripts/testing/provokeBOYD.js +54 -0
  35. package/scripts/testing/publish-test-info.js +79 -0
  36. package/scripts/testing/recorded-retired-instances.js +81 -0
  37. package/scripts/testing/register-interchain-bank-assets.js +199 -0
  38. package/scripts/testing/replace-feeDistributor-short.js +33 -0
  39. package/scripts/testing/restart-axelar-gmp.js +94 -0
  40. package/scripts/testing/restart-basic-flows.js +101 -0
  41. package/scripts/testing/restart-send-anywhere.js +101 -0
  42. package/scripts/testing/restart-stakeAtom.js +91 -0
  43. package/scripts/testing/restart-valueVow.js +82 -0
  44. package/scripts/testing/start-query-flows.js +155 -0
  45. package/scripts/testing/start-valueVow.js +93 -0
  46. package/scripts/testing/test-upgraded-board.js +15 -0
  47. package/scripts/testing/tweak-chain-info.js +56 -0
  48. package/scripts/testing/upgrade-send-anywhere.js +139 -0
  49. package/scripts/testing/upgrade-vaultFactory.js +21 -0
  50. package/scripts/vats/add-auction.js +31 -0
  51. package/scripts/vats/init-core.js +4 -3
  52. package/scripts/vats/init-localchain.js +4 -3
  53. package/scripts/vats/init-network.js +4 -3
  54. package/scripts/vats/init-orchestration.js +21 -0
  55. package/scripts/vats/init-transfer.js +19 -0
  56. package/scripts/vats/priceFeedSupport.js +90 -0
  57. package/scripts/vats/probe-zcf-bundle.js +4 -3
  58. package/scripts/vats/replace-provisioning.js +4 -3
  59. package/scripts/vats/replace-zoe.js +4 -3
  60. package/scripts/vats/restart-vats.js +4 -3
  61. package/scripts/vats/revive-kread.js +14 -0
  62. package/scripts/vats/test-localchain.js +4 -3
  63. package/scripts/vats/test-vtransfer.js +19 -0
  64. package/scripts/vats/updateAtomPriceFeed.js +22 -0
  65. package/scripts/vats/updateStAtomPriceFeed.js +22 -0
  66. package/scripts/vats/updateStOsmoPriceFeed.js +22 -0
  67. package/scripts/vats/updateStTiaPriceFeed.js +22 -0
  68. package/scripts/vats/updateStkAtomPriceFeed.js +22 -0
  69. package/scripts/vats/upgrade-agoricNames.js +21 -0
  70. package/scripts/vats/upgrade-asset-reserve.js +21 -0
  71. package/scripts/vats/upgrade-bank.js +19 -0
  72. package/scripts/vats/upgrade-board.js +20 -0
  73. package/scripts/vats/upgrade-mintHolder.js +105 -0
  74. package/scripts/vats/upgrade-orchestration.js +21 -0
  75. package/scripts/vats/upgrade-paRegistry.js +21 -0
  76. package/scripts/vats/upgrade-provisionPool-to-BLD.js +25 -0
  77. package/scripts/vats/upgrade-provisionPool.js +21 -0
  78. package/scripts/vats/upgrade-psm.js +19 -0
  79. package/scripts/vats/upgrade-vats.js +49 -0
  80. package/scripts/vats/upgrade-zcf.js +19 -0
  81. package/scripts/vats/upgrade-zoe.js +4 -3
  82. package/scripts/vats/upgradeScaledPriceAuthorities.js +23 -0
  83. package/scripts/vats/upgradeVaults.js +24 -0
  84. package/tsconfig.json +0 -2
  85. package/index.js +0 -2
  86. package/scripts/inter-protocol/deploy-contracts.js +0 -110
@@ -0,0 +1,128 @@
1
+ import { makeHelpers } from '@agoric/deploy-script-support';
2
+ import { getManifestForPriceFeeds } from '@agoric/inter-protocol/src/proposals/deploy-price-feeds.js';
3
+
4
+ /** @import {PriceFeedConfig} from '@agoric/inter-protocol/src/proposals/deploy-price-feeds.js'; */
5
+
6
+ /** @type {Record<string, PriceFeedConfig>} */
7
+ const configurations = {
8
+ A3P_INTEGRATION: {
9
+ oracleAddresses: [
10
+ 'agoric1ee9hr0jyrxhy999y755mp862ljgycmwyp4pl7q', // GOV1
11
+ 'agoric1wrfh296eu2z34p6pah7q04jjuyj3mxu9v98277', // GOV2
12
+ 'agoric1ydzxwh6f893jvpaslmaz6l8j2ulup9a7x8qvvq', // GOV3
13
+ ],
14
+ inBrandNames: ['ATOM', 'stATOM'],
15
+ },
16
+ MAINNET: {
17
+ oracleAddresses: [
18
+ 'agoric144rrhh4m09mh7aaffhm6xy223ym76gve2x7y78', // DSRV
19
+ 'agoric19d6gnr9fyp6hev4tlrg87zjrzsd5gzr5qlfq2p', // Stakin
20
+ 'agoric19uscwxdac6cf6z7d5e26e0jm0lgwstc47cpll8', // 01node
21
+ 'agoric1krunjcqfrf7la48zrvdfeeqtls5r00ep68mzkr', // Simply Staking
22
+ 'agoric1n4fcxsnkxe4gj6e24naec99hzmc4pjfdccy5nj', // P2P
23
+ ],
24
+ inBrandNames: ['ATOM', 'stATOM', 'stOSMO', 'stTIA', 'stkATOM'],
25
+ contractTerms: { minSubmissionCount: 3 },
26
+ },
27
+ DEVNET: {
28
+ oracleAddresses: [
29
+ 'agoric1lw4e4aas9q84tq0q92j85rwjjjapf8dmnllnft', // DSRV
30
+ 'agoric1zj6vrrrjq4gsyr9lw7dplv4vyejg3p8j2urm82', // Stakin
31
+ 'agoric1ra0g6crtsy6r3qnpu7ruvm7qd4wjnznyzg5nu4', // 01node
32
+ 'agoric1qj07c7vfk3knqdral0sej7fa6eavkdn8vd8etf', // Simply Staking
33
+ 'agoric10vjkvkmpp9e356xeh6qqlhrny2htyzp8hf88fk', // P2P
34
+ ],
35
+ inBrandNames: ['ATOM', 'stTIA', 'stkATOM', 'dATOM'],
36
+ },
37
+ EMERYNET: {
38
+ oracleAddresses: [
39
+ 'agoric1ldmtatp24qlllgxmrsjzcpe20fvlkp448zcuce', // GOV1
40
+ 'agoric140dmkrz2e42ergjj7gyvejhzmjzurvqeq82ang', // GOV2
41
+ ],
42
+ inBrandNames: ['ATOM', 'stATOM', 'stOSMO', 'stTIA', 'stkATOM'],
43
+ },
44
+ BOOT_TEST: {
45
+ oracleAddresses: [
46
+ 'agoric144rrhh4m09mh7aaffhm6xy223ym76gve2x7y78', // DSRV
47
+ 'agoric19d6gnr9fyp6hev4tlrg87zjrzsd5gzr5qlfq2p', // Stakin
48
+ 'agoric19uscwxdac6cf6z7d5e26e0jm0lgwstc47cpll8', // 01node
49
+ 'agoric1krunjcqfrf7la48zrvdfeeqtls5r00ep68mzkr', // Simply Staking
50
+ 'agoric1n4fcxsnkxe4gj6e24naec99hzmc4pjfdccy5nj', // P2P
51
+ ],
52
+ inBrandNames: ['ATOM'],
53
+ },
54
+ };
55
+
56
+ const { keys } = Object;
57
+ const knownVariants = keys(configurations);
58
+
59
+ /** @type {import('@agoric/deploy-script-support/src/externalTypes.js').CoreEvalBuilder} */
60
+ export const defaultProposalBuilder = async ({ publishRef, install }, opts) => {
61
+ const config = opts.config || configurations[opts.variant];
62
+ if (!config) {
63
+ const error = `Unknown variant "${opts.variant}". Expected one of ${knownVariants.join(', ')}`;
64
+ console.error(error);
65
+ throw Error(error);
66
+ }
67
+ const { oracleAddresses, inBrandNames, contractTerms } = config;
68
+ console.log(
69
+ 'Generating price feeds update proposal with config',
70
+ JSON.stringify({ oracleAddresses, inBrandNames, contractTerms }),
71
+ );
72
+ return harden({
73
+ sourceSpec: '@agoric/inter-protocol/src/proposals/deploy-price-feeds.js',
74
+ getManifestCall: [
75
+ getManifestForPriceFeeds.name,
76
+ {
77
+ oracleAddresses,
78
+ inBrandNames,
79
+ contractTerms,
80
+ priceAggregatorRef: publishRef(
81
+ install(
82
+ '@agoric/inter-protocol/src/price/fluxAggregatorContract.js',
83
+ '../bundles/bundle-fluxAggregatorKit.js',
84
+ ),
85
+ ),
86
+ scaledPARef: publishRef(
87
+ install(
88
+ '@agoric/zoe/src/contracts/scaledPriceAuthority.js',
89
+ '../bundles/bundle-scaledPriceAuthority.js',
90
+ ),
91
+ ),
92
+ },
93
+ ],
94
+ });
95
+ };
96
+
97
+ const Usage = `agoric run updatePriceFeeds.js ${[...knownVariants, '<json-config>'].join(' | ')}`;
98
+
99
+ /** @type {import('@agoric/deploy-script-support/src/externalTypes.js').DeployScriptFunction} */
100
+ export default async (homeP, endowments) => {
101
+ const { scriptArgs } = endowments;
102
+ const variantOrConfig = scriptArgs?.[0];
103
+ console.log('updatePriceFeeds.js', variantOrConfig);
104
+
105
+ const opts = {};
106
+
107
+ if (typeof variantOrConfig === 'string') {
108
+ if (variantOrConfig[0] === '{') {
109
+ try {
110
+ opts.config = JSON.parse(variantOrConfig);
111
+ } catch (err) {
112
+ throw Error(`Failed to parse config argument ${variantOrConfig}`);
113
+ }
114
+ } else {
115
+ opts.variant = variantOrConfig;
116
+ }
117
+ } else {
118
+ console.error(Usage);
119
+ throw Error(Usage);
120
+ }
121
+
122
+ const { writeCoreEval } = await makeHelpers(homeP, endowments);
123
+
124
+ await writeCoreEval(
125
+ `gov-price-feeds-${opts.variant || 'from-config'}`,
126
+ utils => defaultProposalBuilder(utils, opts),
127
+ );
128
+ };
@@ -0,0 +1,68 @@
1
+ /* eslint-env node */
2
+ import { parseArgs } from 'node:util';
3
+ import { isNat } from '@endo/nat';
4
+ import { makeHelpers } from '@agoric/deploy-script-support';
5
+ import { getManifestForInviteWithdrawer } from '@agoric/inter-protocol/src/proposals/withdraw-reserve-proposal.js';
6
+
7
+ /**
8
+ * @template {{ type: string }} T
9
+ * @typedef { T['type'] extends 'string' ? string : T['type'] extends 'boolean' ? boolean : (string | boolean) } TypeFromParseArgsOptionDescriptor
10
+ */
11
+
12
+ /**
13
+ * @template {Record<string, { type: string, multiple?: boolean }>} T
14
+ * @typedef {{
15
+ * [K in keyof T]: (
16
+ * T[K]['multiple'] extends true
17
+ * ? TypeFromParseArgsOptionDescriptor<T[K]>[]
18
+ * : T[K]['multiple'] extends (false | unknown)
19
+ * ? TypeFromParseArgsOptionDescriptor<T[K]>
20
+ * : (TypeFromParseArgsOptionDescriptor<T[K]>[] | TypeFromParseArgsOptionDescriptor<T[K]>)
21
+ * )
22
+ * }} CliOptions
23
+ */
24
+
25
+ const { Fail } = assert;
26
+
27
+ const cliOptions = /** @type {const} */ ({
28
+ address: { type: 'string', multiple: false },
29
+ count: { type: 'string', multiple: false },
30
+ });
31
+
32
+ /** @type {import('@agoric/deploy-script-support/src/externalTypes.js').CoreEvalBuilder} */
33
+ export const defaultProposalBuilder = async (
34
+ { publishRef: _publishRef, install: _install },
35
+ namedArgs = {},
36
+ ) => {
37
+ const { address, count } = namedArgs;
38
+
39
+ typeof address === 'string' || Fail`string address is required`;
40
+ if (count !== undefined) {
41
+ isNat(count) || Fail`count must be a safe natural number`;
42
+ }
43
+
44
+ return harden({
45
+ sourceSpec:
46
+ '@agoric/inter-protocol/src/proposals/withdraw-reserve-proposal.js',
47
+ getManifestCall: [getManifestForInviteWithdrawer.name, { address, count }],
48
+ });
49
+ };
50
+
51
+ /** @type {import('@agoric/deploy-script-support/src/externalTypes.js').DeployScriptFunction} */
52
+ export default async (homeP, endowments) => {
53
+ const { scriptArgs: argv } = endowments;
54
+ /** @type {{ values: Partial<CliOptions<typeof cliOptions>> }} */
55
+ const { values: rawArgs } = parseArgs({ args: argv, options: cliOptions });
56
+ const { address, count: rawCount } = rawArgs;
57
+ const count = (() => {
58
+ if (rawCount === undefined) return undefined;
59
+ /[0-9]/.test(rawCount) || Fail`--count value must be numeric`;
60
+ return +rawCount;
61
+ })();
62
+ const namedArgs = { address, count };
63
+
64
+ const { writeCoreEval } = await makeHelpers(homeP, endowments);
65
+ await writeCoreEval('withdraw-reserve', utils =>
66
+ defaultProposalBuilder(utils, namedArgs),
67
+ );
68
+ };
@@ -0,0 +1,81 @@
1
+ import { execFileSync } from 'node:child_process';
2
+ import { makeHelpers } from '@agoric/deploy-script-support';
3
+ import { parseArgs } from 'node:util';
4
+ import {
5
+ getManifest,
6
+ startAxelarGmp,
7
+ } from '@agoric/orchestration/src/proposals/start-axelar-gmp.js';
8
+ import { assetInfo } from '@agoric/orchestration/src/utils/axelar-static-config.js';
9
+ import { getChainConfig } from './get-chain-config.js';
10
+
11
+ /** @typedef {{ net?: string, peer?: string[] }} PeerChainOpts */
12
+
13
+ /**
14
+ * @import {CoreEvalBuilder} from '@agoric/deploy-script-support/src/externalTypes.js';
15
+ */
16
+
17
+ /** @type {CoreEvalBuilder} */
18
+ export const defaultProposalBuilder = async (
19
+ { publishRef, install },
20
+ options,
21
+ ) =>
22
+ harden({
23
+ sourceSpec: '@agoric/orchestration/src/proposals/start-axelar-gmp.js',
24
+ getManifestCall: [
25
+ getManifest.name,
26
+ {
27
+ installationRef: publishRef(
28
+ install('@agoric/orchestration/dist/axelar-gmp.contract.bundle.js'),
29
+ ),
30
+ options,
31
+ },
32
+ ],
33
+ });
34
+
35
+ /** @type {import('@agoric/deploy-script-support/src/externalTypes.js').DeployScriptFunction} */
36
+ export default async (homeP, endowments) => {
37
+ const { scriptArgs } = endowments;
38
+
39
+ /** @type {import('node:util').ParseArgsConfig['options']} */
40
+ const options = {
41
+ net: {
42
+ type: 'string',
43
+ },
44
+ peer: { type: 'string', multiple: true },
45
+ };
46
+
47
+ /** @type {{ values: PeerChainOpts }} */
48
+ const { values: flags } = parseArgs({ args: scriptArgs, options });
49
+
50
+ const parseAssetInfo = () => {
51
+ if (typeof assetInfo !== 'string') return undefined;
52
+ return JSON.parse(assetInfo);
53
+ };
54
+
55
+ if (!flags.net) throw Error('--net required');
56
+ if (!flags.peer) throw Error('--peer required');
57
+
58
+ const validNets = ['bootstrap', 'devnet', 'emerynet', 'local'];
59
+ if (!validNets.includes(flags.net)) {
60
+ throw Error(`--net must be one of: ${validNets.join(', ')}`);
61
+ }
62
+
63
+ const chainDetails = await getChainConfig({
64
+ net: /** @type {'bootstrap' | 'devnet' | 'emerynet' | 'local'} */ (
65
+ flags.net
66
+ ),
67
+ peers: flags.peer,
68
+ execFileSync,
69
+ });
70
+
71
+ const opts = harden({
72
+ chainInfo: chainDetails,
73
+ assetInfo: parseAssetInfo(),
74
+ });
75
+
76
+ const { writeCoreEval } = await makeHelpers(homeP, endowments);
77
+
78
+ await writeCoreEval(startAxelarGmp.name, utils =>
79
+ defaultProposalBuilder(utils, opts),
80
+ );
81
+ };
@@ -0,0 +1,121 @@
1
+ import { IBCConnectionInfoShape } from '@agoric/orchestration/src/typeGuards.js';
2
+ import { mustMatch } from '@endo/patterns';
3
+ import { makeAgd } from '@agoric/orchestration/src/utils/agd-lib.js';
4
+ import * as childProcess from 'node:child_process';
5
+ import fetchedChainInfo from '@agoric/orchestration/src/fetched-chain-info.js';
6
+ import { fetchNetworkConfig } from '@agoric/client-utils';
7
+
8
+ /**
9
+ * @import {IBCChannelID, IBCConnectionID} from '@agoric/vats';
10
+ * @import {CosmosChainInfo, IBCConnectionInfo} from '@agoric/orchestration'
11
+ */
12
+
13
+ /** @param {string[]} strs */
14
+ const parsePeers = strs => {
15
+ /** @type {[name: string, conn: IBCConnectionID, chan: IBCChannelID, denom:string][]} */
16
+ // @ts-expect-error XXX ID syntax should be dynamically checked
17
+ const peerParts = strs.map(s => s.split(':'));
18
+ const badPeers = peerParts.filter(d => d.length !== 4);
19
+ if (badPeers.length) {
20
+ throw Error(
21
+ `peers must be name:connection-X:channel-Y:denom, not ${badPeers.join(', ')}`,
22
+ );
23
+ }
24
+ return peerParts;
25
+ };
26
+
27
+ // TODO: Can these be sourced from chain-registry?
28
+ /**
29
+ * Get the IBC chain configuration based on the provided network and peer inputs.
30
+ *
31
+ * @param {object} args - The arguments object.
32
+ * @param {'bootstrap' | 'devnet' |'emerynet' | 'local' } args.net - Agoric network shorthand (e.g., 'emerynet').
33
+ * @param {string[]} args.peers - The peers to connect .
34
+ * @param {childProcess.execFileSync} [args.execFileSync] - Optional execFileSync function.
35
+ * @returns {Promise<Record<string, CosmosChainInfo>>} A promise that resolves to the chain configuration details keyed by chain name.
36
+ */
37
+
38
+ export const getChainConfig = async ({
39
+ net,
40
+ peers,
41
+ execFileSync = childProcess.execFileSync,
42
+ }) => {
43
+ await null;
44
+
45
+ if (net === 'bootstrap') {
46
+ return {
47
+ agoric: fetchedChainInfo.agoric,
48
+ axelar: fetchedChainInfo.axelar,
49
+ };
50
+ }
51
+
52
+ /** @type {Record<string, CosmosChainInfo>} */
53
+ const chainDetails = {};
54
+
55
+ /** @type {Record<string, IBCConnectionInfo>} */
56
+ const connections = {};
57
+ const portId = 'transfer';
58
+
59
+ const { chainName: chainId, rpcAddrs } = await fetchNetworkConfig(net, {
60
+ fetch,
61
+ });
62
+ // XXX execFileSync bad POLA; these queries can be made with `fetch`
63
+ const agd = makeAgd({ execFileSync }).withOpts({ rpcAddrs });
64
+
65
+ for (const [peerName, myConn, myChan, denom] of parsePeers(peers)) {
66
+ console.debug(peerName, { denom });
67
+ const connInfo = await agd
68
+ .query(['ibc', 'connection', 'end', myConn])
69
+ .then(x => x.connection);
70
+ const { client_id: clientId } = connInfo;
71
+ const clientState = await agd
72
+ .query(['ibc', 'client', 'state', clientId])
73
+ .then(x => x.client_state);
74
+ const { chain_id: peerId } = clientState;
75
+ console.debug(peerName, { chainId: peerId, denom });
76
+ chainDetails[peerName] = {
77
+ namespace: 'cosmos',
78
+ reference: peerId,
79
+ chainId: peerId,
80
+ stakingTokens: [{ denom }],
81
+ bech32Prefix: peerName,
82
+ };
83
+
84
+ const chan = await agd
85
+ .query(['ibc', 'channel', 'end', portId, myChan])
86
+ .then(r => r.channel);
87
+
88
+ /** @type {IBCConnectionInfo} */
89
+ const info = harden({
90
+ client_id: clientId,
91
+ counterparty: {
92
+ client_id: connInfo.counterparty.client_id,
93
+ connection_id: connInfo.counterparty.connection_id,
94
+ },
95
+ id: myConn,
96
+ state: connInfo.state,
97
+ transferChannel: {
98
+ channelId: myChan,
99
+ counterPartyChannelId: chan.counterparty.channel_id,
100
+ counterPartyPortId: chan.counterparty.port_id,
101
+ ordering: chan.ordering,
102
+ portId,
103
+ state: chan.state,
104
+ version: chan.version,
105
+ },
106
+ });
107
+ mustMatch(info, IBCConnectionInfoShape);
108
+ connections[peerId] = info;
109
+ }
110
+
111
+ chainDetails.agoric = {
112
+ namespace: 'cosmos',
113
+ reference: chainId,
114
+ chainId,
115
+ stakingTokens: [{ denom: 'ubld' }],
116
+ connections,
117
+ bech32Prefix: 'agoric',
118
+ };
119
+
120
+ return chainDetails;
121
+ };
@@ -0,0 +1,46 @@
1
+ /**
2
+ * @import {DeployScriptEndownments} from '@agoric/deploy-script-support/src/externalTypes.js';
3
+ * @import {CosmosChainInfo, Denom, DenomDetail} from '@agoric/orchestration';
4
+ * @import {ParseArgsConfig} from 'node:util'
5
+ */
6
+
7
+ /**
8
+ * Parse `chainInfo` and `assetInfo` into builder opts
9
+ *
10
+ * NOTE: Ambient authority via `node:util`
11
+ *
12
+ * @param {DeployScriptEndownments['scriptArgs']} scriptArgs
13
+ * @returns {Promise<{
14
+ * chainInfo: Record<string, CosmosChainInfo>;
15
+ * assetInfo: [Denom, DenomDetail & { brandKey?: string }][];
16
+ * }>}
17
+ */
18
+ export const parseChainHubOpts = async scriptArgs => {
19
+ // import dynamically so the modules can work in CoreEval environment
20
+ const { parseArgs } = await import('node:util');
21
+
22
+ /** @type {ParseArgsConfig['options']} */
23
+ const parserOpts = {
24
+ chainInfo: { type: 'string' },
25
+ assetInfo: { type: 'string' },
26
+ };
27
+ const {
28
+ values: { chainInfo, assetInfo },
29
+ } = parseArgs({
30
+ args: scriptArgs,
31
+ options: parserOpts,
32
+ });
33
+
34
+ const parseChainInfo = () => {
35
+ if (typeof chainInfo !== 'string') return undefined;
36
+ return JSON.parse(chainInfo);
37
+ };
38
+ const parseAssetInfo = () => {
39
+ if (typeof assetInfo !== 'string') return undefined;
40
+ return JSON.parse(assetInfo);
41
+ };
42
+ return harden({
43
+ chainInfo: parseChainInfo(),
44
+ assetInfo: parseAssetInfo(),
45
+ });
46
+ };
@@ -0,0 +1,30 @@
1
+ import { makeHelpers } from '@agoric/deploy-script-support';
2
+
3
+ /** @type {import('@agoric/deploy-script-support/src/externalTypes.js').CoreEvalBuilder} */
4
+ export const defaultProposalBuilder = async ({ publishRef, install }) => {
5
+ const vatNameToEntrypoint = {
6
+ localchain: '@agoric/vats/src/vat-localchain.js',
7
+ transfer: '@agoric/vats/src/vat-transfer.js',
8
+ };
9
+
10
+ return harden({
11
+ sourceSpec: '@agoric/vats/src/proposals/localchain-hook-msg-send.js',
12
+ getManifestCall: [
13
+ 'getManifestForMsgSendToTransfer',
14
+ {
15
+ bundleRefs: Object.fromEntries(
16
+ Object.entries(vatNameToEntrypoint).map(
17
+ ([name, entrypoint]) =>
18
+ /** @type {const} */ ([name, publishRef(install(entrypoint))]),
19
+ ),
20
+ ),
21
+ },
22
+ ],
23
+ });
24
+ };
25
+
26
+ /** @type {import('@agoric/deploy-script-support/src/externalTypes.js').DeployScriptFunction} */
27
+ export default async (homeP, endowments) => {
28
+ const { writeCoreProposal } = await makeHelpers(homeP, endowments);
29
+ await writeCoreProposal('hook-localchain', defaultProposalBuilder);
30
+ };
@@ -0,0 +1,36 @@
1
+ import { makeHelpers } from '@agoric/deploy-script-support';
2
+ import { startBasicFlows } from '@agoric/orchestration/src/proposals/start-basic-flows.js';
3
+ import { parseChainHubOpts } from './helpers.js';
4
+
5
+ /** @type {import('@agoric/deploy-script-support/src/externalTypes.js').CoreEvalBuilder} */
6
+ export const defaultProposalBuilder = async (
7
+ { publishRef, install },
8
+ options,
9
+ ) => {
10
+ return harden({
11
+ sourceSpec: '@agoric/orchestration/src/proposals/start-basic-flows.js',
12
+ getManifestCall: [
13
+ 'getManifestForContract',
14
+ {
15
+ installKeys: {
16
+ basicFlows: publishRef(
17
+ install(
18
+ '@agoric/orchestration/src/examples/basic-flows.contract.js',
19
+ ),
20
+ ),
21
+ },
22
+ options,
23
+ },
24
+ ],
25
+ });
26
+ };
27
+
28
+ /** @type {import('@agoric/deploy-script-support/src/externalTypes.js').DeployScriptFunction} */
29
+ export default async (homeP, endowments) => {
30
+ const { scriptArgs } = endowments;
31
+ const opts = parseChainHubOpts(scriptArgs);
32
+ const { writeCoreEval } = await makeHelpers(homeP, endowments);
33
+ await writeCoreEval(startBasicFlows.name, utils =>
34
+ defaultProposalBuilder(utils, opts),
35
+ );
36
+ };
@@ -0,0 +1,33 @@
1
+ import { makeHelpers } from '@agoric/deploy-script-support';
2
+ import { parseChainHubOpts } from './helpers.js';
3
+
4
+ /** @type {import('@agoric/deploy-script-support/src/externalTypes.js').CoreEvalBuilder} */
5
+ export const defaultProposalBuilder = async (
6
+ { publishRef, install },
7
+ options,
8
+ ) => {
9
+ return harden({
10
+ sourceSpec: '@agoric/orchestration/src/proposals/start-stakeAtom.js',
11
+ getManifestCall: [
12
+ 'getManifestForStakeAtom',
13
+ {
14
+ installKeys: {
15
+ stakeIca: publishRef(
16
+ install('@agoric/orchestration/src/examples/stake-ica.contract.js'),
17
+ ),
18
+ },
19
+ options,
20
+ },
21
+ ],
22
+ });
23
+ };
24
+
25
+ /** @type {import('@agoric/deploy-script-support/src/externalTypes.js').DeployScriptFunction} */
26
+ export default async (homeP, endowments) => {
27
+ const { scriptArgs } = endowments;
28
+ const opts = parseChainHubOpts(scriptArgs);
29
+ const { writeCoreEval } = await makeHelpers(homeP, endowments);
30
+ await writeCoreEval('start-stakeAtom', utils =>
31
+ defaultProposalBuilder(utils, opts),
32
+ );
33
+ };
@@ -0,0 +1,24 @@
1
+ // @ts-check
2
+ import { makeHelpers } from '@agoric/deploy-script-support';
3
+
4
+ /** @type {import('@agoric/deploy-script-support/src/externalTypes.js').CoreEvalBuilder} */
5
+ export const defaultProposalBuilder = async ({ publishRef, install }) =>
6
+ harden({
7
+ sourceSpec: '@agoric/orchestration/src/proposals/start-stakeBld.js',
8
+ getManifestCall: [
9
+ 'getManifestForStakeBld',
10
+ {
11
+ installKeys: {
12
+ stakeBld: publishRef(
13
+ install('@agoric/orchestration/src/examples/stake-bld.contract.js'),
14
+ ),
15
+ },
16
+ },
17
+ ],
18
+ });
19
+
20
+ /** @type {import('@agoric/deploy-script-support/src/externalTypes.js').DeployScriptFunction} */
21
+ export default async (homeP, endowments) => {
22
+ const { writeCoreEval } = await makeHelpers(homeP, endowments);
23
+ await writeCoreEval('start-stakeBld', defaultProposalBuilder);
24
+ };
@@ -0,0 +1,33 @@
1
+ import { makeHelpers } from '@agoric/deploy-script-support';
2
+ import { parseChainHubOpts } from './helpers.js';
3
+
4
+ /** @type {import('@agoric/deploy-script-support/src/externalTypes.js').CoreEvalBuilder} */
5
+ export const defaultProposalBuilder = async (
6
+ { publishRef, install },
7
+ options,
8
+ ) => {
9
+ return harden({
10
+ sourceSpec: '@agoric/orchestration/src/proposals/start-stakeOsmo.js',
11
+ getManifestCall: [
12
+ 'getManifestForStakeOsmo',
13
+ {
14
+ installKeys: {
15
+ stakeIca: publishRef(
16
+ install('@agoric/orchestration/src/examples/stake-ica.contract.js'),
17
+ ),
18
+ },
19
+ options,
20
+ },
21
+ ],
22
+ });
23
+ };
24
+
25
+ /** @type {import('@agoric/deploy-script-support/src/externalTypes.js').DeployScriptFunction} */
26
+ export default async (homeP, endowments) => {
27
+ const { scriptArgs } = endowments;
28
+ const opts = parseChainHubOpts(scriptArgs);
29
+ const { writeCoreEval } = await makeHelpers(homeP, endowments);
30
+ await writeCoreEval('start-stakeOsmo', utils =>
31
+ defaultProposalBuilder(utils, opts),
32
+ );
33
+ };
@@ -0,0 +1,14 @@
1
+ import { makeHelpers } from '@agoric/deploy-script-support';
2
+
3
+ /** @type {import('@agoric/deploy-script-support/src/externalTypes.js').CoreEvalBuilder} */
4
+ export const defaultProposalBuilder = async () =>
5
+ harden({
6
+ sourceSpec: '@agoric/orchestration/src/proposals/init-chain-info.js',
7
+ getManifestCall: ['getManifestForChainInfo'],
8
+ });
9
+
10
+ /** @type {import('@agoric/deploy-script-support/src/externalTypes.js').DeployScriptFunction} */
11
+ export default async (homeP, endowments) => {
12
+ const { writeCoreEval } = await makeHelpers(homeP, endowments);
13
+ await writeCoreEval('gov-orchestration', defaultProposalBuilder);
14
+ };
@@ -1,6 +1,6 @@
1
1
  import { makeHelpers } from '@agoric/deploy-script-support';
2
2
 
3
- /** @type {import('@agoric/deploy-script-support/src/externalTypes.js').ProposalBuilder} */
3
+ /** @type {import('@agoric/deploy-script-support/src/externalTypes.js').CoreEvalBuilder} */
4
4
  export const defaultProposalBuilder = async ({ publishRef, install }) =>
5
5
  harden({
6
6
  sourceSpec: '@agoric/pegasus/src/proposals/core-proposal.js',
@@ -17,7 +17,8 @@ export const defaultProposalBuilder = async ({ publishRef, install }) =>
17
17
  ],
18
18
  });
19
19
 
20
+ /** @type {import('@agoric/deploy-script-support/src/externalTypes.js').DeployScriptFunction} */
20
21
  export default async (homeP, endowments) => {
21
- const { writeCoreProposal } = await makeHelpers(homeP, endowments);
22
- await writeCoreProposal('gov-pegasus', defaultProposalBuilder);
22
+ const { writeCoreEval } = await makeHelpers(homeP, endowments);
23
+ await writeCoreEval('gov-pegasus', defaultProposalBuilder);
23
24
  };
@@ -8,8 +8,8 @@
8
8
  import { makeHelpers } from '@agoric/deploy-script-support';
9
9
  import { getManifestForGame1 } from '@agoric/smart-wallet/test/start-game1-proposal.js';
10
10
 
11
- /** @type {import('@agoric/deploy-script-support/src/externalTypes.js').ProposalBuilder} */
12
- export const game1ProposalBuilder = async ({ publishRef, install }) => {
11
+ /** @type {import('@agoric/deploy-script-support/src/externalTypes.js').CoreEvalBuilder} */
12
+ const game1ProposalBuilder = async ({ publishRef, install }) => {
13
13
  return harden({
14
14
  sourceSpec: '@agoric/smart-wallet/test/start-game1-proposal.js',
15
15
  getManifestCall: [
@@ -27,7 +27,8 @@ export const game1ProposalBuilder = async ({ publishRef, install }) => {
27
27
  });
28
28
  };
29
29
 
30
+ /** @type {import('@agoric/deploy-script-support/src/externalTypes.js').DeployScriptFunction} */
30
31
  export default async (homeP, endowments) => {
31
- const { writeCoreProposal } = await makeHelpers(homeP, endowments);
32
- await writeCoreProposal('start-game1', game1ProposalBuilder);
32
+ const { writeCoreEval } = await makeHelpers(homeP, endowments);
33
+ await writeCoreEval('start-game1', game1ProposalBuilder);
33
34
  };