@bitgo/abstract-utxo 12.4.3 → 12.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/src/abstractUtxoCoin.d.ts +3 -0
- package/dist/cjs/src/abstractUtxoCoin.d.ts.map +1 -1
- package/dist/cjs/src/abstractUtxoCoin.js +13 -6
- package/dist/cjs/src/impl/bch/bch.js +2 -2
- package/dist/cjs/src/impl/zec/address.d.ts +28 -0
- package/dist/cjs/src/impl/zec/address.d.ts.map +1 -0
- package/dist/cjs/src/impl/zec/address.js +55 -0
- package/dist/cjs/src/impl/zec/index.d.ts +3 -0
- package/dist/cjs/src/impl/zec/index.d.ts.map +1 -1
- package/dist/cjs/src/impl/zec/index.js +4 -1
- package/dist/cjs/src/impl/zec/recipients.d.ts +84 -0
- package/dist/cjs/src/impl/zec/recipients.d.ts.map +1 -0
- package/dist/cjs/src/impl/zec/recipients.js +94 -0
- package/dist/cjs/src/impl/zec/types.d.ts +5 -0
- package/dist/cjs/src/impl/zec/types.d.ts.map +1 -0
- package/dist/cjs/src/impl/zec/types.js +3 -0
- package/dist/cjs/src/impl/zec/zec.d.ts +12 -1
- package/dist/cjs/src/impl/zec/zec.d.ts.map +1 -1
- package/dist/cjs/src/impl/zec/zec.js +14 -1
- package/dist/cjs/src/recovery/backupKeyRecovery.d.ts +4 -0
- package/dist/cjs/src/recovery/backupKeyRecovery.d.ts.map +1 -1
- package/dist/cjs/src/recovery/backupKeyRecovery.js +3 -1
- package/dist/cjs/src/transaction/descriptor/parse.d.ts +3 -3
- package/dist/cjs/src/transaction/descriptor/parse.d.ts.map +1 -1
- package/dist/cjs/src/transaction/descriptor/parse.js +17 -17
- package/dist/cjs/src/transaction/descriptor/parseToAmountType.d.ts +2 -1
- package/dist/cjs/src/transaction/descriptor/parseToAmountType.d.ts.map +1 -1
- package/dist/cjs/src/transaction/descriptor/parseToAmountType.js +4 -3
- package/dist/cjs/src/transaction/descriptor/verifyTransaction.d.ts +3 -3
- package/dist/cjs/src/transaction/descriptor/verifyTransaction.d.ts.map +1 -1
- package/dist/cjs/src/transaction/descriptor/verifyTransaction.js +7 -6
- package/dist/cjs/src/transaction/fixedScript/parseOutput.d.ts +3 -1
- package/dist/cjs/src/transaction/fixedScript/parseOutput.d.ts.map +1 -1
- package/dist/cjs/src/transaction/fixedScript/parseOutput.js +5 -4
- package/dist/cjs/src/transaction/fixedScript/parseTransaction.d.ts +2 -1
- package/dist/cjs/src/transaction/fixedScript/parseTransaction.d.ts.map +1 -1
- package/dist/cjs/src/transaction/fixedScript/parseTransaction.js +15 -14
- package/dist/cjs/src/transaction/parseTransaction.d.ts +2 -1
- package/dist/cjs/src/transaction/parseTransaction.d.ts.map +1 -1
- package/dist/cjs/src/transaction/parseTransaction.js +5 -4
- package/dist/cjs/src/transaction/recipient.d.ts +31 -15
- package/dist/cjs/src/transaction/recipient.d.ts.map +1 -1
- package/dist/cjs/src/transaction/recipient.js +69 -47
- package/dist/cjs/src/transaction/verifyTransaction.d.ts +2 -1
- package/dist/cjs/src/transaction/verifyTransaction.d.ts.map +1 -1
- package/dist/cjs/src/transaction/verifyTransaction.js +4 -3
- package/dist/cjs/test/unit/impl/zec/unit/address.d.ts +2 -0
- package/dist/cjs/test/unit/impl/zec/unit/address.d.ts.map +1 -0
- package/dist/cjs/test/unit/impl/zec/unit/address.js +66 -0
- package/dist/cjs/test/unit/impl/zec/unit/resolvePsbtRecipients.d.ts +2 -0
- package/dist/cjs/test/unit/impl/zec/unit/resolvePsbtRecipients.d.ts.map +1 -0
- package/dist/cjs/test/unit/impl/zec/unit/resolvePsbtRecipients.js +89 -0
- package/dist/cjs/test/unit/impl/zec/unit/unifiedRecipientPreference.d.ts +2 -0
- package/dist/cjs/test/unit/impl/zec/unit/unifiedRecipientPreference.d.ts.map +1 -0
- package/dist/cjs/test/unit/impl/zec/unit/unifiedRecipientPreference.js +57 -0
- package/dist/cjs/test/unit/recovery/backupKeyRecovery.js +14 -1
- package/dist/cjs/test/unit/transaction/descriptor/parse.js +4 -2
- package/dist/cjs/test/unit/transaction/descriptor/verifyTransactionQr.js +6 -5
- package/dist/cjs/tsconfig.tsbuildinfo +1 -1
- package/dist/esm/abstractUtxoCoin.d.ts +3 -0
- package/dist/esm/abstractUtxoCoin.d.ts.map +1 -1
- package/dist/esm/abstractUtxoCoin.js +14 -7
- package/dist/esm/impl/bch/bch.js +3 -3
- package/dist/esm/impl/zec/address.d.ts +28 -0
- package/dist/esm/impl/zec/address.d.ts.map +1 -0
- package/dist/esm/impl/zec/address.js +50 -0
- package/dist/esm/impl/zec/index.d.ts +3 -0
- package/dist/esm/impl/zec/index.d.ts.map +1 -1
- package/dist/esm/impl/zec/index.js +4 -1
- package/dist/esm/impl/zec/recipients.d.ts +84 -0
- package/dist/esm/impl/zec/recipients.d.ts.map +1 -0
- package/dist/esm/impl/zec/recipients.js +90 -0
- package/dist/esm/impl/zec/types.d.ts +5 -0
- package/dist/esm/impl/zec/types.d.ts.map +1 -0
- package/dist/esm/impl/zec/types.js +2 -0
- package/dist/esm/impl/zec/zec.d.ts +12 -1
- package/dist/esm/impl/zec/zec.d.ts.map +1 -1
- package/dist/esm/impl/zec/zec.js +14 -1
- package/dist/esm/recovery/backupKeyRecovery.d.ts +4 -0
- package/dist/esm/recovery/backupKeyRecovery.d.ts.map +1 -1
- package/dist/esm/recovery/backupKeyRecovery.js +3 -1
- package/dist/esm/transaction/descriptor/parse.d.ts +3 -3
- package/dist/esm/transaction/descriptor/parse.d.ts.map +1 -1
- package/dist/esm/transaction/descriptor/parse.js +18 -18
- package/dist/esm/transaction/descriptor/parseToAmountType.d.ts +2 -1
- package/dist/esm/transaction/descriptor/parseToAmountType.d.ts.map +1 -1
- package/dist/esm/transaction/descriptor/parseToAmountType.js +4 -3
- package/dist/esm/transaction/descriptor/verifyTransaction.d.ts +3 -3
- package/dist/esm/transaction/descriptor/verifyTransaction.d.ts.map +1 -1
- package/dist/esm/transaction/descriptor/verifyTransaction.js +7 -6
- package/dist/esm/transaction/fixedScript/parseOutput.d.ts +3 -1
- package/dist/esm/transaction/fixedScript/parseOutput.d.ts.map +1 -1
- package/dist/esm/transaction/fixedScript/parseOutput.js +5 -4
- package/dist/esm/transaction/fixedScript/parseTransaction.d.ts +2 -1
- package/dist/esm/transaction/fixedScript/parseTransaction.d.ts.map +1 -1
- package/dist/esm/transaction/fixedScript/parseTransaction.js +16 -15
- package/dist/esm/transaction/parseTransaction.d.ts +2 -1
- package/dist/esm/transaction/parseTransaction.d.ts.map +1 -1
- package/dist/esm/transaction/parseTransaction.js +5 -4
- package/dist/esm/transaction/recipient.d.ts +31 -15
- package/dist/esm/transaction/recipient.d.ts.map +1 -1
- package/dist/esm/transaction/recipient.js +68 -48
- package/dist/esm/transaction/verifyTransaction.d.ts +2 -1
- package/dist/esm/transaction/verifyTransaction.d.ts.map +1 -1
- package/dist/esm/transaction/verifyTransaction.js +4 -3
- package/package.json +9 -9
|
@@ -1,32 +1,48 @@
|
|
|
1
1
|
import { UtxoCoinName } from '../names';
|
|
2
|
-
/**
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
2
|
+
/** Address/network-aware recipient conversion with overridable address decoding. */
|
|
3
|
+
export declare class AddressCodec {
|
|
4
|
+
readonly coinName: UtxoCoinName;
|
|
5
|
+
constructor(coinName: UtxoCoinName);
|
|
6
|
+
/** Check if the address is a script recipient (starts with `scriptPubKey:`). */
|
|
7
|
+
static isScriptRecipient(address: string): boolean;
|
|
8
|
+
/** Convert an extended address to either a regular address or a raw script. */
|
|
9
|
+
static fromExtendedAddressFormat(extendedAddress: string): {
|
|
10
|
+
address: string;
|
|
11
|
+
} | {
|
|
12
|
+
script: string;
|
|
13
|
+
};
|
|
14
|
+
static assertValidTransactionRecipient(output: {
|
|
15
|
+
amount: bigint | number | string;
|
|
16
|
+
address?: string;
|
|
17
|
+
}): void;
|
|
18
|
+
decode(address: string): Uint8Array;
|
|
19
|
+
fromExtendedAddressFormatToScript(extendedAddress: string): Buffer;
|
|
20
|
+
toOutputScript(v: string | {
|
|
21
|
+
address: string;
|
|
22
|
+
} | {
|
|
23
|
+
script: string;
|
|
24
|
+
}): Buffer;
|
|
25
|
+
toExtendedAddressFormat(script: Buffer): string;
|
|
26
|
+
}
|
|
27
|
+
/** Legacy helper retained for consumers that use the module-level recipient API. */
|
|
6
28
|
export declare function isScriptRecipient(address: string): boolean;
|
|
7
|
-
/**
|
|
8
|
-
* An extended address is one that encodes either a regular address or a hex encoded script with the prefix `scriptPubKey:`.
|
|
9
|
-
* This function converts the extended address format to either a script or an address.
|
|
10
|
-
* @param extendedAddress
|
|
11
|
-
*/
|
|
29
|
+
/** Legacy helper retained for consumers that use the module-level recipient API. */
|
|
12
30
|
export declare function fromExtendedAddressFormat(extendedAddress: string): {
|
|
13
31
|
address: string;
|
|
14
32
|
} | {
|
|
15
33
|
script: string;
|
|
16
34
|
};
|
|
35
|
+
/** Legacy helper retained for consumers that use the module-level recipient API. */
|
|
17
36
|
export declare function fromExtendedAddressFormatToScript(extendedAddress: string, coinName: UtxoCoinName): Buffer;
|
|
37
|
+
/** Legacy helper retained for consumers that use the module-level recipient API. */
|
|
18
38
|
export declare function toOutputScript(v: string | {
|
|
19
39
|
address: string;
|
|
20
40
|
} | {
|
|
21
41
|
script: string;
|
|
22
42
|
}, coinName: UtxoCoinName): Buffer;
|
|
23
|
-
/**
|
|
24
|
-
* Convert a script or address to the extended address format.
|
|
25
|
-
* @param script
|
|
26
|
-
* @param coinName
|
|
27
|
-
* @returns if the script is an OP_RETURN script, then it will be prefixed with `scriptPubKey:`, otherwise it will be converted to an address.
|
|
28
|
-
*/
|
|
43
|
+
/** Legacy helper retained for consumers that use the module-level recipient API. */
|
|
29
44
|
export declare function toExtendedAddressFormat(script: Buffer, coinName: UtxoCoinName): string;
|
|
45
|
+
/** Legacy helper retained for consumers that use the module-level recipient API. */
|
|
30
46
|
export declare function assertValidTransactionRecipient(output: {
|
|
31
47
|
amount: bigint | number | string;
|
|
32
48
|
address?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recipient.d.ts","sourceRoot":"","sources":["../../../../src/transaction/recipient.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"recipient.d.ts","sourceRoot":"","sources":["../../../../src/transaction/recipient.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAKxC,oFAAoF;AACpF,qBAAa,YAAY;aACK,QAAQ,EAAE,YAAY;gBAAtB,QAAQ,EAAE,YAAY;IAElD,gFAAgF;IAChF,MAAM,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIlD,+EAA+E;IAC/E,MAAM,CAAC,yBAAyB,CAAC,eAAe,EAAE,MAAM,GAAG;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE;IAOnG,MAAM,CAAC,+BAA+B,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAY5G,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU;IAInC,iCAAiC,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM;IAQlE,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM;IAa5E,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;CAKhD;AAED,oFAAoF;AACpF,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED,oFAAoF;AACpF,wBAAgB,yBAAyB,CAAC,eAAe,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAE3G;AAED,oFAAoF;AACpF,wBAAgB,iCAAiC,CAAC,eAAe,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,MAAM,CAEzG;AAED,oFAAoF;AACpF,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,EAAE,QAAQ,EAAE,YAAY,GAAG,MAAM,CAEnH;AAED,oFAAoF;AACpF,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,MAAM,CAEtF;AAED,oFAAoF;AACpF,wBAAgB,+BAA+B,CAAC,MAAM,EAAE;IAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAEpH"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AddressCodec = void 0;
|
|
3
4
|
exports.isScriptRecipient = isScriptRecipient;
|
|
4
5
|
exports.fromExtendedAddressFormat = fromExtendedAddressFormat;
|
|
5
6
|
exports.fromExtendedAddressFormatToScript = fromExtendedAddressFormatToScript;
|
|
@@ -8,62 +9,83 @@ exports.toExtendedAddressFormat = toExtendedAddressFormat;
|
|
|
8
9
|
exports.assertValidTransactionRecipient = assertValidTransactionRecipient;
|
|
9
10
|
const wasm_utxo_1 = require("@bitgo/wasm-utxo");
|
|
10
11
|
const ScriptRecipientPrefix = 'scriptPubKey:';
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
const OP_RETURN = 0x6a;
|
|
13
|
+
/** Address/network-aware recipient conversion with overridable address decoding. */
|
|
14
|
+
class AddressCodec {
|
|
15
|
+
constructor(coinName) {
|
|
16
|
+
this.coinName = coinName;
|
|
17
|
+
}
|
|
18
|
+
/** Check if the address is a script recipient (starts with `scriptPubKey:`). */
|
|
19
|
+
static isScriptRecipient(address) {
|
|
20
|
+
return address.toLowerCase().startsWith(ScriptRecipientPrefix.toLowerCase());
|
|
21
|
+
}
|
|
22
|
+
/** Convert an extended address to either a regular address or a raw script. */
|
|
23
|
+
static fromExtendedAddressFormat(extendedAddress) {
|
|
24
|
+
if (AddressCodec.isScriptRecipient(extendedAddress)) {
|
|
25
|
+
return { script: extendedAddress.slice(ScriptRecipientPrefix.length) };
|
|
26
|
+
}
|
|
27
|
+
return { address: extendedAddress };
|
|
28
|
+
}
|
|
29
|
+
static assertValidTransactionRecipient(output) {
|
|
30
|
+
// In the case that this is an OP_RETURN output or another non-encodable scriptPubkey, we dont have an address.
|
|
31
|
+
// We will verify that the amount is zero, and if it isnt then we will throw an error.
|
|
32
|
+
if (!output.address || AddressCodec.isScriptRecipient(output.address)) {
|
|
33
|
+
if (output.amount.toString() !== '0') {
|
|
34
|
+
throw new Error(`Only zero amounts allowed for non-encodeable scriptPubkeys: amount: ${output.amount}, address: ${output.address}`);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
decode(address) {
|
|
39
|
+
return wasm_utxo_1.address.toOutputScriptWithCoin(address, this.coinName);
|
|
40
|
+
}
|
|
41
|
+
fromExtendedAddressFormatToScript(extendedAddress) {
|
|
42
|
+
const result = AddressCodec.fromExtendedAddressFormat(extendedAddress);
|
|
43
|
+
if ('script' in result) {
|
|
44
|
+
return Buffer.from(result.script, 'hex');
|
|
45
|
+
}
|
|
46
|
+
return Buffer.from(this.decode(result.address));
|
|
47
|
+
}
|
|
48
|
+
toOutputScript(v) {
|
|
49
|
+
if (typeof v === 'string') {
|
|
50
|
+
return this.fromExtendedAddressFormatToScript(v);
|
|
51
|
+
}
|
|
52
|
+
if ('script' in v) {
|
|
53
|
+
return Buffer.from(v.script, 'hex');
|
|
54
|
+
}
|
|
55
|
+
if ('address' in v) {
|
|
56
|
+
return this.fromExtendedAddressFormatToScript(v.address);
|
|
57
|
+
}
|
|
58
|
+
throw new Error('invalid input');
|
|
59
|
+
}
|
|
60
|
+
toExtendedAddressFormat(script) {
|
|
61
|
+
return script[0] === OP_RETURN
|
|
62
|
+
? `${ScriptRecipientPrefix}${script.toString('hex')}`
|
|
63
|
+
: wasm_utxo_1.address.fromOutputScriptWithCoin(script, this.coinName);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
exports.AddressCodec = AddressCodec;
|
|
67
|
+
/** Legacy helper retained for consumers that use the module-level recipient API. */
|
|
15
68
|
function isScriptRecipient(address) {
|
|
16
|
-
return
|
|
69
|
+
return AddressCodec.isScriptRecipient(address);
|
|
17
70
|
}
|
|
18
|
-
/**
|
|
19
|
-
* An extended address is one that encodes either a regular address or a hex encoded script with the prefix `scriptPubKey:`.
|
|
20
|
-
* This function converts the extended address format to either a script or an address.
|
|
21
|
-
* @param extendedAddress
|
|
22
|
-
*/
|
|
71
|
+
/** Legacy helper retained for consumers that use the module-level recipient API. */
|
|
23
72
|
function fromExtendedAddressFormat(extendedAddress) {
|
|
24
|
-
|
|
25
|
-
return { script: extendedAddress.slice(ScriptRecipientPrefix.length) };
|
|
26
|
-
}
|
|
27
|
-
return { address: extendedAddress };
|
|
73
|
+
return AddressCodec.fromExtendedAddressFormat(extendedAddress);
|
|
28
74
|
}
|
|
75
|
+
/** Legacy helper retained for consumers that use the module-level recipient API. */
|
|
29
76
|
function fromExtendedAddressFormatToScript(extendedAddress, coinName) {
|
|
30
|
-
|
|
31
|
-
if ('script' in result) {
|
|
32
|
-
return Buffer.from(result.script, 'hex');
|
|
33
|
-
}
|
|
34
|
-
return Buffer.from(wasm_utxo_1.address.toOutputScriptWithCoin(result.address, coinName));
|
|
77
|
+
return new AddressCodec(coinName).fromExtendedAddressFormatToScript(extendedAddress);
|
|
35
78
|
}
|
|
79
|
+
/** Legacy helper retained for consumers that use the module-level recipient API. */
|
|
36
80
|
function toOutputScript(v, coinName) {
|
|
37
|
-
|
|
38
|
-
return fromExtendedAddressFormatToScript(v, coinName);
|
|
39
|
-
}
|
|
40
|
-
if ('script' in v) {
|
|
41
|
-
return Buffer.from(v.script, 'hex');
|
|
42
|
-
}
|
|
43
|
-
if ('address' in v) {
|
|
44
|
-
return fromExtendedAddressFormatToScript(v.address, coinName);
|
|
45
|
-
}
|
|
46
|
-
throw new Error('invalid input');
|
|
81
|
+
return new AddressCodec(coinName).toOutputScript(v);
|
|
47
82
|
}
|
|
48
|
-
|
|
49
|
-
/**
|
|
50
|
-
* Convert a script or address to the extended address format.
|
|
51
|
-
* @param script
|
|
52
|
-
* @param coinName
|
|
53
|
-
* @returns if the script is an OP_RETURN script, then it will be prefixed with `scriptPubKey:`, otherwise it will be converted to an address.
|
|
54
|
-
*/
|
|
83
|
+
/** Legacy helper retained for consumers that use the module-level recipient API. */
|
|
55
84
|
function toExtendedAddressFormat(script, coinName) {
|
|
56
|
-
return script
|
|
57
|
-
? `${ScriptRecipientPrefix}${script.toString('hex')}`
|
|
58
|
-
: wasm_utxo_1.address.fromOutputScriptWithCoin(script, coinName);
|
|
85
|
+
return new AddressCodec(coinName).toExtendedAddressFormat(script);
|
|
59
86
|
}
|
|
87
|
+
/** Legacy helper retained for consumers that use the module-level recipient API. */
|
|
60
88
|
function assertValidTransactionRecipient(output) {
|
|
61
|
-
|
|
62
|
-
// We will verify that the amount is zero, and if it isnt then we will throw an error.
|
|
63
|
-
if (!output.address || isScriptRecipient(output.address)) {
|
|
64
|
-
if (output.amount.toString() !== '0') {
|
|
65
|
-
throw new Error(`Only zero amounts allowed for non-encodeable scriptPubkeys: amount: ${output.amount}, address: ${output.address}`);
|
|
66
|
-
}
|
|
67
|
-
}
|
|
89
|
+
AddressCodec.assertValidTransactionRecipient(output);
|
|
68
90
|
}
|
|
69
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
91
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjaXBpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3RyYW5zYWN0aW9uL3JlY2lwaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFxRUEsOENBRUM7QUFHRCw4REFFQztBQUdELDhFQUVDO0FBR0Qsd0NBRUM7QUFHRCwwREFFQztBQUdELDBFQUVDO0FBaEdELGdEQUEwRDtBQUkxRCxNQUFNLHFCQUFxQixHQUFHLGVBQWUsQ0FBQztBQUM5QyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFFdkIsb0ZBQW9GO0FBQ3BGLE1BQWEsWUFBWTtJQUN2QixZQUE0QixRQUFzQjtRQUF0QixhQUFRLEdBQVIsUUFBUSxDQUFjO0lBQUcsQ0FBQztJQUV0RCxnRkFBZ0Y7SUFDaEYsTUFBTSxDQUFDLGlCQUFpQixDQUFDLE9BQWU7UUFDdEMsT0FBTyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUMsVUFBVSxDQUFDLHFCQUFxQixDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUVELCtFQUErRTtJQUMvRSxNQUFNLENBQUMseUJBQXlCLENBQUMsZUFBdUI7UUFDdEQsSUFBSSxZQUFZLENBQUMsaUJBQWlCLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQztZQUNwRCxPQUFPLEVBQUUsTUFBTSxFQUFFLGVBQWUsQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUN6RSxDQUFDO1FBQ0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRUQsTUFBTSxDQUFDLCtCQUErQixDQUFDLE1BQThEO1FBQ25HLCtHQUErRztRQUMvRyxzRkFBc0Y7UUFDdEYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLElBQUksWUFBWSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ3RFLElBQUksTUFBTSxDQUFD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NUcsWUFBWSxDQUFDLCtCQUErQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3ZELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhZGRyZXNzIGFzIHdhc21BZGRyZXNzIH0gZnJvbSAnQGJpdGdvL3dhc20tdXR4byc7XG5cbmltcG9ydCB7IFV0eG9Db2luTmFtZSB9IGZyb20gJy4uL25hbWVzJztcblxuY29uc3QgU2NyaXB0UmVjaXBpZW50UHJlZml4ID0gJ3NjcmlwdFB1YktleTonO1xuY29uc3QgT1BfUkVUVVJOID0gMHg2YTtcblxuLyoqIEFkZHJlc3MvbmV0d29yay1hd2FyZSByZWNpcGllbnQgY29udmVyc2lvbiB3aXRoIG92ZXJyaWRhYmxlIGFkZHJlc3MgZGVjb2RpbmcuICovXG5leHBvcnQgY2xhc3MgQWRkcmVzc0NvZGVjIHtcbiAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IGNvaW5OYW1lOiBVdHhvQ29pbk5hbWUpIHt9XG5cbiAgLyoqIENoZWNrIGlmIHRoZSBhZGRyZXNzIGlzIGEgc2NyaXB0IHJlY2lwaWVudCAoc3RhcnRzIHdpdGggYHNjcmlwdFB1YktleTpgKS4gKi9cbiAgc3RhdGljIGlzU2NyaXB0UmVjaXBpZW50KGFkZHJlc3M6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBhZGRyZXNzLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChTY3JpcHRSZWNpcGllbnRQcmVmaXgudG9Mb3dlckNhc2UoKSk7XG4gIH1cblxuICAvKiogQ29udmVydCBhbiBleHRlbmRlZCBhZGRyZXNzIHRvIGVpdGhlciBhIHJlZ3VsYXIgYWRkcmVzcyBvciBhIHJhdyBzY3JpcHQuICovXG4gIHN0YXRpYyBmcm9tRXh0ZW5kZWRBZGRyZXNzRm9ybWF0KGV4dGVuZGVkQWRkcmVzczogc3RyaW5nKTogeyBhZGRyZXNzOiBzdHJpbmcgfSB8IHsgc2NyaXB0OiBzdHJpbmcgfSB7XG4gICAgaWYgKEFkZHJlc3NDb2RlYy5pc1NjcmlwdFJlY2lwaWVudChleHRlbmRlZEFkZHJlc3MpKSB7XG4gICAgICByZXR1cm4geyBzY3JpcHQ6IGV4dGVuZGVkQWRkcmVzcy5zbGljZShTY3JpcHRSZWNpcGllbnRQcmVmaXgubGVuZ3RoKSB9O1xuICAgIH1cbiAgICByZXR1cm4geyBhZGRyZXNzOiBleHRlbmRlZEFkZHJlc3MgfTtcbiAgfVxuXG4gIHN0YXRpYyBhc3NlcnRWYWxpZFRyYW5zYWN0aW9uUmVjaXBpZW50KG91dHB1dDogeyBhbW91bnQ6IGJpZ2ludCB8IG51bWJlciB8IHN0cmluZzsgYWRkcmVzcz86IHN0cmluZyB9KTogdm9pZCB7XG4gICAgLy8gSW4gdGhlIGNhc2UgdGhhdCB0aGlzIGlzIGFuIE9QX1JFVFVSTiBvdXRwdXQgb3IgYW5vdGhlciBub24tZW5jb2RhYmxlIHNjcmlwdFB1YmtleSwgd2UgZG9udCBoYXZlIGFuIGFkZHJlc3MuXG4gICAgLy8gV2Ugd2lsbCB2ZXJpZnkgdGhhdCB0aGUgYW1vdW50IGlzIHplcm8sIGFuZCBpZiBpdCBpc250IHRoZW4gd2Ugd2lsbCB0aHJvdyBhbiBlcnJvci5cbiAgICBpZiAoIW91dHB1dC5hZGRyZXNzIHx8IEFkZHJlc3NDb2RlYy5pc1NjcmlwdFJlY2lwaWVudChvdXRwdXQuYWRkcmVzcykpIHtcbiAgICAgIGlmIChvdXRwdXQuYW1vdW50LnRvU3RyaW5nKCkgIT09ICcwJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYE9ubHkgemVybyBhbW91bnRzIGFsbG93ZWQgZm9yIG5vbi1lbmNvZGVhYmxlIHNjcmlwdFB1YmtleXM6IGFtb3VudDogJHtvdXRwdXQuYW1vdW50fSwgYWRkcmVzczogJHtvdXRwdXQuYWRkcmVzc31gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZGVjb2RlKGFkZHJlc3M6IHN0cmluZyk6IFVpbnQ4QXJyYXkge1xuICAgIHJldHVybiB3YXNtQWRkcmVzcy50b091dHB1dFNjcmlwdFdpdGhDb2luKGFkZHJlc3MsIHRoaXMuY29pbk5hbWUpO1xuICB9XG5cbiAgZnJvbUV4dGVuZGVkQWRkcmVzc0Zvcm1hdFRvU2NyaXB0KGV4dGVuZGVkQWRkcmVzczogc3RyaW5nKTogQnVmZmVyIHtcbiAgICBjb25zdCByZXN1bHQgPSBBZGRyZXNzQ29kZWMuZnJvbUV4dGVuZGVkQWRkcmVzc0Zvcm1hdChleHRlbmRlZEFkZHJlc3MpO1xuICAgIGlmICgnc2NyaXB0JyBpbiByZXN1bHQpIHtcbiAgICAgIHJldHVybiBCdWZmZXIuZnJvbShyZXN1bHQuc2NyaXB0LCAnaGV4Jyk7XG4gICAgfVxuICAgIHJldHVybiBCdWZmZXIuZnJvbSh0aGlzLmRlY29kZShyZXN1bHQuYWRkcmVzcykpO1xuICB9XG5cbiAgdG9PdXRwdXRTY3JpcHQodjogc3RyaW5nIHwgeyBhZGRyZXNzOiBzdHJpbmcgfSB8IHsgc2NyaXB0OiBzdHJpbmcgfSk6IEJ1ZmZlciB7XG4gICAgaWYgKHR5cGVvZiB2ID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHRoaXMuZnJvbUV4dGVuZGVkQWRkcmVzc0Zvcm1hdFRvU2NyaXB0KHYpO1xuICAgIH1cbiAgICBpZiAoJ3NjcmlwdCcgaW4gdikge1xuICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHYuc2NyaXB0LCAnaGV4Jyk7XG4gICAgfVxuICAgIGlmICgnYWRkcmVzcycgaW4gdikge1xuICAgICAgcmV0dXJuIHRoaXMuZnJvbUV4dGVuZGVkQWRkcmVzc0Zvcm1hdFRvU2NyaXB0KHYuYWRkcmVzcyk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBpbnB1dCcpO1xuICB9XG5cbiAgdG9FeHRlbmRlZEFkZHJlc3NGb3JtYXQoc2NyaXB0OiBCdWZmZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiBzY3JpcHRbMF0gPT09IE9QX1JFVFVSTlxuICAgICAgPyBgJHtTY3JpcHRSZWNpcGllbnRQcmVmaXh9JHtzY3JpcHQudG9TdHJpbmcoJ2hleCcpfWBcbiAgICAgIDogd2FzbUFkZHJlc3MuZnJvbU91dHB1dFNjcmlwdFdpdGhDb2luKHNjcmlwdCwgdGhpcy5jb2luTmFtZSk7XG4gIH1cbn1cblxuLyoqIExlZ2FjeSBoZWxwZXIgcmV0YWluZWQgZm9yIGNvbnN1bWVycyB0aGF0IHVzZSB0aGUgbW9kdWxlLWxldmVsIHJlY2lwaWVudCBBUEkuICovXG5leHBvcnQgZnVuY3Rpb24gaXNTY3JpcHRSZWNpcGllbnQoYWRkcmVzczogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBBZGRyZXNzQ29kZWMuaXNTY3JpcHRSZWNpcGllbnQoYWRkcmVzcyk7XG59XG5cbi8qKiBMZWdhY3kgaGVscGVyIHJldGFpbmVkIGZvciBjb25zdW1lcnMgdGhhdCB1c2UgdGhlIG1vZHVsZS1sZXZlbCByZWNpcGllbnQgQVBJLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZyb21FeHRlbmRlZEFkZHJlc3NGb3JtYXQoZXh0ZW5kZWRBZGRyZXNzOiBzdHJpbmcpOiB7IGFkZHJlc3M6IHN0cmluZyB9IHwgeyBzY3JpcHQ6IHN0cmluZyB9IHtcbiAgcmV0dXJuIEFkZHJlc3NDb2RlYy5mcm9tRXh0ZW5kZWRBZGRyZXNzRm9ybWF0KGV4dGVuZGVkQWRkcmVzcyk7XG59XG5cbi8qKiBMZWdhY3kgaGVscGVyIHJldGFpbmVkIGZvciBjb25zdW1lcnMgdGhhdCB1c2UgdGhlIG1vZHVsZS1sZXZlbCByZWNpcGllbnQgQVBJLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZyb21FeHRlbmRlZEFkZHJlc3NGb3JtYXRUb1NjcmlwdChleHRlbmRlZEFkZHJlc3M6IHN0cmluZywgY29pbk5hbWU6IFV0eG9Db2luTmFtZSk6IEJ1ZmZlciB7XG4gIHJldHVybiBuZXcgQWRkcmVzc0NvZGVjKGNvaW5OYW1lKS5mcm9tRXh0ZW5kZWRBZGRyZXNzRm9ybWF0VG9TY3JpcHQoZXh0ZW5kZWRBZGRyZXNzKTtcbn1cblxuLyoqIExlZ2FjeSBoZWxwZXIgcmV0YWluZWQgZm9yIGNvbnN1bWVycyB0aGF0IHVzZSB0aGUgbW9kdWxlLWxldmVsIHJlY2lwaWVudCBBUEkuICovXG5leHBvcnQgZnVuY3Rpb24gdG9PdXRwdXRTY3JpcHQodjogc3RyaW5nIHwgeyBhZGRyZXNzOiBzdHJpbmcgfSB8IHsgc2NyaXB0OiBzdHJpbmcgfSwgY29pbk5hbWU6IFV0eG9Db2luTmFtZSk6IEJ1ZmZlciB7XG4gIHJldHVybiBuZXcgQWRkcmVzc0NvZGVjKGNvaW5OYW1lKS50b091dHB1dFNjcmlwdCh2KTtcbn1cblxuLyoqIExlZ2FjeSBoZWxwZXIgcmV0YWluZWQgZm9yIGNvbnN1bWVycyB0aGF0IHVzZSB0aGUgbW9kdWxlLWxldmVsIHJlY2lwaWVudCBBUEkuICovXG5leHBvcnQgZnVuY3Rpb24gdG9FeHRlbmRlZEFkZHJlc3NGb3JtYXQoc2NyaXB0OiBCdWZmZXIsIGNvaW5OYW1lOiBVdHhvQ29pbk5hbWUpOiBzdHJpbmcge1xuICByZXR1cm4gbmV3IEFkZHJlc3NDb2RlYyhjb2luTmFtZSkudG9FeHRlbmRlZEFkZHJlc3NGb3JtYXQoc2NyaXB0KTtcbn1cblxuLyoqIExlZ2FjeSBoZWxwZXIgcmV0YWluZWQgZm9yIGNvbnN1bWVycyB0aGF0IHVzZSB0aGUgbW9kdWxlLWxldmVsIHJlY2lwaWVudCBBUEkuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0VmFsaWRUcmFuc2FjdGlvblJlY2lwaWVudChvdXRwdXQ6IHsgYW1vdW50OiBiaWdpbnQgfCBudW1iZXIgfCBzdHJpbmc7IGFkZHJlc3M/OiBzdHJpbmcgfSk6IHZvaWQge1xuICBBZGRyZXNzQ29kZWMuYXNzZXJ0VmFsaWRUcmFuc2FjdGlvblJlY2lwaWVudChvdXRwdXQpO1xufVxuIl19
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { BitGoBase } from '@bitgo/sdk-core';
|
|
2
2
|
import { AbstractUtxoCoin, VerifyTransactionOptions } from '../abstractUtxoCoin';
|
|
3
|
-
|
|
3
|
+
import { AddressCodec } from './recipient';
|
|
4
|
+
export declare function verifyTransaction<TNumber extends bigint | number>(coin: AbstractUtxoCoin, bitgo: BitGoBase, params: VerifyTransactionOptions<TNumber>, addressCodec?: AddressCodec): Promise<boolean>;
|
|
4
5
|
//# sourceMappingURL=verifyTransaction.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verifyTransaction.d.ts","sourceRoot":"","sources":["../../../../src/transaction/verifyTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"verifyTransaction.d.ts","sourceRoot":"","sources":["../../../../src/transaction/verifyTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAIjF,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAI3C,wBAAsB,iBAAiB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EACrE,IAAI,EAAE,gBAAgB,EACtB,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,wBAAwB,CAAC,OAAO,CAAC,EACzC,YAAY,GAAE,YAA0C,GACvD,OAAO,CAAC,OAAO,CAAC,CAYlB"}
|
|
@@ -36,15 +36,16 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
36
36
|
exports.verifyTransaction = verifyTransaction;
|
|
37
37
|
const descriptor_1 = require("../descriptor");
|
|
38
38
|
const keychains_1 = require("../keychains");
|
|
39
|
+
const recipient_1 = require("./recipient");
|
|
39
40
|
const fixedScript = __importStar(require("./fixedScript"));
|
|
40
41
|
const descriptor = __importStar(require("./descriptor"));
|
|
41
|
-
async function verifyTransaction(coin, bitgo, params) {
|
|
42
|
+
async function verifyTransaction(coin, bitgo, params, addressCodec = new recipient_1.AddressCodec(coin.name)) {
|
|
42
43
|
if ((0, descriptor_1.isDescriptorWallet)(params.wallet)) {
|
|
43
44
|
const walletKeys = (0, keychains_1.toBip32Triple)(await (0, keychains_1.fetchKeychains)(coin, params.wallet));
|
|
44
|
-
return descriptor.verifyTransaction(coin, params, (0, descriptor_1.getDescriptorMapFromWallet)(params.wallet, walletKeys, (0, descriptor_1.getPolicyForEnv)(bitgo.env)));
|
|
45
|
+
return descriptor.verifyTransaction(coin, params, (0, descriptor_1.getDescriptorMapFromWallet)(params.wallet, walletKeys, (0, descriptor_1.getPolicyForEnv)(bitgo.env)), addressCodec);
|
|
45
46
|
}
|
|
46
47
|
else {
|
|
47
48
|
return fixedScript.verifyTransaction(coin, bitgo, params);
|
|
48
49
|
}
|
|
49
50
|
}
|
|
50
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyaWZ5VHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdHJhbnNhY3Rpb24vdmVyaWZ5VHJhbnNhY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFVQSw4Q0FpQkM7QUF4QkQsOENBQWdHO0FBQ2hHLDRDQUE2RDtBQUU3RCwyQ0FBMkM7QUFDM0MsMkRBQTZDO0FBQzdDLHlEQUEyQztBQUVwQyxLQUFLLFVBQVUsaUJBQWlCLENBQ3JDLElBQXNCLEVBQ3RCLEtBQWdCLEVBQ2hCLE1BQXlDLEVBQ3pDLGVBQTZCLElBQUksd0JBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBRXhELElBQUksSUFBQSwrQkFBa0IsRUFBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUN0QyxNQUFNLFVBQVUsR0FBRyxJQUFBLHlCQUFhLEVBQUMsTUFBTSxJQUFBLDBCQUFjLEVBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQzVFLE9BQU8sVUFBVSxDQUFDLGlCQUFpQixDQUNqQyxJQUFJLEVBQ0osTUFBTSxFQUNOLElBQUEsdUNBQTBCLEVBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsSUFBQSw0QkFBZSxFQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUNqRixZQUFZLENBQ2IsQ0FBQztJQUNKLENBQUM7U0FBTSxDQUFDO1FBQ04sT0FBTyxXQUFXLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM1RCxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJpdEdvQmFzZSB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5cbmltcG9ydCB7IEFic3RyYWN0VXR4b0NvaW4sIFZlcmlmeVRyYW5zYWN0aW9uT3B0aW9ucyB9IGZyb20gJy4uL2Fic3RyYWN0VXR4b0NvaW4nO1xuaW1wb3J0IHsgZ2V0RGVzY3JpcHRvck1hcEZyb21XYWxsZXQsIGlzRGVzY3JpcHRvcldhbGxldCwgZ2V0UG9saWN5Rm9yRW52IH0gZnJvbSAnLi4vZGVzY3JpcHRvcic7XG5pbXBvcnQgeyBmZXRjaEtleWNoYWlucywgdG9CaXAzMlRyaXBsZSB9IGZyb20gJy4uL2tleWNoYWlucyc7XG5cbmltcG9ydCB7IEFkZHJlc3NDb2RlYyB9IGZyb20gJy4vcmVjaXBpZW50JztcbmltcG9ydCAqIGFzIGZpeGVkU2NyaXB0IGZyb20gJy4vZml4ZWRTY3JpcHQnO1xuaW1wb3J0ICogYXMgZGVzY3JpcHRvciBmcm9tICcuL2Rlc2NyaXB0b3InO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdmVyaWZ5VHJhbnNhY3Rpb248VE51bWJlciBleHRlbmRzIGJpZ2ludCB8IG51bWJlcj4oXG4gIGNvaW46IEFic3RyYWN0VXR4b0NvaW4sXG4gIGJpdGdvOiBCaXRHb0Jhc2UsXG4gIHBhcmFtczogVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zPFROdW1iZXI+LFxuICBhZGRyZXNzQ29kZWM6IEFkZHJlc3NDb2RlYyA9IG5ldyBBZGRyZXNzQ29kZWMoY29pbi5uYW1lKVxuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGlmIChpc0Rlc2NyaXB0b3JXYWxsZXQocGFyYW1zLndhbGxldCkpIHtcbiAgICBjb25zdCB3YWxsZXRLZXlzID0gdG9CaXAzMlRyaXBsZShhd2FpdCBmZXRjaEtleWNoYWlucyhjb2luLCBwYXJhbXMud2FsbGV0KSk7XG4gICAgcmV0dXJuIGRlc2NyaXB0b3IudmVyaWZ5VHJhbnNhY3Rpb24oXG4gICAgICBjb2luLFxuICAgICAgcGFyYW1zLFxuICAgICAgZ2V0RGVzY3JpcHRvck1hcEZyb21XYWxsZXQocGFyYW1zLndhbGxldCwgd2FsbGV0S2V5cywgZ2V0UG9saWN5Rm9yRW52KGJpdGdvLmVudikpLFxuICAgICAgYWRkcmVzc0NvZGVjXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZml4ZWRTY3JpcHQudmVyaWZ5VHJhbnNhY3Rpb24oY29pbiwgYml0Z28sIHBhcmFtcyk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"address.d.ts","sourceRoot":"","sources":["../../../../../../../test/unit/impl/zec/unit/address.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const strict_1 = __importDefault(require("node:assert/strict"));
|
|
7
|
+
const sdk_api_1 = require("@bitgo/sdk-api");
|
|
8
|
+
const zec_1 = require("../../../../../src/impl/zec");
|
|
9
|
+
// ZIP-316 unified-address test vectors, copied from
|
|
10
|
+
// BitGoWASM/packages/wasm-utxo/test/fixtures/zcash/unified_address.json so
|
|
11
|
+
// both repos test against the same known-good data.
|
|
12
|
+
const zip316Mainnet = {
|
|
13
|
+
unified: 'u1pg2aaph7jp8rpf6yhsza25722sg5fcn3vaca6ze27hqjw7jvvhhuxkpcg0ge9xh6drsgdkda8qjq5chpehkcpxf87rnjryjqwymdheptpvnljqqrjqzjwkc2ma6hcq666kgwfytxwac8eyex6ndgr6ezte66706e3vaqrd25dzvzkc69kw0jgywtd0cmq52q5lkw6uh7hyvzjse8ksx',
|
|
14
|
+
};
|
|
15
|
+
const testnetWallet = {
|
|
16
|
+
unified: 'utest1w5m0qcnp8egl8qa296n70n8nvj0tqnzk90p7f48v7mjhhdrdqs8vgqydslg5plmzefawefnpmgmlm6hcy38m972erwxs04s02cq2prhguz8kqly75m6zjy56m08d5jnycgtpqtjeprte576gkmrxyszepgx76yzuwhh7m4lfz9jaq7unjk0x5ant46juxz73hsc6q4v3dqtzww00vps',
|
|
17
|
+
transparentAddress: 'tmM4DvLVJKXZt5ydn1tqYTHvahpKSwgjuRk',
|
|
18
|
+
};
|
|
19
|
+
describe('Zcash address validation', function () {
|
|
20
|
+
let bitgo;
|
|
21
|
+
let zec;
|
|
22
|
+
let tzec;
|
|
23
|
+
before(function () {
|
|
24
|
+
bitgo = new sdk_api_1.BitGoAPI({ env: 'mock' });
|
|
25
|
+
bitgo.register('zec', zec_1.Zec.createInstance);
|
|
26
|
+
bitgo.register('tzec', zec_1.Tzec.createInstance);
|
|
27
|
+
zec = bitgo.coin('zec');
|
|
28
|
+
tzec = bitgo.coin('tzec');
|
|
29
|
+
});
|
|
30
|
+
it('recognizes a mainnet unified address as shielded', function () {
|
|
31
|
+
strict_1.default.strictEqual(zec.isValidAddress(zip316Mainnet.unified), true);
|
|
32
|
+
strict_1.default.strictEqual((0, zec_1.getZcashAddressKind)(zip316Mainnet.unified, 'zec'), 'shielded');
|
|
33
|
+
strict_1.default.strictEqual((0, zec_1.isShieldedZcashAddress)(zip316Mainnet.unified, 'zec'), true);
|
|
34
|
+
strict_1.default.strictEqual((0, zec_1.isValidZcashAddress)(zip316Mainnet.unified, 'zec'), true);
|
|
35
|
+
});
|
|
36
|
+
it('recognizes a testnet unified address as shielded', function () {
|
|
37
|
+
strict_1.default.strictEqual(tzec.isValidAddress(testnetWallet.unified), true);
|
|
38
|
+
strict_1.default.strictEqual((0, zec_1.getZcashAddressKind)(testnetWallet.unified, 'tzec'), 'shielded');
|
|
39
|
+
strict_1.default.strictEqual((0, zec_1.isShieldedZcashAddress)(testnetWallet.unified, 'tzec'), true);
|
|
40
|
+
strict_1.default.strictEqual((0, zec_1.isValidZcashAddress)(testnetWallet.unified, 'tzec'), true);
|
|
41
|
+
});
|
|
42
|
+
it('recognizes a testnet transparent address as transparent', function () {
|
|
43
|
+
strict_1.default.strictEqual(tzec.isValidAddress(testnetWallet.transparentAddress), true);
|
|
44
|
+
strict_1.default.strictEqual((0, zec_1.getZcashAddressKind)(testnetWallet.transparentAddress, 'tzec'), 'transparent');
|
|
45
|
+
strict_1.default.strictEqual((0, zec_1.isValidZcashAddress)(testnetWallet.transparentAddress, 'tzec'), true);
|
|
46
|
+
});
|
|
47
|
+
it('recognizes a mainnet transparent (P2PKH) address as transparent', function () {
|
|
48
|
+
const address = 't1cN2ZVWzWcVRrnfeQzmkpLhzQ4dYRv8yRY';
|
|
49
|
+
strict_1.default.strictEqual(zec.isValidAddress(address), true);
|
|
50
|
+
strict_1.default.strictEqual((0, zec_1.getZcashAddressKind)(address, 'zec'), 'transparent');
|
|
51
|
+
strict_1.default.strictEqual((0, zec_1.isValidZcashAddress)(address, 'zec'), true);
|
|
52
|
+
});
|
|
53
|
+
it('rejects a garbage string', function () {
|
|
54
|
+
const garbage = 'not-a-real-address';
|
|
55
|
+
strict_1.default.strictEqual(zec.isValidAddress(garbage), false);
|
|
56
|
+
strict_1.default.strictEqual((0, zec_1.getZcashAddressKind)(garbage, 'zec'), undefined);
|
|
57
|
+
strict_1.default.strictEqual((0, zec_1.isValidZcashAddress)(garbage, 'zec'), false);
|
|
58
|
+
});
|
|
59
|
+
it('rejects a unified address checked against the wrong network', function () {
|
|
60
|
+
strict_1.default.strictEqual(tzec.isValidAddress(zip316Mainnet.unified), false);
|
|
61
|
+
strict_1.default.strictEqual((0, zec_1.getZcashAddressKind)(zip316Mainnet.unified, 'tzec'), undefined);
|
|
62
|
+
strict_1.default.strictEqual((0, zec_1.isShieldedZcashAddress)(zip316Mainnet.unified, 'tzec'), false);
|
|
63
|
+
strict_1.default.strictEqual((0, zec_1.isValidZcashAddress)(zip316Mainnet.unified, 'tzec'), false);
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkcmVzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9pbXBsL3plYy91bml0L2FkZHJlc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxnRUFBd0M7QUFFeEMsNENBQTBDO0FBRTFDLHFEQU1xQztBQUVyQyxvREFBb0Q7QUFDcEQsMkVBQTJFO0FBQzNFLG9EQUFvRDtBQUNwRCxNQUFNLGFBQWEsR0FBRztJQUNwQixPQUFPLEVBQ0wsdU5BQXVOO0NBQzFOLENBQUM7QUFDRixNQUFNLGFBQWEsR0FBRztJQUNwQixPQUFPLEVBQ0wsMk5BQTJOO0lBQzdOLGtCQUFrQixFQUFFLHFDQUFxQztDQUMxRCxDQUFDO0FBRUYsUUFBUSxDQUFDLDBCQUEwQixFQUFFO0lBQ25DLElBQUksS0FBZSxDQUFDO0lBQ3BCLElBQUksR0FBRyxDQUFDO0lBQ1IsSUFBSSxJQUFJLENBQUM7SUFFVCxNQUFNLENBQUM7UUFDTCxLQUFLLEdBQUcsSUFBSSxrQkFBUSxDQUFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDdEMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsU0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzFDLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLFVBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUM1QyxHQUFHLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QixJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM1QixDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxrREFBa0QsRUFBRTtRQUNyRCxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNwRSxnQkFBTSxD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QztRQUN0RSxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFBLHlCQUFtQixFQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDbEYsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSw0QkFBc0IsRUFBQyxhQUFhLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2pGLGdCQUFNLENBQUMsV0FBVyxDQUFDLElBQUEseUJBQW1CLEVBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNoRixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdub2RlOmFzc2VydC9zdHJpY3QnO1xuXG5pbXBvcnQgeyBCaXRHb0FQSSB9IGZyb20gJ0BiaXRnby9zZGstYXBpJztcblxuaW1wb3J0IHtcbiAgWmVjLFxuICBUemVjLFxuICBnZXRaY2FzaEFkZHJlc3NLaW5kLFxuICBpc1NoaWVsZGVkWmNhc2hBZGRyZXNzLFxuICBpc1ZhbGlkWmNhc2hBZGRyZXNzLFxufSBmcm9tICcuLi8uLi8uLi8uLi8uLi9zcmMvaW1wbC96ZWMnO1xuXG4vLyBaSVAtMzE2IHVuaWZpZWQtYWRkcmVzcyB0ZXN0IHZlY3RvcnMsIGNvcGllZCBmcm9tXG4vLyBCaXRHb1dBU00vcGFja2FnZXMvd2FzbS11dHhvL3Rlc3QvZml4dHVyZXMvemNhc2gvdW5pZmllZF9hZGRyZXNzLmpzb24gc29cbi8vIGJvdGggcmVwb3MgdGVzdCBhZ2FpbnN0IHRoZSBzYW1lIGtub3duLWdvb2QgZGF0YS5cbmNvbnN0IHppcDMxNk1haW5uZXQgPSB7XG4gIHVuaWZpZWQ6XG4gICAgJ3UxcGcyYWFwaDdqcDhycGY2eWhzemEyNTcyMnNnNWZjbjN2YWNhNnplMjdocWp3N2p2dmhodXhrcGNnMGdlOXhoNmRyc2dka2RhOHFqcTVjaHBlaGtjcHhmODdybmpyeWpxd3ltZGhlcHRwdm5sanFxcmpxemp3a2MybWE2aGNxNjY2a2d3Znl0eHdhYzhleWV4Nm5kZ3I2ZXp0ZTY2NzA2ZTN2YXFyZDI1ZHp2emtjNjlrdzBqZ3l3dGQwY21xNTJxNWxrdzZ1aDdoeXZ6anNlOGtzeCcsXG59O1xuY29uc3QgdGVzdG5ldFdhbGxldCA9IHtcbiAgdW5pZmllZDpcbiAgICAndXRlc3QxdzVtMHFjbnA4ZWdsOHFhMjk2bjcwbjhudmowdHFuems5MHA3ZjQ4djdtamhoZHJkcXM4dmdxeWRzbGc1cGxtemVmYXdlZm5wbWdtbG02aGN5MzhtOTcyZXJ3eHMwNHMwMmNxMnByaGd1ejhrcWx5NzVtNnpqeTU2bTA4ZDVqbnljZ3RwcXRqZXBydGU1NzZna21yeHlzemVwZ3g3Nnl6dXdoaDdtNGxmejlqYXE3dW5qazB4NWFudDQ2anV4ejczaHNjNnE0djNkcXR6d3cwMHZwcycsXG4gIHRyYW5zcGFyZW50QWRkcmVzczogJ3RtTTREdkxWSktYWnQ1eWRuMXRxWVRIdmFocEtTd2dqdVJrJyxcbn07XG5cbmRlc2NyaWJlKCdaY2FzaCBhZGRyZXNzIHZhbGlkYXRpb24nLCBmdW5jdGlvbiAoKSB7XG4gIGxldCBiaXRnbzogQml0R29BUEk7XG4gIGxldCB6ZWM7XG4gIGxldCB0emVjO1xuXG4gIGJlZm9yZShmdW5jdGlvbiAoKSB7XG4gICAgYml0Z28gPSBuZXcgQml0R29BUEkoeyBlbnY6ICdtb2NrJyB9KTtcbiAgICBiaXRnby5yZWdpc3RlcignemVjJywgWmVjLmNyZWF0ZUluc3RhbmNlKTtcbiAgICBiaXRnby5yZWdpc3RlcigndHplYycsIFR6ZWMuY3JlYXRlSW5zdGFuY2UpO1xuICAgIHplYyA9IGJpdGdvLmNvaW4oJ3plYycpO1xuICAgIHR6ZWMgPSBiaXRnby5jb2luKCd0emVjJyk7XG4gIH0pO1xuXG4gIGl0KCdyZWNvZ25pemVzIGEgbWFpbm5ldCB1bmlmaWVkIGFkZHJlc3MgYXMgc2hpZWxkZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHplYy5pc1ZhbGlkQWRkcmVzcyh6aXAzMTZNYWlubmV0LnVuaWZpZWQpLCB0cnVlKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZ2V0WmNhc2hBZGRyZXNzS2luZCh6aXAzMTZNYWlubmV0LnVuaWZpZWQsICd6ZWMnKSwgJ3NoaWVsZGVkJyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGlzU2hpZWxkZWRaY2FzaEFkZHJlc3MoemlwMzE2TWFpbm5ldC51bmlmaWVkLCAnemVjJyksIHRydWUpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChpc1ZhbGlkWmNhc2hBZGRyZXNzKHppcDMxNk1haW5uZXQudW5pZmllZCwgJ3plYycpLCB0cnVlKTtcbiAgfSk7XG5cbiAgaXQoJ3JlY29nbml6ZXMgYSB0ZXN0bmV0IHVuaWZpZWQgYWRkcmVzcyBhcyBzaGllbGRlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHplYy5pc1ZhbGlkQWRkcmVzcyh0ZXN0bmV0V2FsbGV0LnVuaWZpZWQpLCB0cnVlKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZ2V0WmNhc2hBZGRyZXNzS2luZCh0ZXN0bmV0V2FsbGV0LnVuaWZpZWQsICd0emVjJyksICdzaGllbGRlZCcpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChpc1NoaWVsZGVkWmNhc2hBZGRyZXNzKHRlc3RuZXRXYWxsZXQudW5pZmllZCwgJ3R6ZWMnKSwgdHJ1ZSk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGlzVmFsaWRaY2FzaEFkZHJlc3ModGVzdG5ldFdhbGxldC51bmlmaWVkLCAndHplYycpLCB0cnVlKTtcbiAgfSk7XG5cbiAgaXQoJ3JlY29nbml6ZXMgYSB0ZXN0bmV0IHRyYW5zcGFyZW50IGFkZHJlc3MgYXMgdHJhbnNwYXJlbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR6ZWMuaXNWYWxpZEFkZHJlc3ModGVzdG5ldFdhbGxldC50cmFuc3BhcmVudEFkZHJlc3MpLCB0cnVlKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZ2V0WmNhc2hBZGRyZXNzS2luZCh0ZXN0bmV0V2FsbGV0LnRyYW5zcGFyZW50QWRkcmVzcywgJ3R6ZWMnKSwgJ3RyYW5zcGFyZW50Jyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGlzVmFsaWRaY2FzaEFkZHJlc3ModGVzdG5ldFdhbGxldC50cmFuc3BhcmVudEFkZHJlc3MsICd0emVjJyksIHRydWUpO1xuICB9KTtcblxuICBpdCgncmVjb2duaXplcyBhIG1haW5uZXQgdHJhbnNwYXJlbnQgKFAyUEtIKSBhZGRyZXNzIGFzIHRyYW5zcGFyZW50JywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGFkZHJlc3MgPSAndDFjTjJaVld6V2NWUnJuZmVRem1rcExoelE0ZFlSdjh5UlknO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbCh6ZWMuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcyksIHRydWUpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChnZXRaY2FzaEFkZHJlc3NLaW5kKGFkZHJlc3MsICd6ZWMnKSwgJ3RyYW5zcGFyZW50Jyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGlzVmFsaWRaY2FzaEFkZHJlc3MoYWRkcmVzcywgJ3plYycpLCB0cnVlKTtcbiAgfSk7XG5cbiAgaXQoJ3JlamVjdHMgYSBnYXJiYWdlIHN0cmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBnYXJiYWdlID0gJ25vdC1hLXJlYWwtYWRkcmVzcyc7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHplYy5pc1ZhbGlkQWRkcmVzcyhnYXJiYWdlKSwgZmFsc2UpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChnZXRaY2FzaEFkZHJlc3NLaW5kKGdhcmJhZ2UsICd6ZWMnKSwgdW5kZWZpbmVkKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaXNWYWxpZFpjYXNoQWRkcmVzcyhnYXJiYWdlLCAnemVjJyksIGZhbHNlKTtcbiAgfSk7XG5cbiAgaXQoJ3JlamVjdHMgYSB1bmlmaWVkIGFkZHJlc3MgY2hlY2tlZCBhZ2FpbnN0IHRoZSB3cm9uZyBuZXR3b3JrJywgZnVuY3Rpb24gKCkge1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0emVjLmlzVmFsaWRBZGRyZXNzKHppcDMxNk1haW5uZXQudW5pZmllZCksIGZhbHNlKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZ2V0WmNhc2hBZGRyZXNzS2luZCh6aXAzMTZNYWlubmV0LnVuaWZpZWQsICd0emVjJyksIHVuZGVmaW5lZCk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGlzU2hpZWxkZWRaY2FzaEFkZHJlc3MoemlwMzE2TWFpbm5ldC51bmlmaWVkLCAndHplYycpLCBmYWxzZSk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGlzVmFsaWRaY2FzaEFkZHJlc3MoemlwMzE2TWFpbm5ldC51bmlmaWVkLCAndHplYycpLCBmYWxzZSk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolvePsbtRecipients.d.ts","sourceRoot":"","sources":["../../../../../../../test/unit/impl/zec/unit/resolvePsbtRecipients.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const strict_1 = __importDefault(require("node:assert/strict"));
|
|
7
|
+
const wasm_utxo_1 = require("@bitgo/wasm-utxo");
|
|
8
|
+
const recipients_1 = require("../../../../../src/impl/zec/recipients");
|
|
9
|
+
const util_1 = require("../../../util");
|
|
10
|
+
// ZIP-316 unified-address test vector, copied from
|
|
11
|
+
// BitGoWASM/packages/wasm-utxo/test/fixtures/zcash/unified_address.json so both repos test
|
|
12
|
+
// against the same known-good data.
|
|
13
|
+
const testnetWallet = {
|
|
14
|
+
unified: 'utest1w5m0qcnp8egl8qa296n70n8nvj0tqnzk90p7f48v7mjhhdrdqs8vgqydslg5plmzefawefnpmgmlm6hcy38m972erwxs04s02cq2prhguz8kqly75m6zjy56m08d5jnycgtpqtjeprte576gkmrxyszepgx76yzuwhh7m4lfz9jaq7unjk0x5ant46juxz73hsc6q4v3dqtzww00vps',
|
|
15
|
+
transparentAddress: 'tmM4DvLVJKXZt5ydn1tqYTHvahpKSwgjuRk',
|
|
16
|
+
};
|
|
17
|
+
const IRONWOOD_HEIGHT = 4200000; // after the NU6.3 testnet activation (4134000)
|
|
18
|
+
const IRONWOOD_RECEIVER = Buffer.from('d632c28aa0831d671be17709a42c9627e2eb687a1b2a55768ea470c9bae7499cd0bd3d0eb0484e307236b5', 'hex');
|
|
19
|
+
describe('resolvePsbtRecipients', function () {
|
|
20
|
+
const { walletKeys } = (0, util_1.getDefaultWasmWalletKeys)();
|
|
21
|
+
function buildV4Psbt(unifiedAddress) {
|
|
22
|
+
const psbt = wasm_utxo_1.fixedScriptWallet.ZcashBitGoPsbt.createEmpty('tzec', walletKeys, { blockHeight: 3146400 });
|
|
23
|
+
psbt.addWalletInput({ txid: '22'.repeat(32), vout: 0, value: 200000n }, walletKeys, {
|
|
24
|
+
scriptId: { chain: 0, index: 1 },
|
|
25
|
+
});
|
|
26
|
+
psbt.addWalletOutput(walletKeys, { chain: 1, index: 0, value: 100000n });
|
|
27
|
+
const externalScript = wasm_utxo_1.address.toOutputScriptWithCoin(testnetWallet.transparentAddress, 'tzec');
|
|
28
|
+
psbt.addTransparentOutput(externalScript, 12345n, unifiedAddress);
|
|
29
|
+
return psbt;
|
|
30
|
+
}
|
|
31
|
+
function buildV6Psbt(unifiedAddress) {
|
|
32
|
+
const psbt = wasm_utxo_1.fixedScriptWallet.ZcashIronwoodBitGoPsbt.createEmpty('tzec', walletKeys, {
|
|
33
|
+
blockHeight: IRONWOOD_HEIGHT,
|
|
34
|
+
});
|
|
35
|
+
psbt.addWalletInput({ txid: '11'.repeat(32), vout: 0, value: 100000n }, walletKeys, {
|
|
36
|
+
scriptId: { chain: 0, index: 0 },
|
|
37
|
+
});
|
|
38
|
+
psbt.addWalletOutput(walletKeys, { chain: 1, index: 0, value: 90000n });
|
|
39
|
+
psbt.addShieldedOutputs([{ recipient: new Uint8Array(IRONWOOD_RECEIVER), amount: 5000n, unifiedAddress }], new Uint8Array(32) // all-zero anchor, as in the utxo-core shielded build tests
|
|
40
|
+
);
|
|
41
|
+
return psbt;
|
|
42
|
+
}
|
|
43
|
+
it('resolves external transparent outputs and excludes wallet change (v4)', function () {
|
|
44
|
+
const recipients = (0, recipients_1.resolvePsbtRecipients)(buildV4Psbt(), walletKeys);
|
|
45
|
+
strict_1.default.strictEqual(recipients.length, 1);
|
|
46
|
+
const recipient = recipients[0];
|
|
47
|
+
strict_1.default.strictEqual(recipient.destination.kind, 'transparent');
|
|
48
|
+
strict_1.default.strictEqual(recipient.address, testnetWallet.transparentAddress);
|
|
49
|
+
strict_1.default.strictEqual(recipient.amount, 12345n);
|
|
50
|
+
strict_1.default.strictEqual(recipient.unifiedAddress, undefined);
|
|
51
|
+
strict_1.default.deepStrictEqual(Buffer.from(recipient.script), Buffer.from(wasm_utxo_1.address.toOutputScriptWithCoin(testnetWallet.transparentAddress, 'tzec')));
|
|
52
|
+
});
|
|
53
|
+
it('reports the original UA verbatim for a transparent output built from a Unified Address (v4)', function () {
|
|
54
|
+
const recipients = (0, recipients_1.resolvePsbtRecipients)(buildV4Psbt(testnetWallet.unified), walletKeys);
|
|
55
|
+
strict_1.default.strictEqual(recipients.length, 1);
|
|
56
|
+
const recipient = recipients[0];
|
|
57
|
+
strict_1.default.deepStrictEqual(recipient.destination, {
|
|
58
|
+
kind: 'zcashUnifiedTransparent',
|
|
59
|
+
unifiedAddress: testnetWallet.unified,
|
|
60
|
+
});
|
|
61
|
+
strict_1.default.strictEqual(recipient.unifiedAddress, testnetWallet.unified);
|
|
62
|
+
// For a transparent output built from a Unified Address, the parsed address is the UA
|
|
63
|
+
// itself (verbatim), not just the transparent receiver.
|
|
64
|
+
strict_1.default.strictEqual(recipient.address, testnetWallet.unified);
|
|
65
|
+
});
|
|
66
|
+
it('resolves a shielded v6 output to its (re-encoded) Orchard Unified Address recipient', function () {
|
|
67
|
+
const recipients = (0, recipients_1.resolvePsbtRecipients)(buildV6Psbt(), walletKeys);
|
|
68
|
+
strict_1.default.strictEqual(recipients.length, 1);
|
|
69
|
+
const recipient = recipients[0];
|
|
70
|
+
const expectedAddress = wasm_utxo_1.fixedScriptWallet.ZcashUnifiedAddress.encodeOrchardReceiver(new Uint8Array(IRONWOOD_RECEIVER), 'tzec');
|
|
71
|
+
strict_1.default.deepStrictEqual(recipient.destination, {
|
|
72
|
+
kind: 'zcashShielded',
|
|
73
|
+
unifiedAddress: expectedAddress,
|
|
74
|
+
});
|
|
75
|
+
strict_1.default.strictEqual(recipient.address, expectedAddress);
|
|
76
|
+
strict_1.default.strictEqual(recipient.amount, 5000n);
|
|
77
|
+
strict_1.default.deepStrictEqual(Buffer.from(recipient.script), IRONWOOD_RECEIVER);
|
|
78
|
+
});
|
|
79
|
+
it('reports the original UA verbatim for a shielded output built from a Unified Address (v6)', function () {
|
|
80
|
+
const orchardOnlyUa = wasm_utxo_1.fixedScriptWallet.ZcashUnifiedAddress.encodeOrchardReceiver(new Uint8Array(IRONWOOD_RECEIVER), 'tzec');
|
|
81
|
+
const recipients = (0, recipients_1.resolvePsbtRecipients)(buildV6Psbt(orchardOnlyUa), walletKeys);
|
|
82
|
+
strict_1.default.strictEqual(recipients.length, 1);
|
|
83
|
+
const recipient = recipients[0];
|
|
84
|
+
strict_1.default.deepStrictEqual(recipient.destination, { kind: 'zcashShielded', unifiedAddress: orchardOnlyUa });
|
|
85
|
+
strict_1.default.strictEqual(recipient.unifiedAddress, orchardOnlyUa);
|
|
86
|
+
strict_1.default.strictEqual(recipient.address, orchardOnlyUa);
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb2x2ZVBzYnRSZWNpcGllbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdGVzdC91bml0L2ltcGwvemVjL3VuaXQvcmVzb2x2ZVBzYnRSZWNpcGllbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsZ0VBQXdDO0FBRXhDLGdEQUE2RTtBQUU3RSx1RUFBK0U7QUFDL0Usd0NBQXlEO0FBRXpELG1EQUFtRDtBQUNuRCwyRkFBMkY7QUFDM0Ysb0NBQW9DO0FBQ3BDLE1BQU0sYUFBYSxHQUFHO0lBQ3BCLE9BQU8sRUFDTCwyTkFBMk47SUFDN04sa0JBQWtCLEVBQUUscUNBQXFDO0NBQzFELENBQUM7QUFDRixNQUFNLGVBQWUsR0FBRyxPQUFPLENBQUMsQ0FBQywrQ0FBK0M7QUFDaEYsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUNuQyx3RkFBd0YsRUFDeEYsS0FBSyxDQUNOLENBQUM7QUFFRixRQUFRLENBQUMsdUJBQXVCLEVBQUU7SUFDaEMsTUFBTSxFQUFFLFVBQVUsRUFBRSxHQUFHLElBQUEsK0JBQXdCLEdBQUUsQ0FBQztJQUVsRCxTQUFTLFdBQVcsQ0FBQyxjQUF1QjtRQUMxQyxNQUFNLElBQUksR0FBRyw2QkFBaUIsQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUN4RyxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUUsVUFBVSxFQUFFO1lBQ2xGLFFBQVEsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRTtTQUNqQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsZUFB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QUMsTUFBTSxDQUFDLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztJQUMzRSxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQywwRkFBMEYsRUFBRTtRQUM3RixNQUFNLGFBQWEsR0FBRyw2QkFBaUIsQ0FBQyxtQkFBbUIsQ0FBQyxxQkFBcUIsQ0FDL0UsSUFBSSxVQUFVLENBQUMsaUJBQWlCLENBQUMsRUFDakMsTUFBTSxDQUNQLENBQUM7UUFDRixNQUFNLFVBQVUsR0FBRyxJQUFBLGtDQUFxQixFQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNqRixnQkFBTSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoQyxnQkFBTSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQztRQUN4RyxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsY0FBYyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQzVELGdCQUFNLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDdkQsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnbm9kZTphc3NlcnQvc3RyaWN0JztcblxuaW1wb3J0IHsgYWRkcmVzcyBhcyB3YXNtQWRkcmVzcywgZml4ZWRTY3JpcHRXYWxsZXQgfSBmcm9tICdAYml0Z28vd2FzbS11dHhvJztcblxuaW1wb3J0IHsgcmVzb2x2ZVBzYnRSZWNpcGllbnRzIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vc3JjL2ltcGwvemVjL3JlY2lwaWVudHMnO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdFdhc21XYWxsZXRLZXlzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbCc7XG5cbi8vIFpJUC0zMTYgdW5pZmllZC1hZGRyZXNzIHRlc3QgdmVjdG9yLCBjb3BpZWQgZnJvbVxuLy8gQml0R29XQVNNL3BhY2thZ2VzL3dhc20tdXR4by90ZXN0L2ZpeHR1cmVzL3pjYXNoL3VuaWZpZWRfYWRkcmVzcy5qc29uIHNvIGJvdGggcmVwb3MgdGVzdFxuLy8gYWdhaW5zdCB0aGUgc2FtZSBrbm93bi1nb29kIGRhdGEuXG5jb25zdCB0ZXN0bmV0V2FsbGV0ID0ge1xuICB1bmlmaWVkOlxuICAgICd1dGVzdDF3NW0wcWNucDhlZ2w4cWEyOTZuNzBuOG52ajB0cW56azkwcDdmNDh2N21qaGhkcmRxczh2Z3F5ZHNsZzVwbG16ZWZhd2VmbnBtZ21sbTZoY3kzOG05NzJlcnd4czA0czAyY3EycHJoZ3V6OGtxbHk3NW02emp5NTZtMDhkNWpueWNndHBxdGplcHJ0ZTU3NmdrbXJ4eXN6ZXBneDc2eXp1d2hoN200bGZ6OWphcTd1bmprMHg1YW50NDZqdXh6NzNoc2M2cTR2M2RxdHp3dzAwdnBzJyxcbiAgdHJhbnNwYXJlbnRBZGRyZXNzOiAndG1NNER2TFZKS1hadDV5ZG4xdHFZVEh2YWhwS1N3Z2p1UmsnLFxufTtcbmNvbnN0IElST05XT09EX0hFSUdIVCA9IDQyMDAwMDA7IC8vIGFmdGVyIHRoZSBOVTYuMyB0ZXN0bmV0IGFjdGl2YXRpb24gKDQxMzQwMDApXG5jb25zdCBJUk9OV09PRF9SRUNFSVZFUiA9IEJ1ZmZlci5mcm9tKFxuICAnZDYzMmMyOGFhMDgzMWQ2NzFiZTE3NzA5YTQyYzk2MjdlMmViNjg3YTFiMmE1NTc2OGVhNDcwYzliYWU3NDk5Y2QwYmQzZDBlYjA0ODRlMzA3MjM2YjUnLFxuICAnaGV4J1xuKTtcblxuZGVzY3JpYmUoJ3Jlc29sdmVQc2J0UmVjaXBpZW50cycsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgeyB3YWxsZXRLZXlzIH0gPSBnZXREZWZhdWx0V2FzbVdhbGxldEtleXMoKTtcblxuICBmdW5jdGlvbiBidWlsZFY0UHNidCh1bmlmaWVkQWRkcmVzcz86IHN0cmluZyk6IGZpeGVkU2NyaXB0V2FsbGV0LlpjYXNoQml0R29Qc2J0IHtcbiAgICBjb25zdCBwc2J0ID0gZml4ZWRTY3JpcHRXYWxsZXQuWmNhc2hCaXRHb1BzYnQuY3JlYXRlRW1wdHkoJ3R6ZWMnLCB3YWxsZXRLZXlzLCB7IGJsb2NrSGVpZ2h0OiAzMTQ2NDAwIH0pO1xuICAgIHBzYnQuYWRkV2FsbGV0SW5wdXQoeyB0eGlkOiAnMjInLnJlcGVhdCgzMiksIHZvdXQ6IDAsIHZhbHVlOiAyMDAwMDBuIH0sIHdhbGxldEtleXMsIHtcbiAgICAgIHNjcmlwdElkOiB7IGNoYWluOiAwLCBpbmRleDogMSB9LFxuICAgIH0pO1xuICAgIHBzYnQuYWRkV2FsbGV0T3V0cHV0KHdhbGxldEtleXMsIHsgY2hhaW46IDEsIGluZGV4OiAwLCB2YWx1ZTogMTAwMDAwbiB9KTtcbiAgICBjb25zdCBleHRlcm5hbFNjcmlwdCA9IHdhc21BZGRyZXNzLnRvT3V0cHV0U2NyaXB0V2l0aENvaW4odGVzdG5ldFdhbGxldC50cmFuc3BhcmVudEFkZHJlc3MsICd0emVjJyk7XG4gICAgcHNidC5hZGRUcmFuc3BhcmVudE91dHB1dChleHRlcm5hbFNjcmlwdCwgMTIzNDVuLCB1bmlmaWVkQWRkcmVzcyk7XG4gICAgcmV0dXJuIHBzYnQ7XG4gIH1cblxuICBmdW5jdGlvbiBidWlsZFY2UHNidCh1bmlmaWVkQWRkcmVzcz86IHN0cmluZyk6IGZpeGVkU2NyaXB0V2FsbGV0LlpjYXNoSXJvbndvb2RCaXRHb1BzYnQge1xuICAgIGNvbnN0IHBzYnQgPSBmaXhlZFNjcmlwdFdhbGxldC5aY2FzaElyb253b29kQml0R29Qc2J0LmNyZWF0ZUVtcHR5KCd0emVjJywgd2FsbGV0S2V5cywge1xuICAgICAgYmxvY2tIZWlnaHQ6IElST05XT09EX0hFSUdIVCxcbiAgICB9KTtcbiAgICBwc2J0LmFkZFdhbGxldElucHV0KHsgdHhpZDogJzExJy5yZXBlYXQoMzIpLCB2b3V0OiAwLCB2YWx1ZTogMTAwMDAwbiB9LCB3YWxsZXRLZXlzLCB7XG4gICAgICBzY3JpcHRJZDogeyBjaGFpbjogMCwgaW5kZXg6IDAgfSxcbiAgICB9KTtcbiAgICBwc2J0LmFkZFdhbGxldE91dHB1dCh3YWxsZXRLZXlzLCB7IGNoYWluOiAxLCBpbmRleDogMCwgdmFsdWU6IDkwMDAwbiB9KTtcbiAgICBwc2J0LmFkZFNoaWVsZGVkT3V0cHV0cyhcbiAgICAgIFt7IHJlY2lwaWVudDogbmV3IFVpbnQ4QXJyYXkoSVJPTldPT0RfUkVDRUlWRVIpLCBhbW91bnQ6IDUwMDBuLCB1bmlmaWVkQWRkcmVzcyB9XSxcbiAgICAgIG5ldyBVaW50OEFycmF5KDMyKSAvLyBhbGwtemVybyBhbmNob3IsIGFzIGluIHRoZSB1dHhvLWNvcmUgc2hpZWxkZWQgYnVpbGQgdGVzdHNcbiAgICApO1xuICAgIHJldHVybiBwc2J0O1xuICB9XG5cbiAgaXQoJ3Jlc29sdmVzIGV4dGVybmFsIHRyYW5zcGFyZW50IG91dHB1dHMgYW5kIGV4Y2x1ZGVzIHdhbGxldCBjaGFuZ2UgKHY0KScsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCByZWNpcGllbnRzID0gcmVzb2x2ZVBzYnRSZWNpcGllbnRzKGJ1aWxkVjRQc2J0KCksIHdhbGxldEtleXMpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZWNpcGllbnRzLmxlbmd0aCwgMSk7XG4gICAgY29uc3QgcmVjaXBpZW50ID0gcmVjaXBpZW50c1swXTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVjaXBpZW50LmRlc3RpbmF0aW9uLmtpbmQsICd0cmFuc3BhcmVudCcpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZWNpcGllbnQuYWRkcmVzcywgdGVzdG5ldFdhbGxldC50cmFuc3BhcmVudEFkZHJlc3MpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZWNpcGllbnQuYW1vdW50LCAxMjM0NW4pO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZWNpcGllbnQudW5pZmllZEFkZHJlc3MsIHVuZGVmaW5lZCk7XG4gICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChcbiAgICAgIEJ1ZmZlci5mcm9tKHJlY2lwaWVudC5zY3JpcHQpLFxuICAgICAgQnVmZmVyLmZyb20od2FzbUFkZHJlc3MudG9PdXRwdXRTY3JpcHRXaXRoQ29pbih0ZXN0bmV0V2FsbGV0LnRyYW5zcGFyZW50QWRkcmVzcywgJ3R6ZWMnKSlcbiAgICApO1xuICB9KTtcblxuICBpdCgncmVwb3J0cyB0aGUgb3JpZ2luYWwgVUEgdmVyYmF0aW0gZm9yIGEgdHJhbnNwYXJlbnQgb3V0cHV0IGJ1aWx0IGZyb20gYSBVbmlmaWVkIEFkZHJlc3MgKHY0KScsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCByZWNpcGllbnRzID0gcmVzb2x2ZVBzYnRSZWNpcGllbnRzKGJ1aWxkVjRQc2J0KHRlc3RuZXRXYWxsZXQudW5pZmllZCksIHdhbGxldEtleXMpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZWNpcGllbnRzLmxlbmd0aCwgMSk7XG4gICAgY29uc3QgcmVjaXBpZW50ID0gcmVjaXBpZW50c1swXTtcbiAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHJlY2lwaWVudC5kZXN0aW5hdGlvbiwge1xuICAgICAga2luZDogJ3pjYXNoVW5pZmllZFRyYW5zcGFyZW50JyxcbiAgICAgIHVuaWZpZWRBZGRyZXNzOiB0ZXN0bmV0V2FsbGV0LnVuaWZpZWQsXG4gICAgfSk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlY2lwaWVudC51bmlmaWVkQWRkcmVzcywgdGVzdG5ldFdhbGxldC51bmlmaWVkKTtcbiAgICAvLyBGb3IgYSB0cmFuc3BhcmVudCBvdXRwdXQgYnVpbHQgZnJvbSBhIFVuaWZpZWQgQWRkcmVzcywgdGhlIHBhcnNlZCBhZGRyZXNzIGlzIHRoZSBVQVxuICAgIC8vIGl0c2VsZiAodmVyYmF0aW0pLCBub3QganVzdCB0aGUgdHJhbnNwYXJlbnQgcmVjZWl2ZXIuXG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlY2lwaWVudC5hZGRyZXNzLCB0ZXN0bmV0V2FsbGV0LnVuaWZpZWQpO1xuICB9KTtcblxuICBpdCgncmVzb2x2ZXMgYSBzaGllbGRlZCB2NiBvdXRwdXQgdG8gaXRzIChyZS1lbmNvZGVkKSBPcmNoYXJkIFVuaWZpZWQgQWRkcmVzcyByZWNpcGllbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgcmVjaXBpZW50cyA9IHJlc29sdmVQc2J0UmVjaXBpZW50cyhidWlsZFY2UHNidCgpLCB3YWxsZXRLZXlzKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVjaXBpZW50cy5sZW5ndGgsIDEpO1xuICAgIGNvbnN0IHJlY2lwaWVudCA9IHJlY2lwaWVudHNbMF07XG4gICAgY29uc3QgZXhwZWN0ZWRBZGRyZXNzID0gZml4ZWRTY3JpcHRXYWxsZXQuWmNhc2hVbmlmaWVkQWRkcmVzcy5lbmNvZGVPcmNoYXJkUmVjZWl2ZXIoXG4gICAgICBuZXcgVWludDhBcnJheShJUk9OV09PRF9SRUNFSVZFUiksXG4gICAgICAndHplYydcbiAgICApO1xuICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwocmVjaXBpZW50LmRlc3RpbmF0aW9uLCB7XG4gICAgICBraW5kOiAnemNhc2hTaGllbGRlZCcsXG4gICAgICB1bmlmaWVkQWRkcmVzczogZXhwZWN0ZWRBZGRyZXNzLFxuICAgIH0pO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZWNpcGllbnQuYWRkcmVzcywgZXhwZWN0ZWRBZGRyZXNzKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVjaXBpZW50LmFtb3VudCwgNTAwMG4pO1xuICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoQnVmZmVyLmZyb20ocmVjaXBpZW50LnNjcmlwdCksIElST05XT09EX1JFQ0VJVkVSKTtcbiAgfSk7XG5cbiAgaXQoJ3JlcG9ydHMgdGhlIG9yaWdpbmFsIFVBIHZlcmJhdGltIGZvciBhIHNoaWVsZGVkIG91dHB1dCBidWlsdCBmcm9tIGEgVW5pZmllZCBBZGRyZXNzICh2NiknLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qgb3JjaGFyZE9ubHlVYSA9IGZpeGVkU2NyaXB0V2FsbGV0LlpjYXNoVW5pZmllZEFkZHJlc3MuZW5jb2RlT3JjaGFyZFJlY2VpdmVyKFxuICAgICAgbmV3IFVpbnQ4QXJyYXkoSVJPTldPT0RfUkVDRUlWRVIpLFxuICAgICAgJ3R6ZWMnXG4gICAgKTtcbiAgICBjb25zdCByZWNpcGllbnRzID0gcmVzb2x2ZVBzYnRSZWNpcGllbnRzKGJ1aWxkVjZQc2J0KG9yY2hhcmRPbmx5VWEpLCB3YWxsZXRLZXlzKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVjaXBpZW50cy5sZW5ndGgsIDEpO1xuICAgIGNvbnN0IHJlY2lwaWVudCA9IHJlY2lwaWVudHNbMF07XG4gICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChyZWNpcGllbnQuZGVzdGluYXRpb24sIHsga2luZDogJ3pjYXNoU2hpZWxkZWQnLCB1bmlmaWVkQWRkcmVzczogb3JjaGFyZE9ubHlVYSB9KTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVjaXBpZW50LnVuaWZpZWRBZGRyZXNzLCBvcmNoYXJkT25seVVhKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVjaXBpZW50LmFkZHJlc3MsIG9yY2hhcmRPbmx5VWEpO1xuICB9KTtcbn0pO1xuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unifiedRecipientPreference.d.ts","sourceRoot":"","sources":["../../../../../../../test/unit/impl/zec/unit/unifiedRecipientPreference.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const strict_1 = __importDefault(require("node:assert/strict"));
|
|
7
|
+
const wasm_utxo_1 = require("@bitgo/wasm-utxo");
|
|
8
|
+
const recipients_1 = require("../../../../../src/impl/zec/recipients");
|
|
9
|
+
// ZIP-316 unified-address test vectors, copied from
|
|
10
|
+
// BitGoWASM/packages/wasm-utxo/test/fixtures/zcash/unified_address.json so
|
|
11
|
+
// both repos test against the same known-good data.
|
|
12
|
+
const zip316Mainnet = {
|
|
13
|
+
unified: 'u1pg2aaph7jp8rpf6yhsza25722sg5fcn3vaca6ze27hqjw7jvvhhuxkpcg0ge9xh6drsgdkda8qjq5chpehkcpxf87rnjryjqwymdheptpvnljqqrjqzjwkc2ma6hcq666kgwfytxwac8eyex6ndgr6ezte66706e3vaqrd25dzvzkc69kw0jgywtd0cmq52q5lkw6uh7hyvzjse8ksx',
|
|
14
|
+
};
|
|
15
|
+
const testnetWallet = {
|
|
16
|
+
unified: 'utest1w5m0qcnp8egl8qa296n70n8nvj0tqnzk90p7f48v7mjhhdrdqs8vgqydslg5plmzefawefnpmgmlm6hcy38m972erwxs04s02cq2prhguz8kqly75m6zjy56m08d5jnycgtpqtjeprte576gkmrxyszepgx76yzuwhh7m4lfz9jaq7unjk0x5ant46juxz73hsc6q4v3dqtzww00vps',
|
|
17
|
+
transparentAddress: 'tmM4DvLVJKXZt5ydn1tqYTHvahpKSwgjuRk',
|
|
18
|
+
};
|
|
19
|
+
describe('getUnifiedRecipientPreference', function () {
|
|
20
|
+
function orchardOnlyUa(network) {
|
|
21
|
+
return wasm_utxo_1.fixedScriptWallet.ZcashUnifiedAddress.encodeOrchardReceiver(new Uint8Array(43).fill(0x42), network);
|
|
22
|
+
}
|
|
23
|
+
it('returns undefined for no recipients', function () {
|
|
24
|
+
strict_1.default.strictEqual((0, recipients_1.getUnifiedRecipientPreference)('tzec', []), undefined);
|
|
25
|
+
});
|
|
26
|
+
it('returns undefined for an ordinary transparent address', function () {
|
|
27
|
+
strict_1.default.strictEqual((0, recipients_1.getUnifiedRecipientPreference)('tzec', [{ address: testnetWallet.transparentAddress }]), undefined);
|
|
28
|
+
});
|
|
29
|
+
it('returns undefined for a raw-script recipient with no address', function () {
|
|
30
|
+
strict_1.default.strictEqual((0, recipients_1.getUnifiedRecipientPreference)('tzec', [{ address: undefined }]), undefined);
|
|
31
|
+
});
|
|
32
|
+
it("returns 'shielded' for an Orchard-only Unified Address", function () {
|
|
33
|
+
strict_1.default.strictEqual((0, recipients_1.getUnifiedRecipientPreference)('tzec', [{ address: orchardOnlyUa('tzec') }]), 'shielded');
|
|
34
|
+
});
|
|
35
|
+
it("infers 'shielded' on mainnet", function () {
|
|
36
|
+
strict_1.default.strictEqual((0, recipients_1.getUnifiedRecipientPreference)('zec', [{ address: orchardOnlyUa('zec') }]), 'shielded');
|
|
37
|
+
});
|
|
38
|
+
it('classifies a Unified Address carrying transparent + Orchard receivers as transparent', function () {
|
|
39
|
+
// Both official vectors carry a transparent receiver alongside the Orchard one, so the
|
|
40
|
+
// transparent-first classification applies even though they also classify as shielded.
|
|
41
|
+
strict_1.default.strictEqual((0, recipients_1.getUnifiedRecipientPreference)('tzec', [{ address: testnetWallet.unified }]), undefined);
|
|
42
|
+
strict_1.default.strictEqual((0, recipients_1.getUnifiedRecipientPreference)('zec', [{ address: zip316Mainnet.unified }]), undefined);
|
|
43
|
+
});
|
|
44
|
+
it('fails hard for an unrecognizable address instead of defaulting to transparent', function () {
|
|
45
|
+
strict_1.default.throws(() => (0, recipients_1.getUnifiedRecipientPreference)('tzec', [{ address: 'not-an-address' }]));
|
|
46
|
+
});
|
|
47
|
+
it('fails hard for a unified address on the wrong network', function () {
|
|
48
|
+
strict_1.default.throws(() => (0, recipients_1.getUnifiedRecipientPreference)('tzec', [{ address: zip316Mainnet.unified }]));
|
|
49
|
+
});
|
|
50
|
+
it('rejects a mix of shielded and transparent recipients', function () {
|
|
51
|
+
strict_1.default.throws(() => (0, recipients_1.getUnifiedRecipientPreference)('tzec', [
|
|
52
|
+
{ address: orchardOnlyUa('tzec') },
|
|
53
|
+
{ address: testnetWallet.transparentAddress },
|
|
54
|
+
]), /Mixed shielded and transparent recipients/);
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5pZmllZFJlY2lwaWVudFByZWZlcmVuY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvaW1wbC96ZWMvdW5pdC91bmlmaWVkUmVjaXBpZW50UHJlZmVyZW5jZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLGdFQUF3QztBQUV4QyxnREFBcUQ7QUFFckQsdUVBQXVGO0FBRXZGLG9EQUFvRDtBQUNwRCwyRUFBMkU7QUFDM0Usb0RBQW9EO0FBQ3BELE1BQU0sYUFBYSxHQUFHO0lBQ3BCLE9BQU8sRUFDTCx1TkFBdU47Q0FDMU4sQ0FBQztBQUNGLE1BQU0sYUFBYSxHQUFHO0lBQ3BCLE9BQU8sRUFDTCwyTkFBMk47SUFDN04sa0JBQWtCLEVBQUUscUNBQXFDO0NBQzFELENBQUM7QUFFRixRQUFRLENBQUMsK0JBQStCLEVBQUU7SUFDeEMsU0FBUyxhQUFhLENBQUMsT0FBdUI7UUFDNUMsT0FBTyw2QkFBaUIsQ0FBQyxtQkFBbUIsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDN0csQ0FBQztJQUVELEVBQUUsQ0FBQyxxQ0FBcUMsRUFBRTtRQUN4QyxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFBLDBDQUE2QixFQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUMzRSxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyx1REFBdUQsRUFBRTtRQUMxRCxnQkFBTSxDQUFDLFdBQVcsQ0FDaEIsSUFBQSwwQ0FBNkIsRUFBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxhQUFhLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDLEVBQ3RGLFNBQVMsQ0FDVixDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsOERBQThELEVBQUU7UUFDakUsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSwwQ0FBNkIsRUFBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDakcsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsd0RBQXdELEVBQUU7UUFDM0QsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSwwQ0FBNkIsRUFBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxhQUFhLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDOUcsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsOEJBQThCLEVBQUU7UUFDakMsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSwwQ0FBNkIsRUFBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxhQUFhLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDNUcsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsc0ZBQXNGLEVBQUU7UUFDekYsdUZBQXVGO1FBQ3ZGLHVGQUF1RjtRQUN2RixnQkFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFBLDBDQUE2QixFQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLGFBQWEsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDM0csZ0JBQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSwwQ0FBNkIsRUFBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxhQUFhLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzVHLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLCtFQUErRSxFQUFFO1FBQ2xGLGdCQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUEsMENBQTZCLEVBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5RixDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyx1REFBdUQsRUFBRTtRQUMxRCxnQkFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFBLDBDQUE2QixFQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLGFBQWEsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuRyxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxzREFBc0QsRUFBRTtRQUN6RCxnQkFBTSxDQUFDLE1BQU0sQ0FDWCxHQUFHLEVBQUUsQ0FDSCxJQUFBLDBDQUE2QixFQUFDLE1BQU0sRUFBRTtZQUNwQyxFQUFFLE9BQU8sRUFBRSxhQUFhLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDbEMsRUFBRSxPQUFPLEVBQUUsYUFBYSxDQUFDLGtCQUFrQixFQUFFO1NBQzlDLENBQUMsRUFDSiwyQ0FBMkMsQ0FDNUMsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ25vZGU6YXNzZXJ0L3N0cmljdCc7XG5cbmltcG9ydCB7IGZpeGVkU2NyaXB0V2FsbGV0IH0gZnJvbSAnQGJpdGdvL3dhc20tdXR4byc7XG5cbmltcG9ydCB7IGdldFVuaWZpZWRSZWNpcGllbnRQcmVmZXJlbmNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vc3JjL2ltcGwvemVjL3JlY2lwaWVudHMnO1xuXG4vLyBaSVAtMzE2IHVuaWZpZWQtYWRkcmVzcyB0ZXN0IHZlY3RvcnMsIGNvcGllZCBmcm9tXG4vLyBCaXRHb1dBU00vcGFja2FnZXMvd2FzbS11dHhvL3Rlc3QvZml4dHVyZXMvemNhc2gvdW5pZmllZF9hZGRyZXNzLmpzb24gc29cbi8vIGJvdGggcmVwb3MgdGVzdCBhZ2FpbnN0IHRoZSBzYW1lIGtub3duLWdvb2QgZGF0YS5cbmNvbnN0IHppcDMxNk1haW5uZXQgPSB7XG4gIHVuaWZpZWQ6XG4gICAgJ3UxcGcyYWFwaDdqcDhycGY2eWhzemEyNTcyMnNnNWZjbjN2YWNhNnplMjdocWp3N2p2dmhodXhrcGNnMGdlOXhoNmRyc2dka2RhOHFqcTVjaHBlaGtjcHhmODdybmpyeWpxd3ltZGhlcHRwdm5sanFxcmpxemp3a2MybWE2aGNxNjY2a2d3Znl0eHdhYzhleWV4Nm5kZ3I2ZXp0ZTY2NzA2ZTN2YXFyZDI1ZHp2emtjNjlrdzBqZ3l3dGQwY21xNTJxNWxrdzZ1aDdoeXZ6anNlOGtzeCcsXG59O1xuY29uc3QgdGVzdG5ldFdhbGxldCA9IHtcbiAgdW5pZmllZDpcbiAgICAndXRlc3QxdzVtMHFjbnA4ZWdsOHFhMjk2bjcwbjhudmowdHFuems5MHA3ZjQ4djdtamhoZHJkcXM4dmdxeWRzbGc1cGxtemVmYXdlZm5wbWdtbG02aGN5MzhtOTcyZXJ3eHMwNHMwMmNxMnByaGd1ejhrcWx5NzVtNnpqeTU2bTA4ZDVqbnljZ3RwcXRqZXBydGU1NzZna21yeHlzemVwZ3g3Nnl6dXdoaDdtNGxmejlqYXE3dW5qazB4NWFudDQ2anV4ejczaHNjNnE0djNkcXR6d3cwMHZwcycsXG4gIHRyYW5zcGFyZW50QWRkcmVzczogJ3RtTTREdkxWSktYWnQ1eWRuMXRxWVRIdmFocEtTd2dqdVJrJyxcbn07XG5cbmRlc2NyaWJlKCdnZXRVbmlmaWVkUmVjaXBpZW50UHJlZmVyZW5jZScsIGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gb3JjaGFyZE9ubHlVYShuZXR3b3JrOiAnemVjJyB8ICd0emVjJyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGZpeGVkU2NyaXB0V2FsbGV0LlpjYXNoVW5pZmllZEFkZHJlc3MuZW5jb2RlT3JjaGFyZFJlY2VpdmVyKG5ldyBVaW50OEFycmF5KDQzKS5maWxsKDB4NDIpLCBuZXR3b3JrKTtcbiAgfVxuXG4gIGl0KCdyZXR1cm5zIHVuZGVmaW5lZCBmb3Igbm8gcmVjaXBpZW50cycsIGZ1bmN0aW9uICgpIHtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZ2V0VW5pZmllZFJlY2lwaWVudFByZWZlcmVuY2UoJ3R6ZWMnLCBbXSksIHVuZGVmaW5lZCk7XG4gIH0pO1xuXG4gIGl0KCdyZXR1cm5zIHVuZGVmaW5lZCBmb3IgYW4gb3JkaW5hcnkgdHJhbnNwYXJlbnQgYWRkcmVzcycsIGZ1bmN0aW9uICgpIHtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoXG4gICAgICBnZXRVbmlmaWVkUmVjaXBpZW50UHJlZmVyZW5jZSgndHplYycsIFt7IGFkZHJlc3M6IHRlc3RuZXRXYWxsZXQudHJhbnNwYXJlbnRBZGRyZXNzIH1dKSxcbiAgICAgIHVuZGVmaW5lZFxuICAgICk7XG4gIH0pO1xuXG4gIGl0KCdyZXR1cm5zIHVuZGVmaW5lZCBmb3IgYSByYXctc2NyaXB0IHJlY2lwaWVudCB3aXRoIG5vIGFkZHJlc3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGdldFVuaWZpZWRSZWNpcGllbnRQcmVmZXJlbmNlKCd0emVjJywgW3sgYWRkcmVzczogdW5kZWZpbmVkIH1dKSwgdW5kZWZpbmVkKTtcbiAgfSk7XG5cbiAgaXQoXCJyZXR1cm5zICdzaGllbGRlZCcgZm9yIGFuIE9yY2hhcmQtb25seSBVbmlmaWVkIEFkZHJlc3NcIiwgZnVuY3Rpb24gKCkge1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChnZXRVbmlmaWVkUmVjaXBpZW50UHJlZmVyZW5jZSgndHplYycsIFt7IGFkZHJlc3M6IG9yY2hhcmRPbmx5VWEoJ3R6ZWMnKSB9XSksICdzaGllbGRlZCcpO1xuICB9KTtcblxuICBpdChcImluZmVycyAnc2hpZWxkZWQnIG9uIG1haW5uZXRcIiwgZnVuY3Rpb24gKCkge1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChnZXRVbmlmaWVkUmVjaXBpZW50UHJlZmVyZW5jZSgnemVjJywgW3sgYWRkcmVzczogb3JjaGFyZE9ubHlVYSgnemVjJykgfV0pLCAnc2hpZWxkZWQnKTtcbiAgfSk7XG5cbiAgaXQoJ2NsYXNzaWZpZXMgYSBVbmlmaWVkIEFkZHJlc3MgY2FycnlpbmcgdHJhbnNwYXJlbnQgKyBPcmNoYXJkIHJlY2VpdmVycyBhcyB0cmFuc3BhcmVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAvLyBCb3RoIG9mZmljaWFsIHZlY3RvcnMgY2FycnkgYSB0cmFuc3BhcmVudCByZWNlaXZlciBhbG9uZ3NpZGUgdGhlIE9yY2hhcmQgb25lLCBzbyB0aGVcbiAgICAvLyB0cmFuc3BhcmVudC1maXJzdCBjbGFzc2lmaWNhdGlvbiBhcHBsaWVzIGV2ZW4gdGhvdWdoIHRoZXkgYWxzbyBjbGFzc2lmeSBhcyBzaGllbGRlZC5cbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZ2V0VW5pZmllZFJlY2lwaWVudFByZWZlcmVuY2UoJ3R6ZWMnLCBbeyBhZGRyZXNzOiB0ZXN0bmV0V2FsbGV0LnVuaWZpZWQgfV0pLCB1bmRlZmluZWQpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChnZXRVbmlmaWVkUmVjaXBpZW50UHJlZmVyZW5jZSgnemVjJywgW3sgYWRkcmVzczogemlwMzE2TWFpbm5ldC51bmlmaWVkIH1dKSwgdW5kZWZpbmVkKTtcbiAgfSk7XG5cbiAgaXQoJ2ZhaWxzIGhhcmQgZm9yIGFuIHVucmVjb2duaXphYmxlIGFkZHJlc3MgaW5zdGVhZCBvZiBkZWZhdWx0aW5nIHRvIHRyYW5zcGFyZW50JywgZnVuY3Rpb24gKCkge1xuICAgIGFzc2VydC50aHJvd3MoKCkgPT4gZ2V0VW5pZmllZFJlY2lwaWVudFByZWZlcmVuY2UoJ3R6ZWMnLCBbeyBhZGRyZXNzOiAnbm90LWFuLWFkZHJlc3MnIH1dKSk7XG4gIH0pO1xuXG4gIGl0KCdmYWlscyBoYXJkIGZvciBhIHVuaWZpZWQgYWRkcmVzcyBvbiB0aGUgd3JvbmcgbmV0d29yaycsIGZ1bmN0aW9uICgpIHtcbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IGdldFVuaWZpZWRSZWNpcGllbnRQcmVmZXJlbmNlKCd0emVjJywgW3sgYWRkcmVzczogemlwMzE2TWFpbm5ldC51bmlmaWVkIH1dKSk7XG4gIH0pO1xuXG4gIGl0KCdyZWplY3RzIGEgbWl4IG9mIHNoaWVsZGVkIGFuZCB0cmFuc3BhcmVudCByZWNpcGllbnRzJywgZnVuY3Rpb24gKCkge1xuICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAoKSA9PlxuICAgICAgICBnZXRVbmlmaWVkUmVjaXBpZW50UHJlZmVyZW5jZSgndHplYycsIFtcbiAgICAgICAgICB7IGFkZHJlc3M6IG9yY2hhcmRPbmx5VWEoJ3R6ZWMnKSB9LFxuICAgICAgICAgIHsgYWRkcmVzczogdGVzdG5ldFdhbGxldC50cmFuc3BhcmVudEFkZHJlc3MgfSxcbiAgICAgICAgXSksXG4gICAgICAvTWl4ZWQgc2hpZWxkZWQgYW5kIHRyYW5zcGFyZW50IHJlY2lwaWVudHMvXG4gICAgKTtcbiAgfSk7XG59KTtcbiJdfQ==
|