@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,62 @@
1
+ import { execFileSync } from "node:child_process";
2
+ export function loadTreasuryConfig(env = process.env) {
3
+ const address = env.CKB_FIREWALL_TREASURY_ADDRESS?.trim();
4
+ if (!address)
5
+ return null;
6
+ const outputIndexRaw = env.CKB_FIREWALL_TREASURY_OUTPUT_INDEX?.trim() || "0";
7
+ if (!/^\d+$/.test(outputIndexRaw)) {
8
+ throw new Error("CKB_FIREWALL_TREASURY_OUTPUT_INDEX must be a non-negative integer.");
9
+ }
10
+ const config = {
11
+ address,
12
+ capacity: env.CKB_FIREWALL_TREASURY_CAPACITY?.trim() || "62",
13
+ feeRate: env.CKB_FIREWALL_TREASURY_FEE_RATE?.trim() || "1000",
14
+ outputIndex: Number.parseInt(outputIndexRaw, 10),
15
+ autoAnchor: /^(1|true|yes)$/i.test(env.CKB_FIREWALL_TREASURY_AUTO_ANCHOR?.trim() || ""),
16
+ };
17
+ const fromAccount = env.CKB_FIREWALL_TREASURY_FROM_ACCOUNT?.trim();
18
+ const privkeyPath = env.CKB_FIREWALL_TREASURY_PRIVKEY_PATH?.trim();
19
+ if (fromAccount)
20
+ config.fromAccount = fromAccount;
21
+ if (privkeyPath)
22
+ config.privkeyPath = privkeyPath;
23
+ return config;
24
+ }
25
+ export function assertTreasuryCanAutoFund(config) {
26
+ if (!config.privkeyPath) {
27
+ throw new Error("Treasury auto-funding requires CKB_FIREWALL_TREASURY_PRIVKEY_PATH so the backend can submit without a browser password prompt.");
28
+ }
29
+ }
30
+ export function buildTreasuryTransferArgs(config, rpcUrl, proposalDataHex) {
31
+ const args = [
32
+ "--url", rpcUrl,
33
+ "wallet", "transfer",
34
+ "--to-address", config.address,
35
+ "--capacity", config.capacity,
36
+ "--to-data", proposalDataHex,
37
+ "--fee-rate", config.feeRate,
38
+ "--output-format", "json",
39
+ ];
40
+ if (config.fromAccount)
41
+ args.push("--from-account", config.fromAccount);
42
+ if (config.privkeyPath)
43
+ args.push("--privkey-path", config.privkeyPath);
44
+ return args;
45
+ }
46
+ export function formatCommand(args) {
47
+ return ["ckb-cli", ...args].map((p) => (/\s/.test(p) ? JSON.stringify(p) : p)).join(" ");
48
+ }
49
+ export function submitTreasuryTransfer(config, rpcUrl, proposalDataHex) {
50
+ assertTreasuryCanAutoFund(config);
51
+ const output = execFileSync("ckb-cli", buildTreasuryTransferArgs(config, rpcUrl, proposalDataHex), {
52
+ encoding: "utf8",
53
+ stdio: ["ignore", "pipe", "pipe"],
54
+ timeout: 120_000,
55
+ });
56
+ const txHash = output.match(/0x[a-fA-F0-9]{64}/)?.[0];
57
+ if (!txHash) {
58
+ throw new Error(`ckb-cli did not return a transaction hash: ${output.trim()}`);
59
+ }
60
+ return txHash;
61
+ }
62
+ //# sourceMappingURL=treasury.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"treasury.js","sourceRoot":"","sources":["../../src/lib/treasury.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export interface CellDepJson {
2
+ out_point: {
3
+ tx_hash: string;
4
+ index: string;
5
+ };
6
+ dep_type: "code" | "dep_group";
7
+ }
8
+ export declare function parseCellDepList(values: string[] | undefined, name: string): CellDepJson[];
9
+ //# sourceMappingURL=tx-deps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tx-deps.d.ts","sourceRoot":"","sources":["../../src/lib/tx-deps.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9C,QAAQ,EAAE,MAAM,GAAG,WAAW,CAAC;CAChC;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,WAAW,EAAE,CAa1F"}
@@ -0,0 +1,15 @@
1
+ export function parseCellDepList(values, name) {
2
+ return (values ?? []).map((value) => {
3
+ const raw = value.trim();
4
+ const match = /^(0x[0-9a-fA-F]{64})(?::|#)(\d+)(?::(code|dep_group))?$/.exec(raw);
5
+ if (!match) {
6
+ throw new Error(`${name} must be formatted as <tx-hash>:<index>[:code|dep_group]. Got "${value}".`);
7
+ }
8
+ const index = Number.parseInt(match[2], 10);
9
+ return {
10
+ out_point: { tx_hash: match[1], index: `0x${index.toString(16)}` },
11
+ dep_type: (match[3] ?? "code"),
12
+ };
13
+ });
14
+ }
15
+ //# sourceMappingURL=tx-deps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tx-deps.js","sourceRoot":"","sources":["../../src/lib/tx-deps.ts"],"names":[],"mappings":"AAKA,MAAM,UAAU,gBAAgB,CAAC,MAA4B,EAAE,IAAY;IACzE,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAClC,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,yDAAyD,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClF,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,kEAAkE,KAAK,IAAI,CAAC,CAAC;QACtG,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAE,EAAE,EAAE,CAAC,CAAC;QAC7C,OAAO;YACL,SAAS,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAE,EAAE,KAAK,EAAE,KAAK,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE;YACnE,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,MAAM,CAAyB;SACvD,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -5,21 +5,23 @@ export interface Gov1BindingParams {
5
5
  oldRoot: Uint8Array;
6
6
  newRoot: Uint8Array;
7
7
  }
