@ckb-ccc/core 1.20.0 → 1.20.1

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 (32) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/dist/advanced.d.mts +1 -1
  3. package/dist/advanced.mjs +1 -1
  4. package/dist/{advancedBarrel-CZxkR1dk.d.mts → advancedBarrel-Di0YBlWc.d.mts} +8 -4
  5. package/dist/{advancedBarrel-CZxkR1dk.d.mts.map → advancedBarrel-Di0YBlWc.d.mts.map} +1 -1
  6. package/dist/advancedBarrel.d.mts +1 -1
  7. package/dist/advancedBarrel.mjs +1 -1
  8. package/dist/{barrel-CqiwnGqc.mjs → barrel-G6e8gZrB.mjs} +3 -3
  9. package/dist/{barrel-CqiwnGqc.mjs.map → barrel-G6e8gZrB.mjs.map} +1 -1
  10. package/dist/barrel.d.mts +1 -1
  11. package/dist/barrel.mjs +1 -1
  12. package/dist/index.d.mts +1 -1
  13. package/dist/index.mjs +1 -1
  14. package/dist/{transformers-BJyj6caX.mjs → transformers-DxPrDQko.mjs} +2 -2
  15. package/dist/{transformers-BJyj6caX.mjs.map → transformers-DxPrDQko.mjs.map} +1 -1
  16. package/dist.commonjs/advanced.d.ts +1 -1
  17. package/dist.commonjs/advanced.js +1 -1
  18. package/dist.commonjs/{advancedBarrel-Czsr2VlG.d.ts → advancedBarrel-B57gAzdK.d.ts} +8 -4
  19. package/dist.commonjs/{advancedBarrel-Czsr2VlG.d.ts.map → advancedBarrel-B57gAzdK.d.ts.map} +1 -1
  20. package/dist.commonjs/advancedBarrel.d.ts +1 -1
  21. package/dist.commonjs/advancedBarrel.js +1 -1
  22. package/dist.commonjs/{barrel-BCS94_-c.js → barrel-BOCFtFjq.js} +3 -3
  23. package/dist.commonjs/{barrel-BCS94_-c.js.map → barrel-BOCFtFjq.js.map} +1 -1
  24. package/dist.commonjs/barrel.d.ts +1 -1
  25. package/dist.commonjs/barrel.js +1 -1
  26. package/dist.commonjs/index.d.ts +1 -1
  27. package/dist.commonjs/index.js +1 -1
  28. package/dist.commonjs/{transformers-Cue1Z8Up.js → transformers-0FqvcPy2.js} +2 -2
  29. package/dist.commonjs/{transformers-Cue1Z8Up.js.map → transformers-0FqvcPy2.js.map} +1 -1
  30. package/package.json +1 -1
  31. package/src/ckb/transaction.ts +2 -0
  32. package/src/signer/jsonRpc/signer.ts +61 -8
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ckb-ccc/core",
3
- "version": "1.20.0",
3
+ "version": "1.20.1",
4
4
  "description": "Core of CCC - CKBer's Codebase",
5
5
  "author": "Hanssen0 <hanssen0@hanssen0.com>",
6
6
  "license": "MIT",
