git.delta.rocks / unique-network / refs/commits / 951758d6f537

difftreelog

feat add propose-fast-track (#1022)

Daniel Shiposha2023-10-24parent: #c7ac6d0.patch.diff
in: master
* feat: add propose-fast-track

* fix: propose-upgrade

* fix: fasttrack preimage

3 files changed

modifiedtests/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",
addedtests/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();
modifiedtests/src/proposeupgrade.tsdiffbeforeafterboth
before · tests/src/proposeupgrade.ts
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 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();
after · tests/src/proposeupgrade.ts
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();