@witnet/sdk 1.0.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +103 -0
- package/dist/package.json +72 -0
- package/dist/src/bin/helpers.d.ts +91 -0
- package/dist/src/bin/helpers.d.ts.map +1 -0
- package/dist/src/bin/helpers.js +816 -0
- package/dist/src/index.d.ts +5 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +47 -0
- package/dist/src/lib/crypto/account.d.ts +32 -0
- package/dist/src/lib/crypto/account.d.ts.map +1 -0
- package/dist/src/lib/crypto/account.js +106 -0
- package/dist/src/lib/crypto/coinbase.d.ts +10 -0
- package/dist/src/lib/crypto/coinbase.d.ts.map +1 -0
- package/dist/src/lib/crypto/coinbase.js +28 -0
- package/dist/src/lib/crypto/index.d.ts +8 -0
- package/dist/src/lib/crypto/index.d.ts.map +1 -0
- package/dist/src/lib/crypto/index.js +30 -0
- package/dist/src/lib/crypto/interfaces.d.ts +85 -0
- package/dist/src/lib/crypto/interfaces.d.ts.map +1 -0
- package/dist/src/lib/crypto/interfaces.js +3 -0
- package/dist/src/lib/crypto/payloads/DataRequestPayload.d.ts +55 -0
- package/dist/src/lib/crypto/payloads/DataRequestPayload.d.ts.map +1 -0
- package/dist/src/lib/crypto/payloads/DataRequestPayload.js +339 -0
- package/dist/src/lib/crypto/payloads/StakePayload.d.ts +28 -0
- package/dist/src/lib/crypto/payloads/StakePayload.d.ts.map +1 -0
- package/dist/src/lib/crypto/payloads/StakePayload.js +142 -0
- package/dist/src/lib/crypto/payloads/UnstakePayload.d.ts +36 -0
- package/dist/src/lib/crypto/payloads/UnstakePayload.d.ts.map +1 -0
- package/dist/src/lib/crypto/payloads/UnstakePayload.js +154 -0
- package/dist/src/lib/crypto/payloads/ValueTransferPayload.d.ts +25 -0
- package/dist/src/lib/crypto/payloads/ValueTransferPayload.d.ts.map +1 -0
- package/dist/src/lib/crypto/payloads/ValueTransferPayload.js +128 -0
- package/dist/src/lib/crypto/payloads.d.ts +57 -0
- package/dist/src/lib/crypto/payloads.d.ts.map +1 -0
- package/dist/src/lib/crypto/payloads.js +170 -0
- package/dist/src/lib/crypto/signer.d.ts +33 -0
- package/dist/src/lib/crypto/signer.d.ts.map +1 -0
- package/dist/src/lib/crypto/signer.js +194 -0
- package/dist/src/lib/crypto/transmitters/DataRequests.d.ts +15 -0
- package/dist/src/lib/crypto/transmitters/DataRequests.d.ts.map +1 -0
- package/dist/src/lib/crypto/transmitters/DataRequests.js +23 -0
- package/dist/src/lib/crypto/transmitters/StakeDeposits.d.ts +12 -0
- package/dist/src/lib/crypto/transmitters/StakeDeposits.d.ts.map +1 -0
- package/dist/src/lib/crypto/transmitters/StakeDeposits.js +17 -0
- package/dist/src/lib/crypto/transmitters/StakeWithdrawals.d.ts +18 -0
- package/dist/src/lib/crypto/transmitters/StakeWithdrawals.d.ts.map +1 -0
- package/dist/src/lib/crypto/transmitters/StakeWithdrawals.js +53 -0
- package/dist/src/lib/crypto/transmitters/ValueTransfers.d.ts +11 -0
- package/dist/src/lib/crypto/transmitters/ValueTransfers.d.ts.map +1 -0
- package/dist/src/lib/crypto/transmitters/ValueTransfers.js +16 -0
- package/dist/src/lib/crypto/transmitters.d.ts +47 -0
- package/dist/src/lib/crypto/transmitters.d.ts.map +1 -0
- package/dist/src/lib/crypto/transmitters.js +416 -0
- package/dist/src/lib/crypto/types.d.ts +161 -0
- package/dist/src/lib/crypto/types.d.ts.map +1 -0
- package/dist/src/lib/crypto/types.js +273 -0
- package/dist/src/lib/crypto/utils.d.ts +21 -0
- package/dist/src/lib/crypto/utils.d.ts.map +1 -0
- package/dist/src/lib/crypto/utils.js +156 -0
- package/dist/src/lib/crypto/wallet.d.ts +120 -0
- package/dist/src/lib/crypto/wallet.d.ts.map +1 -0
- package/dist/src/lib/crypto/wallet.js +258 -0
- package/dist/src/lib/index.d.ts +5 -0
- package/dist/src/lib/index.d.ts.map +1 -0
- package/dist/src/lib/index.js +44 -0
- package/dist/src/lib/radon/ccdr/eth.d.ts +160 -0
- package/dist/src/lib/radon/ccdr/eth.d.ts.map +1 -0
- package/dist/src/lib/radon/ccdr/eth.js +272 -0
- package/dist/src/lib/radon/ccdr/index.d.ts +14 -0
- package/dist/src/lib/radon/ccdr/index.d.ts.map +1 -0
- package/dist/src/lib/radon/ccdr/index.js +39 -0
- package/dist/src/lib/radon/ccdr/wit.d.ts +23 -0
- package/dist/src/lib/radon/ccdr/wit.d.ts.map +1 -0
- package/dist/src/lib/radon/ccdr/wit.js +35 -0
- package/dist/src/lib/radon/filters.d.ts +14 -0
- package/dist/src/lib/radon/filters.d.ts.map +1 -0
- package/dist/src/lib/radon/filters.js +45 -0
- package/dist/src/lib/radon/index.d.ts +296 -0
- package/dist/src/lib/radon/index.d.ts.map +1 -0
- package/dist/src/lib/radon/index.js +707 -0
- package/dist/src/lib/radon/reducers.d.ts +29 -0
- package/dist/src/lib/radon/reducers.d.ts.map +1 -0
- package/dist/src/lib/radon/reducers.js +66 -0
- package/dist/src/lib/radon/types.d.ts +521 -0
- package/dist/src/lib/radon/types.d.ts.map +1 -0
- package/dist/src/lib/radon/types.js +936 -0
- package/dist/src/lib/radon/utils.d.ts +53 -0
- package/dist/src/lib/radon/utils.d.ts.map +1 -0
- package/dist/src/lib/radon/utils.js +153 -0
- package/dist/src/lib/rpc/index.d.ts +3 -0
- package/dist/src/lib/rpc/index.d.ts.map +1 -0
- package/dist/src/lib/rpc/index.js +19 -0
- package/dist/src/lib/rpc/nodes.d.ts +40 -0
- package/dist/src/lib/rpc/nodes.d.ts.map +1 -0
- package/dist/src/lib/rpc/nodes.js +293 -0
- package/dist/src/lib/rpc/provider.d.ts +88 -0
- package/dist/src/lib/rpc/provider.d.ts.map +1 -0
- package/dist/src/lib/rpc/provider.js +336 -0
- package/dist/src/lib/rpc/reporter.d.ts +18 -0
- package/dist/src/lib/rpc/reporter.d.ts.map +1 -0
- package/dist/src/lib/rpc/reporter.js +30 -0
- package/dist/src/lib/rpc/types.d.ts +409 -0
- package/dist/src/lib/rpc/types.d.ts.map +1 -0
- package/dist/src/lib/rpc/types.js +81 -0
- package/dist/src/lib/types.d.ts +18 -0
- package/dist/src/lib/types.d.ts.map +1 -0
- package/dist/src/lib/types.js +7 -0
- package/dist/src/lib/utils.d.ts +13 -0
- package/dist/src/lib/utils.d.ts.map +1 -0
- package/dist/src/lib/utils.js +97 -0
- package/dist/witnet/assets/index.d.ts +30 -0
- package/dist/witnet/assets/index.d.ts.map +1 -0
- package/dist/witnet/assets/index.js +6 -0
- package/dist/witnet/assets/modals/index.d.ts +18 -0
- package/dist/witnet/assets/modals/index.d.ts.map +1 -0
- package/dist/witnet/assets/modals/index.js +21 -0
- package/dist/witnet/assets/modals/web3/eth.d.ts +5 -0
- package/dist/witnet/assets/modals/web3/eth.d.ts.map +1 -0
- package/dist/witnet/assets/modals/web3/eth.js +26 -0
- package/dist/witnet/assets/modals/web3/wit.d.ts +4 -0
- package/dist/witnet/assets/modals/web3/wit.d.ts.map +1 -0
- package/dist/witnet/assets/modals/web3/wit.js +20 -0
- package/dist/witnet/assets/requests.d.ts +11 -0
- package/dist/witnet/assets/requests.d.ts.map +1 -0
- package/dist/witnet/assets/requests.js +88 -0
- package/dist/witnet/witnet.proto.json +1325 -0
- package/package.json +72 -0
- package/src/bin/cli/history.js +31 -0
- package/src/bin/cli/inspect.js +359 -0
- package/src/bin/cli/network.js +592 -0
- package/src/bin/cli/nodes.js +364 -0
- package/src/bin/cli/radon.js +814 -0
- package/src/bin/cli/wallet.js +1000 -0
- package/src/bin/helpers.js +829 -0
- package/src/bin/postinstall.js +9 -0
- package/src/bin/toolkit.js +294 -0
- package/witnet/assets/_index.js +8 -0
- package/witnet/assets/_requests.js +25 -0
- package/witnet/assets/_sources.js +36 -0
- package/witnet/assets/_templates.js +36 -0
- package/witnet/assets/index.js +4 -0
- package/witnet/assets/modals/index.js +25 -0
- package/witnet/assets/modals/web3/btc.js +0 -0
- package/witnet/assets/modals/web3/eth.js +29 -0
- package/witnet/assets/modals/web3/sol.js +0 -0
- package/witnet/assets/modals/web3/wit.js +23 -0
- package/witnet/assets/requests.js +94 -0
- package/witnet/witnet.proto.json +1325 -0
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import { Balance, Epoch, Hash, HexString, UtxoMetadata } from "../types";
|
|
2
|
+
export declare class Coins {
|
|
3
|
+
protected coins: bigint;
|
|
4
|
+
static fromBalance(balance: Balance): Coins;
|
|
5
|
+
static fromNanowits(nanowits: bigint): Coins;
|
|
6
|
+
static fromPedros(pedros: bigint): Coins;
|
|
7
|
+
static fromWits(wits: number): Coins;
|
|
8
|
+
static zero(): Coins;
|
|
9
|
+
constructor(pedros: bigint);
|
|
10
|
+
get pedros(): bigint;
|
|
11
|
+
get nanowits(): bigint;
|
|
12
|
+
get wits(): number;
|
|
13
|
+
toString(decimals?: number): string;
|
|
14
|
+
}
|
|
15
|
+
export type KeyPath = Array<number>;
|
|
16
|
+
export type KeyedSignature = {
|
|
17
|
+
signature: {
|
|
18
|
+
Secp256k1: {
|
|
19
|
+
der: Array<number>;
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
public_key: {
|
|
23
|
+
bytes: Array<number>;
|
|
24
|
+
compressed: number;
|
|
25
|
+
};
|
|
26
|
+
};
|
|
27
|
+
export type PublicKeyHashString = HexString;
|
|
28
|
+
interface Key {
|
|
29
|
+
bytes: Uint8Array;
|
|
30
|
+
}
|
|
31
|
+
export interface PrivateKey extends Key {
|
|
32
|
+
type: "private";
|
|
33
|
+
}
|
|
34
|
+
export interface PublicKey extends Key {
|
|
35
|
+
type: "public";
|
|
36
|
+
}
|
|
37
|
+
export type TransactionCallback = (receipt: TransactionReceipt, error?: any) => any;
|
|
38
|
+
export type TransactionParams = {
|
|
39
|
+
deadline?: Epoch;
|
|
40
|
+
fees?: TransactionPriority | Coins;
|
|
41
|
+
};
|
|
42
|
+
export declare enum TransactionPriority {
|
|
43
|
+
Stinky = "stinky",
|
|
44
|
+
Low = "low",
|
|
45
|
+
Medium = "medium",
|
|
46
|
+
High = "high",
|
|
47
|
+
Opulent = "opulent"
|
|
48
|
+
}
|
|
49
|
+
export type TransactionReceipt = {
|
|
50
|
+
authorization?: HexString;
|
|
51
|
+
blockEpoch?: Epoch;
|
|
52
|
+
blockHash?: Hash;
|
|
53
|
+
blockMiner?: PublicKeyHashString;
|
|
54
|
+
blockTimestamp?: number;
|
|
55
|
+
confirmations?: number;
|
|
56
|
+
change?: Coins;
|
|
57
|
+
droHash?: Hash;
|
|
58
|
+
error?: Error;
|
|
59
|
+
fees: Coins;
|
|
60
|
+
from?: Array<PublicKeyHashString> | PublicKeyHashString;
|
|
61
|
+
hash: Hash;
|
|
62
|
+
outputLock?: number;
|
|
63
|
+
radArgs?: any;
|
|
64
|
+
radHash?: HexString;
|
|
65
|
+
recipients?: Array<[PublicKeyHashString, Coins]>;
|
|
66
|
+
status: string;
|
|
67
|
+
timestamp: number;
|
|
68
|
+
type: string;
|
|
69
|
+
tx?: any;
|
|
70
|
+
validator?: PublicKeyHashString;
|
|
71
|
+
value?: Coins;
|
|
72
|
+
weight: number;
|
|
73
|
+
withdrawer?: PublicKeyHashString;
|
|
74
|
+
witnesses?: number | Record<PublicKeyHashString, Coins>;
|
|
75
|
+
};
|
|
76
|
+
export type TransactionStatus = "signed" | "pending" | "relayed" | "removed" | "mined" | "confirmed" | "finalized";
|
|
77
|
+
export type Transmission = {
|
|
78
|
+
bytecode?: Uint8Array;
|
|
79
|
+
hash?: Hash;
|
|
80
|
+
message: any;
|
|
81
|
+
};
|
|
82
|
+
export type Utxo = UtxoMetadata & {
|
|
83
|
+
signer: PublicKeyHashString;
|
|
84
|
+
};
|
|
85
|
+
export type UtxoCacheInfo = {
|
|
86
|
+
expendable: bigint;
|
|
87
|
+
size: number;
|
|
88
|
+
timelock: number;
|
|
89
|
+
};
|
|
90
|
+
export type UtxoPointer = {
|
|
91
|
+
transaction_id: Hash;
|
|
92
|
+
output_index: number;
|
|
93
|
+
};
|
|
94
|
+
export declare enum UtxoSelectionStrategy {
|
|
95
|
+
BigFirst = "big-first",
|
|
96
|
+
Random = "random",
|
|
97
|
+
SlimFit = "slim-fit",
|
|
98
|
+
SmallFirst = "small-first"
|
|
99
|
+
}
|
|
100
|
+
export declare class PublicKey implements Key {
|
|
101
|
+
readonly compressed: number;
|
|
102
|
+
readonly bytes: Uint8Array;
|
|
103
|
+
static fromProtobuf(protobuf: {
|
|
104
|
+
compressed: number;
|
|
105
|
+
bytes: Array<number>;
|
|
106
|
+
}): PublicKey;
|
|
107
|
+
static fromUint8Array(uint8Array: Uint8Array): PublicKey;
|
|
108
|
+
static recoverFrom(recoverable: any, msg: Uint8Array): PublicKey;
|
|
109
|
+
constructor(compressed: number, bytes: Uint8Array);
|
|
110
|
+
equals(pubKey: PublicKey): boolean;
|
|
111
|
+
hash(): PublicKeyHash;
|
|
112
|
+
toString(): string;
|
|
113
|
+
toUint8Array(): Uint8Array;
|
|
114
|
+
}
|
|
115
|
+
export declare class PublicKeyHash {
|
|
116
|
+
static fromHash(hash: Uint8Array): PublicKeyHash;
|
|
117
|
+
static fromHexString(hash: HexString): PublicKeyHash;
|
|
118
|
+
static fromPublicKey(pk: PublicKey): PublicKeyHash;
|
|
119
|
+
static fromBech32(pkh: string): PublicKeyHash;
|
|
120
|
+
protected words: number[];
|
|
121
|
+
constructor(words: number[]);
|
|
122
|
+
toBech32(network?: string): string;
|
|
123
|
+
toBytes20(): Uint8Array;
|
|
124
|
+
toBytes32(): Uint8Array;
|
|
125
|
+
toHexString(): string;
|
|
126
|
+
}
|
|
127
|
+
export declare class Signature {
|
|
128
|
+
static fromHexString(hex: string): Signature;
|
|
129
|
+
readonly bytes: Uint8Array;
|
|
130
|
+
constructor(bytes: Uint8Array);
|
|
131
|
+
toHexString(): string;
|
|
132
|
+
}
|
|
133
|
+
export declare class RecoverableSignature extends Signature {
|
|
134
|
+
static from(recoverable: any, msg: Uint8Array): RecoverableSignature;
|
|
135
|
+
static fromKeyedSignature(ks: KeyedSignature, msg: Uint8Array): RecoverableSignature;
|
|
136
|
+
readonly message: Uint8Array;
|
|
137
|
+
readonly pubKey: PublicKey;
|
|
138
|
+
readonly recoveryId: number;
|
|
139
|
+
constructor(pubKey: PublicKey, bytes: Uint8Array, msg: Uint8Array);
|
|
140
|
+
toHexString(): string;
|
|
141
|
+
toKeyedSignature(): any;
|
|
142
|
+
toProtobuf(): any;
|
|
143
|
+
}
|
|
144
|
+
declare abstract class TransactionError extends Error {
|
|
145
|
+
readonly receipt: TransactionReceipt;
|
|
146
|
+
constructor(receipt: TransactionReceipt, message?: string);
|
|
147
|
+
}
|
|
148
|
+
export declare class MempoolError extends TransactionError {
|
|
149
|
+
constructor(receipt: TransactionReceipt, message?: string);
|
|
150
|
+
}
|
|
151
|
+
export declare class TimeoutError extends TransactionError {
|
|
152
|
+
readonly msecs: number;
|
|
153
|
+
constructor(msecs: number, receipt: TransactionReceipt, message?: string);
|
|
154
|
+
}
|
|
155
|
+
export declare class TransmissionError extends Error {
|
|
156
|
+
readonly error?: any;
|
|
157
|
+
readonly inFlight: Transmission;
|
|
158
|
+
constructor(inFlight: Transmission, error?: any);
|
|
159
|
+
}
|
|
160
|
+
export {};
|
|
161
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/lib/crypto/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TransmissionError = exports.TimeoutError = exports.MempoolError = exports.RecoverableSignature = exports.Signature = exports.PublicKeyHash = exports.PublicKey = exports.UtxoSelectionStrategy = exports.TransactionPriority = exports.Coins = void 0;
|
|
4
|
+
const secp256k1 = require('secp256k1');
|
|
5
|
+
const bech32_1 = require("bech32");
|
|
6
|
+
const helpers_1 = require("../../bin/helpers");
|
|
7
|
+
const utils_1 = require("./utils");
|
|
8
|
+
class Coins {
|
|
9
|
+
static fromBalance(balance) {
|
|
10
|
+
return Coins.fromPedros(balance.locked
|
|
11
|
+
+ balance.staked
|
|
12
|
+
+ balance.unlocked);
|
|
13
|
+
}
|
|
14
|
+
static fromNanowits(nanowits) {
|
|
15
|
+
return new Coins(nanowits);
|
|
16
|
+
}
|
|
17
|
+
static fromPedros(pedros) {
|
|
18
|
+
return new Coins(pedros);
|
|
19
|
+
}
|
|
20
|
+
static fromWits(wits) {
|
|
21
|
+
if (wits > Number.MAX_SAFE_INTEGER) {
|
|
22
|
+
throw new TypeError(`${this.constructor.name}: internal error: too many wits: ${wits} > ${Number.MAX_SAFE_INTEGER}`);
|
|
23
|
+
}
|
|
24
|
+
return new Coins(BigInt(Math.floor(wits)) * 10n ** 9n
|
|
25
|
+
+ BigInt(Math.floor((wits - Math.floor(wits)) * 1000000000)));
|
|
26
|
+
}
|
|
27
|
+
static zero() {
|
|
28
|
+
return new Coins(0n);
|
|
29
|
+
}
|
|
30
|
+
constructor(pedros) {
|
|
31
|
+
this.coins = pedros;
|
|
32
|
+
}
|
|
33
|
+
get pedros() {
|
|
34
|
+
return this.coins;
|
|
35
|
+
}
|
|
36
|
+
get nanowits() {
|
|
37
|
+
return this.coins;
|
|
38
|
+
}
|
|
39
|
+
get wits() {
|
|
40
|
+
const quotient = BigInt(this.coins) / 1000000000n;
|
|
41
|
+
if (Number(quotient) > Number.MAX_SAFE_INTEGER) {
|
|
42
|
+
throw new TypeError(`${this.constructor.name}: internal error: too many coins: ${quotient.toString()} > ${Number.MAX_SAFE_INTEGER}`);
|
|
43
|
+
}
|
|
44
|
+
const rest = Number(BigInt(this.coins) - quotient * 1000000000n) / 1000000000;
|
|
45
|
+
// console.log("wits() =>", this.coins.toString(), quotient.toString(), rest, Number(quotient) + rest)
|
|
46
|
+
return Number(quotient) + rest;
|
|
47
|
+
}
|
|
48
|
+
toString(decimals = 9) {
|
|
49
|
+
return (0, helpers_1.whole_wits)(this.coins, decimals);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
exports.Coins = Coins;
|
|
53
|
+
var TransactionPriority;
|
|
54
|
+
(function (TransactionPriority) {
|
|
55
|
+
TransactionPriority["Stinky"] = "stinky";
|
|
56
|
+
TransactionPriority["Low"] = "low";
|
|
57
|
+
TransactionPriority["Medium"] = "medium";
|
|
58
|
+
TransactionPriority["High"] = "high";
|
|
59
|
+
TransactionPriority["Opulent"] = "opulent";
|
|
60
|
+
})(TransactionPriority || (exports.TransactionPriority = TransactionPriority = {}));
|
|
61
|
+
var UtxoSelectionStrategy;
|
|
62
|
+
(function (UtxoSelectionStrategy) {
|
|
63
|
+
UtxoSelectionStrategy["BigFirst"] = "big-first";
|
|
64
|
+
UtxoSelectionStrategy["Random"] = "random";
|
|
65
|
+
UtxoSelectionStrategy["SlimFit"] = "slim-fit";
|
|
66
|
+
UtxoSelectionStrategy["SmallFirst"] = "small-first";
|
|
67
|
+
})(UtxoSelectionStrategy || (exports.UtxoSelectionStrategy = UtxoSelectionStrategy = {}));
|
|
68
|
+
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
69
|
+
/// EXPORTED CLASSES
|
|
70
|
+
/// ===================================================================================================================
|
|
71
|
+
class PublicKey {
|
|
72
|
+
static fromProtobuf(protobuf) {
|
|
73
|
+
return new PublicKey(protobuf.compressed, Uint8Array.from(protobuf.bytes));
|
|
74
|
+
}
|
|
75
|
+
static fromUint8Array(uint8Array) {
|
|
76
|
+
return new PublicKey(uint8Array[0], uint8Array.slice(1));
|
|
77
|
+
}
|
|
78
|
+
static recoverFrom(recoverable, msg) {
|
|
79
|
+
let bytes;
|
|
80
|
+
if ((0, helpers_1.isHexString)(recoverable)) {
|
|
81
|
+
bytes = (0, helpers_1.fromHexString)(recoverable);
|
|
82
|
+
}
|
|
83
|
+
else if (recoverable instanceof Buffer) {
|
|
84
|
+
bytes = Uint8Array.from(recoverable.buffer);
|
|
85
|
+
}
|
|
86
|
+
else if (recoverable instanceof Uint8Array) {
|
|
87
|
+
bytes = recoverable;
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
throw new TypeError(`PublicKey: unsupported recoverable signature format: ${recoverable}`);
|
|
91
|
+
}
|
|
92
|
+
if (bytes.length !== 65) {
|
|
93
|
+
throw new TypeError(`PublicKey: expected recoverable signature with length 65: ${(0, helpers_1.toHexString)(bytes)}`);
|
|
94
|
+
}
|
|
95
|
+
const [recoveryId, signature] = [bytes[0], bytes.slice(1)];
|
|
96
|
+
return PublicKey.fromUint8Array(secp256k1.ecdsaRecover(signature, recoveryId, msg));
|
|
97
|
+
}
|
|
98
|
+
constructor(compressed, bytes) {
|
|
99
|
+
this.compressed = compressed;
|
|
100
|
+
this.bytes = bytes;
|
|
101
|
+
}
|
|
102
|
+
equals(pubKey) {
|
|
103
|
+
return pubKey.compressed === this.compressed && matchingUint8Arrays(pubKey.bytes, pubKey.bytes);
|
|
104
|
+
}
|
|
105
|
+
hash() {
|
|
106
|
+
return PublicKeyHash.fromPublicKey(this);
|
|
107
|
+
}
|
|
108
|
+
toString() {
|
|
109
|
+
return (0, helpers_1.toHexString)([this.compressed, ...this.bytes]);
|
|
110
|
+
}
|
|
111
|
+
toUint8Array() {
|
|
112
|
+
return Uint8Array.from([this.compressed, ...this.bytes]);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
exports.PublicKey = PublicKey;
|
|
116
|
+
;
|
|
117
|
+
/// ===================================================================================================================
|
|
118
|
+
class PublicKeyHash {
|
|
119
|
+
static fromHash(hash) {
|
|
120
|
+
return new PublicKeyHash(bech32_1.bech32.toWords(hash));
|
|
121
|
+
}
|
|
122
|
+
static fromHexString(hash) {
|
|
123
|
+
return PublicKeyHash.fromHash((0, helpers_1.fromHexString)(hash));
|
|
124
|
+
}
|
|
125
|
+
static fromPublicKey(pk) {
|
|
126
|
+
return PublicKeyHash.fromHash((0, utils_1.sha256)(Buffer.from([pk.compressed, ...pk.bytes])).subarray(0, 20));
|
|
127
|
+
}
|
|
128
|
+
static fromBech32(pkh) {
|
|
129
|
+
try {
|
|
130
|
+
pkh = pkh.toLowerCase();
|
|
131
|
+
if (pkh.startsWith('wit')) {
|
|
132
|
+
return new PublicKeyHash(bech32_1.bech32.decode(pkh, 66).words);
|
|
133
|
+
}
|
|
134
|
+
else if (pkh.startsWith('twit')) {
|
|
135
|
+
return new PublicKeyHash(bech32_1.bech32.decode(pkh, 67).words);
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
throw new TypeError(`PublicKeyHash: invalid bech32 string: ${pkh}`);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
catch {
|
|
142
|
+
throw new TypeError(`PublicKeyHash: invalid bech32 string: ${pkh}`);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
constructor(words) {
|
|
146
|
+
this.words = words;
|
|
147
|
+
}
|
|
148
|
+
toBech32(network = "mainnet") {
|
|
149
|
+
return network === "mainnet" ? bech32_1.bech32.encode('wit', this.words, 66) : bech32_1.bech32.encode('twit', this.words, 67);
|
|
150
|
+
}
|
|
151
|
+
toBytes20() {
|
|
152
|
+
return Uint8Array.from(bech32_1.bech32.fromWords(this.words).slice(0, 20));
|
|
153
|
+
}
|
|
154
|
+
toBytes32() {
|
|
155
|
+
return Uint8Array.from([
|
|
156
|
+
...bech32_1.bech32.fromWords(this.words).slice(0, 20),
|
|
157
|
+
...new Array(12).fill(0),
|
|
158
|
+
]);
|
|
159
|
+
}
|
|
160
|
+
toHexString() {
|
|
161
|
+
return (0, helpers_1.toHexString)(this.toBytes20());
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
exports.PublicKeyHash = PublicKeyHash;
|
|
165
|
+
/// ===================================================================================================================
|
|
166
|
+
class Signature {
|
|
167
|
+
static fromHexString(hex) {
|
|
168
|
+
return new Signature((0, helpers_1.fromHexString)(hex));
|
|
169
|
+
}
|
|
170
|
+
constructor(bytes) {
|
|
171
|
+
this.bytes = bytes;
|
|
172
|
+
}
|
|
173
|
+
toHexString() {
|
|
174
|
+
return (0, helpers_1.toHexString)(this.bytes);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
exports.Signature = Signature;
|
|
178
|
+
/// ===================================================================================================================
|
|
179
|
+
class RecoverableSignature extends Signature {
|
|
180
|
+
static from(recoverable, msg) {
|
|
181
|
+
let bytes;
|
|
182
|
+
if ((0, helpers_1.isHexString)(recoverable)) {
|
|
183
|
+
bytes = (0, helpers_1.fromHexString)(recoverable).slice(1);
|
|
184
|
+
}
|
|
185
|
+
else if (recoverable instanceof Buffer) {
|
|
186
|
+
bytes = Uint8Array.from(recoverable.buffer).slice(1);
|
|
187
|
+
}
|
|
188
|
+
else if (recoverable instanceof Uint8Array) {
|
|
189
|
+
bytes = recoverable.slice(1);
|
|
190
|
+
}
|
|
191
|
+
else {
|
|
192
|
+
throw new TypeError(`RecoverableSignature: unsupported recoverable signature format: ${recoverable}`);
|
|
193
|
+
}
|
|
194
|
+
if (bytes.length !== 64) {
|
|
195
|
+
throw new TypeError(`RecoverableSignatre: expected recoverable signature with length 65: ${(0, helpers_1.toHexString)(bytes)}`);
|
|
196
|
+
}
|
|
197
|
+
return new RecoverableSignature(PublicKey.recoverFrom(recoverable, msg), bytes, msg);
|
|
198
|
+
}
|
|
199
|
+
static fromKeyedSignature(ks, msg) {
|
|
200
|
+
return new RecoverableSignature(PublicKey.fromProtobuf(ks.public_key), secp256k1.signatureImport(Uint8Array.from(ks.signature.Secp256k1.der)), msg);
|
|
201
|
+
}
|
|
202
|
+
constructor(pubKey, bytes, msg) {
|
|
203
|
+
super(bytes);
|
|
204
|
+
const pubKeyRaw = pubKey.toUint8Array();
|
|
205
|
+
let recoveryId;
|
|
206
|
+
for (recoveryId = 0; recoveryId < 4; recoveryId++) {
|
|
207
|
+
let recovered;
|
|
208
|
+
try {
|
|
209
|
+
recovered = secp256k1.ecdsaRecover(bytes, recoveryId, msg);
|
|
210
|
+
if (matchingUint8Arrays(recovered, pubKeyRaw))
|
|
211
|
+
break;
|
|
212
|
+
}
|
|
213
|
+
catch { }
|
|
214
|
+
}
|
|
215
|
+
this.message = msg;
|
|
216
|
+
this.pubKey = pubKey;
|
|
217
|
+
this.recoveryId = recoveryId;
|
|
218
|
+
}
|
|
219
|
+
toHexString() {
|
|
220
|
+
return (0, helpers_1.toHexString)([this.recoveryId, ...this.bytes]);
|
|
221
|
+
}
|
|
222
|
+
toKeyedSignature() {
|
|
223
|
+
return {
|
|
224
|
+
signature: { Secp256k1: { der: Array.from(secp256k1.signatureExport(this.bytes)) } },
|
|
225
|
+
public_key: {
|
|
226
|
+
bytes: Array.from(this.pubKey.bytes),
|
|
227
|
+
compressed: this.pubKey.compressed,
|
|
228
|
+
}
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
toProtobuf() {
|
|
232
|
+
return {
|
|
233
|
+
signature: { Secp256k1: { der: Array.from(secp256k1.signatureExport(this.bytes)) } },
|
|
234
|
+
publicKey: { publicKey: Array.from([this.pubKey.compressed, ...this.pubKey.bytes]) },
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
exports.RecoverableSignature = RecoverableSignature;
|
|
239
|
+
/// ===================================================================================================================
|
|
240
|
+
class TransactionError extends Error {
|
|
241
|
+
constructor(receipt, message) {
|
|
242
|
+
super(message);
|
|
243
|
+
this.receipt = receipt;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
class MempoolError extends TransactionError {
|
|
247
|
+
constructor(receipt, message) {
|
|
248
|
+
super(receipt, message);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
exports.MempoolError = MempoolError;
|
|
252
|
+
class TimeoutError extends TransactionError {
|
|
253
|
+
constructor(msecs, receipt, message) {
|
|
254
|
+
super(receipt, message);
|
|
255
|
+
this.msecs = msecs;
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
exports.TimeoutError = TimeoutError;
|
|
259
|
+
class TransmissionError extends Error {
|
|
260
|
+
constructor(inFlight, error) {
|
|
261
|
+
super(JSON.stringify(error));
|
|
262
|
+
delete error?.stack;
|
|
263
|
+
this.error = error;
|
|
264
|
+
this.inFlight = inFlight;
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
exports.TransmissionError = TransmissionError;
|
|
268
|
+
/// -------------------------------------------------------------------------------------------------------------------
|
|
269
|
+
/// --- Internal functions
|
|
270
|
+
function matchingUint8Arrays(a, b) {
|
|
271
|
+
return a.length === b.length && a.every((value, index) => value === b[index]);
|
|
272
|
+
}
|
|
273
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NyeXB0by90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUE7QUFDdEMsbUNBQStCO0FBRy9CLCtDQUF1RjtBQUN2RixtQ0FBZ0M7QUFFaEMsTUFBYSxLQUFLO0lBRVAsTUFBTSxDQUFDLFdBQVcsQ0FBQyxPQUFnQjtRQUN0QyxPQUFPLEtBQUssQ0FBQyxVQUFVLENBQ25CLE9BQU8sQ0FBQyxNQUFNO2NBQ1IsT0FBTyxDQUFDLE1BQU07Y0FDZCxPQUFPLENBQUMsUUFBUSxDQUN6QixDQUFBO0lBQ0wsQ0FBQztJQUNNLE1BQU0sQ0FBQyxZQUFZLENBQUMsUUFBZ0I7UUFDdkMsT0FBTyxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUM5QixDQUFDO0lBQ00sTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFjO1FBQ25DLE9BQU8sSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDNUIsQ0FBQztJQUNNLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBWTtRQUMvQixJQUFJLElBQUksR0FBRyxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUNqQyxNQUFNLElBQUksU0FBUyxDQUNmLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLG9DQUFvQyxJQUFJLE1BQU0sTUFBTSxDQUFDLGdCQUFnQixFQUFFLENBQ2xHLENBQUE7UUFDTCxDQUFDO1FBQ0QsT0FBTyxJQUFJLEtBQUssQ0FDWixNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxFQUFFO2NBQzlCLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsR0FB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QU8sR0FBRyxPQUFPLENBQUE7SUFDMUIsQ0FBQztDQUNKO0FBQ0QsTUFBYSxZQUFhLFNBQVEsZ0JBQWdCO0lBQzlDLFlBQVksT0FBMkIsRUFBRSxPQUFnQjtRQUNyRCxLQUFLLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQzNCLENBQUM7Q0FDSjtBQUpELG9DQUlDO0FBRUQsTUFBYSxZQUFhLFNBQVEsZ0JBQWdCO0lBRTlDLFlBQWEsS0FBYSxFQUFFLE9BQTJCLEVBQUUsT0FBZ0I7UUFDckUsS0FBSyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQTtRQUN2QixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQTtJQUN0QixDQUFDO0NBQ0o7QUFORCxvQ0FNQztBQUdELE1BQWEsaUJBQWtCLFNBQVEsS0FBSztJQUd4QyxZQUFZLFFBQXNCLEVBQUUsS0FBVztRQUMzQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO1FBQzVCLE9BQU8sS0FBSyxFQUFFLEtBQUssQ0FBQTtRQUNuQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQTtRQUNsQixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQTtJQUM1QixDQUFDO0NBQ0o7QUFURCw4Q0FTQztBQUdELHVIQUF1SDtBQUN2SCwyQkFBMkI7QUFFM0IsU0FBUyxtQkFBbUIsQ0FBQyxDQUFhLEVBQUUsQ0FBYTtJQUNyRCxPQUFPLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO0FBQ2pGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBzZWNwMjU2azEgPSByZXF1aXJlKCdzZWNwMjU2azEnKVxyXG5pbXBvcnQgeyBiZWNoMzIgfSBmcm9tICdiZWNoMzInXHJcbmltcG9ydCB7IEJhbGFuY2UsIEVwb2NoLCBIYXNoLCBIZXhTdHJpbmcsIFV0eG9NZXRhZGF0YSB9IGZyb20gXCIuLi90eXBlc1wiXHJcblxyXG5pbXBvcnQgeyBmcm9tSGV4U3RyaW5nLCBpc0hleFN0cmluZywgdG9IZXhTdHJpbmcsIHdob2xlX3dpdHMgfSBmcm9tIFwiLi4vLi4vYmluL2hlbHBlcnNcIlxyXG5pbXBvcnQgeyBzaGEyNTYgfSBmcm9tIFwiLi91dGlsc1wiXHJcblxyXG5leHBvcnQgY2xhc3MgQ29pbnMge1xyXG4gICAgcHJvdGVjdGVkIGNvaW5zOiBiaWdpbnQ7XHJcbiAgICBwdWJsaWMgc3RhdGljIGZyb21CYWxhbmNlKGJhbGFuY2U6IEJhbGFuY2UpOiBDb2lucyB7XHJcbiAgICAgICAgcmV0dXJuIENvaW5zLmZyb21QZWRyb3MoXHJcbiAgICAgICAgICAgIGJhbGFuY2UubG9ja2VkXHJcbiAgICAgICAgICAgICAgICArIGJhbGFuY2Uuc3Rha2VkXHJcbiAgICAgICAgICAgICAgICArIGJhbGFuY2UudW5sb2NrZWRcclxuICAgICAgICApXHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIGZyb21OYW5vd2l0cyhuYW5vd2l0czogYmlnaW50KTogQ29pbnMge1xyXG4gICAgICAgIHJldHVybiBuZXcgQ29pbnMobmFub3dpdHMpXHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIGZyb21QZWRyb3MocGVkcm9zOiBiaWdpbnQpOiBDb2lucyB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBDb2lucyhwZWRyb3MpXHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIGZyb21XaXRzKHdpdHM6IG51bWJlcik6IENvaW5zIHtcclxuICAgICAgICBpZiAod2l0cyA+IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXHJcbiAgICAgICAgICAgICAgICBgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9OiBpbnRlcm5hbCBlcnJvcjogdG9vIG1hbnkgd2l0czogJHt3aXRzfSA+ICR7TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJ9YFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXcgQ29pbnMoXHJcbiAgICAgICAgICAgIEJpZ0ludChNYXRoLmZsb29yKHdpdHMpKSAqIDEwbiAqKiA5blxyXG4gICAgICAgICAgICAgICAgKyBCaWdJbnQoTWF0aC5mbG9vcigod2l0cyAtIE1hdGguZmxvb3Iod2l0cykpICogMTAwMDAwMDAwMCkpXHJcbiAgICAgICAgKVxyXG4gICAgfVxyXG4gICAgcHVibGljIHN0YXRpYyB6ZXJvKCk6IENvaW5zIHtcclxuICAgICAgICByZXR1cm4gbmV3IENvaW5zKDBuKVxyXG4gICAgfVxyXG4gICAgY29uc3RydWN0b3IgKHBlZHJvczogYmlnaW50KSB7XHJcbiAgICAgICAgdGhpcy5jb2lucyA9IHBlZHJvc1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBwZWRyb3MoKTogYmlnaW50IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb2luc1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBuYW5vd2l0cygpOiBiaWdpbnQge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvaW5zXHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IHdpdHMoKTogbnVtYmVyIHtcclxuICAgICAgICBjb25zdCBxdW90aWVudCA9IEJpZ0ludCh0aGlzLmNvaW5zKSAvIDEwMDAwMDAwMDBuXHJcbiAgICAgICAgaWYgKE51bWJlcihxdW90aWVudCkgPiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxyXG4gICAgICAgICAgICAgICAgYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfTogaW50ZXJuYWwgZXJyb3I6IHRvbyBtYW55IGNvaW5zOiAke3F1b3RpZW50LnRvU3RyaW5nKCl9ID4gJHtOdW1iZXIuTUFYX1NBRkVfSU5URUdFUn1gXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcmVzdCA9IE51bWJlcihCaWdJbnQodGhpcy5jb2lucykgLSBxdW90aWVudCAqIDEwMDAwMDAwMDBuKSAvIDEwMDAwMDAwMDBcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcIndpdHMoKSA9PlwiLCB0aGlzLmNvaW5zLnRvU3RyaW5nKCksIHF1b3RpZW50LnRvU3RyaW5nKCksIHJlc3QsIE51bWJlcihxdW90aWVudCkgKyByZXN0KVxyXG4gICAgICAgIHJldHVybiBOdW1iZXIocXVvdGllbnQpICsgcmVzdFxyXG4gICAgfVxyXG4gICAgcHVibGljIHRvU3RyaW5nKGRlY2ltYWxzID0gOSk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHdob2xlX3dpdHModGhpcy5jb2lucywgZGVjaW1hbHMpXHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIEtleVBhdGggPSBBcnJheTxudW1iZXI+XHJcblxyXG5leHBvcnQgdHlwZSBLZXllZFNpZ25hdHVyZSA9IHtcclxuICAgIHNpZ25hdHVyZTogeyBTZWNwMjU2azE6IHsgZGVyOiBBcnJheTxudW1iZXI+IH19LFxyXG4gICAgcHVibGljX2tleToge1xyXG4gICAgICAgIGJ5dGVzOiBBcnJheTxudW1iZXI+O1xyXG4gICAgICAgIGNvbXByZXNzZWQ6IG51bWJlcixcclxuICAgIH0sXHJcbn07XHJcblxyXG5leHBvcnQgdHlwZSBQdWJsaWNLZXlIYXNoU3RyaW5nID0gSGV4U3RyaW5nXHJcblxyXG5pbnRlcmZhY2UgS2V5IHtcclxuICAgIGJ5dGVzOiBVaW50OEFycmF5O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFByaXZhdGVLZXkgZXh0ZW5kcyBLZXkge1xyXG4gICAgdHlwZTogXCJwcml2YXRlXCI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUHVibGljS2V5IGV4dGVuZHMgS2V5IHtcclxuICAgIHR5cGU6IFwicHVibGljXCI7XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIFRyYW5zYWN0aW9uQ2FsbGJhY2sgPSAocmVjZWlwdDogVHJhbnNhY3Rpb25SZWNlaXB0LCBlcnJvcj86IGFueSkgPT4gYW55XHJcblxyXG5leHBvcnQgdHlwZSBUcmFuc2FjdGlvblBhcmFtcyA9IHtcclxuICAgIGRlYWRsaW5lPzogRXBvY2gsXHJcbiAgICBmZWVzPzogVHJhbnNhY3Rpb25Qcmlvcml0eSB8IENvaW5zLFxyXG59XHJcblxyXG5leHBvcnQgZW51bSBUcmFuc2FjdGlvblByaW9yaXR5IHtcclxuICAgIFN0aW5reSA9IFwic3Rpbmt5XCIsXHJcbiAgICBMb3cgPSBcImxvd1wiLFxyXG4gICAgTWVkaXVtID0gXCJtZWRpdW1cIixcclxuICAgIEhpZ2ggPSBcImhpZ2hcIixcclxuICAgIE9wdWxlbnQgPSBcIm9wdWxlbnRcIixcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgVHJhbnNhY3Rpb25SZWNlaXB0ID0ge1xyXG4gICAgYXV0aG9yaXphdGlvbj86IEhleFN0cmluZztcclxuICAgIGJsb2NrRXBvY2g/OiBFcG9jaCxcclxuICAgIGJsb2NrSGFzaD86IEhhc2gsXHJcbiAgICBibG9ja01pbmVyPzogUHVibGljS2V5SGFzaFN0cmluZyxcclxuICAgIGJsb2NrVGltZXN0YW1wPzogbnVtYmVyLFxyXG4gICAgY29uZmlybWF0aW9ucz86IG51bWJlcjtcclxuICAgIGNoYW5nZT86IENvaW5zO1xyXG4gICAgZHJvSGFzaD86IEhhc2g7XHJcbiAgICBlcnJvcj86IEVycm9yLFxyXG4gICAgZmVlczogQ29pbnM7XHJcbiAgICBmcm9tPzogQXJyYXk8UHVibGljS2V5SGFzaFN0cmluZz4gfCBQdWJsaWNLZXlIYXNoU3RyaW5nO1xyXG4gICAgaGFzaDogSGFzaDtcclxuICAgIG91dHB1dExvY2s/OiBudW1iZXI7XHJcbiAgICByYWRBcmdzPzogYW55O1xyXG4gICAgcmFkSGFzaD86IEhleFN0cmluZztcclxuICAgIHJlY2lwaWVudHM/OiBBcnJheTxbUHVibGljS2V5SGFzaFN0cmluZywgQ29pbnNdPjtcclxuICAgIHN0YXR1czogc3RyaW5nO1xyXG4gICAgdGltZXN0YW1wOiBudW1iZXI7XHJcbiAgICB0eXBlOiBzdHJpbmc7XHJcbiAgICB0eD86IGFueTtcclxuICAgIHZhbGlkYXRvcj86IFB1YmxpY0tleUhhc2hTdHJpbmc7XHJcbiAgICB2YWx1ZT86IENvaW5zO1xyXG4gICAgd2VpZ2h0OiBudW1iZXI7XHJcbiAgICB3aXRoZHJhd2VyPzogUHVibGljS2V5SGFzaFN0cmluZztcclxuICAgIHdpdG5lc3Nlcz86IG51bWJlciB8IFJlY29yZDxQdWJsaWNLZXlIYXNoU3RyaW5nLCBDb2lucz47XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIFRyYW5zYWN0aW9uU3RhdHVzID0gXCJzaWduZWRcIiB8IFwicGVuZGluZ1wiIHwgXCJyZWxheWVkXCIgfCBcInJlbW92ZWRcIiB8IFwibWluZWRcIiB8IFwiY29uZmlybWVkXCIgfCBcImZpbmFsaXplZFwiO1xyXG5cclxuZXhwb3J0IHR5cGUgVHJhbnNtaXNzaW9uID0ge1xyXG4gICAgYnl0ZWNvZGU/OiBVaW50OEFycmF5LFxyXG4gICAgaGFzaD86IEhhc2g7XHJcbiAgICBtZXNzYWdlOiBhbnk7XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIFV0eG8gPSBVdHhvTWV0YWRhdGEgJiB7IHNpZ25lcjogUHVibGljS2V5SGFzaFN0cmluZyB9XHJcblxyXG5leHBvcnQgdHlwZSBVdHhvQ2FjaGVJbmZvID0ge1xyXG4gICAgLy8gdG90YWwgYW1vdW50IG9mIGV4cGVuZGFibGUgZnVuZHMgd2l0aCBjdXJyZW50bHkgY2FjaGVkIFVUWE9zXHJcbiAgICBleHBlbmRhYmxlOiBiaWdpbnQsIFxyXG4gICAgLy8gbnVtYmVyIG9mIGNhY2hlZCBVVFhPc1xyXG4gICAgc2l6ZTogbnVtYmVyLCBcclxuICAgIC8vIGVhcmxpZXN0IG9mIGFsbCB0aW1lbG9ja3MgaW4gdGhlIGNhY2jDqVxyXG4gICAgdGltZWxvY2s6IG51bWJlcixcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgVXR4b1BvaW50ZXIgPSB7XHJcbiAgICAvLyB0cmFuc2FjdGlvbiBpZGVudGlmaWVyXHJcbiAgICB0cmFuc2FjdGlvbl9pZDogSGFzaDtcclxuICAgIC8vIG91dHB1dCBpbmRleCB3aXRoaW4gcmVmZXJyZWQgdHJhbnNhY3Rpb25cclxuICAgIG91dHB1dF9pbmRleDogbnVtYmVyO1xyXG59O1xyXG5cclxuZXhwb3J0IGVudW0gVXR4b1NlbGVjdGlvblN0cmF0ZWd5IHtcclxuICAgIEJpZ0ZpcnN0ID0gXCJiaWctZmlyc3RcIixcclxuICAgIFJhbmRvbSA9IFwicmFuZG9tXCIsXHJcbiAgICBTbGltRml0ID0gXCJzbGltLWZpdFwiLFxyXG4gICAgU21hbGxGaXJzdCA9IFwic21hbGwtZmlyc3RcIixcclxufVxyXG5cclxuXHJcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbi8vLyBFWFBPUlRFRCBDTEFTU0VTIFxyXG5cclxuLy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuZXhwb3J0IGNsYXNzIFB1YmxpY0tleSBpbXBsZW1lbnRzIEtleSB7XHJcbiAgICBcclxuICAgIHB1YmxpYyByZWFkb25seSBjb21wcmVzc2VkOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgYnl0ZXM6IFVpbnQ4QXJyYXk7XHJcblxyXG4gICAgc3RhdGljIGZyb21Qcm90b2J1Zihwcm90b2J1ZjogeyBjb21wcmVzc2VkOiBudW1iZXIsIGJ5dGVzOiBBcnJheTxudW1iZXI+IH0pOiBQdWJsaWNLZXkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHVibGljS2V5KHByb3RvYnVmLmNvbXByZXNzZWQsIFVpbnQ4QXJyYXkuZnJvbShwcm90b2J1Zi5ieXRlcykpXHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGZyb21VaW50OEFycmF5KHVpbnQ4QXJyYXk6IFVpbnQ4QXJyYXkpOiBQdWJsaWNLZXkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHVibGljS2V5KFxyXG4gICAgICAgICAgICB1aW50OEFycmF5WzBdLFxyXG4gICAgICAgICAgICB1aW50OEFycmF5LnNsaWNlKDEpLFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHJlY292ZXJGcm9tKHJlY292ZXJhYmxlOiBhbnksIG1zZzogVWludDhBcnJheSk6IFB1YmxpY0tleSB7XHJcbiAgICAgICAgbGV0IGJ5dGVzXHJcbiAgICAgICAgaWYgKGlzSGV4U3RyaW5nKHJlY292ZXJhYmxlKSkge1xyXG4gICAgICAgICAgICBieXRlcyA9IGZyb21IZXhTdHJpbmcocmVjb3ZlcmFibGUpXHJcbiAgICAgICAgfSBlbHNlIGlmIChyZWNvdmVyYWJsZSBpbnN0YW5jZW9mIEJ1ZmZlcikge1xyXG4gICAgICAgICAgICBieXRlcyA9IFVpbnQ4QXJyYXkuZnJvbShyZWNvdmVyYWJsZS5idWZmZXIpXHJcbiAgICAgICAgfSBlbHNlIGlmIChyZWNvdmVyYWJsZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHtcclxuICAgICAgICAgICAgYnl0ZXMgPSByZWNvdmVyYWJsZVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFB1YmxpY0tleTogdW5zdXBwb3J0ZWQgcmVjb3ZlcmFibGUgc2lnbmF0dXJlIGZvcm1hdDogJHtyZWNvdmVyYWJsZX1gKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoYnl0ZXMubGVuZ3RoICE9PSA2NSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBQdWJsaWNLZXk6IGV4cGVjdGVkIHJlY292ZXJhYmxlIHNpZ25hdHVyZSB3aXRoIGxlbmd0aCA2NTogJHt0b0hleFN0cmluZyhieXRlcyl9YClcclxuICAgICAgICB9IFxyXG4gICAgICAgIGNvbnN0IFsgcmVjb3ZlcnlJZCwgc2lnbmF0dXJlIF0gPSBbIGJ5dGVzWzBdLCBieXRlcy5zbGljZSgxKSBdXHJcbiAgICAgICAgcmV0dXJuIFB1YmxpY0tleS5mcm9tVWludDhBcnJheShzZWNwMjU2azEuZWNkc2FSZWNvdmVyKHNpZ25hdHVyZSwgcmVjb3ZlcnlJZCwgbXNnKSlcclxuICAgIH1cclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihjb21wcmVzc2VkOiBudW1iZXIsIGJ5dGVzOiBVaW50OEFycmF5KSB7XHJcbiAgICAgICAgdGhpcy5jb21wcmVzc2VkID0gY29tcHJlc3NlZFxyXG4gICAgICAgIHRoaXMuYnl0ZXMgPSBieXRlc1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBlcXVhbHMocHViS2V5OiBQdWJsaWNLZXkpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gcHViS2V5LmNvbXByZXNzZWQgPT09IHRoaXMuY29tcHJlc3NlZCAmJiBtYXRjaGluZ1VpbnQ4QXJyYXlzKHB1YktleS5ieXRlcywgcHViS2V5LmJ5dGVzKVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBoYXNoKCk6IFB1YmxpY0tleUhhc2gge1xyXG4gICAgICAgIHJldHVybiBQdWJsaWNLZXlIYXNoLmZyb21QdWJsaWNLZXkodGhpcylcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdG9TdHJpbmcoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdG9IZXhTdHJpbmcoW3RoaXMuY29tcHJlc3NlZCwgLi4udGhpcy5ieXRlc10pXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHRvVWludDhBcnJheSgpOiBVaW50OEFycmF5IHtcclxuICAgICAgICByZXR1cm4gVWludDhBcnJheS5mcm9tKFt0aGlzLmNvbXByZXNzZWQsIC4uLnRoaXMuYnl0ZXNdKVxyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbi8vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbmV4cG9ydCBjbGFzcyBQdWJsaWNLZXlIYXNoIHtcclxuXHJcbiAgICBzdGF0aWMgZnJvbUhhc2goaGFzaDogVWludDhBcnJheSk6IFB1YmxpY0tleUhhc2gge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHVibGljS2V5SGFzaChiZWNoMzIudG9Xb3JkcyhoYXNoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGZyb21IZXhTdHJpbmcoaGFzaDogSGV4U3RyaW5nKTogUHVibGljS2V5SGFzaCB7XHJcbiAgICAgICAgcmV0dXJuIFB1YmxpY0tleUhhc2guZnJvbUhhc2goZnJvbUhleFN0cmluZyhoYXNoKSlcclxuICAgIH1cclxuICAgIFxyXG4gICAgc3RhdGljIGZyb21QdWJsaWNLZXkocGs6IFB1YmxpY0tleSk6IFB1YmxpY0tleUhhc2gge1xyXG4gICAgICAgIHJldHVybiBQdWJsaWNLZXlIYXNoLmZyb21IYXNoKFxyXG4gICAgICAgICAgICBzaGEyNTYoXHJcbiAgICAgICAgICAgICAgICBCdWZmZXIuZnJvbShbcGsuY29tcHJlc3NlZCwgLi4ucGsuYnl0ZXNdKVxyXG4gICAgICAgICAgICApLnN1YmFycmF5KDAsIDIwKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHN0YXRpYyBmcm9tQmVjaDMyKHBraDogc3RyaW5nKTogUHVibGljS2V5SGFzaCB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcGtoID0gcGtoLnRvTG93ZXJDYXNlKClcclxuICAgICAgICAgICAgaWYgKHBraC5zdGFydHNXaXRoKCd3aXQnKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQdWJsaWNLZXlIYXNoKGJlY2gzMi5kZWNvZGUocGtoLCA2Nikud29yZHMpXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocGtoLnN0YXJ0c1dpdGgoJ3R3aXQnKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQdWJsaWNLZXlIYXNoKGJlY2gzMi5kZWNvZGUocGtoLCA2Nykud29yZHMpXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBQdWJsaWNLZXlIYXNoOiBpbnZhbGlkIGJlY2gzMiBzdHJpbmc6ICR7cGtofWApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFB1YmxpY0tleUhhc2g6IGludmFsaWQgYmVjaDMyIHN0cmluZzogJHtwa2h9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCB3b3JkczogbnVtYmVyW107XHJcbiAgICBcclxuICAgIGNvbnN0cnVjdG9yKHdvcmRzOiBudW1iZXJbXSkge1xyXG4gICAgICAgIHRoaXMud29yZHMgPSB3b3Jkc1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB0b0JlY2gzMihuZXR3b3JrID0gXCJtYWlubmV0XCIpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBuZXR3b3JrID09PSBcIm1haW5uZXRcIiA/IGJlY2gzMi5lbmNvZGUoJ3dpdCcsIHRoaXMud29yZHMsIDY2KSA6IGJlY2gzMi5lbmNvZGUoJ3R3aXQnLCB0aGlzLndvcmRzLCA2Nyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHRvQnl0ZXMyMCgpOiBVaW50OEFycmF5IHtcclxuICAgICAgICByZXR1cm4gVWludDhBcnJheS5mcm9tKGJlY2gzMi5mcm9tV29yZHModGhpcy53b3Jkcykuc2xpY2UoMCwgMjApKVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB0b0J5dGVzMzIoKTogVWludDhBcnJheSB7XHJcbiAgICAgICAgcmV0dXJuIFVpbnQ4QXJyYXkuZnJvbShbXHJcbiAgICAgICAgICAgIC4uLmJlY2gzMi5mcm9tV29yZHModGhpcy53b3Jkcykuc2xpY2UoMCwgMjApLFxyXG4gICAgICAgICAgICAuLi5uZXcgQXJyYXkoMTIpLmZpbGwoMCksXHJcbiAgICAgICAgXSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHRvSGV4U3RyaW5nKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRvSGV4U3RyaW5nKHRoaXMudG9CeXRlczIwKCkpXHJcbiAgICB9XHJcbn1cclxuXHJcblxyXG4vLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5leHBvcnQgY2xhc3MgU2lnbmF0dXJlIHtcclxuXHJcbiAgICBzdGF0aWMgZnJvbUhleFN0cmluZyhoZXg6IHN0cmluZyk6IFNpZ25hdHVyZSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBTaWduYXR1cmUoZnJvbUhleFN0cmluZyhoZXgpKVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZWFkb25seSBieXRlczogVWludDhBcnJheTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvciAoYnl0ZXM6IFVpbnQ4QXJyYXkpIHtcclxuICAgICAgICB0aGlzLmJ5dGVzID0gYnl0ZXNcclxuICAgIH1cclxuICAgIFxyXG4gICAgcHVibGljIHRvSGV4U3RyaW5nKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRvSGV4U3RyaW5nKHRoaXMuYnl0ZXMpXHJcbiAgICB9XHJcbn1cclxuXHJcblxyXG4vLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5leHBvcnQgY2xhc3MgUmVjb3ZlcmFibGVTaWduYXR1cmUgZXh0ZW5kcyBTaWduYXR1cmUge1xyXG5cclxuICAgIHN0YXRpYyBmcm9tKHJlY292ZXJhYmxlOiBhbnksIG1zZzogVWludDhBcnJheSk6IFJlY292ZXJhYmxlU2lnbmF0dXJlIHtcclxuICAgICAgICBsZXQgYnl0ZXNcclxuICAgICAgICBpZiAoaXNIZXhTdHJpbmcocmVjb3ZlcmFibGUpKSB7XHJcbiAgICAgICAgICAgIGJ5dGVzID0gZnJvbUhleFN0cmluZyhyZWNvdmVyYWJsZSkuc2xpY2UoMSlcclxuICAgICAgICB9IGVsc2UgaWYgKHJlY292ZXJhYmxlIGluc3RhbmNlb2YgQnVmZmVyKSB7XHJcbiAgICAgICAgICAgIGJ5dGVzID0gVWludDhBcnJheS5mcm9tKHJlY292ZXJhYmxlLmJ1ZmZlcikuc2xpY2UoMSlcclxuICAgICAgICB9IGVsc2UgaWYgKHJlY292ZXJhYmxlIGluc3RhbmNlb2YgVWludDhBcnJheSkge1xyXG4gICAgICAgICAgICBieXRlcyA9IHJlY292ZXJhYmxlLnNsaWNlKDEpXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgUmVjb3ZlcmFibGVTaWduYXR1cmU6IHVuc3VwcG9ydGVkIHJlY292ZXJhYmxlIHNpZ25hdHVyZSBmb3JtYXQ6ICR7cmVjb3ZlcmFibGV9YClcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGJ5dGVzLmxlbmd0aCAhPT0gNjQpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgUmVjb3ZlcmFibGVTaWduYXRyZTogZXhwZWN0ZWQgcmVjb3ZlcmFibGUgc2lnbmF0dXJlIHdpdGggbGVuZ3RoIDY1OiAke3RvSGV4U3RyaW5nKGJ5dGVzKX1gKVxyXG4gICAgICAgIH0gXHJcbiAgICAgICAgcmV0dXJuIG5ldyBSZWNvdmVyYWJsZVNpZ25hdHVyZShQdWJsaWNLZXkucmVjb3ZlckZyb20ocmVjb3ZlcmFibGUsIG1zZyksIGJ5dGVzLCBtc2cpXHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGZyb21LZXllZFNpZ25hdHVyZShrczogS2V5ZWRTaWduYXR1cmUsIG1zZzogVWludDhBcnJheSk6IFJlY292ZXJhYmxlU2lnbmF0dXJlIHtcclxuICAgICAgICByZXR1cm4gbmV3IFJlY292ZXJhYmxlU2lnbmF0dXJlKFxyXG4gICAgICAgICAgICBQdWJsaWNLZXkuZnJvbVByb3RvYnVmKGtzLnB1YmxpY19rZXkpLFxyXG4gICAgICAgICAgICBzZWNwMjU2azEuc2lnbmF0dXJlSW1wb3J0KFVpbnQ4QXJyYXkuZnJvbShrcy5zaWduYXR1cmUuU2VjcDI1NmsxLmRlcikpLFxyXG4gICAgICAgICAgICBtc2dcclxuICAgICAgICApICAgXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlYWRvbmx5IG1lc3NhZ2U6IFVpbnQ4QXJyYXlcclxuICAgIHB1YmxpYyByZWFkb25seSBwdWJLZXk6IFB1YmxpY0tleVxyXG4gICAgcHVibGljIHJlYWRvbmx5IHJlY292ZXJ5SWQ6IG51bWJlclxyXG4gICAgXHJcbiAgICBjb25zdHJ1Y3RvciAocHViS2V5OiBQdWJsaWNLZXksIGJ5dGVzOiBVaW50OEFycmF5LCBtc2c6IFVpbnQ4QXJyYXkpIHtcclxuICAgICAgICBzdXBlcihieXRlcylcclxuICAgICAgICBjb25zdCBwdWJLZXlSYXcgPSBwdWJLZXkudG9VaW50OEFycmF5KClcclxuICAgICAgICBsZXQgcmVjb3ZlcnlJZDogbnVtYmVyO1xyXG4gICAgICAgIGZvciAocmVjb3ZlcnlJZCA9IDA7IHJlY292ZXJ5SWQgPCA0OyByZWNvdmVyeUlkICsrKSB7XHJcbiAgICAgICAgICAgIGxldCByZWNvdmVyZWQgXHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgcmVjb3ZlcmVkID0gc2VjcDI1NmsxLmVjZHNhUmVjb3ZlcihieXRlcywgcmVjb3ZlcnlJZCwgbXNnKVxyXG4gICAgICAgICAgICAgIGlmIChtYXRjaGluZ1VpbnQ4QXJyYXlzKHJlY292ZXJlZCwgcHViS2V5UmF3KSkgYnJlYWs7XHJcbiAgICAgICAgICAgIH0gY2F0Y2gge31cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gbXNnXHJcbiAgICAgICAgdGhpcy5wdWJLZXkgPSBwdWJLZXlcclxuICAgICAgICB0aGlzLnJlY292ZXJ5SWQgPSByZWNvdmVyeUlkXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHRvSGV4U3RyaW5nKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRvSGV4U3RyaW5nKFt0aGlzLnJlY292ZXJ5SWQsIC4uLnRoaXMuYnl0ZXNdKVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB0b0tleWVkU2lnbmF0dXJlKCk6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgc2lnbmF0dXJlOiB7IFNlY3AyNTZrMTogeyBkZXI6IEFycmF5LmZyb20oc2VjcDI1NmsxLnNpZ25hdHVyZUV4cG9ydCh0aGlzLmJ5dGVzKSkgfX0sXHJcbiAgICAgICAgICAgIHB1YmxpY19rZXk6IHtcclxuICAgICAgICAgICAgICAgIGJ5dGVzOiBBcnJheS5mcm9tKHRoaXMucHViS2V5LmJ5dGVzKSxcclxuICAgICAgICAgICAgICAgIGNvbXByZXNzZWQ6IHRoaXMucHViS2V5LmNvbXByZXNzZWQsXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHRvUHJvdG9idWYoKTogYW55IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBzaWduYXR1cmU6IHsgU2VjcDI1NmsxOiB7IGRlcjogQXJyYXkuZnJvbShzZWNwMjU2azEuc2lnbmF0dXJlRXhwb3J0KHRoaXMuYnl0ZXMpKSB9fSxcclxuICAgICAgICAgICAgcHVibGljS2V5OiB7IHB1YmxpY0tleTogQXJyYXkuZnJvbShbIHRoaXMucHViS2V5LmNvbXByZXNzZWQsIC4uLnRoaXMucHViS2V5LmJ5dGVzIF0pIH0sXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5cclxuLy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuXHJcbmFic3RyYWN0IGNsYXNzIFRyYW5zYWN0aW9uRXJyb3IgZXh0ZW5kcyBFcnJvciB7XHJcbiAgICByZWFkb25seSByZWNlaXB0OiBUcmFuc2FjdGlvblJlY2VpcHRcclxuICAgIGNvbnN0cnVjdG9yKHJlY2VpcHQ6IFRyYW5zYWN0aW9uUmVjZWlwdCwgbWVzc2FnZT86IHN0cmluZykge1xyXG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpXHJcbiAgICAgICAgdGhpcy5yZWNlaXB0ID0gcmVjZWlwdFxyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBjbGFzcyBNZW1wb29sRXJyb3IgZXh0ZW5kcyBUcmFuc2FjdGlvbkVycm9yIHtcclxuICAgIGNvbnN0cnVjdG9yKHJlY2VpcHQ6IFRyYW5zYWN0aW9uUmVjZWlwdCwgbWVzc2FnZT86IHN0cmluZykge1xyXG4gICAgICAgIHN1cGVyKHJlY2VpcHQsIG1lc3NhZ2UpXHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBUaW1lb3V0RXJyb3IgZXh0ZW5kcyBUcmFuc2FjdGlvbkVycm9yIHtcclxuICAgIHJlYWRvbmx5IG1zZWNzOiBudW1iZXI7XHJcbiAgICBjb25zdHJ1Y3RvciAobXNlY3M6IG51bWJlciwgcmVjZWlwdDogVHJhbnNhY3Rpb25SZWNlaXB0LCBtZXNzYWdlPzogc3RyaW5nKSB7XHJcbiAgICAgICAgc3VwZXIocmVjZWlwdCwgbWVzc2FnZSlcclxuICAgICAgICB0aGlzLm1zZWNzID0gbXNlY3NcclxuICAgIH1cclxufVxyXG4gICAgXHJcblxyXG5leHBvcnQgY2xhc3MgVHJhbnNtaXNzaW9uRXJyb3IgZXh0ZW5kcyBFcnJvciB7XHJcbiAgICByZWFkb25seSBlcnJvcj86IGFueTtcclxuICAgIHJlYWRvbmx5IGluRmxpZ2h0OiBUcmFuc21pc3Npb247XHJcbiAgICBjb25zdHJ1Y3RvcihpbkZsaWdodDogVHJhbnNtaXNzaW9uLCBlcnJvcj86IGFueSkge1xyXG4gICAgICAgIHN1cGVyKEpTT04uc3RyaW5naWZ5KGVycm9yKSlcclxuICAgICAgICBkZWxldGUgZXJyb3I/LnN0YWNrXHJcbiAgICAgICAgdGhpcy5lcnJvciA9IGVycm9yXHJcbiAgICAgICAgdGhpcy5pbkZsaWdodCA9IGluRmxpZ2h0XHJcbiAgICB9XHJcbn1cclxuXHJcblxyXG4vLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4vLy8gLS0tIEludGVybmFsIGZ1bmN0aW9ucyBcclxuXHJcbmZ1bmN0aW9uIG1hdGNoaW5nVWludDhBcnJheXMoYTogVWludDhBcnJheSwgYjogVWludDhBcnJheSkge1xyXG4gICAgcmV0dXJuIGEubGVuZ3RoID09PSBiLmxlbmd0aCAmJiBhLmV2ZXJ5KCh2YWx1ZSwgaW5kZXgpID0+IHZhbHVlID09PSBiW2luZGV4XSlcclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Balance } from '../types';
|
|
2
|
+
import { Coins, Utxo, UtxoSelectionStrategy } from './types';
|
|
3
|
+
export { bech32 } from 'bech32';
|
|
4
|
+
export { PrivateKey, PublicKey, PublicKeyHash, KeyedSignature, RecoverableSignature, Signature } from "./types";
|
|
5
|
+
export declare const BigMath: {
|
|
6
|
+
max(value: bigint, ...values: bigint[]): bigint;
|
|
7
|
+
};
|
|
8
|
+
export declare function decipherXprv(slip32: string, passwd: string): string;
|
|
9
|
+
export declare const parseXprv: (slip32: string) => {
|
|
10
|
+
chainCode: Uint8Array;
|
|
11
|
+
keyPath: Array<number>;
|
|
12
|
+
privateKey: Uint8Array;
|
|
13
|
+
};
|
|
14
|
+
export declare function selectUtxos(specs: {
|
|
15
|
+
utxos: Array<Utxo>;
|
|
16
|
+
value?: Coins;
|
|
17
|
+
strategy?: UtxoSelectionStrategy;
|
|
18
|
+
}): Array<Utxo>;
|
|
19
|
+
export declare function sha256(buffer: any): Buffer<ArrayBufferLike>;
|
|
20
|
+
export declare function totalCoins(balance: Balance): Coins;
|
|
21
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/lib/crypto/utils.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAClC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAE5D,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE/B,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,cAAc,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAE/G,eAAO,MAAM,OAAO;eACL,MAAM,aAAa,MAAM,EAAE,GAAG,MAAM;CAKlD,CAAA;AAqBD,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAcnE;AAED,eAAO,MAAM,SAAS,WAAY,MAAM,KAAG;IACvC,SAAS,EAAE,UAAU,CAAC;IACtB,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACvB,UAAU,EAAE,UAAU,CAAC;CAyD1B,CAAC;AAEF,wBAAgB,WAAW,CAAC,KAAK,EAAE;IAC/B,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,QAAQ,CAAC,EAAE,qBAAqB,CAAC;CACpC,GAAG,KAAK,CAAC,IAAI,CAAC,CA6Cd;AAED,wBAAgB,MAAM,CAAC,MAAM,EAAE,GAAG,2BAIjC;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,KAAK,CAMlD"}
|