@@ -2272,6 +2272,7 @@ export class Transaction extends Entity.Base<TransactionLike, Transaction>() {
2272
2272
  type: ScriptLike,
2273
2273
  balanceTweak?: NumLike,
2274
2274
  ): Promise<number> {
2275
+ const scriptSize = Script.from(type).occupiedSize;
2275
2276
  const expectedBalance =
2276
2277
  this.getOutputsUdtBalance(type) + numFrom(balanceTweak ?? 0);
2277
2278
  if (expectedBalance === Zero) {
@@ -2302,6 +2303,7 @@ export class Transaction extends Entity.Base<TransactionLike, Transaction>() {
2302
2303
  from,
2303
2304
  {
2304
2305
  script: type,
2306
+ scriptLenRange: [scriptSize, scriptSize + 1],
2305
2307
  outputDataLenRange: [16, numFrom("0xffffffff")],
2306
2308
  },
2307
2309
  (acc, { outputData }, _i, collected) => {
@@ -24,6 +24,9 @@ export type SignerJsonRpcConfig = Omit<
24
24
  export class SignerJsonRpc extends Signer {
25
25
  private connecting?: Promise<void>;
26
26
  private disconnecting?: Promise<void>;
27
+ private scriptsPromise?: Promise<Script[]>;
28
+ private internalAddressPromise?: Promise<string>;
29
+ private identityPromise?: Promise<string>;
27
30
  private readonly replacedListeners = new Set<() => void>();
28
31
 
29
32
  private constructor(
@@ -90,6 +93,7 @@ export class SignerJsonRpc extends Signer {
90
93
  }
91
94
 
92
95
  disconnect(): Promise<void> {
96
+ this.clearReadCache();
93
97
  if (this.disconnecting) {
94
98
  return this.disconnecting;
95
99
  }
@@ -114,6 +118,7 @@ export class SignerJsonRpc extends Signer {
114
118
 
115
119
  replace() {
116
120
  this.connecting = undefined;
121
+ this.clearReadCache();
117
122
  const listeners = [...this.replacedListeners];
118
123
  this.replacedListeners.clear();
119
124
  listeners.forEach((listener) => listener());
@@ -128,9 +133,24 @@ export class SignerJsonRpc extends Signer {
128
133
  );
129
134
  }
130
135
 
131
- getScripts = this.buildSender("get_scripts", [], (scripts: JsonRpcScript[]) =>
132
- scripts.map((script) => JsonRpcTransformers.scriptTo(script)),
133
- ) as () => Promise<Script[]>;
136
+ getScripts(): Promise<Script[]> {
137
+ if (this.scriptsPromise) {
138
+ return this.scriptsPromise.then((scripts) => [...scripts]);
139
+ }
140
+
141
+ const pending = this.requestor
142
+ .request("get_scripts", [], [], (scripts: JsonRpcScript[]) =>
143
+ scripts.map((script) => JsonRpcTransformers.scriptTo(script)),
144
+ )
145
+ .catch((cause: unknown) => {
146
+ if (this.scriptsPromise === pending) {
147
+ this.scriptsPromise = undefined;
148
+ }
149
+ throw cause;
150
+ }) as Promise<Script[]>;
151
+ this.scriptsPromise = pending;
152
+ return pending.then((scripts) => [...scripts]);
153
+ }
134
154
 
135
155
  async getAddressObjs() {
136
156
  return (await this.getScripts()).map((script) =>
@@ -138,12 +158,39 @@ export class SignerJsonRpc extends Signer {
138
158
  );
139
159
  }
140
160
 
141
- getInternalAddress = this.buildSender(
142
- "get_native_address",
143
- [],
144
- ) as Signer["getInternalAddress"];
161
+ getInternalAddress(): Promise<string> {
162
+ if (this.internalAddressPromise) {
163
+ return this.internalAddressPromise;
164
+ }
145
165
 
146
- getIdentity = this.buildSender("get_identity", []) as Signer["getIdentity"];
166
+ const pending = this.requestor
167
+ .request("get_native_address", [], [])
168
+ .catch((cause: unknown) => {
169
+ if (this.internalAddressPromise === pending) {
170
+ this.internalAddressPromise = undefined;
171
+ }
172
+ throw cause;
173
+ }) as Promise<string>;
174
+ this.internalAddressPromise = pending;
175
+ return pending;
176
+ }
177
+
178
+ getIdentity(): Promise<string> {
179
+ if (this.identityPromise) {
180
+ return this.identityPromise;
181
+ }
182
+
183
+ const pending = this.requestor
184
+ .request("get_identity", [], [])
185
+ .catch((cause: unknown) => {
186
+ if (this.identityPromise === pending) {
187
+ this.identityPromise = undefined;
188
+ }
189
+ throw cause;
190
+ }) as Promise<string>;
191
+ this.identityPromise = pending;
192
+ return pending;
193
+ }
147
194
 
148
195
  signMessageRaw = this.buildSender("sign_message", [
149
196
  SignerJsonRpcTransformers.messageFrom,
@@ -175,6 +222,12 @@ export class SignerJsonRpc extends Signer {
175
222
  );
176
223
  }
177
224
 
225
+ private clearReadCache() {
226
+ this.scriptsPromise = undefined;
227
+ this.internalAddressPromise = undefined;
228
+ this.identityPromise = undefined;
229
+ }
230
+
178
231
  private requestConnect = this.buildSender("connect", []) as (
179
232
  networkId: string,
180
233
  ) => Promise<void>;