git.delta.rocks / unique-network / refs/commits / 3bbc02d900d6

difftreelog

source

js-packages/scripts/proposeupgrade.ts1.8 KiBsourcehistory
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();