@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,12 @@
1
+ export declare function parseCapacity(capacity: string): bigint;
2
+ export declare function hexCapacity(value: bigint): string;
3
+ export declare function occupiedCapacityShannons(cell: {
4
+ lock: {
5
+ args: string;
6
+ };
7
+ type: {
8
+ args: string;
9
+ } | null;
10
+ data: string | Uint8Array;
11
+ }): bigint;
12
+ //# sourceMappingURL=capacity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capacity.d.ts","sourceRoot":"","sources":["../../src/lib/capacity.ts"],"names":[],"mappings":"AAIA,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEjD;AAID,wBAAgB,wBAAwB,CAAC,IAAI,EAAE;IAC7C,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACvB,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC9B,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC;CAC3B,GAAG,MAAM,CAMT"}
@@ -0,0 +1,18 @@
1
+ import { hexToBytes } from "./blkl.js";
2
+ const SHANNONS_PER_CKB = 100000000n;
3
+ export function parseCapacity(capacity) {
4
+ return BigInt(capacity);
5
+ }
6
+ export function hexCapacity(value) {
7
+ return `0x${value.toString(16)}`;
8
+ }
9
+ // CKB occupied capacity: 8 (capacity field) + data + (32 code_hash + 1 hash_type + args) per script.
10
+ // This matches the CKB consensus formula — no molecule headers or table prefixes.
11
+ export function occupiedCapacityShannons(cell) {
12
+ const lockArgsLen = hexToBytes(cell.lock.args).length;
13
+ const typeArgsLen = cell.type ? hexToBytes(cell.type.args).length : 0;
14
+ const dataBytes = typeof cell.data === "string" ? hexToBytes(cell.data) : cell.data;
15
+ const occupiedBytes = 8 + dataBytes.length + (33 + lockArgsLen) + (cell.type ? 33 + typeArgsLen : 0);
16
+ return BigInt(occupiedBytes) * SHANNONS_PER_CKB;
17
+ }
18
+ //# sourceMappingURL=capacity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capacity.js","sourceRoot":"","sources":["../../src/lib/capacity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,MAAM,gBAAgB,GAAG,UAAY,CAAC;AAEtC,MAAM,UAAU,aAAa,CAAC,QAAgB;IAC5C,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,OAAO,KAAK,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;AACnC,CAAC;AAED,qGAAqG;AACrG,kFAAkF;AAClF,MAAM,UAAU,wBAAwB,CAAC,IAIxC;IACC,MAAM,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;IACtD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACtE,MAAM,SAAS,GAAG,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;IACpF,MAAM,aAAa,GAAG,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrG,OAAO,MAAM,CAAC,aAAa,CAAC,GAAG,gBAAgB,CAAC;AAClD,CAAC"}
@@ -0,0 +1,7 @@
1
+ export interface CliConfig {
2
+ proposerName?: string;
3
+ }
4
+ export declare function getConfigPath(): string;
5
+ export declare function loadConfig(): CliConfig;
6
+ export declare function saveConfig(config: CliConfig): void;
7
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,SAAS;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,wBAAgB,UAAU,IAAI,SAAS,CActC;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAQlD"}
@@ -0,0 +1,35 @@
1
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
2
+ import { homedir } from "node:os";
3
+ import { dirname, join } from "node:path";
4
+ export function getConfigPath() {
5
+ return join(homedir(), ".ckb-firewall", "config.json");
6
+ }
7
+ export function loadConfig() {
8
+ const path = getConfigPath();
9
+ if (!existsSync(path))
10
+ return {};
11
+ try {
12
+ const raw = JSON.parse(readFileSync(path, "utf8"));
13
+ if (typeof raw !== "object" || raw === null || Array.isArray(raw))
14
+ return {};
15
+ const config = {};
16
+ if (typeof raw.proposerName === "string") {
17
+ config.proposerName = raw.proposerName;
18
+ }
19
+ return config;
20
+ }
21
+ catch {
22
+ return {};
23
+ }
24
+ }
25
+ export function saveConfig(config) {
26
+ const path = getConfigPath();
27
+ try {
28
+ mkdirSync(dirname(path), { recursive: true });
29
+ writeFileSync(path, JSON.stringify(config, null, 2) + "\n", "utf8");
30
+ }
31
+ catch (err) {
32
+ throw new Error(`Failed to write config file at ${path}: ${err instanceof Error ? err.message : String(err)}`);
33
+ }
34
+ }
35
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAM1C,MAAM,UAAU,aAAa;IAC3B,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,eAAe,EAAE,aAAa,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,MAAM,IAAI,GAAG,aAAa,EAAE,CAAC;IAC7B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IACjC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;QACnD,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;YAAE,OAAO,EAAE,CAAC;QAC7E,MAAM,MAAM,GAAc,EAAE,CAAC;QAC7B,IAAI,OAAQ,GAA+B,CAAC,YAAY,KAAK,QAAQ,EAAE,CAAC;YACtE,MAAM,CAAC,YAAY,GAAI,GAA+B,CAAC,YAAsB,CAAC;QAChF,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAiB;IAC1C,MAAM,IAAI,GAAG,aAAa,EAAE,CAAC;IAC7B,IAAI,CAAC;QACH,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9C,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,CAAC;IACtE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,kCAAkC,IAAI,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACjH,CAAC;AACH,CAAC"}
@@ -5,6 +5,7 @@ export declare const TESTNET_REGISTRY_CELL: {
5
5
  txHash: string;
6
6
  index: number;
7
7
  };
