@ckb-firewall/cli 0.3.1 → 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 (102) 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/gui.d.ts +6 -0
  15. package/dist/commands/gui.d.ts.map +1 -0
  16. package/dist/commands/gui.js +112 -0
  17. package/dist/commands/gui.js.map +1 -0
  18. package/dist/commands/import.d.ts.map +1 -1
  19. package/dist/commands/import.js +15 -48
  20. package/dist/commands/import.js.map +1 -1
  21. package/dist/commands/inspect.d.ts.map +1 -1
  22. package/dist/commands/inspect.js +32 -0
  23. package/dist/commands/inspect.js.map +1 -1
  24. package/dist/commands/proposals.d.ts.map +1 -1
  25. package/dist/commands/proposals.js +2 -4
  26. package/dist/commands/proposals.js.map +1 -1
  27. package/dist/commands/propose.d.ts +5 -0
  28. package/dist/commands/propose.d.ts.map +1 -1
  29. package/dist/commands/propose.js +91 -7
  30. package/dist/commands/propose.js.map +1 -1
  31. package/dist/commands/reclaim.d.ts +18 -0
  32. package/dist/commands/reclaim.d.ts.map +1 -0
  33. package/dist/commands/reclaim.js +214 -0
  34. package/dist/commands/reclaim.js.map +1 -0
  35. package/dist/commands/sign.d.ts.map +1 -1
  36. package/dist/commands/sign.js +40 -94
  37. package/dist/commands/sign.js.map +1 -1
  38. package/dist/commands/vote.d.ts +2 -0
  39. package/dist/commands/vote.d.ts.map +1 -1
  40. package/dist/commands/vote.js +31 -25
  41. package/dist/commands/vote.js.map +1 -1
  42. package/dist/index.js +101 -16
  43. package/dist/index.js.map +1 -1
  44. package/dist/lib/Transaction Firewall.html +201 -0
  45. package/dist/lib/blkl.d.ts +17 -2
  46. package/dist/lib/blkl.d.ts.map +1 -1
  47. package/dist/lib/blkl.js +133 -17
  48. package/dist/lib/blkl.js.map +1 -1
  49. package/dist/lib/capacity.d.ts +12 -0
  50. package/dist/lib/capacity.d.ts.map +1 -0
  51. package/dist/lib/capacity.js +18 -0
  52. package/dist/lib/capacity.js.map +1 -0
  53. package/dist/lib/config.d.ts +7 -0
  54. package/dist/lib/config.d.ts.map +1 -0
  55. package/dist/lib/config.js +35 -0
  56. package/dist/lib/config.js.map +1 -0
  57. package/dist/lib/defaults.d.ts +19 -0
  58. package/dist/lib/defaults.d.ts.map +1 -1
  59. package/dist/lib/defaults.js +34 -7
  60. package/dist/lib/defaults.js.map +1 -1
  61. package/dist/lib/governance-v4.d.ts +39 -0
  62. package/dist/lib/governance-v4.d.ts.map +1 -0
  63. package/dist/lib/governance-v4.js +194 -0
  64. package/dist/lib/governance-v4.js.map +1 -0
  65. package/dist/lib/gui-bundle.html +4266 -0
  66. package/dist/lib/gui-server.d.ts +12 -0
  67. package/dist/lib/gui-server.d.ts.map +1 -0
  68. package/dist/lib/gui-server.js +1634 -0
  69. package/dist/lib/gui-server.js.map +1 -0
  70. package/dist/lib/hints.d.ts +1 -1
  71. package/dist/lib/hints.d.ts.map +1 -1
  72. package/dist/lib/hints.js +3 -9
  73. package/dist/lib/hints.js.map +1 -1
  74. package/dist/lib/portless.d.ts +41 -0
  75. package/dist/lib/portless.d.ts.map +1 -0
  76. package/dist/lib/portless.js +194 -0
  77. package/dist/lib/portless.js.map +1 -0
  78. package/dist/lib/proposals.d.ts +17 -9
  79. package/dist/lib/proposals.d.ts.map +1 -1
  80. package/dist/lib/proposals.js +4 -26
  81. package/dist/lib/proposals.js.map +1 -1
  82. package/dist/lib/rpc.d.ts +5 -0
  83. package/dist/lib/rpc.d.ts.map +1 -1
  84. package/dist/lib/rpc.js +21 -0
  85. package/dist/lib/rpc.js.map +1 -1
  86. package/dist/lib/treasury-status.d.ts +28 -0
  87. package/dist/lib/treasury-status.d.ts.map +1 -0
  88. package/dist/lib/treasury-status.js +70 -0
  89. package/dist/lib/treasury-status.js.map +1 -0
  90. package/dist/lib/treasury.d.ts +15 -0
  91. package/dist/lib/treasury.d.ts.map +1 -0
  92. package/dist/lib/treasury.js +62 -0
  93. package/dist/lib/treasury.js.map +1 -0
  94. package/dist/lib/tx-deps.d.ts +9 -0
  95. package/dist/lib/tx-deps.d.ts.map +1 -0
  96. package/dist/lib/tx-deps.js +15 -0
  97. package/dist/lib/tx-deps.js.map +1 -0
  98. package/dist/lib/witness.d.ts +13 -11
  99. package/dist/lib/witness.d.ts.map +1 -1
  100. package/dist/lib/witness.js +85 -48
  101. package/dist/lib/witness.js.map +1 -1
  102. package/package.json +2 -2
