@ckb-ccc/core 0.0.9-alpha.1 → 0.0.10-alpha.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 (42) hide show
  1. package/dist/client/clientPublicMainnet.d.ts.map +1 -1
  2. package/dist/client/clientPublicMainnet.js +1 -1
  3. package/dist/client/clientPublicTestnet.d.ts.map +1 -1
  4. package/dist/client/clientPublicTestnet.js +1 -1
  5. package/dist/signer/ckb/index.d.ts +1 -0
  6. package/dist/signer/ckb/index.d.ts.map +1 -1
  7. package/dist/signer/ckb/index.js +1 -0
  8. package/dist/signer/ckb/signerCkbPrivateKey.d.ts +21 -0
  9. package/dist/signer/ckb/signerCkbPrivateKey.d.ts.map +1 -0
  10. package/dist/signer/ckb/signerCkbPrivateKey.js +65 -0
  11. package/dist/signer/evm/signerEvm.d.ts +2 -1
  12. package/dist/signer/evm/signerEvm.d.ts.map +1 -1
  13. package/dist/signer/evm/signerEvmAddressReadonly.d.ts +2 -2
  14. package/dist/signer/evm/signerEvmAddressReadonly.d.ts.map +1 -1
  15. package/dist/signer/signer/index.d.ts +8 -6
  16. package/dist/signer/signer/index.d.ts.map +1 -1
  17. package/dist/signer/signer/index.js +7 -5
  18. package/dist.commonjs/client/clientPublicMainnet.d.ts.map +1 -1
  19. package/dist.commonjs/client/clientPublicMainnet.js +1 -1
  20. package/dist.commonjs/client/clientPublicTestnet.d.ts.map +1 -1
  21. package/dist.commonjs/client/clientPublicTestnet.js +1 -1
  22. package/dist.commonjs/signer/ckb/index.d.ts +1 -0
  23. package/dist.commonjs/signer/ckb/index.d.ts.map +1 -1
  24. package/dist.commonjs/signer/ckb/index.js +1 -0
  25. package/dist.commonjs/signer/ckb/signerCkbPrivateKey.d.ts +21 -0
  26. package/dist.commonjs/signer/ckb/signerCkbPrivateKey.d.ts.map +1 -0
  27. package/dist.commonjs/signer/ckb/signerCkbPrivateKey.js +69 -0
  28. package/dist.commonjs/signer/evm/signerEvm.d.ts +2 -1
  29. package/dist.commonjs/signer/evm/signerEvm.d.ts.map +1 -1
  30. package/dist.commonjs/signer/evm/signerEvmAddressReadonly.d.ts +2 -2
  31. package/dist.commonjs/signer/evm/signerEvmAddressReadonly.d.ts.map +1 -1
  32. package/dist.commonjs/signer/signer/index.d.ts +8 -6
  33. package/dist.commonjs/signer/signer/index.d.ts.map +1 -1
  34. package/dist.commonjs/signer/signer/index.js +7 -5
  35. package/package.json +2 -2
  36. package/src/client/clientPublicMainnet.ts +1 -1
  37. package/src/client/clientPublicTestnet.ts +1 -1
  38. package/src/signer/ckb/index.ts +1 -0
  39. package/src/signer/ckb/signerCkbPrivateKey.ts +98 -0
  40. package/src/signer/evm/signerEvm.ts +2 -2
  41. package/src/signer/evm/signerEvmAddressReadonly.ts +1 -1
  42. package/src/signer/signer/index.ts +11 -9
