@bitgo/abstract-utxo 9.10.0 → 9.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/dist/src/core/descriptor/DescriptorMap.d.ts +1 -1
- package/dist/src/core/descriptor/DescriptorMap.d.ts.map +1 -1
- package/dist/src/core/descriptor/DescriptorMap.js +5 -2
- package/dist/src/descriptor/NamedDescriptor.d.ts +7 -2
- package/dist/src/descriptor/NamedDescriptor.d.ts.map +1 -1
- package/dist/src/descriptor/NamedDescriptor.js +15 -7
- package/dist/src/descriptor/createWallet/createDescriptors.d.ts.map +1 -1
- package/dist/src/descriptor/createWallet/createDescriptors.js +7 -5
- package/dist/src/descriptor/index.d.ts +1 -1
- package/dist/src/descriptor/index.d.ts.map +1 -1
- package/dist/src/descriptor/index.js +4 -2
- package/dist/src/descriptor/validatePolicy.d.ts +14 -5
- package/dist/src/descriptor/validatePolicy.d.ts.map +1 -1
- package/dist/src/descriptor/validatePolicy.js +71 -28
- package/dist/test/descriptor/descriptorWallet.js +3 -2
- package/dist/test/transaction/descriptor/validatePolicy.d.ts +2 -0
- package/dist/test/transaction/descriptor/validatePolicy.d.ts.map +1 -0
- package/dist/test/transaction/descriptor/validatePolicy.js +40 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +4 -4
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,18 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# [9.11.0](https://github.com/BitGo/BitGoJS/compare/@bitgo/abstract-utxo@9.10.0...@bitgo/abstract-utxo@9.11.0) (2025-01-09)
|
|
7
|
+
|
|
8
|
+
### Bug Fixes
|
|
9
|
+
|
|
10
|
+
- **abstract-utxo:** check if external and internal descriptors are different ([10a48c3](https://github.com/BitGo/BitGoJS/commit/10a48c3b90bb985206a3eb808e2f454e1d8e292a))
|
|
11
|
+
|
|
12
|
+
### Features
|
|
13
|
+
|
|
14
|
+
- **abstract-utxo:** allow signed descriptors in prod policy ([a19606a](https://github.com/BitGo/BitGoJS/commit/a19606aa68e527bb0457e926e2b263d18c7e0f45))
|
|
15
|
+
- add example for createDescriptorWalletWithWalletPassphrase ([384ed92](https://github.com/BitGo/BitGoJS/commit/384ed9221c14eca4235b152d4a848d16d68aaf14))
|
|
16
|
+
- export createNamedDescriptorWithSignature ([8856442](https://github.com/BitGo/BitGoJS/commit/885644217954e1a8d5736d11dff2aa171c1ace11))
|
|
17
|
+
|
|
6
18
|
# [9.10.0](https://github.com/BitGo/BitGoJS/compare/@bitgo/abstract-utxo@9.9.0...@bitgo/abstract-utxo@9.10.0) (2025-01-03)
|
|
7
19
|
|
|
8
20
|
### Features
|
|
@@ -4,6 +4,6 @@ export type DescriptorMap = Map<string, Descriptor>;
|
|
|
4
4
|
/** Convert an array of descriptor name-value pairs to a descriptor map */
|
|
5
5
|
export declare function toDescriptorMap(descriptors: {
|
|
6
6
|
name: string;
|
|
7
|
-
value: string;
|
|
7
|
+
value: Descriptor | string;
|
|
8
8
|
}[]): DescriptorMap;
|
|
9
9
|
//# sourceMappingURL=DescriptorMap.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DescriptorMap.d.ts","sourceRoot":"","sources":["../../../../src/core/descriptor/DescriptorMap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,6CAA6C;AAC7C,MAAM,MAAM,aAAa,GAAG,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAEpD,0EAA0E;AAC1E,wBAAgB,eAAe,CAAC,WAAW,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAAE,GAAG,aAAa,
|
|
1
|
+
{"version":3,"file":"DescriptorMap.d.ts","sourceRoot":"","sources":["../../../../src/core/descriptor/DescriptorMap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,6CAA6C;AAC7C,MAAM,MAAM,aAAa,GAAG,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAEpD,0EAA0E;AAC1E,wBAAgB,eAAe,CAAC,WAAW,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAAA;CAAE,EAAE,GAAG,aAAa,CAO1G"}
|
|
@@ -4,6 +4,9 @@ exports.toDescriptorMap = toDescriptorMap;
|
|
|
4
4
|
const wasm_miniscript_1 = require("@bitgo/wasm-miniscript");
|
|
5
5
|
/** Convert an array of descriptor name-value pairs to a descriptor map */
|
|
6
6
|
function toDescriptorMap(descriptors) {
|
|
7
|
-
return new Map(descriptors.map((d) => [
|
|
7
|
+
return new Map(descriptors.map((d) => [
|
|
8
|
+
d.name,
|
|
9
|
+
d.value instanceof wasm_miniscript_1.Descriptor ? d.value : wasm_miniscript_1.Descriptor.fromString(d.value, 'derivable'),
|
|
10
|
+
]));
|
|
8
11
|
}
|
|
9
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVzY3JpcHRvck1hcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb3JlL2Rlc2NyaXB0b3IvRGVzY3JpcHRvck1hcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQU1BLDBDQU9DO0FBYkQsNERBQW9EO0FBS3BELDBFQUEwRTtBQUMxRSxTQUFnQixlQUFlLENBQUMsV0FBMkQ7SUFDekYsT0FBTyxJQUFJLEdBQUcsQ0FDWixXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNyQixDQUFDLENBQUMsSUFBSTtRQUNOLENBQUMsQ0FBQyxLQUFLLFlBQVksNEJBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsNEJBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUM7S0FDdEYsQ0FBQyxDQUNILENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGVzY3JpcHRvciB9IGZyb20gJ0BiaXRnby93YXNtLW1pbmlzY3JpcHQnO1xuXG4vKiogTWFwIGZyb20gZGVzY3JpcHRvciBuYW1lIHRvIGRlc2NyaXB0b3IgKi9cbmV4cG9ydCB0eXBlIERlc2NyaXB0b3JNYXAgPSBNYXA8c3RyaW5nLCBEZXNjcmlwdG9yPjtcblxuLyoqIENvbnZlcnQgYW4gYXJyYXkgb2YgZGVzY3JpcHRvciBuYW1lLXZhbHVlIHBhaXJzIHRvIGEgZGVzY3JpcHRvciBtYXAgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0Rlc2NyaXB0b3JNYXAoZGVzY3JpcHRvcnM6IHsgbmFtZTogc3RyaW5nOyB2YWx1ZTogRGVzY3JpcHRvciB8IHN0cmluZyB9W10pOiBEZXNjcmlwdG9yTWFwIHtcbiAgcmV0dXJuIG5ldyBNYXAoXG4gICAgZGVzY3JpcHRvcnMubWFwKChkKSA9PiBbXG4gICAgICBkLm5hbWUsXG4gICAgICBkLnZhbHVlIGluc3RhbmNlb2YgRGVzY3JpcHRvciA/IGQudmFsdWUgOiBEZXNjcmlwdG9yLmZyb21TdHJpbmcoZC52YWx1ZSwgJ2Rlcml2YWJsZScpLFxuICAgIF0pXG4gICk7XG59XG4iXX0=
|
|
@@ -7,7 +7,12 @@ export declare const NamedDescriptor: t.IntersectionC<[t.TypeC<{
|
|
|
7
7
|
}>, t.PartialC<{
|
|
8
8
|
signatures: t.UnionC<[t.ArrayC<t.StringC>, t.UndefinedC]>;
|
|
9
9
|
}>]>;
|
|
10
|
-
export type NamedDescriptor =
|
|
11
|
-
|
|
10
|
+
export type NamedDescriptor<T = string> = {
|
|
11
|
+
name: string;
|
|
12
|
+
value: T;
|
|
13
|
+
signatures?: string[];
|
|
14
|
+
};
|
|
15
|
+
export declare function createNamedDescriptorWithSignature(name: string, descriptor: string | Descriptor, signingKey: BIP32Interface): NamedDescriptor;
|
|
16
|
+
export declare function hasValidSignature(descriptor: string | Descriptor, key: BIP32Interface, signatures: string[]): boolean;
|
|
12
17
|
export declare function assertHasValidSignature(namedDescriptor: NamedDescriptor, key: BIP32Interface): void;
|
|
13
18
|
//# sourceMappingURL=NamedDescriptor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NamedDescriptor.d.ts","sourceRoot":"","sources":["../../../src/descriptor/NamedDescriptor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,OAAO,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAY,MAAM,iBAAiB,CAAC;AAG3D,eAAO,MAAM,eAAe;;;;;IAW3B,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"NamedDescriptor.d.ts","sourceRoot":"","sources":["../../../src/descriptor/NamedDescriptor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,OAAO,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAY,MAAM,iBAAiB,CAAC;AAG3D,eAAO,MAAM,eAAe;;;;;IAW3B,CAAC;AAEF,MAAM,MAAM,eAAe,CAAC,CAAC,GAAG,MAAM,IAAI;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,CAAC,CAAC;IACT,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB,CAAC;AAEF,wBAAgB,kCAAkC,CAChD,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,GAAG,UAAU,EAC/B,UAAU,EAAE,cAAc,GACzB,eAAe,CAOjB;AAED,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU,EAAE,GAAG,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CASrH;AAED,wBAAgB,uBAAuB,CAAC,eAAe,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,GAAG,IAAI,CAInG"}
|
|
@@ -35,8 +35,10 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
36
|
exports.NamedDescriptor = void 0;
|
|
37
37
|
exports.createNamedDescriptorWithSignature = createNamedDescriptorWithSignature;
|
|
38
|
+
exports.hasValidSignature = hasValidSignature;
|
|
38
39
|
exports.assertHasValidSignature = assertHasValidSignature;
|
|
39
40
|
const t = __importStar(require("io-ts"));
|
|
41
|
+
const wasm_miniscript_1 = require("@bitgo/wasm-miniscript");
|
|
40
42
|
const utxo_lib_1 = require("@bitgo/utxo-lib");
|
|
41
43
|
const sdk_core_1 = require("@bitgo/sdk-core");
|
|
42
44
|
exports.NamedDescriptor = t.intersection([
|
|
@@ -49,19 +51,25 @@ exports.NamedDescriptor = t.intersection([
|
|
|
49
51
|
}),
|
|
50
52
|
], 'NamedDescriptor');
|
|
51
53
|
function createNamedDescriptorWithSignature(name, descriptor, signingKey) {
|
|
54
|
+
if (typeof descriptor === 'string') {
|
|
55
|
+
descriptor = wasm_miniscript_1.Descriptor.fromString(descriptor, 'derivable');
|
|
56
|
+
}
|
|
52
57
|
const value = descriptor.toString();
|
|
53
58
|
const signature = (0, sdk_core_1.signMessage)(value, signingKey, utxo_lib_1.networks.bitcoin).toString('hex');
|
|
54
59
|
return { name, value, signatures: [signature] };
|
|
55
60
|
}
|
|
56
|
-
function
|
|
57
|
-
if (
|
|
58
|
-
|
|
61
|
+
function hasValidSignature(descriptor, key, signatures) {
|
|
62
|
+
if (typeof descriptor === 'string') {
|
|
63
|
+
descriptor = wasm_miniscript_1.Descriptor.fromString(descriptor, 'derivable');
|
|
59
64
|
}
|
|
60
|
-
const
|
|
61
|
-
|
|
65
|
+
const message = descriptor.toString();
|
|
66
|
+
return signatures.some((signature) => {
|
|
67
|
+
return (0, sdk_core_1.verifyMessage)(message, key, Buffer.from(signature, 'hex'), utxo_lib_1.networks.bitcoin);
|
|
62
68
|
});
|
|
63
|
-
|
|
69
|
+
}
|
|
70
|
+
function assertHasValidSignature(namedDescriptor, key) {
|
|
71
|
+
if (!hasValidSignature(namedDescriptor.value, key, namedDescriptor.signatures ?? [])) {
|
|
64
72
|
throw new Error(`Descriptor ${namedDescriptor.name} does not have a valid signature (key=${key.toBase58()})`);
|
|
65
73
|
}
|
|
66
74
|
}
|
|
67
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
75
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTmFtZWREZXNjcmlwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2Rlc2NyaXB0b3IvTmFtZWREZXNjcmlwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXdCQSxnRkFXQztBQUVELDhDQVNDO0FBRUQsMERBSUM7QUFwREQseUNBQTJCO0FBQzNCLDREQUFvRDtBQUNwRCw4Q0FBMkQ7QUFDM0QsOENBQTZEO0FBRWhELFFBQUEsZUFBZSxHQUFHLENBQUMsQ0FBQyxZQUFZLENBQzNDO0lBQ0UsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNMLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTTtRQUNkLEtBQUssRUFBRSxDQUFDLENBQUMsTUFBTTtLQUNoQixDQUFDO0lBQ0YsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUNSLFVBQVUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0tBQ3RELENBQUM7Q0FDSCxFQUNELGlCQUFpQixDQUNsQixDQUFDO0FBUUYsU0FBZ0Isa0NBQWtDLENBQ2hELElBQVksRUFDWixVQUErQixFQUMvQixVQUEwQjtJQUUxQixJQUFJLE9BQU8sVUFBVSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ25DLFVBQVUsR0FBRyw0QkFBVSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUNELE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNwQyxNQUFNLFNBQVMsR0FBRyxJQUFBLHNCQUFXLEVBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxtQkFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuRixPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO0FBQ2xELENBQUM7QUFFRCxTQUFnQixpQkFBaUIsQ0FBQyxVQUErQixFQUFFLEdBQW1CLEVBQUUsVUFBb0I7SUFDMUcsSUFBSSxPQUFPLFVBQVUsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUNuQyxVQUFVLEdBQUcsNEJBQVUsQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRCxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDdEMsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUU7UUFDbkMsT0FBTyxJQUFBLHdCQUFhLEVBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsRUFBRSxtQkFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3RGLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELFNBQWdCLHVCQUF1QixDQUFDLGVBQWdDLEVBQUUsR0FBbUI7SUFDM0YsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLGVBQWUsQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUNyRixNQUFNLElBQUksS0FBSyxDQUFDLGNBQWMsZUFBZSxDQUFDLElBQUkseUNBQXlDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDaEgsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyB0IGZyb20gJ2lvLXRzJztcbmltcG9ydCB7IERlc2NyaXB0b3IgfSBmcm9tICdAYml0Z28vd2FzbS1taW5pc2NyaXB0JztcbmltcG9ydCB7IEJJUDMySW50ZXJmYWNlLCBuZXR3b3JrcyB9IGZyb20gJ0BiaXRnby91dHhvLWxpYic7XG5pbXBvcnQgeyBzaWduTWVzc2FnZSwgdmVyaWZ5TWVzc2FnZSB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5cbmV4cG9ydCBjb25zdCBOYW1lZERlc2NyaXB0b3IgPSB0LmludGVyc2VjdGlvbihcbiAgW1xuICAgIHQudHlwZSh7XG4gICAgICBuYW1lOiB0LnN0cmluZyxcbiAgICAgIHZhbHVlOiB0LnN0cmluZyxcbiAgICB9KSxcbiAgICB0LnBhcnRpYWwoe1xuICAgICAgc2lnbmF0dXJlczogdC51bmlvbihbdC5hcnJheSh0LnN0cmluZyksIHQudW5kZWZpbmVkXSksXG4gICAgfSksXG4gIF0sXG4gICdOYW1lZERlc2NyaXB0b3InXG4pO1xuXG5leHBvcnQgdHlwZSBOYW1lZERlc2NyaXB0b3I8VCA9IHN0cmluZz4gPSB7XG4gIG5hbWU6IHN0cmluZztcbiAgdmFsdWU6IFQ7XG4gIHNpZ25hdHVyZXM/OiBzdHJpbmdbXTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVOYW1lZERlc2NyaXB0b3JXaXRoU2lnbmF0dXJlKFxuICBuYW1lOiBzdHJpbmcsXG4gIGRlc2NyaXB0b3I6IHN0cmluZyB8IERlc2NyaXB0b3IsXG4gIHNpZ25pbmdLZXk6IEJJUDMySW50ZXJmYWNlXG4pOiBOYW1lZERlc2NyaXB0b3Ige1xuICBpZiAodHlwZW9mIGRlc2NyaXB0b3IgPT09ICdzdHJpbmcnKSB7XG4gICAgZGVzY3JpcHRvciA9IERlc2NyaXB0b3IuZnJvbVN0cmluZyhkZXNjcmlwdG9yLCAnZGVyaXZhYmxlJyk7XG4gIH1cbiAgY29uc3QgdmFsdWUgPSBkZXNjcmlwdG9yLnRvU3RyaW5nKCk7XG4gIGNvbnN0IHNpZ25hdHVyZSA9IHNpZ25NZXNzYWdlKHZhbHVlLCBzaWduaW5nS2V5LCBuZXR3b3Jrcy5iaXRjb2luKS50b1N0cmluZygnaGV4Jyk7XG4gIHJldHVybiB7IG5hbWUsIHZhbHVlLCBzaWduYXR1cmVzOiBbc2lnbmF0dXJlXSB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzVmFsaWRTaWduYXR1cmUoZGVzY3JpcHRvcjogc3RyaW5nIHwgRGVzY3JpcHRvciwga2V5OiBCSVAzMkludGVyZmFjZSwgc2lnbmF0dXJlczogc3RyaW5nW10pOiBib29sZWFuIHtcbiAgaWYgKHR5cGVvZiBkZXNjcmlwdG9yID09PSAnc3RyaW5nJykge1xuICAgIGRlc2NyaXB0b3IgPSBEZXNjcmlwdG9yLmZyb21TdHJpbmcoZGVzY3JpcHRvciwgJ2Rlcml2YWJsZScpO1xuICB9XG5cbiAgY29uc3QgbWVzc2FnZSA9IGRlc2NyaXB0b3IudG9TdHJpbmcoKTtcbiAgcmV0dXJuIHNpZ25hdHVyZXMuc29tZSgoc2lnbmF0dXJlKSA9PiB7XG4gICAgcmV0dXJuIHZlcmlmeU1lc3NhZ2UobWVzc2FnZSwga2V5LCBCdWZmZXIuZnJvbShzaWduYXR1cmUsICdoZXgnKSwgbmV0d29ya3MuYml0Y29pbik7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0SGFzVmFsaWRTaWduYXR1cmUobmFtZWREZXNjcmlwdG9yOiBOYW1lZERlc2NyaXB0b3IsIGtleTogQklQMzJJbnRlcmZhY2UpOiB2b2lkIHtcbiAgaWYgKCFoYXNWYWxpZFNpZ25hdHVyZShuYW1lZERlc2NyaXB0b3IudmFsdWUsIGtleSwgbmFtZWREZXNjcmlwdG9yLnNpZ25hdHVyZXMgPz8gW10pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBEZXNjcmlwdG9yICR7bmFtZWREZXNjcmlwdG9yLm5hbWV9IGRvZXMgbm90IGhhdmUgYSB2YWxpZCBzaWduYXR1cmUgKGtleT0ke2tleS50b0Jhc2U1OCgpfSlgKTtcbiAgfVxufVxuIl19
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createDescriptors.d.ts","sourceRoot":"","sources":["../../../../src/descriptor/createWallet/createDescriptors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,OAAO,EAAsC,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAGzF,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,cAAc,EAAE,KAAK,eAAe,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"createDescriptors.d.ts","sourceRoot":"","sources":["../../../../src/descriptor/createWallet/createDescriptors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,OAAO,EAAsC,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAGzF,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,cAAc,EAAE,KAAK,eAAe,EAAE,CAAC;AAgC7G;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,EAAE,kBACiF,CAAC"}
|
|
@@ -14,10 +14,12 @@ function createExternalInternalPair(builder, userKey) {
|
|
|
14
14
|
if (userKey.isNeutered()) {
|
|
15
15
|
throw new Error('User key must be private');
|
|
16
16
|
}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
17
|
+
const external = (0, NamedDescriptor_1.createNamedDescriptorWithSignature)(builder.name + '/external', (0, builder_1.getDescriptorFromBuilder)({ ...builder, path: '0/*' }), userKey);
|
|
18
|
+
const internal = (0, NamedDescriptor_1.createNamedDescriptorWithSignature)(builder.name + '/internal', (0, builder_1.getDescriptorFromBuilder)({ ...builder, path: '1/*' }), userKey);
|
|
19
|
+
if (external.value === internal.value) {
|
|
20
|
+
throw new Error('External and internal descriptors must be different. Make to use the path in descriptor.');
|
|
21
|
+
}
|
|
22
|
+
return [external, internal];
|
|
21
23
|
}
|
|
22
24
|
/**
|
|
23
25
|
* Create a pair of external and internal descriptors for a 2-of-3 multisig wallet.
|
|
@@ -28,4 +30,4 @@ function createExternalInternalPair(builder, userKey) {
|
|
|
28
30
|
*/
|
|
29
31
|
const DefaultWsh2Of3 = (userKey, cosigners) => createExternalInternalPair({ name: 'Wsh2Of3', keys: [userKey.neutered(), ...cosigners], path: '' }, userKey);
|
|
30
32
|
exports.DefaultWsh2Of3 = DefaultWsh2Of3;
|
|
31
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlRGVzY3JpcHRvcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZGVzY3JpcHRvci9jcmVhdGVXYWxsZXQvY3JlYXRlRGVzY3JpcHRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsd0RBQXlGO0FBQ3pGLHdDQUF5RTtBQUl6RTs7Ozs7O0dBTUc7QUFDSCxTQUFTLDBCQUEwQixDQUNqQyxPQUEwQixFQUMxQixPQUF1QjtJQUV2QixJQUFJLE9BQU8sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDO1FBQ3pCLE1BQU0sSUFBSSxLQUFLLENBQUMsMEJBQTBCLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBQ0QsTUFBTSxRQUFRLEdBQUcsSUFBQSxvREFBa0MsRUFDakQsT0FBTyxDQUFDLElBQUksR0FBRyxXQUFXLEVBQzFCLElBQUEsa0NBQXdCLEVBQUMsRUFBRSxHQUFHLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFDckQsT0FBTyxDQUNSLENBQUM7SUFDRixNQUFNLFFBQVEsR0FBRyxJQUFBLG9EQUFrQyxFQUNqRCxPQUFPLENBQUMsSUFBSSxHQUFHLFdBQVcsRUFDMUIsSUFBQSxrQ0FBd0IsRUFBQyxFQUFFLEdBQUcsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUNyRCxPQUFPLENBQ1IsQ0FBQztJQUNGLElBQUksUUFBUSxDQUFDLEtBQUssS0FBSyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDdEMsTUFBTSxJQUFJLEtBQUssQ0FBQywwRkFBMEYsQ0FBQyxDQUFDO0lBQzlHLENBQUM7SUFDRCxPQUFPLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQzlCLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSSxNQUFNLGNBQWMsR0FBdUIsQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLEVBQUUsQ0FDdkUsMEJBQTBCLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRSxHQUFHLFNBQVMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQztBQURsRyxRQUFBLGNBQWMsa0JBQ29GIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQklQMzJJbnRlcmZhY2UgfSBmcm9tICdAYml0Z28vdXR4by1saWInO1xuXG5pbXBvcnQgeyBjcmVhdGVOYW1lZERlc2NyaXB0b3JXaXRoU2lnbmF0dXJlLCBOYW1lZERlc2NyaXB0b3IgfSBmcm9tICcuLi9OYW1lZERlc2NyaXB0b3InO1xuaW1wb3J0IHsgZ2V0RGVzY3JpcHRvckZyb21CdWlsZGVyLCBEZXNjcmlwdG9yQnVpbGRlciB9IGZyb20gJy4uL2J1aWxkZXInO1xuXG5leHBvcnQgdHlwZSBEZXNjcmlwdG9yRnJvbUtleXMgPSAodXNlcktleTogQklQMzJJbnRlcmZhY2UsIGNvc2lnbmVyczogQklQMzJJbnRlcmZhY2VbXSkgPT4gTmFtZWREZXNjcmlwdG9yW107XG5cbi8qKlxuICogQ3JlYXRlIGEgcGFpciBvZiBleHRlcm5hbCBhbmQgaW50ZXJuYWwgZGVzY3JpcHRvcnMgZm9yIGEgMi1vZi0zIG11bHRpc2lnIHdhbGxldC5cbiAqIE92ZXJyaWRlcyB0aGUgcGF0aCBvZiB0aGUgYnVpbGRlciB0byB1c2UgdGhlIGV4dGVybmFsIGFuZCBpbnRlcm5hbCBkZXJpdmF0aW9uIHBhdGhzICgwLyogYW5kIDEvKikuXG4gKlxuICogQHBhcmFtIGJ1aWxkZXJcbiAqIEBwYXJhbSB1c2VyS2V5XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUV4dGVybmFsSW50ZXJuYWxQYWlyKFxuICBidWlsZGVyOiBEZXNjcmlwdG9yQnVpbGRlcixcbiAgdXNlcktleTogQklQMzJJbnRlcmZhY2Vcbik6IFtOYW1lZERlc2NyaXB0b3IsIE5hbWVkRGVzY3JpcHRvcl0ge1xuICBpZiAodXNlcktleS5pc05ldXRlcmVkKCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIga2V5IG11c3QgYmUgcHJpdmF0ZScpO1xuICB9XG4gIGNvbnN0IGV4dGVybmFsID0gY3JlYXRlTmFtZWREZXNjcmlwdG9yV2l0aFNpZ25hdHVyZShcbiAgICBidWlsZGVyLm5hbWUgKyAnL2V4dGVybmFsJyxcbiAgICBnZXREZXNjcmlwdG9yRnJvbUJ1aWxkZXIoeyAuLi5idWlsZGVyLCBwYXRoOiAnMC8qJyB9KSxcbiAgICB1c2VyS2V5XG4gICk7XG4gIGNvbnN0IGludGVybmFsID0gY3JlYXRlTmFtZWREZXNjcmlwdG9yV2l0aFNpZ25hdHVyZShcbiAgICBidWlsZGVyLm5hbWUgKyAnL2ludGVybmFsJyxcbiAgICBnZXREZXNjcmlwdG9yRnJvbUJ1aWxkZXIoeyAuLi5idWlsZGVyLCBwYXRoOiAnMS8qJyB9KSxcbiAgICB1c2VyS2V5XG4gICk7XG4gIGlmIChleHRlcm5hbC52YWx1ZSA9PT0gaW50ZXJuYWwudmFsdWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4dGVybmFsIGFuZCBpbnRlcm5hbCBkZXNjcmlwdG9ycyBtdXN0IGJlIGRpZmZlcmVudC4gTWFrZSB0byB1c2UgdGhlIHBhdGggaW4gZGVzY3JpcHRvci4nKTtcbiAgfVxuICByZXR1cm4gW2V4dGVybmFsLCBpbnRlcm5hbF07XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgcGFpciBvZiBleHRlcm5hbCBhbmQgaW50ZXJuYWwgZGVzY3JpcHRvcnMgZm9yIGEgMi1vZi0zIG11bHRpc2lnIHdhbGxldC5cbiAqXG4gKiBAcGFyYW0gdXNlcktleVxuICogQHBhcmFtIGNvc2lnbmVyc1xuICogQGNvbnN0cnVjdG9yXG4gKi9cbmV4cG9ydCBjb25zdCBEZWZhdWx0V3NoMk9mMzogRGVzY3JpcHRvckZyb21LZXlzID0gKHVzZXJLZXksIGNvc2lnbmVycykgPT5cbiAgY3JlYXRlRXh0ZXJuYWxJbnRlcm5hbFBhaXIoeyBuYW1lOiAnV3NoMk9mMycsIGtleXM6IFt1c2VyS2V5Lm5ldXRlcmVkKCksIC4uLmNvc2lnbmVyc10sIHBhdGg6ICcnIH0sIHVzZXJLZXkpO1xuIl19
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { Miniscript, Descriptor } from '@bitgo/wasm-miniscript';
|
|
2
2
|
export { assertDescriptorWalletAddress } from './assertDescriptorWalletAddress';
|
|
3
|
-
export { NamedDescriptor } from './NamedDescriptor';
|
|
3
|
+
export { NamedDescriptor, createNamedDescriptorWithSignature, hasValidSignature } from './NamedDescriptor';
|
|
4
4
|
export { isDescriptorWallet, getDescriptorMapFromWallet } from './descriptorWallet';
|
|
5
5
|
export { getPolicyForEnv } from './validatePolicy';
|
|
6
6
|
export * as createWallet from './createWallet';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/descriptor/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,6BAA6B,EAAE,MAAM,iCAAiC,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/descriptor/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,6BAA6B,EAAE,MAAM,iCAAiC,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,kCAAkC,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC3G,OAAO,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AACpF,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,YAAY,MAAM,gBAAgB,CAAC"}
|
|
@@ -33,7 +33,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.createWallet = exports.getPolicyForEnv = exports.getDescriptorMapFromWallet = exports.isDescriptorWallet = exports.NamedDescriptor = exports.assertDescriptorWalletAddress = exports.Descriptor = exports.Miniscript = void 0;
|
|
36
|
+
exports.createWallet = exports.getPolicyForEnv = exports.getDescriptorMapFromWallet = exports.isDescriptorWallet = exports.hasValidSignature = exports.createNamedDescriptorWithSignature = exports.NamedDescriptor = exports.assertDescriptorWalletAddress = exports.Descriptor = exports.Miniscript = void 0;
|
|
37
37
|
var wasm_miniscript_1 = require("@bitgo/wasm-miniscript");
|
|
38
38
|
Object.defineProperty(exports, "Miniscript", { enumerable: true, get: function () { return wasm_miniscript_1.Miniscript; } });
|
|
39
39
|
Object.defineProperty(exports, "Descriptor", { enumerable: true, get: function () { return wasm_miniscript_1.Descriptor; } });
|
|
@@ -41,10 +41,12 @@ var assertDescriptorWalletAddress_1 = require("./assertDescriptorWalletAddress")
|
|
|
41
41
|
Object.defineProperty(exports, "assertDescriptorWalletAddress", { enumerable: true, get: function () { return assertDescriptorWalletAddress_1.assertDescriptorWalletAddress; } });
|
|
42
42
|
var NamedDescriptor_1 = require("./NamedDescriptor");
|
|
43
43
|
Object.defineProperty(exports, "NamedDescriptor", { enumerable: true, get: function () { return NamedDescriptor_1.NamedDescriptor; } });
|
|
44
|
+
Object.defineProperty(exports, "createNamedDescriptorWithSignature", { enumerable: true, get: function () { return NamedDescriptor_1.createNamedDescriptorWithSignature; } });
|
|
45
|
+
Object.defineProperty(exports, "hasValidSignature", { enumerable: true, get: function () { return NamedDescriptor_1.hasValidSignature; } });
|
|
44
46
|
var descriptorWallet_1 = require("./descriptorWallet");
|
|
45
47
|
Object.defineProperty(exports, "isDescriptorWallet", { enumerable: true, get: function () { return descriptorWallet_1.isDescriptorWallet; } });
|
|
46
48
|
Object.defineProperty(exports, "getDescriptorMapFromWallet", { enumerable: true, get: function () { return descriptorWallet_1.getDescriptorMapFromWallet; } });
|
|
47
49
|
var validatePolicy_1 = require("./validatePolicy");
|
|
48
50
|
Object.defineProperty(exports, "getPolicyForEnv", { enumerable: true, get: function () { return validatePolicy_1.getPolicyForEnv; } });
|
|
49
51
|
exports.createWallet = __importStar(require("./createWallet"));
|
|
50
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGVzY3JpcHRvci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwwREFBZ0U7QUFBdkQsNkdBQUEsVUFBVSxPQUFBO0FBQUUsNkdBQUEsVUFBVSxPQUFBO0FBQy9CLGlGQUFnRjtBQUF2RSw4SUFBQSw2QkFBNkIsT0FBQTtBQUN0QyxxREFBMkc7QUFBbEcsa0hBQUEsZUFBZSxPQUFBO0FBQUUscUlBQUEsa0NBQWtDLE9BQUE7QUFBRSxvSEFBQSxpQkFBaUIsT0FBQTtBQUMvRSx1REFBb0Y7QUFBM0Usc0hBQUEsa0JBQWtCLE9BQUE7QUFBRSw4SEFBQSwwQkFBMEIsT0FBQTtBQUN2RCxtREFBbUQ7QUFBMUMsaUhBQUEsZUFBZSxPQUFBO0FBQ3hCLCtEQUErQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IE1pbmlzY3JpcHQsIERlc2NyaXB0b3IgfSBmcm9tICdAYml0Z28vd2FzbS1taW5pc2NyaXB0JztcbmV4cG9ydCB7IGFzc2VydERlc2NyaXB0b3JXYWxsZXRBZGRyZXNzIH0gZnJvbSAnLi9hc3NlcnREZXNjcmlwdG9yV2FsbGV0QWRkcmVzcyc7XG5leHBvcnQgeyBOYW1lZERlc2NyaXB0b3IsIGNyZWF0ZU5hbWVkRGVzY3JpcHRvcldpdGhTaWduYXR1cmUsIGhhc1ZhbGlkU2lnbmF0dXJlIH0gZnJvbSAnLi9OYW1lZERlc2NyaXB0b3InO1xuZXhwb3J0IHsgaXNEZXNjcmlwdG9yV2FsbGV0LCBnZXREZXNjcmlwdG9yTWFwRnJvbVdhbGxldCB9IGZyb20gJy4vZGVzY3JpcHRvcldhbGxldCc7XG5leHBvcnQgeyBnZXRQb2xpY3lGb3JFbnYgfSBmcm9tICcuL3ZhbGlkYXRlUG9saWN5JztcbmV4cG9ydCAqIGFzIGNyZWF0ZVdhbGxldCBmcm9tICcuL2NyZWF0ZVdhbGxldCc7XG4iXX0=
|
|
@@ -2,13 +2,22 @@ import { Descriptor } from '@bitgo/wasm-miniscript';
|
|
|
2
2
|
import { EnvironmentName, Triple } from '@bitgo/sdk-core';
|
|
3
3
|
import * as utxolib from '@bitgo/utxo-lib';
|
|
4
4
|
import { DescriptorMap } from '../core/descriptor';
|
|
5
|
-
import { DescriptorBuilder } from './builder';
|
|
6
5
|
import { NamedDescriptor } from './NamedDescriptor';
|
|
7
|
-
export type DescriptorValidationPolicy = {
|
|
8
|
-
allowedTemplates: DescriptorBuilder['name'][];
|
|
9
|
-
} | 'allowAll';
|
|
10
6
|
export type KeyTriple = Triple<utxolib.BIP32Interface>;
|
|
11
|
-
export
|
|
7
|
+
export interface DescriptorValidationPolicy {
|
|
8
|
+
name: string;
|
|
9
|
+
validate(d: Descriptor, walletKeys: KeyTriple, signatures: string[]): boolean;
|
|
10
|
+
}
|
|
11
|
+
export declare const policyAllowAll: DescriptorValidationPolicy;
|
|
12
|
+
export declare function getValidatorDescriptorTemplate(name: string): DescriptorValidationPolicy;
|
|
13
|
+
export declare function getValidatorEvery(validators: DescriptorValidationPolicy[]): DescriptorValidationPolicy;
|
|
14
|
+
export declare function getValidatorSome(validators: DescriptorValidationPolicy[]): DescriptorValidationPolicy;
|
|
15
|
+
export declare function getValidatorOneOfTemplates(names: string[]): DescriptorValidationPolicy;
|
|
16
|
+
export declare function getValidatorSignedByUserKey(): DescriptorValidationPolicy;
|
|
17
|
+
export declare class DescriptorPolicyValidationError extends Error {
|
|
18
|
+
constructor(descriptor: Descriptor, policy: DescriptorValidationPolicy);
|
|
19
|
+
}
|
|
20
|
+
export declare function assertDescriptorPolicy(descriptor: Descriptor, policy: DescriptorValidationPolicy, walletKeys: KeyTriple, signatures: string[]): void;
|
|
12
21
|
export declare function toDescriptorMapValidate(descriptors: NamedDescriptor[], walletKeys: KeyTriple, policy: DescriptorValidationPolicy): DescriptorMap;
|
|
13
22
|
export declare function getPolicyForEnv(env: EnvironmentName): DescriptorValidationPolicy;
|
|
14
23
|
//# sourceMappingURL=validatePolicy.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validatePolicy.d.ts","sourceRoot":"","sources":["../../../src/descriptor/validatePolicy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAE3C,OAAO,EAAE,aAAa,EAAmB,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"validatePolicy.d.ts","sourceRoot":"","sources":["../../../src/descriptor/validatePolicy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAE3C,OAAO,EAAE,aAAa,EAAmB,MAAM,oBAAoB,CAAC;AAGpE,OAAO,EAAqB,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEvE,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;AAEvD,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;CAC/E;AAED,eAAO,MAAM,cAAc,EAAE,0BAG5B,CAAC;AAEF,wBAAgB,8BAA8B,CAAC,IAAI,EAAE,MAAM,GAAG,0BAA0B,CAYvF;AAED,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,0BAA0B,EAAE,GAAG,0BAA0B,CAOtG;AAED,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,0BAA0B,EAAE,GAAG,0BAA0B,CAOrG;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,0BAA0B,CAEtF;AAED,wBAAgB,2BAA2B,IAAI,0BAA0B,CAQxE;AAED,qBAAa,+BAAgC,SAAQ,KAAK;gBAC5C,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,0BAA0B;CAGvE;AAED,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,0BAA0B,EAClC,UAAU,EAAE,SAAS,EACrB,UAAU,EAAE,MAAM,EAAE,GACnB,IAAI,CAIN;AAED,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,eAAe,EAAE,EAC9B,UAAU,EAAE,SAAS,EACrB,MAAM,EAAE,0BAA0B,GACjC,aAAa,CAQf;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,eAAe,GAAG,0BAA0B,CAahF"}
|
|
@@ -1,48 +1,91 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DescriptorPolicyValidationError = exports.policyAllowAll = void 0;
|
|
4
|
+
exports.getValidatorDescriptorTemplate = getValidatorDescriptorTemplate;
|
|
5
|
+
exports.getValidatorEvery = getValidatorEvery;
|
|
6
|
+
exports.getValidatorSome = getValidatorSome;
|
|
7
|
+
exports.getValidatorOneOfTemplates = getValidatorOneOfTemplates;
|
|
8
|
+
exports.getValidatorSignedByUserKey = getValidatorSignedByUserKey;
|
|
3
9
|
exports.assertDescriptorPolicy = assertDescriptorPolicy;
|
|
4
10
|
exports.toDescriptorMapValidate = toDescriptorMapValidate;
|
|
5
11
|
exports.getPolicyForEnv = getPolicyForEnv;
|
|
12
|
+
const wasm_miniscript_1 = require("@bitgo/wasm-miniscript");
|
|
6
13
|
const descriptor_1 = require("../core/descriptor");
|
|
7
14
|
const builder_1 = require("./builder");
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
15
|
+
const NamedDescriptor_1 = require("./NamedDescriptor");
|
|
16
|
+
exports.policyAllowAll = {
|
|
17
|
+
name: 'allowAll',
|
|
18
|
+
validate: () => true,
|
|
19
|
+
};
|
|
20
|
+
function getValidatorDescriptorTemplate(name) {
|
|
21
|
+
return {
|
|
22
|
+
name: 'descriptorTemplate(' + name + ')',
|
|
23
|
+
validate(d, walletKeys) {
|
|
24
|
+
const parsed = (0, builder_1.parseDescriptor)(d);
|
|
25
|
+
return (parsed.name === name &&
|
|
26
|
+
parsed.keys.length === walletKeys.length &&
|
|
27
|
+
parsed.keys.every((k, i) => k.toBase58() === walletKeys[i].neutered().toBase58()));
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
function getValidatorEvery(validators) {
|
|
32
|
+
return {
|
|
33
|
+
name: 'every(' + validators.map((v) => v.name).join(',') + ')',
|
|
34
|
+
validate(d, walletKeys, signatures) {
|
|
35
|
+
return validators.every((v) => v.validate(d, walletKeys, signatures));
|
|
36
|
+
},
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
function getValidatorSome(validators) {
|
|
40
|
+
return {
|
|
41
|
+
name: 'some(' + validators.map((v) => v.name).join(',') + ')',
|
|
42
|
+
validate(d, walletKeys, signatures) {
|
|
43
|
+
return validators.some((v) => v.validate(d, walletKeys, signatures));
|
|
44
|
+
},
|
|
45
|
+
};
|
|
17
46
|
}
|
|
18
|
-
function
|
|
19
|
-
|
|
20
|
-
|
|
47
|
+
function getValidatorOneOfTemplates(names) {
|
|
48
|
+
return getValidatorSome(names.map(getValidatorDescriptorTemplate));
|
|
49
|
+
}
|
|
50
|
+
function getValidatorSignedByUserKey() {
|
|
51
|
+
return {
|
|
52
|
+
name: 'signedByUser',
|
|
53
|
+
validate(d, walletKeys, signatures) {
|
|
54
|
+
// the first key is the user key, by convention
|
|
55
|
+
return (0, NamedDescriptor_1.hasValidSignature)(d, walletKeys[0], signatures);
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
class DescriptorPolicyValidationError extends Error {
|
|
60
|
+
constructor(descriptor, policy) {
|
|
61
|
+
super(`Descriptor ${descriptor.toString()} does not match policy ${policy.name}`);
|
|
21
62
|
}
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
63
|
+
}
|
|
64
|
+
exports.DescriptorPolicyValidationError = DescriptorPolicyValidationError;
|
|
65
|
+
function assertDescriptorPolicy(descriptor, policy, walletKeys, signatures) {
|
|
66
|
+
if (!policy.validate(descriptor, walletKeys, signatures)) {
|
|
67
|
+
throw new DescriptorPolicyValidationError(descriptor, policy);
|
|
27
68
|
}
|
|
28
|
-
throw new Error(`Unknown descriptor validation policy: ${policy}`);
|
|
29
69
|
}
|
|
30
70
|
function toDescriptorMapValidate(descriptors, walletKeys, policy) {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
assertDescriptorPolicy(
|
|
34
|
-
|
|
35
|
-
|
|
71
|
+
return (0, descriptor_1.toDescriptorMap)(descriptors.map((namedDescriptor) => {
|
|
72
|
+
const d = wasm_miniscript_1.Descriptor.fromString(namedDescriptor.value, 'derivable');
|
|
73
|
+
assertDescriptorPolicy(d, policy, walletKeys, namedDescriptor.signatures ?? []);
|
|
74
|
+
return { name: namedDescriptor.name, value: d };
|
|
75
|
+
}));
|
|
36
76
|
}
|
|
37
77
|
function getPolicyForEnv(env) {
|
|
38
78
|
switch (env) {
|
|
39
79
|
case 'adminProd':
|
|
40
80
|
case 'prod':
|
|
41
|
-
return
|
|
42
|
-
|
|
43
|
-
|
|
81
|
+
return getValidatorSome([
|
|
82
|
+
// allow all 2-of-3-ish descriptors where the keys match the wallet keys
|
|
83
|
+
getValidatorOneOfTemplates(['Wsh2Of3', 'Wsh2Of3CltvDrop', 'ShWsh2Of3CltvDrop']),
|
|
84
|
+
// allow all descriptors signed by the user key
|
|
85
|
+
getValidatorSignedByUserKey(),
|
|
86
|
+
]);
|
|
44
87
|
default:
|
|
45
|
-
return
|
|
88
|
+
return exports.policyAllowAll;
|
|
46
89
|
}
|
|
47
90
|
}
|
|
48
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
91
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGVQb2xpY3kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGVzY3JpcHRvci92YWxpZGF0ZVBvbGljeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFxQkEsd0VBWUM7QUFFRCw4Q0FPQztBQUVELDRDQU9DO0FBRUQsZ0VBRUM7QUFFRCxrRUFRQztBQVFELHdEQVNDO0FBRUQsMERBWUM7QUFFRCwwQ0FhQztBQS9HRCw0REFBb0Q7QUFJcEQsbURBQW9FO0FBRXBFLHVDQUE0QztBQUM1Qyx1REFBdUU7QUFTMUQsUUFBQSxjQUFjLEdBQStCO0lBQ3hELElBQUksRUFBRSxVQUFVO0lBQ2hCLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJO0NBQ3JCLENBQUM7QUFFRixTQUFnQiw4QkFBOEIsQ0FBQyxJQUFZO0lBQ3pELE9BQU87UUFDTCxJQUFJLEVBQUUscUJBQXFCLEdBQUcsSUFBSSxHQUFHLEdBQUc7UUFDeEMsUUFBUSxDQUFDLENBQWEsRUFBRSxVQUFxQjtZQUMzQyxNQUFNLE1BQU0sR0FBRyxJQUFBLHlCQUFlLEVBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbEMsT0FBTyxDQUNMLE1BQU0sQ0FBQyxJQUFJLEtBQUssSUFBSTtnQkFDcEIsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssVUFBVSxDQUFDLE1BQU07Z0JBQ3hDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUNsRixDQUFDO1FBQ0osQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBZ0IsaUJBQWlCLENBQUMsVUFBd0M7SUFDeEUsT0FBTztRQUNMLElBQUksRUFBRSxRQUFRLEdBQUcsVUFBVSxDQUFDLEdBQUcs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TTtZQUNULE9BQU8sZ0JBQWdCLENBQUM7Z0JBQ3RCLHdFQUF3RTtnQkFDeEUsMEJBQTBCLENBQUMsQ0FBQyxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztnQkFDL0UsK0NBQStDO2dCQUMvQywyQkFBMkIsRUFBRTthQUM5QixDQUFDLENBQUM7UUFDTDtZQUNFLE9BQU8sc0JBQWMsQ0FBQztJQUMxQixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlc2NyaXB0b3IgfSBmcm9tICdAYml0Z28vd2FzbS1taW5pc2NyaXB0JztcbmltcG9ydCB7IEVudmlyb25tZW50TmFtZSwgVHJpcGxlIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvL3V0eG8tbGliJztcblxuaW1wb3J0IHsgRGVzY3JpcHRvck1hcCwgdG9EZXNjcmlwdG9yTWFwIH0gZnJvbSAnLi4vY29yZS9kZXNjcmlwdG9yJztcblxuaW1wb3J0IHsgcGFyc2VEZXNjcmlwdG9yIH0gZnJvbSAnLi9idWlsZGVyJztcbmltcG9ydCB7IGhhc1ZhbGlkU2lnbmF0dXJlLCBOYW1lZERlc2NyaXB0b3IgfSBmcm9tICcuL05hbWVkRGVzY3JpcHRvcic7XG5cbmV4cG9ydCB0eXBlIEtleVRyaXBsZSA9IFRyaXBsZTx1dHhvbGliLkJJUDMySW50ZXJmYWNlPjtcblxuZXhwb3J0IGludGVyZmFjZSBEZXNjcmlwdG9yVmFsaWRhdGlvblBvbGljeSB7XG4gIG5hbWU6IHN0cmluZztcbiAgdmFsaWRhdGUoZDogRGVzY3JpcHRvciwgd2FsbGV0S2V5czogS2V5VHJpcGxlLCBzaWduYXR1cmVzOiBzdHJpbmdbXSk6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjb25zdCBwb2xpY3lBbGxvd0FsbDogRGVzY3JpcHRvclZhbGlkYXRpb25Qb2xpY3kgPSB7XG4gIG5hbWU6ICdhbGxvd0FsbCcsXG4gIHZhbGlkYXRlOiAoKSA9PiB0cnVlLFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZhbGlkYXRvckRlc2NyaXB0b3JUZW1wbGF0ZShuYW1lOiBzdHJpbmcpOiBEZXNjcmlwdG9yVmFsaWRhdGlvblBvbGljeSB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ2Rlc2NyaXB0b3JUZW1wbGF0ZSgnICsgbmFtZSArICcpJyxcbiAgICB2YWxpZGF0ZShkOiBEZXNjcmlwdG9yLCB3YWxsZXRLZXlzOiBLZXlUcmlwbGUpOiBib29sZWFuIHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlRGVzY3JpcHRvcihkKTtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHBhcnNlZC5uYW1lID09PSBuYW1lICYmXG4gICAgICAgIHBhcnNlZC5rZXlzLmxlbmd0aCA9PT0gd2FsbGV0S2V5cy5sZW5ndGggJiZcbiAgICAgICAgcGFyc2VkLmtleXMuZXZlcnkoKGssIGkpID0+IGsudG9CYXNlNTgoKSA9PT0gd2FsbGV0S2V5c1tpXS5uZXV0ZXJlZCgpLnRvQmFzZTU4KCkpXG4gICAgICApO1xuICAgIH0sXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRWYWxpZGF0b3JFdmVyeSh2YWxpZGF0b3JzOiBEZXNjcmlwdG9yVmFsaWRhdGlvblBvbGljeVtdKTogRGVzY3JpcHRvclZhbGlkYXRpb25Qb2xpY3kge1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICdldmVyeSgnICsgdmFsaWRhdG9ycy5tYXAoKHYpID0+IHYubmFtZSkuam9pbignLCcpICsgJyknLFxuICAgIHZhbGlkYXRlKGQ6IERlc2NyaXB0b3IsIHdhbGxldEtleXM6IEtleVRyaXBsZSwgc2lnbmF0dXJlczogc3RyaW5nW10pOiBib29sZWFuIHtcbiAgICAgIHJldHVybiB2YWxpZGF0b3JzLmV2ZXJ5KCh2KSA9PiB2LnZhbGlkYXRlKGQsIHdhbGxldEtleXMsIHNpZ25hdHVyZXMpKTtcbiAgICB9LFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmFsaWRhdG9yU29tZSh2YWxpZGF0b3JzOiBEZXNjcmlwdG9yVmFsaWRhdGlvblBvbGljeVtdKTogRGVzY3JpcHRvclZhbGlkYXRpb25Qb2xpY3kge1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICdzb21lKCcgKyB2YWxpZGF0b3JzLm1hcCgodikgPT4gdi5uYW1lKS5qb2luKCcsJykgKyAnKScsXG4gICAgdmFsaWRhdGUoZDogRGVzY3JpcHRvciwgd2FsbGV0S2V5czogS2V5VHJpcGxlLCBzaWduYXR1cmVzOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIHZhbGlkYXRvcnMuc29tZSgodikgPT4gdi52YWxpZGF0ZShkLCB3YWxsZXRLZXlzLCBzaWduYXR1cmVzKSk7XG4gICAgfSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZhbGlkYXRvck9uZU9mVGVtcGxhdGVzKG5hbWVzOiBzdHJpbmdbXSk6IERlc2NyaXB0b3JWYWxpZGF0aW9uUG9saWN5IHtcbiAgcmV0dXJuIGdldFZhbGlkYXRvclNvbWUobmFtZXMubWFwKGdldFZhbGlkYXRvckRlc2NyaXB0b3JUZW1wbGF0ZSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmFsaWRhdG9yU2lnbmVkQnlVc2VyS2V5KCk6IERlc2NyaXB0b3JWYWxpZGF0aW9uUG9saWN5IHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnc2lnbmVkQnlVc2VyJyxcbiAgICB2YWxpZGF0ZShkOiBEZXNjcmlwdG9yLCB3YWxsZXRLZXlzOiBLZXlUcmlwbGUsIHNpZ25hdHVyZXM6IHN0cmluZ1tdKTogYm9vbGVhbiB7XG4gICAgICAvLyB0aGUgZmlyc3Qga2V5IGlzIHRoZSB1c2VyIGtleSwgYnkgY29udmVudGlvblxuICAgICAgcmV0dXJuIGhhc1ZhbGlkU2lnbmF0dXJlKGQsIHdhbGxldEtleXNbMF0sIHNpZ25hdHVyZXMpO1xuICAgIH0sXG4gIH07XG59XG5cbmV4cG9ydCBjbGFzcyBEZXNjcmlwdG9yUG9saWN5VmFsaWRhdGlvbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihkZXNjcmlwdG9yOiBEZXNjcmlwdG9yLCBwb2xpY3k6IERlc2NyaXB0b3JWYWxpZGF0aW9uUG9saWN5KSB7XG4gICAgc3VwZXIoYERlc2NyaXB0b3IgJHtkZXNjcmlwdG9yLnRvU3RyaW5nKCl9IGRvZXMgbm90IG1hdGNoIHBvbGljeSAke3BvbGljeS5uYW1lfWApO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnREZXNjcmlwdG9yUG9saWN5KFxuICBkZXNjcmlwdG9yOiBEZXNjcmlwdG9yLFxuICBwb2xpY3k6IERlc2NyaXB0b3JWYWxpZGF0aW9uUG9saWN5LFxuICB3YWxsZXRLZXlzOiBLZXlUcmlwbGUsXG4gIHNpZ25hdHVyZXM6IHN0cmluZ1tdXG4pOiB2b2lkIHtcbiAgaWYgKCFwb2xpY3kudmFsaWRhdGUoZGVzY3JpcHRvciwgd2FsbGV0S2V5cywgc2lnbmF0dXJlcykpIHtcbiAgICB0aHJvdyBuZXcgRGVzY3JpcHRvclBvbGljeVZhbGlkYXRpb25FcnJvcihkZXNjcmlwdG9yLCBwb2xpY3kpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b0Rlc2NyaXB0b3JNYXBWYWxpZGF0ZShcbiAgZGVzY3JpcHRvcnM6IE5hbWVkRGVzY3JpcHRvcltdLFxuICB3YWxsZXRLZXlzOiBLZXlUcmlwbGUsXG4gIHBvbGljeTogRGVzY3JpcHRvclZhbGlkYXRpb25Qb2xpY3lcbik6IERlc2NyaXB0b3JNYXAge1xuICByZXR1cm4gdG9EZXNjcmlwdG9yTWFwKFxuICAgIGRlc2NyaXB0b3JzLm1hcCgobmFtZWREZXNjcmlwdG9yKSA9PiB7XG4gICAgICBjb25zdCBkID0gRGVzY3JpcHRvci5mcm9tU3RyaW5nKG5hbWVkRGVzY3JpcHRvci52YWx1ZSwgJ2Rlcml2YWJsZScpO1xuICAgICAgYXNzZXJ0RGVzY3JpcHRvclBvbGljeShkLCBwb2xpY3ksIHdhbGxldEtleXMsIG5hbWVkRGVzY3JpcHRvci5zaWduYXR1cmVzID8/IFtdKTtcbiAgICAgIHJldHVybiB7IG5hbWU6IG5hbWVkRGVzY3JpcHRvci5uYW1lLCB2YWx1ZTogZCB9O1xuICAgIH0pXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQb2xpY3lGb3JFbnYoZW52OiBFbnZpcm9ubWVudE5hbWUpOiBEZXNjcmlwdG9yVmFsaWRhdGlvblBvbGljeSB7XG4gIHN3aXRjaCAoZW52KSB7XG4gICAgY2FzZSAnYWRtaW5Qcm9kJzpcbiAgICBjYXNlICdwcm9kJzpcbiAgICAgIHJldHVybiBnZXRWYWxpZGF0b3JTb21lKFtcbiAgICAgICAgLy8gYWxsb3cgYWxsIDItb2YtMy1pc2ggZGVzY3JpcHRvcnMgd2hlcmUgdGhlIGtleXMgbWF0Y2ggdGhlIHdhbGxldCBrZXlzXG4gICAgICAgIGdldFZhbGlkYXRvck9uZU9mVGVtcGxhdGVzKFsnV3NoMk9mMycsICdXc2gyT2YzQ2x0dkRyb3AnLCAnU2hXc2gyT2YzQ2x0dkRyb3AnXSksXG4gICAgICAgIC8vIGFsbG93IGFsbCBkZXNjcmlwdG9ycyBzaWduZWQgYnkgdGhlIHVzZXIga2V5XG4gICAgICAgIGdldFZhbGlkYXRvclNpZ25lZEJ5VXNlcktleSgpLFxuICAgICAgXSk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBwb2xpY3lBbGxvd0FsbDtcbiAgfVxufVxuIl19
|
|
@@ -7,6 +7,7 @@ const assert_1 = __importDefault(require("assert"));
|
|
|
7
7
|
const descriptor_1 = require("../../src/descriptor");
|
|
8
8
|
const descriptor_utils_1 = require("../core/descriptor/descriptor.utils");
|
|
9
9
|
const keychains_1 = require("../../src/keychains");
|
|
10
|
+
const validatePolicy_1 = require("../../src/descriptor/validatePolicy");
|
|
10
11
|
describe('isDescriptorWalletData', function () {
|
|
11
12
|
const descriptorMap = (0, descriptor_utils_1.getDescriptorMap)('Wsh2Of3');
|
|
12
13
|
it('should return true for valid DescriptorWalletData', function () {
|
|
@@ -21,7 +22,7 @@ describe('isDescriptorWalletData', function () {
|
|
|
21
22
|
},
|
|
22
23
|
};
|
|
23
24
|
(0, assert_1.default)((0, descriptor_1.isDescriptorWallet)(wallet));
|
|
24
|
-
assert_1.default.strictEqual((0, descriptor_1.getDescriptorMapFromWallet)(wallet, (0, keychains_1.toBip32Triple)((0, descriptor_utils_1.getDefaultXPubs)()),
|
|
25
|
+
assert_1.default.strictEqual((0, descriptor_1.getDescriptorMapFromWallet)(wallet, (0, keychains_1.toBip32Triple)((0, descriptor_utils_1.getDefaultXPubs)()), validatePolicy_1.policyAllowAll).size, descriptorMap.size);
|
|
25
26
|
});
|
|
26
27
|
});
|
|
27
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzY3JpcHRvcldhbGxldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rlc3QvZGVzY3JpcHRvci9kZXNjcmlwdG9yV2FsbGV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsb0RBQTRCO0FBRTVCLHFEQUFzRjtBQUV0RiwwRUFBd0Y7QUFDeEYsbURBQW9EO0FBQ3BELHdFQUFxRTtBQUVyRSxRQUFRLENBQUMsd0JBQXdCLEVBQUU7SUFDakMsTUFBTSxhQUFhLEdBQUcsSUFBQSxtQ0FBZ0IsRUFBQyxTQUFTLENBQUMsQ0FBQztJQUNsRCxFQUFFLENBQUMsbURBQW1ELEVBQUU7UUFDdEQsTUFBTSxNQUFNLEdBQWU7WUFDekIsWUFBWTtnQkFDVixPQUFPO29CQUNMLFdBQVcsRUFBRSxDQUFDLEdBQUcsYUFBYSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7d0JBQ3JFLElBQUk7d0JBQ0osS0FBSyxFQUFFLFVBQVUsQ0FBQyxRQUFRLEVBQUU7cUJBQzdCLENBQUMsQ0FBQztpQkFDSixDQUFDO1lBQ0osQ0FBQztTQUN1QixDQUFDO1FBRTNCLElBQUEsZ0JBQU0sRUFBQyxJQUFBLCtCQUFrQixFQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDbkMsZ0JBQU0sQ0FBQyxXQUFXLENBQ2hCLElBQUEsdUNBQTBCLEVBQUMsTUFBTSxFQUFFLElBQUEseUJBQWEsRUFBQyxJQUFBLGtDQUFlLEdBQUUsQ0FBQyxFQUFFLCtCQUFjLENBQUMsQ0FBQyxJQUFJLEVBQ3pGLGFBQWEsQ0FBQyxJQUFJLENBQ25CLENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQgeyBnZXREZXNjcmlwdG9yTWFwRnJvbVdhbGxldCwgaXNEZXNjcmlwdG9yV2FsbGV0IH0gZnJvbSAnLi4vLi4vc3JjL2Rlc2NyaXB0b3InO1xuaW1wb3J0IHsgVXR4b1dhbGxldCB9IGZyb20gJy4uLy4uL3NyYy93YWxsZXQnO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdFhQdWJzLCBnZXREZXNjcmlwdG9yTWFwIH0gZnJvbSAnLi4vY29yZS9kZXNjcmlwdG9yL2Rlc2NyaXB0b3IudXRpbHMnO1xuaW1wb3J0IHsgdG9CaXAzMlRyaXBsZSB9IGZyb20gJy4uLy4uL3NyYy9rZXljaGFpbnMnO1xuaW1wb3J0IHsgcG9saWN5QWxsb3dBbGwgfSBmcm9tICcuLi8uLi9zcmMvZGVzY3JpcHRvci92YWxpZGF0ZVBvbGljeSc7XG5cbmRlc2NyaWJlKCdpc0Rlc2NyaXB0b3JXYWxsZXREYXRhJywgZnVuY3Rpb24gKCkge1xuICBjb25zdCBkZXNjcmlwdG9yTWFwID0gZ2V0RGVzY3JpcHRvck1hcCgnV3NoMk9mMycpO1xuICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIGZvciB2YWxpZCBEZXNjcmlwdG9yV2FsbGV0RGF0YScsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB3YWxsZXQ6IFV0eG9XYWxsZXQgPSB7XG4gICAgICBjb2luU3BlY2lmaWMoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZGVzY3JpcHRvcnM6IFsuLi5kZXNjcmlwdG9yTWFwLmVudHJpZXMoKV0ubWFwKChbbmFtZSwgZGVzY3JpcHRvcl0pID0+ICh7XG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgdmFsdWU6IGRlc2NyaXB0b3IudG9TdHJpbmcoKSxcbiAgICAgICAgICB9KSksXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgIH0gYXMgdW5rbm93biBhcyBVdHhvV2FsbGV0O1xuXG4gICAgYXNzZXJ0KGlzRGVzY3JpcHRvcldhbGxldCh3YWxsZXQpKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoXG4gICAgICBnZXREZXNjcmlwdG9yTWFwRnJvbVdhbGxldCh3YWxsZXQsIHRvQmlwMzJUcmlwbGUoZ2V0RGVmYXVsdFhQdWJzKCkpLCBwb2xpY3lBbGxvd0FsbCkuc2l6ZSxcbiAgICAgIGRlc2NyaXB0b3JNYXAuc2l6ZVxuICAgICk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validatePolicy.d.ts","sourceRoot":"","sources":["../../../../test/transaction/descriptor/validatePolicy.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,40 @@
|
|
|
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 assert_1 = __importDefault(require("assert"));
|
|
7
|
+
const wasm_miniscript_1 = require("@bitgo/wasm-miniscript");
|
|
8
|
+
const validatePolicy_1 = require("../../../src/descriptor/validatePolicy");
|
|
9
|
+
const descriptor_utils_1 = require("../../core/descriptor/descriptor.utils");
|
|
10
|
+
const key_utils_1 = require("../../core/key.utils");
|
|
11
|
+
const NamedDescriptor_1 = require("../../../src/descriptor/NamedDescriptor");
|
|
12
|
+
function testAssertDescriptorPolicy(d, p, k, expectedError) {
|
|
13
|
+
const f = () => (0, validatePolicy_1.assertDescriptorPolicy)(wasm_miniscript_1.Descriptor.fromString(d.value, 'derivable'), p, k, d.signatures ?? []);
|
|
14
|
+
if (expectedError) {
|
|
15
|
+
assert_1.default.throws(f);
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
assert_1.default.doesNotThrow(f);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
describe('assertDescriptorPolicy', function () {
|
|
22
|
+
const keys = (0, key_utils_1.getKeyTriple)();
|
|
23
|
+
function getNamedDescriptor(name) {
|
|
24
|
+
return (0, NamedDescriptor_1.createNamedDescriptorWithSignature)(name, (0, descriptor_utils_1.getDescriptor)(name), keys[0]);
|
|
25
|
+
}
|
|
26
|
+
function stripSignature(d) {
|
|
27
|
+
return { ...d, signatures: undefined };
|
|
28
|
+
}
|
|
29
|
+
it('has expected result', function () {
|
|
30
|
+
testAssertDescriptorPolicy(getNamedDescriptor('Wsh2Of3'), (0, validatePolicy_1.getValidatorDescriptorTemplate)('Wsh2Of3'), keys, null);
|
|
31
|
+
// prod does only allow Wsh2Of3-ish descriptors
|
|
32
|
+
testAssertDescriptorPolicy(getNamedDescriptor('Wsh2Of3'), (0, validatePolicy_1.getPolicyForEnv)('prod'), keys, null);
|
|
33
|
+
// prod only allows other descriptors if they are signed by the user key
|
|
34
|
+
testAssertDescriptorPolicy(getNamedDescriptor('Wsh2Of2'), (0, validatePolicy_1.getPolicyForEnv)('prod'), keys, null);
|
|
35
|
+
testAssertDescriptorPolicy(stripSignature(getNamedDescriptor('Wsh2Of2')), (0, validatePolicy_1.getPolicyForEnv)('prod'), keys, new validatePolicy_1.DescriptorPolicyValidationError((0, descriptor_utils_1.getDescriptor)('Wsh2Of2'), (0, validatePolicy_1.getPolicyForEnv)('prod')));
|
|
36
|
+
// test is very permissive by default
|
|
37
|
+
testAssertDescriptorPolicy(stripSignature(getNamedDescriptor('Wsh2Of2')), (0, validatePolicy_1.getPolicyForEnv)('test'), keys, null);
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGVQb2xpY3kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3RyYW5zYWN0aW9uL2Rlc2NyaXB0b3IvdmFsaWRhdGVQb2xpY3kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxvREFBNEI7QUFFNUIsNERBQW9EO0FBSXBELDJFQU1nRDtBQUNoRCw2RUFBMkY7QUFDM0Ysb0RBQW9EO0FBRXBELDZFQUE2RjtBQUU3RixTQUFTLDBCQUEwQixDQUNqQyxDQUEwQixFQUMxQixDQUE2QixFQUM3QixDQUF5QixFQUN6QixhQUFxRDtJQUVyRCxNQUFNLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFBLHVDQUFzQixFQUFDLDRCQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzlHLElBQUksYUFBYSxFQUFFLENBQUM7UUFDbEIsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkIsQ0FBQztTQUFNLENBQUM7UUFDTixnQkFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6QixDQUFDO0FBQ0gsQ0FBQztBQUVELFFBQVEsQ0FBQyx3QkFBd0IsRUFBRTtJQUNqQyxNQUFNLElBQUksR0FBRyxJQUFBLHdCQUFZLEdBQUUsQ0FBQztJQUM1QixTQUFTLGtCQUFrQixDQUFDLElBQXdCO1FBQ2xELE9BQU8sSUFBQSxvREFBa0MsRUFBQyxJQUFJLEVBQUUsSUFBQSxnQ0FBYSxFQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hGLENBQUM7SUFDRCxTQUFTLGNBQWMsQ0FBQyxDQUFrQjtRQUN4QyxPQUFPLEVBQUUsR0FBRyxDQUFDLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxDQUFDO0lBQ3pDLENBQUM7SUFFRCxFQUFFLENBQUMscUJBQXFCLEVBQUU7UUFDeEIsMEJBQTBCLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLEVBQUUsSUFBQSwrQ0FBOEIsRUFBQyxTQUFTLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFakgsK0NBQStDO1FBQy9DLDBCQUEwQixDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxFQUFFLElBQUEsZ0NBQWUsRUFBQyxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFL0Ysd0VBQXdFO1FBQ3hFLDBCQUEwQixDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxFQUFFLElBQUEsZ0NBQWUsRUFBQyxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDL0YsMEJBQTBCLENBQ3hCLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUM3QyxJQUFBLGdDQUFlLEVBQUMsTUFBTSxDQUFDLEVBQ3ZCLElBQUksRUFDSixJQUFJLGdEQUErQixDQUFDLElBQUEsZ0NBQWEsRUFBQyxTQUFTLENBQUMsRUFBRSxJQUFBLGdDQUFlLEVBQUMsTUFBTSxDQUFDLENBQUMsQ0FDdkYsQ0FBQztRQUVGLHFDQUFxQztRQUNyQywwQkFBMEIsQ0FBQyxjQUFjLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxJQUFBLGdDQUFlLEVBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2pILENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCB7IERlc2NyaXB0b3IgfSBmcm9tICdAYml0Z28vd2FzbS1taW5pc2NyaXB0JztcbmltcG9ydCB7IFRyaXBsZSB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBCSVAzMkludGVyZmFjZSB9IGZyb20gJ0BiaXRnby91dHhvLWxpYic7XG5cbmltcG9ydCB7XG4gIGFzc2VydERlc2NyaXB0b3JQb2xpY3ksXG4gIERlc2NyaXB0b3JQb2xpY3lWYWxpZGF0aW9uRXJyb3IsXG4gIERlc2NyaXB0b3JWYWxpZGF0aW9uUG9saWN5LFxuICBnZXRQb2xpY3lGb3JFbnYsXG4gIGdldFZhbGlkYXRvckRlc2NyaXB0b3JUZW1wbGF0ZSxcbn0gZnJvbSAnLi4vLi4vLi4vc3JjL2Rlc2NyaXB0b3IvdmFsaWRhdGVQb2xpY3knO1xuaW1wb3J0IHsgRGVzY3JpcHRvclRlbXBsYXRlLCBnZXREZXNjcmlwdG9yIH0gZnJvbSAnLi4vLi4vY29yZS9kZXNjcmlwdG9yL2Rlc2NyaXB0b3IudXRpbHMnO1xuaW1wb3J0IHsgZ2V0S2V5VHJpcGxlIH0gZnJvbSAnLi4vLi4vY29yZS9rZXkudXRpbHMnO1xuaW1wb3J0IHsgTmFtZWREZXNjcmlwdG9yIH0gZnJvbSAnLi4vLi4vLi4vc3JjL2Rlc2NyaXB0b3InO1xuaW1wb3J0IHsgY3JlYXRlTmFtZWREZXNjcmlwdG9yV2l0aFNpZ25hdHVyZSB9IGZyb20gJy4uLy4uLy4uL3NyYy9kZXNjcmlwdG9yL05hbWVkRGVzY3JpcHRvcic7XG5cbmZ1bmN0aW9uIHRlc3RBc3NlcnREZXNjcmlwdG9yUG9saWN5KFxuICBkOiBOYW1lZERlc2NyaXB0b3I8c3RyaW5nPixcbiAgcDogRGVzY3JpcHRvclZhbGlkYXRpb25Qb2xpY3ksXG4gIGs6IFRyaXBsZTxCSVAzMkludGVyZmFjZT4sXG4gIGV4cGVjdGVkRXJyb3I6IERlc2NyaXB0b3JQb2xpY3lWYWxpZGF0aW9uRXJyb3IgfCBudWxsXG4pIHtcbiAgY29uc3QgZiA9ICgpID0+IGFzc2VydERlc2NyaXB0b3JQb2xpY3koRGVzY3JpcHRvci5mcm9tU3RyaW5nKGQudmFsdWUsICdkZXJpdmFibGUnKSwgcCwgaywgZC5zaWduYXR1cmVzID8/IFtdKTtcbiAgaWYgKGV4cGVjdGVkRXJyb3IpIHtcbiAgICBhc3NlcnQudGhyb3dzKGYpO1xuICB9IGVsc2Uge1xuICAgIGFzc2VydC5kb2VzTm90VGhyb3coZik7XG4gIH1cbn1cblxuZGVzY3JpYmUoJ2Fzc2VydERlc2NyaXB0b3JQb2xpY3knLCBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IGtleXMgPSBnZXRLZXlUcmlwbGUoKTtcbiAgZnVuY3Rpb24gZ2V0TmFtZWREZXNjcmlwdG9yKG5hbWU6IERlc2NyaXB0b3JUZW1wbGF0ZSk6IE5hbWVkRGVzY3JpcHRvciB7XG4gICAgcmV0dXJuIGNyZWF0ZU5hbWVkRGVzY3JpcHRvcldpdGhTaWduYXR1cmUobmFtZSwgZ2V0RGVzY3JpcHRvcihuYW1lKSwga2V5c1swXSk7XG4gIH1cbiAgZnVuY3Rpb24gc3RyaXBTaWduYXR1cmUoZDogTmFtZWREZXNjcmlwdG9yKTogTmFtZWREZXNjcmlwdG9yIHtcbiAgICByZXR1cm4geyAuLi5kLCBzaWduYXR1cmVzOiB1bmRlZmluZWQgfTtcbiAgfVxuXG4gIGl0KCdoYXMgZXhwZWN0ZWQgcmVzdWx0JywgZnVuY3Rpb24gKCkge1xuICAgIHRlc3RBc3NlcnREZXNjcmlwdG9yUG9saWN5KGdldE5hbWVkRGVzY3JpcHRvcignV3NoMk9mMycpLCBnZXRWYWxpZGF0b3JEZXNjcmlwdG9yVGVtcGxhdGUoJ1dzaDJPZjMnKSwga2V5cywgbnVsbCk7XG5cbiAgICAvLyBwcm9kIGRvZXMgb25seSBhbGxvdyBXc2gyT2YzLWlzaCBkZXNjcmlwdG9yc1xuICAgIHRlc3RBc3NlcnREZXNjcmlwdG9yUG9saWN5KGdldE5hbWVkRGVzY3JpcHRvcignV3NoMk9mMycpLCBnZXRQb2xpY3lGb3JFbnYoJ3Byb2QnKSwga2V5cywgbnVsbCk7XG5cbiAgICAvLyBwcm9kIG9ubHkgYWxsb3dzIG90aGVyIGRlc2NyaXB0b3JzIGlmIHRoZXkgYXJlIHNpZ25lZCBieSB0aGUgdXNlciBrZXlcbiAgICB0ZXN0QXNzZXJ0RGVzY3JpcHRvclBvbGljeShnZXROYW1lZERlc2NyaXB0b3IoJ1dzaDJPZjInKSwgZ2V0UG9saWN5Rm9yRW52KCdwcm9kJyksIGtleXMsIG51bGwpO1xuICAgIHRlc3RBc3NlcnREZXNjcmlwdG9yUG9saWN5KFxuICAgICAgc3RyaXBTaWduYXR1cmUoZ2V0TmFtZWREZXNjcmlwdG9yKCdXc2gyT2YyJykpLFxuICAgICAgZ2V0UG9saWN5Rm9yRW52KCdwcm9kJyksXG4gICAgICBrZXlzLFxuICAgICAgbmV3IERlc2NyaXB0b3JQb2xpY3lWYWxpZGF0aW9uRXJyb3IoZ2V0RGVzY3JpcHRvcignV3NoMk9mMicpLCBnZXRQb2xpY3lGb3JFbnYoJ3Byb2QnKSlcbiAgICApO1xuXG4gICAgLy8gdGVzdCBpcyB2ZXJ5IHBlcm1pc3NpdmUgYnkgZGVmYXVsdFxuICAgIHRlc3RBc3NlcnREZXNjcmlwdG9yUG9saWN5KHN0cmlwU2lnbmF0dXJlKGdldE5hbWVkRGVzY3JpcHRvcignV3NoMk9mMicpKSwgZ2V0UG9saWN5Rm9yRW52KCd0ZXN0JyksIGtleXMsIG51bGwpO1xuICB9KTtcbn0pO1xuIl19
|