difftreelog
feat add propose-fast-track (#1022)
in: master
* feat: add propose-fast-track * fix: propose-upgrade * fix: fasttrack preimage
3 files changed
tests/package.jsondiffbeforeafterboth--- 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",
tests/src/proposefasttrack.tsdiffbeforeafterboth--- /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();
tests/src/proposeupgrade.tsdiffbeforeafterboth1import {ApiPromise, WsProvider} from '@polkadot/api';2import {blake2AsHex} from '@polkadot/util-crypto';3import {readFileSync} from 'fs';45async function main() {6 const networkUrl = process.argv[2];7 const wasmFile = process.argv[3];89 const wsProvider = new WsProvider(networkUrl);10 const api = await ApiPromise.create({provider: wsProvider});1112 const wasmFileBytes = readFileSync(wasmFile);13 const wasmFileHash = blake2AsHex(wasmFileBytes, 256);1415 const authorizeUpgrade = api.tx.parachainSystem.authorizeUpgrade(wasmFileHash, true);16 const enableMaintenance = api.tx.maintenance.enable();1718 const councilMembers = (await api.query.council.members()).toJSON() as any[];19 const councilProposalThreshold = Math.floor(councilMembers.length / 2) + 1;2021 const democracyProposal = api.tx.democracy.externalProposeDefault({22 Inline: api.tx.utility.batchAll([23 authorizeUpgrade.method.toHex(),24 enableMaintenance.method.toHex(),25 ]).method.toHex(),26 });2728 const councilProposal = api.tx.council.propose(29 councilProposalThreshold,30 democracyProposal,31 democracyProposal.method.encodedLength,32 );3334 const encodedCall = councilProposal.method.toHex();3536 console.log('-----------------');37 console.log('Upgrade Proposal: ', `https://polkadot.js.org/apps/?rpc=${networkUrl}#/extrinsics/decode/${encodedCall}`);38 console.log('-----------------');3940 await api.disconnect();41}4243await main();1import {ApiPromise, WsProvider} from '@polkadot/api';2import {blake2AsHex} from '@polkadot/util-crypto';3import {readFileSync} from 'fs';45async function main() {6 const networkUrl = process.argv[2];7 const wasmFile = process.argv[3];89 const wsProvider = new WsProvider(networkUrl);10 const api = await ApiPromise.create({provider: wsProvider});1112 const wasmFileBytes = readFileSync(wasmFile);13 const wasmFileHash = blake2AsHex(wasmFileBytes, 256);1415 const authorizeUpgrade = api.tx.parachainSystem.authorizeUpgrade(wasmFileHash, true);16 const enableMaintenance = api.tx.maintenance.enable();1718 const councilMembers = (await api.query.council.members()).toJSON() as any[];19 const councilProposalThreshold = Math.floor(councilMembers.length / 2) + 1;2021 const democracyProposalContent = api.tx.utility.batchAll([22 authorizeUpgrade.method.toHex(),23 enableMaintenance.method.toHex(),24 ]).method.toHex();2526 const democracyProposalHash = blake2AsHex(democracyProposalContent, 256);27 const democracyProposalPreimage = api.tx.preimage.notePreimage(democracyProposalContent).method.toHex();2829 const democracyProposal = api.tx.democracy.externalProposeDefault({30 Legacy: democracyProposalHash,31 });3233 const councilProposal = api.tx.council.propose(34 councilProposalThreshold,35 democracyProposal,36 democracyProposal.method.encodedLength,37 ).method.toHex();3839 const proposeUpgradeBatch = api.tx.utility.batchAll([40 democracyProposalPreimage,41 councilProposal,42 ]);4344 const encodedCall = proposeUpgradeBatch.method.toHex();4546 console.log('-----------------');47 console.log('Upgrade Proposal: ', `https://polkadot.js.org/apps/?rpc=${networkUrl}#/extrinsics/decode/${encodedCall}`);48 console.log('-----------------');4950 await api.disconnect();51}5253await main();