@ckb-firewall/cli 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/README.md +11 -6
  2. package/dist/commands/anchor.d.ts +23 -0
  3. package/dist/commands/anchor.d.ts.map +1 -0
  4. package/dist/commands/anchor.js +412 -0
  5. package/dist/commands/anchor.js.map +1 -0
  6. package/dist/commands/config.d.ts +4 -0
  7. package/dist/commands/config.d.ts.map +1 -0
  8. package/dist/commands/config.js +59 -0
  9. package/dist/commands/config.js.map +1 -0
  10. package/dist/commands/execute.d.ts +9 -1
  11. package/dist/commands/execute.d.ts.map +1 -1
  12. package/dist/commands/execute.js +394 -229
  13. package/dist/commands/execute.js.map +1 -1
  14. package/dist/commands/import.d.ts.map +1 -1
  15. package/dist/commands/import.js +15 -48
  16. package/dist/commands/import.js.map +1 -1
  17. package/dist/commands/inspect.d.ts.map +1 -1
  18. package/dist/commands/inspect.js +32 -0
  19. package/dist/commands/inspect.js.map +1 -1
  20. package/dist/commands/proposals.d.ts.map +1 -1
  21. package/dist/commands/proposals.js +2 -4
  22. package/dist/commands/proposals.js.map +1 -1
  23. package/dist/commands/propose.d.ts +5 -0
  24. package/dist/commands/propose.d.ts.map +1 -1
  25. package/dist/commands/propose.js +91 -7
  26. package/dist/commands/propose.js.map +1 -1
  27. package/dist/commands/reclaim.d.ts +18 -0
  28. package/dist/commands/reclaim.d.ts.map +1 -0
  29. package/dist/commands/reclaim.js +214 -0
  30. package/dist/commands/reclaim.js.map +1 -0
  31. package/dist/commands/sign.d.ts.map +1 -1
  32. package/dist/commands/sign.js +40 -94
  33. package/dist/commands/sign.js.map +1 -1
  34. package/dist/commands/vote.d.ts +2 -0
  35. package/dist/commands/vote.d.ts.map +1 -1
  36. package/dist/commands/vote.js +31 -25
  37. package/dist/commands/vote.js.map +1 -1
  38. package/dist/index.js +91 -16
  39. package/dist/index.js.map +1 -1
  40. package/dist/lib/blkl.d.ts +17 -2
  41. package/dist/lib/blkl.d.ts.map +1 -1
  42. package/dist/lib/blkl.js +133 -17
  43. package/dist/lib/blkl.js.map +1 -1
  44. package/dist/lib/capacity.d.ts +12 -0
  45. package/dist/lib/capacity.d.ts.map +1 -0
  46. package/dist/lib/capacity.js +18 -0
  47. package/dist/lib/capacity.js.map +1 -0
  48. package/dist/lib/config.d.ts +7 -0
  49. package/dist/lib/config.d.ts.map +1 -0
  50. package/dist/lib/config.js +35 -0
  51. package/dist/lib/config.js.map +1 -0
  52. package/dist/lib/defaults.d.ts +19 -0
  53. package/dist/lib/defaults.d.ts.map +1 -1
  54. package/dist/lib/defaults.js +34 -7
  55. package/dist/lib/defaults.js.map +1 -1
  56. package/dist/lib/governance-v4.d.ts +39 -0
  57. package/dist/lib/governance-v4.d.ts.map +1 -0
  58. package/dist/lib/governance-v4.js +194 -0
  59. package/dist/lib/governance-v4.js.map +1 -0
  60. package/dist/lib/gui-bundle.html +485 -316
  61. package/dist/lib/gui-server.d.ts.map +1 -1
  62. package/dist/lib/gui-server.js +300 -246
  63. package/dist/lib/gui-server.js.map +1 -1
  64. package/dist/lib/hints.d.ts +1 -1
  65. package/dist/lib/hints.d.ts.map +1 -1
  66. package/dist/lib/hints.js +3 -9
  67. package/dist/lib/hints.js.map +1 -1
  68. package/dist/lib/proposals.d.ts +17 -9
  69. package/dist/lib/proposals.d.ts.map +1 -1
  70. package/dist/lib/proposals.js +4 -26
  71. package/dist/lib/proposals.js.map +1 -1
  72. package/dist/lib/rpc.d.ts +5 -0
  73. package/dist/lib/rpc.d.ts.map +1 -1
  74. package/dist/lib/rpc.js +21 -0
  75. package/dist/lib/rpc.js.map +1 -1
  76. package/dist/lib/treasury-status.d.ts +28 -0
  77. package/dist/lib/treasury-status.d.ts.map +1 -0
  78. package/dist/lib/treasury-status.js +70 -0
  79. package/dist/lib/treasury-status.js.map +1 -0
  80. package/dist/lib/treasury.d.ts +15 -0
  81. package/dist/lib/treasury.d.ts.map +1 -0
  82. package/dist/lib/treasury.js +62 -0
  83. package/dist/lib/treasury.js.map +1 -0
  84. package/dist/lib/tx-deps.d.ts +9 -0
  85. package/dist/lib/tx-deps.d.ts.map +1 -0
  86. package/dist/lib/tx-deps.js +15 -0
  87. package/dist/lib/tx-deps.js.map +1 -0
  88. package/dist/lib/witness.d.ts +13 -11
  89. package/dist/lib/witness.d.ts.map +1 -1
  90. package/dist/lib/witness.js +85 -48
  91. package/dist/lib/witness.js.map +1 -1
  92. package/package.json +1 -1