8
+ export declare const TESTNET_TREASURY_DONATION_ADDRESS = "ckt1qzpf4txhkw8vwtycyy5vjru0jv6q5wk3cwd8w22nzsz4e2sge9h7jq546h5gm2ln9m6ehs5j68ujthe0z72g77z9m2jw2te5hq0myugugzyaany9q7kaky2wxhp29c4wjscgnqegsjqcl3avdh3u8wxd4e4py8dwlf3";
8
9
  export declare const TESTNET_CONTRACT_OUTPOINTS: {
9
10
  firewallLock: {
10
11
  txHash: string;
@@ -18,11 +19,29 @@ export declare const TESTNET_CONTRACT_OUTPOINTS: {
18
19
  txHash: string;
19
20
  index: number;
20
21
  };
22
+ proposalAnchor: {
23
+ txHash: string;
24
+ index: number;
25
+ };
21
26
  spawnAwareSecp256k1: {
22
27
  txHash: string;
23
28
  index: number;
24
29
  };
25
30
  };
31
+ export declare const TESTNET_GOVERNANCE_LOCK_SCRIPT: {
32
+ code_hash: string;
33
+ hash_type: "type";
34
+ args: string;
35
+ };
36
+ export declare const TESTNET_TREASURY_LOCK_SCRIPT: {
37
+ code_hash: string;
38
+ hash_type: "data1";
39
+ args: string;
40
+ };
41
+ export declare const TESTNET_TREASURY_LOCK_DEP: {
42
+ txHash: string;
43
+ index: number;
44
+ };
26
45
  export declare const SECP256K1_DEP_GROUP: {
27
46
  txHash: string;
28
47
  index: number;
@@ -1 +1 @@
1
- {"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/lib/defaults.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE1D,eAAO,MAAM,eAAe,4BAA4B,CAAC;AAIzD,eAAO,MAAM,qBAAqB,EAAE,gBAOnC,CAAC;AAGF,eAAO,MAAM,qBAAqB;;;CAIjC,CAAC;AAGF,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;CAqBtC,CAAC;AAGF,eAAO,MAAM,mBAAmB;;;CAI/B,CAAC;AAKF,eAAO,MAAM,0BAA0B,EAAE,UAAU,EAMlD,CAAC;AAEF,eAAO,MAAM,4BAA4B,IAAI,CAAC;AAC9C,eAAO,MAAM,kCAAkC,IAAI,CAAC;AAQpD;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,IAAI,CAkBjE"}
1
+ {"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/lib/defaults.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE1D,eAAO,MAAM,eAAe,4BAA4B,CAAC;AAIzD,eAAO,MAAM,qBAAqB,EAAE,gBAOnC,CAAC;AAGF,eAAO,MAAM,qBAAqB;;;CAIjC,CAAC;AAEF,eAAO,MAAM,iCAAiC,4KAC6H,CAAC;AAG5K,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;CA0BtC,CAAC;AAKF,eAAO,MAAM,8BAA8B;;;;CAI1C,CAAC;AAKF,eAAO,MAAM,4BAA4B;;;;CAKxC,CAAC;AAGF,eAAO,MAAM,yBAAyB;;;CAGrC,CAAC;AAGF,eAAO,MAAM,mBAAmB;;;CAI/B,CAAC;AAKF,eAAO,MAAM,0BAA0B,EAAE,UAAU,EAMlD,CAAC;AAEF,eAAO,MAAM,4BAA4B,IAAI,CAAC;AAC9C,eAAO,MAAM,kCAAkC,IAAI,CAAC;AAQpD;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,IAAI,CAkBjE"}
@@ -3,28 +3,33 @@ export const TESTNET_RPC_URL = "https://testnet.ckb.dev";
3
3
  // v2 registry spec: matches registry cell dep by type_id_value (bytes 34..66 of 66-byte v2 type args).
4
4
  // Survives governance-lock upgrades — update only typeIdValue if the registry cell is re-bootstrapped.
5
5
  export const TESTNET_REGISTRY_SPEC = {
6
- codeHash: "0x5812b3f0f68ded4d61e8f12117caa011f295dbe88a29c07b86c9caec14bd6c55",
6
+ codeHash: "0x493f1700508125b0e281b8fb1d168b03bd5ef71480399dd59221224901a9cd09",
7
7
  hashType: "type",
8
- typeIdValue: "0xc70a072cdfb7d25a5e92d27a47f9c8a0f30513de683e56e16d55ae30775f3951",
8
+ typeIdValue: "0x9be0ad6e4e5039a64d9725ff037057c16ef59f126e3bdd9841b802f0e0a112fe",
9
9
  required: true,
10
10
  };
11
11
  // Live registry cell outpoint on testnet. Moves after each governance update.
12
12
  export const TESTNET_REGISTRY_CELL = {
13
- txHash: "0x685dc49bfe466a198a01abd94117f5fe7dd79f28570d6ceba744616d7aa51eb4",
13
+ txHash: "0xa3dcb46fdeb92735e7f9f0393811a8541b71e275e8f713e62ea35f59746c78a8",
14
14
  index: 0,
15
15
  };
16
- // Deployed contract binary cells (2026-05-26 deployment).
16
+ export const TESTNET_TREASURY_DONATION_ADDRESS = "ckt1qzpf4txhkw8vwtycyy5vjru0jv6q5wk3cwd8w22nzsz4e2sge9h7jq546h5gm2ln9m6ehs5j68ujthe0z72g77z9m2jw2te5hq0myugugzyaany9q7kaky2wxhp29c4wjscgnqegsjqcl3avdh3u8wxd4e4py8dwlf3";
17
+ // Deployed contract binary cells (treasury-enabled registry redeployed 2026-05-31).
17
18
  export const TESTNET_CONTRACT_OUTPOINTS = {
18
19
  firewallLock: {
19
20
  txHash: "0x128193cc2d547b224ccf10a6e299cb0749c633c5f9354ff5a9a5fd3e894318d2",
20
21
  index: 0,
21
22
  },
22
23
  blacklistRegistry: {
23
- txHash: "0x410864a6815cec51cbc3a86dfe5cf7c1ff62f1c56648ea0a0bdb2feeb6831973",
24
- index: 1,
24
+ txHash: "0xa165e5af82538c072caaee87ae5b919ad89ca2448d66daf9a29092b5ad87294d",
25
+ index: 0,
25
26
  },
26
27
  governanceLock: {
27
- txHash: "0x410864a6815cec51cbc3a86dfe5cf7c1ff62f1c56648ea0a0bdb2feeb6831973",
28
+ txHash: "0x5033e680435bc7ef2255767cfd46b355ab1bc6dcda5ec01e38ef0d29119ad711",
29
+ index: 0,
30
+ },
31
+ proposalAnchor: {
32
+ txHash: "0x0daff588f0053bdf34d4c2eebaf2c092f70192cdd4a2d1dd95aee07ce100dea9",
28
33
  index: 0,
29
34
  },
30
35
  spawnAwareSecp256k1: {
@@ -32,6 +37,28 @@ export const TESTNET_CONTRACT_OUTPOINTS = {
32
37
  index: 0,
33
38
  },
34
39
  };
40
+ // Governance-lock script — use as the lock for proposal cells so any validator can execute
41
+ // without the treasury private key. The lock is validated by the GOV1 witness already
42
+ // present in every execute TX.
43
+ export const TESTNET_GOVERNANCE_LOCK_SCRIPT = {
44
+ code_hash: "0x95d5e88dabf32ef59bc292d1f925df2f17948f7845daa4e52f34b81fb2711c40",
45
+ hash_type: "type",
46
+ args: "0x01",
47
+ };
48
+ // Treasury-lock script — autonomous pool that allows anyone to create proposal-anchor
49
+ // cells without a private key. Args encode which governance-lock and proposal-anchor
50
+ // type IDs are authorised. code hash = blake2b(binary), hash_type = data1.
51
+ export const TESTNET_TREASURY_LOCK_SCRIPT = {
52
+ code_hash: "0x829aacd7b38ec72c982128c90f8f93340a3ad1c39a77295314055caa08c96fe9",
53
+ hash_type: "data1",
54
+ // governance_lock_type_id(32) | proposal_anchor_type_id(32)
55
+ args: "0x95d5e88dabf32ef59bc292d1f925df2f17948f7845daa4e52f34b81fb2711c4089decc8507addb114e35c2a2e2ae943089832884818fc7ac6de3c3b8cdae6a12",
56
+ };
57
+ // Cell dep for the treasury-lock code cell.
58
+ export const TESTNET_TREASURY_LOCK_DEP = {
59
+ txHash: "0xbc918dda15b2e43aa308a554872a0e966d26fa14d7f0f4362871bfed4a53c3ff",
60
+ index: 0,
61
+ };
35
62
  // secp256k1 dep group used by ckb-cli for fee-payer signing.
36
63
  export const SECP256K1_DEP_GROUP = {
37
64
  txHash: "0xf8de3bb47d055cdf460d93a2a6e1b05f7432f9777c8c474abf4eec1d4aee5d37",
@@ -1 +1 @@
1
- {"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/lib/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAGvD,MAAM,CAAC,MAAM,eAAe,GAAG,yBAAyB,CAAC;AAEzD,uGAAuG;AACvG,uGAAuG;AACvG,MAAM,CAAC,MAAM,qBAAqB,GAAqB;IACrD,QAAQ,EACN,oEAAoE;IACtE,QAAQ,EAAE,MAAM;IAChB,WAAW,EACT,oEAAoE;IACtE,QAAQ,EAAE,IAAI;CACf,CAAC;AAEF,8EAA8E;AAC9E,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,MAAM,EACJ,oEAAoE;IACtE,KAAK,EAAE,CAAC;CACT,CAAC;AAEF,0DAA0D;AAC1D,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,YAAY,EAAE;QACZ,MAAM,EACJ,oEAAoE;QACtE,KAAK,EAAE,CAAC;KACT;IACD,iBAAiB,EAAE;QACjB,MAAM,EACJ,oEAAoE;QACtE,KAAK,EAAE,CAAC;KACT;IACD,cAAc,EAAE;QACd,MAAM,EACJ,oEAAoE;QACtE,KAAK,EAAE,CAAC;KACT;IACD,mBAAmB,EAAE;QACnB,MAAM,EACJ,oEAAoE;QACtE,KAAK,EAAE,CAAC;KACT;CACF,CAAC;AAEF,6DAA6D;AAC7D,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,MAAM,EACJ,oEAAoE;IACtE,KAAK,EAAE,CAAC;CACT,CAAC;AAEF,yEAAyE;AACzE,0EAA0E;AAC1E,8BAA8B;AAC9B,MAAM,CAAC,MAAM,0BAA0B,GAAiB;IACtD,IAAI,UAAU,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACtN,IAAI,UAAU,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACtN,IAAI,UAAU,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACtN,IAAI,UAAU,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACtN,IAAI,UAAU,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;CACvN,CAAC;AAEF,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC;AAC9C,MAAM,CAAC,MAAM,kCAAkC,GAAG,CAAC,CAAC;AAEpD,uFAAuF;AACvF,8FAA8F;AAC9F,MAAM,qBAAqB,GAAiB,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAC7E,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAC/B,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAqB;IACzD,MAAM,cAAc,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACxD,SAAS,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CACnC,CAAC;IACF,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CACtC,cAAc,CAAC,IAAI,CACjB,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,KAAK,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CACrE,CACF,CAAC;IACF,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,sCAAsC;YACtC,kFAAkF;YAClF,uFAAuF;YACvF,wEAAwE;YACxE,+DAA+D,CAChE,CAAC;IACJ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/lib/defaults.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import type { RegistryPayload } from "@ckb-firewall/sdk";
2
+ import { type LiveCell } from "./rpc.js";
3
+ import { type GovernanceHeader } from "./blkl.js";
4
+ import { type Proposal } from "./proposals.js";
5
+ export interface RegistryStateForProposal {
6
+ cell: LiveCell;
7
+ currentPayload: RegistryPayload;
8
+ newEntryCount: number;
9
+ governanceHeaderRaw: Uint8Array;
10
+ governanceHeader: GovernanceHeader | null;
11
+ oldBlkl: Uint8Array;
12
+ newBlkl: Uint8Array;
13
+ oldRoot: Uint8Array;
14
+ newRoot: Uint8Array;
15
+ registryTypeIdValue: Uint8Array;
16
+ }
17
+ export declare function parseRegistryTypeIdValue(typeArgs: string): Uint8Array;
18
+ export declare function encodeProposalCellData(proposal: Proposal, registryTypeIdValue: Uint8Array): Uint8Array;
19
+ export declare function proposalCellDataHash(proposal: Proposal, registryTypeIdValue: Uint8Array): Uint8Array;
20
+ export declare function reviewDelayMs(proposal: Proposal): bigint;
21
+ export declare function loadRegistryStateForProposal(rpcUrl: string, registryTx: string, registryIndex: number, proposal: Proposal): Promise<RegistryStateForProposal>;
22
+ export declare function proposalV4Fields(proposal: Proposal, registryTypeIdValue: Uint8Array): {
23
+ proposalData: Uint8Array;
24
+ proposalDataHash: Uint8Array;
25
+ reviewDelayMs: bigint;
26
+ };
27
+ export declare function assertProposalCellMatches(proposal: Proposal, proposalCellData: string, registryTypeIdValue: Uint8Array): Uint8Array;
28
+ export declare function encodeProposalAnchorTypeArgs(params: {
29
+ registryTypeIdValue: Uint8Array;
30
+ treasuryLockHash: Uint8Array;
31
+ reclaimDelayMs: bigint;
32
+ }): Uint8Array;
33
+ export declare function assertProposalAnchorTypeMatches(params: {
34
+ proposalCellType: LiveCell["type"];
35
+ registryTypeIdValue: Uint8Array;
36
+ governanceHeader: GovernanceHeader | null;
37
+ reclaimDelayMs: bigint;
38
+ }): void;
39
+ //# sourceMappingURL=governance-v4.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"governance-v4.d.ts","sourceRoot":"","sources":["../../src/lib/governance-v4.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzD,OAAO,EAAe,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEtD,OAAO,EAYL,KAAK,gBAAgB,EACtB,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAoB,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAEjE,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,QAAQ,CAAC;IACf,cAAc,EAAE,eAAe,CAAC;IAChC,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB,EAAE,UAAU,CAAC;IAChC,gBAAgB,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAC1C,OAAO,EAAE,UAAU,CAAC;IACpB,OAAO,EAAE,UAAU,CAAC;IACpB,OAAO,EAAE,UAAU,CAAC;IACpB,OAAO,EAAE,UAAU,CAAC;IACpB,mBAAmB,EAAE,UAAU,CAAC;CACjC;AAED,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,CAMrE;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,EAAE,mBAAmB,EAAE,UAAU,GAAG,UAAU,CA4CtG;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,EAAE,mBAAmB,EAAE,UAAU,GAAG,UAAU,CAEpG;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAExD;AAED,wBAAsB,4BAA4B,CAChD,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,wBAAwB,CAAC,CAkEnC;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,EAAE,mBAAmB,EAAE,UAAU,GAAG;IACrF,YAAY,EAAE,UAAU,CAAC;IACzB,gBAAgB,EAAE,UAAU,CAAC;IAC7B,aAAa,EAAE,MAAM,CAAC;CACvB,CAOA;AAED,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,EAAE,mBAAmB,EAAE,UAAU,GAAG,UAAU,CAUnI;AAED,wBAAgB,4BAA4B,CAAC,MAAM,EAAE;IACnD,mBAAmB,EAAE,UAAU,CAAC;IAChC,gBAAgB,EAAE,UAAU,CAAC;IAC7B,cAAc,EAAE,MAAM,CAAC;CACxB,GAAG,UAAU,CAoBb;AAED,wBAAgB,+BAA+B,CAAC,MAAM,EAAE;IACtD,gBAAgB,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IACnC,mBAAmB,EAAE,UAAU,CAAC;IAChC,gBAAgB,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAC1C,cAAc,EAAE,MAAM,CAAC;CACxB,GAAG,IAAI,CAkBP"}
@@ -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":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAiB,MAAM,UAAU,CAAC;AACtD,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EACL,UAAU,EACV,sBAAsB,EACtB,qBAAqB,EACrB,0BAA0B,EAC1B,0BAA0B,EAC1B,UAAU,EACV,YAAY,EACZ,qBAAqB,EACrB,WAAW,EACX,qBAAqB,EACrB,OAAO,GAER,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAiB,MAAM,gBAAgB,CAAC;AAejE,MAAM,UAAU,wBAAwB,CAAC,QAAgB;IACvD,MAAM,GAAG,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IACjC,IAAI,GAAG,CAAC,MAAM,KAAK,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CAAC,gHAAgH,CAAC,CAAC;IACpI,CAAC;IACD,OAAO,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,QAAkB,EAAE,mBAA+B;IACxF,IAAI,mBAAmB,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,6CAA6C,mBAAmB,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7F,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,KAAK,cAAc,EAAE,CAAC;QACvC,IAAI,CAAC,QAAQ,CAAC,kBAAkB,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;QACxE,CAAC;QACD,MAAM,kBAAkB,GAAG,UAAU,CAAC,qBAAqB,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC1F,MAAM,YAAY,GAAG,UAAU,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC7E,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QACrD,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC;QAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC;QAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC;QAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO;QACnF,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC;QAClB,GAAG,CAAC,GAAG,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAAC;QAAC,GAAG,IAAI,EAAE,CAAC;QAC7C,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC;QAClB,GAAG,CAAC,GAAG,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC;QAAC,GAAG,IAAI,EAAE,CAAC;QAC5C,GAAG,CAAC,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;QAC3B,OAAO,GAAG,CAAC;IACb,CAAC;IACD,MAAM,UAAU,GAAG,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACjD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,UAAU,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;QACvD,MAAM,IAAI,KAAK,CAAC,0CAA0C,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;IACjF,CAAC;IACD,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC7C,IAAI,SAAS,GAAG,EAAE,IAAI,SAAS,GAAG,mBAAsB,EAAE,CAAC;QACzD,MAAM,IAAI,KAAK,CAAC,kCAAkC,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC;IAC1E,CAAC;IACD,MAAM,YAAY,GAAG,UAAU,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC7E,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;IAC5E,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC;IAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC;IAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC;IAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO;IACnF,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC;IAClB,GAAG,CAAC,GAAG,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAAC;IAAC,GAAG,IAAI,EAAE,CAAC;IAC7C,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IACrD,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC;IAC/B,GAAG,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;IAAC,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC;IACnD,IAAI,GAAG,GAAG,SAAS,CAAC;IACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,MAAM,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC;QACjC,GAAG,KAAK,EAAE,CAAC;IACb,CAAC;IACD,GAAG,CAAC,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;IAC3B,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,QAAkB,EAAE,mBAA+B;IACtF,OAAO,UAAU,CAAC,sBAAsB,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC,CAAC;AAC3E,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,QAAkB;IAC9C,OAAO,MAAM,CAAC,QAAQ,CAAC,aAAa,IAAI,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC;AACpE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAChD,MAAc,EACd,UAAkB,EAClB,aAAqB,EACrB,QAAkB;IAElB,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,uBAAuB,CAAC,MAAM,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC;IAC3F,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IACtD,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACvD,CAAC;IAED,MAAM,cAAc,GAAG,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvD,MAAM,mBAAmB,GAAG,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClE,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;IACjF,CAAC;IACD,MAAM,gBAAgB,GAAG,qBAAqB,CAAC,mBAAmB,CAAC,CAAC;IACpE,MAAM,mBAAmB,GAAG,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAErE,IAAI,UAAU,CAAC;IACf,IAAI,sBAAsB,GAAG,mBAAmB,CAAC;IACjD,IAAI,QAAQ,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;QAC9B,MAAM,cAAc,GAAG,cAAc,CAAC,OAAO,CAAC,IAAI,CAChD,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CACxF,CAAC;QACF,IAAI,cAAc,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,GAAG,QAAQ,CAAC,QAAQ,8BAA8B,CAAC,CAAC;QACtE,CAAC;QACD,UAAU,GAAG,YAAY,CAAC,cAAc,CAAC,OAAO,EAAE;YAChD,UAAU,EAAE,QAAQ,CAAC,QAAQ;YAC7B,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC;SACtC,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,IAAI,QAAQ,CAAC,MAAM,KAAK,cAAc,EAAE,CAAC;YACvC,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACtB,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;YAC1E,CAAC;YACD,IAAI,CAAC,QAAQ,CAAC,kBAAkB,EAAE,CAAC;gBACjC,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;YACxE,CAAC;YACD,UAAU,GAAG,cAAc,CAAC,OAAO,CAAC;YACpC,sBAAsB,GAAG,sBAAsB,CAAC;gBAC9C,SAAS,EAAE,gBAAgB,CAAC,SAAS;gBACrC,cAAc,EAAE,gBAAgB,CAAC,cAAc;gBAC/C,mBAAmB,EAAE,gBAAgB,CAAC,mBAAmB;gBACzD,kBAAkB,EAAE,QAAQ,CAAC,kBAAkB;aAChD,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACR,UAAU,GAAG,WAAW,CAAC,cAAc,CAAC,OAAO,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACpE,IAAI,UAAU,CAAC,MAAM,KAAK,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;gBACxD,MAAM,IAAI,KAAK,CAAC,GAAG,QAAQ,CAAC,QAAQ,0BAA0B,CAAC,CAAC;YAClE,CAAC;QACD,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,qBAAqB,CAAC,EAAE,OAAO,EAAE,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,sBAAsB,CAAC,CAAC;IAExH,OAAO;QACL,IAAI;QACJ,cAAc;QACd,mBAAmB;QACnB,gBAAgB;QAChB,OAAO;QACP,OAAO;QACP,aAAa,EAAE,UAAU,CAAC,MAAM;QAChC,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC;QAC5B,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC;QAC5B,mBAAmB;KACpB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,QAAkB,EAAE,mBAA+B;IAKlF,MAAM,YAAY,GAAG,sBAAsB,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC;IAC3E,OAAO;QACL,YAAY;QACZ,gBAAgB,EAAE,UAAU,CAAC,YAAY,CAAC;QAC1C,aAAa,EAAE,aAAa,CAAC,QAAQ,CAAC;KACvC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,QAAkB,EAAE,gBAAwB,EAAE,mBAA+B;IACrH,MAAM,QAAQ,GAAG,sBAAsB,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC;IACvE,MAAM,MAAM,GAAG,UAAU,CAAC,gBAAgB,CAAC,CAAC;IAC5C,IAAI,UAAU,CAAC,MAAM,CAAC,KAAK,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAChD,MAAM,IAAI,KAAK,CACb,mDAAmD;YACnD,YAAY,UAAU,CAAC,QAAQ,CAAC,SAAS,UAAU,CAAC,MAAM,CAAC,GAAG,CAC/D,CAAC;IACJ,CAAC;IACD,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,MAI5C;IACC,IAAI,MAAM,CAAC,mBAAmB,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QAC7C,MAAM,IAAI,KAAK,CAAC,6CAA6C,MAAM,CAAC,mBAAmB,CAAC,MAAM,EAAE,CAAC,CAAC;IACpG,CAAC;IACD,IAAI,MAAM,CAAC,gBAAgB,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CAAC,0CAA0C,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC;IAC9F,CAAC;IACD,IAAI,MAAM,CAAC,cAAc,GAAG,EAAE,IAAI,MAAM,CAAC,cAAc,GAAG,mBAAsB,EAAE,CAAC;QACjF,MAAM,IAAI,KAAK,CAAC,uCAAuC,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;IAClF,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;IAC/B,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IACd,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC,CAAC,CAAC;IACvC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;IACrC,IAAI,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC;IAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC;QACpC,KAAK,KAAK,EAAE,CAAC;IACf,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,+BAA+B,CAAC,MAK/C;IACC,MAAM,gBAAgB,GAAG,0BAA0B,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAC7E,IAAI,CAAC,gBAAgB;QAAE,OAAO;IAC9B,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,8EAA8E,CAAC,CAAC;IAClG,CAAC;IACD,MAAM,YAAY,GAAG,4BAA4B,CAAC;QAChD,mBAAmB,EAAE,MAAM,CAAC,mBAAmB;QAC/C,gBAAgB;QAChB,cAAc,EAAE,MAAM,CAAC,cAAc;KACtC,CAAC,CAAC;IACH,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC5D,IAAI,UAAU,CAAC,UAAU,CAAC,KAAK,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACxD,MAAM,IAAI,KAAK,CACb,mFAAmF;YACnF,YAAY,UAAU,CAAC,YAAY,CAAC,SAAS,MAAM,CAAC,gBAAgB,CAAC,IAAI,GAAG,CAC7E,CAAC;IACJ,CAAC;AACH,CAAC"}