diff --git a/tests/package.json b/tests/package.json index ec4f2ad65c..fb4c027900 100644 --- a/tests/package.json +++ b/tests/package.json @@ -131,7 +131,8 @@ "polkadot-types-from-chain": "ts-node --esm ./node_modules/.bin/polkadot-types-from-chain --endpoint src/interfaces/metadata.json --output src/interfaces/ --package .", "polkadot-types": "echo \"export default {}\" > src/interfaces/lookup.ts && yarn polkadot-types-fetch-metadata && yarn polkadot-types-from-defs && yarn polkadot-types-from-defs && yarn polkadot-types-from-chain", "generateEnv": "ts-node --esm ./src/generateEnv.ts", - "propose-upgrade": "ts-node --esm ./src/proposeupgrade.ts" + "propose-upgrade": "ts-node --esm ./src/proposeupgrade.ts", + "propose-fast-track": "ts-node --esm ./src/proposefasttrack.ts" }, "author": "", "license": "SEE LICENSE IN ../LICENSE", diff --git a/tests/src/proposefasttrack.ts b/tests/src/proposefasttrack.ts new file mode 100644 index 0000000000..ceac4cf1a9 --- /dev/null +++ b/tests/src/proposefasttrack.ts @@ -0,0 +1,42 @@ +import {ApiPromise, WsProvider} from '@polkadot/api'; +import {blake2AsHex} from '@polkadot/util-crypto'; + +async function main() { + const networkUrl = process.argv[2]; + + const wsProvider = new WsProvider(networkUrl); + const api = await ApiPromise.create({provider: wsProvider}); + + const externalDemocracyProposal = (await api.query.democracy.nextExternal() as any).unwrap()[0]; + + let proposalHash; + if(externalDemocracyProposal.isInline) { + proposalHash = blake2AsHex(externalDemocracyProposal.asInline, 256); + } else if(externalDemocracyProposal.isLegacy) { + proposalHash = externalDemocracyProposal.asLegacy.toJSON().hash; + } else { + proposalHash = externalDemocracyProposal.asLookup.toJSON().hash; + } + + const voringPeriod = 7200; + const delay = 10; + + const democracyFastTrack = api.tx.democracy.fastTrack(proposalHash, voringPeriod, delay); + + const techCommThreshold = ((await api.query.technicalCommittee.members()).toJSON() as any[]).length; + const techCommProposal = api.tx.technicalCommittee.propose( + techCommThreshold, + democracyFastTrack.method.toHex(), + democracyFastTrack.encodedLength, + ); + + const encodedCall = techCommProposal.method.toHex(); + + console.log('-----------------'); + console.log('Fast Track Proposal: ', `https://polkadot.js.org/apps/?rpc=${networkUrl}#/extrinsics/decode/${encodedCall}`); + console.log('-----------------'); + + await api.disconnect(); +} + +await main(); diff --git a/tests/src/proposeupgrade.ts b/tests/src/proposeupgrade.ts index 54d94c8574..f9372a7d6d 100644 --- a/tests/src/proposeupgrade.ts +++ b/tests/src/proposeupgrade.ts @@ -18,20 +18,30 @@ async function main() { const councilMembers = (await api.query.council.members()).toJSON() as any[]; const councilProposalThreshold = Math.floor(councilMembers.length / 2) + 1; + const democracyProposalContent = api.tx.utility.batchAll([ + authorizeUpgrade.method.toHex(), + enableMaintenance.method.toHex(), + ]).method.toHex(); + + const democracyProposalHash = blake2AsHex(democracyProposalContent, 256); + const democracyProposalPreimage = api.tx.preimage.notePreimage(democracyProposalContent).method.toHex(); + const democracyProposal = api.tx.democracy.externalProposeDefault({ - Inline: api.tx.utility.batchAll([ - authorizeUpgrade.method.toHex(), - enableMaintenance.method.toHex(), - ]).method.toHex(), + Legacy: democracyProposalHash, }); const councilProposal = api.tx.council.propose( councilProposalThreshold, democracyProposal, democracyProposal.method.encodedLength, - ); + ).method.toHex(); + + const proposeUpgradeBatch = api.tx.utility.batchAll([ + democracyProposalPreimage, + councilProposal, + ]); - const encodedCall = councilProposal.method.toHex(); + const encodedCall = proposeUpgradeBatch.method.toHex(); console.log('-----------------'); console.log('Upgrade Proposal: ', `https://polkadot.js.org/apps/?rpc=${networkUrl}#/extrinsics/decode/${encodedCall}`);