@@ -0,0 +1,18 @@
1
+ export interface ReclaimOptions {
2
+ proposal?: string;
3
+ rpcUrl: string;
4
+ registryTx: string;
5
+ registryIndex: string;
6
+ proposalTx?: string;
7
+ proposalIndex?: string;
8
+ proposalAnchorCodeTx?: string;
9
+ proposalAnchorCodeIndex?: string;
10
+ treasuryLockDep?: string[];
11
+ txOut: string;
12
+ sign: boolean;
13
+ fromAccount: string;
14
+ force: boolean;
15
+ }
16
+ export declare function reclaimDefaults(): Partial<ReclaimOptions>;
17
+ export declare function reclaimCommand(opts: ReclaimOptions): Promise<void>;
18
+ //# sourceMappingURL=reclaim.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reclaim.d.ts","sourceRoot":"","sources":["../../src/commands/reclaim.ts"],"names":[],"mappings":"AA6BA,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,wBAAgB,eAAe,IAAI,OAAO,CAAC,cAAc,CAAC,CAYzD;AASD,wBAAsB,cAAc,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAkMxE"}
@@ -0,0 +1,214 @@
1
+ import { writeFileSync } from "node:fs";
2
+ import { execFileSync } from "node:child_process";
3
+ import chalk from "chalk";
4
+ import logSymbols from "log-symbols";
5
+ import ora from "ora";
6
+ import inquirer from "inquirer";
7
+ import { getLiveCell } from "../lib/rpc.js";
8
+ import { resolveRegistryOutpoint } from "../lib/registry.js";
9
+ import { bytesToHex, extractGovernanceHeaderRaw, governanceTreasuryLockHash, parseGovernanceHeader, scriptToMoleculeBytes, } from "../lib/blkl.js";
10
+ import { assertProposalAnchorTypeMatches, parseRegistryTypeIdValue, assertProposalCellMatches, reviewDelayMs, } from "../lib/governance-v4.js";
11
+ import { isReviewWindowPassed, isVoteApproved, loadProposal, saveProposal } from "../lib/proposals.js";
12
+ import { buildWitnessArgs, ckbBlake2b, encodeRelativeTimestampSince } from "../lib/witness.js";
13
+ import { SECP256K1_DEP_GROUP, TESTNET_CONTRACT_OUTPOINTS, TESTNET_REGISTRY_CELL, TESTNET_RPC_URL } from "../lib/defaults.js";
14
+ import { hexCapacity, occupiedCapacityShannons, parseCapacity } from "../lib/capacity.js";
15
+ import { parseCellDepList } from "../lib/tx-deps.js";
16
+ const DEFAULT_FEE_SHANNONS = 100000n;
17
+ export function reclaimDefaults() {
18
+ return {
19
+ rpcUrl: TESTNET_RPC_URL,
20
+ registryTx: TESTNET_REGISTRY_CELL.txHash,
21
+ registryIndex: String(TESTNET_REGISTRY_CELL.index),
22
+ proposalAnchorCodeTx: TESTNET_CONTRACT_OUTPOINTS.proposalAnchor.txHash,
23
+ proposalAnchorCodeIndex: String(TESTNET_CONTRACT_OUTPOINTS.proposalAnchor.index),
24
+ txOut: "gov_reclaim_tx.json",
25
+ sign: false,
26
+ fromAccount: "",
27
+ force: false,
28
+ };
29
+ }
30
+ function parseOutputIndex(value, name) {
31
+ if (!/^\d+$/.test(value.trim())) {
32
+ throw new Error(`${name} must be a non-negative integer.`);
33
+ }
34
+ return Number.parseInt(value.trim(), 10);
35
+ }
36
+ export async function reclaimCommand(opts) {
37
+ const proposalId = opts.proposal?.trim();
38
+ if (!proposalId) {
39
+ console.error(logSymbols.error, chalk.red("--proposal is required for anchor reclaim."));
40
+ process.exit(1);
41
+ }
42
+ const proposal = loadProposal(proposalId);
43
+ const proposalCellTx = opts.proposalTx?.trim() || proposal.proposalCellTxHash?.trim();
44
+ const proposalIndexRaw = opts.proposalIndex ?? (proposal.proposalCellIndex === undefined ? undefined : String(proposal.proposalCellIndex));
45
+ if (!proposalCellTx || proposalIndexRaw === undefined) {
46
+ console.error(logSymbols.error, chalk.red("Proposal cell outpoint is required."));
47
+ process.exit(1);
48
+ }
49
+ let registryIndex;
50
+ let proposalIndex;
51
+ let proposalAnchorCodeIndex;
52
+ let treasuryLockDeps;
53
+ try {
54
+ registryIndex = parseOutputIndex(opts.registryIndex, "--registry-index");
55
+ proposalIndex = parseOutputIndex(proposalIndexRaw, "--proposal-index");
56
+ proposalAnchorCodeIndex = opts.proposalAnchorCodeIndex === undefined
57
+ ? undefined
58
+ : parseOutputIndex(opts.proposalAnchorCodeIndex, "--proposal-anchor-code-index");
59
+ treasuryLockDeps = parseCellDepList(opts.treasuryLockDep, "--treasury-lock-dep");
60
+ }
61
+ catch (err) {
62
+ console.error(logSymbols.error, chalk.red(err instanceof Error ? err.message : String(err)));
63
+ process.exit(1);
64
+ }
65
+ if (proposal.status === "executed") {
66
+ console.error(logSymbols.error, chalk.red("Executed proposals cannot be reclaimed; their anchor was consumed by execution."));
67
+ process.exit(1);
68
+ }
69
+ if (!opts.force) {
70
+ if (!isReviewWindowPassed(proposal)) {
71
+ console.error(logSymbols.error, chalk.red("Review window has not passed. Refusing to reclaim a live proposal anchor."));
72
+ process.exit(1);
73
+ }
74
+ if (isVoteApproved(proposal) && proposal.status !== "rejected") {
75
+ console.error(logSymbols.error, chalk.red("Proposal reached vote threshold. Use execute, or pass --force if governance has abandoned it."));
76
+ process.exit(1);
77
+ }
78
+ }
79
+ const spinner = ora("Building proposal-anchor reclaim transaction").start();
80
+ let returnCapacity;
81
+ let proposalCell;
82
+ let since;
83
+ let proposalAnchorCellDep;
84
+ try {
85
+ const { txHash, index } = await resolveRegistryOutpoint(opts.rpcUrl, opts.registryTx, registryIndex);
86
+ const registryCell = await getLiveCell(opts.rpcUrl, txHash, index);
87
+ if (!registryCell.type)
88
+ throw new Error("Registry cell has no type script.");
89
+ const registryTypeIdValue = parseRegistryTypeIdValue(registryCell.type.args);
90
+ const govHeaderRaw = extractGovernanceHeaderRaw(registryCell.data);
91
+ const govHeader = govHeaderRaw ? parseGovernanceHeader(govHeaderRaw) : null;
92
+ const treasuryLockHash = governanceTreasuryLockHash(govHeader);
93
+ if (!treasuryLockHash) {
94
+ throw new Error("Registry does not declare a treasury; anchor reclaim is only supported for treasury registries.");
95
+ }
96
+ proposalCell = await getLiveCell(opts.rpcUrl, proposalCellTx, proposalIndex);
97
+ assertProposalCellMatches(proposal, proposalCell.data, registryTypeIdValue);
98
+ const delayMs = reviewDelayMs(proposal);
99
+ assertProposalAnchorTypeMatches({
100
+ proposalCellType: proposalCell.type,
101
+ registryTypeIdValue,
102
+ governanceHeader: govHeader,
103
+ reclaimDelayMs: delayMs,
104
+ });
105
+ if (!opts.proposalAnchorCodeTx || proposalAnchorCodeIndex === undefined) {
106
+ throw new Error("Typed proposal anchors require --proposal-anchor-code-tx and --proposal-anchor-code-index so the transaction can include the anchor type script cell_dep.");
107
+ }
108
+ proposalAnchorCellDep = {
109
+ out_point: { tx_hash: opts.proposalAnchorCodeTx, index: `0x${proposalAnchorCodeIndex.toString(16)}` },
110
+ dep_type: "code",
111
+ };
112
+ const proposalLockHash = ckbBlake2b(scriptToMoleculeBytes(proposalCell.lock));
113
+ if (bytesToHex(proposalLockHash) !== bytesToHex(treasuryLockHash)) {
114
+ throw new Error("Proposal cell is not locked to the registry treasury.");
115
+ }
116
+ const proposalCapacity = parseCapacity(proposalCell.capacity);
117
+ returnCapacity = proposalCapacity - DEFAULT_FEE_SHANNONS;
118
+ const minReturnCapacity = occupiedCapacityShannons({ lock: proposalCell.lock, type: null, data: "0x" });
119
+ if (returnCapacity < minReturnCapacity) {
120
+ throw new Error(`Proposal cell capacity ${proposalCapacity} shannons is too small to reclaim after fee. ` +
121
+ `Need at least ${minReturnCapacity + DEFAULT_FEE_SHANNONS} shannons.`);
122
+ }
123
+ since = encodeRelativeTimestampSince(delayMs);
124
+ spinner.succeed("Proposal-anchor reclaim transaction verified");
125
+ }
126
+ catch (err) {
127
+ spinner.fail("Could not build reclaim transaction");
128
+ console.error(chalk.red(err instanceof Error ? err.message : String(err)));
129
+ process.exit(1);
130
+ }
131
+ const txJson = {
132
+ transaction: {
133
+ version: "0x0",
134
+ cell_deps: [
135
+ { out_point: { tx_hash: SECP256K1_DEP_GROUP.txHash, index: "0x0" }, dep_type: "dep_group" },
136
+ ...treasuryLockDeps,
137
+ proposalAnchorCellDep,
138
+ ],
139
+ header_deps: [],
140
+ inputs: [
141
+ {
142
+ since,
143
+ previous_output: { tx_hash: proposalCellTx, index: `0x${proposalIndex.toString(16)}` },
144
+ },
145
+ ],
146
+ outputs: [
147
+ { capacity: hexCapacity(returnCapacity), lock: proposalCell.lock, type: null },
148
+ ],
149
+ outputs_data: ["0x"],
150
+ witnesses: [bytesToHex(buildWitnessArgs({}))],
151
+ },
152
+ multisig_configs: {},
153
+ signatures: {},
154
+ };
155
+ writeFileSync(opts.txOut, JSON.stringify(txJson, null, 2) + "\n");
156
+ saveProposal(proposal);
157
+ console.log();
158
+ console.log(logSymbols.success, chalk.green(`Reclaim transaction written to ${opts.txOut}`));
159
+ console.log(` Proposal: ${proposal.id}`);
160
+ console.log(` Proposal cell: ${proposalCellTx}:${proposalIndex}`);
161
+ console.log(` Return: ${returnCapacity} shannons`);
162
+ console.log(` Since delay: ${since}`);
163
+ console.log();
164
+ if (!opts.sign) {
165
+ console.log("Sign and submit with ckb-cli:");
166
+ console.log(chalk.dim(` ckb-cli wallet sign-txs --tx-file ${opts.txOut} --from-account <treasury-address>\n` +
167
+ ` ckb-cli wallet apply-txs --tx-file ${opts.txOut}`));
168
+ return;
169
+ }
170
+ let fromAccount = opts.fromAccount;
171
+ if (!fromAccount && process.stdin.isTTY) {
172
+ const { account } = await inquirer.prompt([
173
+ {
174
+ type: "input",
175
+ name: "account",
176
+ message: "Treasury account address for ckb-cli:",
177
+ validate: (v) => v.trim().length > 0 || "Required.",
178
+ },
179
+ ]);
180
+ fromAccount = account.trim();
181
+ }
182
+ if (!fromAccount) {
183
+ console.error(logSymbols.error, chalk.red("--from-account is required when using --sign."));
184
+ process.exit(1);
185
+ }
186
+ const { proceed } = await inquirer.prompt([
187
+ { type: "confirm", name: "proceed", message: "Sign and submit reclaim transaction?", default: false },
188
+ ]);
189
+ if (!proceed) {
190
+ console.log("Aborted.");
191
+ return;
192
+ }
193
+ const signSpinner = ora("Signing with ckb-cli").start();
194
+ try {
195
+ execFileSync("ckb-cli", ["wallet", "sign-txs", "--tx-file", opts.txOut, "--from-account", fromAccount], { stdio: "inherit" });
196
+ signSpinner.succeed("Signed");
197
+ const submitSpinner = ora("Submitting").start();
198
+ const output = execFileSync("ckb-cli", ["wallet", "apply-txs", "--tx-file", opts.txOut], { encoding: "utf8" });
199
+ submitSpinner.succeed("Submitted");
200
+ const txHash = output.match(/0x[a-fA-F0-9]{64}/)?.[0];
201
+ if (txHash) {
202
+ console.log(` Tx hash: ${txHash}`);
203
+ }
204
+ else {
205
+ console.log(output);
206
+ }
207
+ }
208
+ catch (err) {
209
+ signSpinner.fail("ckb-cli signing/submission failed");
210
+ console.error(chalk.red(err instanceof Error ? err.message : String(err)));
211
+ process.exit(1);
212
+ }
213
+ }
214
+ //# sourceMappingURL=reclaim.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reclaim.js","sourceRoot":"","sources":["../../src/commands/reclaim.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,UAAU,MAAM,aAAa,CAAC;AACrC,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EACL,UAAU,EACV,0BAA0B,EAC1B,0BAA0B,EAC1B,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,+BAA+B,EAC/B,wBAAwB,EACxB,yBAAyB,EACzB,aAAa,GACd,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACvG,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,4BAA4B,EAAE,MAAM,mBAAmB,CAAC;AAC/F,OAAO,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC7H,OAAO,EAAE,WAAW,EAAE,wBAAwB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAC1F,OAAO,EAAE,gBAAgB,EAAoB,MAAM,mBAAmB,CAAC;AAEvE,MAAM,oBAAoB,GAAG,OAAQ,CAAC;AAkBtC,MAAM,UAAU,eAAe;IAC7B,OAAO;QACL,MAAM,EAAE,eAAe;QACvB,UAAU,EAAE,qBAAqB,CAAC,MAAM;QACxC,aAAa,EAAE,MAAM,CAAC,qBAAqB,CAAC,KAAK,CAAC;QAClD,oBAAoB,EAAE,0BAA0B,CAAC,cAAc,CAAC,MAAM;QACtE,uBAAuB,EAAE,MAAM,CAAC,0BAA0B,CAAC,cAAc,CAAC,KAAK,CAAC;QAChF,KAAK,EAAE,qBAAqB;QAC5B,IAAI,EAAE,KAAK;QACX,WAAW,EAAE,EAAE;QACf,KAAK,EAAE,KAAK;KACb,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAa,EAAE,IAAY;IACnD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,kCAAkC,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAoB;IACvD,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC;IACzC,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC,CAAC;QACzF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,QAAQ,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;IAC1C,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,QAAQ,CAAC,kBAAkB,EAAE,IAAI,EAAE,CAAC;IACtF,MAAM,gBAAgB,GAAG,IAAI,CAAC,aAAa,IAAI,CAC7C,QAAQ,CAAC,iBAAiB,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAC1F,CAAC;IACF,IAAI,CAAC,cAAc,IAAI,gBAAgB,KAAK,SAAS,EAAE,CAAC;QACtD,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC,CAAC;QAClF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,aAAqB,CAAC;IAC1B,IAAI,aAAqB,CAAC;IAC1B,IAAI,uBAA2C,CAAC;IAChD,IAAI,gBAA+B,CAAC;IACpC,IAAI,CAAC;QACH,aAAa,GAAG,gBAAgB,CAAC,IAAI,CAAC,aAAa,EAAE,kBAAkB,CAAC,CAAC;QACzE,aAAa,GAAG,gBAAgB,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,CAAC;QACvE,uBAAuB,GAAG,IAAI,CAAC,uBAAuB,KAAK,SAAS;YAClE,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,uBAAuB,EAAE,8BAA8B,CAAC,CAAC;QACnF,gBAAgB,GAAG,gBAAgB,CAAC,IAAI,CAAC,eAAe,EAAE,qBAAqB,CAAC,CAAC;IACnF,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC7F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QACnC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,iFAAiF,CAAC,CAAC,CAAC;QAC9H,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAChB,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,EAAE,CAAC;YACpC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,2EAA2E,CAAC,CAAC,CAAC;YACxH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,IAAI,cAAc,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YAC/D,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,+FAA+F,CAAC,CAAC,CAAC;YAC5I,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,CAAC,8CAA8C,CAAC,CAAC,KAAK,EAAE,CAAC;IAC5E,IAAI,cAAsB,CAAC;IAC3B,IAAI,YAAqD,CAAC;IAC1D,IAAI,KAAa,CAAC;IAClB,IAAI,qBAA0F,CAAC;IAC/F,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,uBAAuB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;QACrG,MAAM,YAAY,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QACnE,IAAI,CAAC,YAAY,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QAC7E,MAAM,mBAAmB,GAAG,wBAAwB,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7E,MAAM,YAAY,GAAG,0BAA0B,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QACnE,MAAM,SAAS,GAAG,YAAY,CAAC,CAAC,CAAC,qBAAqB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC5E,MAAM,gBAAgB,GAAG,0BAA0B,CAAC,SAAS,CAAC,CAAC;QAC/D,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,iGAAiG,CAAC,CAAC;QACrH,CAAC;QAED,YAAY,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,EAAE,aAAa,CAAC,CAAC;QAC7E,yBAAyB,CAAC,QAAQ,EAAE,YAAY,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC;QAC5E,MAAM,OAAO,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;QACxC,+BAA+B,CAAC;YAC9B,gBAAgB,EAAE,YAAY,CAAC,IAAI;YACnC,mBAAmB;YACnB,gBAAgB,EAAE,SAAS;YAC3B,cAAc,EAAE,OAAO;SACxB,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,CAAC,oBAAoB,IAAI,uBAAuB,KAAK,SAAS,EAAE,CAAC;YACxE,MAAM,IAAI,KAAK,CACb,2JAA2J,CAC5J,CAAC;QACJ,CAAC;QACD,qBAAqB,GAAG;YACtB,SAAS,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,oBAAoB,EAAE,KAAK,EAAE,KAAK,uBAAuB,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE;YACrG,QAAQ,EAAE,MAAM;SACjB,CAAC;QACF,MAAM,gBAAgB,GAAG,UAAU,CAAC,qBAAqB,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9E,IAAI,UAAU,CAAC,gBAAgB,CAAC,KAAK,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAClE,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;QAC3E,CAAC;QAED,MAAM,gBAAgB,GAAG,aAAa,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC9D,cAAc,GAAG,gBAAgB,GAAG,oBAAoB,CAAC;QACzD,MAAM,iBAAiB,GAAG,wBAAwB,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACxG,IAAI,cAAc,GAAG,iBAAiB,EAAE,CAAC;YACvC,MAAM,IAAI,KAAK,CACb,0BAA0B,gBAAgB,+CAA+C;gBACzF,iBAAiB,iBAAiB,GAAG,oBAAoB,YAAY,CACtE,CAAC;QACJ,CAAC;QACD,KAAK,GAAG,4BAA4B,CAAC,OAAO,CAAC,CAAC;QAC9C,OAAO,CAAC,OAAO,CAAC,8CAA8C,CAAC,CAAC;IAClE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;QACpD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC3E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG;QACb,WAAW,EAAE;YACX,OAAO,EAAE,KAAK;YACd,SAAS,EAAE;gBACT,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,mBAAmB,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE;gBAC3F,GAAG,gBAAgB;gBACnB,qBAAqB;aACtB;YACD,WAAW,EAAE,EAAE;YACf,MAAM,EAAE;gBACN;oBACE,KAAK;oBACL,eAAe,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,KAAK,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE;iBACvF;aACF;YACD,OAAO,EAAE;gBACP,EAAE,QAAQ,EAAE,WAAW,CAAC,cAAc,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;aAC/E;YACD,YAAY,EAAE,CAAC,IAAI,CAAC;YACpB,SAAS,EAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC;SAC9C;QACD,gBAAgB,EAAE,EAAE;QACpB,UAAU,EAAE,EAAE;KACf,CAAC;IAEF,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAClE,YAAY,CAAC,QAAQ,CAAC,CAAC;IAEvB,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,kCAAkC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAC7F,OAAO,CAAC,GAAG,CAAC,qBAAqB,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC;IAChD,OAAO,CAAC,GAAG,CAAC,qBAAqB,cAAc,IAAI,aAAa,EAAE,CAAC,CAAC;IACpE,OAAO,CAAC,GAAG,CAAC,qBAAqB,cAAc,WAAW,CAAC,CAAC;IAC5D,OAAO,CAAC,GAAG,CAAC,qBAAqB,KAAK,EAAE,CAAC,CAAC;IAC1C,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CACnB,uCAAuC,IAAI,CAAC,KAAK,sCAAsC;YACvF,wCAAwC,IAAI,CAAC,KAAK,EAAE,CACrD,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,IAAI,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;IACnC,IAAI,CAAC,WAAW,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACxC,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAsB;YAC7D;gBACE,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,uCAAuC;gBAChD,QAAQ,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW;aAC5D;SACF,CAAC,CAAC;QACH,WAAW,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAC/B,CAAC;IACD,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC,CAAC;QAC5F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAuB;QAC9D,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,sCAAsC,EAAE,OAAO,EAAE,KAAK,EAAE;KACtG,CAAC,CAAC;IACH,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACxB,OAAO;IACT,CAAC;IAED,MAAM,WAAW,GAAG,GAAG,CAAC,sBAAsB,CAAC,CAAC,KAAK,EAAE,CAAC;IACxD,IAAI,CAAC;QACH,YAAY,CAAC,SAAS,EAAE,CAAC,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,IAAI,CAAC,KAAK,EAAE,gBAAgB,EAAE,WAAW,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAC9H,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAE9B,MAAM,aAAa,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC,KAAK,EAAE,CAAC;QAChD,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,EAAE,CAAC,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;QAC/G,aAAa,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACnC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACtD,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,CAAC,GAAG,CAAC,cAAc,MAAM,EAAE,CAAC,CAAC;QACtC,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,WAAW,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;QACtD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC3E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"sign.d.ts","sourceRoot":"","sources":["../../src/commands/sign.ts"],"names":[],"mappings":"AAsBA,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,YAAY,IAAI,OAAO,CAAC,WAAW,CAAC,CAMnD;AAcD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,SAAI,GAAG,MAAM,GAAG,IAAI,CAK/E;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAyNlE"}
1
+ {"version":3,"file":"sign.d.ts","sourceRoot":"","sources":["../../src/commands/sign.ts"],"names":[],"mappings":"AAmBA,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,YAAY,IAAI,OAAO,CAAC,WAAW,CAAC,CAMnD;AAaD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,SAAI,GAAG,MAAM,GAAG,IAAI,CAK/E;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA0JlE"}
@@ -4,13 +4,10 @@ import ora from "ora";
4
4
  import inquirer from "inquirer";