@@ -1 +1 @@
1
- {"version":3,"file":"clientPublicMainnet.d.ts","sourceRoot":"","sources":["../../src/client/clientPublicMainnet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEpD,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,qBAAa,mBAAoB,SAAQ,aAAa;gBACxC,GAAG,SAAgC,EAAE,OAAO,CAAC,EAAE,MAAM;IAIjE,IAAI,aAAa,IAAI,MAAM,CAE1B;IAEK,cAAc,CAClB,MAAM,EAAE,WAAW,GAClB,OAAO,CACR,IAAI,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,CAAC,GAAG;QAAE,QAAQ,EAAE,WAAW,EAAE,CAAA;KAAE,CACpE;CAYF"}
1
+ {"version":3,"file":"clientPublicMainnet.d.ts","sourceRoot":"","sources":["../../src/client/clientPublicMainnet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEpD,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,qBAAa,mBAAoB,SAAQ,aAAa;gBACxC,GAAG,SAA6B,EAAE,OAAO,CAAC,EAAE,MAAM;IAI9D,IAAI,aAAa,IAAI,MAAM,CAE1B;IAEK,cAAc,CAClB,MAAM,EAAE,WAAW,GAClB,OAAO,CACR,IAAI,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,CAAC,GAAG;QAAE,QAAQ,EAAE,WAAW,EAAE,CAAA;KAAE,CACpE;CAYF"}
@@ -2,7 +2,7 @@ import { CellDepInfo } from "./client";
2
2
  import { MAINNET_SCRIPTS } from "./clientPublicMainnet.advanced";
3
3
  import { ClientJsonRpc } from "./jsonRpc";
4
4
  export class ClientPublicMainnet extends ClientJsonRpc {
5
- constructor(url = "https://mainnet.ckbapp.dev/", timeout) {
5
+ constructor(url = "https://mainnet.ckb.dev/", timeout) {
6
6
  super(url, timeout);
7
7
  }
8
8
  get addressPrefix() {
@@ -1 +1 @@
1
- {"version":3,"file":"clientPublicTestnet.d.ts","sourceRoot":"","sources":["../../src/client/clientPublicTestnet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEpD,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,qBAAa,mBAAoB,SAAQ,aAAa;gBACxC,GAAG,SAAgC,EAAE,OAAO,CAAC,EAAE,MAAM;IAIjE,IAAI,aAAa,IAAI,MAAM,CAE1B;IAEK,cAAc,CAClB,MAAM,EAAE,WAAW,GAClB,OAAO,CACR,IAAI,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,CAAC,GAAG;QAAE,QAAQ,EAAE,WAAW,EAAE,CAAA;KAAE,CACpE;CAOF"}
1
+ {"version":3,"file":"clientPublicTestnet.d.ts","sourceRoot":"","sources":["../../src/client/clientPublicTestnet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEpD,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,qBAAa,mBAAoB,SAAQ,aAAa;gBACxC,GAAG,SAA6B,EAAE,OAAO,CAAC,EAAE,MAAM;IAI9D,IAAI,aAAa,IAAI,MAAM,CAE1B;IAEK,cAAc,CAClB,MAAM,EAAE,WAAW,GAClB,OAAO,CACR,IAAI,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,CAAC,GAAG;QAAE,QAAQ,EAAE,WAAW,EAAE,CAAA;KAAE,CACpE;CAOF"}
@@ -2,7 +2,7 @@ import { CellDepInfo } from "./client";
2
2
  import { TESTNET_SCRIPTS } from "./clientPublicTestnet.advanced";
3
3
  import { ClientJsonRpc } from "./jsonRpc";
4
4
  export class ClientPublicTestnet extends ClientJsonRpc {
5
- constructor(url = "https://testnet.ckbapp.dev/", timeout) {
5
+ constructor(url = "https://testnet.ckb.dev/", timeout) {
6
6
  super(url, timeout);
7
7
  }
8
8
  get addressPrefix() {
@@ -1,3 +1,4 @@
1
+ export * from "./signerCkbPrivateKey";
1
2
  export * from "./signerCkbScriptReadonly";
2
3
  export * from "./verifyJoyId";
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/signer/ckb/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAC;AAC1C,cAAc,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/signer/ckb/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,eAAe,CAAC"}
@@ -1,2 +1,3 @@
1
+ export * from "./signerCkbPrivateKey";
1
2
  export * from "./signerCkbScriptReadonly";
2
3
  export * from "./verifyJoyId";
@@ -0,0 +1,21 @@
1
+ import { Address } from "../../address";
2
+ import { Bytes, BytesLike } from "../../bytes";
3
+ import { Transaction, TransactionLike } from "../../ckb";
4
+ import { Client } from "../../client";
5
+ import { Hex, HexLike } from "../../hex";
6
+ import { Signer, SignerSignType, SignerType } from "../signer";
7
+ export declare class SignerCkbPrivateKey extends Signer {
8
+ get type(): SignerType;
9
+ get signType(): SignerSignType;
10
+ private readonly privateKey;
11
+ constructor(client: Client, privateKey: HexLike);
12
+ connect(): Promise<void>;
13
+ isConnected(): Promise<boolean>;
14
+ getInternalAddress(): Promise<string>;
15
+ getAddressObjs(): Promise<Address[]>;
16
+ signMessageRaw(message: string | BytesLike): Promise<Hex>;
17
+ getPublicKey(): Bytes;
18
+ prepareTransaction(txLike: TransactionLike): Promise<Transaction>;
19
+ signOnlyTransaction(txLike: TransactionLike): Promise<Transaction>;
20
+ }
21
+ //# sourceMappingURL=signerCkbPrivateKey.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signerCkbPrivateKey.d.ts","sourceRoot":"","sources":["../../../src/signer/ckb/signerCkbPrivateKey.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,KAAK,EAA0B,SAAS,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAe,MAAM,WAAW,CAAC;AACtE,OAAO,EAAE,MAAM,EAAe,MAAM,cAAc,CAAC;AAEnD,OAAO,EAAE,GAAG,EAAW,OAAO,EAAE,MAAM,WAAW,CAAC;AAElD,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE/D,qBAAa,mBAAoB,SAAQ,MAAM;IAC7C,IAAI,IAAI,IAAI,UAAU,CAErB;IAED,IAAI,QAAQ,IAAI,cAAc,CAE7B;IAED,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAM;gBAErB,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO;IASzC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAExB,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAI/B,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC;IAIrC,cAAc,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAWpC,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC;IAgB/D,YAAY,IAAI,KAAK;IAIf,kBAAkB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,WAAW,CAAC;IAWjE,mBAAmB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,WAAW,CAAC;CAezE"}
@@ -0,0 +1,65 @@
1
+ import { secp256k1 } from "@noble/curves/secp256k1";
2
+ import { Address } from "../../address";
3
+ import { bytesConcat, bytesFrom } from "../../bytes";
4
+ import { Transaction, WitnessArgs } from "../../ckb";
5
+ import { KnownScript } from "../../client";
6
+ import { hashCkb } from "../../hasher";
7
+ import { hexFrom } from "../../hex";
8
+ import { numBeToBytes } from "../../num";
9
+ import { Signer, SignerSignType, SignerType } from "../signer";
10
+ export class SignerCkbPrivateKey extends Signer {
11
+ get type() {
12
+ return SignerType.CKB;
13
+ }
14
+ get signType() {
15
+ return SignerSignType.CkbSecp256k1;
16
+ }
17
+ constructor(client, privateKey) {
18
+ super(client);
19
+ this.privateKey = hexFrom(privateKey);
20
+ if (bytesFrom(this.privateKey).length !== 32) {
21
+ throw new Error("Private key must be 32 bytes!");
22
+ }
23
+ }
24
+ async connect() { }
25
+ async isConnected() {
26
+ return true;
27
+ }
28
+ async getInternalAddress() {
29
+ return this.getRecommendedAddress();
30
+ }
31
+ async getAddressObjs() {
32
+ const publicKey = this.getPublicKey();
33
+ return [
34
+ await Address.fromKnownScript(this.client, KnownScript.Secp256k1Blake160, bytesFrom(hashCkb(publicKey)).slice(0, 20)),
35
+ ];
36
+ }
37
+ async signMessageRaw(message) {
38
+ const signature = secp256k1.sign(bytesFrom(message), bytesFrom(this.privateKey));
39
+ const { r, s, recovery } = signature;
40
+ return hexFrom(bytesConcat(numBeToBytes(r, 32), numBeToBytes(s, 32), numBeToBytes(recovery, 1)));
41
+ }
42
+ getPublicKey() {
43
+ return secp256k1.getPublicKey(bytesFrom(this.privateKey), true);
44
+ }
45
+ async prepareTransaction(txLike) {
46
+ const tx = Transaction.from(txLike);
47
+ const { script } = await this.getRecommendedAddressObj();
48
+ await tx.addCellDepsOfKnownScripts(this.client, KnownScript.Secp256k1Blake160);
49
+ await tx.prepareSighashAllWitness(script, 65, this.client);
50
+ return tx;
51
+ }
52
+ async signOnlyTransaction(txLike) {
53
+ const tx = Transaction.from(txLike);
54
+ const { script } = await this.getRecommendedAddressObj();
55
+ const info = await tx.getSignHashInfo(script, this.client);
56
+ if (!info) {
57
+ return tx;
58
+ }
59
+ const signature = await this.signMessageRaw(info.message);
60
+ const witness = tx.getWitnessArgsAt(info.position) ?? WitnessArgs.from({});
61
+ witness.lock = signature;
62
+ tx.setWitnessArgsAt(info.position, witness);
63
+ return tx;
64
+ }
65
+ }
@@ -1,6 +1,7 @@
1
1
  import { Address } from "../../address";
2
2
  import { BytesLike } from "../../bytes";
3
3
  import { Script, Transaction, TransactionLike } from "../../ckb";
4
+ import { Hex } from "../../hex";
4
5
  import { Signer, SignerSignType, SignerType } from "../signer";
5
6
  /**
6
7
  * An abstract class extending Signer for Ethereum Virtual Machine (EVM) based signing operations.
@@ -14,7 +15,7 @@ export declare abstract class SignerEvm extends Signer {
14
15
  *
15
16
  * @returns A promise that resolves to a string representing the EVM account.
16
17
  */
17
- abstract getEvmAccount(): Promise<string>;
18
+ abstract getEvmAccount(): Promise<Hex>;
18
19
  /**
19
20
  * Gets the internal address, which is the EVM account in this case.
20
21
  *
@@ -1 +1 @@
1
- {"version":3,"file":"signerEvm.d.ts","sourceRoot":"","sources":["../../../src/signer/evm/signerEvm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,SAAS,EAA0B,MAAM,aAAa,CAAC;AAChE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,eAAe,EAAe,MAAM,WAAW,CAAC;AAK9E,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE/D;;;GAGG;AACH,8BAAsB,SAAU,SAAQ,MAAM;IAC5C,IAAI,IAAI,IAAI,UAAU,CAErB;IAED,IAAI,QAAQ,IAAI,cAAc,CAE7B;IAED;;;;OAIG;IACH,QAAQ,CAAC,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC;IAEzC;;;;OAIG;IACG,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC;IAI3C;;;;OAIG;IACG,cAAc,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAQpC,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAQ5D,4BAA4B,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAQrE;;;;;OAKG;IACG,kBAAkB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,WAAW,CAAC;IAWvE;;;;;OAKG;IACG,mBAAmB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,WAAW,CAAC;IAsBlE,iCAAiC,CACrC,EAAE,EAAE,WAAW,EACf,MAAM,EAAE,MAAM,EACd,kBAAkB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,SAAS,GAC9C,OAAO,CAAC,WAAW,CAAC;CA6BxB"}
1
+ {"version":3,"file":"signerEvm.d.ts","sourceRoot":"","sources":["../../../src/signer/evm/signerEvm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,SAAS,EAA0B,MAAM,aAAa,CAAC;AAChE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,eAAe,EAAe,MAAM,WAAW,CAAC;AAE9E,OAAO,EAAE,GAAG,EAAW,MAAM,WAAW,CAAC;AAGzC,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE/D;;;GAGG;AACH,8BAAsB,SAAU,SAAQ,MAAM;IAC5C,IAAI,IAAI,IAAI,UAAU,CAErB;IAED,IAAI,QAAQ,IAAI,cAAc,CAE7B;IAED;;;;OAIG;IACH,QAAQ,CAAC,aAAa,IAAI,OAAO,CAAC,GAAG,CAAC;IAEtC;;;;OAIG;IACG,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC;IAI3C;;;;OAIG;IACG,cAAc,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAQpC,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAQ5D,4BAA4B,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAQrE;;;;;OAKG;IACG,kBAAkB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,WAAW,CAAC;IAWvE;;;;;OAKG;IACG,mBAAmB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,WAAW,CAAC;IAsBlE,iCAAiC,CACrC,EAAE,EAAE,WAAW,EACf,MAAM,EAAE,MAAM,EACd,kBAAkB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,SAAS,GAC9C,OAAO,CAAC,WAAW,CAAC;CA6BxB"}
@@ -1,5 +1,5 @@
1
1
  import { Client } from "../../client";
2
- import { HexLike } from "../../hex";
2
+ import { Hex, HexLike } from "../../hex";
3
3
  import { SignerEvm } from "./signerEvm";
4
4
  /**
5
5
  * A class extending SignerEvm that provides read-only access to an EVM address.
@@ -41,6 +41,6 @@ export declare class SignerEvmAddressReadonly extends SignerEvm {
41
41
  * const account = await signer.getEvmAccount(); // Outputs the EVM account
42
42
  * ```
43
43
  */
44
- getEvmAccount(): Promise<string>;
44
+ getEvmAccount(): Promise<Hex>;
45
45
  }
46
46
  //# sourceMappingURL=signerEvmAddressReadonly.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"signerEvmAddressReadonly.d.ts","sourceRoot":"","sources":["../../../src/signer/evm/signerEvmAddressReadonly.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAO,OAAO,EAAW,MAAM,WAAW,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC;;;GAGG;AACH,qBAAa,wBAAyB,SAAQ,SAAS;IACrD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAM;IAE9B;;;;;OAKG;gBACS,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO;IAM5C;;;;;;;;;OASG;IAEG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAE9B;;;;OAIG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAIrC;;;;;;;;;OASG;IACG,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC;CAGvC"}
1
+ {"version":3,"file":"signerEvmAddressReadonly.d.ts","sourceRoot":"","sources":["../../../src/signer/evm/signerEvmAddressReadonly.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,GAAG,EAAE,OAAO,EAAW,MAAM,WAAW,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC;;;GAGG;AACH,qBAAa,wBAAyB,SAAQ,SAAS;IACrD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAM;IAE9B;;;;;OAKG;gBACS,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO;IAM5C;;;;;;;;;OASG;IAEG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAE9B;;;;OAIG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAIrC;;;;;;;;;OASG;IACG,aAAa,IAAI,OAAO,CAAC,GAAG,CAAC;CAGpC"}
@@ -9,7 +9,8 @@ export declare enum SignerSignType {
9
9
  BtcEcdsa = "BtcEcdsa",
10
10
  EvmPersonal = "EvmPersonal",
11
11
  JoyId = "JoyId",
12
- NostrEvent = "NostrEvent"
12
+ NostrEvent = "NostrEvent",
13
+ CkbSecp256k1 = "CkbSecp256k1"
13
14
  }
14
15
  /**
15
16
  * An enumeration of signer display types in wallet.
@@ -43,17 +44,18 @@ export declare abstract class Signer {
43
44
  get client(): Client;
44
45
  matchNetworkPreference(preferences: NetworkPreference[], currentNetwork: string): NetworkPreference | undefined;
45
46
  static verifyMessage(message: string | BytesLike, signature: Signature): Promise<boolean>;
46
- /**
47
- * Replace the current client.
48
- * returns false if the new client is invalid for this signer.
49
- */
50
- replaceClient(client: Client): Promise<boolean>;
51
47
  /**
52
48
  * Connects to the signer.
53
49
  *
54
50
  * @returns A promise that resolves when the connection is complete.
55
51
  */
56
52
  abstract connect(): Promise<void>;
53
+ /**
54
+ * Register a listener to be called when this signer is replaced.
55
+ *
56
+ * @returns A function for unregister
57
+ */
58
+ onReplaced(_: () => void): () => void;
57
59
  /**
58
60
  * Disconnects to the signer.
59
61
  *
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/signer/signer/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/signer/signer/index.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,7 @@ export var SignerSignType;
9
9
  SignerSignType["EvmPersonal"] = "EvmPersonal";
10
10
  SignerSignType["JoyId"] = "JoyId";
11
11
  SignerSignType["NostrEvent"] = "NostrEvent";
12
+ SignerSignType["CkbSecp256k1"] = "CkbSecp256k1";
12
13
  })(SignerSignType || (SignerSignType = {}));
13
14
  /**
14
15
  * An enumeration of signer display types in wallet.
@@ -60,17 +61,18 @@ export class Signer {
60
61
  return verifyMessageJoyId(message, signature.signature, signature.identity);
61
62
  case SignerSignType.NostrEvent:
62
63
  return verifyMessageNostrEvent(message, signature.signature, signature.identity);
64
+ case SignerSignType.CkbSecp256k1:
63
65
  case SignerSignType.Unknown:
64
66
  throw new Error("Unknown signer sign type");
65
67
  }
66
68
  }
67
69
  /**
68
- * Replace the current client.
69
- * returns false if the new client is invalid for this signer.
70
+ * Register a listener to be called when this signer is replaced.
71
+ *
72
+ * @returns A function for unregister
70
73
  */
71
- async replaceClient(client) {
72
- this.client_ = client;
73
- return true;
74
+ onReplaced(_) {
75
+ return () => { };
74
76
  }
75
77
  /**
76
78
  * Disconnects to the signer.
@@ -1 +1 @@
1
- {"version":3,"file":"clientPublicMainnet.d.ts","sourceRoot":"","sources":["../../src/client/clientPublicMainnet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEpD,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,qBAAa,mBAAoB,SAAQ,aAAa;gBACxC,GAAG,SAAgC,EAAE,OAAO,CAAC,EAAE,MAAM;IAIjE,IAAI,aAAa,IAAI,MAAM,CAE1B;IAEK,cAAc,CAClB,MAAM,EAAE,WAAW,GAClB,OAAO,CACR,IAAI,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,CAAC,GAAG;QAAE,QAAQ,EAAE,WAAW,EAAE,CAAA;KAAE,CACpE;CAYF"}
1
+ {"version":3,"file":"clientPublicMainnet.d.ts","sourceRoot":"","sources":["../../src/client/clientPublicMainnet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEpD,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,qBAAa,mBAAoB,SAAQ,aAAa;gBACxC,GAAG,SAA6B,EAAE,OAAO,CAAC,EAAE,MAAM;IAI9D,IAAI,aAAa,IAAI,MAAM,CAE1B;IAEK,cAAc,CAClB,MAAM,EAAE,WAAW,GAClB,OAAO,CACR,IAAI,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,CAAC,GAAG;QAAE,QAAQ,EAAE,WAAW,EAAE,CAAA;KAAE,CACpE;CAYF"}
@@ -5,7 +5,7 @@ const client_1 = require("./client");
5
5
  const clientPublicMainnet_advanced_1 = require("./clientPublicMainnet.advanced");
6
6
  const jsonRpc_1 = require("./jsonRpc");
7
7
  class ClientPublicMainnet extends jsonRpc_1.ClientJsonRpc {
8
- constructor(url = "https://mainnet.ckbapp.dev/", timeout) {
8
+ constructor(url = "https://mainnet.ckb.dev/", timeout) {
9
9
  super(url, timeout);
10
10
  }
11
11
  get addressPrefix() {
@@ -1 +1 @@
1
- {"version":3,"file":"clientPublicTestnet.d.ts","sourceRoot":"","sources":["../../src/client/clientPublicTestnet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEpD,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,qBAAa,mBAAoB,SAAQ,aAAa;gBACxC,GAAG,SAAgC,EAAE,OAAO,CAAC,EAAE,MAAM;IAIjE,IAAI,aAAa,IAAI,MAAM,CAE1B;IAEK,cAAc,CAClB,MAAM,EAAE,WAAW,GAClB,OAAO,CACR,IAAI,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,CAAC,GAAG;QAAE,QAAQ,EAAE,WAAW,EAAE,CAAA;KAAE,CACpE;CAOF"}
1
+ {"version":3,"file":"clientPublicTestnet.d.ts","sourceRoot":"","sources":["../../src/client/clientPublicTestnet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEpD,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,qBAAa,mBAAoB,SAAQ,aAAa;gBACxC,GAAG,SAA6B,EAAE,OAAO,CAAC,EAAE,MAAM;IAI9D,IAAI,aAAa,IAAI,MAAM,CAE1B;IAEK,cAAc,CAClB,MAAM,EAAE,WAAW,GAClB,OAAO,CACR,IAAI,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,CAAC,GAAG;QAAE,QAAQ,EAAE,WAAW,EAAE,CAAA;KAAE,CACpE;CAOF"}
@@ -5,7 +5,7 @@ const client_1 = require("./client");
5
5
  const clientPublicTestnet_advanced_1 = require("./clientPublicTestnet.advanced");
6
6
  const jsonRpc_1 = require("./jsonRpc");
7
7
  class ClientPublicTestnet extends jsonRpc_1.ClientJsonRpc {
8
- constructor(url = "https://testnet.ckbapp.dev/", timeout) {
8
+ constructor(url = "https://testnet.ckb.dev/", timeout) {
9
9
  super(url, timeout);
10
10
  }
11
11
  get addressPrefix() {
@@ -1,3 +1,4 @@
1
+ export * from "./signerCkbPrivateKey";
1
2
  export * from "./signerCkbScriptReadonly";
2
3
  export * from "./verifyJoyId";
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/signer/ckb/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAC;AAC1C,cAAc,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/signer/ckb/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,eAAe,CAAC"}
@@ -14,5 +14,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./signerCkbPrivateKey"), exports);
17
18
  __exportStar(require("./signerCkbScriptReadonly"), exports);
18
19
  __exportStar(require("./verifyJoyId"), exports);
@@ -0,0 +1,21 @@
1
+ import { Address } from "../../address";
2
+ import { Bytes, BytesLike } from "../../bytes";
3
+ import { Transaction, TransactionLike } from "../../ckb";
4
+ import { Client } from "../../client";
5
+ import { Hex, HexLike } from "../../hex";
6
+ import { Signer, SignerSignType, SignerType } from "../signer";
7
+ export declare class SignerCkbPrivateKey extends Signer {
8
+ get type(): SignerType;
9
+ get signType(): SignerSignType;
10
+ private readonly privateKey;
11
+ constructor(client: Client, privateKey: HexLike);
12
+ connect(): Promise<void>;
13
+ isConnected(): Promise<boolean>;
14
+ getInternalAddress(): Promise<string>;
15
+ getAddressObjs(): Promise<Address[]>;
16
+ signMessageRaw(message: string | BytesLike): Promise<Hex>;
17
+ getPublicKey(): Bytes;
18
+ prepareTransaction(txLike: TransactionLike): Promise<Transaction>;
19
+ signOnlyTransaction(txLike: TransactionLike): Promise<Transaction>;
20
+ }
21
+ //# sourceMappingURL=signerCkbPrivateKey.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signerCkbPrivateKey.d.ts","sourceRoot":"","sources":["../../../src/signer/ckb/signerCkbPrivateKey.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,KAAK,EAA0B,SAAS,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAe,MAAM,WAAW,CAAC;AACtE,OAAO,EAAE,MAAM,EAAe,MAAM,cAAc,CAAC;AAEnD,OAAO,EAAE,GAAG,EAAW,OAAO,EAAE,MAAM,WAAW,CAAC;AAElD,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE/D,qBAAa,mBAAoB,SAAQ,MAAM;IAC7C,IAAI,IAAI,IAAI,UAAU,CAErB;IAED,IAAI,QAAQ,IAAI,cAAc,CAE7B;IAED,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAM;gBAErB,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO;IASzC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAExB,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAI/B,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC;IAIrC,cAAc,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAWpC,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC;IAgB/D,YAAY,IAAI,KAAK;IAIf,kBAAkB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,WAAW,CAAC;IAWjE,mBAAmB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,WAAW,CAAC;CAezE"}
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SignerCkbPrivateKey = void 0;
4
+ const secp256k1_1 = require("@noble/curves/secp256k1");
5
+ const address_1 = require("../../address");
6
+ const bytes_1 = require("../../bytes");
7
+ const ckb_1 = require("../../ckb");
8
+ const client_1 = require("../../client");
9
+ const hasher_1 = require("../../hasher");
10
+ const hex_1 = require("../../hex");
11
+ const num_1 = require("../../num");
12
+ const signer_1 = require("../signer");
13
+ class SignerCkbPrivateKey extends signer_1.Signer {
14
+ get type() {
15
+ return signer_1.SignerType.CKB;
16
+ }
17
+ get signType() {
18
+ return signer_1.SignerSignType.CkbSecp256k1;
19
+ }
20
+ constructor(client, privateKey) {
21
+ super(client);
22
+ this.privateKey = (0, hex_1.hexFrom)(privateKey);
23
+ if ((0, bytes_1.bytesFrom)(this.privateKey).length !== 32) {
24
+ throw new Error("Private key must be 32 bytes!");
25
+ }
26
+ }
27
+ async connect() { }
28
+ async isConnected() {
29
+ return true;
30
+ }
31
+ async getInternalAddress() {
32
+ return this.getRecommendedAddress();
33
+ }
34
+ async getAddressObjs() {
35
+ const publicKey = this.getPublicKey();
36
+ return [
37
+ await address_1.Address.fromKnownScript(this.client, client_1.KnownScript.Secp256k1Blake160, (0, bytes_1.bytesFrom)((0, hasher_1.hashCkb)(publicKey)).slice(0, 20)),
38
+ ];
39
+ }
40
+ async signMessageRaw(message) {
41
+ const signature = secp256k1_1.secp256k1.sign((0, bytes_1.bytesFrom)(message), (0, bytes_1.bytesFrom)(this.privateKey));
42
+ const { r, s, recovery } = signature;
43
+ return (0, hex_1.hexFrom)((0, bytes_1.bytesConcat)((0, num_1.numBeToBytes)(r, 32), (0, num_1.numBeToBytes)(s, 32), (0, num_1.numBeToBytes)(recovery, 1)));
44
+ }
45
+ getPublicKey() {
46
+ return secp256k1_1.secp256k1.getPublicKey((0, bytes_1.bytesFrom)(this.privateKey), true);
47
+ }
48
+ async prepareTransaction(txLike) {
49
+ const tx = ckb_1.Transaction.from(txLike);
50
+ const { script } = await this.getRecommendedAddressObj();
51
+ await tx.addCellDepsOfKnownScripts(this.client, client_1.KnownScript.Secp256k1Blake160);
52
+ await tx.prepareSighashAllWitness(script, 65, this.client);
53
+ return tx;
54
+ }
55
+ async signOnlyTransaction(txLike) {
56
+ const tx = ckb_1.Transaction.from(txLike);
57
+ const { script } = await this.getRecommendedAddressObj();
58
+ const info = await tx.getSignHashInfo(script, this.client);
59
+ if (!info) {
60
+ return tx;
61
+ }
62
+ const signature = await this.signMessageRaw(info.message);
63
+ const witness = tx.getWitnessArgsAt(info.position) ?? ckb_1.WitnessArgs.from({});
64
+ witness.lock = signature;
65
+ tx.setWitnessArgsAt(info.position, witness);
66
+ return tx;
67
+ }
68
+ }
69
+ exports.SignerCkbPrivateKey = SignerCkbPrivateKey;
@@ -1,6 +1,7 @@
1
1
  import { Address } from "../../address";
2
2
  import { BytesLike } from "../../bytes";
3
3
  import { Script, Transaction, TransactionLike } from "../../ckb";
4
+ import { Hex } from "../../hex";
4
5
  import { Signer, SignerSignType, SignerType } from "../signer";
5
6
  /**
6
7
  * An abstract class extending Signer for Ethereum Virtual Machine (EVM) based signing operations.
@@ -14,7 +15,7 @@ export declare abstract class SignerEvm extends Signer {
14
15
  *
15
16
  * @returns A promise that resolves to a string representing the EVM account.
16
17
  */
17
- abstract getEvmAccount(): Promise<string>;
18
+ abstract getEvmAccount(): Promise<Hex>;
18
19
  /**
19
20
  * Gets the internal address, which is the EVM account in this case.
20
21
  *
@@ -1 +1 @@
1
- {"version":3,"file":"signerEvm.d.ts","sourceRoot":"","sources":["../../../src/signer/evm/signerEvm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,SAAS,EAA0B,MAAM,aAAa,CAAC;AAChE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,eAAe,EAAe,MAAM,WAAW,CAAC;AAK9E,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE/D;;;GAGG;AACH,8BAAsB,SAAU,SAAQ,MAAM;IAC5C,IAAI,IAAI,IAAI,UAAU,CAErB;IAED,IAAI,QAAQ,IAAI,cAAc,CAE7B;IAED;;;;OAIG;IACH,QAAQ,CAAC,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC;IAEzC;;;;OAIG;IACG,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC;IAI3C;;;;OAIG;IACG,cAAc,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAQpC,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAQ5D,4BAA4B,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAQrE;;;;;OAKG;IACG,kBAAkB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,WAAW,CAAC;IAWvE;;;;;OAKG;IACG,mBAAmB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,WAAW,CAAC;IAsBlE,iCAAiC,CACrC,EAAE,EAAE,WAAW,EACf,MAAM,EAAE,MAAM,EACd,kBAAkB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,SAAS,GAC9C,OAAO,CAAC,WAAW,CAAC;CA6BxB"}
1
+ {"version":3,"file":"signerEvm.d.ts","sourceRoot":"","sources":["../../../src/signer/evm/signerEvm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,SAAS,EAA0B,MAAM,aAAa,CAAC;AAChE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,eAAe,EAAe,MAAM,WAAW,CAAC;AAE9E,OAAO,EAAE,GAAG,EAAW,MAAM,WAAW,CAAC;AAGzC,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE/D;;;GAGG;AACH,8BAAsB,SAAU,SAAQ,MAAM;IAC5C,IAAI,IAAI,IAAI,UAAU,CAErB;IAED,IAAI,QAAQ,IAAI,cAAc,CAE7B;IAED;;;;OAIG;IACH,QAAQ,CAAC,aAAa,IAAI,OAAO,CAAC,GAAG,CAAC;IAEtC;;;;OAIG;IACG,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC;IAI3C;;;;OAIG;IACG,cAAc,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAQpC,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAQ5D,4BAA4B,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAQrE;;;;;OAKG;IACG,kBAAkB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,WAAW,CAAC;IAWvE;;;;;OAKG;IACG,mBAAmB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,WAAW,CAAC;IAsBlE,iCAAiC,CACrC,EAAE,EAAE,WAAW,EACf,MAAM,EAAE,MAAM,EACd,kBAAkB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,SAAS,GAC9C,OAAO,CAAC,WAAW,CAAC;CA6BxB"}
@@ -1,5 +1,5 @@
1
1
  import { Client } from "../../client";
2
- import { HexLike } from "../../hex";
2
+ import { Hex, HexLike } from "../../hex";
3
3
  import { SignerEvm } from "./signerEvm";
4
4
  /**
5
5
  * A class extending SignerEvm that provides read-only access to an EVM address.
@@ -41,6 +41,6 @@ export declare class SignerEvmAddressReadonly extends SignerEvm {
41
41
  * const account = await signer.getEvmAccount(); // Outputs the EVM account
42
42
  * ```
43
43
  */
44
- getEvmAccount(): Promise<string>;
44
+ getEvmAccount(): Promise<Hex>;
45
45
  }
46
46
  //# sourceMappingURL=signerEvmAddressReadonly.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"signerEvmAddressReadonly.d.ts","sourceRoot":"","sources":["../../../src/signer/evm/signerEvmAddressReadonly.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAO,OAAO,EAAW,MAAM,WAAW,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC;;;GAGG;AACH,qBAAa,wBAAyB,SAAQ,SAAS;IACrD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAM;IAE9B;;;;;OAKG;gBACS,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO;IAM5C;;;;;;;;;OASG;IAEG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAE9B;;;;OAIG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAIrC;;;;;;;;;OASG;IACG,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC;CAGvC"}
1
+ {"version":3,"file":"signerEvmAddressReadonly.d.ts","sourceRoot":"","sources":["../../../src/signer/evm/signerEvmAddressReadonly.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,GAAG,EAAE,OAAO,EAAW,MAAM,WAAW,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC;;;GAGG;AACH,qBAAa,wBAAyB,SAAQ,SAAS;IACrD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAM;IAE9B;;;;;OAKG;gBACS,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO;IAM5C;;;;;;;;;OASG;IAEG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAE9B;;;;OAIG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAIrC;;;;;;;;;OASG;IACG,aAAa,IAAI,OAAO,CAAC,GAAG,CAAC;CAGpC"}
@@ -9,7 +9,8 @@ export declare enum SignerSignType {
9
9
  BtcEcdsa = "BtcEcdsa",
10
10
  EvmPersonal = "EvmPersonal",
11
11
  JoyId = "JoyId",
12
- NostrEvent = "NostrEvent"
12
+ NostrEvent = "NostrEvent",
13
+ CkbSecp256k1 = "CkbSecp256k1"
13
14
  }
14
15
  /**
15
16
  * An enumeration of signer display types in wallet.
@@ -43,17 +44,18 @@ export declare abstract class Signer {
43
44
  get client(): Client;
44
45
  matchNetworkPreference(preferences: NetworkPreference[], currentNetwork: string): NetworkPreference | undefined;
45
46
  static verifyMessage(message: string | BytesLike, signature: Signature): Promise<boolean>;
46
- /**
47
- * Replace the current client.
48
- * returns false if the new client is invalid for this signer.
49
- */
50
- replaceClient(client: Client): Promise<boolean>;
51
47
  /**
52
48
  * Connects to the signer.
53
49
  *
54
50
  * @returns A promise that resolves when the connection is complete.
55
51
  */
56
52
  abstract connect(): Promise<void>;
53
+ /**
54
+ * Register a listener to be called when this signer is replaced.
55
+ *
56
+ * @returns A function for unregister
57
+ */
58
+ onReplaced(_: () => void): () => void;
57
59
  /**
58
60
  * Disconnects to the signer.
59
61
  *
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/signer/signer/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/signer/signer/index.ts"],"names":[],"mappings":"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"}
@@ -12,6 +12,7 @@ var SignerSignType;
12
12
  SignerSignType["EvmPersonal"] = "EvmPersonal";
13
13
  SignerSignType["JoyId"] = "JoyId";
14
14
  SignerSignType["NostrEvent"] = "NostrEvent";
15
+ SignerSignType["CkbSecp256k1"] = "CkbSecp256k1";
15
16
  })(SignerSignType || (exports.SignerSignType = SignerSignType = {}));
16
17
  /**
17
18
  * An enumeration of signer display types in wallet.
@@ -64,17 +65,18 @@ class Signer {
64
65
  return (0, verifyJoyId_1.verifyMessageJoyId)(message, signature.signature, signature.identity);
65
66
  case SignerSignType.NostrEvent:
66
67
  return (0, verify_2.verifyMessageNostrEvent)(message, signature.signature, signature.identity);
68
+ case SignerSignType.CkbSecp256k1:
67
69
  case SignerSignType.Unknown:
68
70
  throw new Error("Unknown signer sign type");
69
71
  }
70
72
  }
71
73
  /**
72
- * Replace the current client.
73
- * returns false if the new client is invalid for this signer.
74
+ * Register a listener to be called when this signer is replaced.
75
+ *
76
+ * @returns A function for unregister
74
77
  */
75
- async replaceClient(client) {
76
- this.client_ = client;
77
- return true;
78
+ onReplaced(_) {
79
+ return () => { };
78
80
  }
79
81
  /**
80
82
  * Disconnects to the signer.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ckb-ccc/core",
3
- "version": "0.0.9-alpha.1",
3
+ "version": "0.0.10-alpha.0",
4
4
  "description": "Core of CCC - CKBer's Codebase",
5
5
  "author": "Hanssen0 <hanssen0@hanssen0.com>",
6
6
  "license": "MIT",
@@ -68,5 +68,5 @@
68
68
  "cross-fetch": "^4.0.0",
69
69
  "ethers": "^6.13.1"
70
70
  },
71
- "gitHead": "d708cbabd48a160d7608a0b86093b16f35451f79"
71
+ "gitHead": "8a4c789419f5e12e1f230cead213c59373834a1a"
72
72
  }
@@ -4,7 +4,7 @@ import { MAINNET_SCRIPTS } from "./clientPublicMainnet.advanced";
4
4
  import { ClientJsonRpc } from "./jsonRpc";
5
5
 
6
6
  export class ClientPublicMainnet extends ClientJsonRpc {
7
- constructor(url = "https://mainnet.ckbapp.dev/", timeout?: number) {
7
+ constructor(url = "https://mainnet.ckb.dev/", timeout?: number) {
8
8
  super(url, timeout);
9
9
  }
10
10
 
@@ -4,7 +4,7 @@ import { TESTNET_SCRIPTS } from "./clientPublicTestnet.advanced";
4
4
  import { ClientJsonRpc } from "./jsonRpc";
5
5
 
6
6
  export class ClientPublicTestnet extends ClientJsonRpc {
7
- constructor(url = "https://testnet.ckbapp.dev/", timeout?: number) {
7
+ constructor(url = "https://testnet.ckb.dev/", timeout?: number) {
8
8
  super(url, timeout);
9
9
  }
10
10
 
@@ -1,2 +1,3 @@
1
+ export * from "./signerCkbPrivateKey";
1
2
  export * from "./signerCkbScriptReadonly";
2
3
  export * from "./verifyJoyId";
@@ -0,0 +1,98 @@
1
+ import { secp256k1 } from "@noble/curves/secp256k1";
2
+ import { Address } from "../../address";
3
+ import { Bytes, bytesConcat, bytesFrom, BytesLike } from "../../bytes";
4
+ import { Transaction, TransactionLike, WitnessArgs } from "../../ckb";
5
+ import { Client, KnownScript } from "../../client";
6
+ import { hashCkb } from "../../hasher";
7
+ import { Hex, hexFrom, HexLike } from "../../hex";
8
+ import { numBeToBytes } from "../../num";
9
+ import { Signer, SignerSignType, SignerType } from "../signer";
10
+
11
+ export class SignerCkbPrivateKey extends Signer {
12
+ get type(): SignerType {
13
+ return SignerType.CKB;
14
+ }
15
+
16
+ get signType(): SignerSignType {
17
+ return SignerSignType.CkbSecp256k1;
18
+ }
19
+
20
+ private readonly privateKey: Hex;
21
+
22
+ constructor(client: Client, privateKey: HexLike) {
23
+ super(client);
24
+ this.privateKey = hexFrom(privateKey);
25
+
26
+ if (bytesFrom(this.privateKey).length !== 32) {
27
+ throw new Error("Private key must be 32 bytes!");
28
+ }
29
+ }
30
+
31
+ async connect(): Promise<void> {}
32
+
33
+ async isConnected(): Promise<boolean> {
34
+ return true;
35
+ }
36
+
37
+ async getInternalAddress(): Promise<string> {
38
+ return this.getRecommendedAddress();
39
+ }
40
+
41
+ async getAddressObjs(): Promise<Address[]> {
42
+ const publicKey = this.getPublicKey();
43
+ return [
44
+ await Address.fromKnownScript(
45
+ this.client,
46
+ KnownScript.Secp256k1Blake160,
47
+ bytesFrom(hashCkb(publicKey)).slice(0, 20),
48
+ ),
49
+ ];
50
+ }
51
+
52
+ async signMessageRaw(message: string | BytesLike): Promise<Hex> {
53
+ const signature = secp256k1.sign(
54
+ bytesFrom(message),
55
+ bytesFrom(this.privateKey),
56
+ );
57
+ const { r, s, recovery } = signature;
58
+
59
+ return hexFrom(
60
+ bytesConcat(
61
+ numBeToBytes(r, 32),
62
+ numBeToBytes(s, 32),
63
+ numBeToBytes(recovery, 1),
64
+ ),
65
+ );
66
+ }
67
+
68
+ getPublicKey(): Bytes {
69
+ return secp256k1.getPublicKey(bytesFrom(this.privateKey), true);
70
+ }
71
+
72
+ async prepareTransaction(txLike: TransactionLike): Promise<Transaction> {
73
+ const tx = Transaction.from(txLike);
74
+ const { script } = await this.getRecommendedAddressObj();
75
+ await tx.addCellDepsOfKnownScripts(
76
+ this.client,
77
+ KnownScript.Secp256k1Blake160,
78
+ );
79
+ await tx.prepareSighashAllWitness(script, 65, this.client);
80
+ return tx;
81
+ }
82
+
83
+ async signOnlyTransaction(txLike: TransactionLike): Promise<Transaction> {
84
+ const tx = Transaction.from(txLike);
85
+ const { script } = await this.getRecommendedAddressObj();
86
+ const info = await tx.getSignHashInfo(script, this.client);
87
+ if (!info) {
88
+ return tx;
89
+ }
90
+
91
+ const signature = await this.signMessageRaw(info.message);
92
+
93
+ const witness = tx.getWitnessArgsAt(info.position) ?? WitnessArgs.from({});
94
+ witness.lock = signature;
95
+ tx.setWitnessArgsAt(info.position, witness);
96
+ return tx;
97
+ }
98
+ }
@@ -2,7 +2,7 @@ import { Address } from "../../address";
2
2
  import { BytesLike, bytesConcat, bytesFrom } from "../../bytes";
3
3
  import { Script, Transaction, TransactionLike, WitnessArgs } from "../../ckb";
4
4
  import { KnownScript } from "../../client";
5
- import { hexFrom } from "../../hex";
5
+ import { Hex, hexFrom } from "../../hex";
6
6
  import { numToBytes } from "../../num";
7
7
  import { reduceAsync } from "../../utils";
8
8
  import { Signer, SignerSignType, SignerType } from "../signer";
@@ -25,7 +25,7 @@ export abstract class SignerEvm extends Signer {
25
25
  *
26
26
  * @returns A promise that resolves to a string representing the EVM account.
27
27
  */
28
- abstract getEvmAccount(): Promise<string>;
28
+ abstract getEvmAccount(): Promise<Hex>;
29
29
 
30
30
  /**
31
31
  * Gets the internal address, which is the EVM account in this case.
@@ -53,7 +53,7 @@ export class SignerEvmAddressReadonly extends SignerEvm {
53
53
  * const account = await signer.getEvmAccount(); // Outputs the EVM account
54
54
  * ```
55
55
  */
56
- async getEvmAccount(): Promise<string> {
56
+ async getEvmAccount(): Promise<Hex> {
57
57
  return this.address;
58
58
  }
59
59
  }
@@ -15,6 +15,7 @@ export enum SignerSignType {
15
15
  EvmPersonal = "EvmPersonal",
16
16
  JoyId = "JoyId",
17
17
  NostrEvent = "NostrEvent",
18
+ CkbSecp256k1 = "CkbSecp256k1",
18
19
  }
19
20
 
20
21
  /**
@@ -116,20 +117,12 @@ export abstract class Signer {
116
117
  signature.signature,
117
118
  signature.identity,
118
119
  );
120
+ case SignerSignType.CkbSecp256k1:
119
121
  case SignerSignType.Unknown:
120
122
  throw new Error("Unknown signer sign type");
121
123
  }
122
124
  }
123
125
 
124
- /**
125
- * Replace the current client.
126
- * returns false if the new client is invalid for this signer.
127
- */
128
- async replaceClient(client: Client): Promise<boolean> {
129
- this.client_ = client;
130
- return true;
131
- }
132
-
133
126
  /**
134
127
  * Connects to the signer.
135
128
  *
@@ -137,6 +130,15 @@ export abstract class Signer {
137
130
  */
138
131
  abstract connect(): Promise<void>;
139
132
 
133
+ /**
134
+ * Register a listener to be called when this signer is replaced.
135
+ *
136
+ * @returns A function for unregister
137
+ */
138
+ onReplaced(_: () => void): () => void {
139
+ return () => {};
140
+ }
141
+
140
142
  /**
141
143
  * Disconnects to the signer.
142
144
  *