git.delta.rocks / unique-network / refs/commits / f820d09f46fa

difftreelog

source

js-packages/scripts/proposeupgrade.ts1.9 KiBsourcehistory
1import {ApiPromise, WsProvider} from '@polkadot/api';2import {blake2AsHex} from '@polkadot/util-crypto';3import {readFileSync} from 'fs';45async function main() {6  if(process.argv.length != 4) {7    console.log('Usage: proposeUpgrade <CHAIN_URL> <WASM_FILE_PATH>');8    process.exit(1);9  }1011  const networkUrl = process.argv[2];12  const wasmFile = process.argv[3];1314  const wsProvider = new WsProvider(networkUrl);15  const api = await ApiPromise.create({provider: wsProvider});1617  const wasmFileBytes = readFileSync(wasmFile);18  const wasmFileHash = blake2AsHex(wasmFileBytes, 256);1920  const authorizeUpgrade = api.tx.parachainSystem.authorizeUpgrade(wasmFileHash, true);21  const enableMaintenance = api.tx.maintenance.enable();2223  const councilMembers = (await api.query.council.members()).toJSON() as any[];24  const councilProposalThreshold = Math.floor(councilMembers.length / 2) + 1;2526  const democracyProposalContent = api.tx.utility.batchAll([27    authorizeUpgrade.method.toHex(),28    enableMaintenance.method.toHex(),29  ]).method.toHex();3031  const democracyProposalHash = blake2AsHex(democracyProposalContent, 256);32  const democracyProposalPreimage = api.tx.preimage.notePreimage(democracyProposalContent).method.toHex();3334  const democracyProposal = api.tx.democracy.externalProposeDefault({35    Legacy: democracyProposalHash,36  });3738  const councilProposal = api.tx.council.propose(39    councilProposalThreshold,40    democracyProposal,41    democracyProposal.method.encodedLength,42  ).method.toHex();4344  const proposeUpgradeBatch = api.tx.utility.batchAll([45    democracyProposalPreimage,46    councilProposal,47  ]);4849  const encodedCall = proposeUpgradeBatch.method.toHex();5051  console.log('-----------------');52  console.log('Upgrade Proposal: ', `https://polkadot.js.org/apps/?rpc=${networkUrl}#/extrinsics/decode/${encodedCall}`);53  console.log('-----------------');5455  await api.disconnect();56}5758await main();