From 951758d6f537fded086b0f69afa9dc700b36a76a Mon Sep 17 00:00:00 2001 From: Daniel Shiposha Date: Tue, 24 Oct 2023 08:14:56 +0000 Subject: [PATCH] feat: add propose-fast-track (#1022) * feat: add propose-fast-track * fix: propose-upgrade * fix: fasttrack preimage --- --- 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", --- /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(); --- a/tests/src/proposeupgrade.ts +++ b/tests/src/proposeupgrade.ts @@ -18,20 +18,30 @@ 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 encodedCall = councilProposal.method.toHex(); + const proposeUpgradeBatch = api.tx.utility.batchAll([ + democracyProposalPreimage, + councilProposal, + ]); + + const encodedCall = proposeUpgradeBatch.method.toHex(); console.log('-----------------'); console.log('Upgrade Proposal: ', `https://polkadot.js.org/apps/?rpc=${networkUrl}#/extrinsics/decode/${encodedCall}`); -- gitstuff