moonwall 1.0.0-dev.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/LICENSE +681 -0
- package/README.md +54 -0
- package/config_schema.json +811 -0
- package/dist/api/constants/accounts.d.ts +36 -0
- package/dist/api/constants/accounts.d.ts.map +1 -0
- package/dist/api/constants/accounts.js +67 -0
- package/dist/api/constants/chain.d.ts +134 -0
- package/dist/api/constants/chain.d.ts.map +1 -0
- package/dist/api/constants/chain.js +149 -0
- package/dist/api/constants/index.d.ts +4 -0
- package/dist/api/constants/index.d.ts.map +1 -0
- package/dist/api/constants/index.js +3 -0
- package/dist/api/constants/smartContract.d.ts +29 -0
- package/dist/api/constants/smartContract.d.ts.map +1 -0
- package/dist/api/constants/smartContract.js +118 -0
- package/dist/api/testing/blocks.d.ts +59 -0
- package/dist/api/testing/blocks.d.ts.map +1 -0
- package/dist/api/testing/blocks.js +147 -0
- package/dist/api/testing/contracts.d.ts +5 -0
- package/dist/api/testing/contracts.d.ts.map +1 -0
- package/dist/api/testing/contracts.js +32 -0
- package/dist/api/testing/ethers.d.ts +3 -0
- package/dist/api/testing/ethers.d.ts.map +1 -0
- package/dist/api/testing/ethers.js +38 -0
- package/dist/api/testing/events.d.ts +12 -0
- package/dist/api/testing/events.d.ts.map +1 -0
- package/dist/api/testing/events.js +23 -0
- package/dist/api/testing/extrinsics.d.ts +5 -0
- package/dist/api/testing/extrinsics.d.ts.map +1 -0
- package/dist/api/testing/extrinsics.js +10 -0
- package/dist/api/testing/index.d.ts +9 -0
- package/dist/api/testing/index.d.ts.map +1 -0
- package/dist/api/testing/index.js +8 -0
- package/dist/api/testing/jumping.d.ts +8 -0
- package/dist/api/testing/jumping.d.ts.map +1 -0
- package/dist/api/testing/jumping.js +78 -0
- package/dist/api/testing/providers.d.ts +18 -0
- package/dist/api/testing/providers.d.ts.map +1 -0
- package/dist/api/testing/providers.js +34 -0
- package/dist/api/testing/viem.d.ts +139 -0
- package/dist/api/testing/viem.d.ts.map +1 -0
- package/dist/api/testing/viem.js +247 -0
- package/dist/api/types/config.d.ts +609 -0
- package/dist/api/types/config.d.ts.map +1 -0
- package/dist/api/types/config.js +1 -0
- package/dist/api/types/context.d.ts +125 -0
- package/dist/api/types/context.d.ts.map +1 -0
- package/dist/api/types/context.js +1 -0
- package/dist/api/types/contracts.d.ts +66 -0
- package/dist/api/types/contracts.d.ts.map +1 -0
- package/dist/api/types/contracts.js +1 -0
- package/dist/api/types/eth.d.ts +3 -0
- package/dist/api/types/eth.d.ts.map +1 -0
- package/dist/api/types/eth.js +1 -0
- package/dist/api/types/foundations.d.ts +11 -0
- package/dist/api/types/foundations.d.ts.map +1 -0
- package/dist/api/types/foundations.js +1 -0
- package/dist/api/types/helpers.d.ts +7 -0
- package/dist/api/types/helpers.d.ts.map +1 -0
- package/dist/api/types/helpers.js +1 -0
- package/dist/api/types/index.d.ts +8 -0
- package/dist/api/types/index.d.ts.map +1 -0
- package/dist/api/types/index.js +7 -0
- package/dist/api/types/runner.d.ts +490 -0
- package/dist/api/types/runner.d.ts.map +1 -0
- package/dist/api/types/runner.js +1 -0
- package/dist/cli/cmds/components/LogViewer.d.ts +17 -0
- package/dist/cli/cmds/components/LogViewer.d.ts.map +1 -0
- package/dist/cli/cmds/components/LogViewer.js +171 -0
- package/dist/cli/cmds/entrypoint.d.ts +6 -0
- package/dist/cli/cmds/entrypoint.d.ts.map +1 -0
- package/dist/cli/cmds/entrypoint.js +192 -0
- package/dist/cli/cmds/interactiveCmds/chopsticksIntCmds.d.ts +2 -0
- package/dist/cli/cmds/interactiveCmds/chopsticksIntCmds.d.ts.map +1 -0
- package/dist/cli/cmds/interactiveCmds/chopsticksIntCmds.js +117 -0
- package/dist/cli/cmds/interactiveCmds/devIntCmds.d.ts +2 -0
- package/dist/cli/cmds/interactiveCmds/devIntCmds.d.ts.map +1 -0
- package/dist/cli/cmds/interactiveCmds/devIntCmds.js +103 -0
- package/dist/cli/cmds/interactiveCmds/index.d.ts +4 -0
- package/dist/cli/cmds/interactiveCmds/index.d.ts.map +1 -0
- package/dist/cli/cmds/interactiveCmds/index.js +3 -0
- package/dist/cli/cmds/interactiveCmds/zombieIntCmds.d.ts +2 -0
- package/dist/cli/cmds/interactiveCmds/zombieIntCmds.d.ts.map +1 -0
- package/dist/cli/cmds/interactiveCmds/zombieIntCmds.js +32 -0
- package/dist/cli/cmds/main.d.ts +2 -0
- package/dist/cli/cmds/main.d.ts.map +1 -0
- package/dist/cli/cmds/main.js +336 -0
- package/dist/cli/cmds/runNetwork.d.ts +3 -0
- package/dist/cli/cmds/runNetwork.d.ts.map +1 -0
- package/dist/cli/cmds/runNetwork.js +292 -0
- package/dist/cli/cmds/runTests.d.ts +12 -0
- package/dist/cli/cmds/runTests.d.ts.map +1 -0
- package/dist/cli/cmds/runTests.js +257 -0
- package/dist/cli/internal/cmdFunctions/downloader.d.ts +4 -0
- package/dist/cli/internal/cmdFunctions/downloader.d.ts.map +1 -0
- package/dist/cli/internal/cmdFunctions/downloader.js +49 -0
- package/dist/cli/internal/cmdFunctions/fetchArtifact.d.ts +10 -0
- package/dist/cli/internal/cmdFunctions/fetchArtifact.d.ts.map +1 -0
- package/dist/cli/internal/cmdFunctions/fetchArtifact.js +145 -0
- package/dist/cli/internal/cmdFunctions/index.d.ts +5 -0
- package/dist/cli/internal/cmdFunctions/index.d.ts.map +1 -0
- package/dist/cli/internal/cmdFunctions/index.js +4 -0
- package/dist/cli/internal/cmdFunctions/initialisation.d.ts +20 -0
- package/dist/cli/internal/cmdFunctions/initialisation.d.ts.map +1 -0
- package/dist/cli/internal/cmdFunctions/initialisation.js +150 -0
- package/dist/cli/internal/cmdFunctions/tempLogs.d.ts +3 -0
- package/dist/cli/internal/cmdFunctions/tempLogs.d.ts.map +1 -0
- package/dist/cli/internal/cmdFunctions/tempLogs.js +37 -0
- package/dist/cli/internal/commandParsers.d.ts +59 -0
- package/dist/cli/internal/commandParsers.d.ts.map +1 -0
- package/dist/cli/internal/commandParsers.js +305 -0
- package/dist/cli/internal/deriveTestIds.d.ts +8 -0
- package/dist/cli/internal/deriveTestIds.d.ts.map +1 -0
- package/dist/cli/internal/deriveTestIds.js +123 -0
- package/dist/cli/internal/effect/index.d.ts +6 -0
- package/dist/cli/internal/effect/index.d.ts.map +1 -0
- package/dist/cli/internal/effect/index.js +5 -0
- package/dist/cli/internal/fileCheckers.d.ts +11 -0
- package/dist/cli/internal/fileCheckers.d.ts.map +1 -0
- package/dist/cli/internal/fileCheckers.js +165 -0
- package/dist/cli/internal/foundations/index.d.ts +4 -0
- package/dist/cli/internal/foundations/index.d.ts.map +1 -0
- package/dist/cli/internal/foundations/index.js +4 -0
- package/dist/cli/internal/index.d.ts +12 -0
- package/dist/cli/internal/index.d.ts.map +1 -0
- package/dist/cli/internal/index.js +11 -0
- package/dist/cli/internal/launcherCommon.d.ts +4 -0
- package/dist/cli/internal/launcherCommon.d.ts.map +1 -0
- package/dist/cli/internal/launcherCommon.js +130 -0
- package/dist/cli/internal/localNode.d.ts +16 -0
- package/dist/cli/internal/localNode.d.ts.map +1 -0
- package/dist/cli/internal/localNode.js +362 -0
- package/dist/cli/internal/logging.d.ts +2 -0
- package/dist/cli/internal/logging.d.ts.map +1 -0
- package/dist/cli/internal/logging.js +26 -0
- package/dist/cli/internal/node.d.ts +33 -0
- package/dist/cli/internal/node.d.ts.map +1 -0
- package/dist/cli/internal/node.js +228 -0
- package/dist/cli/internal/processHelpers.d.ts +17 -0
- package/dist/cli/internal/processHelpers.d.ts.map +1 -0
- package/dist/cli/internal/processHelpers.js +56 -0
- package/dist/cli/internal/providerFactories.d.ts +48 -0
- package/dist/cli/internal/providerFactories.d.ts.map +1 -0
- package/dist/cli/internal/providerFactories.js +442 -0
- package/dist/cli/internal/testIdParser.d.ts +34 -0
- package/dist/cli/internal/testIdParser.d.ts.map +1 -0
- package/dist/cli/internal/testIdParser.js +167 -0
- package/dist/cli/lib/binariesHelpers.d.ts +15 -0
- package/dist/cli/lib/binariesHelpers.d.ts.map +1 -0
- package/dist/cli/lib/binariesHelpers.js +99 -0
- package/dist/cli/lib/configReader.d.ts +8 -0
- package/dist/cli/lib/configReader.d.ts.map +1 -0
- package/dist/cli/lib/configReader.js +115 -0
- package/dist/cli/lib/contractFunctions.d.ts +2 -0
- package/dist/cli/lib/contractFunctions.d.ts.map +1 -0
- package/dist/cli/lib/contractFunctions.js +2 -0
- package/dist/cli/lib/globalContext.d.ts +46 -0
- package/dist/cli/lib/globalContext.d.ts.map +1 -0
- package/dist/cli/lib/globalContext.js +710 -0
- package/dist/cli/lib/governanceProcedures.d.ts +27 -0
- package/dist/cli/lib/governanceProcedures.d.ts.map +1 -0
- package/dist/cli/lib/governanceProcedures.js +458 -0
- package/dist/cli/lib/handlers/index.d.ts +5 -0
- package/dist/cli/lib/handlers/index.d.ts.map +1 -0
- package/dist/cli/lib/handlers/index.js +5 -0
- package/dist/cli/lib/repoDefinitions/index.d.ts +6 -0
- package/dist/cli/lib/repoDefinitions/index.d.ts.map +1 -0
- package/dist/cli/lib/repoDefinitions/index.js +21 -0
- package/dist/cli/lib/repoDefinitions/moonbeam.d.ts +4 -0
- package/dist/cli/lib/repoDefinitions/moonbeam.d.ts.map +1 -0
- package/dist/cli/lib/repoDefinitions/moonbeam.js +30 -0
- package/dist/cli/lib/repoDefinitions/polkadot.d.ts +4 -0
- package/dist/cli/lib/repoDefinitions/polkadot.d.ts.map +1 -0
- package/dist/cli/lib/repoDefinitions/polkadot.js +11 -0
- package/dist/cli/lib/repoDefinitions/tanssi.d.ts +4 -0
- package/dist/cli/lib/repoDefinitions/tanssi.d.ts.map +1 -0
- package/dist/cli/lib/repoDefinitions/tanssi.js +14 -0
- package/dist/cli/lib/rpcFunctions.d.ts +2 -0
- package/dist/cli/lib/rpcFunctions.d.ts.map +1 -0
- package/dist/cli/lib/rpcFunctions.js +26 -0
- package/dist/cli/lib/runnerContext.d.ts +32 -0
- package/dist/cli/lib/runnerContext.d.ts.map +1 -0
- package/dist/cli/lib/runnerContext.js +156 -0
- package/dist/cli/lib/shardManager.d.ts +40 -0
- package/dist/cli/lib/shardManager.d.ts.map +1 -0
- package/dist/cli/lib/shardManager.js +80 -0
- package/dist/cli/lib/upgradeProcedures.d.ts +5 -0
- package/dist/cli/lib/upgradeProcedures.d.ts.map +1 -0
- package/dist/cli/lib/upgradeProcedures.js +221 -0
- package/dist/cli.d.ts +4 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +3 -0
- package/dist/contracts/contractInteraction.d.ts +17 -0
- package/dist/contracts/contractInteraction.d.ts.map +1 -0
- package/dist/contracts/contractInteraction.js +170 -0
- package/dist/contracts/index.d.ts +2 -0
- package/dist/contracts/index.d.ts.map +1 -0
- package/dist/contracts/index.js +1 -0
- package/dist/foundations/chopsticks/handler.d.ts +3 -0
- package/dist/foundations/chopsticks/handler.d.ts.map +1 -0
- package/dist/foundations/chopsticks/handler.js +93 -0
- package/dist/foundations/chopsticks/helpers.d.ts +27 -0
- package/dist/foundations/chopsticks/helpers.d.ts.map +1 -0
- package/dist/foundations/chopsticks/helpers.js +133 -0
- package/dist/foundations/dev/handler.d.ts +3 -0
- package/dist/foundations/dev/handler.d.ts.map +1 -0
- package/dist/foundations/dev/handler.js +136 -0
- package/dist/foundations/dev/helpers.d.ts +27 -0
- package/dist/foundations/dev/helpers.d.ts.map +1 -0
- package/dist/foundations/dev/helpers.js +161 -0
- package/dist/foundations/read-only/handler.d.ts +3 -0
- package/dist/foundations/read-only/handler.d.ts.map +1 -0
- package/dist/foundations/read-only/handler.js +32 -0
- package/dist/foundations/zombie/handler.d.ts +3 -0
- package/dist/foundations/zombie/handler.d.ts.map +1 -0
- package/dist/foundations/zombie/handler.js +92 -0
- package/dist/foundations/zombie/helpers.d.ts +16 -0
- package/dist/foundations/zombie/helpers.d.ts.map +1 -0
- package/dist/foundations/zombie/helpers.js +97 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +47 -0
- package/dist/internal/common.d.ts +3 -0
- package/dist/internal/common.d.ts.map +1 -0
- package/dist/internal/common.js +41 -0
- package/dist/internal/index.d.ts +4 -0
- package/dist/internal/index.d.ts.map +1 -0
- package/dist/internal/index.js +3 -0
- package/dist/internal/logger.d.ts +24 -0
- package/dist/internal/logger.d.ts.map +1 -0
- package/dist/internal/logger.js +66 -0
- package/dist/internal/logging.d.ts +7 -0
- package/dist/internal/logging.d.ts.map +1 -0
- package/dist/internal/logging.js +36 -0
- package/dist/moondebug.d.ts +3 -0
- package/dist/moondebug.d.ts.map +1 -0
- package/dist/moondebug.js +2 -0
- package/dist/services/cache/FileLock.d.ts +11 -0
- package/dist/services/cache/FileLock.d.ts.map +1 -0
- package/dist/services/cache/FileLock.js +68 -0
- package/dist/services/cache/StartupCacheService.d.ts +23 -0
- package/dist/services/cache/StartupCacheService.d.ts.map +1 -0
- package/dist/services/cache/StartupCacheService.js +159 -0
- package/dist/services/cache/index.d.ts +3 -0
- package/dist/services/cache/index.d.ts.map +1 -0
- package/dist/services/cache/index.js +2 -0
- package/dist/services/chopsticks/ChopsticksMultiChain.d.ts +158 -0
- package/dist/services/chopsticks/ChopsticksMultiChain.d.ts.map +1 -0
- package/dist/services/chopsticks/ChopsticksMultiChain.js +282 -0
- package/dist/services/chopsticks/ChopsticksService.d.ts +313 -0
- package/dist/services/chopsticks/ChopsticksService.d.ts.map +1 -0
- package/dist/services/chopsticks/ChopsticksService.js +77 -0
- package/dist/services/chopsticks/chopsticksConfigParser.d.ts +40 -0
- package/dist/services/chopsticks/chopsticksConfigParser.d.ts.map +1 -0
- package/dist/services/chopsticks/chopsticksConfigParser.js +201 -0
- package/dist/services/chopsticks/index.d.ts +5 -0
- package/dist/services/chopsticks/index.d.ts.map +1 -0
- package/dist/services/chopsticks/index.js +4 -0
- package/dist/services/chopsticks/launchChopsticksEffect.d.ts +225 -0
- package/dist/services/chopsticks/launchChopsticksEffect.d.ts.map +1 -0
- package/dist/services/chopsticks/launchChopsticksEffect.js +623 -0
- package/dist/services/config/configAccessors.d.ts +41 -0
- package/dist/services/config/configAccessors.d.ts.map +1 -0
- package/dist/services/config/configAccessors.js +149 -0
- package/dist/services/config/index.d.ts +2 -0
- package/dist/services/config/index.d.ts.map +1 -0
- package/dist/services/config/index.js +1 -0
- package/dist/services/errors.d.ts +72 -0
- package/dist/services/errors.d.ts.map +1 -0
- package/dist/services/errors.js +31 -0
- package/dist/services/index.d.ts +7 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +6 -0
- package/dist/services/network/NodeReadinessService.d.ts +35 -0
- package/dist/services/network/NodeReadinessService.d.ts.map +1 -0
- package/dist/services/network/NodeReadinessService.js +120 -0
- package/dist/services/network/PortDiscoveryService.d.ts +22 -0
- package/dist/services/network/PortDiscoveryService.d.ts.map +1 -0
- package/dist/services/network/PortDiscoveryService.js +77 -0
- package/dist/services/network/RpcPortDiscoveryService.d.ts +25 -0
- package/dist/services/network/RpcPortDiscoveryService.d.ts.map +1 -0
- package/dist/services/network/RpcPortDiscoveryService.js +136 -0
- package/dist/services/network/index.d.ts +4 -0
- package/dist/services/network/index.d.ts.map +1 -0
- package/dist/services/network/index.js +3 -0
- package/dist/services/process/ProcessManagerService.d.ts +49 -0
- package/dist/services/process/ProcessManagerService.d.ts.map +1 -0
- package/dist/services/process/ProcessManagerService.js +162 -0
- package/dist/services/process/index.d.ts +3 -0
- package/dist/services/process/index.d.ts.map +1 -0
- package/dist/services/process/index.js +2 -0
- package/dist/services/process/launchNodeEffect.d.ts +40 -0
- package/dist/services/process/launchNodeEffect.d.ts.map +1 -0
- package/dist/services/process/launchNodeEffect.js +86 -0
- package/dist/util/functions/index.d.ts +3 -0
- package/dist/util/functions/index.d.ts.map +1 -0
- package/dist/util/functions/index.js +4 -0
- package/dist/util/index.d.ts +4 -0
- package/dist/util/index.d.ts.map +1 -0
- package/dist/util/index.js +2 -0
- package/package.json +157 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { DevModeContext } from "../../api/types/index.js";
|
|
2
|
+
import type { ApiPromise } from "@polkadot/api";
|
|
3
|
+
import type { ApiTypes, SubmittableExtrinsic } from "@polkadot/api/types";
|
|
4
|
+
import type { KeyringPair } from "@polkadot/keyring/types";
|
|
5
|
+
export declare const COUNCIL_MEMBERS: KeyringPair[];
|
|
6
|
+
export declare const COUNCIL_THRESHOLD: number;
|
|
7
|
+
export declare const TECHNICAL_COMMITTEE_MEMBERS: KeyringPair[];
|
|
8
|
+
export declare const TECHNICAL_COMMITTEE_THRESHOLD: number;
|
|
9
|
+
export declare const OPEN_TECHNICAL_COMMITTEE_MEMBERS: KeyringPair[];
|
|
10
|
+
export declare const OPEN_TECHNICAL_COMMITTEE_THRESHOLD: number;
|
|
11
|
+
export declare const notePreimage: <Call extends SubmittableExtrinsic<ApiType>, ApiType extends ApiTypes>(context: DevModeContext, proposal: Call, account?: KeyringPair) => Promise<string>;
|
|
12
|
+
export declare const instantFastTrack: <Call extends SubmittableExtrinsic<ApiType>, ApiType extends ApiTypes>(context: DevModeContext, proposal: string | Call, { votingPeriod, delayPeriod }?: {
|
|
13
|
+
votingPeriod: number;
|
|
14
|
+
delayPeriod: number;
|
|
15
|
+
}) => Promise<string>;
|
|
16
|
+
export declare const whiteListedTrack: <Call extends SubmittableExtrinsic<ApiType>, ApiType extends ApiTypes>(context: DevModeContext, proposal: string | Call) => Promise<boolean>;
|
|
17
|
+
export declare const execOpenTechCommitteeProposal: <Call extends SubmittableExtrinsic<ApiType>, ApiType extends ApiTypes>(context: DevModeContext, call: Call | string, voters?: KeyringPair[], threshold?: number) => Promise<import("../../index.js").ExtrinsicCreation>;
|
|
18
|
+
export declare const execCouncilProposal: <Call extends SubmittableExtrinsic<ApiType>, ApiType extends ApiTypes>(context: DevModeContext, polkadotCall: Call, index?: number, voters?: KeyringPair[], threshold?: number) => Promise<import("../../index.js").ExtrinsicCreation | import("../../index.js").BlockCreationResponse<ApiTypes, Promise<SubmittableExtrinsic<"promise", import("@polkadot/types/types").ISubmittableResult>>>>;
|
|
19
|
+
export declare const proposeReferendaAndDeposit: <Call extends SubmittableExtrinsic<ApiType>, ApiType extends ApiTypes>(context: DevModeContext, decisionDepositer: KeyringPair, proposal: string | Call, origin: unknown) => Promise<[number, string]>;
|
|
20
|
+
export declare const dispatchAsGeneralAdmin: <Call extends SubmittableExtrinsic<ApiType>, ApiType extends ApiTypes>(context: DevModeContext, call: string | Call) => Promise<void>;
|
|
21
|
+
export declare const maximizeConvictionVotingOf: (context: DevModeContext, voters: KeyringPair[], refIndex: number) => Promise<void>;
|
|
22
|
+
export declare const execTechnicalCommitteeProposal: <Call extends SubmittableExtrinsic<ApiType>, ApiType extends ApiTypes>(context: DevModeContext, polkadotCall: Call, voters?: KeyringPair[], threshold?: number) => Promise<import("../../index.js").ExtrinsicCreation | undefined>;
|
|
23
|
+
export declare const executeOpenTechCommitteeProposal: (api: ApiPromise, encodedHash: string) => Promise<void>;
|
|
24
|
+
export declare const executeProposalWithCouncil: (api: ApiPromise, encodedHash: string) => Promise<void>;
|
|
25
|
+
export declare const cancelReferendaWithCouncil: (api: ApiPromise, refIndex: number) => Promise<void>;
|
|
26
|
+
export declare const fastFowardToNextEvent: (context: DevModeContext) => Promise<void>;
|
|
27
|
+
//# sourceMappingURL=governanceProcedures.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"governanceProcedures.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/governanceProcedures.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,458 @@
|
|
|
1
|
+
import { GLMR, alith, baltathar, charleth, dorothy, ethan, faith, filterAndApply, signAndSend, } from "../../util/index.js";
|
|
2
|
+
import { blake2AsHex } from "@polkadot/util-crypto";
|
|
3
|
+
export const COUNCIL_MEMBERS = [baltathar, charleth, dorothy];
|
|
4
|
+
export const COUNCIL_THRESHOLD = Math.ceil((COUNCIL_MEMBERS.length * 2) / 3);
|
|
5
|
+
export const TECHNICAL_COMMITTEE_MEMBERS = [alith, baltathar];
|
|
6
|
+
export const TECHNICAL_COMMITTEE_THRESHOLD = Math.ceil((TECHNICAL_COMMITTEE_MEMBERS.length * 2) / 3);
|
|
7
|
+
export const OPEN_TECHNICAL_COMMITTEE_MEMBERS = [alith, baltathar];
|
|
8
|
+
export const OPEN_TECHNICAL_COMMITTEE_THRESHOLD = Math.ceil((OPEN_TECHNICAL_COMMITTEE_MEMBERS.length * 2) / 3);
|
|
9
|
+
// TODO: Refactor to support both instant sealing and parachain environment
|
|
10
|
+
// (using a waitOrCreateNextBlock common function)
|
|
11
|
+
export const notePreimage = async (context, proposal, account = alith) => {
|
|
12
|
+
const encodedProposal = proposal.method.toHex() || "";
|
|
13
|
+
await context.createBlock(context.polkadotJs().tx.preimage.notePreimage(encodedProposal).signAsync(account));
|
|
14
|
+
return blake2AsHex(encodedProposal);
|
|
15
|
+
};
|
|
16
|
+
// Creates the Council Proposal and fast track it before executing it
|
|
17
|
+
export const instantFastTrack = async (context, proposal, { votingPeriod, delayPeriod } = { votingPeriod: 2, delayPeriod: 0 }) => {
|
|
18
|
+
const proposalHash = typeof proposal === "string" ? proposal : await notePreimage(context, proposal);
|
|
19
|
+
await execCouncilProposal(context, context.polkadotJs().tx.democracy.externalProposeMajority({
|
|
20
|
+
Lookup: {
|
|
21
|
+
hash: proposalHash,
|
|
22
|
+
len: typeof proposal === "string" ? proposal : proposal.method.encodedLength,
|
|
23
|
+
},
|
|
24
|
+
}));
|
|
25
|
+
await execTechnicalCommitteeProposal(context, context.polkadotJs().tx.democracy.fastTrack(proposalHash, votingPeriod, delayPeriod));
|
|
26
|
+
return proposalHash;
|
|
27
|
+
};
|
|
28
|
+
// Uses WhitelistedOrigin track to quickly execute a call
|
|
29
|
+
export const whiteListedTrack = async (context, proposal) => {
|
|
30
|
+
const proposalHash = typeof proposal === "string" ? proposal : await notePreimage(context, proposal);
|
|
31
|
+
// Construct dispatchWhiteListed call
|
|
32
|
+
const proposalLen = (await context.pjsApi.query.preimage.requestStatusFor(proposalHash)).unwrap().asUnrequested.len;
|
|
33
|
+
const dispatchWLCall = context.pjsApi.tx.whitelist.dispatchWhitelistedCall(proposalHash, proposalLen, {
|
|
34
|
+
refTime: 2_000_000_000,
|
|
35
|
+
proofSize: 100_000,
|
|
36
|
+
});
|
|
37
|
+
// Note preimage of it
|
|
38
|
+
const wLPreimage = await notePreimage(context, dispatchWLCall);
|
|
39
|
+
const wLPreimageLen = dispatchWLCall.encodedLength - 2;
|
|
40
|
+
console.log(`📝 DispatchWhitelistedCall preimage noted: ${wLPreimage.slice(0, 6)}...${wLPreimage.slice(-4)}, len: ${wLPreimageLen}`);
|
|
41
|
+
// Submit openGov proposal
|
|
42
|
+
const openGovProposal = await context.pjsApi.tx.referenda
|
|
43
|
+
.submit({
|
|
44
|
+
Origins: { whitelistedcaller: "WhitelistedCaller" },
|
|
45
|
+
}, { Lookup: { hash: wLPreimage, len: wLPreimageLen } }, { After: { After: 0 } })
|
|
46
|
+
.signAsync(faith);
|
|
47
|
+
const { result } = await context.createBlock(openGovProposal);
|
|
48
|
+
if (!result?.events) {
|
|
49
|
+
throw new Error("No events in block");
|
|
50
|
+
}
|
|
51
|
+
let proposalId;
|
|
52
|
+
filterAndApply(result.events, "referenda", ["Submitted"], (found) => {
|
|
53
|
+
proposalId = found.event.data.index.toNumber();
|
|
54
|
+
});
|
|
55
|
+
if (typeof proposalId === "undefined") {
|
|
56
|
+
throw new Error("No proposal id found");
|
|
57
|
+
}
|
|
58
|
+
console.log(`🏛️ Referendum submitted with proposal id: ${proposalId}`);
|
|
59
|
+
await context.createBlock(context.pjsApi.tx.referenda.placeDecisionDeposit(proposalId));
|
|
60
|
+
const whitelistCall = context.pjsApi.tx.whitelist.whitelistCall(proposalHash);
|
|
61
|
+
await execOpenTechCommitteeProposal(context, whitelistCall);
|
|
62
|
+
await maximizeConvictionVotingOf(context, [ethan], proposalId);
|
|
63
|
+
await context.createBlock();
|
|
64
|
+
const checkCompletion = async () => {
|
|
65
|
+
const authorized = (await context.pjsApi.query.system.authorizedUpgrade());
|
|
66
|
+
if (!authorized.isNone) {
|
|
67
|
+
return true;
|
|
68
|
+
}
|
|
69
|
+
const events = (await context.pjsApi.query.system.events());
|
|
70
|
+
return events.some(({ event, }) => {
|
|
71
|
+
const section = event.section.toString();
|
|
72
|
+
const method = event.method.toString();
|
|
73
|
+
return section === "whitelist" && method === "WhitelistedCallDispatched";
|
|
74
|
+
});
|
|
75
|
+
};
|
|
76
|
+
await fastFowardToNextEvent(context); // ⏩️ until preparation done
|
|
77
|
+
if (await checkCompletion()) {
|
|
78
|
+
return true;
|
|
79
|
+
}
|
|
80
|
+
await fastFowardToNextEvent(context); // ⏩️ until proposal confirmed
|
|
81
|
+
if (await checkCompletion()) {
|
|
82
|
+
return true;
|
|
83
|
+
}
|
|
84
|
+
await fastFowardToNextEvent(context); // ⏩️ until proposal enacted
|
|
85
|
+
if (await checkCompletion()) {
|
|
86
|
+
return true;
|
|
87
|
+
}
|
|
88
|
+
// Some runtimes enqueue extra agenda items before the whitelist dispatch completes.
|
|
89
|
+
// Keep fast-forwarding until the authorized upgrade is populated or the agenda is empty.
|
|
90
|
+
for (let attempt = 0; attempt < 5; attempt++) {
|
|
91
|
+
if (await checkCompletion()) {
|
|
92
|
+
break;
|
|
93
|
+
}
|
|
94
|
+
try {
|
|
95
|
+
await fastFowardToNextEvent(context);
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
if (error instanceof Error && error.message.includes("No items in scheduler.agenda")) {
|
|
99
|
+
break;
|
|
100
|
+
}
|
|
101
|
+
throw error;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return await checkCompletion();
|
|
105
|
+
};
|
|
106
|
+
// Creates a OpenTechCommitteeProposal and attempts to execute it
|
|
107
|
+
export const execOpenTechCommitteeProposal = async (context, call, voters = OPEN_TECHNICAL_COMMITTEE_MEMBERS, threshold = OPEN_TECHNICAL_COMMITTEE_THRESHOLD) => {
|
|
108
|
+
const openTechCommitteeProposal = context.pjsApi.tx.openTechCommitteeCollective.propose(threshold, call, 100);
|
|
109
|
+
const { result: result2 } = await context.createBlock(openTechCommitteeProposal, {
|
|
110
|
+
signer: voters[0],
|
|
111
|
+
});
|
|
112
|
+
if (!result2?.events) {
|
|
113
|
+
throw new Error("No events in block");
|
|
114
|
+
}
|
|
115
|
+
let openTechProposal;
|
|
116
|
+
let openTechProposalIndex;
|
|
117
|
+
filterAndApply(result2.events, "openTechCommitteeCollective", ["Proposed"], (found) => {
|
|
118
|
+
openTechProposalIndex = found.event.data.proposalIndex.toNumber();
|
|
119
|
+
openTechProposal = found.event.data.proposalHash.toHex();
|
|
120
|
+
});
|
|
121
|
+
if (typeof openTechProposal === "undefined" || typeof openTechProposalIndex === "undefined") {
|
|
122
|
+
console.error("Error submitting OpenTechCommittee proposal");
|
|
123
|
+
return result2;
|
|
124
|
+
}
|
|
125
|
+
console.log(`🏛️ OpenTechCommittee proposal submitted with proposal id: ${openTechProposalIndex} and hash: ${openTechProposal?.slice(0, 6)}...${openTechProposal?.slice(-4)}`);
|
|
126
|
+
// Vote on it
|
|
127
|
+
for (const voter of voters) {
|
|
128
|
+
const nonce = (await context.pjsApi.query.system.account(voter.address)).nonce.toNumber();
|
|
129
|
+
const vote = context.pjsApi.tx.openTechCommitteeCollective
|
|
130
|
+
.vote(openTechProposal, openTechProposalIndex, true)
|
|
131
|
+
.signAsync(voter, { nonce });
|
|
132
|
+
await context.createBlock(vote);
|
|
133
|
+
}
|
|
134
|
+
// Close proposal
|
|
135
|
+
const { result } = await context.createBlock(context.pjsApi.tx.openTechCommitteeCollective.close(openTechProposal, openTechProposalIndex, {
|
|
136
|
+
refTime: 2_000_000_000,
|
|
137
|
+
proofSize: 100_000,
|
|
138
|
+
}, 100), { signer: voters[0] });
|
|
139
|
+
if (!result) {
|
|
140
|
+
throw new Error("No result in block");
|
|
141
|
+
}
|
|
142
|
+
return result;
|
|
143
|
+
};
|
|
144
|
+
// Creates the Council Proposal
|
|
145
|
+
// Vote with the members (all members by default)
|
|
146
|
+
// Close it (Execute if successful)
|
|
147
|
+
export const execCouncilProposal = async (context, polkadotCall, index = -1, voters = COUNCIL_MEMBERS, threshold = COUNCIL_THRESHOLD) => {
|
|
148
|
+
// Charleth submit the proposal to the council (and therefore implicitly votes for)
|
|
149
|
+
const lengthBound = polkadotCall.method.encodedLength;
|
|
150
|
+
const { result: proposalResult } = await context.createBlock(context
|
|
151
|
+
.polkadotJs()
|
|
152
|
+
.tx.councilCollective.propose(threshold, polkadotCall, lengthBound)
|
|
153
|
+
.signAsync(charleth));
|
|
154
|
+
if (!proposalResult) {
|
|
155
|
+
throw "Proposal result is undefined";
|
|
156
|
+
}
|
|
157
|
+
if (threshold <= 1) {
|
|
158
|
+
// Proposal are automatically executed on threshold <= 1
|
|
159
|
+
return proposalResult;
|
|
160
|
+
}
|
|
161
|
+
if (!proposalResult.successful) {
|
|
162
|
+
throw `Council proposal refused: ${proposalResult?.error?.name}`;
|
|
163
|
+
}
|
|
164
|
+
const proposed = proposalResult.events.find(({ event: { method } }) => method.toString() === "Proposed");
|
|
165
|
+
if (!proposed) {
|
|
166
|
+
throw "Proposed event not found";
|
|
167
|
+
}
|
|
168
|
+
const proposalHash = proposed.event.data[2].toHex();
|
|
169
|
+
// Dorothy vote for this proposal and close it
|
|
170
|
+
const proposalIndex = index >= 0
|
|
171
|
+
? index
|
|
172
|
+
: (await context.polkadotJs().query.councilCollective.proposalCount()).toNumber() -
|
|
173
|
+
1;
|
|
174
|
+
await Promise.all(voters.map((voter) => context
|
|
175
|
+
.polkadotJs()
|
|
176
|
+
.tx.councilCollective.vote(proposalHash, proposalIndex, true)
|
|
177
|
+
.signAndSend(voter)));
|
|
178
|
+
await context.createBlock();
|
|
179
|
+
return await context.createBlock(context
|
|
180
|
+
.polkadotJs()
|
|
181
|
+
.tx.councilCollective.close(proposalHash, proposalIndex, {
|
|
182
|
+
refTime: 2_000_000_000,
|
|
183
|
+
proofSize: 100_000,
|
|
184
|
+
}, lengthBound)
|
|
185
|
+
.signAsync(dorothy));
|
|
186
|
+
};
|
|
187
|
+
// Proposes referenda and places decision deposit
|
|
188
|
+
// Returns referendum index and proposal hash
|
|
189
|
+
export const proposeReferendaAndDeposit = async (context, decisionDepositer, proposal, origin) => {
|
|
190
|
+
// Fetch proposal hash
|
|
191
|
+
const proposalHash = typeof proposal === "string" ? proposal : await notePreimage(context, proposal);
|
|
192
|
+
// Post referenda
|
|
193
|
+
const { result: proposalResult } = await context.createBlock(context
|
|
194
|
+
.polkadotJs()
|
|
195
|
+
.tx.referenda.submit(origin, {
|
|
196
|
+
Lookup: {
|
|
197
|
+
hash: proposalHash,
|
|
198
|
+
len: typeof proposal === "string" ? proposal : proposal.method.encodedLength,
|
|
199
|
+
},
|
|
200
|
+
}, { At: 0 })
|
|
201
|
+
.signAsync(alith));
|
|
202
|
+
if (!proposalResult) {
|
|
203
|
+
throw "Proposal result is undefined";
|
|
204
|
+
}
|
|
205
|
+
if (!proposalResult.successful) {
|
|
206
|
+
throw `Unable to post referenda: ${proposalResult?.error?.name}`;
|
|
207
|
+
}
|
|
208
|
+
const refIndex = proposalResult.events
|
|
209
|
+
.find(({ event: { method } }) => method.toString() === "Submitted")
|
|
210
|
+
?.event.data[0].toString();
|
|
211
|
+
if (!refIndex) {
|
|
212
|
+
throw "Referendum index not found";
|
|
213
|
+
}
|
|
214
|
+
// Place decision deposit
|
|
215
|
+
await context.createBlock(context.polkadotJs().tx.referenda.placeDecisionDeposit(refIndex).signAsync(decisionDepositer));
|
|
216
|
+
return [+refIndex, proposalHash];
|
|
217
|
+
};
|
|
218
|
+
// Proposes referenda and places decision deposit
|
|
219
|
+
// Returns referendum index and proposal hash
|
|
220
|
+
export const dispatchAsGeneralAdmin = async (context, call) => {
|
|
221
|
+
// Post referenda
|
|
222
|
+
await context.createBlock(context.polkadotJs().tx.sudo.sudo(context.polkadotJs().tx.utility.dispatchAs({
|
|
223
|
+
Origins: "GeneralAdmin",
|
|
224
|
+
}, call)));
|
|
225
|
+
};
|
|
226
|
+
// Maximizes conviction voting of some voters
|
|
227
|
+
// with respect to an ongoing referenda
|
|
228
|
+
// Their whole free balance will be used to vote
|
|
229
|
+
export const maximizeConvictionVotingOf = async (context, voters, refIndex) => {
|
|
230
|
+
// We need to have enough to pay for fee
|
|
231
|
+
const fee = (await context
|
|
232
|
+
.polkadotJs()
|
|
233
|
+
.tx.convictionVoting.vote(refIndex, {
|
|
234
|
+
Standard: {
|
|
235
|
+
vote: { aye: true, conviction: "Locked6x" },
|
|
236
|
+
balance: (await context.polkadotJs().query.system.account(alith.address)).data
|
|
237
|
+
.free,
|
|
238
|
+
},
|
|
239
|
+
})
|
|
240
|
+
.paymentInfo(alith)).partialFee;
|
|
241
|
+
// We vote with everything but fee
|
|
242
|
+
await context.createBlock(voters.map(async (voter) => context
|
|
243
|
+
.polkadotJs()
|
|
244
|
+
.tx.convictionVoting.vote(refIndex, {
|
|
245
|
+
Standard: {
|
|
246
|
+
vote: { aye: true, conviction: "Locked6x" },
|
|
247
|
+
balance: await (await context.polkadotJs().query.system.account(voter.address)).data.free.sub(fee),
|
|
248
|
+
},
|
|
249
|
+
})
|
|
250
|
+
.signAsync(voter)));
|
|
251
|
+
};
|
|
252
|
+
// Creates the Technical Committee Proposal
|
|
253
|
+
// Vote with the members (all members by default)
|
|
254
|
+
// Close it (Execute if successful)
|
|
255
|
+
export const execTechnicalCommitteeProposal = async (context, polkadotCall, voters = TECHNICAL_COMMITTEE_MEMBERS, threshold = TECHNICAL_COMMITTEE_THRESHOLD) => {
|
|
256
|
+
// Tech committee members
|
|
257
|
+
// Alith submit the proposal to the council (and therefore implicitly votes for)
|
|
258
|
+
const lengthBound = polkadotCall.encodedLength;
|
|
259
|
+
const { result: proposalResult } = await context.createBlock(context.polkadotJs().tx.techCommitteeCollective.propose(threshold, polkadotCall, lengthBound));
|
|
260
|
+
if (!proposalResult) {
|
|
261
|
+
throw "Proposal result is undefined";
|
|
262
|
+
}
|
|
263
|
+
if (threshold <= 1) {
|
|
264
|
+
// Proposal are automatically executed on threshold <= 1
|
|
265
|
+
return proposalResult;
|
|
266
|
+
}
|
|
267
|
+
if (!proposalResult.successful) {
|
|
268
|
+
throw `Council proposal refused: ${proposalResult?.error?.name}`;
|
|
269
|
+
}
|
|
270
|
+
const proposalHash = proposalResult.events
|
|
271
|
+
.find(({ event: { method } }) => method.toString() === "Proposed")
|
|
272
|
+
?.event.data[2].toHex();
|
|
273
|
+
if (!proposalHash) {
|
|
274
|
+
throw "Proposed event not found";
|
|
275
|
+
}
|
|
276
|
+
// Get proposal count
|
|
277
|
+
const proposalCount = await context.polkadotJs().query.techCommitteeCollective.proposalCount();
|
|
278
|
+
await context.createBlock(voters.map((voter) => context
|
|
279
|
+
.polkadotJs()
|
|
280
|
+
.tx.techCommitteeCollective.vote(proposalHash, Number(proposalCount) - 1, true)
|
|
281
|
+
.signAsync(voter)));
|
|
282
|
+
const { result: closeResult } = await context.createBlock(context
|
|
283
|
+
.polkadotJs()
|
|
284
|
+
.tx.techCommitteeCollective.close(proposalHash, Number(proposalCount) - 1, {
|
|
285
|
+
refTime: 2_000_000_000,
|
|
286
|
+
proofSize: 100_000,
|
|
287
|
+
}, lengthBound)
|
|
288
|
+
.signAsync(baltathar));
|
|
289
|
+
return closeResult;
|
|
290
|
+
};
|
|
291
|
+
export const executeOpenTechCommitteeProposal = async (api, encodedHash) => {
|
|
292
|
+
console.log("Executing OpenTechCommittee proposal");
|
|
293
|
+
const queryPreimage = (await api.query.preimage.requestStatusFor(encodedHash));
|
|
294
|
+
if (queryPreimage.isNone) {
|
|
295
|
+
throw new Error("Preimage not found");
|
|
296
|
+
}
|
|
297
|
+
process.stdout.write(`Sending proposal + vote for ${encodedHash}...`);
|
|
298
|
+
// Noting new preimage to dispatchWhiteList
|
|
299
|
+
const proposalLen = queryPreimage.unwrap().asUnrequested.len;
|
|
300
|
+
const dispatchCallHex = api.tx.whitelist
|
|
301
|
+
.dispatchWhitelistedCall(encodedHash, proposalLen, {
|
|
302
|
+
refTime: 2_000_000_000,
|
|
303
|
+
proofSize: 100_000,
|
|
304
|
+
})
|
|
305
|
+
.method.toHex();
|
|
306
|
+
const dispatchCallPreimageHash = blake2AsHex(dispatchCallHex);
|
|
307
|
+
await signAndSend(api.tx.preimage.notePreimage(dispatchCallHex), charleth);
|
|
308
|
+
const queryDispatchPreimage = (await api.query.preimage.requestStatusFor(dispatchCallPreimageHash));
|
|
309
|
+
if (queryDispatchPreimage.isNone) {
|
|
310
|
+
throw new Error("Dispatch preimage not found");
|
|
311
|
+
}
|
|
312
|
+
const dispatchCallPreimageLen = queryDispatchPreimage.unwrap().asUnrequested.len;
|
|
313
|
+
// Raising new proposal to OpenGov under whitelisted track
|
|
314
|
+
await signAndSend(api.tx.referenda.submit({
|
|
315
|
+
Origins: { whitelistedcaller: "WhitelistedCaller" },
|
|
316
|
+
}, {
|
|
317
|
+
Lookup: {
|
|
318
|
+
hash: dispatchCallPreimageHash,
|
|
319
|
+
len: dispatchCallPreimageLen,
|
|
320
|
+
},
|
|
321
|
+
}, { After: { After: 0 } }), charleth);
|
|
322
|
+
// await api.tx.referenda
|
|
323
|
+
// .submit(
|
|
324
|
+
// {
|
|
325
|
+
// Origins: { whitelistedcaller: "WhitelistedCaller" },
|
|
326
|
+
// },
|
|
327
|
+
// { Lookup: { hash: dispatchCallPreimageHash, len: dispatchCallPreimageLen } },
|
|
328
|
+
// { After: { After: 0 } }
|
|
329
|
+
// )
|
|
330
|
+
// .signAsync(charleth);
|
|
331
|
+
const proposalId = (await api.query.referenda.referendumCount()).toNumber() - 1;
|
|
332
|
+
if (proposalId < 0) {
|
|
333
|
+
throw new Error("Proposal id not found");
|
|
334
|
+
}
|
|
335
|
+
await api.tx.referenda.placeDecisionDeposit(proposalId).signAndSend(alith);
|
|
336
|
+
// Opening Proposal to whiteList
|
|
337
|
+
process.stdout.write(`Sending proposal to openTechCommittee to whitelist ${encodedHash}...`);
|
|
338
|
+
await signAndSend(api.tx.openTechCommitteeCollective.propose(2, api.tx.whitelist.whitelistCall(encodedHash), 100));
|
|
339
|
+
const openTechProposal = (await api.query.openTechCommitteeCollective.proposals()).at(-1);
|
|
340
|
+
if (!openTechProposal || openTechProposal?.isEmpty) {
|
|
341
|
+
throw new Error("OpenTechProposal not found");
|
|
342
|
+
}
|
|
343
|
+
const index = (await api.query.openTechCommitteeCollective.proposalCount()).toNumber() - 1;
|
|
344
|
+
if (index < 0) {
|
|
345
|
+
throw new Error("OpenTechProposal index not found");
|
|
346
|
+
}
|
|
347
|
+
process.stdout.write("✅\n");
|
|
348
|
+
const baltaNonce = (await api.rpc.system.accountNextIndex(baltathar.address)).toNumber();
|
|
349
|
+
// Voting and closing on openTech proposal
|
|
350
|
+
process.stdout.write("Voting on openTechCommittee proposal...");
|
|
351
|
+
await Promise.all([
|
|
352
|
+
signAndSend(api.tx.openTechCommitteeCollective.vote(openTechProposal, index, true)),
|
|
353
|
+
signAndSend(api.tx.openTechCommitteeCollective.vote(openTechProposal, index, true), baltathar, baltaNonce),
|
|
354
|
+
signAndSend(api.tx.openTechCommitteeCollective.close(openTechProposal, index, {
|
|
355
|
+
refTime: 2_000_000_000,
|
|
356
|
+
proofSize: 100_000,
|
|
357
|
+
}, 100), baltathar, baltaNonce + 1),
|
|
358
|
+
]);
|
|
359
|
+
process.stdout.write("✅\n");
|
|
360
|
+
// Voting on referendum with lots of money
|
|
361
|
+
process.stdout.write("Voting on main referendum proposal...");
|
|
362
|
+
const bal = (await api.query.system.account(dorothy.address)).data.free.toBigInt();
|
|
363
|
+
if (bal <= GLMR) {
|
|
364
|
+
throw new Error("Dorothy has no funds to vote with");
|
|
365
|
+
}
|
|
366
|
+
await signAndSend(api.tx.convictionVoting.vote(proposalId, {
|
|
367
|
+
Standard: {
|
|
368
|
+
vote: { aye: true, conviction: "Locked6x" },
|
|
369
|
+
balance: bal - GLMR,
|
|
370
|
+
},
|
|
371
|
+
}), dorothy);
|
|
372
|
+
process.stdout.write("✅\n");
|
|
373
|
+
// Waiting one million years for the referendum to be enacted
|
|
374
|
+
process.stdout.write(`Waiting for referendum [${proposalId}] to be no longer ongoing...`);
|
|
375
|
+
let referendaInfo;
|
|
376
|
+
for (;;) {
|
|
377
|
+
try {
|
|
378
|
+
referendaInfo = (await api.query.referenda.referendumInfoFor(proposalId)).unwrap();
|
|
379
|
+
if (!referendaInfo?.isOngoing) {
|
|
380
|
+
process.stdout.write("✅\n");
|
|
381
|
+
break;
|
|
382
|
+
}
|
|
383
|
+
await new Promise((resolve) => setTimeout(resolve, 1000));
|
|
384
|
+
}
|
|
385
|
+
catch (e) {
|
|
386
|
+
console.error(e);
|
|
387
|
+
throw new Error(`Error querying referendum info for proposalId: ${proposalId}`);
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
process.stdout.write(`${referendaInfo?.isApproved ? "✅" : "❌"} \n`);
|
|
391
|
+
if (!referendaInfo?.isApproved) {
|
|
392
|
+
throw new Error("Finished Referendum was not approved");
|
|
393
|
+
}
|
|
394
|
+
};
|
|
395
|
+
export const executeProposalWithCouncil = async (api, encodedHash) => {
|
|
396
|
+
let nonce = (await api.rpc.system.accountNextIndex(alith.address)).toNumber();
|
|
397
|
+
const referendumNextIndex = (await api.query.democracy.referendumCount()).toNumber();
|
|
398
|
+
const callData = api.consts.system.version.specVersion.toNumber() >= 2000
|
|
399
|
+
? { Legacy: encodedHash }
|
|
400
|
+
: encodedHash;
|
|
401
|
+
const external = api.tx.democracy.externalProposeMajority(callData);
|
|
402
|
+
const fastTrack = api.tx.democracy.fastTrack(encodedHash, 1, 0);
|
|
403
|
+
const voteAmount = 1n * 10n ** BigInt(api.registry.chainDecimals[0]);
|
|
404
|
+
process.stdout.write(`Sending motion + fast-track + vote for ${encodedHash}...`);
|
|
405
|
+
await Promise.all([
|
|
406
|
+
api.tx.councilCollective
|
|
407
|
+
.propose(1, external, external.length)
|
|
408
|
+
.signAndSend(alith, { nonce: nonce++ }),
|
|
409
|
+
api.tx.techCommitteeCollective
|
|
410
|
+
.propose(1, fastTrack, fastTrack.length)
|
|
411
|
+
.signAndSend(alith, { nonce: nonce++ }),
|
|
412
|
+
api.tx.democracy
|
|
413
|
+
.vote(referendumNextIndex, {
|
|
414
|
+
Standard: {
|
|
415
|
+
balance: voteAmount,
|
|
416
|
+
vote: { aye: true, conviction: 1 },
|
|
417
|
+
},
|
|
418
|
+
})
|
|
419
|
+
.signAndSend(alith, { nonce: nonce++ }),
|
|
420
|
+
]);
|
|
421
|
+
process.stdout.write("✅\n");
|
|
422
|
+
process.stdout.write(`Waiting for referendum [${referendumNextIndex}] to be executed...`);
|
|
423
|
+
let referenda;
|
|
424
|
+
while (!referenda) {
|
|
425
|
+
try {
|
|
426
|
+
referenda = ((await api.query.democracy.referendumInfoOf.entries()).find((ref) => ref[1].unwrap().isFinished &&
|
|
427
|
+
api.registry.createType("u32", ref[0].toU8a().slice(-4)).toNumber() ===
|
|
428
|
+
referendumNextIndex)?.[1]).unwrap();
|
|
429
|
+
}
|
|
430
|
+
catch {
|
|
431
|
+
await new Promise((resolve) => setTimeout(resolve, 1000));
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
process.stdout.write(`${referenda.asFinished.approved ? "✅" : "❌"} \n`);
|
|
435
|
+
if (!referenda.asFinished.approved) {
|
|
436
|
+
throw new Error("Finished Referendum was not approved");
|
|
437
|
+
}
|
|
438
|
+
};
|
|
439
|
+
export const cancelReferendaWithCouncil = async (api, refIndex) => {
|
|
440
|
+
const proposal = api.tx.democracy.cancelReferendum(refIndex);
|
|
441
|
+
const encodedProposal = proposal.method.toHex();
|
|
442
|
+
const encodedHash = blake2AsHex(encodedProposal);
|
|
443
|
+
let nonce = (await api.rpc.system.accountNextIndex(alith.address)).toNumber();
|
|
444
|
+
await api.tx.democracy.notePreimage(encodedProposal).signAndSend(alith, { nonce: nonce++ });
|
|
445
|
+
await executeProposalWithCouncil(api, encodedHash);
|
|
446
|
+
};
|
|
447
|
+
export const fastFowardToNextEvent = async (context) => {
|
|
448
|
+
const [entry] = await context.pjsApi.query.scheduler.agenda.entries();
|
|
449
|
+
const [key, _] = entry;
|
|
450
|
+
if (key.isEmpty) {
|
|
451
|
+
throw new Error("No items in scheduler.agenda");
|
|
452
|
+
}
|
|
453
|
+
const decodedKey = key.toHuman();
|
|
454
|
+
const desiredHeight = Number(decodedKey[0].valueOf().replaceAll(",", ""));
|
|
455
|
+
const currentHeight = (await context.pjsApi.rpc.chain.getHeader()).number.toNumber();
|
|
456
|
+
console.log(`⏩️ Current height: ${currentHeight}, desired height: ${desiredHeight}, jumping ${desiredHeight - currentHeight + 1} blocks`);
|
|
457
|
+
await context.jumpBlocks?.(desiredHeight - currentHeight + 1);
|
|
458
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/cli/lib/handlers/index.ts"],"names":[],"mappings":"AACA,2DAA2D;AAC3D,oDAAoD;AACpD,0DAA0D;AAC1D,uDAAuD"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { RepoSpec } from "../../../api/types/index.js";
|
|
2
|
+
export declare function allRepos(): RepoSpec[];
|
|
3
|
+
export declare function allReposAsync(): Promise<RepoSpec[]>;
|
|
4
|
+
export declare function standardRepos(): RepoSpec[];
|
|
5
|
+
export default allRepos;
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/cli/lib/repoDefinitions/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,oCAAoC;AAM5D,wBAAgB,QAAQ,eAKvB;AAED,wBAAsB,aAAa,wBAKlC;AAED,wBAAgB,aAAa,eAG5B;AAED,eAAe,QAAQ,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import mb from "./moonbeam.js";
|
|
2
|
+
import pd from "./polkadot.js";
|
|
3
|
+
import ts from "./tanssi.js";
|
|
4
|
+
import { importAsyncConfig, importJsonConfig } from "../configReader.js";
|
|
5
|
+
export function allRepos() {
|
|
6
|
+
const defaultRepos = [mb, pd, ts];
|
|
7
|
+
const globalConfig = importJsonConfig();
|
|
8
|
+
const importedRepos = globalConfig.additionalRepos ? globalConfig.additionalRepos : [];
|
|
9
|
+
return [...defaultRepos, ...importedRepos];
|
|
10
|
+
}
|
|
11
|
+
export async function allReposAsync() {
|
|
12
|
+
const defaultRepos = [mb, pd, ts];
|
|
13
|
+
const globalConfig = await importAsyncConfig();
|
|
14
|
+
const importedRepos = globalConfig.additionalRepos || [];
|
|
15
|
+
return [...defaultRepos, ...importedRepos];
|
|
16
|
+
}
|
|
17
|
+
export function standardRepos() {
|
|
18
|
+
const defaultRepos = [mb, pd, ts];
|
|
19
|
+
return [...defaultRepos];
|
|
20
|
+
}
|
|
21
|
+
export default allRepos;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"moonbeam.d.ts","sourceRoot":"","sources":["../../../../src/cli/lib/repoDefinitions/moonbeam.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,oCAAoC;AAE5D,QAAA,MAAM,IAAI,EAAE,QA4BX,CAAC;AAEF,eAAe,IAAI,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
const repo = {
|
|
2
|
+
name: "moonbeam",
|
|
3
|
+
binaries: [
|
|
4
|
+
{
|
|
5
|
+
name: "moonbeam",
|
|
6
|
+
defaultArgs: [
|
|
7
|
+
"--no-hardware-benchmarks",
|
|
8
|
+
"--no-telemetry",
|
|
9
|
+
"--reserved-only",
|
|
10
|
+
"--rpc-cors=all",
|
|
11
|
+
"--unsafe-rpc-external",
|
|
12
|
+
"--unsafe-force-node-key-generation",
|
|
13
|
+
"--no-grandpa",
|
|
14
|
+
"--sealing=manual",
|
|
15
|
+
"--force-authoring",
|
|
16
|
+
"--database=paritydb",
|
|
17
|
+
"--no-prometheus",
|
|
18
|
+
"--alice",
|
|
19
|
+
"--chain=moonbase-dev",
|
|
20
|
+
"--tmp",
|
|
21
|
+
],
|
|
22
|
+
},
|
|
23
|
+
{ name: "moonbase-runtime" },
|
|
24
|
+
{ name: "moonbeam-runtime" },
|
|
25
|
+
{ name: "moonriver-runtime" },
|
|
26
|
+
],
|
|
27
|
+
ghAuthor: "moonbeam-foundation",
|
|
28
|
+
ghRepo: "moonbeam",
|
|
29
|
+
};
|
|
30
|
+
export default repo;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"polkadot.d.ts","sourceRoot":"","sources":["../../../../src/cli/lib/repoDefinitions/polkadot.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,oCAAoC;AAE5D,QAAA,MAAM,IAAI,EAAE,QASX,CAAC;AAEF,eAAe,IAAI,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tanssi.d.ts","sourceRoot":"","sources":["../../../../src/cli/lib/repoDefinitions/tanssi.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,oCAAoC;AAE5D,QAAA,MAAM,IAAI,EAAE,QAYX,CAAC;AACF,eAAe,IAAI,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
const repo = {
|
|
2
|
+
name: "tanssi",
|
|
3
|
+
binaries: [
|
|
4
|
+
{
|
|
5
|
+
name: "tanssi-node",
|
|
6
|
+
defaultArgs: ["--dev", "--sealing=manual", "--no-hardware-benchmarks"],
|
|
7
|
+
},
|
|
8
|
+
{ name: "container-chain-template-simple-node" },
|
|
9
|
+
{ name: "container-chain-template-frontier-node" },
|
|
10
|
+
],
|
|
11
|
+
ghAuthor: "moondance-labs",
|
|
12
|
+
ghRepo: "tanssi",
|
|
13
|
+
};
|
|
14
|
+
export default repo;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rpcFunctions.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/rpcFunctions.ts"],"names":[],"mappings":"AAIA,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,GAAE,GAAG,EAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CA6B1F"}
|