5
5
  import { secp256k1 } from "@noble/curves/secp256k1.js";
6
6
  import { loadProposal, saveProposal, listProposals, isReviewWindowPassed, isVoteApproved, signingMessage, SIG_THRESHOLD, } from "../lib/proposals.js";
7
- import { hexToBytes, bytesToHex, encodeRegistryPayload, extractGovernanceHeaderRaw, parseGovernanceHeader, insertSorted, removeEntry } from "../lib/blkl.js";
8
- import { parseRegistryPayload } from "@ckb-firewall/sdk";
9
- import { getLiveCell } from "../lib/rpc.js";
10
- import { resolveRegistryOutpoint } from "../lib/registry.js";
11
- import { ckbBlake2b } from "../lib/witness.js";
12
- import { printHints } from "../lib/hints.js";
7
+ import { bytesToHex, hexToBytes } from "../lib/blkl.js";
8
+ import { proposalV4Fields, loadRegistryStateForProposal } from "../lib/governance-v4.js";
13
9
  import { TESTNET_RPC_URL, TESTNET_REGISTRY_CELL, warnIfTrivialTestKeys } from "../lib/defaults.js";
10
+ import { printHints } from "../lib/hints.js";
14
11
  export function signDefaults() {
15
12
  return {
16
13
  rpcUrl: TESTNET_RPC_URL,
@@ -23,7 +20,7 @@ function isValidPrivKey(hex) {
23
20
  const bytes = hexToBytes(hex);
24
21
  if (bytes.length !== 32)
25
22
  return false;
26
- secp256k1.getPublicKey(bytes); // throws if invalid
23
+ secp256k1.getPublicKey(bytes);
27
24
  return true;
28
25
  }
29
26
  catch {
@@ -39,11 +36,8 @@ export function parseSignerIndex(value, maxExclusive = 5) {
39
36
  return n;
40
37
  }
41
38
  export async function signCommand(opts) {
42
- // ── select proposal ──────────────────────────────────────────────────────
43
39
  let proposalId = opts.proposal?.trim() ?? "";
44
40
  if (!proposalId) {
45
- // Use SIG_THRESHOLD as a conservative filter; the real on-chain threshold
46
- // is checked after fetching the registry cell.
47
41
  const signable = listProposals().filter((p) => (p.status === "approved" || p.status === "voting" || p.status === "pending-review") &&
48
42
  p.signatures.length < SIG_THRESHOLD);
49
43
  if (signable.length === 0) {
@@ -56,7 +50,7 @@ export async function signCommand(opts) {
56
50
  name: "chosen",
57
51
  message: "Select proposal to sign:",
58
52
  choices: signable.map((p) => ({
59
- name: `${chalk.bold(p.id)} ${p.action} ${p.lockArgs.slice(0, 24)} (${p.signatures.length}/${SIG_THRESHOLD} sigs)`,
53
+ name: `${chalk.bold(p.id)} ${p.action} ${p.lockArgs.slice(0, 24)}... (${p.signatures.length}/${SIG_THRESHOLD} sigs)`,
60
54
  value: p.id,
61
55
  })),
62
56
  },
@@ -64,7 +58,6 @@ export async function signCommand(opts) {
64
58
  proposalId = chosen;
65
59
  }
66
60
  const proposal = loadProposal(proposalId);
67
- // ── checks ───────────────────────────────────────────────────────────────
68
61
  if (proposal.status === "executed") {
69
62
  console.log(logSymbols.error, chalk.red("Proposal is already executed."));
70
63
  process.exit(1);
@@ -74,87 +67,57 @@ export async function signCommand(opts) {
74
67
  process.exit(1);
75
68
  }
76
69
  if (!isReviewWindowPassed(proposal)) {
77
- const endsAt = new Date(proposal.reviewWindowEndsAt);
78
- const ms = endsAt.getTime() - Date.now();
70
+ const ms = new Date(proposal.reviewWindowEndsAt).getTime() - Date.now();
79
71
  const h = Math.floor(ms / 3_600_000);
80
72
  const m = Math.floor((ms % 3_600_000) / 60_000);
81
- console.log(logSymbols.error, chalk.red(`Review window has not passed yet ${h}h ${m}m remaining.`));
73
+ console.log(logSymbols.error, chalk.red(`Review window has not passed yet: ${h}h ${m}m remaining.`));
82
74
  console.log(chalk.dim(` Window ends: ${proposal.reviewWindowEndsAt}`));
83
75
  process.exit(1);
84
76
  }
85
77
  if (!isVoteApproved(proposal)) {
86
- console.log(logSymbols.error, chalk.red("Vote threshold not met cannot sign yet."));
87
- console.log(chalk.dim(` Use: ckb-firewall vote --proposal ${proposal.id}`));
78
+ console.log(logSymbols.error, chalk.red("Vote threshold not met; cannot sign yet."));
88
79
  process.exit(1);
89
80
  }
90
- // ── fetch registry cell (before signer index prompt so we can use on-chain committee size) ──
91
81
  if (!/^\d+$/.test(opts.registryIndex.trim())) {
92
82
  console.error(logSymbols.error, chalk.red("--registry-index must be a non-negative integer."));
93
83
  process.exit(1);
94
84
  }
95
- const registryIndexInt = Number.parseInt(opts.registryIndex.trim(), 10);
96
- const spinner = ora("Fetching current registry cell to compute signing roots").start();
97
- let oldRoot;
98
- let newRoot;
99
- let committeeSize = null;
100
- let onChainThreshold = null;
85
+ const spinner = ora("Loading registry and computing GOV1 v4 signing roots").start();
86
+ let state;
87
+ let proposalDataHash;
88
+ let reviewDelayMs;
101
89
  try {
102
- const { txHash, index } = await resolveRegistryOutpoint(opts.rpcUrl, opts.registryTx, registryIndexInt);
103
- const cell = await getLiveCell(opts.rpcUrl, txHash, index);
104
- const currentPayload = parseRegistryPayload(cell.data);
105
- const govHeaderRaw = extractGovernanceHeaderRaw(cell.data);
106
- const govHeader = govHeaderRaw ? parseGovernanceHeader(govHeaderRaw) : null;
107
- if (govHeader && govHeader.pubkeys.length > 0) {
108
- warnIfTrivialTestKeys(govHeader.pubkeys);
109
- committeeSize = govHeader.pubkeys.length;
110
- onChainThreshold = govHeader.threshold;
111
- if (onChainThreshold !== SIG_THRESHOLD) {
112
- process.stderr.write(`Warning: on-chain signature threshold (${onChainThreshold}) differs from compile-time default (${SIG_THRESHOLD}). ` +
113
- `Using the on-chain value.\n`);
114
- }
115
- }
116
- const oldBlkl = hexToBytes(cell.data);
117
- let newEntries;
118
- if (proposal.action === "add") {
119
- newEntries = insertSorted(currentPayload.entries, {
120
- identifier: proposal.lockArgs,
121
- expiresAt: BigInt(proposal.expiresAt),
122
- });
123
- }
124
- else {
125
- newEntries = removeEntry(currentPayload.entries, proposal.lockArgs);
126
- }
127
- const newBlkl = encodeRegistryPayload({ version: currentPayload.version, entries: newEntries }, govHeaderRaw ?? undefined);
128
- oldRoot = ckbBlake2b(oldBlkl);
129
- newRoot = ckbBlake2b(newBlkl);
130
- spinner.succeed("Registry roots computed");
90
+ state = await loadRegistryStateForProposal(opts.rpcUrl, opts.registryTx, Number.parseInt(opts.registryIndex.trim(), 10), proposal);
91
+ if (state.governanceHeader?.pubkeys.length)
92
+ warnIfTrivialTestKeys(state.governanceHeader.pubkeys);
93
+ const fields = proposalV4Fields(proposal, state.registryTypeIdValue);
94
+ proposalDataHash = fields.proposalDataHash;
95
+ reviewDelayMs = fields.reviewDelayMs;
96
+ proposal.proposalDataHash = bytesToHex(proposalDataHash);
97
+ proposal.reviewDelayMs = reviewDelayMs.toString();
98
+ spinner.succeed("GOV1 v4 signing roots computed");
131
99
  }
132
100
  catch (err) {
133
- spinner.fail("Could not fetch registry cell");
101
+ spinner.fail("Could not compute GOV1 v4 signing roots");
134
102
  console.error(chalk.red(err instanceof Error ? err.message : String(err)));
135
103
  process.exit(1);
136
104
  }
137
- // ── signer index ─────────────────────────────────────────────────────────
138
- // committeeSize comes from the on-chain governance header so the prompt
139
- // accurately reflects which indices are valid for this deployment.
105
+ const committeeSize = state.governanceHeader?.pubkeys.length ?? 5;
106
+ const effectiveThreshold = state.governanceHeader?.threshold ?? SIG_THRESHOLD;
140
107
  let signerIndex;
141
108
  if (opts.signerIndex !== undefined) {
142
- const maxExclusive = committeeSize ?? Number.MAX_SAFE_INTEGER;
143
- const parsed = parseSignerIndex(opts.signerIndex, maxExclusive);
109
+ const parsed = parseSignerIndex(opts.signerIndex, committeeSize);
144
110
  if (parsed === null) {
145
- console.error(logSymbols.error, chalk.red(committeeSize !== null
146
- ? `--signer-index must be 0–${committeeSize - 1} for this committee.`
147
- : "--signer-index must be a non-negative integer."));
111
+ console.error(logSymbols.error, chalk.red(`--signer-index must be 0-${committeeSize - 1}.`));
148
112
  process.exit(1);
149
113
  }
150
114
  signerIndex = parsed;
151
115
  }
152
116
  else {
153
117
  const usedIndices = new Set(proposal.signatures.map((s) => s.signerIndex));
154
- const totalSigners = committeeSize ?? 5;
155
- const available = Array.from({ length: totalSigners }, (_, i) => i).filter((i) => !usedIndices.has(i));
118
+ const available = Array.from({ length: committeeSize }, (_, i) => i).filter((i) => !usedIndices.has(i));
156
119
  if (available.length === 0) {
157
- console.log(logSymbols.success, chalk.green(`All ${totalSigners} signers have already signed.`));
120
+ console.log(logSymbols.success, chalk.green(`All ${committeeSize} signers have already signed.`));
158
121
  process.exit(0);
159
122
  }
160
123
  const { idx } = await inquirer.prompt([
@@ -167,12 +130,11 @@ export async function signCommand(opts) {
167
130
  ]);
168
131
  signerIndex = idx;
169
132
  }
170
- // Check if this index already signed.
171
133
  if (proposal.signatures.some((s) => s.signerIndex === signerIndex)) {
172
134
  console.log(logSymbols.warning, chalk.yellow(`Signer ${signerIndex} has already signed this proposal.`));
135
+ saveProposal(proposal);
173
136
  process.exit(0);
174
137
  }
175
- // ── private key ──────────────────────────────────────────────────────────
176
138
  console.log();
177
139
  const { keyInput } = await inquirer.prompt([
178
140
  {
@@ -186,48 +148,32 @@ export async function signCommand(opts) {
186
148
  console.error(logSymbols.error, chalk.red("A private key is required."));
187
149
  process.exit(1);
188
150
  }
189
- else if (!isValidPrivKey(keyInput.trim())) {
190
- console.error(logSymbols.error, chalk.red("Invalid private key must be 32-byte hex."));
151
+ if (!isValidPrivKey(keyInput.trim())) {
152
+ console.error(logSymbols.error, chalk.red("Invalid private key; must be 32-byte hex."));
191
153
  process.exit(1);
192
154
  }
193
155
  const privateKeyBytes = hexToBytes(keyInput.trim());
194
- // ── sign ─────────────────────────────────────────────────────────────────
195
- // Derive pubkey before zeroing key material.
196
156
  const pubKey = bytesToHex(new Uint8Array(secp256k1.getPublicKey(privateKeyBytes, true)));
197
- // Use v3 signing (includes reviewWindowEndMs) so governance-lock can verify the since constraint.
198
- const reviewWindowEndMs = BigInt(new Date(proposal.reviewWindowEndsAt).getTime());
199
- const msgHash = signingMessage(proposal, oldRoot, newRoot, reviewWindowEndMs);
200
- // @noble/curves v2 'recovered' format: [recovery_bit(1), r(32), s(32)].
201
- // CKB secp256k1 expects: [r(32), s(32), recovery_bit(1)].
157
+ const msgHash = signingMessage(proposal, state.oldRoot, state.newRoot, proposalDataHash, reviewDelayMs);
202
158
  const recoveredSig = secp256k1.sign(msgHash, privateKeyBytes, { lowS: true, format: "recovered" });
203
159
  const sigBytes = new Uint8Array(65);
204
- sigBytes.set(recoveredSig.slice(1), 0); // r + s at bytes 0-63
205
- sigBytes[64] = recoveredSig[0] ?? 0; // recovery bit at byte 64
206
- privateKeyBytes.fill(0); // zero key material immediately after use
160
+ sigBytes.set(recoveredSig.slice(1), 0);
161
+ sigBytes[64] = recoveredSig[0] ?? 0;
162
+ privateKeyBytes.fill(0);
207
163
  proposal.signatures.push({
208
164
  signerIndex,
209
165
  signature: bytesToHex(sigBytes),
210
166
  timestamp: new Date().toISOString(),
211
167
  });
212
- const effectiveThreshold = onChainThreshold ?? SIG_THRESHOLD;
213
- const sigCount = proposal.signatures.length;
214
- if (sigCount >= effectiveThreshold) {
168
+ if (proposal.signatures.length >= effectiveThreshold)
215
169
  proposal.status = "approved";
216
- }
217
170
  saveProposal(proposal);
218
171
  console.log();
219
172
  console.log(logSymbols.success, chalk.green(`Signed by signer ${signerIndex}`));
220
- console.log(` Public key: ${chalk.dim(pubKey)}`);
221
- console.log(` Signature: ${chalk.dim(bytesToHex(sigBytes).slice(0, 20) + "…")}`);
222
- console.log(` Signatures: ${sigCount}/${effectiveThreshold} collected`);
223
- if (sigCount >= effectiveThreshold) {
224
- console.log();
225
- console.log(logSymbols.success, chalk.green("Signature threshold met — ready to execute."));
226
- console.log(` Next: ${chalk.dim(`ckb-firewall execute --proposal ${proposal.id}`)}`);
227
- }
228
- else {
229
- console.log(` Need ${effectiveThreshold - sigCount} more signature(s).`);
230
- }
173
+ console.log(` Public key: ${chalk.dim(pubKey)}`);
174
+ console.log(` Proposal data: ${chalk.dim(bytesToHex(proposalDataHash))}`);
175
+ console.log(` Review delay ms: ${reviewDelayMs.toString()}`);
176
+ console.log(` Signatures: ${proposal.signatures.length}/${effectiveThreshold} collected`);
231
177
  console.log();
232
178
  printHints("sign");
233
179
  }
@@ -1 +1 @@
1
- {"version":3,"file":"sign.js","sourceRoot":"","sources":["../../src/commands/sign.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sign.js","sourceRoot":"","sources":["../../src/commands/sign.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,8 @@ export interface VoteOptions {
4
4
  rpcUrl: string;
5
5
  registryTx: string;
6
6
  registryIndex: string;
7
+ /** Private key hex (non-interactive use, e.g. scripted drills). */
8
+ privateKey?: string;
7
9
  }
8
10
  export declare function voteDefaults(): Partial<VoteOptions>;
9
11
  export declare function voteCommand(opts: VoteOptions): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"vote.d.ts","sourceRoot":"","sources":["../../src/commands/vote.ts"],"names":[],"mappings":"AAsBA,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,YAAY,IAAI,OAAO,CAAC,WAAW,CAAC,CAMnD;AAaD,wBAAsB,WAAW,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAwLlE"}
1
+ {"version":3,"file":"vote.d.ts","sourceRoot":"","sources":["../../src/commands/vote.ts"],"names":[],"mappings":"AAsBA,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,mEAAmE;IACnE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,YAAY,IAAI,OAAO,CAAC,WAAW,CAAC,CAMnD;AAaD,wBAAsB,WAAW,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA0LlE"}