8
- export declare function buildGov1WitnessV3(params: Gov1BindingParams & {
9
- reviewWindowEndMs: bigint;
8
+ export declare function buildGov1WitnessV4(params: Gov1BindingParams & {
9
+ proposalDataHash: Uint8Array;
10
+ reviewDelayMs: bigint;
10
11
  }): Uint8Array;
11
- export declare function encodeAbsoluteTimestampSince(timestampMs: bigint): string;
12
- export declare function buildGovernanceSigWitness(signers: Array<{
13
- index: number;
14
- sig: Uint8Array;
15
- }>): Uint8Array;
12
+ export declare function encodeRelativeTimestampSince(durationMs: bigint): string;
13
+ export interface ValidatorVoteWitnessEntry {
14
+ pubkey: Uint8Array;
15
+ vote: "yes" | "no" | "abstain";
16
+ timestamp: string;
17
+ signature: Uint8Array;
18
+ merkleLeafIndex: number;
19
+ merkleProof: Uint8Array[];
20
+ }
21
+ export declare function buildValidatorVoteWitness(votes: ValidatorVoteWitnessEntry[]): Uint8Array;
16
22
  export declare function buildWitnessArgs(params: {
17
23
  lock?: Uint8Array;
18
24
  inputType?: Uint8Array;
19
25
  outputType?: Uint8Array;
20
26
  }): Uint8Array;
21
- export declare function placeholderSigners(count?: 3 | 4 | 5): Array<{
22
- index: number;
23
- sig: Uint8Array;
24
- }>;
25
27
  //# sourceMappingURL=witness.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"witness.d.ts","sourceRoot":"","sources":["../../src/lib/witness.ts"],"names":[],"mappings":"AAIA,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,CAEvD;AAED,MAAM,WAAW,iBAAiB;IAChC,cAAc,EAAE,UAAU,CAAC;IAC3B,cAAc,EAAE,UAAU,CAAC;IAC3B,OAAO,EAAE,UAAU,CAAC;IACpB,OAAO,EAAE,UAAU,CAAC;CACrB;AAKD,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,iBAAiB,GAAG;IAAE,iBAAiB,EAAE,MAAM,CAAA;CAAE,GACxD,UAAU,CAyBZ;AAID,wBAAgB,4BAA4B,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAKxE;AAID,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,UAAU,CAAA;CAAE,CAAC,GAAG,UAAU,CAiBxG;AAmBD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE;IACvC,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,SAAS,CAAC,EAAE,UAAU,CAAC;IACvB,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB,GAAG,UAAU,CAqBb;AAKD,wBAAgB,kBAAkB,CAAC,KAAK,GAAE,CAAC,GAAG,CAAC,GAAG,CAAK,GAAG,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,UAAU,CAAA;CAAE,CAAC,CAUlG"}
1
+ {"version":3,"file":"witness.d.ts","sourceRoot":"","sources":["../../src/lib/witness.ts"],"names":[],"mappings":"AAIA,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,CAEvD;AAED,MAAM,WAAW,iBAAiB;IAChC,cAAc,EAAE,UAAU,CAAC;IAC3B,cAAc,EAAE,UAAU,CAAC;IAC3B,OAAO,EAAE,UAAU,CAAC;IACpB,OAAO,EAAE,UAAU,CAAC;CACrB;AAKD,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,iBAAiB,GAAG;IAAE,gBAAgB,EAAE,UAAU,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,GAClF,UAAU,CA2BZ;AAMD,wBAAgB,4BAA4B,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAOvE;AAED,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,UAAU,CAAC;IACnB,IAAI,EAAE,KAAK,GAAG,IAAI,GAAG,SAAS,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,UAAU,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,UAAU,EAAE,CAAC;CAC3B;AA2BD,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,yBAAyB,EAAE,GAAG,UAAU,CAsCxF;AAYD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE;IACvC,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,SAAS,CAAC,EAAE,UAAU,CAAC;IACvB,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB,GAAG,UAAU,CAqBb"}
@@ -3,27 +3,28 @@ const CKB_PERSONALIZATION = new TextEncoder().encode("ckb-default-hash");
3
3
  export function ckbBlake2b(data) {
4
4
  return blake2b(data, { personalization: CKB_PERSONALIZATION, dkLen: 32 });
5
5
  }
6
- // GOV1 v3141 bytes. governance-lock verifies that the input's `since` field encodes an
7
- // absolute median-time-past timestamp >= reviewWindowEndMs, enforcing the review window at
8
- // consensus level. reviewWindowEndMs is included in the signing preimage to prevent tampering.
9
- export function buildGov1WitnessV3(params) {
6
+ // GOV1 v4173 bytes. governance-lock locates the input whose cell data hashes to
7
+ // proposalDataHash and requires that input's `since` field to encode a relative
8
+ // median-time-past delay >= reviewDelayMs.
9
+ export function buildGov1WitnessV4(params) {
10
10
  for (const [name, val] of [
11
11
  ["proposalIdHash", params.proposalIdHash],
12
12
  ["voteDigestHash", params.voteDigestHash],
13
13
  ["oldRoot", params.oldRoot],
14
14
  ["newRoot", params.newRoot],
15
+ ["proposalDataHash", params.proposalDataHash],
15
16
  ]) {
16
17
  if (val.length !== 32)
17
18
  throw new Error(`${name} must be exactly 32 bytes, got ${val.length}`);
18
19
  }
19
- // 4 magic + 1 version + 32*4 hashes + 8 reviewWindowEndMs = 141 bytes
20
- const buf = new Uint8Array(141);
20
+ // 4 magic + 1 version + 32*5 hashes + 8 reviewDelayMs = 173 bytes
21
+ const buf = new Uint8Array(173);
21
22
  let off = 0;
22
23
  buf[off++] = 0x47;
23
24
  buf[off++] = 0x4f;
24
25
  buf[off++] = 0x56;
25
26
  buf[off++] = 0x31; // GOV1
26
- buf[off++] = 0x03; // version 3
27
+ buf[off++] = 0x04; // version 4
27
28
  buf.set(params.proposalIdHash, off);
28
29
  off += 32;
29
30
  buf.set(params.voteDigestHash, off);
@@ -32,43 +33,40 @@ export function buildGov1WitnessV3(params) {
32
33
  off += 32;
33
34
  buf.set(params.newRoot, off);
34
35
  off += 32;
35
- // reviewWindowEndMs as LE u64
36
- let ms = params.reviewWindowEndMs;
36
+ buf.set(params.proposalDataHash, off);
37
+ off += 32;
38
+ // reviewDelayMs as LE u64
39
+ let ms = params.reviewDelayMs;
37
40
  for (let i = 0; i < 8; i++) {
38
41
  buf[off++] = Number(ms & 0xffn);
39
42
  ms >>= 8n;
40
43
  }
41
44
  return buf;
42
45
  }
43
- // Encodes a Unix timestamp (milliseconds) as a CKB absolute median-time-past `since` value.
44
- // Format: bit62=1 (timestamp metric), bit63=0 (absolute), bits55-0 = timestamp_ms.
45
- export function encodeAbsoluteTimestampSince(timestampMs) {
46
+ // Encodes a duration in milliseconds as a CKB relative median-time-past `since` value.
47
+ // Format: bit63=1 (relative), bit62=1 (timestamp metric), bits55-0 = duration_in_SECONDS.
48
+ // CKB consensus enforces timestamp since values in seconds; the governance-lock contract
49
+ // multiplies the since seconds value by 1000 before comparing to review_delay_ms.
50
+ export function encodeRelativeTimestampSince(durationMs) {
46
51
  const TIMESTAMP_FLAG = 0x4000000000000000n;
52
+ const RELATIVE_FLAG = 0x8000000000000000n;
47
53
  const VALUE_MASK = 0x00ffffffffffffffn;
48
- const since = TIMESTAMP_FLAG | (timestampMs & VALUE_MASK);
54
+ const durationSec = durationMs / 1000n; // CKB timestamp since field is in seconds
55
+ const since = RELATIVE_FLAG | TIMESTAMP_FLAG | (durationSec & VALUE_MASK);
49
56
  return `0x${since.toString(16).padStart(16, "0")}`;
50
57
  }
51
- // Builds the WitnessArgs.lock content for governance transactions (v2).
52
- // Format: signer_count(1) | [signer_index(1) + r+s+v(65)] * N
53
- export function buildGovernanceSigWitness(signers) {
54
- if (signers.length > 255)
55
- throw new Error("signer_count must fit in 1 byte (max 255)");
56
- for (const s of signers) {
57
- if (!Number.isInteger(s.index) || s.index < 0 || s.index > 255) {
58
- throw new Error(`signer index out of range: ${s.index}`);
59
- }
60
- if (s.sig.length !== 65)
61
- throw new Error(`signature must be 65 bytes, got ${s.sig.length}`);
62
- }
63
- const buf = new Uint8Array(1 + signers.length * 66);
64
- buf[0] = signers.length;
65
- let off = 1;
66
- for (const s of signers) {
67
- buf[off++] = s.index;
68
- buf.set(s.sig, off);
69
- off += 65;
70
- }
71
- return buf;
58
+ function voteCode(vote) {
59
+ if (vote === "yes")
60
+ return 1;
61
+ if (vote === "no")
62
+ return 2;
63
+ if (vote === "abstain")
64
+ return 3;
65
+ throw new Error(`unsupported vote: ${vote}`);
66
+ }
67
+ function writeU16LE(buf, offset, value) {
68
+ buf[offset] = value & 0xff;
69
+ buf[offset + 1] = (value >> 8) & 0xff;
72
70
  }
73
71
  function writeU32LE(buf, offset, value) {
74
72
  buf[offset] = value & 0xff;
@@ -76,6 +74,59 @@ function writeU32LE(buf, offset, value) {
76
74
  buf[offset + 2] = (value >> 16) & 0xff;
77
75
  buf[offset + 3] = (value >> 24) & 0xff;
78
76
  }
77
+ // Builds WitnessArgs.lock content for validator-authorized governance updates.
78
+ // Format:
79
+ // vote_count(1)
80
+ // repeated:
81
+ // pubkey(33) | vote(1) | timestamp_len(2 LE) | timestamp_utf8 |
82
+ // signature(65) | merkle_leaf_index(4 LE) | proof_count(1) | proof_hash(32)*
83
+ export function buildValidatorVoteWitness(votes) {
84
+ if (votes.length > 255)
85
+ throw new Error("vote_count must fit in 1 byte (max 255)");
86
+ const enc = new TextEncoder();
87
+ const parts = votes.map((v) => {
88
+ if (v.pubkey.length !== 33)
89
+ throw new Error(`validator pubkey must be 33 bytes, got ${v.pubkey.length}`);
90
+ if (v.signature.length !== 65)
91
+ throw new Error(`vote signature must be 65 bytes, got ${v.signature.length}`);
92
+ if (!Number.isInteger(v.merkleLeafIndex) || v.merkleLeafIndex < 0 || v.merkleLeafIndex > 0xffff_ffff) {
93
+ throw new Error(`merkle leaf index out of range: ${v.merkleLeafIndex}`);
94
+ }
95
+ if (v.merkleProof.length > 255)
96
+ throw new Error("merkle proof length must fit in 1 byte");
97
+ for (const proof of v.merkleProof) {
98
+ if (proof.length !== 32)
99
+ throw new Error(`merkle proof hash must be 32 bytes, got ${proof.length}`);
100
+ }
101
+ const timestamp = enc.encode(v.timestamp);
102
+ if (timestamp.length > 100)
103
+ throw new Error("timestamp is too long (max 100 bytes); governance-lock enforces this limit on-chain");
104
+ return { v, timestamp };
105
+ });
106
+ const size = 1 + parts.reduce((sum, p) => sum + 33 + 1 + 2 + p.timestamp.length + 65 + 4 + 1 + p.v.merkleProof.length * 32, 0);
107
+ const buf = new Uint8Array(size);
108
+ buf[0] = votes.length;
109
+ let off = 1;
110
+ for (const { v, timestamp } of parts) {
111
+ buf.set(v.pubkey, off);
112
+ off += 33;
113
+ buf[off++] = voteCode(v.vote);
114
+ writeU16LE(buf, off, timestamp.length);
115
+ off += 2;
116
+ buf.set(timestamp, off);
117
+ off += timestamp.length;
118
+ buf.set(v.signature, off);
119
+ off += 65;
120
+ writeU32LE(buf, off, v.merkleLeafIndex);
121
+ off += 4;
122
+ buf[off++] = v.merkleProof.length;
123
+ for (const proof of v.merkleProof) {
124
+ buf.set(proof, off);
125
+ off += 32;
126
+ }
127
+ }
128
+ return buf;
129
+ }
79
130
  function bytesOpt(data) {
80
131
  if (!data)
81
132
  return new Uint8Array(0);
@@ -105,18 +156,4 @@ export function buildWitnessArgs(params) {
105
156
  buf.set(outputTypeOpt, offOutputType);
106
157
  return buf;
107
158
  }
108
- // FOR UNIT TESTING ONLY — generates structurally-valid but cryptographically fake signatures.
109
- // governance-lock verifies secp256k1 signatures on-chain for GOV1 v3; these WILL be rejected by the chain.
110
- // Never use in a real governance transaction. Only valid in test environments that mock the contract.
111
- export function placeholderSigners(count = 3) {
112
- return Array.from({ length: count }, (_, i) => ({
113
- index: i,
114
- sig: new Uint8Array(65).fill(0x11), // non-zero placeholder; recovery id corrected to 0x00 below
115
- })).map((s) => {
116
- // Recovery id must be 0-3. Set last byte to 0.
117
- const sig = new Uint8Array(s.sig);
118
- sig[64] = 0x00;
119
- return { index: s.index, sig };
120
- });
121
- }
122
159
  //# sourceMappingURL=witness.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"witness.js","sourceRoot":"","sources":["../../src/lib/witness.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"witness.js","sourceRoot":"","sources":["../../src/lib/witness.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ckb-firewall/cli",
3
- "version": "0.4.0",
3
+ "version": "0.5.0",
4
4
  "description": "CLI for managing the CKB Transaction Firewall blacklist registry",
5
5
  "type": "module",
6
6
  "license": "MIT",