@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
package/README.md CHANGED
@@ -60,16 +60,21 @@ ckb-firewall vote --proposal <id> --vote yes
60
60
  # 5. Track status
61
61
  ckb-firewall proposals
62
62
 
63
- # 6. Sign after 72h review window and vote threshold
64
- ckb-firewall sign --proposal <id> --signer-index 0
65
- # (prompts for 32-byte private key)
66
-
67
- # 7. Execute on-chain
68
- ckb-firewall execute --proposal <id> --tx-out gov_tx.json
63
+ # 6. Anchor the proposal on-chain as a PBLK cell
64
+ ckb-firewall anchor --proposal <id> --to-address <proposal-cell-owner-address>
65
+ # after the transfer is accepted, record it once if you did not use --submit
66
+ ckb-firewall anchor --proposal <id> --proposal-tx <anchor-tx> --proposal-index <data-output-index>
67
+
68
+ # 7. Execute on-chain after review window and vote threshold
69
+ ckb-firewall execute \
70
+ --proposal <id> \
71
+ --tx-out gov_tx.json
69
72
  ```
70
73
 
71
74
  Proposal state lives in `~/.ckb-firewall/proposals/`. Use `export`/`import` to share between participants — `import` merges rather than overwrites.
72
75
 
76
+ `anchor` creates the on-chain `PBLK` proposal cell and stores its outpoint on the proposal when submitted directly or when you later pass `--proposal-tx` and `--proposal-index`. GOV1 v4 execution spends that cell with a relative timestamp `since` delay, so the review window is enforced by CKB consensus.
77
+
73
78
  ## Full reference
74
79
 
75
80
  [https://ckb-firewall.drreamer.digital/reference/cli/](https://ckb-firewall.drreamer.digital/reference/cli/)
@@ -0,0 +1,23 @@
1
+ export interface AnchorOptions {
2
+ proposal?: string;
3
+ rpcUrl: string;
4
+ registryTx: string;
5
+ registryIndex: string;
6
+ toAddress?: string;
7
+ fromAccount?: string;
8
+ capacity: string;
9
+ feeRate: string;
10
+ submit: boolean;
11
+ privkeyPath?: string;
12
+ outputIndex?: string;
13
+ proposalTx?: string;
14
+ proposalIndex?: string;
15
+ proposalAnchorCodeTx?: string;
16
+ proposalAnchorCodeIndex?: string;
17
+ treasuryCell?: string[];
18
+ treasuryLockDep?: string[];
19
+ txOut: string;
20
+ }
21
+ export declare function anchorDefaults(): Partial<AnchorOptions>;
22
+ export declare function anchorCommand(opts: AnchorOptions): Promise<void>;
23
+ //# sourceMappingURL=anchor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anchor.d.ts","sourceRoot":"","sources":["../../src/commands/anchor.ts"],"names":[],"mappings":"AAiCA,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,cAAc,IAAI,OAAO,CAAC,aAAa,CAAC,CAYvD;AA2DD,wBAAsB,aAAa,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAmVtE"}
@@ -0,0 +1,412 @@
1
+ import { execFileSync } from "node:child_process";
2
+ import { writeFileSync } from "node:fs";
3
+ import chalk from "chalk";
4
+ import logSymbols from "log-symbols";
5
+ import ora from "ora";
6
+ import { getLiveCell, getLiveCellsByLock } from "../lib/rpc.js";
7
+ import { resolveRegistryOutpoint } from "../lib/registry.js";
8
+ import { bytesToHex, extractGovernanceHeaderRaw, governanceTreasuryLockHash, hexToBytes, parseGovernanceHeader, scriptToMoleculeBytes, } from "../lib/blkl.js";
9
+ import { assertProposalCellMatches, assertProposalAnchorTypeMatches, encodeProposalAnchorTypeArgs, encodeProposalCellData, parseRegistryTypeIdValue, proposalCellDataHash, } from "../lib/governance-v4.js";
10
+ import { loadProposal, saveProposal, REVIEW_WINDOW_MS } from "../lib/proposals.js";
11
+ import { TESTNET_CONTRACT_OUTPOINTS, TESTNET_REGISTRY_CELL, TESTNET_RPC_URL, TESTNET_TREASURY_LOCK_DEP } from "../lib/defaults.js";
12
+ import { ckbBlake2b } from "../lib/witness.js";
13
+ import { hexCapacity, occupiedCapacityShannons, parseCapacity } from "../lib/capacity.js";
14
+ import { parseCellDepList } from "../lib/tx-deps.js";
15
+ const DEFAULT_FEE_SHANNONS = 100000n;
16
+ // Minimum occupied capacity for a treasury-lock cell (8 + 32 + 1 + 64 bytes args = 105 CKB; 125 CKB is conservative headroom).
17
+ const MIN_CHANGE_SHANNONS = 125n * 100000000n;
18
+ export function anchorDefaults() {
19
+ return {
20
+ rpcUrl: TESTNET_RPC_URL,
21
+ registryTx: TESTNET_REGISTRY_CELL.txHash,
22
+ registryIndex: String(TESTNET_REGISTRY_CELL.index),
23
+ capacity: "auto",
24
+ feeRate: "1000",
25
+ proposalAnchorCodeTx: TESTNET_CONTRACT_OUTPOINTS.proposalAnchor.txHash,
26
+ proposalAnchorCodeIndex: String(TESTNET_CONTRACT_OUTPOINTS.proposalAnchor.index),
27
+ submit: false,
28
+ txOut: "gov_anchor_tx.json",
29
+ };
30
+ }
31
+ function requireProposalId(id) {
32
+ const trimmed = id?.trim();
33
+ if (!trimmed)
34
+ throw new Error("--proposal is required.");
35
+ return trimmed;
36
+ }
37
+ function parseRegistryIndex(value) {
38
+ if (!/^\d+$/.test(value.trim()))
39
+ throw new Error("--registry-index must be a non-negative integer.");
40
+ return Number.parseInt(value.trim(), 10);
41
+ }
42
+ function parseOutputIndex(value, name) {
43
+ const raw = value?.trim() || "0";
44
+ if (!/^\d+$/.test(raw))
45
+ throw new Error(`${name} must be a non-negative integer.`);
46
+ return Number.parseInt(raw, 10);
47
+ }
48
+ function parseTxHash(value, name) {
49
+ const raw = value?.trim();
50
+ if (!raw)
51
+ return undefined;
52
+ if (!/^0x[0-9a-fA-F]{64}$/.test(raw))
53
+ throw new Error(`${name} must be a 0x-prefixed 32-byte transaction hash.`);
54
+ return raw;
55
+ }
56
+ function parseOutpointList(values, name) {
57
+ return (values ?? []).map((value) => {
58
+ const raw = value.trim();
59
+ const match = /^(0x[0-9a-fA-F]{64})(?::|#)(\d+)$/.exec(raw);
60
+ if (!match) {
61
+ throw new Error(`${name} must be formatted as <tx-hash>:<index>. Got "${value}".`);
62
+ }
63
+ return { txHash: match[1], index: Number.parseInt(match[2], 10) };
64
+ });
65
+ }
66
+ function parseCkbToShannons(value) {
67
+ const raw = value.trim();
68
+ const match = /^(\d+)(?:\.(\d{1,8}))?$/.exec(raw);
69
+ if (!match) {
70
+ throw new Error("--capacity must be a non-negative CKB amount with at most 8 decimal places.");
71
+ }
72
+ const whole = BigInt(match[1]);
73
+ const fraction = (match[2] ?? "").padEnd(8, "0");
74
+ return whole * 100000000n + BigInt(fraction || "0");
75
+ }
76
+ function scriptHash(script) {
77
+ return bytesToHex(ckbBlake2b(scriptToMoleculeBytes(script)));
78
+ }
79
+ function codeScriptFromLiveCell(cell) {
80
+ if (cell.type) {
81
+ return { code_hash: scriptHash(cell.type), hash_type: "type" };
82
+ }
83
+ return { code_hash: bytesToHex(ckbBlake2b(hexToBytes(cell.data))), hash_type: "data1" };
84
+ }
85
+ export async function anchorCommand(opts) {
86
+ let proposalId;
87
+ let registryIndex;
88
+ let outputIndex;
89
+ let providedProposalTx;
90
+ let providedProposalIndex;
91
+ let proposalAnchorCodeIndex;
92
+ let anchorCapacity;
93
+ let treasuryLockDeps;
94
+ try {
95
+ proposalId = requireProposalId(opts.proposal);
96
+ registryIndex = parseRegistryIndex(opts.registryIndex);
97
+ outputIndex = parseOutputIndex(opts.outputIndex, "--output-index");
98
+ providedProposalTx = parseTxHash(opts.proposalTx, "--proposal-tx");
99
+ providedProposalIndex = opts.proposalIndex === undefined ? undefined : parseOutputIndex(opts.proposalIndex, "--proposal-index");
100
+ proposalAnchorCodeIndex = opts.proposalAnchorCodeIndex === undefined
101
+ ? undefined
102
+ : parseOutputIndex(opts.proposalAnchorCodeIndex, "--proposal-anchor-code-index");
103
+ anchorCapacity = opts.capacity === "auto" ? 0n : parseCkbToShannons(opts.capacity);
104
+ treasuryLockDeps = parseCellDepList(opts.treasuryLockDep, "--treasury-lock-dep");
105
+ if ((providedProposalTx && providedProposalIndex === undefined) || (!providedProposalTx && providedProposalIndex !== undefined)) {
106
+ throw new Error("--proposal-tx and --proposal-index must be provided together.");
107
+ }
108
+ }
109
+ catch (err) {
110
+ console.error(logSymbols.error, chalk.red(err instanceof Error ? err.message : String(err)));
111
+ process.exit(1);
112
+ }
113
+ const proposal = loadProposal(proposalId);
114
+ const spinner = ora("Building PBLK proposal cell data").start();
115
+ let proposalDataHex;
116
+ let proposalDataHashHex;
117
+ let treasuryLockHash;
118
+ let treasuryLockScript;
119
+ let registryTypeIdValue;
120
+ try {
121
+ const { txHash, index } = await resolveRegistryOutpoint(opts.rpcUrl, opts.registryTx, registryIndex);
122
+ const registryCell = await getLiveCell(opts.rpcUrl, txHash, index);
123
+ if (!registryCell.type)
124
+ throw new Error("Registry cell has no type script.");
125
+ registryTypeIdValue = parseRegistryTypeIdValue(registryCell.type.args);
126
+ const governanceHeaderRaw = extractGovernanceHeaderRaw(registryCell.data);
127
+ const governanceHeader = governanceHeaderRaw ? parseGovernanceHeader(governanceHeaderRaw) : null;
128
+ treasuryLockHash = governanceTreasuryLockHash(governanceHeader);
129
+ treasuryLockScript = governanceHeader?.treasuryLockScript;
130
+ if (treasuryLockHash && !treasuryLockScript) {
131
+ throw new Error("Registry treasury lock script is missing from the governance header. " +
132
+ "A full treasury lock script (v3 header) is required to safely route change capacity.");
133
+ }
134
+ const proposalData = encodeProposalCellData(proposal, registryTypeIdValue);
135
+ proposalDataHex = bytesToHex(proposalData);
136
+ proposalDataHashHex = bytesToHex(proposalCellDataHash(proposal, registryTypeIdValue));
137
+ proposal.proposalDataHash = proposalDataHashHex;
138
+ proposal.reviewDelayMs = proposal.reviewDelayMs ?? String(REVIEW_WINDOW_MS);
139
+ if (providedProposalTx) {
140
+ const proposalCell = await getLiveCell(opts.rpcUrl, providedProposalTx, providedProposalIndex);
141
+ assertProposalCellMatches(proposal, proposalCell.data, registryTypeIdValue);
142
+ assertProposalAnchorTypeMatches({
143
+ proposalCellType: proposalCell.type,
144
+ registryTypeIdValue,
145
+ governanceHeader,
146
+ reclaimDelayMs: BigInt(proposal.reviewDelayMs),
147
+ });
148
+ // Proposal cells now use governance-lock (not treasury secp256k1), so no lock check here.
149
+ proposal.proposalCellTxHash = providedProposalTx;
150
+ proposal.proposalCellIndex = providedProposalIndex;
151
+ }
152
+ saveProposal(proposal);
153
+ spinner.succeed("PBLK proposal cell data built");
154
+ }
155
+ catch (err) {
156
+ spinner.fail("Could not build PBLK proposal cell data");
157
+ console.error(chalk.red(err instanceof Error ? err.message : String(err)));
158
+ process.exit(1);
159
+ }
160
+ console.log();
161
+ console.log(chalk.bold("Proposal cell"));
162
+ console.log(` Proposal: ${proposal.id}`);
163
+ console.log(` Data hash: ${proposalDataHashHex}`);
164
+ console.log(` Review delay ms: ${proposal.reviewDelayMs}`);
165
+ if (proposal.proposalCellTxHash) {
166
+ console.log(` Stored outpoint: ${proposal.proposalCellTxHash}:${proposal.proposalCellIndex ?? 0}`);
167
+ }
168
+ console.log(` Data: ${chalk.dim(proposalDataHex)}`);
169
+ console.log();
170
+ if (providedProposalTx) {
171
+ console.log(chalk.green(`Stored proposal cell outpoint. Execute can now use: ckb-firewall execute --proposal ${proposal.id}`));
172
+ return;
173
+ }
174
+ if (treasuryLockHash) {
175
+ if (!treasuryLockScript) {
176
+ console.error(logSymbols.error, chalk.red("This registry declares only a treasury lock hash, not a full treasury lock script."));
177
+ console.error(chalk.dim("Typed anchor creation needs BLKL governance header v3 so the CLI can build the treasury-locked output."));
178
+ process.exit(1);
179
+ }
180
+ if (!opts.proposalAnchorCodeTx || proposalAnchorCodeIndex === undefined) {
181
+ console.error(logSymbols.error, chalk.red("--proposal-anchor-code-tx and --proposal-anchor-code-index are required for treasury-backed anchors."));
182
+ process.exit(1);
183
+ }
184
+ const typedSpinner = ora("Building keyless treasury anchor transaction").start();
185
+ let selectedTreasuryCells;
186
+ let totalInput = 0n;
187
+ let anchorType;
188
+ try {
189
+ const codeCell = await getLiveCell(opts.rpcUrl, opts.proposalAnchorCodeTx, proposalAnchorCodeIndex);
190
+ const codeScript = codeScriptFromLiveCell(codeCell);
191
+ anchorType = {
192
+ code_hash: codeScript.code_hash,
193
+ hash_type: codeScript.hash_type,
194
+ args: bytesToHex(encodeProposalAnchorTypeArgs({
195
+ registryTypeIdValue,
196
+ treasuryLockHash,
197
+ reclaimDelayMs: BigInt(proposal.reviewDelayMs),
198
+ })),
199
+ };
200
+ const minAnchorCapacity = occupiedCapacityShannons({
201
+ lock: treasuryLockScript,
202
+ type: anchorType,
203
+ data: proposalDataHex,
204
+ });
205
+ if (opts.capacity === "auto") {
206
+ anchorCapacity = minAnchorCapacity;
207
+ }
208
+ else if (anchorCapacity < minAnchorCapacity) {
209
+ throw new Error(`--capacity ${opts.capacity} CKB is too small for this typed anchor. ` +
210
+ `Need at least ${minAnchorCapacity} shannons (${minAnchorCapacity / 100000000n} CKB).`);
211
+ }
212
+ // Use treasury-lock cells as inputs — no private key needed to spend them.
213
+ // The treasury-lock script validates the TX structure (anchor output + capacity return).
214
+ const rawOutpoints = parseOutpointList(opts.treasuryCell, "--treasury-cell");
215
+ const explicitOutpoints = Array.from(new Map(rawOutpoints.map((op) => [`${op.txHash}:${op.index}`, op])).values());
216
+ selectedTreasuryCells = explicitOutpoints.length
217
+ ? await Promise.all(explicitOutpoints.map((op) => getLiveCell(opts.rpcUrl, op.txHash, op.index)))
218
+ : [];
219
+ for (const cell of selectedTreasuryCells) {
220
+ if (cell.type)
221
+ throw new Error(`Treasury cell ${cell.txHash}:${cell.index} has a type script; use plain treasury cells.`);
222
+ if (cell.data !== "0x")
223
+ throw new Error(`Treasury cell ${cell.txHash}:${cell.index} has data; use empty treasury cells.`);
224
+ totalInput += parseCapacity(cell.capacity);
225
+ }
226
+ if (!explicitOutpoints.length) {
227
+ // Auto-discover treasury-lock cells from chain.
228
+ const candidates = await getLiveCellsByLock(opts.rpcUrl, treasuryLockScript, 100);
229
+ for (const cell of candidates) {
230
+ if (cell.type || cell.data !== "0x")
231
+ continue;
232
+ selectedTreasuryCells.push(cell);
233
+ totalInput += parseCapacity(cell.capacity);
234
+ if (totalInput >= anchorCapacity + DEFAULT_FEE_SHANNONS)
235
+ break;
236
+ }
237
+ }
238
+ if (totalInput < anchorCapacity + DEFAULT_FEE_SHANNONS) {
239
+ throw new Error(`Treasury pool has ${totalInput / 100000000n} CKB but anchor needs ` +
240
+ `${(anchorCapacity + DEFAULT_FEE_SHANNONS) / 100000000n} CKB. ` +
241
+ "Donate CKB to the treasury: ckb-firewall donate");
242
+ }
243
+ typedSpinner.succeed("Keyless treasury anchor transaction built");
244
+ }
245
+ catch (err) {
246
+ typedSpinner.fail("Could not build anchor transaction");
247
+ console.error(chalk.red(err instanceof Error ? err.message : String(err)));
248
+ process.exit(1);
249
+ }
250
+ // Dust change below the minimum cell capacity is absorbed into the fee rather than
251
+ // creating a sub-minimum output that CKB consensus would reject.
252
+ const rawChange = totalInput - anchorCapacity - DEFAULT_FEE_SHANNONS;
253
+ const changeCapacity = rawChange >= MIN_CHANGE_SHANNONS ? rawChange : 0n;
254
+ const txJson = {
255
+ transaction: {
256
+ version: "0x0",
257
+ cell_deps: [
258
+ // treasury-lock code cell dep (validates the TX structure, no signature needed)
259
+ {
260
+ out_point: { tx_hash: TESTNET_TREASURY_LOCK_DEP.txHash, index: `0x${TESTNET_TREASURY_LOCK_DEP.index.toString(16)}` },
261
+ dep_type: "code",
262
+ },
263
+ ...treasuryLockDeps,
264
+ {
265
+ out_point: {
266
+ tx_hash: opts.proposalAnchorCodeTx,
267
+ index: `0x${proposalAnchorCodeIndex.toString(16)}`,
268
+ },
269
+ dep_type: "code",
270
+ },
271
+ // governance-lock code cell dep (needed for proposal cell output lock validation at creation)
272
+ {
273
+ out_point: {
274
+ tx_hash: TESTNET_CONTRACT_OUTPOINTS.governanceLock.txHash,
275
+ index: `0x${TESTNET_CONTRACT_OUTPOINTS.governanceLock.index.toString(16)}`,
276
+ },
277
+ dep_type: "code",
278
+ },
279
+ ],
280
+ header_deps: [],
281
+ inputs: selectedTreasuryCells.map((cell) => ({
282
+ since: "0x0",
283
+ previous_output: { tx_hash: cell.txHash, index: `0x${cell.index.toString(16)}` },
284
+ })),
285
+ outputs: [
286
+ { capacity: hexCapacity(anchorCapacity), lock: treasuryLockScript, type: anchorType },
287
+ ...(changeCapacity > 0n
288
+ ? [{ capacity: hexCapacity(changeCapacity), lock: treasuryLockScript, type: null }]
289
+ : []),
290
+ ],
291
+ outputs_data: [
292
+ proposalDataHex,
293
+ ...(changeCapacity > 0n ? ["0x"] : []),
294
+ ],
295
+ // No signatures needed — treasury-lock validates TX structure, not a key.
296
+ witnesses: selectedTreasuryCells.map(() => "0x"),
297
+ },
298
+ multisig_configs: {},
299
+ signatures: {},
300
+ };
301
+ writeFileSync(opts.txOut, JSON.stringify(txJson, null, 2) + "\n");
302
+ proposal.proposalCellIndex = 0;
303
+ saveProposal(proposal);
304
+ console.log();
305
+ console.log(logSymbols.success, chalk.green(`Typed proposal-anchor transaction written to ${opts.txOut}`));
306
+ console.log(` Proposal: ${proposal.id}`);
307
+ console.log(` Anchor output: output #0`);
308
+ console.log(` Anchor capacity:${anchorCapacity} shannons`);
309
+ console.log(` Change: ${changeCapacity} shannons`);
310
+ console.log();
311
+ if (!opts.submit) {
312
+ console.log("Submit keylessly — no signing required:");
313
+ console.log(chalk.dim(` ckb-cli tx send --tx-file ${opts.txOut} --skip-check\n` +
314
+ ` ckb-firewall anchor --proposal ${proposal.id} --proposal-tx <tx-hash> --proposal-index 0`));
315
+ console.log();
316
+ console.log(chalk.dim("Or pass --submit to send automatically."));
317
+ return;
318
+ }
319
+ // No signing step — treasury-lock is validated by script logic, not a key.
320
+ const submitSpinner = ora("Submitting keyless anchor transaction").start();
321
+ try {
322
+ const output = execFileSync("ckb-cli", [
323
+ "--url", opts.rpcUrl,
324
+ "tx", "send",
325
+ "--tx-file", opts.txOut,
326
+ "--skip-check",
327
+ ], { encoding: "utf8" });
328
+ submitSpinner.succeed("Submitted");
329
+ const txHash = output.trim().match(/0x[a-fA-F0-9]{64}/)?.[0];
330
+ if (txHash) {
331
+ proposal.proposalCellTxHash = txHash;
332
+ proposal.proposalCellIndex = 0;
333
+ saveProposal(proposal);
334
+ console.log();
335
+ console.log(logSymbols.success, chalk.green(`Proposal anchored: ${txHash}:0`));
336
+ console.log(chalk.dim(` Ready to execute after the review window: ckb-firewall execute --proposal ${proposal.id}`));
337
+ }
338
+ else {
339
+ console.log(chalk.yellow("Submitted — tx hash not parsed from output."));
340
+ console.log(chalk.dim(output.trim()));
341
+ }
342
+ }
343
+ catch (err) {
344
+ submitSpinner.fail("Submission failed");
345
+ console.error(chalk.red(err instanceof Error ? err.message : String(err)));
346
+ process.exit(1);
347
+ }
348
+ return;
349
+ }
350
+ if (!opts.submit) {
351
+ if (!opts.toAddress) {
352
+ console.log(chalk.yellow("Pass --to-address to print a ready ckb-cli wallet transfer command."));
353
+ return;
354
+ }
355
+ const cmd = [
356
+ "ckb-cli",
357
+ "--url", opts.rpcUrl,
358
+ "wallet", "transfer",
359
+ "--to-address", opts.toAddress,
360
+ "--capacity", opts.capacity,
361
+ "--to-data", proposalDataHex,
362
+ "--fee-rate", opts.feeRate,
363
+ "--output-format", "json",
364
+ ...(opts.fromAccount ? ["--from-account", opts.fromAccount] : []),
365
+ ...(opts.privkeyPath ? ["--privkey-path", opts.privkeyPath] : []),
366
+ ];
367
+ console.log("Create the proposal cell with:");
368
+ console.log(chalk.dim(` ${cmd.map((p) => (/\s/.test(p) ? JSON.stringify(p) : p)).join(" ")}`));
369
+ console.log(chalk.dim(` After it is accepted: ckb-firewall anchor --proposal ${proposal.id} --proposal-tx <tx-hash> --proposal-index ${outputIndex}`));
370
+ return;
371
+ }
372
+ if (!opts.toAddress) {
373
+ console.error(logSymbols.error, chalk.red("--to-address is required with --submit."));
374
+ process.exit(1);
375
+ }
376
+ const args = [
377
+ "--url", opts.rpcUrl,
378
+ "wallet", "transfer",
379
+ "--to-address", opts.toAddress,
380
+ "--capacity", opts.capacity,
381
+ "--to-data", proposalDataHex,
382
+ "--fee-rate", opts.feeRate,
383
+ "--output-format", "json",
384
+ ];
385
+ if (opts.fromAccount)
386
+ args.push("--from-account", opts.fromAccount);
387
+ if (opts.privkeyPath)
388
+ args.push("--privkey-path", opts.privkeyPath);
389
+ const submitSpinner = ora("Submitting proposal cell transfer with ckb-cli").start();
390
+ try {
391
+ const output = execFileSync("ckb-cli", args, { encoding: "utf8", stdio: ["inherit", "pipe", "inherit"] });
392
+ submitSpinner.succeed("Proposal cell transfer submitted");
393
+ const txHash = output.match(/0x[a-fA-F0-9]{64}/)?.[0];
394
+ if (txHash) {
395
+ proposal.proposalCellTxHash = txHash;
396
+ proposal.proposalCellIndex = outputIndex;
397
+ saveProposal(proposal);
398
+ console.log(` Tx hash: ${txHash}`);
399
+ console.log(` Stored proposal cell: ${txHash}:${outputIndex}`);
400
+ console.log(chalk.dim(` Execute with: ckb-firewall execute --proposal ${proposal.id}`));
401
+ }
402
+ else {
403
+ console.log(output);
404
+ }
405
+ }
406
+ catch (err) {
407
+ submitSpinner.fail("ckb-cli wallet transfer failed");
408
+ console.error(chalk.red(err instanceof Error ? err.message : String(err)));
409
+ process.exit(1);
410
+ }
411
+ }
412
+ //# sourceMappingURL=anchor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anchor.js","sourceRoot":"","sources":["../../src/commands/anchor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare function configCommand(opts: {
2
+ proposer?: string;
3
+ }): Promise<void>;
4
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAIA,wBAAsB,aAAa,CAAC,IAAI,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA4D9E"}
@@ -0,0 +1,59 @@
1
+ import chalk from "chalk";
2
+ import inquirer from "inquirer";
3
+ import { getConfigPath, loadConfig, saveConfig } from "../lib/config.js";
4
+ export async function configCommand(opts) {
5
+ try {
6
+ const config = loadConfig();
7
+ if (opts.proposer !== undefined) {
8
+ const name = opts.proposer.trim();
9
+ if (!name) {
10
+ process.stderr.write(chalk.red("Error: proposer name cannot be empty\n"));
11
+ process.exit(1);
12
+ }
13
+ config.proposerName = name;
14
+ saveConfig(config);
15
+ process.stdout.write(chalk.green(`✓ Default proposer name saved: ${chalk.bold(name)}\n`));
16
+ return;
17
+ }
18
+ // No flag — show current config and offer interactive edit.
19
+ process.stdout.write(`Config: ${chalk.dim(getConfigPath())}\n\n`);
20
+ process.stdout.write(` proposer ${config.proposerName ? chalk.cyan(config.proposerName) : chalk.dim("(not set)")}\n\n`);
21
+ const { action } = await inquirer.prompt([
22
+ {
23
+ type: "list",
24
+ name: "action",
25
+ message: "What would you like to do?",
26
+ choices: [
27
+ { name: "Set proposer name", value: "set" },
28
+ { name: "Clear proposer name", value: "clear" },
29
+ { name: "Exit", value: "exit" },
30
+ ],
31
+ },
32
+ ]);
33
+ if (action === "exit")
34
+ return;
35
+ if (action === "clear") {
36
+ delete config.proposerName;
37
+ saveConfig(config);
38
+ process.stdout.write(chalk.green("✓ Proposer name cleared\n"));
39
+ return;
40
+ }
41
+ const { name } = await inquirer.prompt([
42
+ {
43
+ type: "input",
44
+ name: "name",
45
+ message: "Proposer name / handle:",
46
+ ...(config.proposerName ? { default: config.proposerName } : {}),
47
+ validate: (v) => v.trim().length > 0 || "Required.",
48
+ },
49
+ ]);
50
+ config.proposerName = name.trim();
51
+ saveConfig(config);
52
+ process.stdout.write(chalk.green(`✓ Default proposer name saved: ${chalk.bold(config.proposerName)}\n`));
53
+ }
54
+ catch (err) {
55
+ process.stderr.write(chalk.red(`Error: ${err instanceof Error ? err.message : String(err)}\n`));
56
+ process.exit(1);
57
+ }
58
+ }
59
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,20 @@
1
1
  export interface ExecuteOptions {
2
2
  proposal?: string;
3
+ ready?: boolean;
3
4
  rpcUrl: string;
4
5
  registryTx: string;
5
6
  registryIndex: string;
7
+ proposalTx?: string;
8
+ proposalIndex?: string;
9
+ proposalAnchorCodeTx?: string;
10
+ proposalAnchorCodeIndex?: string;
11
+ treasuryCell?: string[];
12
+ treasuryLockDep?: string[];
6
13
  txOut: string;
7
14
  sign: boolean;
8
15
  fromAccount: string;
16
+ privkeyPath?: string;
9
17
  }
10
- export declare function executeCommand(opts: ExecuteOptions): Promise<void>;
11
18
  export declare function executeDefaults(): Partial<ExecuteOptions>;
19
+ export declare function executeCommand(opts: ExecuteOptions): Promise<void>;
12
20
  //# sourceMappingURL=execute.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../src/commands/execute.ts"],"names":[],"mappings":"AAiDA,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,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAuXxE;AAED,wBAAgB,eAAe,IAAI,OAAO,CAAC,cAAc,CAAC,CASzD"}
1
+ {"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../src/commands/execute.ts"],"names":[],"mappings":"AAkDA,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,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,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,eAAe,IAAI,OAAO,CAAC,cAAc,CAAC,CAWzD;AAoBD,wBAAsB,cAAc,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA4fxE"}