git.delta.rocks / unique-network / refs/commits / 99f6558100fe

difftreelog

feat add hrmp channel operations proposal scripts

Daniel Shiposha2023-12-25parent: #8d4cd55.patch.diff
in: master

2 files changed

addedjs-packages/scripts/hrmpchannel.tsdiffbeforeafterboth
after · js-packages/scripts/hrmpchannel.ts
1import {ApiPromise, WsProvider} from '@polkadot/api';2import {blake2AsHex} from '@polkadot/util-crypto';34const proposeOpenChannel = async (relayApi: ApiPromise, receiverParaId: number) => {5    const conf: any = await relayApi.query.configuration.activeConfig()6        .then(data => data.toJSON());7    const maxCapacity = conf.hrmpChannelMaxCapacity;8    const maxSize = conf.hrmpChannelMaxMessageSize;910    return relayApi.tx.hrmp.hrmpInitOpenChannel(11        receiverParaId,12        maxCapacity,13        maxSize,14    ).method.toHex();15};1617const proposeAcceptChannel = (relayApi: ApiPromise, senderParaId: number) => {18    return relayApi.tx.hrmp.hrmpAcceptOpenChannel(senderParaId).method.toHex();19};2021async function main() {22  const relayUrl = process.argv[2]23  const uniqueParachainUrl = process.argv[3];24  const otherParachainUrl = process.argv[4];25  const op = process.argv[5];2627  const relayWsProvider = new WsProvider(relayUrl);28  const relayApi = await ApiPromise.create({provider: relayWsProvider});2930  const uniqueWsProvider = new WsProvider(uniqueParachainUrl);31  const uniqueApi = await ApiPromise.create({provider: uniqueWsProvider});3233  const otherWsProvider = new WsProvider(otherParachainUrl);34  const otherApi = await ApiPromise.create({provider: otherWsProvider});3536  const uniqueParaId = await uniqueApi.query.parachainInfo.parachainId()37    .then(data => data.toJSON() as number);3839  const otherParaId = await otherApi.query.parachainInfo.parachainId()40    .then(data => data.toJSON() as number);4142  let encodedRelayCall: string;43  if(op == 'open') {44    encodedRelayCall = await proposeOpenChannel(relayApi, otherParaId);45  } else if(op == 'accept') {46    encodedRelayCall = proposeAcceptChannel(relayApi, otherParaId);47  } else {48    throw Error(`Unknown hrmp channel operation: ${op}`);49  }5051  const relayDecimals = await relayApi.rpc.system.properties()52    .then(data => data.tokenDecimals.unwrap()[0].toNumber());5354  const relayFee = 1 * (10 ** relayDecimals);5556  const proposal = uniqueApi.tx.polkadotXcm.send(57    {58        V3: {59            parents: 1,60            interior: 'Here',61        }62    },63    {64        V3: [65            {66                WithdrawAsset: [67                    {68                        id: {69                            Concrete: {70                                parents: 0,71                                interior: 'Here',72                            },73                        },74                        fun: {75                            Fungible: relayFee,76                        },77                    },78                ],79            },80            {81                BuyExecution: {82                    fees: {83                        id: {84                            Concrete: {85                                parents: 0,86                                interior: 'Here',87                            },88                        },89                        fun: {90                            Fungible: relayFee,91                        },92                    },93                    weightLimit: 'Unlimited',94                },95            },96            {97                Transact: {98                    originKind: 'Native',99                    requireWeightAtMost: {100                        refTime: 1000000000,101                        proofSize: 65536,102                    },103                    call: {104                        encoded: encodedRelayCall,105                    },106                },107            },108            'RefundSurplus',109            {110                DepositAsset: {111                    assets: {112                        Wild: {113                            AllCounted: 1,114                        },115                    },116                    beneficiary: {117                        parents: 0,118                        interior: {119                            X1: {120                                Parachain: uniqueParaId,121                            },122                        },123                    },124                },125            },126        ],127    },128  ).method.toHex();129130  const councilMembers = (await uniqueApi.query.council.members()).toJSON() as any[];131  const councilProposalThreshold = Math.floor(councilMembers.length / 2) + 1;132133  const democracyProposalHash = blake2AsHex(proposal, 256);134  const democracyProposalPreimage = uniqueApi.tx.preimage.notePreimage(proposal).method.toHex();135136  const democracyProposal = uniqueApi.tx.democracy.externalProposeDefault({137    Legacy: democracyProposalHash,138  });139140  const councilProposal = uniqueApi.tx.council.propose(141    councilProposalThreshold,142    democracyProposal,143    democracyProposal.method.encodedLength,144  ).method.toHex();145146  const proposeBatch = uniqueApi.tx.utility.batchAll([147    democracyProposalPreimage,148    councilProposal,149  ]);150151  const encodedCall = proposeBatch.method.toHex();152153  console.log('-----------------');154  console.log('Council Proposal: ', `https://polkadot.js.org/apps/?rpc=${uniqueParachainUrl}#/extrinsics/decode/${encodedCall}`);155  console.log('-----------------');156157  await relayApi.disconnect();158  await uniqueApi.disconnect();159  await otherApi.disconnect();160}161162await main();
modifiedjs-packages/scripts/package.jsondiffbeforeafterboth
--- a/js-packages/scripts/package.json
+++ b/js-packages/scripts/package.json
@@ -15,6 +15,7 @@
     "generateEnv": "yarn ts-node --esm ./generateEnv.ts",
     "propose-upgrade": "yarn ts-node --esm ./proposeupgrade.ts",
     "propose-fast-track": "yarn ts-node --esm ./proposefasttrack.ts",
-    "council-democracy-proposal": "yarn ts-node --esm ./councilproposal.ts"
+    "council-democracy-proposal": "yarn ts-node --esm ./councilproposal.ts",
+    "hrmp-channel": "yarn ts-node --esm ./hrmpchannel.ts"
   }
 }