@ckb-ccc/core 0.0.11-alpha.2 → 0.0.12-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.
- package/dist/address/index.d.ts.map +1 -1
- package/dist/ckb/script.d.ts +1 -5
- package/dist/ckb/script.d.ts.map +1 -1
- package/dist/ckb/transaction.d.ts +32 -39
- package/dist/ckb/transaction.d.ts.map +1 -1
- package/dist/ckb/transaction.js +58 -16
- package/dist/client/client.advanced.d.ts.map +1 -1
- package/dist/client/client.d.ts +1 -0
- package/dist/client/client.d.ts.map +1 -1
- package/dist/client/client.js +10 -4
- package/dist/client/clientPublicMainnet.advanced.d.ts.map +1 -1
- package/dist/client/clientPublicMainnet.advanced.js +22 -2
- package/dist/client/clientPublicMainnet.d.ts +4 -1
- package/dist/client/clientPublicMainnet.d.ts.map +1 -1
- package/dist/client/clientPublicMainnet.js +3 -2
- package/dist/client/clientPublicTestnet.advanced.d.ts.map +1 -1
- package/dist/client/clientPublicTestnet.advanced.js +22 -2
- package/dist/client/clientPublicTestnet.d.ts +4 -1
- package/dist/client/clientPublicTestnet.d.ts.map +1 -1
- package/dist/client/clientPublicTestnet.js +3 -2
- package/dist/client/jsonRpc/index.d.ts.map +1 -1
- package/dist/fixedPoint/index.d.ts +2 -2
- package/dist/fixedPoint/index.d.ts.map +1 -1
- package/dist/hasher/hasher.d.ts +32 -0
- package/dist/hasher/hasher.d.ts.map +1 -0
- package/dist/hasher/hasher.js +1 -0
- package/dist/hasher/hasherCkb.d.ts +68 -0
- package/dist/hasher/hasherCkb.d.ts.map +1 -0
- package/dist/hasher/hasherCkb.js +83 -0
- package/dist/hasher/hasherKeecak256.d.ts +38 -0
- package/dist/hasher/hasherKeecak256.d.ts.map +1 -0
- package/dist/hasher/hasherKeecak256.js +43 -0
- package/dist/hasher/index.d.ts +3 -66
- package/dist/hasher/index.d.ts.map +1 -1
- package/dist/hasher/index.js +3 -79
- package/dist/keystore/index.d.ts +2 -2
- package/dist/keystore/index.d.ts.map +1 -1
- package/dist/signer/evm/signerEvm.d.ts +13 -4
- package/dist/signer/evm/signerEvm.d.ts.map +1 -1
- package/dist/signer/evm/signerEvm.js +63 -11
- package/dist/signer/signer/index.d.ts.map +1 -1
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist.commonjs/address/index.d.ts.map +1 -1
- package/dist.commonjs/ckb/script.d.ts +1 -5
- package/dist.commonjs/ckb/script.d.ts.map +1 -1
- package/dist.commonjs/ckb/transaction.d.ts +32 -39
- package/dist.commonjs/ckb/transaction.d.ts.map +1 -1
- package/dist.commonjs/ckb/transaction.js +57 -15
- package/dist.commonjs/client/client.advanced.d.ts.map +1 -1
- package/dist.commonjs/client/client.d.ts +1 -0
- package/dist.commonjs/client/client.d.ts.map +1 -1
- package/dist.commonjs/client/client.js +10 -4
- package/dist.commonjs/client/clientPublicMainnet.advanced.d.ts.map +1 -1
- package/dist.commonjs/client/clientPublicMainnet.advanced.js +22 -2
- package/dist.commonjs/client/clientPublicMainnet.d.ts +4 -1
- package/dist.commonjs/client/clientPublicMainnet.d.ts.map +1 -1
- package/dist.commonjs/client/clientPublicMainnet.js +3 -2
- package/dist.commonjs/client/clientPublicTestnet.advanced.d.ts.map +1 -1
- package/dist.commonjs/client/clientPublicTestnet.advanced.js +22 -2
- package/dist.commonjs/client/clientPublicTestnet.d.ts +4 -1
- package/dist.commonjs/client/clientPublicTestnet.d.ts.map +1 -1
- package/dist.commonjs/client/clientPublicTestnet.js +3 -2
- package/dist.commonjs/client/jsonRpc/index.d.ts.map +1 -1
- package/dist.commonjs/fixedPoint/index.d.ts +2 -2
- package/dist.commonjs/fixedPoint/index.d.ts.map +1 -1
- package/dist.commonjs/hasher/hasher.d.ts +32 -0
- package/dist.commonjs/hasher/hasher.d.ts.map +1 -0
- package/dist.commonjs/hasher/hasher.js +2 -0
- package/dist.commonjs/hasher/hasherCkb.d.ts +68 -0
- package/dist.commonjs/hasher/hasherCkb.d.ts.map +1 -0
- package/dist.commonjs/hasher/hasherCkb.js +89 -0
- package/dist.commonjs/hasher/hasherKeecak256.d.ts +38 -0
- package/dist.commonjs/hasher/hasherKeecak256.d.ts.map +1 -0
- package/dist.commonjs/hasher/hasherKeecak256.js +47 -0
- package/dist.commonjs/hasher/index.d.ts +3 -66
- package/dist.commonjs/hasher/index.d.ts.map +1 -1
- package/dist.commonjs/hasher/index.js +16 -85
- package/dist.commonjs/keystore/index.d.ts +2 -2
- package/dist.commonjs/keystore/index.d.ts.map +1 -1
- package/dist.commonjs/signer/evm/signerEvm.d.ts +13 -4
- package/dist.commonjs/signer/evm/signerEvm.d.ts.map +1 -1
- package/dist.commonjs/signer/evm/signerEvm.js +72 -20
- package/dist.commonjs/signer/signer/index.d.ts.map +1 -1
- package/dist.commonjs/utils/index.d.ts +1 -1
- package/dist.commonjs/utils/index.d.ts.map +1 -1
- package/package.json +2 -3
- package/src/address/index.ts +1 -1
- package/src/ckb/script.ts +1 -1
- package/src/ckb/transaction.ts +75 -22
- package/src/client/client.advanced.ts +1 -1
- package/src/client/client.ts +15 -4
- package/src/client/clientPublicMainnet.advanced.ts +25 -2
- package/src/client/clientPublicMainnet.ts +6 -2
- package/src/client/clientPublicTestnet.advanced.ts +25 -2
- package/src/client/clientPublicTestnet.ts +6 -2
- package/src/client/jsonRpc/index.ts +3 -3
- package/src/fixedPoint/index.ts +2 -2
- package/src/hasher/hasher.ts +35 -0
- package/src/hasher/hasherCkb.ts +102 -0
- package/src/hasher/hasherKeecak256.ts +52 -0
- package/src/hasher/index.ts +3 -103
- package/src/keystore/index.ts +19 -1
- package/src/signer/evm/signerEvm.ts +131 -24
- package/src/signer/signer/index.ts +1 -1
- package/src/utils/index.ts +2 -2
|
@@ -5,20 +5,21 @@ const index_js_1 = require("../../address/index.js");
|
|
|
5
5
|
const index_js_2 = require("../../bytes/index.js");
|
|
6
6
|
const index_js_3 = require("../../ckb/index.js");
|
|
7
7
|
const index_js_4 = require("../../client/index.js");
|
|
8
|
-
const index_js_5 = require("../../
|
|
9
|
-
const index_js_6 = require("../../
|
|
10
|
-
const index_js_7 = require("../../
|
|
11
|
-
const index_js_8 = require("
|
|
8
|
+
const index_js_5 = require("../../hasher/index.js");
|
|
9
|
+
const index_js_6 = require("../../hex/index.js");
|
|
10
|
+
const index_js_7 = require("../../num/index.js");
|
|
11
|
+
const index_js_8 = require("../../utils/index.js");
|
|
12
|
+
const index_js_9 = require("../signer/index.js");
|
|
12
13
|
/**
|
|
13
14
|
* An abstract class extending Signer for Ethereum Virtual Machine (EVM) based signing operations.
|
|
14
15
|
* This class provides methods to get EVM account, internal address, and signing transactions.
|
|
15
16
|
*/
|
|
16
|
-
class SignerEvm extends
|
|
17
|
+
class SignerEvm extends index_js_9.Signer {
|
|
17
18
|
get type() {
|
|
18
|
-
return
|
|
19
|
+
return index_js_9.SignerType.EVM;
|
|
19
20
|
}
|
|
20
21
|
get signType() {
|
|
21
|
-
return
|
|
22
|
+
return index_js_9.SignerSignType.EvmPersonal;
|
|
22
23
|
}
|
|
23
24
|
/**
|
|
24
25
|
* Gets the internal address, which is the EVM account in this case.
|
|
@@ -35,16 +36,37 @@ class SignerEvm extends index_js_8.Signer {
|
|
|
35
36
|
*/
|
|
36
37
|
async getAddressObjs() {
|
|
37
38
|
const account = await this.getEvmAccount();
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
];
|
|
39
|
+
const addresses = await Promise.all([
|
|
40
|
+
this._getOmniLockAddresses(account),
|
|
41
|
+
this._getPWLockAddresses(account),
|
|
42
|
+
]);
|
|
43
|
+
return addresses.flat();
|
|
44
|
+
}
|
|
45
|
+
_getOmniLockAddresses(account) {
|
|
46
|
+
return Promise.all([
|
|
47
|
+
this._getOmniLockEvmAddressObj(account),
|
|
48
|
+
this._getOmniLockOldEvmAddressObj(account),
|
|
49
|
+
]);
|
|
50
|
+
}
|
|
51
|
+
async _getPWLockAddresses(account) {
|
|
52
|
+
const addr = await this._getPWLockEvmAddressObj(account);
|
|
53
|
+
if (!addr) {
|
|
54
|
+
return [];
|
|
55
|
+
}
|
|
56
|
+
return [addr];
|
|
42
57
|
}
|
|
43
58
|
async _getOmniLockEvmAddressObj(account) {
|
|
44
|
-
return index_js_1.Address.fromKnownScript(this.client, index_js_4.KnownScript.OmniLock, (0,
|
|
59
|
+
return index_js_1.Address.fromKnownScript(this.client, index_js_4.KnownScript.OmniLock, (0, index_js_6.hexFrom)([0x12, ...(0, index_js_2.bytesFrom)(account), 0x00]));
|
|
45
60
|
}
|
|
46
61
|
async _getOmniLockOldEvmAddressObj(account) {
|
|
47
|
-
return index_js_1.Address.fromKnownScript(this.client, index_js_4.KnownScript.OmniLock, (0,
|
|
62
|
+
return index_js_1.Address.fromKnownScript(this.client, index_js_4.KnownScript.OmniLock, (0, index_js_6.hexFrom)([0x1, ...(0, index_js_2.bytesFrom)(account), 0x00]));
|
|
63
|
+
}
|
|
64
|
+
async _getPWLockEvmAddressObj(account) {
|
|
65
|
+
try {
|
|
66
|
+
return index_js_1.Address.fromKnownScript(this.client, index_js_4.KnownScript.PWLock, (0, index_js_6.hexFrom)((0, index_js_2.bytesFrom)(account)));
|
|
67
|
+
}
|
|
68
|
+
catch { }
|
|
69
|
+
return;
|
|
48
70
|
}
|
|
49
71
|
/**
|
|
50
72
|
* prepare a transaction before signing. This method is not implemented and should be overridden by subclasses.
|
|
@@ -54,8 +76,17 @@ class SignerEvm extends index_js_8.Signer {
|
|
|
54
76
|
*/
|
|
55
77
|
async prepareTransaction(txLike) {
|
|
56
78
|
const tx = index_js_3.Transaction.from(txLike);
|
|
57
|
-
await tx.
|
|
58
|
-
|
|
79
|
+
if ((await tx.findInputIndexByLockId(await this.client.getKnownScript(index_js_4.KnownScript.OmniLock), this.client)) !== undefined) {
|
|
80
|
+
await tx.addCellDepsOfKnownScripts(this.client, index_js_4.KnownScript.OmniLock);
|
|
81
|
+
}
|
|
82
|
+
if ((await tx.findInputIndexByLockId(await this.client.getKnownScript(index_js_4.KnownScript.PWLock), this.client)) !== undefined) {
|
|
83
|
+
await tx.addCellDepsOfKnownScripts(this.client, index_js_4.KnownScript.PWLock);
|
|
84
|
+
}
|
|
85
|
+
const account = await this.getEvmAccount();
|
|
86
|
+
const omniLockAddresses = await this._getOmniLockAddresses(account);
|
|
87
|
+
const pwLockAddresses = await this._getPWLockAddresses(account);
|
|
88
|
+
const omniTx = (0, index_js_8.reduceAsync)(omniLockAddresses, (tx, { script }) => tx.prepareSighashAllWitness(script, 85, this.client), tx);
|
|
89
|
+
return (0, index_js_8.reduceAsync)(pwLockAddresses, (tx, { script }) => tx.prepareSighashAllWitness(script, 65, this.client), omniTx);
|
|
59
90
|
}
|
|
60
91
|
/**
|
|
61
92
|
* Signs a transaction without modifying it.
|
|
@@ -70,21 +101,42 @@ class SignerEvm extends index_js_8.Signer {
|
|
|
70
101
|
const { script: oldEvmScript } = await this._getOmniLockOldEvmAddressObj(account);
|
|
71
102
|
tx = await this._signOmniLockScriptForTransaction(tx, evmScript, (hash) => `CKB transaction: ${hash}`);
|
|
72
103
|
tx = await this._signOmniLockScriptForTransaction(tx, oldEvmScript, (hash) => (0, index_js_2.bytesFrom)(hash));
|
|
104
|
+
const pwAddress = await this._getPWLockEvmAddressObj(account);
|
|
105
|
+
if (pwAddress) {
|
|
106
|
+
tx = await this._signPWLockScriptForTransaction(tx, pwAddress.script, (hash) => (0, index_js_2.bytesFrom)(hash));
|
|
107
|
+
}
|
|
73
108
|
return tx;
|
|
74
109
|
}
|
|
75
110
|
async _signOmniLockScriptForTransaction(tx, script, messageTransformer) {
|
|
76
|
-
const info = await
|
|
111
|
+
const info = await this._signPersonalEvmForTransaction(tx, script, messageTransformer);
|
|
77
112
|
if (!info) {
|
|
78
113
|
return tx;
|
|
79
114
|
}
|
|
80
|
-
const
|
|
81
|
-
|
|
82
|
-
|
|
115
|
+
const witness = index_js_3.WitnessArgs.fromBytes(tx.witnesses[info.position]);
|
|
116
|
+
witness.lock = (0, index_js_6.hexFrom)((0, index_js_2.bytesConcat)((0, index_js_7.numToBytes)(5 * 4 + info.signature.length, 4), (0, index_js_7.numToBytes)(4 * 4, 4), (0, index_js_7.numToBytes)(5 * 4 + info.signature.length, 4), (0, index_js_7.numToBytes)(5 * 4 + info.signature.length, 4), (0, index_js_7.numToBytes)(info.signature.length, 4), info.signature));
|
|
117
|
+
tx.setWitnessArgsAt(info.position, witness);
|
|
118
|
+
return tx;
|
|
119
|
+
}
|
|
120
|
+
async _signPWLockScriptForTransaction(tx, script, messageTransformer) {
|
|
121
|
+
const info = await this._signPersonalEvmForTransaction(tx, script, messageTransformer, new index_js_5.HasherKeecak256());
|
|
122
|
+
if (!info) {
|
|
123
|
+
return tx;
|
|
83
124
|
}
|
|
84
125
|
const witness = index_js_3.WitnessArgs.fromBytes(tx.witnesses[info.position]);
|
|
85
|
-
witness.lock = (0,
|
|
126
|
+
witness.lock = (0, index_js_6.hexFrom)(info.signature);
|
|
86
127
|
tx.setWitnessArgsAt(info.position, witness);
|
|
87
128
|
return tx;
|
|
88
129
|
}
|
|
130
|
+
async _signPersonalEvmForTransaction(tx, script, messageTransformer, hasher) {
|
|
131
|
+
const info = await tx.getSignHashInfo(script, this.client, hasher);
|
|
132
|
+
if (!info) {
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
const signature = (0, index_js_2.bytesFrom)(await this.signMessageRaw(messageTransformer(info.message)));
|
|
136
|
+
if (signature[signature.length - 1] >= 27) {
|
|
137
|
+
signature[signature.length - 1] -= 27;
|
|
138
|
+
}
|
|
139
|
+
return { signature, position: info.position };
|
|
140
|
+
}
|
|
89
141
|
}
|
|
90
142
|
exports.SignerEvm = SignerEvm;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/signer/signer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AACzC,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAOzC,oBAAY,cAAc;IACxB,OAAO,YAAY;IACnB,QAAQ,aAAa;IACrB,WAAW,gBAAgB;IAC3B,KAAK,UAAU;IACf,UAAU,eAAe;IACzB,YAAY,iBAAiB;CAC9B;AAED;;GAEG;AACH,oBAAY,UAAU;IACpB,GAAG,QAAQ;IACX,GAAG,QAAQ;IACX,GAAG,QAAQ;IACX,KAAK,UAAU;CAChB;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,UAAU,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;CAYjB,CAAC;AAEF,qBAAa,SAAS;IAEX,SAAS,EAAE,MAAM;IACjB,QAAQ,EAAE,MAAM;IAChB,QAAQ,EAAE,cAAc;gBAFxB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,cAAc;CAElC;AAED;;;GAGG;AACH,8BAAsB,MAAM;IACd,SAAS,CAAC,OAAO,EAAE,MAAM;gBAAf,OAAO,EAAE,MAAM;IAErC,QAAQ,KAAK,IAAI,IAAI,UAAU,CAAC;IAChC,QAAQ,KAAK,QAAQ,IAAI,cAAc,CAAC;IAExC,IAAI,MAAM,IAAI,MAAM,CAEnB;IAID,sBAAsB,CACpB,WAAW,EAAE,iBAAiB,EAAE,EAChC,cAAc,EAAE,MAAM;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/signer/signer/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -71,6 +71,6 @@ export declare function reduceAsync<T, V>(values: T[], accumulator: (a: T, b: T)
|
|
|
71
71
|
* @param init - The initial value.
|
|
72
72
|
* @returns The accumulated result.
|
|
73
73
|
*/
|
|
74
|
-
export declare function reduceAsync<T, V>(values: V[], accumulator: (a: T, b: V, i: number, values: V[]) => Promise<T | undefined | null | void> | T | undefined | null | void, init: T): Promise<T>;
|
|
74
|
+
export declare function reduceAsync<T, V>(values: V[], accumulator: (a: T, b: V, i: number, values: V[]) => Promise<T | undefined | null | void> | T | undefined | null | void, init: T | Promise<T>): Promise<T>;
|
|
75
75
|
export declare function isWebview(userAgent: string): boolean;
|
|
76
76
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,CAAC,EACxB,WAAW,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,EAC1B,KAAK,EAAE,SAAS,GACf,SAAS,CAAC;AACb;;;;;;GAMG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,GAAG,SAAS,CAAC;AAChF;;;;;;GAMG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC;AACrE;;;;;;GAMG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,CAAC,EACxB,WAAW,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,EAC1B,KAAK,EAAE,CAAC,GAAG,SAAS,GACnB,CAAC,GAAG,SAAS,CAAC;AACjB;;;;;;GAMG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,CAAC,EACxB,WAAW,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,EAC1B,KAAK,EAAE,CAAC,GAAG,IAAI,GACd,CAAC,GAAG,SAAS,CAAC;AACjB;;;;;;GAMG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,CAAC,EACxB,WAAW,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,EAC1B,KAAK,EAAE,SAAS,GAAG,IAAI,GACtB,SAAS,CAAC;AACb;;;;;;;GAOG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,CAAC,EACxB,WAAW,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,EAC1B,KAAK,EAAE,CAAC,GAAG,SAAS,GAAG,IAAI,GAC1B,CAAC,GAAG,SAAS,CAAC;AAmBjB;;;;;;GAMG;AACH,wBAAsB,WAAW,CAAC,CAAC,EAAE,CAAC,EACpC,MAAM,EAAE,CAAC,EAAE,EACX,WAAW,EAAE,CACX,CAAC,EAAE,CAAC,EACJ,CAAC,EAAE,CAAC,KACD,OAAO,CAAC,CAAC,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,GACtE,OAAO,CAAC,CAAC,CAAC,CAAC;AACd;;;;;;;GAOG;AACH,wBAAsB,WAAW,CAAC,CAAC,EAAE,CAAC,EACpC,MAAM,EAAE,CAAC,EAAE,EACX,WAAW,EAAE,CACX,CAAC,EAAE,CAAC,EACJ,CAAC,EAAE,CAAC,EACJ,CAAC,EAAE,MAAM,EACT,MAAM,EAAE,CAAC,EAAE,KACR,OAAO,CAAC,CAAC,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,EACvE,IAAI,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,CAAC,EACxB,WAAW,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,EAC1B,KAAK,EAAE,SAAS,GACf,SAAS,CAAC;AACb;;;;;;GAMG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,GAAG,SAAS,CAAC;AAChF;;;;;;GAMG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC;AACrE;;;;;;GAMG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,CAAC,EACxB,WAAW,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,EAC1B,KAAK,EAAE,CAAC,GAAG,SAAS,GACnB,CAAC,GAAG,SAAS,CAAC;AACjB;;;;;;GAMG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,CAAC,EACxB,WAAW,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,EAC1B,KAAK,EAAE,CAAC,GAAG,IAAI,GACd,CAAC,GAAG,SAAS,CAAC;AACjB;;;;;;GAMG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,CAAC,EACxB,WAAW,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,EAC1B,KAAK,EAAE,SAAS,GAAG,IAAI,GACtB,SAAS,CAAC;AACb;;;;;;;GAOG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,CAAC,EACxB,WAAW,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,EAC1B,KAAK,EAAE,CAAC,GAAG,SAAS,GAAG,IAAI,GAC1B,CAAC,GAAG,SAAS,CAAC;AAmBjB;;;;;;GAMG;AACH,wBAAsB,WAAW,CAAC,CAAC,EAAE,CAAC,EACpC,MAAM,EAAE,CAAC,EAAE,EACX,WAAW,EAAE,CACX,CAAC,EAAE,CAAC,EACJ,CAAC,EAAE,CAAC,KACD,OAAO,CAAC,CAAC,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,GACtE,OAAO,CAAC,CAAC,CAAC,CAAC;AACd;;;;;;;GAOG;AACH,wBAAsB,WAAW,CAAC,CAAC,EAAE,CAAC,EACpC,MAAM,EAAE,CAAC,EAAE,EACX,WAAW,EAAE,CACX,CAAC,EAAE,CAAC,EACJ,CAAC,EAAE,CAAC,EACJ,CAAC,EAAE,MAAM,EACT,MAAM,EAAE,CAAC,EAAE,KACR,OAAO,CAAC,CAAC,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,EACvE,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GACnB,OAAO,CAAC,CAAC,CAAC,CAAC;AA4Bd,wBAAgB,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAEpD"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ckb-ccc/core",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.12-alpha.0",
|
|
4
4
|
"description": "Core of CCC - CKBer's Codebase",
|
|
5
5
|
"author": "Hanssen0 <hanssen0@hanssen0.com>",
|
|
6
6
|
"license": "MIT",
|
|
@@ -65,10 +65,9 @@
|
|
|
65
65
|
"abort-controller": "^3.0.0",
|
|
66
66
|
"bech32": "^2.0.0",
|
|
67
67
|
"bitcoinjs-message": "^2.2.0",
|
|
68
|
-
"blake2b": "^2.1.4",
|
|
69
68
|
"buffer": "^6.0.3",
|
|
70
69
|
"cross-fetch": "^4.0.0",
|
|
71
70
|
"ethers": "^6.13.1"
|
|
72
71
|
},
|
|
73
|
-
"gitHead": "
|
|
72
|
+
"gitHead": "171a9941a56575dd5db2e3fad21d04bff8ec3fc5"
|
|
74
73
|
}
|
package/src/address/index.ts
CHANGED
package/src/ckb/script.ts
CHANGED
|
@@ -180,7 +180,7 @@ export class Script {
|
|
|
180
180
|
* @returns An object representing the script in molecule data format.
|
|
181
181
|
*/
|
|
182
182
|
|
|
183
|
-
_toMolData() {
|
|
183
|
+
_toMolData(): mol.ScriptType {
|
|
184
184
|
return {
|
|
185
185
|
codeHash: bytesFrom(this.codeHash),
|
|
186
186
|
hashType: hashTypeToBytes(this.hashType),
|
package/src/ckb/transaction.ts
CHANGED
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
fixedPointFrom,
|
|
8
8
|
fixedPointToString,
|
|
9
9
|
} from "../fixedPoint/index.js";
|
|
10
|
-
import { Hasher, hashCkb } from "../hasher/index.js";
|
|
10
|
+
import { Hasher, HasherCkb, hashCkb } from "../hasher/index.js";
|
|
11
11
|
import { Hex, HexLike, hexFrom } from "../hex/index.js";
|
|
12
12
|
import {
|
|
13
13
|
Num,
|
|
@@ -148,7 +148,7 @@ export class OutPoint {
|
|
|
148
148
|
* @returns An object representing the outpoint in molecule data format.
|
|
149
149
|
*/
|
|
150
150
|
|
|
151
|
-
_toMolData() {
|
|
151
|
+
_toMolData(): mol.OutPointType {
|
|
152
152
|
return {
|
|
153
153
|
txHash: bytesFrom(this.txHash),
|
|
154
154
|
index: numToBytes(this.index, 4),
|
|
@@ -282,7 +282,7 @@ export class CellOutput {
|
|
|
282
282
|
* @returns An object representing the cell output in molecule data format.
|
|
283
283
|
*/
|
|
284
284
|
|
|
285
|
-
_toMolData() {
|
|
285
|
+
_toMolData(): mol.CellOutputType {
|
|
286
286
|
return {
|
|
287
287
|
capacity: numToBytes(this.capacity, 8),
|
|
288
288
|
lock: this.lock._toMolData(),
|
|
@@ -488,7 +488,7 @@ export class CellInput {
|
|
|
488
488
|
* @returns An object representing the cell input in molecule data format.
|
|
489
489
|
*/
|
|
490
490
|
|
|
491
|
-
_toMolData() {
|
|
491
|
+
_toMolData(): mol.CellInputType {
|
|
492
492
|
return {
|
|
493
493
|
previousOutput: this.previousOutput._toMolData(),
|
|
494
494
|
since: numToBytes(this.since, 8),
|
|
@@ -599,7 +599,7 @@ export class CellDep {
|
|
|
599
599
|
* @returns An object representing the cell dependency in molecule data format.
|
|
600
600
|
*/
|
|
601
601
|
|
|
602
|
-
_toMolData() {
|
|
602
|
+
_toMolData(): mol.CellDepType {
|
|
603
603
|
return {
|
|
604
604
|
outPoint: this.outPoint._toMolData(),
|
|
605
605
|
depType: depTypeToBytes(this.depType),
|
|
@@ -716,7 +716,7 @@ export class WitnessArgs {
|
|
|
716
716
|
* @returns An object representing the witness arguments in molecule data format.
|
|
717
717
|
*/
|
|
718
718
|
|
|
719
|
-
_toMolData() {
|
|
719
|
+
_toMolData(): mol.WitnessArgsType {
|
|
720
720
|
return {
|
|
721
721
|
lock: apply(bytesFrom, this.lock),
|
|
722
722
|
inputType: apply(bytesFrom, this.inputType),
|
|
@@ -765,7 +765,7 @@ export class WitnessArgs {
|
|
|
765
765
|
}
|
|
766
766
|
}
|
|
767
767
|
|
|
768
|
-
export function udtBalanceFrom(dataLike: BytesLike) {
|
|
768
|
+
export function udtBalanceFrom(dataLike: BytesLike): Num {
|
|
769
769
|
const data = bytesFrom(dataLike).slice(0, 16);
|
|
770
770
|
if (data.length !== 16) {
|
|
771
771
|
throw new Error("Invalid UDT cell data");
|
|
@@ -1028,7 +1028,7 @@ export class Transaction {
|
|
|
1028
1028
|
* ```
|
|
1029
1029
|
*/
|
|
1030
1030
|
|
|
1031
|
-
hash() {
|
|
1031
|
+
hash(): Hex {
|
|
1032
1032
|
return hashCkb(this.rawToBytes());
|
|
1033
1033
|
}
|
|
1034
1034
|
|
|
@@ -1070,10 +1070,10 @@ export class Transaction {
|
|
|
1070
1070
|
async getSignHashInfo(
|
|
1071
1071
|
scriptLike: ScriptLike,
|
|
1072
1072
|
client: Client,
|
|
1073
|
+
hasher: Hasher = new HasherCkb(),
|
|
1073
1074
|
): Promise<{ message: Hex; position: number } | undefined> {
|
|
1074
1075
|
const script = Script.from(scriptLike);
|
|
1075
1076
|
let position = -1;
|
|
1076
|
-
const hasher = new Hasher();
|
|
1077
1077
|
hasher.update(this.hash());
|
|
1078
1078
|
|
|
1079
1079
|
for (let i = 0; i < this.witnesses.length; i += 1) {
|
|
@@ -1111,6 +1111,40 @@ export class Transaction {
|
|
|
1111
1111
|
};
|
|
1112
1112
|
}
|
|
1113
1113
|
|
|
1114
|
+
/**
|
|
1115
|
+
* Find the first occurrence of a input with the specified lock id
|
|
1116
|
+
*
|
|
1117
|
+
* @param scriptIdLike - The script associated with the transaction, represented as a ScriptLike object without args.
|
|
1118
|
+
* @param client - The client for complete extra infos in the transaction.
|
|
1119
|
+
* @returns A promise that resolves to the found index
|
|
1120
|
+
*
|
|
1121
|
+
* @example
|
|
1122
|
+
* ```typescript
|
|
1123
|
+
* const index = await tx.findInputIndexByLockId(scriptIdLike, client);
|
|
1124
|
+
* ```
|
|
1125
|
+
*/
|
|
1126
|
+
async findInputIndexByLockId(
|
|
1127
|
+
scriptLike: Pick<ScriptLike, "codeHash" | "hashType">,
|
|
1128
|
+
client: Client,
|
|
1129
|
+
): Promise<number | undefined> {
|
|
1130
|
+
const script = Script.from({ ...scriptLike, args: "0x" });
|
|
1131
|
+
|
|
1132
|
+
for (let i = 0; i < this.inputs.length; i += 1) {
|
|
1133
|
+
const input = this.inputs[i];
|
|
1134
|
+
await input.completeExtraInfos(client);
|
|
1135
|
+
if (!input.cellOutput) {
|
|
1136
|
+
throw new Error("Unable to complete input");
|
|
1137
|
+
}
|
|
1138
|
+
|
|
1139
|
+
if (
|
|
1140
|
+
script.codeHash === input.cellOutput.lock.codeHash &&
|
|
1141
|
+
script.hashType === input.cellOutput.lock.hashType
|
|
1142
|
+
) {
|
|
1143
|
+
return i;
|
|
1144
|
+
}
|
|
1145
|
+
}
|
|
1146
|
+
}
|
|
1147
|
+
|
|
1114
1148
|
/**
|
|
1115
1149
|
* Find the first occurrence of a input with the specified lock
|
|
1116
1150
|
*
|
|
@@ -1194,6 +1228,27 @@ export class Transaction {
|
|
|
1194
1228
|
});
|
|
1195
1229
|
}
|
|
1196
1230
|
|
|
1231
|
+
/**
|
|
1232
|
+
* Add cell deps at the start if they are not existed
|
|
1233
|
+
*
|
|
1234
|
+
* @param cellDepLikes - The cell deps to add
|
|
1235
|
+
*
|
|
1236
|
+
* @example
|
|
1237
|
+
* ```typescript
|
|
1238
|
+
* tx.addCellDepsAtBegin(cellDep);
|
|
1239
|
+
* ```
|
|
1240
|
+
*/
|
|
1241
|
+
addCellDepsAtStart(...cellDepsLike: (CellDepLike | CellDepLike[])[]): void {
|
|
1242
|
+
cellDepsLike.flat().forEach((cellDepLike) => {
|
|
1243
|
+
const cellDep = CellDep.from(cellDepLike);
|
|
1244
|
+
if (this.cellDeps.some((c) => c.eq(cellDep))) {
|
|
1245
|
+
return;
|
|
1246
|
+
}
|
|
1247
|
+
|
|
1248
|
+
this.cellDeps.unshift(cellDep);
|
|
1249
|
+
});
|
|
1250
|
+
}
|
|
1251
|
+
|
|
1197
1252
|
/**
|
|
1198
1253
|
* Add cell dep from infos if they are not existed
|
|
1199
1254
|
*
|
|
@@ -1572,10 +1627,10 @@ export class Transaction {
|
|
|
1572
1627
|
let leastExtraCapacity = Zero;
|
|
1573
1628
|
|
|
1574
1629
|
while (true) {
|
|
1575
|
-
const
|
|
1630
|
+
const tx = this.clone();
|
|
1576
1631
|
const collected = await (async () => {
|
|
1577
1632
|
try {
|
|
1578
|
-
return await
|
|
1633
|
+
return await tx.completeInputsByCapacity(
|
|
1579
1634
|
from,
|
|
1580
1635
|
leastFee + leastExtraCapacity,
|
|
1581
1636
|
filter,
|
|
@@ -1589,22 +1644,21 @@ export class Transaction {
|
|
|
1589
1644
|
}
|
|
1590
1645
|
})();
|
|
1591
1646
|
|
|
1647
|
+
await from.prepareTransaction(tx);
|
|
1592
1648
|
if (leastFee === Zero) {
|
|
1593
1649
|
// The initial fee is calculated based on prepared transaction
|
|
1594
|
-
leastFee =
|
|
1650
|
+
leastFee = tx.estimateFee(feeRate);
|
|
1595
1651
|
}
|
|
1596
1652
|
const extraCapacity =
|
|
1597
|
-
(await
|
|
1598
|
-
prepared.getOutputsCapacity();
|
|
1653
|
+
(await tx.getInputsCapacity(from.client)) - tx.getOutputsCapacity();
|
|
1599
1654
|
// The extra capacity paid the fee without a change
|
|
1600
1655
|
if (extraCapacity === leastFee) {
|
|
1601
|
-
this.copy(
|
|
1656
|
+
this.copy(tx);
|
|
1602
1657
|
return [collected, false];
|
|
1603
1658
|
}
|
|
1604
1659
|
|
|
1605
|
-
let changed = prepared.clone();
|
|
1606
1660
|
const needed = numFrom(
|
|
1607
|
-
await Promise.resolve(change(
|
|
1661
|
+
await Promise.resolve(change(tx, extraCapacity - leastFee)),
|
|
1608
1662
|
);
|
|
1609
1663
|
// No enough extra capacity to create new cells for change
|
|
1610
1664
|
if (needed > Zero) {
|
|
@@ -1613,8 +1667,7 @@ export class Transaction {
|
|
|
1613
1667
|
}
|
|
1614
1668
|
|
|
1615
1669
|
if (
|
|
1616
|
-
(await
|
|
1617
|
-
changed.getOutputsCapacity() !==
|
|
1670
|
+
(await tx.getInputsCapacity(from.client)) - tx.getOutputsCapacity() !==
|
|
1618
1671
|
leastFee
|
|
1619
1672
|
) {
|
|
1620
1673
|
throw new Error(
|
|
@@ -1623,14 +1676,14 @@ export class Transaction {
|
|
|
1623
1676
|
}
|
|
1624
1677
|
|
|
1625
1678
|
// New change cells created, update the fee
|
|
1626
|
-
await from.prepareTransaction(
|
|
1627
|
-
const changedFee =
|
|
1679
|
+
await from.prepareTransaction(tx);
|
|
1680
|
+
const changedFee = tx.estimateFee(feeRate);
|
|
1628
1681
|
if (leastFee > changedFee) {
|
|
1629
1682
|
throw new Error("The change function removed existed transaction data");
|
|
1630
1683
|
}
|
|
1631
1684
|
// The fee has been paid
|
|
1632
1685
|
if (leastFee === changedFee) {
|
|
1633
|
-
this.copy(
|
|
1686
|
+
this.copy(tx);
|
|
1634
1687
|
return [collected, true];
|
|
1635
1688
|
}
|
|
1636
1689
|
|
package/src/client/client.ts
CHANGED
|
@@ -36,6 +36,7 @@ export enum KnownScript {
|
|
|
36
36
|
XUdt = "XUdt",
|
|
37
37
|
JoyId = "JoyId",
|
|
38
38
|
COTA = "COTA",
|
|
39
|
+
PWLock = "PWLock",
|
|
39
40
|
OmniLock = "OmniLock",
|
|
40
41
|
NostrLock = "NostrLock",
|
|
41
42
|
UniqueType = "UniqueType",
|
|
@@ -198,16 +199,26 @@ export abstract class Client {
|
|
|
198
199
|
limit = 10,
|
|
199
200
|
): AsyncGenerator<Cell> {
|
|
200
201
|
const key = ClientIndexerSearchKey.from(keyLike);
|
|
202
|
+
const foundedOutPoints = [];
|
|
203
|
+
|
|
201
204
|
for (const cell of this.usableCells) {
|
|
202
|
-
if (filterCell(key, cell)) {
|
|
203
|
-
|
|
205
|
+
if (!filterCell(key, cell)) {
|
|
206
|
+
continue;
|
|
204
207
|
}
|
|
208
|
+
|
|
209
|
+
foundedOutPoints.push(cell.outPoint);
|
|
210
|
+
yield cell;
|
|
205
211
|
}
|
|
206
212
|
|
|
207
213
|
for await (const cell of this.findCells(key, order, limit)) {
|
|
208
|
-
if (
|
|
209
|
-
|
|
214
|
+
if (
|
|
215
|
+
this.unusableOutPoints.some((o) => o.eq(cell.outPoint)) ||
|
|
216
|
+
foundedOutPoints.some((founded) => founded.eq(cell.outPoint))
|
|
217
|
+
) {
|
|
218
|
+
continue;
|
|
210
219
|
}
|
|
220
|
+
|
|
221
|
+
yield cell;
|
|
211
222
|
}
|
|
212
223
|
}
|
|
213
224
|
|
|
@@ -5,7 +5,7 @@ export const MAINNET_SCRIPTS: Record<
|
|
|
5
5
|
KnownScript,
|
|
6
6
|
| (Pick<Script, "codeHash" | "hashType"> & { cellDeps: CellDepInfoLike[] })
|
|
7
7
|
| undefined
|
|
8
|
-
> = {
|
|
8
|
+
> = Object.freeze({
|
|
9
9
|
[KnownScript.Secp256k1Blake160]: {
|
|
10
10
|
codeHash:
|
|
11
11
|
"0x9bd7e06f3ecf4be0f2fcd2188b23f1b9fcc88e5d4b65a8637b17723bbda3cce8",
|
|
@@ -114,6 +114,29 @@ export const MAINNET_SCRIPTS: Record<
|
|
|
114
114
|
},
|
|
115
115
|
],
|
|
116
116
|
},
|
|
117
|
+
[KnownScript.PWLock]: {
|
|
118
|
+
codeHash:
|
|
119
|
+
"0xbf43c3602455798c1a61a596e0d95278864c552fafe231c063b3fabf97a8febc",
|
|
120
|
+
hashType: "type",
|
|
121
|
+
cellDeps: [
|
|
122
|
+
{
|
|
123
|
+
cellDep: {
|
|
124
|
+
outPoint: {
|
|
125
|
+
txHash:
|
|
126
|
+
"0x1d60cb8f4666e039f418ea94730b1a8c5aa0bf2f7781474406387462924d15d4",
|
|
127
|
+
index: 0,
|
|
128
|
+
},
|
|
129
|
+
depType: "code",
|
|
130
|
+
},
|
|
131
|
+
type: {
|
|
132
|
+
codeHash:
|
|
133
|
+
"0x00000000000000000000000000000000000000000000000000545950455f4944",
|
|
134
|
+
hashType: "type",
|
|
135
|
+
args: "0x42ade2f25eb938b5dbfd3d8f07b8b07aa593d848e7ff14bdfbbea5aeb6175261",
|
|
136
|
+
},
|
|
137
|
+
},
|
|
138
|
+
],
|
|
139
|
+
},
|
|
117
140
|
[KnownScript.OmniLock]: {
|
|
118
141
|
codeHash:
|
|
119
142
|
"0x9b819793a64463aed77c615d6cb226eea5487ccfc0783043a587254cda2b6f26",
|
|
@@ -221,4 +244,4 @@ export const MAINNET_SCRIPTS: Record<
|
|
|
221
244
|
},
|
|
222
245
|
],
|
|
223
246
|
},
|
|
224
|
-
};
|
|
247
|
+
});
|
|
@@ -4,7 +4,11 @@ import { MAINNET_SCRIPTS } from "./clientPublicMainnet.advanced.js";
|
|
|
4
4
|
import { ClientJsonRpc } from "./jsonRpc/index.js";
|
|
5
5
|
|
|
6
6
|
export class ClientPublicMainnet extends ClientJsonRpc {
|
|
7
|
-
constructor(
|
|
7
|
+
constructor(
|
|
8
|
+
url = "https://mainnet.ckb.dev/",
|
|
9
|
+
timeout?: number,
|
|
10
|
+
private readonly scripts = MAINNET_SCRIPTS,
|
|
11
|
+
) {
|
|
8
12
|
super(url, timeout);
|
|
9
13
|
}
|
|
10
14
|
|
|
@@ -17,7 +21,7 @@ export class ClientPublicMainnet extends ClientJsonRpc {
|
|
|
17
21
|
): Promise<
|
|
18
22
|
Pick<Script, "codeHash" | "hashType"> & { cellDeps: CellDepInfo[] }
|
|
19
23
|
> {
|
|
20
|
-
const found =
|
|
24
|
+
const found = this.scripts[script];
|
|
21
25
|
if (!found) {
|
|
22
26
|
throw new Error(
|
|
23
27
|
`No script information was found for ${script} on ${this.addressPrefix}`,
|
|
@@ -4,7 +4,7 @@ import { CellDepInfoLike, KnownScript } from "./client.js";
|
|
|
4
4
|
export const TESTNET_SCRIPTS: Record<
|
|
5
5
|
KnownScript,
|
|
6
6
|
Pick<Script, "codeHash" | "hashType"> & { cellDeps: CellDepInfoLike[] }
|
|
7
|
-
> = {
|
|
7
|
+
> = Object.freeze({
|
|
8
8
|
[KnownScript.Secp256k1Blake160]: {
|
|
9
9
|
codeHash:
|
|
10
10
|
"0x9bd7e06f3ecf4be0f2fcd2188b23f1b9fcc88e5d4b65a8637b17723bbda3cce8",
|
|
@@ -119,6 +119,29 @@ export const TESTNET_SCRIPTS: Record<
|
|
|
119
119
|
},
|
|
120
120
|
],
|
|
121
121
|
},
|
|
122
|
+
[KnownScript.PWLock]: {
|
|
123
|
+
codeHash:
|
|
124
|
+
"0x58c5f491aba6d61678b7cf7edf4910b1f5e00ec0cde2f42e0abb4fd9aff25a63",
|
|
125
|
+
hashType: "type",
|
|
126
|
+
cellDeps: [
|
|
127
|
+
{
|
|
128
|
+
cellDep: {
|
|
129
|
+
outPoint: {
|
|
130
|
+
txHash:
|
|
131
|
+
"0x57a62003daeab9d54aa29b944fc3b451213a5ebdf2e232216a3cfed0dde61b38",
|
|
132
|
+
index: 0,
|
|
133
|
+
},
|
|
134
|
+
depType: "code",
|
|
135
|
+
},
|
|
136
|
+
type: {
|
|
137
|
+
codeHash:
|
|
138
|
+
"0x00000000000000000000000000000000000000000000000000545950455f4944",
|
|
139
|
+
hashType: "type",
|
|
140
|
+
args: "0xf6d90bfe3041d0fd7e01c45770241697f5f837974bd6ae1672a7ec0f9f523268",
|
|
141
|
+
},
|
|
142
|
+
},
|
|
143
|
+
],
|
|
144
|
+
},
|
|
122
145
|
[KnownScript.OmniLock]: {
|
|
123
146
|
codeHash:
|
|
124
147
|
"0xf329effd1c475a2978453c8600e1eaf0bc2087ee093c3ee64cc96ec6847752cb",
|
|
@@ -232,4 +255,4 @@ export const TESTNET_SCRIPTS: Record<
|
|
|
232
255
|
},
|
|
233
256
|
],
|
|
234
257
|
},
|
|
235
|
-
};
|
|
258
|
+
});
|
|
@@ -4,7 +4,11 @@ import { TESTNET_SCRIPTS } from "./clientPublicTestnet.advanced.js";
|
|
|
4
4
|
import { ClientJsonRpc } from "./jsonRpc/index.js";
|
|
5
5
|
|
|
6
6
|
export class ClientPublicTestnet extends ClientJsonRpc {
|
|
7
|
-
constructor(
|
|
7
|
+
constructor(
|
|
8
|
+
url = "https://testnet.ckb.dev/",
|
|
9
|
+
timeout?: number,
|
|
10
|
+
private readonly scripts = TESTNET_SCRIPTS,
|
|
11
|
+
) {
|
|
8
12
|
super(url, timeout);
|
|
9
13
|
}
|
|
10
14
|
|
|
@@ -17,7 +21,7 @@ export class ClientPublicTestnet extends ClientJsonRpc {
|
|
|
17
21
|
): Promise<
|
|
18
22
|
Pick<Script, "codeHash" | "hashType"> & { cellDeps: CellDepInfo[] }
|
|
19
23
|
> {
|
|
20
|
-
const found =
|
|
24
|
+
const found = this.scripts[script];
|
|
21
25
|
return {
|
|
22
26
|
...found,
|
|
23
27
|
cellDeps: found.cellDeps.map((c) => CellDepInfo.from(c)),
|
|
@@ -63,7 +63,7 @@ export abstract class ClientJsonRpc extends Client {
|
|
|
63
63
|
* @returns The URL of the JSON-RPC server.
|
|
64
64
|
*/
|
|
65
65
|
|
|
66
|
-
get url() {
|
|
66
|
+
get url(): string {
|
|
67
67
|
return this.url_;
|
|
68
68
|
}
|
|
69
69
|
|
|
@@ -206,7 +206,7 @@ export abstract class ClientJsonRpc extends Client {
|
|
|
206
206
|
rpcMethod: string,
|
|
207
207
|
inTransformers: (((_: any) => unknown) | undefined)[],
|
|
208
208
|
outTransformer?: (_: any) => unknown,
|
|
209
|
-
) {
|
|
209
|
+
): (...req: unknown[]) => Promise<unknown> {
|
|
210
210
|
return async (...req: unknown[]) => {
|
|
211
211
|
const payload = ClientJsonRpc.buildPayload(
|
|
212
212
|
rpcMethod,
|
|
@@ -234,7 +234,7 @@ export abstract class ClientJsonRpc extends Client {
|
|
|
234
234
|
* @throws Will throw an error if the response ID does not match the request ID, or if the response contains an error.
|
|
235
235
|
*/
|
|
236
236
|
|
|
237
|
-
async send(payload: JsonRpcPayload) {
|
|
237
|
+
async send(payload: JsonRpcPayload): Promise<unknown> {
|
|
238
238
|
const aborter = new AbortController();
|
|
239
239
|
const abortTimer = setTimeout(() => aborter.abort(), this.timeout);
|
|
240
240
|
|
package/src/fixedPoint/index.ts
CHANGED
|
@@ -76,11 +76,11 @@ export function fixedPointFrom(val: FixedPointLike, decimals = 8): FixedPoint {
|
|
|
76
76
|
* Represents the fixed point value of zero as a bigint.
|
|
77
77
|
*/
|
|
78
78
|
|
|
79
|
-
export const Zero = 0n;
|
|
79
|
+
export const Zero: FixedPoint = 0n;
|
|
80
80
|
|
|
81
81
|
/**
|
|
82
82
|
* Represents the fixed point value of one as a FixedPoint (bigint).
|
|
83
83
|
* Equivalent to 1 in fixed-point representation with default decimals (8).
|
|
84
84
|
*/
|
|
85
85
|
|
|
86
|
-
export const One = fixedPointFrom("1");
|
|
86
|
+
export const One: FixedPoint = fixedPointFrom("1");
|