@@ -0,0 +1,194 @@
1
+ import { parseRegistryPayload } from "@ckb-firewall/sdk";
2
+ import { getLiveCell } from "./rpc.js";
3
+ import { resolveRegistryOutpoint } from "./registry.js";
4
+ import { bytesToHex, encodeGovernanceHeader, encodeRegistryPayload, extractGovernanceHeaderRaw, governanceTreasuryLockHash, hexToBytes, insertSorted, parseGovernanceHeader, removeEntry, scriptToMoleculeBytes, strip0x, } from "./blkl.js";
5
+ import { ckbBlake2b } from "./witness.js";
6
+ import { REVIEW_WINDOW_MS } from "./proposals.js";
7
+ export function parseRegistryTypeIdValue(typeArgs) {
8
+ const raw = hexToBytes(typeArgs);
9
+ if (raw.length !== 66 || raw[0] !== 0x02) {
10
+ throw new Error("Registry type args must be BLKL v2 layout: version(1) + governance code hash(32) + hash type(1) + type id(32).");
11
+ }
12
+ return raw.slice(34, 66);
13
+ }
14
+ export function encodeProposalCellData(proposal, registryTypeIdValue) {
15
+ if (registryTypeIdValue.length !== 32) {
16
+ throw new Error(`registryTypeIdValue must be 32 bytes, got ${registryTypeIdValue.length}`);
17
+ }
18
+ if (proposal.action === "set-treasury") {
19
+ if (!proposal.treasuryLockScript) {
20
+ throw new Error("set-treasury proposals require treasuryLockScript.");
21
+ }
22
+ const treasuryScriptHash = ckbBlake2b(scriptToMoleculeBytes(proposal.treasuryLockScript));
23
+ const evidenceHash = ckbBlake2b(new TextEncoder().encode(proposal.evidence));
24
+ const out = new Uint8Array(4 + 1 + 32 + 1 + 32 + 32);
25
+ let off = 0;
26
+ out[off++] = 0x50;
27
+ out[off++] = 0x42;
28
+ out[off++] = 0x4c;
29
+ out[off++] = 0x4b; // PBLK
30
+ out[off++] = 0x02;
31
+ out.set(registryTypeIdValue, off);
32
+ off += 32;
33
+ out[off++] = 0x03;
34
+ out.set(treasuryScriptHash, off);
35
+ off += 32;
36
+ out.set(evidenceHash, off);
37
+ return out;
38
+ }
39
+ const identifier = hexToBytes(proposal.lockArgs);
40
+ if (identifier.length === 0 || identifier.length > 255) {
41
+ throw new Error(`lockArgs must encode 1..255 bytes, got ${identifier.length}`);
42
+ }
43
+ const expiresAt = BigInt(proposal.expiresAt);
44
+ if (expiresAt < 0n || expiresAt > 0xffffffffffffffffn) {
45
+ throw new Error(`expiresAt must fit in u64, got ${proposal.expiresAt}`);
46
+ }
47
+ const evidenceHash = ckbBlake2b(new TextEncoder().encode(proposal.evidence));
48
+ const out = new Uint8Array(4 + 1 + 32 + 1 + 1 + identifier.length + 8 + 32);
49
+ let off = 0;
50
+ out[off++] = 0x50;
51
+ out[off++] = 0x42;
52
+ out[off++] = 0x4c;
53
+ out[off++] = 0x4b; // PBLK
54
+ out[off++] = 0x01;
55
+ out.set(registryTypeIdValue, off);
56
+ off += 32;
57
+ out[off++] = proposal.action === "add" ? 0x01 : 0x02;
58
+ out[off++] = identifier.length;
59
+ out.set(identifier, off);
60
+ off += identifier.length;
61
+ let exp = expiresAt;
62
+ for (let i = 0; i < 8; i++) {
63
+ out[off++] = Number(exp & 0xffn);
64
+ exp >>= 8n;
65
+ }
66
+ out.set(evidenceHash, off);
67
+ return out;
68
+ }
69
+ export function proposalCellDataHash(proposal, registryTypeIdValue) {
70
+ return ckbBlake2b(encodeProposalCellData(proposal, registryTypeIdValue));
71
+ }
72
+ export function reviewDelayMs(proposal) {
73
+ return BigInt(proposal.reviewDelayMs ?? String(REVIEW_WINDOW_MS));
74
+ }
75
+ export async function loadRegistryStateForProposal(rpcUrl, registryTx, registryIndex, proposal) {
76
+ const { txHash, index } = await resolveRegistryOutpoint(rpcUrl, registryTx, registryIndex);
77
+ const cell = await getLiveCell(rpcUrl, txHash, index);
78
+ if (!cell.type) {
79
+ throw new Error("Registry cell has no type script.");
80
+ }
81
+ const currentPayload = parseRegistryPayload(cell.data);
82
+ const governanceHeaderRaw = extractGovernanceHeaderRaw(cell.data);
83
+ if (!governanceHeaderRaw) {
84
+ throw new Error("Registry cell does not contain a BLKL v2 governance header.");
85
+ }
86
+ const governanceHeader = parseGovernanceHeader(governanceHeaderRaw);
87
+ const registryTypeIdValue = parseRegistryTypeIdValue(cell.type.args);
88
+ let newEntries;
89
+ let newGovernanceHeaderRaw = governanceHeaderRaw;
90
+ if (proposal.action === "add") {
91
+ const alreadyPresent = currentPayload.entries.some((e) => strip0x(e.identifier).toLowerCase() === strip0x(proposal.lockArgs).toLowerCase());
92
+ if (alreadyPresent) {
93
+ throw new Error(`${proposal.lockArgs} is already in the registry.`);
94
+ }
95
+ newEntries = insertSorted(currentPayload.entries, {
96
+ identifier: proposal.lockArgs,
97
+ expiresAt: BigInt(proposal.expiresAt),
98
+ });
99
+ }
100
+ else {
101
+ if (proposal.action === "set-treasury") {
102
+ if (!governanceHeader) {
103
+ throw new Error("set-treasury requires a parseable governance header.");
104
+ }
105
+ if (!proposal.treasuryLockScript) {
106
+ throw new Error("set-treasury proposals require treasuryLockScript.");
107
+ }
108
+ newEntries = currentPayload.entries;
109
+ newGovernanceHeaderRaw = encodeGovernanceHeader({
110
+ threshold: governanceHeader.threshold,
111
+ validatorCount: governanceHeader.validatorCount,
112
+ validatorMerkleRoot: governanceHeader.validatorMerkleRoot,
113
+ treasuryLockScript: proposal.treasuryLockScript,
114
+ });
115
+ }
116
+ else {
117
+ newEntries = removeEntry(currentPayload.entries, proposal.lockArgs);
118
+ if (newEntries.length === currentPayload.entries.length) {
119
+ throw new Error(`${proposal.lockArgs} is not in the registry.`);
120
+ }
121
+ }
122
+ }
123
+ const oldBlkl = hexToBytes(cell.data);
124
+ const newBlkl = encodeRegistryPayload({ version: currentPayload.version, entries: newEntries }, newGovernanceHeaderRaw);
125
+ return {
126
+ cell,
127
+ currentPayload,
128
+ governanceHeaderRaw,
129
+ governanceHeader,
130
+ oldBlkl,
131
+ newBlkl,
132
+ newEntryCount: newEntries.length,
133
+ oldRoot: ckbBlake2b(oldBlkl),
134
+ newRoot: ckbBlake2b(newBlkl),
135
+ registryTypeIdValue,
136
+ };
137
+ }
138
+ export function proposalV4Fields(proposal, registryTypeIdValue) {
139
+ const proposalData = encodeProposalCellData(proposal, registryTypeIdValue);
140
+ return {
141
+ proposalData,
142
+ proposalDataHash: ckbBlake2b(proposalData),
143
+ reviewDelayMs: reviewDelayMs(proposal),
144
+ };
145
+ }
146
+ export function assertProposalCellMatches(proposal, proposalCellData, registryTypeIdValue) {
147
+ const expected = encodeProposalCellData(proposal, registryTypeIdValue);
148
+ const actual = hexToBytes(proposalCellData);
149
+ if (bytesToHex(actual) !== bytesToHex(expected)) {
150
+ throw new Error("Proposal cell data does not match this proposal. " +
151
+ `Expected ${bytesToHex(expected)}, got ${bytesToHex(actual)}.`);
152
+ }
153
+ return ckbBlake2b(actual);
154
+ }
155
+ export function encodeProposalAnchorTypeArgs(params) {
156
+ if (params.registryTypeIdValue.length !== 32) {
157
+ throw new Error(`registryTypeIdValue must be 32 bytes, got ${params.registryTypeIdValue.length}`);
158
+ }
159
+ if (params.treasuryLockHash.length !== 32) {
160
+ throw new Error(`treasuryLockHash must be 32 bytes, got ${params.treasuryLockHash.length}`);
161
+ }
162
+ if (params.reclaimDelayMs < 0n || params.reclaimDelayMs > 0xffffffffffffffffn) {
163
+ throw new Error(`reclaimDelayMs must fit in u64, got ${params.reclaimDelayMs}`);
164
+ }
165
+ const out = new Uint8Array(73);
166
+ out[0] = 0x01;
167
+ out.set(params.registryTypeIdValue, 1);
168
+ out.set(params.treasuryLockHash, 33);
169
+ let delay = params.reclaimDelayMs;
170
+ for (let i = 0; i < 8; i++) {
171
+ out[65 + i] = Number(delay & 0xffn);
172
+ delay >>= 8n;
173
+ }
174
+ return out;
175
+ }
176
+ export function assertProposalAnchorTypeMatches(params) {
177
+ const treasuryLockHash = governanceTreasuryLockHash(params.governanceHeader);
178
+ if (!treasuryLockHash)
179
+ return;
180
+ if (!params.proposalCellType) {
181
+ throw new Error("Treasury-funded proposal anchors must carry the proposal-anchor type script.");
182
+ }
183
+ const expectedArgs = encodeProposalAnchorTypeArgs({
184
+ registryTypeIdValue: params.registryTypeIdValue,
185
+ treasuryLockHash,
186
+ reclaimDelayMs: params.reclaimDelayMs,
187
+ });
188
+ const actualArgs = hexToBytes(params.proposalCellType.args);
189
+ if (bytesToHex(actualArgs) !== bytesToHex(expectedArgs)) {
190
+ throw new Error("Proposal-anchor type args do not match this registry treasury and reclaim delay. " +
191
+ `Expected ${bytesToHex(expectedArgs)}, got ${params.proposalCellType.args}.`);
192
+ }
193
+ }
194
+ //# sourceMappingURL=governance-v4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"governance-v4.js","sourceRoot":"","sources":["../../src/lib/governance-v4.ts"],"names":[],"mappings":"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"}