@ckb-ccc/core 1.18.1 → 2.0.0-next.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/CHANGELOG.md +42 -0
- package/dist/address.advanced-LxntWbev.mjs +2 -0
- package/dist/address.advanced-LxntWbev.mjs.map +1 -0
- package/dist/advanced.d.mts +1 -1
- package/dist/advanced.mjs +1 -1
- package/{dist.commonjs/advancedBarrel-CJAh6sm8.d.ts → dist/advancedBarrel-BHwnMJqR.d.mts} +749 -382
- package/dist/advancedBarrel-BHwnMJqR.d.mts.map +1 -0
- package/dist/advancedBarrel.d.mts +1 -1
- package/dist/advancedBarrel.mjs +1 -1
- package/dist/barrel-C-BaV9Pe.mjs +7 -0
- package/dist/barrel-C-BaV9Pe.mjs.map +1 -0
- package/dist/barrel.d.mts +2 -2
- package/dist/barrel.mjs +1 -1
- package/dist/index.d.mts +2 -2
- package/dist/index.mjs +1 -1
- package/dist.commonjs/address.advanced-BqcYOpZn.js +2 -0
- package/dist.commonjs/address.advanced-BqcYOpZn.js.map +1 -0
- package/dist.commonjs/advanced.d.ts +1 -1
- package/dist.commonjs/advanced.js +1 -1
- package/{dist/advancedBarrel-BbbHx4z4.d.mts → dist.commonjs/advancedBarrel-DNdhwiU0.d.ts} +750 -381
- package/dist.commonjs/advancedBarrel-DNdhwiU0.d.ts.map +1 -0
- package/dist.commonjs/advancedBarrel.d.ts +1 -1
- package/dist.commonjs/advancedBarrel.js +1 -1
- package/dist.commonjs/{barrel-C_zSgXKn.js → barrel-BBOmj4RJ.js} +10 -10
- package/dist.commonjs/barrel-BBOmj4RJ.js.map +1 -0
- package/dist.commonjs/barrel.d.ts +2 -2
- package/dist.commonjs/barrel.js +1 -1
- package/dist.commonjs/index.d.ts +2 -2
- package/dist.commonjs/index.js +1 -1
- package/package.json +1 -1
- package/src/ckb/epoch.ts +44 -26
- package/src/ckb/script.ts +23 -46
- package/src/ckb/transaction.ts +200 -196
- package/src/client/client.ts +2 -2
- package/src/client/jsonRpc/client.ts +3 -7
- package/src/codec/codec.ts +65 -40
- package/src/codec/entity.ts +95 -67
- package/src/codec/predefined.ts +11 -0
- package/src/molecule/codec.ts +116 -8
- package/src/molecule/predefined.ts +1 -0
- package/src/signer/ckb/signerMultisigCkbReadonly.ts +36 -24
- package/src/signer/ckb/verifyJoyId.ts +39 -11
- package/src/signer/index.ts +17 -0
- package/src/signer/signer/index.ts +11 -0
- package/src/signer/signerFromSignature.ts +65 -0
- package/src/utils/index.ts +108 -26
- package/dist/address.advanced-Dw4qPDGb.mjs +0 -2
- package/dist/address.advanced-Dw4qPDGb.mjs.map +0 -1
- package/dist/advancedBarrel-BbbHx4z4.d.mts.map +0 -1
- package/dist/barrel-BsC1djHG.mjs +0 -7
- package/dist/barrel-BsC1djHG.mjs.map +0 -1
- package/dist.commonjs/address.advanced-DG1gpW7t.js +0 -2
- package/dist.commonjs/address.advanced-DG1gpW7t.js.map +0 -1
- package/dist.commonjs/advancedBarrel-CJAh6sm8.d.ts.map +0 -1
- package/dist.commonjs/barrel-C_zSgXKn.js.map +0 -1
|
@@ -105,6 +105,7 @@ export const Byte32Vec = vector(Byte32);
|
|
|
105
105
|
export const String = byteVec({
|
|
106
106
|
encode: (value: string) => bytesFrom(value, "utf8"),
|
|
107
107
|
decode: (buffer) => bytesTo(buffer, "utf8"),
|
|
108
|
+
from: (value: string) => value,
|
|
108
109
|
});
|
|
109
110
|
export const StringVec = vector(String);
|
|
110
111
|
export const StringOpt = option(String);
|
|
@@ -18,7 +18,7 @@ import {
|
|
|
18
18
|
ScriptInfo,
|
|
19
19
|
ScriptInfoLike,
|
|
20
20
|
} from "../../client/index.js";
|
|
21
|
-
import { codec, Entity } from "../../codec/index.js";
|
|
21
|
+
import { Codec, codec, DecodedType, Entity } from "../../codec/index.js";
|
|
22
22
|
import { HASH_CKB_SHORT_LENGTH, hashCkbShort } from "../../hasher/index.js";
|
|
23
23
|
import { Hex, hexFrom, HexLike } from "../../hex/index.js";
|
|
24
24
|
import { numFrom, NumLike, numToBytes } from "../../num/index.js";
|
|
@@ -44,12 +44,8 @@ export type MultisigCkbWitnessLike = (
|
|
|
44
44
|
signatures?: HexLike[] | null;
|
|
45
45
|
};
|
|
46
46
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
* @public
|
|
50
|
-
*/
|
|
51
|
-
@codec({
|
|
52
|
-
encode: (encodable: MultisigCkbWitness) => {
|
|
47
|
+
const MultisigCkbWitnessCodec = Codec.from({
|
|
48
|
+
encode: (encodable: MultisigCkbWitnessLike) => {
|
|
53
49
|
const { publicKeyHashes, threshold, mustMatch, signatures } =
|
|
54
50
|
MultisigCkbWitness.from(encodable);
|
|
55
51
|
|
|
@@ -97,7 +93,7 @@ export type MultisigCkbWitnessLike = (
|
|
|
97
93
|
publicKeyHashesLength * HASH_CKB_SHORT_LENGTH,
|
|
98
94
|
);
|
|
99
95
|
|
|
100
|
-
return
|
|
96
|
+
return {
|
|
101
97
|
publicKeyHashes: Array.from(new Array(publicKeyHashesLength), (_, i) =>
|
|
102
98
|
hexFrom(
|
|
103
99
|
rawKeyAndSignatures.slice(
|
|
@@ -106,8 +102,8 @@ export type MultisigCkbWitnessLike = (
|
|
|
106
102
|
),
|
|
107
103
|
),
|
|
108
104
|
),
|
|
109
|
-
threshold:
|
|
110
|
-
mustMatch:
|
|
105
|
+
threshold: threshold,
|
|
106
|
+
mustMatch: mustMatch,
|
|
111
107
|
signatures: Array.from(
|
|
112
108
|
new Array(Math.floor(signatures.length / SECP256K1_SIGNATURE_LENGTH)),
|
|
113
109
|
(_, i) =>
|
|
@@ -118,25 +114,36 @@ export type MultisigCkbWitnessLike = (
|
|
|
118
114
|
),
|
|
119
115
|
),
|
|
120
116
|
),
|
|
121
|
-
}
|
|
117
|
+
};
|
|
122
118
|
},
|
|
123
|
-
})
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* A class representing multisig information, holding information ingredients and containing utilities.
|
|
123
|
+
* @public
|
|
124
|
+
*/
|
|
125
|
+
@codec(MultisigCkbWitnessCodec)
|
|
124
126
|
export class MultisigCkbWitness extends Entity.Base<
|
|
125
127
|
MultisigCkbWitnessLike,
|
|
126
128
|
MultisigCkbWitness
|
|
127
129
|
>() {
|
|
130
|
+
public publicKeyHashes: Hex[];
|
|
131
|
+
public threshold: number;
|
|
132
|
+
public mustMatch: number;
|
|
133
|
+
public signatures: Hex[];
|
|
134
|
+
|
|
128
135
|
/**
|
|
129
136
|
* @param publicKeyHashes - The public key hashes.
|
|
130
137
|
* @param threshold - The threshold.
|
|
131
138
|
* @param mustMatch - The number of signatures that must match.
|
|
132
139
|
* @param signatures - The signatures.
|
|
133
140
|
*/
|
|
134
|
-
constructor(
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
) {
|
|
141
|
+
constructor({
|
|
142
|
+
publicKeyHashes,
|
|
143
|
+
threshold,
|
|
144
|
+
mustMatch,
|
|
145
|
+
signatures,
|
|
146
|
+
}: DecodedType<typeof MultisigCkbWitnessCodec>) {
|
|
140
147
|
super();
|
|
141
148
|
|
|
142
149
|
const keysLength = publicKeyHashes.length;
|
|
@@ -154,6 +161,11 @@ export class MultisigCkbWitness extends Entity.Base<
|
|
|
154
161
|
if (keysLength > 255) {
|
|
155
162
|
throw new Error("public keys length should be less than 256");
|
|
156
163
|
}
|
|
164
|
+
|
|
165
|
+
this.publicKeyHashes = publicKeyHashes;
|
|
166
|
+
this.threshold = threshold;
|
|
167
|
+
this.mustMatch = mustMatch;
|
|
168
|
+
this.signatures = signatures;
|
|
157
169
|
}
|
|
158
170
|
|
|
159
171
|
/**
|
|
@@ -170,12 +182,12 @@ export class MultisigCkbWitness extends Entity.Base<
|
|
|
170
182
|
return witness.publicKeys.map((k) => hashCkbShort(k));
|
|
171
183
|
})();
|
|
172
184
|
|
|
173
|
-
return new MultisigCkbWitness(
|
|
174
|
-
publicKeyHashes.map(hexFrom),
|
|
175
|
-
Number(numFrom(witness.threshold)),
|
|
176
|
-
Number(numFrom(witness.mustMatch ?? 0)),
|
|
177
|
-
witness.signatures?.map(hexFrom) ?? [],
|
|
178
|
-
);
|
|
185
|
+
return new MultisigCkbWitness({
|
|
186
|
+
publicKeyHashes: publicKeyHashes.map(hexFrom),
|
|
187
|
+
threshold: Number(numFrom(witness.threshold)),
|
|
188
|
+
mustMatch: Number(numFrom(witness.mustMatch ?? 0)),
|
|
189
|
+
signatures: witness.signatures?.map(hexFrom) ?? [],
|
|
190
|
+
});
|
|
179
191
|
}
|
|
180
192
|
|
|
181
193
|
/**
|
|
@@ -1,27 +1,55 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
CredentialKeyType,
|
|
3
|
+
SigningAlg,
|
|
4
|
+
verifyCredential,
|
|
5
|
+
verifySignature,
|
|
6
|
+
} from "@joyid/ckb";
|
|
2
7
|
import { BytesLike } from "../../bytes/index.js";
|
|
3
8
|
import { hexFrom } from "../../hex/index.js";
|
|
4
9
|
|
|
5
10
|
/**
|
|
6
11
|
* @public
|
|
7
12
|
*/
|
|
8
|
-
export function verifyMessageJoyId(
|
|
13
|
+
export async function verifyMessageJoyId(
|
|
9
14
|
message: string | BytesLike,
|
|
10
15
|
signature: string,
|
|
11
16
|
identity: string,
|
|
12
17
|
): Promise<boolean> {
|
|
13
18
|
const challenge =
|
|
14
19
|
typeof message === "string" ? message : hexFrom(message).slice(2);
|
|
15
|
-
const { publicKey, keyType } = JSON.parse(identity) as {
|
|
20
|
+
const { address, publicKey, keyType } = JSON.parse(identity) as {
|
|
21
|
+
address: string;
|
|
16
22
|
publicKey: string;
|
|
17
|
-
keyType:
|
|
23
|
+
keyType: CredentialKeyType;
|
|
18
24
|
};
|
|
25
|
+
const signatureObj = JSON.parse(signature) as {
|
|
26
|
+
alg: SigningAlg;
|
|
27
|
+
signature: string;
|
|
28
|
+
message: string;
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
if (
|
|
32
|
+
!(await verifySignature({
|
|
33
|
+
challenge,
|
|
34
|
+
pubkey: publicKey,
|
|
35
|
+
keyType,
|
|
36
|
+
...signatureObj,
|
|
37
|
+
}))
|
|
38
|
+
) {
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
19
41
|
|
|
20
|
-
//
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
42
|
+
// I sincerely hope one day we can get rid of the centralized registry
|
|
43
|
+
const registry = address.startsWith("ckb")
|
|
44
|
+
? "https://api.joy.id/api/v1/"
|
|
45
|
+
: "https://api.testnet.joyid.dev/api/v1/";
|
|
46
|
+
return verifyCredential(
|
|
47
|
+
{
|
|
48
|
+
pubkey: publicKey,
|
|
49
|
+
address,
|
|
50
|
+
keyType,
|
|
51
|
+
alg: signatureObj.alg,
|
|
52
|
+
},
|
|
53
|
+
registry,
|
|
54
|
+
);
|
|
27
55
|
}
|
package/src/signer/index.ts
CHANGED
|
@@ -5,3 +5,20 @@ export * from "./dummy/index.js";
|
|
|
5
5
|
export * from "./evm/index.js";
|
|
6
6
|
export * from "./nostr/index.js";
|
|
7
7
|
export * from "./signer/index.js";
|
|
8
|
+
export * from "./signerFromSignature.js";
|
|
9
|
+
|
|
10
|
+
import { BytesLike } from "../bytes/index.js";
|
|
11
|
+
import { Client } from "../client/index.js";
|
|
12
|
+
import { Signer as BaseSigner, Signature } from "./signer/index.js";
|
|
13
|
+
import { signerFromSignature } from "./signerFromSignature.js";
|
|
14
|
+
|
|
15
|
+
export abstract class Signer extends BaseSigner {
|
|
16
|
+
static fromSignature(
|
|
17
|
+
client: Client,
|
|
18
|
+
signature: Signature,
|
|
19
|
+
message?: string | BytesLike | null,
|
|
20
|
+
...addresses: (string | string[])[]
|
|
21
|
+
): Promise<Signer | undefined> {
|
|
22
|
+
return signerFromSignature(client, signature, message, ...addresses);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -157,6 +157,17 @@ export abstract class Signer {
|
|
|
157
157
|
}
|
|
158
158
|
}
|
|
159
159
|
|
|
160
|
+
static async fromSignature(
|
|
161
|
+
_client: Client,
|
|
162
|
+
_signature: Signature,
|
|
163
|
+
_message?: string | BytesLike | null,
|
|
164
|
+
..._addresses: (string | string[])[]
|
|
165
|
+
): Promise<Signer | undefined> {
|
|
166
|
+
throw Error(
|
|
167
|
+
"Signer.fromSignature should be override to avoid circular references",
|
|
168
|
+
);
|
|
169
|
+
}
|
|
170
|
+
|
|
160
171
|
/**
|
|
161
172
|
* Connects to the signer.
|
|
162
173
|
*
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { Address } from "../address/index.js";
|
|
2
|
+
import { BytesLike } from "../bytes/index.js";
|
|
3
|
+
import { Client } from "../client/index.js";
|
|
4
|
+
import { SignerBtcPublicKeyReadonly } from "./btc/index.js";
|
|
5
|
+
import { SignerCkbPublicKey, SignerCkbScriptReadonly } from "./ckb/index.js";
|
|
6
|
+
import { SignerDogeAddressReadonly } from "./doge/index.js";
|
|
7
|
+
import { SignerEvmAddressReadonly } from "./evm/index.js";
|
|
8
|
+
import { SignerNostrPublicKeyReadonly } from "./nostr/index.js";
|
|
9
|
+
import { Signature, Signer, SignerSignType } from "./signer/index.js";
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Creates a signer from a signature.
|
|
13
|
+
*
|
|
14
|
+
* @param client - The client instance.
|
|
15
|
+
* @param signature - The signature to create the signer from.
|
|
16
|
+
* @param message - The message that was signed.
|
|
17
|
+
* @param addresses - The addresses to check against the signer.
|
|
18
|
+
* @returns The signer if the signature is valid and the addresses match, otherwise undefined.
|
|
19
|
+
* @throws Error if the signature sign type is unknown.
|
|
20
|
+
*/
|
|
21
|
+
export async function signerFromSignature(
|
|
22
|
+
client: Client,
|
|
23
|
+
signature: Signature,
|
|
24
|
+
message?: string | BytesLike | null,
|
|
25
|
+
...addresses: (string | string[])[]
|
|
26
|
+
): Promise<Signer | undefined> {
|
|
27
|
+
if (
|
|
28
|
+
message != undefined &&
|
|
29
|
+
!(await Signer.verifyMessage(message, signature))
|
|
30
|
+
) {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const signer = await (async () => {
|
|
35
|
+
switch (signature.signType) {
|
|
36
|
+
case SignerSignType.EvmPersonal:
|
|
37
|
+
return new SignerEvmAddressReadonly(client, signature.identity);
|
|
38
|
+
case SignerSignType.BtcEcdsa:
|
|
39
|
+
return new SignerBtcPublicKeyReadonly(client, "", signature.identity);
|
|
40
|
+
case SignerSignType.JoyId: {
|
|
41
|
+
const { address } = JSON.parse(signature.identity) as {
|
|
42
|
+
address: string;
|
|
43
|
+
};
|
|
44
|
+
return new SignerCkbScriptReadonly(
|
|
45
|
+
client,
|
|
46
|
+
(await Address.fromString(address, client)).script,
|
|
47
|
+
);
|
|
48
|
+
}
|
|
49
|
+
case SignerSignType.NostrEvent:
|
|
50
|
+
return new SignerNostrPublicKeyReadonly(client, signature.identity);
|
|
51
|
+
case SignerSignType.CkbSecp256k1:
|
|
52
|
+
return new SignerCkbPublicKey(client, signature.identity);
|
|
53
|
+
case SignerSignType.DogeEcdsa:
|
|
54
|
+
return new SignerDogeAddressReadonly(client, signature.identity);
|
|
55
|
+
case SignerSignType.Unknown:
|
|
56
|
+
throw new Error("Unknown signer sign type");
|
|
57
|
+
}
|
|
58
|
+
})();
|
|
59
|
+
const signerAddresses = await signer.getAddresses();
|
|
60
|
+
if (!addresses.flat().every((addr) => signerAddresses.includes(addr))) {
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
return signer;
|
|
65
|
+
}
|
package/src/utils/index.ts
CHANGED
|
@@ -100,73 +100,155 @@ export function apply<T, R>(
|
|
|
100
100
|
}
|
|
101
101
|
|
|
102
102
|
/**
|
|
103
|
-
* Similar to Array.reduce, but
|
|
103
|
+
* Similar to Array.reduce, but works on any iterable.
|
|
104
104
|
* @public
|
|
105
105
|
*
|
|
106
|
-
* @param values - The
|
|
107
|
-
* @param accumulator - A callback to be called for each value. If it returns null, the previous result will be kept.
|
|
106
|
+
* @param values - The value or iterable to be reduced.
|
|
107
|
+
* @param accumulator - A callback to be called for each value. If it returns null or undefined, the previous result will be kept.
|
|
108
|
+
* @returns The accumulated result.
|
|
109
|
+
*/
|
|
110
|
+
export function reduce<T>(
|
|
111
|
+
values: T | Iterable<T>,
|
|
112
|
+
accumulator: (a: T, b: T, i: number) => T | undefined | null | void,
|
|
113
|
+
): T;
|
|
114
|
+
/**
|
|
115
|
+
* Similar to Array.reduce, but works on any iterable.
|
|
116
|
+
* @public
|
|
117
|
+
*
|
|
118
|
+
* @param values - The value or iterable to be reduced.
|
|
119
|
+
* @param accumulator - A callback to be called for each value. If it returns null or undefined, the previous result will be kept.
|
|
120
|
+
* @param init - The initial value.
|
|
121
|
+
* @returns The accumulated result.
|
|
122
|
+
*/
|
|
123
|
+
export function reduce<T, V>(
|
|
124
|
+
values: V | Iterable<V>,
|
|
125
|
+
accumulator: (a: T, b: V, i: number) => T | undefined | null | void,
|
|
126
|
+
init: T,
|
|
127
|
+
): T;
|
|
128
|
+
/**
|
|
129
|
+
* Similar to Array.reduce, but works on any iterable.
|
|
130
|
+
* @public
|
|
131
|
+
*
|
|
132
|
+
* @param values - The value or iterable to be reduced.
|
|
133
|
+
* @param accumulator - A callback to be called for each value. If it returns null or undefined, the previous result will be kept.
|
|
134
|
+
* @param init - The initial value.
|
|
135
|
+
* @returns The accumulated result.
|
|
136
|
+
*/
|
|
137
|
+
export function reduce<T, V>(
|
|
138
|
+
values: T | Iterable<T> | V | Iterable<V>,
|
|
139
|
+
accumulator: (a: T, b: T | V, i: number) => T | undefined | null | void,
|
|
140
|
+
init?: T,
|
|
141
|
+
): T {
|
|
142
|
+
const hasInit = arguments.length > 2;
|
|
143
|
+
|
|
144
|
+
let acc: T = init as T; // The compiler thinks `acc` isn't assigned without this. Since `T` might be nullable, we should not use non-null assertion here.
|
|
145
|
+
let i = 0;
|
|
146
|
+
|
|
147
|
+
const iterable: Iterable<T> | Iterable<V> =
|
|
148
|
+
values != null && Symbol.iterator in Object(values)
|
|
149
|
+
? (values as Iterable<T> | Iterable<V>)
|
|
150
|
+
: ([values] as T[] | V[]);
|
|
151
|
+
|
|
152
|
+
for (const value of iterable) {
|
|
153
|
+
if (!hasInit && i === 0) {
|
|
154
|
+
acc = value as T;
|
|
155
|
+
i++;
|
|
156
|
+
continue;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
acc = accumulator(acc, value, i) ?? acc;
|
|
160
|
+
i++;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
if (!hasInit && i === 0) {
|
|
164
|
+
throw new TypeError("Reduce of empty iterator with no initial value");
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
return acc;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* Similar to Array.reduce, but works on async iterables and the accumulator can return a Promise.
|
|
172
|
+
* @public
|
|
173
|
+
*
|
|
174
|
+
* @param values - The value, iterable, or async iterable to be reduced.
|
|
175
|
+
* @param accumulator - A callback to be called for each value. If it returns null or undefined, the previous result will be kept.
|
|
108
176
|
* @returns The accumulated result.
|
|
109
177
|
*/
|
|
110
178
|
export async function reduceAsync<T>(
|
|
111
|
-
values: T
|
|
179
|
+
values: T | Iterable<T> | AsyncIterable<T>,
|
|
112
180
|
accumulator: (
|
|
113
181
|
a: T,
|
|
114
182
|
b: T,
|
|
183
|
+
i: number,
|
|
115
184
|
) => Promise<T | undefined | null | void> | T | undefined | null | void,
|
|
116
185
|
): Promise<T>;
|
|
117
186
|
/**
|
|
118
|
-
* Similar to Array.reduce, but the accumulator can
|
|
187
|
+
* Similar to Array.reduce, but works on async iterables and the accumulator can return a Promise.
|
|
119
188
|
* @public
|
|
120
189
|
*
|
|
121
|
-
* @param values - The
|
|
122
|
-
* @param accumulator - A callback to be called for each value. If it returns null, the previous result will be kept.
|
|
190
|
+
* @param values - The value, iterable, or async iterable to be reduced.
|
|
191
|
+
* @param accumulator - A callback to be called for each value. If it returns null or undefined, the previous result will be kept.
|
|
123
192
|
* @param init - The initial value.
|
|
124
193
|
* @returns The accumulated result.
|
|
125
194
|
*/
|
|
126
195
|
export async function reduceAsync<T, V>(
|
|
127
|
-
values: V
|
|
196
|
+
values: V | Iterable<V> | AsyncIterable<V>,
|
|
128
197
|
accumulator: (
|
|
129
198
|
a: T,
|
|
130
199
|
b: V,
|
|
131
200
|
i: number,
|
|
132
|
-
values: V[],
|
|
133
201
|
) => Promise<T | undefined | null | void> | T | undefined | null | void,
|
|
134
202
|
init: T | Promise<T>,
|
|
135
203
|
): Promise<T>;
|
|
136
204
|
/**
|
|
137
|
-
* Similar to Array.reduce, but the accumulator can
|
|
205
|
+
* Similar to Array.reduce, but works on async iterables and the accumulator can return a Promise.
|
|
138
206
|
* @public
|
|
139
207
|
*
|
|
140
|
-
* @param values - The
|
|
141
|
-
* @param accumulator - A callback to be called for each value. If it returns null, the previous result will be kept.
|
|
208
|
+
* @param values - The value, iterable, or async iterable to be reduced.
|
|
209
|
+
* @param accumulator - A callback to be called for each value. If it returns null or undefined, the previous result will be kept.
|
|
142
210
|
* @param init - The initial value.
|
|
143
211
|
* @returns The accumulated result.
|
|
144
212
|
*/
|
|
145
213
|
export async function reduceAsync<T, V>(
|
|
146
|
-
values:
|
|
214
|
+
values:
|
|
215
|
+
T | Iterable<T> | AsyncIterable<T> | V | Iterable<V> | AsyncIterable<V>,
|
|
147
216
|
accumulator: (
|
|
148
217
|
a: T,
|
|
149
218
|
b: T | V,
|
|
150
219
|
i: number,
|
|
151
|
-
values: (V | T)[],
|
|
152
220
|
) => Promise<T | undefined | null | void> | T | undefined | null | void,
|
|
153
221
|
init?: T | Promise<T>,
|
|
154
222
|
): Promise<T> {
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
223
|
+
const hasInit = arguments.length > 2;
|
|
224
|
+
|
|
225
|
+
let acc: T = (await Promise.resolve(init)) as T; // The compiler thinks `acc` isn't assigned without this. Since `T` might be nullable, we should not use non-null assertion here.
|
|
226
|
+
let i = 0;
|
|
227
|
+
|
|
228
|
+
const iterable:
|
|
229
|
+
Iterable<T> | AsyncIterable<T> | Iterable<V> | AsyncIterable<V> =
|
|
230
|
+
values != null && Symbol.asyncIterator in Object(values)
|
|
231
|
+
? (values as AsyncIterable<T> | AsyncIterable<V>)
|
|
232
|
+
: values != null && Symbol.iterator in Object(values)
|
|
233
|
+
? (values as Iterable<T> | Iterable<V>)
|
|
234
|
+
: ([values] as T[] | V[]);
|
|
235
|
+
|
|
236
|
+
for await (const value of iterable) {
|
|
237
|
+
if (!hasInit && i === 0) {
|
|
238
|
+
acc = value as T;
|
|
239
|
+
i++;
|
|
240
|
+
continue;
|
|
158
241
|
}
|
|
159
|
-
|
|
160
|
-
|
|
242
|
+
|
|
243
|
+
acc = (await accumulator(acc, value, i)) ?? acc;
|
|
244
|
+
i++;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
if (!hasInit && i === 0) {
|
|
248
|
+
throw new TypeError("Reduce of empty iterator with no initial value");
|
|
161
249
|
}
|
|
162
250
|
|
|
163
|
-
return
|
|
164
|
-
(current: Promise<T>, b: T | V, i, array) =>
|
|
165
|
-
current.then((v) =>
|
|
166
|
-
Promise.resolve(accumulator(v, b, i, array)).then((r) => r ?? v),
|
|
167
|
-
),
|
|
168
|
-
Promise.resolve(init),
|
|
169
|
-
);
|
|
251
|
+
return acc;
|
|
170
252
|
}
|
|
171
253
|
|
|
172
254
|
export function sleep(ms: NumLike) {
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{bech32 as e,bech32m as t}from"bech32";import{Buffer as n}from"buffer/index.js";import{blake2b as r}from"@noble/hashes/blake2.js";import i from"isomorphic-ws";const a=Uint8Array;function o(e,...t){return t.reduce((t,n)=>{let r=l(n);for(let t of r)e.push(t);return t},e)}function s(...e){return new Uint8Array(o([],...e))}function c(e,t){return n.from(l(e)).toString(t)}function l(e,t){if(e instanceof Uint8Array)return e;if(e instanceof ArrayBuffer)return new Uint8Array(e);if(typeof e==`string`){if(t!==void 0)return n.from(e,t);let r=e.startsWith(`0x`)?e.slice(2):e,i=r.length%2==0?r:`0${r}`,a=n.from(i,`hex`);if(a.length*2!==i.length)throw Error(`Invalid bytes ${e}`);return a}if(Array.from(e).some(e=>e<0||255<e))throw Error(`Invalid bytes ${JSON.stringify(e)}`);return new Uint8Array(e)}function u(e,t){if(e===t)return!0;let n=l(e),r=l(t);if(n.length!==r.length)return!1;for(let e=0;e<n.length;e++)if(n[e]!==r[e])return!1;return!0}var d=class e{constructor(e,t,n){this.encode=e,this.decode=t,this.byteLength=n}encodeOr(e,t){try{return this.encode(e)}catch{return t}}decodeOr(e,t,n){try{return this.decode(e,n)}catch{return t}}static from({encode:t,decode:n,byteLength:r}){return new e(e=>{let n=t(e);if(r!==void 0&&n.byteLength!==r)throw Error(`Codec.encode: expected byte length ${r}, got ${n.byteLength}`);return n},(e,t)=>{let i=l(e);if(r!==void 0&&i.byteLength!==r)throw Error(`Codec.decode: expected byte length ${r}, got ${i.byteLength}`);return n(e,t)},r)}map({inMap:t,outMap:n}){return new e(e=>this.encode(t?t(e):e),(e,t)=>n?n(this.decode(e,t)):this.decode(e,t),this.byteLength)}mapIn(e){return this.map({inMap:e})}mapOut(e){return this.map({outMap:e})}};function f(e){if(!(typeof e==`string`&&e.length%2==0&&e.startsWith(`0x`)))return!1;for(let t=2;t<e.length;t++){let n=e.charAt(t);if(!(`0`<=n&&n<=`9`||`a`<=n&&n<=`f`))return!1}return!0}function p(e){return f(e)?e:`0x${c(l(e),`hex`)}`}function ee(e){return f(e)?te(e):l(e).length}function te(e){return Math.floor((e.length-1)/2)}const ne=l(`ckb-default-hash`,`utf8`),re=32,ie=20;var ae=class{constructor(e=32,t=ne){this.hasher=r.create({personalization:t,dkLen:e})}update(e){return this.hasher.update(l(e)),this}digest(){return p(this.hasher.digest())}};function oe(...e){let t=new ae;return e.forEach(e=>t.update(e)),t.digest()}function se(...e){return oe(...e).slice(0,42)}var m=class{static Base(){class e extends m{static encode(e){throw Error(`encode not implemented, use @ccc.codec to decorate your type`)}static decode(e){throw Error(`decode not implemented, use @ccc.codec to decorate your type`)}static fromBytes(e){throw Error(`fromBytes not implemented, use @ccc.codec to decorate your type`)}static from(e){throw Error(`from not implemented`)}toBytes(){return this.constructor.encode(this)}clone(){return this.constructor.fromBytes(this.toBytes())}eq(e){return this===e||u(this.toBytes(),(this.constructor?.from(e)??e).toBytes())}hash(){return oe(this.toBytes())}toHex(){return p(this.toBytes())}}return e.encode=void 0,e.decode=void 0,e.fromBytes=void 0,e}static BaseUnion(){class e extends m.Base(){constructor(e){super(),this.inner=e}match(e){let t=e[this.inner.type];return t==null?e._(this.inner):t(this.inner.value)}}return e}};function h(e){return function(t,...n){return t.byteLength=e.byteLength,t.encode===void 0&&(t.encode=function(n){return e.encode(t.from(n))}),t.decode===void 0&&(t.decode=function(n){return t.from(e.decode(l(n)))}),t.fromBytes===void 0&&(t.fromBytes=function(n){return t.from(e.decode(l(n)))}),t}}function ce(e,t=8){let n=g(e).toString();if(t===0)return n;let r=n.length<=t?`0`:n.slice(0,-t),i=n.slice(-t).padStart(t,`0`).replace(/0*$/,``);return i===``?r:`${r}.${i}`}function g(e,t=8){if(typeof e==`bigint`)return e;let[n,r]=(typeof e==`number`?e.toFixed(t):e.toString()).split(`.`),i=BigInt(n.padEnd(n.length+t,`0`));return r===void 0?i:i+BigInt(r.slice(0,t).padEnd(t,`0`))}const _=0n,le=g(`1`);function ue(e,...t){let n=v(e);return t.forEach(e=>{let t=v(e);t<n&&(n=t)}),n}function de(e,...t){let n=v(e);return t.forEach(e=>{let t=v(e);t>n&&(n=t)}),n}function v(e){if(typeof e==`bigint`)return e;if(e===`0x`)return BigInt(0);if(typeof e==`string`||typeof e==`number`)return BigInt(e);let t=p(e);return BigInt(t)}function y(e){let t=v(e);if(t<0n)throw Error(`value must be non-negative`);return`0x${t.toString(16)}`}function fe(e,t){return pe(e,t)}function pe(e,t){return me(e,t).reverse()}function me(e,t){let n=v(e);if(n<v(0)){if(t==null)throw Error(`negative number can not be serialized without knowing bytes length`);if(n=(v(1)<<v(8)*v(t))+n,n<0)throw Error(`negative number underflow`)}let r=l(n.toString(16));if(t==null)return r;if(r.length>t)throw Error(`number overflow`);return s(`00`.repeat(t-r.length),r)}function b(e){return x(e)}function x(e){return he(l(e).map(e=>e).reverse())}function he(e){return v(l(e))}function S(e,t=!1){return d.from({byteLength:e,encode:n=>t?fe(n,e):me(n,e),decode:e=>t?b(e):he(e)})}function C(e,t=!1){if(e>4)throw Error(`uintNumber: byteLength must be less than or equal to 4`);return S(e,t).map({outMap:e=>Number(e)})}function ge(e){return d.from({byteLength:e,encode:()=>new Uint8Array(e),decode:()=>{}})}const _e=d.from({encode:e=>l(e),decode:e=>l(e)}),ve=d.from({encode:e=>l(e),decode:e=>p(e)}),ye=C(1,!0),be=C(2,!0),xe=C(2),Se=be,Ce=C(4,!0),we=C(4),Te=Ce,Ee=S(8,!0),De=S(8),w=Ee,Oe=S(16,!0),ke=S(16),Ae=Oe,je=S(32,!0),Me=S(32),Ne=je,Pe=S(64,!0),Fe=S(64),Ie=Pe,Le=d.from({byteLength:1,encode:e=>l(e?[1]:[0]),decode:e=>l(e)[0]!==0}),Re=d.from({byteLength:1,encode:e=>l(e),decode:e=>p(e)}),ze=d.from({byteLength:4,encode:e=>l(e),decode:e=>p(e)}),Be=d.from({byteLength:8,encode:e=>l(e),decode:e=>p(e)}),Ve=d.from({byteLength:16,encode:e=>l(e),decode:e=>p(e)}),T=d.from({byteLength:32,encode:e=>l(e),decode:e=>p(e)});function E(e){return fe(e,4)}function D(e){return Number(b(e))}function O(e){return e instanceof Error?e.message:String(e)}function He(e){let t=e.byteLength;if(t===void 0)throw Error(`fixedItemVec: itemCodec requires a byte length`);return d.from({encode(t){try{let n=[];o(n,E(t.length));for(let r of t)o(n,e.encode(r));return l(n)}catch(e){throw Error(`fixedItemVec - ${O(e)}`,{cause:e})}},decode(n,r){let i=l(n);if(i.byteLength<4)throw Error(`fixedItemVec: too short buffer, expected at least 4 bytes, but got ${i.byteLength}`);let a=4+D(i.slice(0,4))*t;if(i.byteLength!==a)throw Error(`fixedItemVec: invalid buffer size, expected ${a}, but got ${i.byteLength}`);try{let n=[];for(let o=4;o<a;o+=t)n.push(e.decode(i.slice(o,o+t),r));return n}catch(e){throw Error(`fixedItemVec - ${O(e)}`,{cause:e})}}})}function Ue(e){return d.from({encode(t){try{let n=4+t.length*4,r=[],i=[];for(let a of t){let t=e.encode(a);o(r,E(n)),o(i,t),n+=t.byteLength}return s(E(r.length+i.length+4),r,i)}catch(e){throw Error(`dynItemVec - ${O(e)}`,{cause:e})}},decode(t,n){let r=l(t);if(r.byteLength<4)throw Error(`dynItemVec: too short buffer, expected at least 4 bytes, but got ${r.byteLength}`);let i=D(r.slice(0,4));if(i!==r.byteLength)throw Error(`dynItemVec: invalid buffer size, expected ${i}, but got ${r.byteLength}`);if(i===4)return[];let a=(D(r.slice(4,8))-4)/4,o=Array.from(Array(a),(e,t)=>D(r.slice(4+t*4,8+t*4)));o.push(i);try{let t=[];for(let i=0;i<o.length-1;i++){let a=o[i],s=o[i+1],c=r.slice(a,s);t.push(e.decode(c,n))}return t}catch(e){throw Error(`dynItemVec - ${O(e)}`,{cause:e})}}})}function k(e){return e.byteLength===void 0?Ue(e):He(e)}function A(e){return d.from({encode(t){if(t==null)return l([]);try{return e.encode(t)}catch(e){throw Error(`option - ${O(e)}`,{cause:e})}},decode(t,n){if(l(t).byteLength!==0)try{return e.decode(t,n)}catch(e){throw Error(`option - ${O(e)}`,{cause:e})}}})}function We(e){return d.from({encode(t){try{let n=l(e.encode(t));return s(E(n.byteLength),n)}catch(e){throw Error(`byteVec - ${O(e)}`,{cause:e})}},decode(t,n){let r=l(t);if(r.byteLength<4)throw Error(`byteVec: too short buffer, expected at least 4 bytes, but got ${r.byteLength}`);let i=D(r.slice(0,4));if(i!==r.byteLength-4)throw Error(`byteVec: invalid buffer size, expected ${i}, but got ${r.byteLength}`);try{return e.decode(r.slice(4),n)}catch(e){throw Error(`byteVec - ${O(e)}`,{cause:e})}}})}function j(e){let t=Object.keys(e);return d.from({encode(n){let r=4+t.length*4,i=[],a=[];for(let s of t)try{let t=e[s].encode(n[s]);o(i,E(r)),o(a,t),r+=t.byteLength}catch(e){throw Error(`table.${s} - ${O(e)}`,{cause:e})}return s(E(i.length+a.length+4),i,a)},decode(n,r){let i=l(n);if(i.byteLength<4)throw Error(`table: too short buffer, expected at least 4 bytes, but got ${i.byteLength}`);let a=D(i.slice(0,4)),o=(D(i.slice(4,8))-4)/4;if(a!==i.byteLength)throw Error(`table: invalid buffer size, expected ${a}, but got ${i.byteLength}`);if(o<t.length)throw Error(`table: invalid field count, expected ${t.length}, but got ${o}`);if(o>t.length&&!r?.isExtraFieldIgnored)throw Error(`table: invalid field count, expected ${t.length}, but got ${o}, and extra fields are not allowed in the current configuration. If you want to ignore extra fields, set isExtraFieldIgnored to true.`);let s=t.map((e,t)=>D(i.slice(4+t*4,8+t*4)));o>t.length?s.push(D(i.slice(4+t.length*4,8+t.length*4))):s.push(a);let c={};for(let n=0;n<s.length-1;n++){let a=s[n],o=s[n+1],l=t[n],u=e[l],d=i.slice(a,o);try{Object.assign(c,{[l]:u.decode(d,r)})}catch(e){throw Error(`table.${l} - ${O(e)}`,{cause:e})}}return c}})}function Ge(e,t){let n=Object.entries(e),r;if(n.length>0){let e=n[0][1].byteLength;e!==void 0&&n.every(([,{byteLength:t}])=>t===e)&&(r=e+4)}function i(e){return`type`in e&&`value`in e?e:e.inner}return d.from({byteLength:r,encode(r){let{type:a,value:o}=i(r),c=a.toString(),l=e[c];if(!l)throw Error(`union: invalid type, expected ${n.map(e=>e[0]).toString()}, but got ${c}`);let u=t?t[c]??-1:n.findIndex(e=>e[0]===c);if(u<0)throw Error(`union: invalid field id ${u} of ${c}`);let d=E(u);try{return s(d,l.encode(o))}catch(e){throw Error(`union.(${c}) - ${O(e)}`,{cause:e})}},decode(n,r){let i=l(n),a=D(i.slice(0,4)),o=Object.keys(e),s=t?Object.entries(t).find(([,e])=>e===a)?.[0]:o[a];if(!s){if(!t)throw Error(`union: unknown union field index ${a}, only ${o.toString()} are allowed`);let e=Object.keys(t);throw Error(`union: unknown union field index ${a}, only ${e.toString()} and ${o.toString()} are allowed`)}return{type:s,value:e[s].decode(i.slice(4),r)}}})}function M(e){let t=Object.values(e),n=Object.keys(e);return d.from({byteLength:t.reduce((e,t)=>{if(t.byteLength===void 0)throw Error(`struct: all fields must be fixed-size`);return e+t.byteLength},0),encode(t){let r=[];for(let i of n)try{o(r,e[i].encode(t[i]))}catch(e){throw Error(`struct.${i} - ${O(e)}`,{cause:e})}return l(r)},decode(t,n){let r=l(t),i={},a=0;return Object.entries(e).forEach(([e,t])=>{let o=r.slice(a,a+t.byteLength);try{Object.assign(i,{[e]:t.decode(o,n)})}catch(t){throw Error(`struct.${e} - ${O(t)}`,{cause:t})}a+=t.byteLength}),i}})}function Ke(e,t){if(e.byteLength===void 0)throw Error(`array: itemCodec requires a byte length`);let n=e.byteLength*t;return d.from({byteLength:n,encode(t){try{let n=[];for(let r of t)o(n,e.encode(r));return l(n)}catch(e){throw Error(`array - ${O(e)}`,{cause:e})}},decode(t,r){let i=l(t);if(i.byteLength!=n)throw Error(`array: invalid buffer size, expected ${n}, but got ${i.byteLength}`);try{let t=[];for(let n=0;n<i.byteLength;n+=e.byteLength)t.push(e.decode(i.slice(n,n+e.byteLength),r));return t}catch(e){throw Error(`array - ${O(e)}`,{cause:e})}}})}const qe=A(ye),Je=k(ye),Ye=A(Se),Xe=k(Se),Ze=A(Te),Qe=k(Te),$e=A(w),et=k(w),tt=A(Ae),nt=k(Ae),rt=A(Ne),it=k(Ne),at=A(Ie),ot=k(Ie),st=We(ve),ct=A(st),lt=k(st),ut=A(Le),dt=k(Le),ft=A(Re),pt=k(Re),mt=A(ze),ht=k(ze),gt=A(Be),_t=k(Be),vt=A(Ve),yt=k(Ve),bt=A(T),xt=k(T),St=We({encode:e=>l(e,`utf8`),decode:e=>c(e,`utf8`)}),Ct=k(St),wt=A(St);function N(e,t){if(t!=null)return e(t)}async function P(e,t,n){if(n===void 0){if(e.length===0)throw TypeError(`Reduce of empty array with no initial value`);n=e[0],e=e.slice(1)}return e.reduce((e,n,r,i)=>e.then(e=>Promise.resolve(t(e,n,r,i)).then(t=>t??e)),Promise.resolve(n))}function Tt(e){return new Promise(t=>setTimeout(t,Number(v(e))))}function Et(e){return/webview|wv|ip((?!.*Safari)|(?=.*like Safari))/i.test(e)}function Dt(e){return JSON.stringify(e,(e,t)=>typeof t==`bigint`?y(t):t)}function Ot(e,t){for(e=v(e),t=v(t),e=e<0n?-e:e,t=t<0n?-t:t;t!==_;)[e,t]=[t,e%t];return e}function F(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a}var I;let L=I=class extends m.Base(){constructor(e,t,n){super(),this.integer=e,this.numerator=t,this.denominator=n}normalizeBase(){return this.denominator===0n?I.from([this.integer,_,v(1)]):this.denominator<0n?I.from([this.integer,-this.numerator,-this.denominator]):this}normalizeCanonical(){let{integer:e,numerator:t,denominator:n}=this.normalizeBase();if(t<0n){let r=(-t+n-1n)/n;e-=r,t+=n*r}let r=Ot(t,n);return t/=r,n/=r,e+=t/n,t%=n,I.from([e,t,n])}get 0(){return this.integer}get 1(){return this.numerator}get 2(){return this.denominator}toNum(){if(this.integer<0n||this.numerator<0n||this.denominator<0n)throw Error(`Negative values in Epoch to Num conversion`);if(this.integer>=v(`0x1000000`)||this.numerator>=v(`0x10000`)||this.denominator>=v(`0x10000`))throw Error(`Integer must be < 2^24, numerator and denominator must be < 2^16`);return this.integer+(this.numerator<<v(24))+(this.denominator<<v(40))}toPackedHex(){return y(this.toNum())}static fromNum(e){let t=v(e);return new I(t&v(`0xffffff`),t>>v(24)&v(`0xffff`),t>>v(40)&v(`0xffff`))}static from(e){return e instanceof I?e:Array.isArray(e)?new I(v(e[0]),v(e[1]),v(e[2])):typeof e==`object`?new I(v(e.integer),v(e.numerator),v(e.denominator)):I.fromNum(e)}clone(){return I.from([this.integer,this.numerator,this.denominator])}static get Genesis(){return I.from([_,_,_])}static get OneNervosDaoCycle(){return I.from([v(180),_,v(1)])}compare(e){if(this===e)return 0;let t=this.normalizeBase(),n=I.from(e).normalizeBase(),r=(t.integer*t.denominator+t.numerator)*n.denominator,i=(n.integer*n.denominator+n.numerator)*t.denominator;return r>i?1:r<i?-1:0}lt(e){return this.compare(e)<0}le(e){return this.compare(e)<=0}eq(e){return this.compare(e)===0}ge(e){return this.compare(e)>=0}gt(e){return this.compare(e)>0}add(e){let t=this.normalizeBase(),n=I.from(e).normalizeBase(),r=t.integer+n.integer,i,a;return t.denominator===n.denominator?(i=t.numerator+n.numerator,a=t.denominator):(i=t.numerator*n.denominator+n.numerator*t.denominator,a=t.denominator*n.denominator),I.from([r,i,a]).normalizeCanonical()}sub(e){let{integer:t,numerator:n,denominator:r}=I.from(e);return this.add(I.from([-t,-n,r]))}toUnix(e,t=v(14400*1e3)){let{integer:n,numerator:r,denominator:i}=this.sub(e.epoch);return e.timestamp+t*n+t*r/i}};L=I=F([h(M({padding:ge(1),denominator:S(2),numerator:S(2),integer:S(3)}))],L);function kt(e){return L.from(e)}function At(e){return L.fromNum(e)}function jt(e){return L.from(e).toPackedHex()}const Mt=v(1e7),Nt=v(1e3);function R([e,t]){return[v(e),v(t)]}var Pt=class e{constructor(e,t){this.cellDep=e,this.type=t}static from(t){return t instanceof e?t:new e(Z.from(t.cellDep),N(H.from,t.type))}},Ft=class e{constructor(e,t,n){this.codeHash=e,this.hashType=t,this.cellDeps=n}static from(t){return t instanceof e?t:new e(p(t.codeHash),mn(t.hashType),t.cellDeps.map(e=>Pt.from(e)))}},It=class e{constructor(e,t,n,r,i,a,o){this.transaction=e,this.status=t,this.cycles=n,this.blockHash=r,this.blockNumber=i,this.txIndex=a,this.reason=o}static from(t){return t instanceof e?t:new e($.from(t.transaction),t.status,N(v,t.cycles),N(p,t.blockHash),N(v,t.blockNumber),N(v,t.txIndex),t.reason)}clone(){return new e(this.transaction.clone(),this.status,this.cycles,this.blockHash,this.blockNumber,this.txIndex,this.reason)}},Lt=class e{constructor(e,t,n,r,i,a,o){this.script=e,this.scriptLenRange=t,this.outputData=n,this.outputDataSearchMode=r,this.outputDataLenRange=i,this.outputCapacityRange=a,this.blockRange=o}static from(t){return t instanceof e?t:new e(N(H.from,t.script),N(R,t.scriptLenRange),N(p,t.outputData),t.outputDataSearchMode??void 0,N(R,t.outputDataLenRange),N(R,t.outputCapacityRange),N(R,t.blockRange))}},Rt=class e{constructor(e,t,n,r,i){this.script=e,this.scriptType=t,this.scriptSearchMode=n,this.filter=r,this.withData=i}static from(t){return t instanceof e?t:new e(H.from(t.script),t.scriptType,t.scriptSearchMode,N(Lt.from,t.filter),t.withData??void 0)}},zt=class e{constructor(e,t,n,r,i){this.script=e,this.scriptType=t,this.scriptSearchMode=n,this.filter=r,this.groupByTransaction=i}static from(t){return t instanceof e?t:new e(H.from(t.script),t.scriptType,t.scriptSearchMode,N(Lt.from,t.filter),t.groupByTransaction??void 0)}},z=class e{constructor(e,t,n,r,i,a,o,s,c,l,u,d){this.compactTarget=e,this.dao=t,this.epoch=n,this.extraHash=r,this.hash=i,this.nonce=a,this.number=o,this.parentHash=s,this.proposalsHash=c,this.timestamp=l,this.transactionsRoot=u,this.version=d}static from(t){return t instanceof e?t:new e(v(t.compactTarget),{c:v(t.dao.c),ar:v(t.dao.ar),s:v(t.dao.s),u:v(t.dao.u)},L.from(t.epoch),p(t.extraHash),p(t.hash),v(t.nonce),v(t.number),p(t.parentHash),p(t.proposalsHash),v(t.timestamp),p(t.transactionsRoot),v(t.version))}},Bt=class e{constructor(e,t){this.header=e,this.proposals=t}static from(t){return t instanceof e?t:new e(z.from(t.header),t.proposals.map(p))}},Vt=class e{constructor(e,t,n,r){this.header=e,this.proposals=t,this.transactions=n,this.uncles=r}static from(t){return t instanceof e?t:new e(z.from(t.header),t.proposals.map(p),t.transactions.map($.from),t.uncles.map(Bt.from))}},B=class extends Error{constructor(e){super(`Client request error ${e.message}`),this.code=e.code,this.data=e.data}},Ht=class extends B{constructor(e,t){super(e),this.outPoint=K.from(t)}},Ut=class extends B{constructor(e,t,n,r,i,a){super(e),this.source=t,this.errorCode=r,this.scriptHashType=i,this.sourceIndex=v(n),this.scriptCodeHash=p(a)}},Wt=class extends B{constructor(e,t){super(e),this.txHash=p(t)}},Gt=class extends B{constructor(e,t,n){super(e),this.currentFee=v(t),this.leastFee=v(n)}},Kt=class extends B{constructor(e){let t=v(e).toString();super({message:`Wait transaction timeout ${t}ms`,data:JSON.stringify({timeout:t})})}},qt=class extends B{constructor(e,t){let n=v(e).toString(),r=v(t).toString();super({message:`Max fee rate exceeded limit ${n}, actual ${r}. Developer might forgot to complete transaction fee before sending. See https://api.ckbccc.com/classes/_ckb_ccc_core.index.ccc.Transaction.html#completeFeeBy.`,data:JSON.stringify({limit:n,actual:r})})}};const Jt=v(1e3*10*50);function Yt(e,t,n){if(!t)return!0;let r=p(e),i=p(t);return!(n===`exact`&&r!==i||n===`prefix`&&!r.startsWith(i)||n===`partial`&&r.search(i)===-1)}function Xt(e,t,n){if(!t)return!0;if(!e)return!1;let r=H.from(e),i=H.from(t);return r.codeHash!==i.codeHash||r.hashType!==i.hashType?!1:Yt(r.args,i?.args,n)}function Zt(e,t){if(!t)return!0;let n=v(e),[r,i]=R(t);return r<=n&&n<i}function Qt(e,t){return!t||Zt(e?l(H.from(e).args).length+33:0,t)}function $t(e,t){let n=Rt.from(e),r=In.from(t);return!(n.scriptType===`lock`&&(!Xt(r.cellOutput.lock,n.script,n.scriptSearchMode)||!Xt(r.cellOutput.type,n.filter?.script,`prefix`)||!Qt(r.cellOutput.type,n.filter?.scriptLenRange))||n.scriptType===`type`&&(!Xt(r.cellOutput.type,n.script,n.scriptSearchMode)||!Xt(r.cellOutput.lock,n.filter?.script,`prefix`)||!Qt(r.cellOutput.lock,n.filter?.scriptLenRange))||!Yt(r.outputData,n.filter?.outputData,n.filter?.outputDataSearchMode??`prefix`)||!Zt(l(r.outputData).length,n.filter?.outputDataLenRange)||!Zt(r.cellOutput.capacity,n.filter?.outputCapacityRange))}var en=class extends Map{constructor(e){if(super(),this.capacity=e,this.lru=new Set,!Number.isInteger(e)||e<1)throw Error(`Capacity must be a positive integer`)}get(e){if(super.has(e))return this.lru.delete(e),this.lru.add(e),super.get(e)}set(e,t){if(super.set(e,t),this.lru.delete(e),this.lru.add(e),this.lru.size>this.capacity){let e=this.lru.keys().next().value;this.delete(e)}return this}delete(e){return super.delete(e)?(this.lru.delete(e),!0):!1}clear(){super.clear(),this.lru.clear()}};let tn=function(e){return e.NervosDao=`NervosDao`,e.Secp256k1Blake160=`Secp256k1Blake160`,e.Secp256k1Multisig=`Secp256k1Multisig`,e.Secp256k1MultisigV2Beta=`Secp256k1MultisigV2Beta`,e.Secp256k1MultisigV2=`Secp256k1MultisigV2`,e.AnyoneCanPay=`AnyoneCanPay`,e.TypeId=`TypeId`,e.SUdt=`SUdt`,e.XUdt=`XUdt`,e.JoyId=`JoyId`,e.COTA=`COTA`,e.PWLock=`PWLock`,e.OmniLock=`OmniLock`,e.NostrLock=`NostrLock`,e.UniqueType=`UniqueType`,e.DidCkb=`DidCkb`,e.AlwaysSuccess=`AlwaysSuccess`,e.InputTypeProxyLock=`InputTypeProxyLock`,e.OutputTypeProxyLock=`OutputTypeProxyLock`,e.LockProxyLock=`LockProxyLock`,e.SingleUseLock=`SingleUseLock`,e.TypeBurnLock=`TypeBurnLock`,e.EasyToDiscoverType=`EasyToDiscoverType`,e.TimeLock=`TimeLock`,e}({});const nn=Object.freeze({NervosDao:{codeHash:`0x82d76d1b75fe2fd9a27dfbaa65a039221a380d76c926f378d3f81cf3e7e13f2e`,hashType:`type`,cellDeps:[{cellDep:{outPoint:{txHash:`0xe2fb199810d49a4d8beec56718ba2593b665db9d52299a0f9e6e75416d73ff5c`,index:2},depType:`code`}}]},Secp256k1Blake160:{codeHash:`0x9bd7e06f3ecf4be0f2fcd2188b23f1b9fcc88e5d4b65a8637b17723bbda3cce8`,hashType:`type`,cellDeps:[{cellDep:{outPoint:{txHash:`0x71a7ba8fc96349fea0ed3a5c47992e3b4084b031a42264a018e0072e8172e46c`,index:0},depType:`depGroup`}}]},Secp256k1Multisig:{codeHash:`0x5c5069eb0857efc65e1bca0c07df34c31663b3622fd3876c876320fc9634e2a8`,hashType:`type`,cellDeps:[{cellDep:{outPoint:{txHash:`0x71a7ba8fc96349fea0ed3a5c47992e3b4084b031a42264a018e0072e8172e46c`,index:1},depType:`depGroup`}}]},Secp256k1MultisigV2Beta:{codeHash:`0xd1a9f877aed3f5e07cb9c52b61ab96d06f250ae6883cc7f0a2423db0976fc821`,hashType:`type`,cellDeps:[{cellDep:{outPoint:{txHash:`0x44be4f4feda80c0e41783ab10e191df3b2bb5c3731b0970c916dbec385dcdc60`,index:0},depType:`depGroup`}}]},Secp256k1MultisigV2:{codeHash:`0x36c971b8d41fbd94aabca77dc75e826729ac98447b46f91e00796155dddb0d29`,hashType:`data1`,cellDeps:[{cellDep:{outPoint:{txHash:`0x6888aa39ab30c570c2c30d9d5684d3769bf77265a7973211a3c087fe8efbf738`,index:0},depType:`depGroup`}}]},AnyoneCanPay:{codeHash:`0xd369597ff47f29fbc0d47d2e3775370d1250b85140c670e4718af712983a2354`,hashType:`type`,cellDeps:[{cellDep:{outPoint:{txHash:`0x4153a2014952d7cac45f285ce9a7c5c0c0e1b21f2d378b82ac1433cb11c25c4d`,index:0},depType:`depGroup`}}]},TypeId:{codeHash:`0x00000000000000000000000000000000000000000000000000545950455f4944`,hashType:`type`,cellDeps:[]},SUdt:{codeHash:`0x5e7a36a77e68eecc013dfa2fe6a23f3b6c344b04005808694ae6dd45eea4cfd5`,hashType:`type`,cellDeps:[{cellDep:{outPoint:{txHash:`0xc7813f6a415144643970c2e88e0bb6ca6a8edc5dd7c1022746f628284a9936d5`,index:0},depType:`code`}}]},XUdt:{codeHash:`0x50bd8d6680b8b9cf98b73f3c08faf8b2a21914311954118ad6609be6e78a1b95`,hashType:`data1`,cellDeps:[{cellDep:{outPoint:{txHash:`0xc07844ce21b38e4b071dd0e1ee3b0e27afd8d7532491327f39b786343f558ab7`,index:0},depType:`code`}}]},JoyId:{codeHash:`0xd00c84f0ec8fd441c38bc3f87a371f547190f2fcff88e642bc5bf54b9e318323`,hashType:`type`,cellDeps:[{cellDep:{outPoint:{txHash:`0x8a605a4402cadda69fa64fd25cbbd74058e3eb86a7a72aee3d25df278564d31b`,index:0},depType:`code`},type:{codeHash:`0x00000000000000000000000000000000000000000000000000545950455f4944`,hashType:`type`,args:`0x2d1f2d4d1514ccc3bb4f04f5437a5ae30d00636ee57cedd2c70ab3ea75b62adc`}},{cellDep:{outPoint:{txHash:`0x8a605a4402cadda69fa64fd25cbbd74058e3eb86a7a72aee3d25df278564d31b`,index:1},depType:`code`},type:{codeHash:`0x00000000000000000000000000000000000000000000000000545950455f4944`,hashType:`type`,args:`0xc086090432098835ec542a1b94bdd1b842c5aa1ccd1616873fe77f4a04044417`}},{cellDep:{outPoint:{txHash:`0x8a605a4402cadda69fa64fd25cbbd74058e3eb86a7a72aee3d25df278564d31b`,index:2},depType:`code`},type:{codeHash:`0x00000000000000000000000000000000000000000000000000545950455f4944`,hashType:`type`,args:`0x165b225c6fbed7e655b024384d9083de3243375f9893706f4452858ecd694e96`}},{cellDep:{outPoint:{txHash:`0x8a605a4402cadda69fa64fd25cbbd74058e3eb86a7a72aee3d25df278564d31b`,index:3},depType:`code`},type:{codeHash:`0x00000000000000000000000000000000000000000000000000545950455f4944`,hashType:`type`,args:`0xafb8408d0094ab944e6286aac750b9bb854ac0bcb66dfe5c60559744a700e70c`}},{cellDep:{outPoint:{txHash:`0x8a605a4402cadda69fa64fd25cbbd74058e3eb86a7a72aee3d25df278564d31b`,index:4},depType:`code`},type:{codeHash:`0x00000000000000000000000000000000000000000000000000545950455f4944`,hashType:`type`,args:`0x773bf0647be24b4e18ef44068fd069b9de5549c4b86be227779ceb9179598ec4`}}]},COTA:{codeHash:`0x1122a4fb54697cf2e6e3a96c9d80fd398a936559b90954c6e88eb7ba0cf652df`,hashType:`type`,cellDeps:[{cellDep:{outPoint:{txHash:`0xabaa25237554f0d6c586dc010e7e85e6870bcfd9fb8773257ecacfbe1fd738a0`,index:0},depType:`depGroup`}}]},PWLock:{codeHash:`0xbf43c3602455798c1a61a596e0d95278864c552fafe231c063b3fabf97a8febc`,hashType:`type`,cellDeps:[{cellDep:{outPoint:{txHash:`0x71a7ba8fc96349fea0ed3a5c47992e3b4084b031a42264a018e0072e8172e46c`,index:0},depType:`depGroup`}},{cellDep:{outPoint:{txHash:`0x1d60cb8f4666e039f418ea94730b1a8c5aa0bf2f7781474406387462924d15d4`,index:0},depType:`code`},type:{codeHash:`0x00000000000000000000000000000000000000000000000000545950455f4944`,hashType:`type`,args:`0x42ade2f25eb938b5dbfd3d8f07b8b07aa593d848e7ff14bdfbbea5aeb6175261`}}]},OmniLock:{codeHash:`0x9b819793a64463aed77c615d6cb226eea5487ccfc0783043a587254cda2b6f26`,hashType:`type`,cellDeps:[{cellDep:{outPoint:{txHash:`0x71a7ba8fc96349fea0ed3a5c47992e3b4084b031a42264a018e0072e8172e46c`,index:0},depType:`depGroup`}},{cellDep:{outPoint:{txHash:`0xc76edf469816aa22f416503c38d0b533d2a018e253e379f134c3985b3472c842`,index:0},depType:`code`},type:{codeHash:`0x00000000000000000000000000000000000000000000000000545950455f4944`,hashType:`type`,args:`0x855508fe0f0ca25b935b070452ecaee48f6c9f1d66cd15f046616b99e948236a`}}]},NostrLock:{codeHash:`0x641a89ad2f77721b803cd50d01351c1f308444072d5fa20088567196c0574c68`,hashType:`type`,cellDeps:[{cellDep:{outPoint:{txHash:`0x99b116dd1e4f1fa903b70112ae672c18bb34241d3d03a9ad555cd2a611be7327`,index:0},depType:`code`},type:{codeHash:`0x00000000000000000000000000000000000000000000000000545950455f4944`,hashType:`type`,args:`0xfad8cb75eb0bb01718e2336002064568bc05887af107f74ed5dd501829e192f8`}}]},UniqueType:{codeHash:`0x2c8c11c985da60b0a330c61a85507416d6382c130ba67f0c47ab071e00aec628`,hashType:`data1`,cellDeps:[{cellDep:{outPoint:{txHash:`0x67524c01c0cb5492e499c7c7e406f2f9d823e162d6b0cf432eacde0c9808c2ad`,index:0},depType:`code`}}]},DidCkb:{codeHash:`0x4a06164dc34dccade5afe3e847a97b6db743e79f5477fa3295acf02849c5984a`,hashType:`type`,cellDeps:[{cellDep:{outPoint:{txHash:`0xe2f74c56cdc610d2b9fe898a96a80118845f5278605d7f9ad535dad69ae015bf`,index:0},depType:`code`},type:{codeHash:`0x00000000000000000000000000000000000000000000000000545950455f4944`,args:`0x55573ef6d78e3ca75170ff476176732309a8b31efe94320a954ded3d75c2cb18`,hashType:`type`}}]},AlwaysSuccess:{codeHash:`0x3b521cc4b552f109d092d8cc468a8048acb53c5952dbe769d2b2f9cf6e47f7f1`,hashType:`data1`,cellDeps:[{cellDep:{outPoint:{txHash:`0x10d63a996157d32c01078058000052674ca58d15f921bec7f1dcdac2160eb66b`,index:0},depType:`code`}}]},InputTypeProxyLock:{codeHash:`0x5123908965c711b0ffd8aec642f1ede329649bda1ebdca6bd24124d3796f768a`,hashType:`data1`,cellDeps:[{cellDep:{outPoint:{txHash:`0x10d63a996157d32c01078058000052674ca58d15f921bec7f1dcdac2160eb66b`,index:1},depType:`code`}}]},OutputTypeProxyLock:{codeHash:`0x2df53b592db3ae3685b7787adcfef0332a611edb83ca3feca435809964c3aff2`,hashType:`data1`,cellDeps:[{cellDep:{outPoint:{txHash:`0x10d63a996157d32c01078058000052674ca58d15f921bec7f1dcdac2160eb66b`,index:2},depType:`code`}}]},LockProxyLock:{codeHash:`0x5d41e32e224c15f152b7e6529100ebeac83b162f5f692a5365774dad2c1a1d02`,hashType:`data1`,cellDeps:[{cellDep:{outPoint:{txHash:`0x10d63a996157d32c01078058000052674ca58d15f921bec7f1dcdac2160eb66b`,index:3},depType:`code`}}]},SingleUseLock:{codeHash:`0x8290467a512e5b9a6b816469b0edabba1f4ac474e28ffdd604c2a7c76446bbaf`,hashType:`data1`,cellDeps:[{cellDep:{outPoint:{txHash:`0x10d63a996157d32c01078058000052674ca58d15f921bec7f1dcdac2160eb66b`,index:4},depType:`code`}}]},TypeBurnLock:{codeHash:`0xff78bae0abf17d7a404c0be0f9ad9c9185b3f88dcc60403453d5ba8e1f22f53a`,hashType:`data1`,cellDeps:[{cellDep:{outPoint:{txHash:`0x10d63a996157d32c01078058000052674ca58d15f921bec7f1dcdac2160eb66b`,index:5},depType:`code`}}]},EasyToDiscoverType:{codeHash:`0xaba4430cc7110d699007095430a1faa72973edf2322ddbfd4d1d219cacf237af`,hashType:`data1`,cellDeps:[{cellDep:{outPoint:{txHash:`0xb0ed754fb27d67fd8388c97fed914fb7998eceaa01f3e6f967e498de1ba0ac9b`,index:0},depType:`code`}}]},TimeLock:{codeHash:`0x6fac4b2e89360a1e692efcddcb3a28656d8446549fb83da6d896db8b714f4451`,hashType:`data1`,cellDeps:[{cellDep:{outPoint:{txHash:`0xb0ed754fb27d67fd8388c97fed914fb7998eceaa01f3e6f967e498de1ba0ac9b`,index:1},depType:`code`}}]}});var rn=class{constructor(e,t=3e4){this.url=e,this.timeout=t}async request(e){let t=new AbortController,n=setTimeout(()=>t.abort(),this.timeout),r=await(await fetch(this.url,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(e),signal:t.signal})).json();return clearTimeout(n),r}},an=class{constructor(e,t=3e4){this.url=e,this.timeout=t,this.ongoing=new Map}request(e){let t=(()=>{if(this.socket&&this.socket.readyState!==this.socket.CLOSING&&this.socket.readyState!==this.socket.CLOSED&&this.openSocket)return this.openSocket;let e=new i(this.url),t=({data:e})=>{let t=JSON.parse(e);if(typeof t!=`object`||!t||typeof t.id!=`number`)throw Error(`Unknown response ${e}`);let n=t.id,r=this.ongoing.get(n);if(!r)return;let[i,a,o]=r;clearTimeout(o),this.ongoing.delete(n),i(t)},n=()=>{this.ongoing.forEach(([e,t,n])=>{clearTimeout(n),t(Error(`Connection closed`))}),this.ongoing.clear()};return e.onclose=n,e.onerror=n,e.onmessage=t,this.socket=e,this.openSocket=new Promise(t=>{e.readyState===e.OPEN?t(e):e.onopen=()=>{t(e)}}),this.openSocket})();return new Promise((n,r)=>{let i=[n,r,setTimeout(()=>{this.ongoing.delete(e.id),t.then(e=>e.close()).catch(e=>r(e)),r(Error(`Request timeout`))},this.timeout)];this.ongoing.set(e.id,i),t.then(t=>{t.readyState===t.CLOSED||t.readyState===t.CLOSING?(clearTimeout(i[2]),this.ongoing.delete(e.id),r(Error(`Connection closed`))):t.send(JSON.stringify(e))}).catch(e=>r(e))})}};function on(e,t){return e.startsWith(`wss://`)||e.startsWith(`ws://`)?new an(e,t?.timeout):new rn(e,t?.timeout)}var sn=class{constructor(e){this.transports=e,this.i=0}async request(e){let t=this.i,n=Error(`TransportFallback requires at least one transport`);for(let r=0;r<this.transports.length;r+=1){let i=(t+r)%this.transports.length;try{let t=await this.transports[i].request(e);return this.i=i,t}catch(e){n=e}}throw n}},cn=class e{static hashTypeFrom(e){return mn(e)}static hashTypeTo(e){return e}static depTypeFrom(e){switch(Mn(e)){case`code`:return`code`;case`depGroup`:return`dep_group`}}static depTypeTo(e){switch(e){case`code`:return`code`;case`dep_group`:return`depGroup`}}static scriptFrom(t){let n=H.from(t);return{code_hash:n.codeHash,hash_type:e.hashTypeFrom(n.hashType),args:n.args}}static scriptTo(t){return H.from({codeHash:t.code_hash,hashType:e.hashTypeTo(t.hash_type),args:t.args})}static outPointFrom(e){let t=K.from(e);return{index:y(t.index),tx_hash:t.txHash}}static outPointTo(e){return K.from({index:e.index,txHash:e.tx_hash})}static cellInputFrom(t){let n=X.from(t);return{previous_output:e.outPointFrom(n.previousOutput),since:y(n.since)}}static cellInputTo(t){return X.from({previousOutput:e.outPointTo(t.previous_output),since:t.since})}static cellOutputFrom(t,n){let r=q.from(t,n);return{capacity:y(r.capacity),lock:e.scriptFrom(r.lock),type:N(e.scriptFrom,r.type)}}static cellOutputTo(t){return q.from({capacity:t.capacity,lock:e.scriptTo(t.lock),type:N(e.scriptTo,t.type)})}static cellDepFrom(t){return{out_point:e.outPointFrom(t.outPoint),dep_type:e.depTypeFrom(t.depType)}}static cellDepTo(t){return Z.from({outPoint:e.outPointTo(t.out_point),depType:e.depTypeTo(t.dep_type)})}static transactionFrom(t){let n=$.from(t);return{version:y(n.version),cell_deps:n.cellDeps.map(t=>e.cellDepFrom(t)),header_deps:n.headerDeps,inputs:n.inputs.map(t=>e.cellInputFrom(t)),outputs:n.outputs.map(t=>e.cellOutputFrom(t)),outputs_data:n.outputsData,witnesses:n.witnesses}}static transactionTo(t){return $.from({version:t.version,cellDeps:t.cell_deps.map(t=>e.cellDepTo(t)),headerDeps:t.header_deps,inputs:t.inputs.map(t=>e.cellInputTo(t)),outputs:t.outputs.map(t=>e.cellOutputTo(t)),outputsData:t.outputs_data,witnesses:t.witnesses})}static transactionResponseTo({cycles:t,tx_status:{status:n,block_number:r,block_hash:i,tx_index:a,reason:o},transaction:s}){if(s!=null)return It.from({transaction:e.transactionTo(s),status:n,cycles:N(v,t),blockHash:N(p,i),blockNumber:N(v,r),txIndex:N(v,a),reason:o})}static blockHeaderTo(e){let t=l(e.dao);return{compactTarget:v(e.compact_target),dao:{c:x(t.slice(0,8)),ar:x(t.slice(8,16)),s:x(t.slice(16,24)),u:x(t.slice(24,32))},epoch:L.fromNum(e.epoch),extraHash:e.extra_hash,hash:e.hash,nonce:v(e.nonce),number:v(e.number),parentHash:e.parent_hash,proposalsHash:e.proposals_hash,timestamp:v(e.timestamp),transactionsRoot:e.transactions_root,version:v(e.version)}}static blockUncleTo(t){return{header:e.blockHeaderTo(t.header),proposals:t.proposals}}static blockTo(t){return{header:e.blockHeaderTo(t.header),proposals:t.proposals,transactions:t.transactions.map(t=>e.transactionTo(t)),uncles:t.uncles.map(t=>e.blockUncleTo(t))}}static rangeFrom([e,t]){return[y(e),y(t)]}static indexerSearchKeyFilterFrom(t){return{script:N(e.scriptFrom,t.script),script_len_range:N(e.rangeFrom,t.scriptLenRange),output_data:t.outputData,output_data_filter_mode:t.outputDataSearchMode,output_data_len_range:N(e.rangeFrom,t.outputDataLenRange),output_capacity_range:N(e.rangeFrom,t.outputCapacityRange),block_range:N(e.rangeFrom,t.blockRange)}}static indexerSearchKeyFrom(t){let n=Rt.from(t);return{script:e.scriptFrom(n.script),script_type:n.scriptType,script_search_mode:n.scriptSearchMode,filter:N(e.indexerSearchKeyFilterFrom,n.filter),with_data:n.withData}}static findCellsResponseTo({last_cursor:t,objects:n}){return{lastCursor:t,cells:n.map(t=>In.from({outPoint:e.outPointTo(t.out_point),cellOutput:e.cellOutputTo(t.output),outputData:t.output_data??`0x`}))}}static indexerSearchKeyTransactionFrom(t){let n=zt.from(t);return{script:e.scriptFrom(n.script),script_type:n.scriptType,script_search_mode:n.scriptSearchMode,filter:N(e.indexerSearchKeyFilterFrom,n.filter),group_by_transaction:n.groupByTransaction}}static findTransactionsResponseTo({last_cursor:e,objects:t}){return t.length===0?{lastCursor:e,transactions:[]}:`io_index`in t[0]?{lastCursor:e,transactions:t.map(e=>({txHash:e.tx_hash,blockNumber:v(e.block_number),txIndex:v(e.tx_index),cellIndex:v(e.io_index),isInput:e.io_type===`input`}))}:{lastCursor:e,transactions:t.map(e=>({txHash:e.tx_hash,blockNumber:v(e.block_number),txIndex:v(e.tx_index),cells:e.cells.map(([e,t])=>({isInput:e===`input`,cellIndex:v(t)}))}))}}};const ln=Object.freeze({NervosDao:{codeHash:`0x82d76d1b75fe2fd9a27dfbaa65a039221a380d76c926f378d3f81cf3e7e13f2e`,hashType:`type`,cellDeps:[{cellDep:{outPoint:{txHash:`0x8f8c79eb6671709633fe6a46de93c0fedc9c1b8a6527a18d3983879542635c9f`,index:2},depType:`code`}}]},Secp256k1Blake160:{codeHash:`0x9bd7e06f3ecf4be0f2fcd2188b23f1b9fcc88e5d4b65a8637b17723bbda3cce8`,hashType:`type`,cellDeps:[{cellDep:{outPoint:{txHash:`0xf8de3bb47d055cdf460d93a2a6e1b05f7432f9777c8c474abf4eec1d4aee5d37`,index:0},depType:`depGroup`}}]},Secp256k1Multisig:{codeHash:`0x5c5069eb0857efc65e1bca0c07df34c31663b3622fd3876c876320fc9634e2a8`,hashType:`type`,cellDeps:[{cellDep:{outPoint:{txHash:`0xf8de3bb47d055cdf460d93a2a6e1b05f7432f9777c8c474abf4eec1d4aee5d37`,index:1},depType:`depGroup`}}]},Secp256k1MultisigV2Beta:{codeHash:`0x765b3ed6ae264b335d07e73ac332bf2c0f38f8d3340ed521cb447b4c42dd5f09`,hashType:`type`,cellDeps:[{cellDep:{outPoint:{txHash:`0xf2013f123b2cb745e3fdf5c935a3925647496f88090503eef58332a9245b4172`,index:0},depType:`depGroup`}}]},Secp256k1MultisigV2:{codeHash:`0x36c971b8d41fbd94aabca77dc75e826729ac98447b46f91e00796155dddb0d29`,hashType:`data1`,cellDeps:[{cellDep:{outPoint:{txHash:`0x2eefdeb21f3a3edf697c28a52601b4419806ed60bb427420455cc29a090b26d5`,index:0},depType:`depGroup`}}]},AnyoneCanPay:{codeHash:`0x3419a1c09eb2567f6552ee7a8ecffd64155cffe0f1796e6e61ec088d740c1356`,hashType:`type`,cellDeps:[{cellDep:{outPoint:{txHash:`0xec26b0f85ed839ece5f11c4c4e837ec359f5adc4420410f6453b1f6b60fb96a6`,index:0},depType:`depGroup`}}]},TypeId:{codeHash:`0x00000000000000000000000000000000000000000000000000545950455f4944`,hashType:`type`,cellDeps:[]},SUdt:{codeHash:`0xc5e5dcf215925f7ef4dfaf5f4b4f105bc321c02776d6e7d52a1db3fcd9d011a4`,hashType:`type`,cellDeps:[{cellDep:{outPoint:{txHash:`0xe12877ebd2c3c364dc46c5c992bcfaf4fee33fa13eebdf82c591fc9825aab769`,index:0},depType:`code`}}]},XUdt:{codeHash:`0x25c29dc317811a6f6f3985a7a9ebc4838bd388d19d0feeecf0bcd60f6c0975bb`,hashType:`type`,cellDeps:[{cellDep:{outPoint:{txHash:`0xbf6fb538763efec2a70a6a3dcb7242787087e1030c4e7d86585bc63a9d337f5f`,index:0},depType:`code`},type:{codeHash:`0x00000000000000000000000000000000000000000000000000545950455f4944`,hashType:`type`,args:`0x44ec8b96663e06cc94c8c468a4d46d7d9af69eaf418f6390c9f11bb763dda0ae`}}]},JoyId:{codeHash:`0xd23761b364210735c19c60561d213fb3beae2fd6172743719eff6920e020baac`,hashType:`type`,cellDeps:[{cellDep:{outPoint:{txHash:`0x4a596d31dc35e88fb1591debbf680b04a44b4a434e3a94453c21ea8950ffb4d9`,index:0},depType:`code`},type:{codeHash:`0x00000000000000000000000000000000000000000000000000545950455f4944`,hashType:`type`,args:`0x1c9fc299ba0570d077b4d7fb9acff1ccc0de69d369942d82678bae937c44ec30`}},{cellDep:{outPoint:{txHash:`0x4a596d31dc35e88fb1591debbf680b04a44b4a434e3a94453c21ea8950ffb4d9`,index:1},depType:`code`},type:{codeHash:`0x00000000000000000000000000000000000000000000000000545950455f4944`,hashType:`type`,args:`0x27f0d3ccdc2fcd52ae31fbacad5f86b97bc147d7093e4807cd6e3d21c1fe6841`}},{cellDep:{outPoint:{txHash:`0xf2c9dbfe7438a8c622558da8fa912d36755271ea469d3a25cb8d3373d35c8638`,index:1},depType:`code`},type:{codeHash:`0x00000000000000000000000000000000000000000000000000545950455f4944`,hashType:`type`,args:`0x0ac15fe5b2d059ec39de03f2d3159d5463abb918a1a07a9fa00d2b9c61d89ef3`}},{cellDep:{outPoint:{txHash:`0x95ecf9b41701b45d431657a67bbfa3f07ef7ceb53bf87097f3674e1a4a19ce62`,index:1},depType:`code`},type:{codeHash:`0x00000000000000000000000000000000000000000000000000545950455f4944`,hashType:`type`,args:`0xc7bafc5550ccad7cea32c27764f5df6aca4de547da65e3e67fa08477a1af7f5e`}},{cellDep:{outPoint:{txHash:`0x8b3255491f3c4dcc1cfca33d5c6bcaec5409efe4bbda243900f9580c47e0242e`,index:1},depType:`code`},type:{codeHash:`0x00000000000000000000000000000000000000000000000000545950455f4944`,hashType:`type`,args:`0x71decef9ca8725e64ec99a5521790d16b8d5daadb4989b45dd6ab51806a8c0e4`}}]},COTA:{codeHash:`0x89cd8003a0eaf8e65e0c31525b7d1d5c1becefd2ea75bb4cff87810ae37764d8`,hashType:`type`,cellDeps:[{cellDep:{outPoint:{txHash:`0x636a786001f87cb615acfcf408be0f9a1f077001f0bbc75ca54eadfe7e221713`,index:0},depType:`depGroup`}}]},PWLock:{codeHash:`0x58c5f491aba6d61678b7cf7edf4910b1f5e00ec0cde2f42e0abb4fd9aff25a63`,hashType:`type`,cellDeps:[{cellDep:{outPoint:{txHash:`0xf8de3bb47d055cdf460d93a2a6e1b05f7432f9777c8c474abf4eec1d4aee5d37`,index:0},depType:`depGroup`}},{cellDep:{outPoint:{txHash:`0x57a62003daeab9d54aa29b944fc3b451213a5ebdf2e232216a3cfed0dde61b38`,index:0},depType:`code`},type:{codeHash:`0x00000000000000000000000000000000000000000000000000545950455f4944`,hashType:`type`,args:`0xf6d90bfe3041d0fd7e01c45770241697f5f837974bd6ae1672a7ec0f9f523268`}}]},OmniLock:{codeHash:`0xf329effd1c475a2978453c8600e1eaf0bc2087ee093c3ee64cc96ec6847752cb`,hashType:`type`,cellDeps:[{cellDep:{outPoint:{txHash:`0xf8de3bb47d055cdf460d93a2a6e1b05f7432f9777c8c474abf4eec1d4aee5d37`,index:0},depType:`depGroup`}},{cellDep:{outPoint:{txHash:`0xec18bf0d857c981c3d1f4e17999b9b90c484b303378e94de1a57b0872f5d4602`,index:0},depType:`code`},type:{codeHash:`0x00000000000000000000000000000000000000000000000000545950455f4944`,hashType:`type`,args:`0x761f51fc9cd6a504c32c6ae64b3746594d1af27629b427c5ccf6c9a725a89144`}}]},NostrLock:{codeHash:`0x6ae5ee0cb887b2df5a9a18137315b9bdc55be8d52637b2de0624092d5f0c91d5`,hashType:`type`,cellDeps:[{cellDep:{outPoint:{txHash:`0xa2a434dcdbe280b9ed75bb7d6c7d68186a842456aba0fc506657dc5ed7c01d68`,index:0},depType:`code`},type:{codeHash:`0x00000000000000000000000000000000000000000000000000545950455f4944`,hashType:`type`,args:`0x8dc56c6f35f0c535e23ded1629b1f20535477a1b43e59f14617d11e32c50e0aa`}}]},UniqueType:{codeHash:`0x8e341bcfec6393dcd41e635733ff2dca00a6af546949f70c57a706c0f344df8b`,hashType:`type`,cellDeps:[{cellDep:{outPoint:{txHash:`0xff91b063c78ed06f10a1ed436122bd7d671f9a72ef5f5fa28d05252c17cf4cef`,index:0},depType:`code`},type:{codeHash:`0x00000000000000000000000000000000000000000000000000545950455f4944`,hashType:`type`,args:`0xe04976b67600fd25ac50305f77b33aee2c12e3c18e63ece9119e5b32117884b5`}}]},DidCkb:{codeHash:`0x510150477b10d6ab551a509b71265f3164e9fd4137fcb5a4322f49f03092c7c5`,hashType:`type`,cellDeps:[{cellDep:{outPoint:{txHash:`0x0e7a830e2d5ebd05cd45a55f93f94559edea0ef1237b7233f49f7facfb3d6a6c`,index:0},depType:`code`},type:{codeHash:`0x00000000000000000000000000000000000000000000000000545950455f4944`,args:`0x3c27695173b888ed44ddf36f901789014384ad6c05a9137f3db9a0779c141c35`,hashType:`type`}}]},AlwaysSuccess:{codeHash:`0x3b521cc4b552f109d092d8cc468a8048acb53c5952dbe769d2b2f9cf6e47f7f1`,hashType:`data1`,cellDeps:[{cellDep:{outPoint:{txHash:`0xb4f171c9c9caf7401f54a8e56225ae21d95032150a87a4678eac3f66a3137b93`,index:0},depType:`code`}}]},InputTypeProxyLock:{codeHash:`0x5123908965c711b0ffd8aec642f1ede329649bda1ebdca6bd24124d3796f768a`,hashType:`data1`,cellDeps:[{cellDep:{outPoint:{txHash:`0xb4f171c9c9caf7401f54a8e56225ae21d95032150a87a4678eac3f66a3137b93`,index:1},depType:`code`}}]},OutputTypeProxyLock:{codeHash:`0x2df53b592db3ae3685b7787adcfef0332a611edb83ca3feca435809964c3aff2`,hashType:`data1`,cellDeps:[{cellDep:{outPoint:{txHash:`0xb4f171c9c9caf7401f54a8e56225ae21d95032150a87a4678eac3f66a3137b93`,index:2},depType:`code`}}]},LockProxyLock:{codeHash:`0x5d41e32e224c15f152b7e6529100ebeac83b162f5f692a5365774dad2c1a1d02`,hashType:`data1`,cellDeps:[{cellDep:{outPoint:{txHash:`0xb4f171c9c9caf7401f54a8e56225ae21d95032150a87a4678eac3f66a3137b93`,index:3},depType:`code`}}]},SingleUseLock:{codeHash:`0x8290467a512e5b9a6b816469b0edabba1f4ac474e28ffdd604c2a7c76446bbaf`,hashType:`data1`,cellDeps:[{cellDep:{outPoint:{txHash:`0xb4f171c9c9caf7401f54a8e56225ae21d95032150a87a4678eac3f66a3137b93`,index:4},depType:`code`}}]},TypeBurnLock:{codeHash:`0xff78bae0abf17d7a404c0be0f9ad9c9185b3f88dcc60403453d5ba8e1f22f53a`,hashType:`data1`,cellDeps:[{cellDep:{outPoint:{txHash:`0xb4f171c9c9caf7401f54a8e56225ae21d95032150a87a4678eac3f66a3137b93`,index:5},depType:`code`}}]},EasyToDiscoverType:{codeHash:`0xaba4430cc7110d699007095430a1faa72973edf2322ddbfd4d1d219cacf237af`,hashType:`data1`,cellDeps:[{cellDep:{outPoint:{txHash:`0x1b4ffcad55ecd36ffb2715b6816b83da73851f1a24fe594f263c4f34dad90792`,index:0},depType:`code`}}]},TimeLock:{codeHash:`0x6fac4b2e89360a1e692efcddcb3a28656d8446549fb83da6d896db8b714f4451`,hashType:`data1`,cellDeps:[{cellDep:{outPoint:{txHash:`0x1b4ffcad55ecd36ffb2715b6816b83da73851f1a24fe594f263c4f34dad90792`,index:1},depType:`code`}}]}}),un={type:1,data:0,data1:2,data2:4},dn={1:`type`,0:`data`,2:`data1`,4:`data2`},fn=Object.keys(un);var V;const pn=d.from({byteLength:1,encode:hn,decode:gn});function mn(e){let t=(()=>{if(typeof e==`number`)return dn[e];if(typeof e==`bigint`)return dn[Number(e)];if(fn.includes(e))return e})();if(t===void 0)throw Error(`Invalid hash type ${e}`);return t}function hn(e){return l([un[mn(e)]])}function gn(e){return dn[l(e)[0]]}let H=V=class extends m.Base(){constructor(e,t,n){super(),this.codeHash=e,this.hashType=t,this.args=n}get occupiedSize(){return 33+l(this.args).length}clone(){return V.from({codeHash:this.codeHash,hashType:this.hashType,args:this.args})}eq(e){return e=V.from(e),this.args===e.args&&this.codeHash===e.codeHash&&this.hashType===e.hashType}static from(e){return e instanceof V?e:new V(p(e.codeHash),mn(e.hashType),p(e.args))}static async fromKnownScript(e,t,n){let r=await e.getKnownScript(t);return V.from({codeHash:r.codeHash,hashType:r.hashType,args:p(n)})}};H=V=F([h(j({codeHash:T,hashType:pn,args:st}))],H);const _n=A(H),vn=k(H),yn={code:0,depGroup:1},bn={0:`code`,1:`depGroup`},xn=Object.keys(yn);var Sn=class extends Error{constructor(e,t){let n=v(e),r=t?.isForChange??!1;super(`Insufficient CKB, need ${ce(n)} extra CKB${r?` for the change cell`:``}`),this.amount=n,this.isForChange=r}},Cn=class extends Error{constructor(e,t){let n=v(e),r=H.from(t);super(`Insufficient coin, need ${n} extra coin`),this.amount=n,this.type=r}},U,wn,W,Tn,En,Dn,G;const On=2n**32n-2n;function kn(e){try{let t=v(e);return t<0n||t>On?void 0:Number(t)}catch{return}}function An(e){let t=kn(e);if(t===void 0)throw Error(`Index ${e} must be a valid array index between 0 and ${On}`);return t}const jn=d.from({byteLength:1,encode:Nn,decode:Pn});function Mn(e){let t=typeof e==`number`?bn[e]:typeof e==`bigint`?bn[Number(e)]:e;if(t===void 0)throw Error(`Invalid dep type ${e}`);return t}function Nn(e){return l([yn[Mn(e)]])}function Pn(e){return bn[l(e)[0]]}let K=U=class extends m.Base(){constructor(e,t){super(),this.txHash=e,this.index=t}static from(e){return e instanceof U?e:new U(p(e.txHash),v(e.index))}clone(){return U.from({txHash:this.txHash,index:this.index})}eq(e){return e=U.from(e),this.txHash===e.txHash&&this.index===e.index}};K=U=F([h(M({txHash:T,index:Te}))],K);let q=wn=class extends m.Base(){constructor(e,t,n){super(),this.capacity=e,this.lock=t,this.type=n}get occupiedSize(){return 8+this.lock.occupiedSize+(this.type?.occupiedSize??0)}static from(e,t){let n=e instanceof wn?e:new wn(v(e.capacity??0),H.from(e.lock),N(H.from,e.type));return t!=null&&(n.capacity=de(n.capacity,g(n.occupiedSize+l(t).length))),n}clone(){return wn.from({capacity:this.capacity,lock:this.lock.clone(),type:this.type?.clone()})}};q=wn=F([h(j({capacity:w,lock:H,type:_n}))],q);const Fn=k(q);var J=class e{constructor(e,t,n){this.cellOutput=e,this.outputData=t,this.outPoint=n}static from(t){if(t instanceof e)return t;let n=p(t.outputData??`0x`);return new e(q.from(t.cellOutput,n),n,N(K.from,t.outPoint??t.previousOutput))}get occupiedSize(){return this.cellOutput.occupiedSize+l(this.outputData).byteLength}get capacityFree(){return this.cellOutput.capacity-g(this.occupiedSize)}async isNervosDao(e,t){let{type:n}=this.cellOutput,r=await e.getKnownScript(`NervosDao`);if(!n||n.codeHash!==r.codeHash||n.hashType!==r.hashType)return!1;let i=v(this.outputData)!==_;return!t||t===`deposited`&&!i||t===`withdrew`&&i}clone(){return e.from({cellOutput:this.cellOutput.clone(),outputData:this.outputData,outPoint:this.outPoint?.clone()})}},In=class e extends J{constructor(e,t,n){super(t,n,e),this.outPoint=e}static from(t){return t instanceof e?t:new e(K.from(t.outPoint??t.previousOutput),q.from(t.cellOutput,t.outputData),p(t.outputData??`0x`))}async getDaoProfit(e){if(!await this.isNervosDao(e,`withdrew`))return _;let{depositHeader:t,withdrawHeader:n}=await this.getNervosDaoInfo(e);if(!n||!t)throw Error(`Unable to get headers of a Nervos DAO cell ${this.outPoint.txHash}:${this.outPoint.index.toString()}`);return Hn(this.capacityFree,t,n)}async getNervosDaoInfo(e){if(!await this.isNervosDao(e))return{};if(v(this.outputData)===0n){let t=await e.getCellWithHeader(this.outPoint);if(!t?.header)throw Error(`Unable to get header of a Nervos DAO deposited cell ${this.outPoint.txHash}:${this.outPoint.index.toString()}`);return{depositHeader:t.header}}let[t,n]=await Promise.all([e.getHeaderByNumber(b(this.outputData)),e.getCellWithHeader(this.outPoint)]);if(!n?.header||!t)throw Error(`Unable to get headers of a Nervos DAO withdrew cell ${this.outPoint.txHash}:${this.outPoint.index.toString()}`);return{depositHeader:t,withdrawHeader:n.header}}clone(){return e.from({outPoint:this.outPoint.clone(),cellOutput:this.cellOutput.clone(),outputData:this.outputData})}};let Y=W=class extends m.Base(){constructor(e,t,n){super(),this.relative=e,this.metric=t,this.value=n}clone(){return W.from({relative:this.relative,metric:this.metric,value:this.value})}static from(e){return e instanceof W?e:typeof e==`object`&&`relative`in e?new W(e.relative,e.metric,v(e.value)):W.fromNum(e)}toNum(){return this.value|(this.relative===`absolute`?_:v(`0x8000000000000000`))|{blockNumber:v(`0x0000000000000000`),epoch:v(`0x2000000000000000`),timestamp:v(`0x4000000000000000`)}[this.metric]}static fromNum(e){let t=v(e),n=t>>v(63)===0n?`absolute`:`relative`,r=[`blockNumber`,`epoch`,`timestamp`][Number(t>>v(61)&v(3))],i=t&v(`0x00ffffffffffffff`);return new W(n,r,i)}};Y=W=F([h(w.mapIn(e=>Y.from(e).toNum()))],Y);let X=Tn=class extends m.Base(){constructor(e,t,n,r){super(),this.previousOutput=e,this.since=t,this.cellOutput=n,this.outputData=r}static from(e){return e instanceof Tn?e:new Tn(K.from(`previousOutput`in e?e.previousOutput:e.outPoint),Y.from(e.since??0).toNum(),N(q.from,e.cellOutput),N(p,e.outputData))}async getCell(e){if(await this.completeExtraInfos(e),!this.cellOutput||!this.outputData)throw Error(`Unable to complete input`);return In.from({outPoint:this.previousOutput,cellOutput:this.cellOutput,outputData:this.outputData})}async completeExtraInfos(e){if(this.cellOutput&&this.outputData)return;let t=await e.getCell(this.previousOutput);t&&(this.cellOutput=t.cellOutput,this.outputData=t.outputData)}async getExtraCapacity(e){return(await this.getCell(e)).getDaoProfit(e)}clone(){return Tn.from({previousOutput:this.previousOutput.clone(),since:this.since,cellOutput:this.cellOutput?.clone(),outputData:this.outputData})}};X=Tn=F([h(M({since:Y,previousOutput:K}).mapIn(e=>X.from(e)))],X);const Ln=k(X);let Z=En=class extends m.Base(){constructor(e,t){super(),this.outPoint=e,this.depType=t}static from(e){return e instanceof En?e:new En(K.from(e.outPoint),Mn(e.depType))}clone(){return En.from({outPoint:this.outPoint.clone(),depType:this.depType})}};Z=En=F([h(M({outPoint:K,depType:jn}))],Z);const Rn=k(Z);let Q=Dn=class extends m.Base(){constructor(e,t,n){super(),this.lock=e,this.inputType=t,this.outputType=n}static from(e){return e instanceof Dn?e:new Dn(N(p,e.lock),N(p,e.inputType),N(p,e.outputType))}};Q=Dn=F([h(j({lock:ct,inputType:ct,outputType:ct}))],Q);function zn(e){let t=l(e).slice(0,16);return t.length===0?_:b(t)}const Bn=j({version:Te,cellDeps:Rn,headerDeps:xt,inputs:Ln,outputs:Fn,outputsData:lt});let $=G=class extends m.Base(){constructor(e,t,n,r,i,a,o){super(),this.version=e,this.cellDeps=t,this.headerDeps=n,this.inputs=r,this.outputs=i,this.outputsData=a,this.witnesses=o}static default(){return G.from({})}copy(e){if(e===this)return;let t=G.from(e);this.version=t.version,this.cellDeps=t.cellDeps,this.headerDeps=t.headerDeps,this.inputs=t.inputs,this.outputs=t.outputs,this.outputsData=t.outputsData,this.witnesses=t.witnesses}clone(){return G.from({version:this.version,cellDeps:this.cellDeps.map(e=>e.clone()),headerDeps:this.headerDeps.map(e=>e),inputs:this.inputs.map(e=>e.clone()),outputs:this.outputs.map(e=>e.clone()),outputsData:this.outputsData.map(e=>e),witnesses:this.witnesses.map(e=>e)})}static from(e){if(e instanceof G)return e;let t=e.outputs?.map((t,n)=>q.from(t,e.outputsData?.[n]??[]))??[],n=t.map((t,n)=>p(e.outputsData?.[n]??`0x`));return e.outputsData!=null&&n.length<e.outputsData.length&&n.push(...e.outputsData.slice(n.length).map(e=>p(e))),new G(v(e.version??0),e.cellDeps?.map(e=>Z.from(e))??[],e.headerDeps?.map(p)??[],e.inputs?.map(e=>X.from(e))??[],t,n,e.witnesses?.map(p)??[])}static fromLumosSkeleton(e){return G.from({version:0n,cellDeps:e.cellDeps.toArray(),headerDeps:e.headerDeps.toArray(),inputs:e.inputs.toArray().map((t,n)=>{if(!t.outPoint)throw Error(`outPoint is required in input`);return X.from({previousOutput:t.outPoint,since:e.inputSinces.get(n,`0x0`),cellOutput:t.cellOutput,outputData:t.data})}),outputs:e.outputs.toArray().map(e=>e.cellOutput),outputsData:e.outputs.toArray().map(e=>e.data),witnesses:e.witnesses.toArray()})}stringify(){return JSON.stringify(this,(e,t)=>typeof t==`bigint`?y(t):t)}rawToBytes(){return Bn.encode(this)}hash(){return oe(this.rawToBytes())}hashFull(){return oe(this.toBytes())}static hashWitnessToHasher(e,t){let n=l(p(e));t.update(fe(n.length,8)),t.update(n)}async getSignHashInfo(e,t,n=new ae){let r=H.from(e),i=-1;n.update(this.hash());for(let e=0;e<this.witnesses.length;e+=1){let a=this.inputs[e];if(a){let{cellOutput:n}=await a.getCell(t);if(!r.eq(n.lock))continue;i===-1&&(i=e)}if(i===-1)return;G.hashWitnessToHasher(this.witnesses[e],n)}if(i!==-1)return{message:n.digest(),position:i}}async findInputIndexByLockId(e,t){let n=H.from({...e,args:`0x`});for(let e=0;e<this.inputs.length;e+=1){let{cellOutput:r}=await this.inputs[e].getCell(t);if(n.codeHash===r.lock.codeHash&&n.hashType===r.lock.hashType)return e}}async findInputIndexByLock(e,t){let n=H.from(e);for(let e=0;e<this.inputs.length;e+=1){let{cellOutput:r}=await this.inputs[e].getCell(t);if(n.eq(r.lock))return e}}async findLastInputIndexByLock(e,t){let n=H.from(e);for(let e=this.inputs.length-1;e>=0;--e){let{cellOutput:r}=await this.inputs[e].getCell(t);if(n.eq(r.lock))return e}}addCellDeps(...e){e.flat().forEach(e=>{let t=Z.from(e);this.cellDeps.some(e=>e.eq(t))||this.cellDeps.push(t)})}addCellDepsAtStart(...e){e.flat().forEach(e=>{let t=Z.from(e);this.cellDeps.some(e=>e.eq(t))||this.cellDeps.unshift(t)})}async addCellDepInfos(e,...t){this.addCellDeps(await e.getCellDeps(...t))}async addCellDepsOfKnownScripts(e,...t){await Promise.all(t.flat().map(async t=>this.addCellDepInfos(e,(await e.getKnownScript(t)).cellDeps)))}setOutputDataAt(e,t){this.setOutputData(e,t)}setOutputData(e,t){let n=An(e);if(n>=this.outputs.length)throw Error(`Index ${e} is out of bounds for outputs of length ${this.outputs.length}`);this.outputsData.length<n&&this.outputsData.push(...Array.from(Array(n-this.outputsData.length),()=>`0x`)),this.outputsData[n]=p(t)}getOutputData(e){let t=kn(e);return t!==void 0&&t<this.outputs.length?this.outputsData[t]??`0x`:void 0}getInput(e){let t=kn(e);return t===void 0?void 0:this.inputs[t]}addInput(e){return this.witnesses.length>this.inputs.length&&this.witnesses.splice(this.inputs.length,0,`0x`),this.inputs.push(X.from(e))}getOutput(e){let t=kn(e);if(!(t===void 0||t>=this.outputs.length))return J.from({cellOutput:this.outputs[t],outputData:this.outputsData[t]??`0x`})}get outputCells(){let{outputs:e,outputsData:t}=this;function*n(){for(let n=0;n<e.length;n++)yield J.from({cellOutput:e[n],outputData:t[n]??`0x`})}return n()}addOutput(e,t){let n=`cellOutput`in e?J.from(e):J.from({cellOutput:e,outputData:t}),r=this.outputs.push(n.cellOutput);return this.setOutputData(r-1,n.outputData),r}setOutput(e,t,n){let r=An(e);if(r>this.outputs.length)throw Error(`Index ${e} is out of bounds for outputs of length ${this.outputs.length}`);let i=`cellOutput`in t?J.from(t):J.from({cellOutput:t,outputData:n});r===this.outputs.length?this.addOutput(i):(this.outputs[r]=i.cellOutput,this.setOutputData(r,i.outputData))}setInput(e,t){let n=An(e);if(n>this.inputs.length)throw Error(`Index ${e} is out of bounds for inputs of length ${this.inputs.length}`);n===this.inputs.length?this.addInput(t):this.inputs[n]=X.from(t)}getWitness(e){let t=kn(e);return t===void 0?void 0:this.witnesses[t]}getWitnessArgs(e){try{return this.getWitnessArgsUnsafe(e)}catch{return}}getWitnessArgsUnsafe(e){let t=this.getWitness(e);return t&&t!==`0x`?Q.fromBytes(t):void 0}setWitnessArgs(e,t){this.setWitness(e,Q.from(t).toBytes())}setWitness(e,t){let n=An(e);this.witnesses.length<n&&this.witnesses.push(...Array.from(Array(n-this.witnesses.length),()=>`0x`)),this.witnesses[n]=p(t)}getWitnessArgsAt(e){return this.getWitnessArgs(e)}getWitnessArgsAtUnsafe(e){return this.getWitnessArgsUnsafe(e)}setWitnessArgsAt(e,t){this.setWitnessArgs(e,t)}setWitnessAt(e,t){this.setWitness(e,t)}async prepareSighashAllWitness(e,t,n){let r=await this.findInputIndexByLock(e,n);if(r===void 0)return;let i=this.getWitnessArgs(r)??Q.from({});i.lock=p(Array.from(Array(t),()=>0)),this.setWitnessArgs(r,i)}async getInputsCapacityExtra(e){return P(this.inputs,async(t,n)=>t+await n.getExtraCapacity(e),_)}async getInputsCapacity(e){return await P(this.inputs,async(t,n)=>{let{cellOutput:{capacity:r}}=await n.getCell(e);return t+r},_)+await this.getInputsCapacityExtra(e)}getOutputsCapacity(){return this.outputs.reduce((e,{capacity:t})=>e+t,_)}async getInputsUdtBalance(e,t){return P(this.inputs,async(n,r)=>{let{cellOutput:i,outputData:a}=await r.getCell(e);if(i.type?.eq(t))return n+zn(a)},_)}getOutputsUdtBalance(e){return this.outputs.reduce((t,n,r)=>n.type?.eq(e)?t+zn(this.outputsData[r]):t,_)}async completeInputs(e,t,n,r){let i=[],a=r,o=!1;for await(let r of e.findCells(t,!0)){if(this.inputs.some(({previousOutput:e})=>e.eq(r.outPoint)))continue;let e=i.push(r),t=await Promise.resolve(n(a,r,e-1,i));if(t===void 0){o=!0;break}a=t}return i.forEach(e=>this.addInput(e)),o?{addedCount:i.length}:{addedCount:i.length,accumulated:a}}async completeInputsByCapacity(e,t,n){let r=this.getOutputsCapacity()+v(t??0),i=await this.getInputsCapacity(e.client);if(i>=r)return 0;let{addedCount:a,accumulated:o}=await this.completeInputs(e,n??{scriptLenRange:[0,1],outputDataLenRange:[0,1]},(e,{cellOutput:{capacity:t}})=>{let n=e+t;return n>=r?void 0:n},i);if(o===void 0)return a;throw new Sn(r-o)}async completeInputsAll(e,t){let{addedCount:n}=await this.completeInputs(e,t??{scriptLenRange:[0,1],outputDataLenRange:[0,1]},(e,{cellOutput:{capacity:t}})=>e+t,_);return n}async completeInputsByUdt(e,t,n){let r=this.getOutputsUdtBalance(t)+v(n??0);if(r===0n)return 0;let[i,a]=await P(this.inputs,async([n,r],i)=>{let{cellOutput:a,outputData:o}=await i.getCell(e.client);if(a.type?.eq(t))return[n+zn(o),r+1]},[_,0]);if(i===r||i>=r&&a>=2)return 0;let{addedCount:o,accumulated:s}=await this.completeInputs(e,{script:t,outputDataLenRange:[16,v(`0xffffffff`)]},(e,{outputData:t},n,i)=>{let o=e+zn(t);return o===r||o>=r&&a+i.length>=2?void 0:o},i);if(s===void 0||s>=r)return o;throw new Cn(r-s,t)}async completeInputsAddOne(e,t){let{addedCount:n,accumulated:r}=await this.completeInputs(e,t??{scriptLenRange:[0,1],outputDataLenRange:[0,1]},()=>void 0,!0);if(r===void 0)return n;throw Error(`Insufficient CKB, need at least one new cell`)}async completeInputsAtLeastOne(e,t){return this.inputs.length>0?0:this.completeInputsAddOne(e,t)}async getFee(e){return await this.getInputsCapacity(e)-this.getOutputsCapacity()}async getFeeRate(e){return await this.getFee(e)*v(1e3)/v(this.toBytes().length+4)}estimateFee(e){return(v(this.toBytes().length+4)*v(e)+v(999))/v(1e3)}async completeFee(e,t,n,r,i){let a=n??await e.client.getFeeRate(i?.feeRateBlockRange,i);await this.getInputsCapacity(e.client);let o=_,s=_,c=0,l=this;for(;;){c+=await(async()=>{if(!(i?.shouldAddInputs??!0))return 0;try{return await l.completeInputsByCapacity(e,o+s,r)}catch(e){throw e instanceof Sn&&s!==0n?new Sn(e.amount,{isForChange:!0}):e}})(),l=await e.prepareTransaction(l);let n=await l.getFee(e.client);if(n<o+s)throw new Sn(o+s-n,{isForChange:s!==_});if(o===0n&&(o=l.estimateFee(a)),n===o)return this.copy(l),[c,!1];let u=l.clone(),d=v(await Promise.resolve(t(u,n-o)));if(d>0n){s=d;continue}if(await u.getFee(e.client)!==o)throw Error(`The change function doesn't use all available capacity`);u=await e.prepareTransaction(u);let f=u.estimateFee(a);if(o>f)throw Error(`The change function removed existed transaction data`);if(o===f)return this.copy(u),[c,!0];o=f}}completeFeeChangeToLock(e,t,n,r,i){let a=H.from(t);return this.completeFee(e,(e,t)=>{let n=q.from({capacity:0,lock:a}),r=g(n.occupiedSize);return t<r?r:(n.capacity=t,e.addOutput(n),0)},n,r,i)}async completeFeeBy(e,t,n,r){let{script:i}=await e.getRecommendedAddressObj();return this.completeFeeChangeToLock(e,i,t,n,r)}completeFeeChangeToOutput(e,t,n,r,i){let a=Number(v(t));if(!this.outputs[a])throw Error(`Non-existed output to change`);return this.completeFee(e,(e,t)=>(e.outputs[a].capacity+=t,0),n,r,i)}};$=G=F([h(j({raw:Bn,witnesses:lt}).mapIn(e=>{let t=$.from(e);return{raw:t,witnesses:t.witnesses}}).mapOut(e=>$.from({...e.raw,witnesses:e.witnesses})))],$);async function Vn(e,t){if(e.outputs.length<=64)return!1;let{codeHash:n,hashType:r}=await t.getKnownScript(`NervosDao`),i=H.from({codeHash:n,hashType:r,args:`0x`});if(e.outputs.some(e=>e.type?.eq(i)))return!0;for(let n of e.inputs)if(await n.completeExtraInfos(t),n.cellOutput?.type?.eq(i))return!0;return!1}function Hn(e,t,n){let r=z.from(t),i=z.from(n),a=v(e);return a*i.dao.ar/r.dao.ar-a}function Un(e,t){let n=z.from(e).epoch.normalizeBase(),r=z.from(t).epoch.normalizeBase(),i=v(180),a=(r.integer-n.integer)%i,o=r.integer;return(a!==0n||n.numerator*r.denominator<=r.numerator*n.denominator)&&(o+=-a+i),L.from([o,n.numerator,n.denominator])}function Wn(n){try{let{words:e,prefix:r}=t.decode(n,qn),i=t.fromWords(e),a=i[0],o=i.slice(1);if(a===0)return{prefix:r,format:0,payload:o}}catch{}try{let{prefix:t,words:r}=e.decode(n,qn),i=e.fromWords(r),a=i[0],o=i.slice(1);if([2,4,1].includes(a))return{prefix:t,format:a,payload:o}}catch{}throw Error(`Unknown address format ${n}`)}async function Gn(e,t,n,r){if(t===0){if(n.length<33)throw Error(`Invalid full address without enough payload ${p(n)}`);return{script:{codeHash:n.slice(0,32),hashType:gn(n.slice(32,33)),args:n.slice(33)},prefix:e}}if(t===2){if(n.length<32)throw Error(`Invalid full data address without enough payload ${p(n)}`);return{script:{codeHash:n.slice(0,32),hashType:`data`,args:n.slice(32)},prefix:e}}if(t===4){if(n.length<32)throw Error(`Invalid full type address without enough payload ${p(n)}`);return{script:{codeHash:n.slice(0,32),hashType:`type`,args:n.slice(32)},prefix:e}}if(n.length!==21)throw Error(`Invalid short address without enough payload ${p(n)}`);let i=[`Secp256k1Blake160`,`Secp256k1Multisig`,`AnyoneCanPay`][n[0]];if(i===void 0)throw Error(`Invalid short address with unknown script ${p(n)}`);return{script:await H.fromKnownScript(r,i,n.slice(1)),prefix:e}}let Kn=function(e){return e[e.Full=0]=`Full`,e[e.Short=1]=`Short`,e[e.FullData=2]=`FullData`,e[e.FullType=4]=`FullType`,e}({});const qn=1023;export{Zt as $,x as $n,Xe as $t,bn as A,Se as An,Tt as At,dn as B,Fe as Bn,gt as Bt,Nn as C,ze as Cn,o as Cr,At as Ct,Cn as D,Ae as Dn,Ot as Dt,Sn as E,_e as En,c as Er,N as Et,mn as F,je as Fn,yt as Ft,an as G,ye as Gn,ct as Gt,cn as H,w as Hn,ft as Ht,gn as I,Te as In,bt as It,tn as J,C as Jn,wt as Jt,rn as K,ge as Kn,lt as Kt,hn as L,we as Ln,xt as Lt,H as M,be as Mn,ut as Mt,_n as N,Ne as Nn,dt as Nt,xn as O,ke as On,Et as Ot,vn as P,Me as Pn,vt as Pt,Yt as Q,b as Qn,Ye as Qt,fn as R,Ce as Rn,mt as Rt,Pn as S,T as Sn,s as Sr,kt as St,zn as T,ve as Tn,l as Tr,F as Tt,sn as U,De as Un,pt as Ut,ln as V,Pe as Vn,_t as Vt,on as W,Ee as Wn,st as Wt,en as X,me as Xn,tt as Xt,Jt as Y,he as Yn,Ct as Yt,$t as Z,v as Zn,nt as Zt,$ as _,Ge as _n,ee as _r,Ft as _t,In as a,ot as an,le as ar,Bt as at,Hn as b,Re as bn,d as br,R as bt,Rn as c,qe as cn,ce as cr,zt as ct,q as d,We as dn,re as dr,Wt as dt,rt as en,pe as er,Xt as et,Fn as f,Ue as fn,ie as fr,qt as ft,Y as g,j as gn,ne as gr,Kt as gt,Bn as h,M as hn,se as hr,Ut as ht,Wn as i,at as in,y as ir,z as it,pn as j,xe as jn,Dt as jt,yn as k,Oe as kn,P as kt,X as l,Je as ln,m as lr,It as lt,K as m,A as mn,oe as mr,Ht as mt,Kn as n,Ze as nn,ue as nr,Pt as nt,J as o,$e as on,_ as or,Rt as ot,jn as p,He as pn,ae as pr,Gt as pt,nn as q,S as qn,St as qt,Gn as r,Qe as rn,fe as rr,Vt as rt,Z as s,et as sn,g as sr,Lt as st,qn as t,it as tn,de as tr,Qt as tt,Ln as u,Ke as un,h as ur,B as ut,Q as v,k as vn,te as vr,Mt as vt,Vn as w,Be as wn,u as wr,jt as wt,Mn as x,Ve as xn,a as xr,L as xt,Un as y,Le as yn,p as yr,Nt as yt,un as z,Ie as zn,ht as zt};
|
|
2
|
-
//# sourceMappingURL=address.advanced-Dw4qPDGb.mjs.map
|