@ckb-firewall/cli 0.1.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.
- package/LICENSE +21 -0
- package/README.md +108 -0
- package/dist/commands/add.d.ts +13 -0
- package/dist/commands/add.d.ts.map +1 -0
- package/dist/commands/add.js +247 -0
- package/dist/commands/add.js.map +1 -0
- package/dist/commands/execute.d.ts +12 -0
- package/dist/commands/execute.d.ts.map +1 -0
- package/dist/commands/execute.js +229 -0
- package/dist/commands/execute.js.map +1 -0
- package/dist/commands/inspect.d.ts +9 -0
- package/dist/commands/inspect.d.ts.map +1 -0
- package/dist/commands/inspect.js +77 -0
- package/dist/commands/inspect.js.map +1 -0
- package/dist/commands/proposals.d.ts +4 -0
- package/dist/commands/proposals.d.ts.map +1 -0
- package/dist/commands/proposals.js +77 -0
- package/dist/commands/proposals.js.map +1 -0
- package/dist/commands/propose.d.ts +12 -0
- package/dist/commands/propose.d.ts.map +1 -0
- package/dist/commands/propose.js +240 -0
- package/dist/commands/propose.js.map +1 -0
- package/dist/commands/remove.d.ts +12 -0
- package/dist/commands/remove.d.ts.map +1 -0
- package/dist/commands/remove.js +236 -0
- package/dist/commands/remove.js.map +1 -0
- package/dist/commands/sign.d.ts +7 -0
- package/dist/commands/sign.d.ts.map +1 -0
- package/dist/commands/sign.js +178 -0
- package/dist/commands/sign.js.map +1 -0
- package/dist/commands/vote.d.ts +7 -0
- package/dist/commands/vote.d.ts.map +1 -0
- package/dist/commands/vote.js +106 -0
- package/dist/commands/vote.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +133 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/blkl.d.ts +8 -0
- package/dist/lib/blkl.d.ts.map +1 -0
- package/dist/lib/blkl.js +62 -0
- package/dist/lib/blkl.js.map +1 -0
- package/dist/lib/defaults.d.ts +22 -0
- package/dist/lib/defaults.d.ts.map +1 -0
- package/dist/lib/defaults.js +28 -0
- package/dist/lib/defaults.js.map +1 -0
- package/dist/lib/hints.d.ts +7 -0
- package/dist/lib/hints.d.ts.map +1 -0
- package/dist/lib/hints.js +67 -0
- package/dist/lib/hints.js.map +1 -0
- package/dist/lib/proposals.d.ts +61 -0
- package/dist/lib/proposals.d.ts.map +1 -0
- package/dist/lib/proposals.js +89 -0
- package/dist/lib/proposals.js.map +1 -0
- package/dist/lib/rpc.d.ts +24 -0
- package/dist/lib/rpc.d.ts.map +1 -0
- package/dist/lib/rpc.js +55 -0
- package/dist/lib/rpc.js.map +1 -0
- package/dist/lib/witness.d.ts +22 -0
- package/dist/lib/witness.d.ts.map +1 -0
- package/dist/lib/witness.js +82 -0
- package/dist/lib/witness.js.map +1 -0
- package/package.json +63 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export declare function ckbBlake2b(data: Uint8Array): Uint8Array;
|
|
2
|
+
export interface Gov1Params {
|
|
3
|
+
proposalIdHash: Uint8Array;
|
|
4
|
+
voteDigestHash: Uint8Array;
|
|
5
|
+
oldRoot: Uint8Array;
|
|
6
|
+
newRoot: Uint8Array;
|
|
7
|
+
signers: Array<{
|
|
8
|
+
index: number;
|
|
9
|
+
sig: Uint8Array;
|
|
10
|
+
}>;
|
|
11
|
+
}
|
|
12
|
+
export declare function buildGov1Witness(params: Gov1Params): Uint8Array;
|
|
13
|
+
export declare function buildWitnessArgs(params: {
|
|
14
|
+
lock?: Uint8Array;
|
|
15
|
+
inputType?: Uint8Array;
|
|
16
|
+
outputType?: Uint8Array;
|
|
17
|
+
}): Uint8Array;
|
|
18
|
+
export declare function placeholderSigners(count?: 3 | 4 | 5): Array<{
|
|
19
|
+
index: number;
|
|
20
|
+
sig: Uint8Array;
|
|
21
|
+
}>;
|
|
22
|
+
//# sourceMappingURL=witness.d.ts.map
|
|
@@ -0,0 +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,UAAU;IACzB,cAAc,EAAE,UAAU,CAAC;IAC3B,cAAc,EAAE,UAAU,CAAC;IAC3B,OAAO,EAAE,UAAU,CAAC;IACpB,OAAO,EAAE,UAAU,CAAC;IAEpB,OAAO,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,UAAU,CAAA;KAAE,CAAC,CAAC;CACpD;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,CA+B/D;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;AAID,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"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { blake2b } from "@noble/hashes/blake2b";
|
|
2
|
+
const CKB_PERSONALIZATION = new TextEncoder().encode("ckb-default-hash");
|
|
3
|
+
export function ckbBlake2b(data) {
|
|
4
|
+
return blake2b(data, { personalization: CKB_PERSONALIZATION, dkLen: 32 });
|
|
5
|
+
}
|
|
6
|
+
export function buildGov1Witness(params) {
|
|
7
|
+
const signerCount = params.signers.length;
|
|
8
|
+
// 4 magic + 1 version + 32*4 hashes + 1 count + signerCount * (1 index + 65 sig)
|
|
9
|
+
const size = 4 + 1 + 32 + 32 + 32 + 32 + 1 + signerCount * 66;
|
|
10
|
+
const buf = new Uint8Array(size);
|
|
11
|
+
let off = 0;
|
|
12
|
+
// "GOV1"
|
|
13
|
+
buf[off++] = 0x47;
|
|
14
|
+
buf[off++] = 0x4f;
|
|
15
|
+
buf[off++] = 0x56;
|
|
16
|
+
buf[off++] = 0x31;
|
|
17
|
+
buf[off++] = 0x01; // version
|
|
18
|
+
buf.set(params.proposalIdHash, off);
|
|
19
|
+
off += 32;
|
|
20
|
+
buf.set(params.voteDigestHash, off);
|
|
21
|
+
off += 32;
|
|
22
|
+
buf.set(params.oldRoot, off);
|
|
23
|
+
off += 32;
|
|
24
|
+
buf.set(params.newRoot, off);
|
|
25
|
+
off += 32;
|
|
26
|
+
buf[off++] = signerCount;
|
|
27
|
+
for (const s of params.signers) {
|
|
28
|
+
buf[off++] = s.index;
|
|
29
|
+
buf.set(s.sig, off);
|
|
30
|
+
off += 65;
|
|
31
|
+
}
|
|
32
|
+
return buf;
|
|
33
|
+
}
|
|
34
|
+
function writeU32LE(buf, offset, value) {
|
|
35
|
+
buf[offset] = value & 0xff;
|
|
36
|
+
buf[offset + 1] = (value >> 8) & 0xff;
|
|
37
|
+
buf[offset + 2] = (value >> 16) & 0xff;
|
|
38
|
+
buf[offset + 3] = (value >> 24) & 0xff;
|
|
39
|
+
}
|
|
40
|
+
function bytesOpt(data) {
|
|
41
|
+
if (!data)
|
|
42
|
+
return new Uint8Array(0);
|
|
43
|
+
const buf = new Uint8Array(4 + data.length);
|
|
44
|
+
writeU32LE(buf, 0, data.length);
|
|
45
|
+
buf.set(data, 4);
|
|
46
|
+
return buf;
|
|
47
|
+
}
|
|
48
|
+
// Molecule-encodes a WitnessArgs table (lock, input_type, output_type).
|
|
49
|
+
// The lock field is a 65-byte zero placeholder that ckb-cli sign-tx fills in.
|
|
50
|
+
export function buildWitnessArgs(params) {
|
|
51
|
+
const lockOpt = bytesOpt(params.lock);
|
|
52
|
+
const inputTypeOpt = bytesOpt(params.inputType);
|
|
53
|
+
const outputTypeOpt = bytesOpt(params.outputType);
|
|
54
|
+
const HEADER = 16; // 4 total_size + 3 * 4 offsets
|
|
55
|
+
const offLock = HEADER;
|
|
56
|
+
const offInputType = offLock + lockOpt.length;
|
|
57
|
+
const offOutputType = offInputType + inputTypeOpt.length;
|
|
58
|
+
const totalSize = offOutputType + outputTypeOpt.length;
|
|
59
|
+
const buf = new Uint8Array(totalSize);
|
|
60
|
+
writeU32LE(buf, 0, totalSize);
|
|
61
|
+
writeU32LE(buf, 4, offLock);
|
|
62
|
+
writeU32LE(buf, 8, offInputType);
|
|
63
|
+
writeU32LE(buf, 12, offOutputType);
|
|
64
|
+
buf.set(lockOpt, offLock);
|
|
65
|
+
buf.set(inputTypeOpt, offInputType);
|
|
66
|
+
buf.set(outputTypeOpt, offOutputType);
|
|
67
|
+
return buf;
|
|
68
|
+
}
|
|
69
|
+
// Placeholder signatures (3-of-5) for testnet where on-chain sig verification is off.
|
|
70
|
+
// Replace with real governance signatures for production use.
|
|
71
|
+
export function placeholderSigners(count = 3) {
|
|
72
|
+
return Array.from({ length: count }, (_, i) => ({
|
|
73
|
+
index: i,
|
|
74
|
+
sig: new Uint8Array(65).fill(0x11), // non-zero placeholder; recovery id corrected to 0x00 below
|
|
75
|
+
})).map((s) => {
|
|
76
|
+
// Recovery id must be 0-3. Set last byte to 0.
|
|
77
|
+
const sig = new Uint8Array(s.sig);
|
|
78
|
+
sig[64] = 0x00;
|
|
79
|
+
return { index: s.index, sig };
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=witness.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"witness.js","sourceRoot":"","sources":["../../src/lib/witness.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@ckb-firewall/cli",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "CLI for managing the CKB Transaction Firewall blacklist registry",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"author": "digitaldrreamer and contributors",
|
|
8
|
+
"bin": {
|
|
9
|
+
"ckb-firewall": "dist/index.js"
|
|
10
|
+
},
|
|
11
|
+
"files": [
|
|
12
|
+
"dist",
|
|
13
|
+
"README.md",
|
|
14
|
+
"LICENSE"
|
|
15
|
+
],
|
|
16
|
+
"scripts": {
|
|
17
|
+
"build": "tsc -p tsconfig.build.json",
|
|
18
|
+
"postbuild": "chmod +x dist/index.js",
|
|
19
|
+
"prepack": "npm run build",
|
|
20
|
+
"typecheck": "tsc --noEmit",
|
|
21
|
+
"dev": "tsc --watch -p tsconfig.build.json"
|
|
22
|
+
},
|
|
23
|
+
"dependencies": {
|
|
24
|
+
"@ckb-firewall/sdk": "^0.2.3",
|
|
25
|
+
"@noble/curves": "^2.2.0",
|
|
26
|
+
"@noble/hashes": "^1.5.0",
|
|
27
|
+
"cfonts": "^3.3.0",
|
|
28
|
+
"chalk": "^5.3.0",
|
|
29
|
+
"cli-table3": "^0.6.5",
|
|
30
|
+
"commander": "^12.1.0",
|
|
31
|
+
"inquirer": "^10.2.2",
|
|
32
|
+
"log-symbols": "^6.0.0",
|
|
33
|
+
"ora": "^8.1.1"
|
|
34
|
+
},
|
|
35
|
+
"devDependencies": {
|
|
36
|
+
"@types/node": "^22.0.0",
|
|
37
|
+
"typescript": "^5.6.3"
|
|
38
|
+
},
|
|
39
|
+
"engines": {
|
|
40
|
+
"node": ">=20"
|
|
41
|
+
},
|
|
42
|
+
"keywords": [
|
|
43
|
+
"ckb",
|
|
44
|
+
"nervos",
|
|
45
|
+
"blockchain",
|
|
46
|
+
"security",
|
|
47
|
+
"blacklist",
|
|
48
|
+
"cli",
|
|
49
|
+
"governance"
|
|
50
|
+
],
|
|
51
|
+
"repository": {
|
|
52
|
+
"type": "git",
|
|
53
|
+
"url": "git+https://github.com/digitaldrreamer/ckb-transaction-firewall.git",
|
|
54
|
+
"directory": "sdk/cli"
|
|
55
|
+
},
|
|
56
|
+
"bugs": {
|
|
57
|
+
"url": "https://github.com/digitaldrreamer/ckb-transaction-firewall/issues"
|
|
58
|
+
},
|
|
59
|
+
"homepage": "https://github.com/digitaldrreamer/ckb-transaction-firewall#readme",
|
|
60
|
+
"publishConfig": {
|
|
61
|
+
"access": "public"
|
|
62
|
+
}
|
|
63
|
+
}
|