@bitgo/sdk-coin-cspr 1.0.1-rc.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/.eslintignore +4 -0
- package/.mocharc.yml +8 -0
- package/CHANGELOG.md +8 -0
- package/LICENSE +191 -0
- package/README.md +39 -0
- package/dist/src/cspr.d.ts +101 -0
- package/dist/src/cspr.d.ts.map +1 -0
- package/dist/src/cspr.js +293 -0
- package/dist/src/index.d.ts +4 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +29 -0
- package/dist/src/lib/constants.d.ts +19 -0
- package/dist/src/lib/constants.d.ts.map +1 -0
- package/dist/src/lib/constants.js +28 -0
- package/dist/src/lib/delegateBuilder.d.ts +49 -0
- package/dist/src/lib/delegateBuilder.d.ts.map +1 -0
- package/dist/src/lib/delegateBuilder.js +111 -0
- package/dist/src/lib/ifaces.d.ts +69 -0
- package/dist/src/lib/ifaces.d.ts.map +1 -0
- package/dist/src/lib/ifaces.js +3 -0
- package/dist/src/lib/index.d.ts +6 -0
- package/dist/src/lib/index.d.ts.map +1 -0
- package/dist/src/lib/index.js +31 -0
- package/dist/src/lib/keyPair.d.ts +18 -0
- package/dist/src/lib/keyPair.d.ts.map +1 -0
- package/dist/src/lib/keyPair.js +75 -0
- package/dist/src/lib/transaction.d.ts +55 -0
- package/dist/src/lib/transaction.d.ts.map +1 -0
- package/dist/src/lib/transaction.js +227 -0
- package/dist/src/lib/transactionBuilder.d.ts +124 -0
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder.js +312 -0
- package/dist/src/lib/transactionBuilderFactory.d.ts +46 -0
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilderFactory.js +98 -0
- package/dist/src/lib/transferBuilder.d.ts +39 -0
- package/dist/src/lib/transferBuilder.d.ts.map +1 -0
- package/dist/src/lib/transferBuilder.js +106 -0
- package/dist/src/lib/undelegateBuilder.d.ts +49 -0
- package/dist/src/lib/undelegateBuilder.d.ts.map +1 -0
- package/dist/src/lib/undelegateBuilder.js +111 -0
- package/dist/src/lib/utils.d.ts +188 -0
- package/dist/src/lib/utils.d.ts.map +1 -0
- package/dist/src/lib/utils.js +477 -0
- package/dist/src/lib/walletInitializationBuilder.d.ts +27 -0
- package/dist/src/lib/walletInitializationBuilder.d.ts.map +1 -0
- package/dist/src/lib/walletInitializationBuilder.js +95 -0
- package/dist/src/tcspr.d.ts +11 -0
- package/dist/src/tcspr.d.ts.map +1 -0
- package/dist/src/tcspr.js +24 -0
- package/package.json +62 -0
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { CLValue, CLPublicKey, RuntimeArgs } from 'casper-js-sdk';
|
|
2
|
+
import { BigNumberish } from '@ethersproject/bignumber';
|
|
3
|
+
import { KeyPair } from '.';
|
|
4
|
+
export interface CasperTransaction {
|
|
5
|
+
hash: string;
|
|
6
|
+
from: string;
|
|
7
|
+
fee: Fee;
|
|
8
|
+
deployType: string;
|
|
9
|
+
startTime?: string;
|
|
10
|
+
expiration?: number;
|
|
11
|
+
to?: string;
|
|
12
|
+
amount?: string;
|
|
13
|
+
transferId?: number | string;
|
|
14
|
+
owner1?: string;
|
|
15
|
+
owner2?: string;
|
|
16
|
+
owner3?: string;
|
|
17
|
+
fromDelegate?: string;
|
|
18
|
+
validator?: string;
|
|
19
|
+
}
|
|
20
|
+
export interface CasperNode {
|
|
21
|
+
nodeUrl: string;
|
|
22
|
+
}
|
|
23
|
+
export interface SignatureData {
|
|
24
|
+
signature: string;
|
|
25
|
+
keyPair: KeyPair;
|
|
26
|
+
}
|
|
27
|
+
export interface Fee {
|
|
28
|
+
gasLimit: string;
|
|
29
|
+
gasPrice?: string;
|
|
30
|
+
}
|
|
31
|
+
export interface CasperTransferTransaction {
|
|
32
|
+
amount: BigNumberish;
|
|
33
|
+
target: CLPublicKey;
|
|
34
|
+
id?: number | string;
|
|
35
|
+
extraArguments: Map<string, CLValue>;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Delegate Session Required Data
|
|
39
|
+
*/
|
|
40
|
+
export interface CasperDelegateTransaction {
|
|
41
|
+
action: string;
|
|
42
|
+
delegator: CLPublicKey;
|
|
43
|
+
validator: CLPublicKey;
|
|
44
|
+
amount: BigNumberish;
|
|
45
|
+
extraArguments: Map<string, CLValue>;
|
|
46
|
+
}
|
|
47
|
+
export interface CasperModuleBytesTransaction {
|
|
48
|
+
moduleBytes: Uint8Array;
|
|
49
|
+
args: RuntimeArgs;
|
|
50
|
+
extraArguments: Map<string, CLValue>;
|
|
51
|
+
}
|
|
52
|
+
export interface Owner {
|
|
53
|
+
address: CLPublicKey;
|
|
54
|
+
weight: number;
|
|
55
|
+
}
|
|
56
|
+
export declare type WalletInitContractArgs = Record<'action' | 'deployment_thereshold' | 'key_management_threshold' | 'accounts' | 'weights', CLValue>;
|
|
57
|
+
export declare type DelegateUndelegateContractArgs = Record<'action' | 'delegator' | 'validator' | 'amount', CLValue>;
|
|
58
|
+
/**
|
|
59
|
+
* Secp256k1 return type for sign operations
|
|
60
|
+
*/
|
|
61
|
+
export interface SignResponse {
|
|
62
|
+
signature: Uint8Array;
|
|
63
|
+
recid: number;
|
|
64
|
+
}
|
|
65
|
+
export interface AddressDetails {
|
|
66
|
+
address: string;
|
|
67
|
+
transferId?: string;
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=ifaces.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ifaces.d.ts","sourceRoot":"","sources":["../../../src/lib/ifaces.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,CAAC;AAE5B,MAAM,WAAW,iBAAiB;IAEhC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,GAAG,CAAC;IACT,UAAU,EAAE,MAAM,CAAC;IAEnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAE7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,GAAG;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,WAAW,CAAC;IACpB,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,WAAW,CAAC;IACvB,SAAS,EAAE,WAAW,CAAC;IACvB,MAAM,EAAE,YAAY,CAAC;IACrB,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,4BAA4B;IAC3C,WAAW,EAAE,UAAU,CAAC;IACxB,IAAI,EAAE,WAAW,CAAC;IAClB,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,KAAK;IACpB,OAAO,EAAE,WAAW,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,oBAAY,sBAAsB,GAAG,MAAM,CAEzC,QAAQ,GAAG,uBAAuB,GAAG,0BAA0B,GAAG,UAAU,GAAG,SAAS,EACxF,OAAO,CACR,CAAC;AAEF,oBAAY,8BAA8B,GAAG,MAAM,CAAC,QAAQ,GAAG,WAAW,GAAG,WAAW,GAAG,QAAQ,EAAE,OAAO,CAAC,CAAC;AAE9G;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,UAAU,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWZhY2VzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9pZmFjZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENMVmFsdWUsIENMUHVibGljS2V5LCBSdW50aW1lQXJncyB9IGZyb20gJ2Nhc3Blci1qcy1zZGsnO1xuaW1wb3J0IHsgQmlnTnVtYmVyaXNoIH0gZnJvbSAnQGV0aGVyc3Byb2plY3QvYmlnbnVtYmVyJztcbmltcG9ydCB7IEtleVBhaXIgfSBmcm9tICcuJztcblxuZXhwb3J0IGludGVyZmFjZSBDYXNwZXJUcmFuc2FjdGlvbiB7XG4gIC8vIG1hbmRhdG9yeSBmaWVsZHNcbiAgaGFzaDogc3RyaW5nO1xuICBmcm9tOiBzdHJpbmc7XG4gIGZlZTogRmVlO1xuICBkZXBsb3lUeXBlOiBzdHJpbmc7XG4gIC8vIG9wdGlvbmFsIGZpZWxkc1xuICBzdGFydFRpbWU/OiBzdHJpbmc7XG4gIGV4cGlyYXRpb24/OiBudW1iZXI7XG4gIC8vIHRyYW5zZmVyIGZpZWxkc1xuICB0bz86IHN0cmluZztcbiAgYW1vdW50Pzogc3RyaW5nOyAvLyBhbHNvIHVzZWQgZm9yIGRlbGVnYXRlL3VuZGVsZWdhdGVcbiAgdHJhbnNmZXJJZD86IG51bWJlciB8IHN0cmluZztcbiAgLy8gd2FsbGV0IGluaXQgZmllbGRzXG4gIG93bmVyMT86IHN0cmluZztcbiAgb3duZXIyPzogc3RyaW5nO1xuICBvd25lcjM/OiBzdHJpbmc7XG4gIC8vIGRlbGVnYXRlIC8gdW5kZWxlZ2F0ZSBmaWVsZHNcbiAgZnJvbURlbGVnYXRlPzogc3RyaW5nO1xuICB2YWxpZGF0b3I/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FzcGVyTm9kZSB7XG4gIG5vZGVVcmw6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTaWduYXR1cmVEYXRhIHtcbiAgc2lnbmF0dXJlOiBzdHJpbmc7XG4gIGtleVBhaXI6IEtleVBhaXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmVlIHtcbiAgZ2FzTGltaXQ6IHN0cmluZztcbiAgZ2FzUHJpY2U/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FzcGVyVHJhbnNmZXJUcmFuc2FjdGlvbiB7XG4gIGFtb3VudDogQmlnTnVtYmVyaXNoO1xuICB0YXJnZXQ6IENMUHVibGljS2V5O1xuICBpZD86IG51bWJlciB8IHN0cmluZztcbiAgZXh0cmFBcmd1bWVudHM6IE1hcDxzdHJpbmcsIENMVmFsdWU+O1xufVxuXG4vKipcbiAqIERlbGVnYXRlIFNlc3Npb24gUmVxdWlyZWQgRGF0YVxuICovXG5leHBvcnQgaW50ZXJmYWNlIENhc3BlckRlbGVnYXRlVHJhbnNhY3Rpb24ge1xuICBhY3Rpb246IHN0cmluZztcbiAgZGVsZWdhdG9yOiBDTFB1YmxpY0tleTtcbiAgdmFsaWRhdG9yOiBDTFB1YmxpY0tleTtcbiAgYW1vdW50OiBCaWdOdW1iZXJpc2g7XG4gIGV4dHJhQXJndW1lbnRzOiBNYXA8c3RyaW5nLCBDTFZhbHVlPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDYXNwZXJNb2R1bGVCeXRlc1RyYW5zYWN0aW9uIHtcbiAgbW9kdWxlQnl0ZXM6IFVpbnQ4QXJyYXk7XG4gIGFyZ3M6IFJ1bnRpbWVBcmdzO1xuICBleHRyYUFyZ3VtZW50czogTWFwPHN0cmluZywgQ0xWYWx1ZT47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3duZXIge1xuICBhZGRyZXNzOiBDTFB1YmxpY0tleTtcbiAgd2VpZ2h0OiBudW1iZXI7XG59XG5cbmV4cG9ydCB0eXBlIFdhbGxldEluaXRDb250cmFjdEFyZ3MgPSBSZWNvcmQ8XG4gIC8vIFRoaXMgdHlwbyBpcyBvbiBwdXJwb3NlIHNpbmNlIHRoZSBjb250cmFjdCB3ZSB1c2UgZm9yIG11bHRpc2lnIHdhbGxldCBpbml0aWFsaXphdGlvbiBleHBlY3QgdGhpcyBhcmd1bWVudCB0byBiZSB3cml0dGVuIGxpa2UgdGhpcy5cbiAgJ2FjdGlvbicgfCAnZGVwbG95bWVudF90aGVyZXNob2xkJyB8ICdrZXlfbWFuYWdlbWVudF90aHJlc2hvbGQnIHwgJ2FjY291bnRzJyB8ICd3ZWlnaHRzJyxcbiAgQ0xWYWx1ZVxuPjtcblxuZXhwb3J0IHR5cGUgRGVsZWdhdGVVbmRlbGVnYXRlQ29udHJhY3RBcmdzID0gUmVjb3JkPCdhY3Rpb24nIHwgJ2RlbGVnYXRvcicgfCAndmFsaWRhdG9yJyB8ICdhbW91bnQnLCBDTFZhbHVlPjtcblxuLyoqXG4gKiBTZWNwMjU2azEgcmV0dXJuIHR5cGUgZm9yIHNpZ24gb3BlcmF0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFNpZ25SZXNwb25zZSB7XG4gIHNpZ25hdHVyZTogVWludDhBcnJheTtcbiAgcmVjaWQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBZGRyZXNzRGV0YWlscyB7XG4gIGFkZHJlc3M6IHN0cmluZztcbiAgdHJhbnNmZXJJZD86IHN0cmluZztcbn1cbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AAEjC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,KAAK,EAAE,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
+
}) : function(o, v) {
|
|
12
|
+
o["default"] = v;
|
|
13
|
+
});
|
|
14
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
+
if (mod && mod.__esModule) return mod;
|
|
16
|
+
var result = {};
|
|
17
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
+
__setModuleDefault(result, mod);
|
|
19
|
+
return result;
|
|
20
|
+
};
|
|
21
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
+
exports.Utils = exports.KeyPair = exports.TransactionBuilderFactory = exports.Transaction = void 0;
|
|
23
|
+
const Utils = __importStar(require("./utils"));
|
|
24
|
+
exports.Utils = Utils;
|
|
25
|
+
var transaction_1 = require("./transaction");
|
|
26
|
+
Object.defineProperty(exports, "Transaction", { enumerable: true, get: function () { return transaction_1.Transaction; } });
|
|
27
|
+
var transactionBuilderFactory_1 = require("./transactionBuilderFactory");
|
|
28
|
+
Object.defineProperty(exports, "TransactionBuilderFactory", { enumerable: true, get: function () { return transactionBuilderFactory_1.TransactionBuilderFactory; } });
|
|
29
|
+
var keyPair_1 = require("./keyPair");
|
|
30
|
+
Object.defineProperty(exports, "KeyPair", { enumerable: true, get: function () { return keyPair_1.KeyPair; } });
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQ0FBaUM7QUFNeEIsc0JBQUs7QUFKZCw2Q0FBNEM7QUFBbkMsMEdBQUEsV0FBVyxPQUFBO0FBQ3BCLHlFQUF3RTtBQUEvRCxzSUFBQSx5QkFBeUIsT0FBQTtBQUNsQyxxQ0FBb0M7QUFBM0Isa0dBQUEsT0FBTyxPQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgVXRpbHMgZnJvbSAnLi91dGlscyc7XG5cbmV4cG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5leHBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5IH0gZnJvbSAnLi90cmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5JztcbmV4cG9ydCB7IEtleVBhaXIgfSBmcm9tICcuL2tleVBhaXInO1xuXG5leHBvcnQgeyBVdGlscyB9O1xuIl19
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { KeyPairOptions, DefaultKeys, Secp256k1ExtendedKeyPair } from '@bitgo/sdk-core';
|
|
2
|
+
export declare class KeyPair extends Secp256k1ExtendedKeyPair {
|
|
3
|
+
/**
|
|
4
|
+
* Public constructor. By default, creates a key pair with a random master seed.
|
|
5
|
+
*
|
|
6
|
+
* @param { KeyPairOptions } source Either a master seed, a private key, or a public key
|
|
7
|
+
*/
|
|
8
|
+
constructor(source?: KeyPairOptions);
|
|
9
|
+
/**
|
|
10
|
+
* Default keys format is a pair of Uint8Array keys
|
|
11
|
+
*
|
|
12
|
+
* @returns { DefaultKeys } The keys in the defined format
|
|
13
|
+
*/
|
|
14
|
+
getKeys(): DefaultKeys;
|
|
15
|
+
/** @inheritdoc */
|
|
16
|
+
getAddress(): string;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=keyPair.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keyPair.d.ts","sourceRoot":"","sources":["../../../src/lib/keyPair.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,cAAc,EAId,WAAW,EACX,wBAAwB,EACzB,MAAM,iBAAiB,CAAC;AAIzB,qBAAa,OAAQ,SAAQ,wBAAwB;IACnD;;;;OAIG;gBACS,MAAM,CAAC,EAAE,cAAc;IAoBnC;;;;OAIG;IACH,OAAO,IAAI,WAAW;IAOtB,kBAAkB;IAClB,UAAU,IAAI,MAAM;CAIrB"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
+
}) : function(o, v) {
|
|
12
|
+
o["default"] = v;
|
|
13
|
+
});
|
|
14
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
+
if (mod && mod.__esModule) return mod;
|
|
16
|
+
var result = {};
|
|
17
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
+
__setModuleDefault(result, mod);
|
|
19
|
+
return result;
|
|
20
|
+
};
|
|
21
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
+
exports.KeyPair = void 0;
|
|
23
|
+
const crypto_1 = require("crypto");
|
|
24
|
+
const bip32 = __importStar(require("bip32"));
|
|
25
|
+
const sdk_core_1 = require("@bitgo/sdk-core");
|
|
26
|
+
const constants_1 = require("./constants");
|
|
27
|
+
const DEFAULT_SEED_SIZE_BYTES = 16;
|
|
28
|
+
class KeyPair extends sdk_core_1.Secp256k1ExtendedKeyPair {
|
|
29
|
+
/**
|
|
30
|
+
* Public constructor. By default, creates a key pair with a random master seed.
|
|
31
|
+
*
|
|
32
|
+
* @param { KeyPairOptions } source Either a master seed, a private key, or a public key
|
|
33
|
+
*/
|
|
34
|
+
constructor(source) {
|
|
35
|
+
super(source);
|
|
36
|
+
if (!source) {
|
|
37
|
+
const seed = crypto_1.randomBytes(DEFAULT_SEED_SIZE_BYTES);
|
|
38
|
+
this.hdNode = bip32.fromSeed(seed);
|
|
39
|
+
}
|
|
40
|
+
else if (sdk_core_1.isSeed(source)) {
|
|
41
|
+
this.hdNode = bip32.fromSeed(source.seed);
|
|
42
|
+
}
|
|
43
|
+
else if (sdk_core_1.isPrivateKey(source)) {
|
|
44
|
+
this.recordKeysFromPrivateKey(source.prv);
|
|
45
|
+
}
|
|
46
|
+
else if (sdk_core_1.isPublicKey(source)) {
|
|
47
|
+
this.recordKeysFromPublicKey(source.pub);
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
throw new Error('Invalid key pair options');
|
|
51
|
+
}
|
|
52
|
+
if (this.hdNode) {
|
|
53
|
+
this.keyPair = sdk_core_1.Secp256k1ExtendedKeyPair.toKeyPair(this.hdNode);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Default keys format is a pair of Uint8Array keys
|
|
58
|
+
*
|
|
59
|
+
* @returns { DefaultKeys } The keys in the defined format
|
|
60
|
+
*/
|
|
61
|
+
getKeys() {
|
|
62
|
+
var _a;
|
|
63
|
+
return {
|
|
64
|
+
pub: this.getPublicKey({ compressed: true }).toString('hex'),
|
|
65
|
+
prv: (_a = this.getPrivateKey()) === null || _a === void 0 ? void 0 : _a.toString('hex'),
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
/** @inheritdoc */
|
|
69
|
+
getAddress() {
|
|
70
|
+
const keys = this.getKeys();
|
|
71
|
+
return constants_1.SECP256K1_PREFIX + keys.pub;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
exports.KeyPair = KeyPair;
|
|
75
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5UGFpci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIva2V5UGFpci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsbUNBQXFDO0FBQ3JDLDZDQUErQjtBQUMvQiw4Q0FPeUI7QUFDekIsMkNBQStDO0FBQy9DLE1BQU0sdUJBQXVCLEdBQUcsRUFBRSxDQUFDO0FBRW5DLE1BQWEsT0FBUSxTQUFRLG1DQUF3QjtJQUNuRDs7OztPQUlHO0lBQ0gsWUFBWSxNQUF1QjtRQUNqQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDZCxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1gsTUFBTSxJQUFJLEdBQUcsb0JBQVcsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1lBQ2xELElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNwQzthQUFNLElBQUksaUJBQU0sQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUN6QixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzNDO2FBQU0sSUFBSSx1QkFBWSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQy9CLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDM0M7YUFBTSxJQUFJLHNCQUFXLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDOUIsSUFBSSxDQUFDLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUMxQzthQUFNO1lBQ0wsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1NBQzdDO1FBRUQsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2YsSUFBSSxDQUFDLE9BQU8sR0FBRyxtQ0FBd0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ2hFO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxPQUFPOztRQUNMLE9BQU87WUFDTCxHQUFHLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7WUFDNUQsR0FBRyxFQUFFLE1BQUEsSUFBSSxDQUFDLGFBQWEsRUFBRSwwQ0FBRSxRQUFRLENBQUMsS0FBSyxDQUFDO1NBQzNDLENBQUM7SUFDSixDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLFVBQVU7UUFDUixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDNUIsT0FBTyw0QkFBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0lBQ3JDLENBQUM7Q0FDRjtBQTNDRCwwQkEyQ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByYW5kb21CeXRlcyB9IGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgKiBhcyBiaXAzMiBmcm9tICdiaXAzMic7XG5pbXBvcnQge1xuICBLZXlQYWlyT3B0aW9ucyxcbiAgaXNQcml2YXRlS2V5LFxuICBpc1B1YmxpY0tleSxcbiAgaXNTZWVkLFxuICBEZWZhdWx0S2V5cyxcbiAgU2VjcDI1NmsxRXh0ZW5kZWRLZXlQYWlyLFxufSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHsgU0VDUDI1NksxX1BSRUZJWCB9IGZyb20gJy4vY29uc3RhbnRzJztcbmNvbnN0IERFRkFVTFRfU0VFRF9TSVpFX0JZVEVTID0gMTY7XG5cbmV4cG9ydCBjbGFzcyBLZXlQYWlyIGV4dGVuZHMgU2VjcDI1NmsxRXh0ZW5kZWRLZXlQYWlyIHtcbiAgLyoqXG4gICAqIFB1YmxpYyBjb25zdHJ1Y3Rvci4gQnkgZGVmYXVsdCwgY3JlYXRlcyBhIGtleSBwYWlyIHdpdGggYSByYW5kb20gbWFzdGVyIHNlZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7IEtleVBhaXJPcHRpb25zIH0gc291cmNlIEVpdGhlciBhIG1hc3RlciBzZWVkLCBhIHByaXZhdGUga2V5LCBvciBhIHB1YmxpYyBrZXlcbiAgICovXG4gIGNvbnN0cnVjdG9yKHNvdXJjZT86IEtleVBhaXJPcHRpb25zKSB7XG4gICAgc3VwZXIoc291cmNlKTtcbiAgICBpZiAoIXNvdXJjZSkge1xuICAgICAgY29uc3Qgc2VlZCA9IHJhbmRvbUJ5dGVzKERFRkFVTFRfU0VFRF9TSVpFX0JZVEVTKTtcbiAgICAgIHRoaXMuaGROb2RlID0gYmlwMzIuZnJvbVNlZWQoc2VlZCk7XG4gICAgfSBlbHNlIGlmIChpc1NlZWQoc291cmNlKSkge1xuICAgICAgdGhpcy5oZE5vZGUgPSBiaXAzMi5mcm9tU2VlZChzb3VyY2Uuc2VlZCk7XG4gICAgfSBlbHNlIGlmIChpc1ByaXZhdGVLZXkoc291cmNlKSkge1xuICAgICAgdGhpcy5yZWNvcmRLZXlzRnJvbVByaXZhdGVLZXkoc291cmNlLnBydik7XG4gICAgfSBlbHNlIGlmIChpc1B1YmxpY0tleShzb3VyY2UpKSB7XG4gICAgICB0aGlzLnJlY29yZEtleXNGcm9tUHVibGljS2V5KHNvdXJjZS5wdWIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQga2V5IHBhaXIgb3B0aW9ucycpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmhkTm9kZSkge1xuICAgICAgdGhpcy5rZXlQYWlyID0gU2VjcDI1NmsxRXh0ZW5kZWRLZXlQYWlyLnRvS2V5UGFpcih0aGlzLmhkTm9kZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERlZmF1bHQga2V5cyBmb3JtYXQgaXMgYSBwYWlyIG9mIFVpbnQ4QXJyYXkga2V5c1xuICAgKlxuICAgKiBAcmV0dXJucyB7IERlZmF1bHRLZXlzIH0gVGhlIGtleXMgaW4gdGhlIGRlZmluZWQgZm9ybWF0XG4gICAqL1xuICBnZXRLZXlzKCk6IERlZmF1bHRLZXlzIHtcbiAgICByZXR1cm4ge1xuICAgICAgcHViOiB0aGlzLmdldFB1YmxpY0tleSh7IGNvbXByZXNzZWQ6IHRydWUgfSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgcHJ2OiB0aGlzLmdldFByaXZhdGVLZXkoKT8udG9TdHJpbmcoJ2hleCcpLFxuICAgIH07XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgZ2V0QWRkcmVzcygpOiBzdHJpbmcge1xuICAgIGNvbnN0IGtleXMgPSB0aGlzLmdldEtleXMoKTtcbiAgICByZXR1cm4gU0VDUDI1NksxX1BSRUZJWCArIGtleXMucHViO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { BaseCoin as CoinConfig } from '@bitgo/statics';
|
|
2
|
+
import { DeployUtil } from 'casper-js-sdk';
|
|
3
|
+
import { BaseKey, BaseTransaction, TransactionType } from '@bitgo/sdk-core';
|
|
4
|
+
import { KeyPair } from './keyPair';
|
|
5
|
+
import { CasperTransaction } from './ifaces';
|
|
6
|
+
export declare class Transaction extends BaseTransaction {
|
|
7
|
+
protected _type: TransactionType;
|
|
8
|
+
protected _deploy: DeployUtil.Deploy;
|
|
9
|
+
constructor(_coinConfig: Readonly<CoinConfig>);
|
|
10
|
+
/** @inheritdoc */
|
|
11
|
+
canSign(key: BaseKey): boolean;
|
|
12
|
+
sign(keyPair: KeyPair): void;
|
|
13
|
+
/**
|
|
14
|
+
* Add a signature to this transaction and to and its deploy
|
|
15
|
+
*
|
|
16
|
+
* @param {string} signature The signature to add, in string hex format
|
|
17
|
+
* @param {KeyPair} keyPair The key pair that created the signature
|
|
18
|
+
*/
|
|
19
|
+
addSignature(signature: string, keyPair: KeyPair): void;
|
|
20
|
+
/** @inheritdoc */
|
|
21
|
+
toBroadcastFormat(): string;
|
|
22
|
+
/** @inheritdoc */
|
|
23
|
+
toJson(): CasperTransaction;
|
|
24
|
+
/**
|
|
25
|
+
* Set the transaction type
|
|
26
|
+
*
|
|
27
|
+
* @param {TransactionType} transactionType The transaction type to be set
|
|
28
|
+
*/
|
|
29
|
+
setTransactionType(transactionType: TransactionType): void;
|
|
30
|
+
/**
|
|
31
|
+
* Retrieve signatures from the deploy instance and load them into the signatures list
|
|
32
|
+
*/
|
|
33
|
+
loadPreviousSignatures(): void;
|
|
34
|
+
/**
|
|
35
|
+
* Set owners inside a json representing a wallet initialization tx.
|
|
36
|
+
*
|
|
37
|
+
* @param {Record<string, any>} txJson json to modify
|
|
38
|
+
*/
|
|
39
|
+
setOwnersInJson(txJson: Record<string, any>): void;
|
|
40
|
+
/**
|
|
41
|
+
* Set transfer fields inside a json representing a transfer tx.
|
|
42
|
+
*
|
|
43
|
+
* @param {Record<string, any>} txJson json to modify
|
|
44
|
+
*/
|
|
45
|
+
setTransfersFieldsInJson(txJson: Record<string, any>): void;
|
|
46
|
+
/**
|
|
47
|
+
* Set delegate / undelegate fields inside a json representing the tx.
|
|
48
|
+
*
|
|
49
|
+
* @param {Record<string, any>} txJson json to modify
|
|
50
|
+
*/
|
|
51
|
+
setDelegateFieldsInJson(txJson: Record<string, any>): void;
|
|
52
|
+
get casperTx(): DeployUtil.Deploy;
|
|
53
|
+
set casperTx(deploy: DeployUtil.Deploy);
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=transaction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../../src/lib/transaction.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAA4B,UAAU,EAA0B,MAAM,eAAe,CAAC;AAC7F,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,eAAe,EAAyC,MAAM,iBAAiB,CAAC;AACnH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAoB7C,qBAAa,WAAY,SAAQ,eAAe;IAC9C,SAAS,CAAC,KAAK,EAAE,eAAe,CAAC;IACjC,SAAS,CAAC,OAAO,EAAE,UAAU,CAAC,MAAM,CAAC;gBAEzB,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C,kBAAkB;IAClB,OAAO,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO;IAI9B,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAoB5B;;;;;OAKG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAqBvD,kBAAkB;IAClB,iBAAiB,IAAI,MAAM;IAe3B,kBAAkB;IAClB,MAAM,IAAI,iBAAiB;IAgD3B;;;;OAIG;IACH,kBAAkB,CAAC,eAAe,EAAE,eAAe,GAAG,IAAI;IAI1D;;OAEG;IACH,sBAAsB,IAAI,IAAI;IAQ9B;;;;OAIG;IACH,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IA2BlD;;;;OAIG;IACH,wBAAwB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAsB3D;;;;OAIG;IACH,uBAAuB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAsB1D,IAAI,QAAQ,IAAI,UAAU,CAAC,MAAM,CAEhC;IAED,IAAI,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC,MAAM,EAErC;CAGF"}
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
+
}) : function(o, v) {
|
|
12
|
+
o["default"] = v;
|
|
13
|
+
});
|
|
14
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
+
if (mod && mod.__esModule) return mod;
|
|
16
|
+
var result = {};
|
|
17
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
+
__setModuleDefault(result, mod);
|
|
19
|
+
return result;
|
|
20
|
+
};
|
|
21
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
+
exports.Transaction = void 0;
|
|
23
|
+
const _ = __importStar(require("lodash"));
|
|
24
|
+
const casper_js_sdk_1 = require("casper-js-sdk");
|
|
25
|
+
const sdk_core_1 = require("@bitgo/sdk-core");
|
|
26
|
+
const keyPair_1 = require("./keyPair");
|
|
27
|
+
const constants_1 = require("./constants");
|
|
28
|
+
const utils_1 = require("./utils");
|
|
29
|
+
class Transaction extends sdk_core_1.BaseTransaction {
|
|
30
|
+
constructor(_coinConfig) {
|
|
31
|
+
super(_coinConfig);
|
|
32
|
+
}
|
|
33
|
+
/** @inheritdoc */
|
|
34
|
+
canSign(key) {
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
sign(keyPair) {
|
|
38
|
+
const keys = keyPair.getKeys();
|
|
39
|
+
if (!keys.prv) {
|
|
40
|
+
throw new sdk_core_1.SigningError('Missing private key');
|
|
41
|
+
}
|
|
42
|
+
if (this._deploy.approvals.some((ap) => !ap.signer.startsWith(constants_1.SECP256K1_PREFIX) || !utils_1.isValidPublicKey(utils_1.removeAlgoPrefixFromHexValue(ap.signer)))) {
|
|
43
|
+
throw new sdk_core_1.SigningError('Invalid deploy. Already signed with an invalid key');
|
|
44
|
+
}
|
|
45
|
+
const secpKeys = new casper_js_sdk_1.Keys.Secp256K1(Uint8Array.from(Buffer.from(keys.pub, 'hex')), Uint8Array.from(Buffer.from(keys.prv, 'hex')));
|
|
46
|
+
const signedDeploy = casper_js_sdk_1.DeployUtil.signDeploy(this._deploy, secpKeys);
|
|
47
|
+
this._signatures.push(signedDeploy.approvals[signedDeploy.approvals.length - 1].signature);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Add a signature to this transaction and to and its deploy
|
|
51
|
+
*
|
|
52
|
+
* @param {string} signature The signature to add, in string hex format
|
|
53
|
+
* @param {KeyPair} keyPair The key pair that created the signature
|
|
54
|
+
*/
|
|
55
|
+
addSignature(signature, keyPair) {
|
|
56
|
+
const pub = keyPair.getKeys().pub;
|
|
57
|
+
const signatureBuffer = Uint8Array.from(Buffer.from(signature, 'hex'));
|
|
58
|
+
const pubKeyBuffer = Uint8Array.from(Buffer.from(pub, 'hex'));
|
|
59
|
+
const parsedPublicKey = casper_js_sdk_1.Keys.Secp256K1.parsePublicKey(pubKeyBuffer, 'raw');
|
|
60
|
+
const pubKeyHex = casper_js_sdk_1.Keys.Secp256K1.accountHex(parsedPublicKey);
|
|
61
|
+
if (utils_1.removeAlgoPrefixFromHexValue(pubKeyHex) !== pub) {
|
|
62
|
+
throw new sdk_core_1.SigningError('Signer does not match signature');
|
|
63
|
+
}
|
|
64
|
+
const signedDeploy = casper_js_sdk_1.DeployUtil.setSignature(this._deploy, signatureBuffer, casper_js_sdk_1.CLPublicKey.fromSecp256K1(parsedPublicKey));
|
|
65
|
+
const approval = _.last(signedDeploy.approvals);
|
|
66
|
+
if (utils_1.removeAlgoPrefixFromHexValue(approval.signature) !== signature) {
|
|
67
|
+
throw new sdk_core_1.SigningError('Invalid signature');
|
|
68
|
+
}
|
|
69
|
+
this._signatures.push(signature);
|
|
70
|
+
}
|
|
71
|
+
/** @inheritdoc */
|
|
72
|
+
toBroadcastFormat() {
|
|
73
|
+
if (!this.casperTx) {
|
|
74
|
+
throw new sdk_core_1.InvalidTransactionError('Empty transaction');
|
|
75
|
+
}
|
|
76
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
77
|
+
const txJson = casper_js_sdk_1.DeployUtil.deployToJson(this.casperTx);
|
|
78
|
+
// The new casper lib is converting the TTL from miliseconds to another date format, in this case 1 day
|
|
79
|
+
// we need to leave it as ms for the HSM to be able to parse it
|
|
80
|
+
txJson.deploy.header.ttl = `${this.casperTx.header.ttl}ms`;
|
|
81
|
+
this.setOwnersInJson(txJson);
|
|
82
|
+
this.setTransfersFieldsInJson(txJson);
|
|
83
|
+
this.setDelegateFieldsInJson(txJson);
|
|
84
|
+
return JSON.stringify(txJson);
|
|
85
|
+
}
|
|
86
|
+
/** @inheritdoc */
|
|
87
|
+
toJson() {
|
|
88
|
+
var _a;
|
|
89
|
+
const deployPayment = (_a = this._deploy.payment.asModuleBytes()) === null || _a === void 0 ? void 0 : _a.getArgByName('amount');
|
|
90
|
+
if (!deployPayment) {
|
|
91
|
+
throw new sdk_core_1.InvalidTransactionError('Undefined fee');
|
|
92
|
+
}
|
|
93
|
+
const owner1Index = 0;
|
|
94
|
+
const owner2Index = 1;
|
|
95
|
+
const owner3Index = 2;
|
|
96
|
+
const sourcePublicKey = Buffer.from(this._deploy.header.account.value()).toString('hex');
|
|
97
|
+
const sourceAddress = new keyPair_1.KeyPair({ pub: sourcePublicKey }).getAddress();
|
|
98
|
+
const result = {
|
|
99
|
+
hash: Buffer.from(this._deploy.hash).toString('hex'),
|
|
100
|
+
fee: { gasLimit: deployPayment.value().toString(), gasPrice: this._deploy.header.gasPrice.toString() },
|
|
101
|
+
from: sourceAddress,
|
|
102
|
+
startTime: new Date(this._deploy.header.timestamp).toISOString(),
|
|
103
|
+
expiration: this._deploy.header.ttl,
|
|
104
|
+
deployType: this._deploy.session.getArgByName(constants_1.TRANSACTION_TYPE).value(),
|
|
105
|
+
};
|
|
106
|
+
const transactionType = utils_1.getDeployType(this._deploy.session);
|
|
107
|
+
switch (transactionType) {
|
|
108
|
+
case sdk_core_1.TransactionType.Send:
|
|
109
|
+
result.to = utils_1.getTransferDestinationAddress(this._deploy.session);
|
|
110
|
+
result.amount = utils_1.getTransferAmount(this._deploy.session);
|
|
111
|
+
result.transferId = utils_1.getTransferId(this._deploy.session);
|
|
112
|
+
break;
|
|
113
|
+
case sdk_core_1.TransactionType.WalletInitialization:
|
|
114
|
+
result.owner1 = this.casperTx.session.getArgByName(constants_1.OWNER_PREFIX + owner1Index).value();
|
|
115
|
+
result.owner2 = this.casperTx.session.getArgByName(constants_1.OWNER_PREFIX + owner2Index).value();
|
|
116
|
+
result.owner3 = this.casperTx.session.getArgByName(constants_1.OWNER_PREFIX + owner3Index).value();
|
|
117
|
+
break;
|
|
118
|
+
case sdk_core_1.TransactionType.StakingLock:
|
|
119
|
+
result.fromDelegate = utils_1.getDelegatorAddress(this.casperTx.session);
|
|
120
|
+
result.validator = utils_1.getValidatorAddress(this.casperTx.session);
|
|
121
|
+
result.amount = utils_1.getDelegateAmount(this.casperTx.session);
|
|
122
|
+
break;
|
|
123
|
+
case sdk_core_1.TransactionType.StakingUnlock:
|
|
124
|
+
result.fromDelegate = utils_1.getDelegatorAddress(this.casperTx.session);
|
|
125
|
+
result.validator = utils_1.getValidatorAddress(this.casperTx.session);
|
|
126
|
+
result.amount = utils_1.getDelegateAmount(this.casperTx.session);
|
|
127
|
+
break;
|
|
128
|
+
}
|
|
129
|
+
return result;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Set the transaction type
|
|
133
|
+
*
|
|
134
|
+
* @param {TransactionType} transactionType The transaction type to be set
|
|
135
|
+
*/
|
|
136
|
+
setTransactionType(transactionType) {
|
|
137
|
+
this._type = transactionType;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Retrieve signatures from the deploy instance and load them into the signatures list
|
|
141
|
+
*/
|
|
142
|
+
loadPreviousSignatures() {
|
|
143
|
+
if (this._deploy.approvals && this._deploy.approvals.length > 0) {
|
|
144
|
+
this._deploy.approvals.forEach((approval) => {
|
|
145
|
+
this._signatures.push(approval.signature);
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Set owners inside a json representing a wallet initialization tx.
|
|
151
|
+
*
|
|
152
|
+
* @param {Record<string, any>} txJson json to modify
|
|
153
|
+
*/
|
|
154
|
+
setOwnersInJson(txJson) {
|
|
155
|
+
if (utils_1.getDeployType(this.casperTx.session) === sdk_core_1.TransactionType.WalletInitialization) {
|
|
156
|
+
const argName = 0;
|
|
157
|
+
const argValue = 1;
|
|
158
|
+
const owner0 = 0;
|
|
159
|
+
const owner1 = 1;
|
|
160
|
+
const owner2 = 2;
|
|
161
|
+
const ownersValues = new Map();
|
|
162
|
+
ownersValues.set(constants_1.TRANSACTION_TYPE, this.casperTx.session.getArgByName(constants_1.TRANSACTION_TYPE).value());
|
|
163
|
+
[owner0, owner1, owner2].forEach((index) => {
|
|
164
|
+
ownersValues.set(constants_1.OWNER_PREFIX + index, this.casperTx.session.getArgByName(constants_1.OWNER_PREFIX + index).value());
|
|
165
|
+
});
|
|
166
|
+
txJson['deploy']['session']['ModuleBytes']['args'].forEach((arg) => {
|
|
167
|
+
if (ownersValues.has(arg[argName])) {
|
|
168
|
+
arg[argValue]['parsed'] = ownersValues.get(arg[argName]);
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Set transfer fields inside a json representing a transfer tx.
|
|
175
|
+
*
|
|
176
|
+
* @param {Record<string, any>} txJson json to modify
|
|
177
|
+
*/
|
|
178
|
+
setTransfersFieldsInJson(txJson) {
|
|
179
|
+
if (utils_1.getDeployType(this.casperTx.session) === sdk_core_1.TransactionType.Send) {
|
|
180
|
+
const argName = 0;
|
|
181
|
+
const argValue = 1;
|
|
182
|
+
const transferValues = new Map();
|
|
183
|
+
transferValues.set(constants_1.TRANSACTION_TYPE, this.casperTx.session.getArgByName(constants_1.TRANSACTION_TYPE).value());
|
|
184
|
+
transferValues.set('amount', utils_1.getTransferAmount(this.casperTx.session));
|
|
185
|
+
transferValues.set('to_address', utils_1.getTransferDestinationAddress(this.casperTx.session));
|
|
186
|
+
const transferId = utils_1.getTransferId(this.casperTx.session);
|
|
187
|
+
if (transferId !== undefined) {
|
|
188
|
+
transferValues.set('id', transferId.toString());
|
|
189
|
+
}
|
|
190
|
+
txJson['deploy']['session']['Transfer']['args'].forEach((arg) => {
|
|
191
|
+
if (transferValues.has(arg[argName])) {
|
|
192
|
+
arg[argValue]['parsed'] = transferValues.get(arg[argName]);
|
|
193
|
+
}
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Set delegate / undelegate fields inside a json representing the tx.
|
|
199
|
+
*
|
|
200
|
+
* @param {Record<string, any>} txJson json to modify
|
|
201
|
+
*/
|
|
202
|
+
setDelegateFieldsInJson(txJson) {
|
|
203
|
+
if (utils_1.getDeployType(this.casperTx.session) === sdk_core_1.TransactionType.StakingLock ||
|
|
204
|
+
utils_1.getDeployType(this.casperTx.session) === sdk_core_1.TransactionType.StakingUnlock) {
|
|
205
|
+
const argName = 0;
|
|
206
|
+
const argValue = 1;
|
|
207
|
+
const delegateValues = new Map();
|
|
208
|
+
delegateValues.set(constants_1.TRANSACTION_TYPE, this.casperTx.session.getArgByName(constants_1.TRANSACTION_TYPE).value());
|
|
209
|
+
delegateValues.set('amount', utils_1.getDelegateAmount(this.casperTx.session));
|
|
210
|
+
delegateValues.set(constants_1.DELEGATE_FROM_ADDRESS, utils_1.getDelegatorAddress(this.casperTx.session));
|
|
211
|
+
delegateValues.set(constants_1.DELEGATE_VALIDATOR, utils_1.getValidatorAddress(this.casperTx.session));
|
|
212
|
+
txJson.deploy.session.ModuleBytes.args.forEach((arg) => {
|
|
213
|
+
if (delegateValues.has(arg[argName])) {
|
|
214
|
+
arg[argValue]['parsed'] = delegateValues.get(arg[argName]);
|
|
215
|
+
}
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
get casperTx() {
|
|
220
|
+
return this._deploy;
|
|
221
|
+
}
|
|
222
|
+
set casperTx(deploy) {
|
|
223
|
+
this._deploy = deploy;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
exports.Transaction = Transaction;
|
|
227
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwwQ0FBNEI7QUFFNUIsaURBQTZGO0FBQzdGLDhDQUFtSDtBQUNuSCx1Q0FBb0M7QUFFcEMsMkNBTXFCO0FBQ3JCLG1DQVVpQjtBQUVqQixNQUFhLFdBQVksU0FBUSwwQkFBZTtJQUk5QyxZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLE9BQU8sQ0FBQyxHQUFZO1FBQ2xCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELElBQUksQ0FBQyxPQUFnQjtRQUNuQixNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDYixNQUFNLElBQUksdUJBQVksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1NBQy9DO1FBQ0QsSUFDRSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQ3pCLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLDRCQUFnQixDQUFDLElBQUksQ0FBQyx3QkFBZ0IsQ0FBQyxvQ0FBNEIsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FDOUcsRUFDRDtZQUNBLE1BQU0sSUFBSSx1QkFBWSxDQUFDLG9EQUFvRCxDQUFDLENBQUM7U0FDOUU7UUFDRCxNQUFNLFFBQVEsR0FBRyxJQUFJLG9CQUFJLENBQUMsU0FBUyxDQUNqQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUM3QyxVQUFVLENB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UUFDVixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUVELElBQUksUUFBUSxDQUFDLE1BQXlCO1FBQ3BDLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO0lBQ3hCLENBQUM7Q0FHRjtBQWhQRCxrQ0FnUEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuaW1wb3J0IHsgQ0xQdWJsaWNLZXkgYXMgUHVibGljS2V5LCBEZXBsb3lVdGlsLCBLZXlzLCBDTFN0cmluZywgQ0xVNTEyIH0gZnJvbSAnY2FzcGVyLWpzLXNkayc7XG5pbXBvcnQgeyBCYXNlS2V5LCBCYXNlVHJhbnNhY3Rpb24sIFRyYW5zYWN0aW9uVHlwZSwgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IsIFNpZ25pbmdFcnJvciB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBLZXlQYWlyIH0gZnJvbSAnLi9rZXlQYWlyJztcbmltcG9ydCB7IENhc3BlclRyYW5zYWN0aW9uIH0gZnJvbSAnLi9pZmFjZXMnO1xuaW1wb3J0IHtcbiAgREVMRUdBVEVfRlJPTV9BRERSRVNTLFxuICBERUxFR0FURV9WQUxJREFUT1IsXG4gIE9XTkVSX1BSRUZJWCxcbiAgU0VDUDI1NksxX1BSRUZJWCxcbiAgVFJBTlNBQ1RJT05fVFlQRSxcbn0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHtcbiAgZ2V0VHJhbnNmZXJBbW91bnQsXG4gIGdldFRyYW5zZmVyRGVzdGluYXRpb25BZGRyZXNzLFxuICBnZXRUcmFuc2ZlcklkLFxuICBpc1ZhbGlkUHVibGljS2V5LFxuICByZW1vdmVBbGdvUHJlZml4RnJvbUhleFZhbHVlLFxuICBnZXREZXBsb3lUeXBlLFxuICBnZXREZWxlZ2F0b3JBZGRyZXNzLFxuICBnZXRWYWxpZGF0b3JBZGRyZXNzLFxuICBnZXREZWxlZ2F0ZUFtb3VudCxcbn0gZnJvbSAnLi91dGlscyc7XG5cbmV4cG9ydCBjbGFzcyBUcmFuc2FjdGlvbiBleHRlbmRzIEJhc2VUcmFuc2FjdGlvbiB7XG4gIHByb3RlY3RlZCBfdHlwZTogVHJhbnNhY3Rpb25UeXBlO1xuICBwcm90ZWN0ZWQgX2RlcGxveTogRGVwbG95VXRpbC5EZXBsb3k7XG5cbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGNhblNpZ24oa2V5OiBCYXNlS2V5KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBzaWduKGtleVBhaXI6IEtleVBhaXIpOiB2b2lkIHtcbiAgICBjb25zdCBrZXlzID0ga2V5UGFpci5nZXRLZXlzKCk7XG4gICAgaWYgKCFrZXlzLnBydikge1xuICAgICAgdGhyb3cgbmV3IFNpZ25pbmdFcnJvcignTWlzc2luZyBwcml2YXRlIGtleScpO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICB0aGlzLl9kZXBsb3kuYXBwcm92YWxzLnNvbWUoXG4gICAgICAgIChhcCkgPT4gIWFwLnNpZ25lci5zdGFydHNXaXRoKFNFQ1AyNTZLMV9QUkVGSVgpIHx8ICFpc1ZhbGlkUHVibGljS2V5KHJlbW92ZUFsZ29QcmVmaXhGcm9tSGV4VmFsdWUoYXAuc2lnbmVyKSlcbiAgICAgIClcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBTaWduaW5nRXJyb3IoJ0ludmFsaWQgZGVwbG95LiBBbHJlYWR5IHNpZ25lZCB3aXRoIGFuIGludmFsaWQga2V5Jyk7XG4gICAgfVxuICAgIGNvbnN0IHNlY3BLZXlzID0gbmV3IEtleXMuU2VjcDI1NksxKFxuICAgICAgVWludDhBcnJheS5mcm9tKEJ1ZmZlci5mcm9tKGtleXMucHViLCAnaGV4JykpLFxuICAgICAgVWludDhBcnJheS5mcm9tKEJ1ZmZlci5mcm9tKGtleXMucHJ2LCAnaGV4JykpXG4gICAgKTtcbiAgICBjb25zdCBzaWduZWREZXBsb3kgPSBEZXBsb3lVdGlsLnNpZ25EZXBsb3kodGhpcy5fZGVwbG95LCBzZWNwS2V5cyk7XG4gICAgdGhpcy5fc2lnbmF0dXJlcy5wdXNoKHNpZ25lZERlcGxveS5hcHByb3ZhbHNbc2lnbmVkRGVwbG95LmFwcHJvdmFscy5sZW5ndGggLSAxXS5zaWduYXR1cmUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIHNpZ25hdHVyZSB0byB0aGlzIHRyYW5zYWN0aW9uIGFuZCB0byBhbmQgaXRzIGRlcGxveVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2lnbmF0dXJlIFRoZSBzaWduYXR1cmUgdG8gYWRkLCBpbiBzdHJpbmcgaGV4IGZvcm1hdFxuICAgKiBAcGFyYW0ge0tleVBhaXJ9IGtleVBhaXIgVGhlIGtleSBwYWlyIHRoYXQgY3JlYXRlZCB0aGUgc2lnbmF0dXJlXG4gICAqL1xuICBhZGRTaWduYXR1cmUoc2lnbmF0dXJlOiBzdHJpbmcsIGtleVBhaXI6IEtleVBhaXIpOiB2b2lkIHtcbiAgICBjb25zdCBwdWIgPSBrZXlQYWlyLmdldEtleXMoKS5wdWI7XG4gICAgY29uc3Qgc2lnbmF0dXJlQnVmZmVyID0gVWludDhBcnJheS5mcm9tKEJ1ZmZlci5mcm9tKHNpZ25hdHVyZSwgJ2hleCcpKTtcbiAgICBjb25zdCBwdWJLZXlCdWZmZXIgPSBVaW50OEFycmF5LmZyb20oQnVmZmVyLmZyb20ocHViLCAnaGV4JykpO1xuICAgIGNvbnN0IHBhcnNlZFB1YmxpY0tleSA9IEtleXMuU2VjcDI1NksxLnBhcnNlUHVibGljS2V5KHB1YktleUJ1ZmZlciwgJ3JhdycpO1xuICAgIGNvbnN0IHB1YktleUhleCA9IEtleXMuU2VjcDI1NksxLmFjY291bnRIZXgocGFyc2VkUHVibGljS2V5KTtcbiAgICBpZiAocmVtb3ZlQWxnb1ByZWZpeEZyb21IZXhWYWx1ZShwdWJLZXlIZXgpICE9PSBwdWIpIHtcbiAgICAgIHRocm93IG5ldyBTaWduaW5nRXJyb3IoJ1NpZ25lciBkb2VzIG5vdCBtYXRjaCBzaWduYXR1cmUnKTtcbiAgICB9XG4gICAgY29uc3Qgc2lnbmVkRGVwbG95ID0gRGVwbG95VXRpbC5zZXRTaWduYXR1cmUoXG4gICAgICB0aGlzLl9kZXBsb3ksXG4gICAgICBzaWduYXR1cmVCdWZmZXIsXG4gICAgICBQdWJsaWNLZXkuZnJvbVNlY3AyNTZLMShwYXJzZWRQdWJsaWNLZXkpXG4gICAgKTtcbiAgICBjb25zdCBhcHByb3ZhbCA9IF8ubGFzdChzaWduZWREZXBsb3kuYXBwcm92YWxzKSBhcyBEZXBsb3lVdGlsLkFwcHJvdmFsO1xuICAgIGlmIChyZW1vdmVBbGdvUHJlZml4RnJvbUhleFZhbHVlKGFwcHJvdmFsLnNpZ25hdHVyZSkgIT09IHNpZ25hdHVyZSkge1xuICAgICAgdGhyb3cgbmV3IFNpZ25pbmdFcnJvcignSW52YWxpZCBzaWduYXR1cmUnKTtcbiAgICB9XG4gICAgdGhpcy5fc2lnbmF0dXJlcy5wdXNoKHNpZ25hdHVyZSk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdG9Ccm9hZGNhc3RGb3JtYXQoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuY2FzcGVyVHgpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignRW1wdHkgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBjb25zdCB0eEpzb246IGFueSA9IERlcGxveVV0aWwuZGVwbG95VG9Kc29uKHRoaXMuY2FzcGVyVHgpO1xuICAgIC8vIFRoZSBuZXcgY2FzcGVyIGxpYiBpcyBjb252ZXJ0aW5nIHRoZSBUVEwgZnJvbSBtaWxpc2Vjb25kcyB0byBhbm90aGVyIGRhdGUgZm9ybWF0LCBpbiB0aGlzIGNhc2UgMSBkYXlcbiAgICAvLyB3ZSBuZWVkIHRvIGxlYXZlIGl0IGFzIG1zIGZvciB0aGUgSFNNIHRvIGJlIGFibGUgdG8gcGFyc2UgaXRcbiAgICB0eEpzb24uZGVwbG95LmhlYWRlci50dGwgPSBgJHt0aGlzLmNhc3BlclR4LmhlYWRlci50dGx9bXNgO1xuICAgIHRoaXMuc2V0T3duZXJzSW5Kc29uKHR4SnNvbik7XG4gICAgdGhpcy5zZXRUcmFuc2ZlcnNGaWVsZHNJbkpzb24odHhKc29uKTtcbiAgICB0aGlzLnNldERlbGVnYXRlRmllbGRzSW5Kc29uKHR4SnNvbik7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHR4SnNvbik7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdG9Kc29uKCk6IENhc3BlclRyYW5zYWN0aW9uIHtcbiAgICBjb25zdCBkZXBsb3lQYXltZW50ID0gdGhpcy5fZGVwbG95LnBheW1lbnQuYXNNb2R1bGVCeXRlcygpPy5nZXRBcmdCeU5hbWUoJ2Ftb3VudCcpIGFzIENMVTUxMjtcbiAgICBpZiAoIWRlcGxveVBheW1lbnQpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignVW5kZWZpbmVkIGZlZScpO1xuICAgIH1cblxuICAgIGNvbnN0IG93bmVyMUluZGV4ID0gMDtcbiAgICBjb25zdCBvd25lcjJJbmRleCA9IDE7XG4gICAgY29uc3Qgb3duZXIzSW5kZXggPSAyO1xuICAgIGNvbnN0IHNvdXJjZVB1YmxpY0tleSA9IEJ1ZmZlci5mcm9tKHRoaXMuX2RlcGxveS5oZWFkZXIuYWNjb3VudC52YWx1ZSgpKS50b1N0cmluZygnaGV4Jyk7XG4gICAgY29uc3Qgc291cmNlQWRkcmVzcyA9IG5ldyBLZXlQYWlyKHsgcHViOiBzb3VyY2VQdWJsaWNLZXkgfSkuZ2V0QWRkcmVzcygpO1xuXG4gICAgY29uc3QgcmVzdWx0OiBDYXNwZXJUcmFuc2FjdGlvbiA9IHtcbiAgICAgIGhhc2g6IEJ1ZmZlci5mcm9tKHRoaXMuX2RlcGxveS5oYXNoKS50b1N0cmluZygnaGV4JyksXG4gICAgICBmZWU6IHsgZ2FzTGltaXQ6IGRlcGxveVBheW1lbnQudmFsdWUoKS50b1N0cmluZygpLCBnYXNQcmljZTogdGhpcy5fZGVwbG95LmhlYWRlci5nYXNQcmljZS50b1N0cmluZygpIH0sXG4gICAgICBmcm9tOiBzb3VyY2VBZGRyZXNzLFxuICAgICAgc3RhcnRUaW1lOiBuZXcgRGF0ZSh0aGlzLl9kZXBsb3kuaGVhZGVyLnRpbWVzdGFtcCkudG9JU09TdHJpbmcoKSxcbiAgICAgIGV4cGlyYXRpb246IHRoaXMuX2RlcGxveS5oZWFkZXIudHRsLFxuICAgICAgZGVwbG95VHlwZTogKHRoaXMuX2RlcGxveS5zZXNzaW9uLmdldEFyZ0J5TmFtZShUUkFOU0FDVElPTl9UWVBFKSBhcyBDTFN0cmluZykudmFsdWUoKSxcbiAgICB9O1xuXG4gICAgY29uc3QgdHJhbnNhY3Rpb25UeXBlID0gZ2V0RGVwbG95VHlwZSh0aGlzLl9kZXBsb3kuc2Vzc2lvbik7XG5cbiAgICBzd2l0Y2ggKHRyYW5zYWN0aW9uVHlwZSkge1xuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuU2VuZDpcbiAgICAgICAgcmVzdWx0LnRvID0gZ2V0VHJhbnNmZXJEZXN0aW5hdGlvbkFkZHJlc3ModGhpcy5fZGVwbG95LnNlc3Npb24pO1xuICAgICAgICByZXN1bHQuYW1vdW50ID0gZ2V0VHJhbnNmZXJBbW91bnQodGhpcy5fZGVwbG95LnNlc3Npb24pO1xuICAgICAgICByZXN1bHQudHJhbnNmZXJJZCA9IGdldFRyYW5zZmVySWQodGhpcy5fZGVwbG95LnNlc3Npb24pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLldhbGxldEluaXRpYWxpemF0aW9uOlxuICAgICAgICByZXN1bHQub3duZXIxID0gKHRoaXMuY2FzcGVyVHguc2Vzc2lvbi5nZXRBcmdCeU5hbWUoT1dORVJfUFJFRklYICsgb3duZXIxSW5kZXgpIGFzIENMU3RyaW5nKS52YWx1ZSgpO1xuICAgICAgICByZXN1bHQub3duZXIyID0gKHRoaXMuY2FzcGVyVHguc2Vzc2lvbi5nZXRBcmdCeU5hbWUoT1dORVJfUFJFRklYICsgb3duZXIySW5kZXgpIGFzIENMU3RyaW5nKS52YWx1ZSgpO1xuICAgICAgICByZXN1bHQub3duZXIzID0gKHRoaXMuY2FzcGVyVHguc2Vzc2lvbi5nZXRBcmdCeU5hbWUoT1dORVJfUFJFRklYICsgb3duZXIzSW5kZXgpIGFzIENMU3RyaW5nKS52YWx1ZSgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdMb2NrOlxuICAgICAgICByZXN1bHQuZnJvbURlbGVnYXRlID0gZ2V0RGVsZWdhdG9yQWRkcmVzcyh0aGlzLmNhc3BlclR4LnNlc3Npb24pO1xuICAgICAgICByZXN1bHQudmFsaWRhdG9yID0gZ2V0VmFsaWRhdG9yQWRkcmVzcyh0aGlzLmNhc3BlclR4LnNlc3Npb24pO1xuICAgICAgICByZXN1bHQuYW1vdW50ID0gZ2V0RGVsZWdhdGVBbW91bnQodGhpcy5jYXNwZXJUeC5zZXNzaW9uKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nVW5sb2NrOlxuICAgICAgICByZXN1bHQuZnJvbURlbGVnYXRlID0gZ2V0RGVsZWdhdG9yQWRkcmVzcyh0aGlzLmNhc3BlclR4LnNlc3Npb24pO1xuICAgICAgICByZXN1bHQudmFsaWRhdG9yID0gZ2V0VmFsaWRhdG9yQWRkcmVzcyh0aGlzLmNhc3BlclR4LnNlc3Npb24pO1xuICAgICAgICByZXN1bHQuYW1vdW50ID0gZ2V0RGVsZWdhdGVBbW91bnQodGhpcy5jYXNwZXJUeC5zZXNzaW9uKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSB0cmFuc2FjdGlvbiB0eXBlXG4gICAqXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb25UeXBlfSB0cmFuc2FjdGlvblR5cGUgVGhlIHRyYW5zYWN0aW9uIHR5cGUgdG8gYmUgc2V0XG4gICAqL1xuICBzZXRUcmFuc2FjdGlvblR5cGUodHJhbnNhY3Rpb25UeXBlOiBUcmFuc2FjdGlvblR5cGUpOiB2b2lkIHtcbiAgICB0aGlzLl90eXBlID0gdHJhbnNhY3Rpb25UeXBlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIHNpZ25hdHVyZXMgZnJvbSB0aGUgZGVwbG95IGluc3RhbmNlIGFuZCBsb2FkIHRoZW0gaW50byB0aGUgc2lnbmF0dXJlcyBsaXN0XG4gICAqL1xuICBsb2FkUHJldmlvdXNTaWduYXR1cmVzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9kZXBsb3kuYXBwcm92YWxzICYmIHRoaXMuX2RlcGxveS5hcHByb3ZhbHMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5fZGVwbG95LmFwcHJvdmFscy5mb3JFYWNoKChhcHByb3ZhbCkgPT4ge1xuICAgICAgICB0aGlzLl9zaWduYXR1cmVzLnB1c2goYXBwcm92YWwuc2lnbmF0dXJlKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgb3duZXJzIGluc2lkZSBhIGpzb24gcmVwcmVzZW50aW5nIGEgd2FsbGV0IGluaXRpYWxpemF0aW9uIHR4LlxuICAgKlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IHR4SnNvbiBqc29uIHRvIG1vZGlmeVxuICAgKi9cbiAgc2V0T3duZXJzSW5Kc29uKHR4SnNvbjogUmVjb3JkPHN0cmluZywgYW55Pik6IHZvaWQge1xuICAgIGlmIChnZXREZXBsb3lUeXBlKHRoaXMuY2FzcGVyVHguc2Vzc2lvbikgPT09IFRyYW5zYWN0aW9uVHlwZS5XYWxsZXRJbml0aWFsaXphdGlvbikge1xuICAgICAgY29uc3QgYXJnTmFtZSA9IDA7XG4gICAgICBjb25zdCBhcmdWYWx1ZSA9IDE7XG4gICAgICBjb25zdCBvd25lcjAgPSAwO1xuICAgICAgY29uc3Qgb3duZXIxID0gMTtcbiAgICAgIGNvbnN0IG93bmVyMiA9IDI7XG5cbiAgICAgIGNvbnN0IG93bmVyc1ZhbHVlcyA9IG5ldyBNYXAoKTtcblxuICAgICAgb3duZXJzVmFsdWVzLnNldChUUkFOU0FDVElPTl9UWVBFLCAodGhpcy5jYXNwZXJUeC5zZXNzaW9uLmdldEFyZ0J5TmFtZShUUkFOU0FDVElPTl9UWVBFKSBhcyBDTFN0cmluZykudmFsdWUoKSk7XG5cbiAgICAgIFtvd25lcjAsIG93bmVyMSwgb3duZXIyXS5mb3JFYWNoKChpbmRleCkgPT4ge1xuICAgICAgICBvd25lcnNWYWx1ZXMuc2V0KFxuICAgICAgICAgIE9XTkVSX1BSRUZJWCArIGluZGV4LFxuICAgICAgICAgICh0aGlzLmNhc3BlclR4LnNlc3Npb24uZ2V0QXJnQnlOYW1lKE9XTkVSX1BSRUZJWCArIGluZGV4KSBhcyBDTFN0cmluZykudmFsdWUoKVxuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIHR4SnNvblsnZGVwbG95J11bJ3Nlc3Npb24nXVsnTW9kdWxlQnl0ZXMnXVsnYXJncyddLmZvckVhY2goKGFyZykgPT4ge1xuICAgICAgICBpZiAob3duZXJzVmFsdWVzLmhhcyhhcmdbYXJnTmFtZV0pKSB7XG4gICAgICAgICAgYXJnW2FyZ1ZhbHVlXVsncGFyc2VkJ10gPSBvd25lcnNWYWx1ZXMuZ2V0KGFyZ1thcmdOYW1lXSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdHJhbnNmZXIgZmllbGRzIGluc2lkZSBhIGpzb24gcmVwcmVzZW50aW5nIGEgdHJhbnNmZXIgdHguXG4gICAqXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gdHhKc29uIGpzb24gdG8gbW9kaWZ5XG4gICAqL1xuICBzZXRUcmFuc2ZlcnNGaWVsZHNJbkpzb24odHhKc29uOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogdm9pZCB7XG4gICAgaWYgKGdldERlcGxveVR5cGUodGhpcy5jYXNwZXJUeC5zZXNzaW9uKSA9PT0gVHJhbnNhY3Rpb25UeXBlLlNlbmQpIHtcbiAgICAgIGNvbnN0IGFyZ05hbWUgPSAwO1xuICAgICAgY29uc3QgYXJnVmFsdWUgPSAxO1xuXG4gICAgICBjb25zdCB0cmFuc2ZlclZhbHVlcyA9IG5ldyBNYXAoKTtcbiAgICAgIHRyYW5zZmVyVmFsdWVzLnNldChUUkFOU0FDVElPTl9UWVBFLCAodGhpcy5jYXNwZXJUeC5zZXNzaW9uLmdldEFyZ0J5TmFtZShUUkFOU0FDVElPTl9UWVBFKSBhcyBDTFN0cmluZykudmFsdWUoKSk7XG4gICAgICB0cmFuc2ZlclZhbHVlcy5zZXQoJ2Ftb3VudCcsIGdldFRyYW5zZmVyQW1vdW50KHRoaXMuY2FzcGVyVHguc2Vzc2lvbikpO1xuICAgICAgdHJhbnNmZXJWYWx1ZXMuc2V0KCd0b19hZGRyZXNzJywgZ2V0VHJhbnNmZXJEZXN0aW5hdGlvbkFkZHJlc3ModGhpcy5jYXNwZXJUeC5zZXNzaW9uKSk7XG4gICAgICBjb25zdCB0cmFuc2ZlcklkID0gZ2V0VHJhbnNmZXJJZCh0aGlzLmNhc3BlclR4LnNlc3Npb24pO1xuICAgICAgaWYgKHRyYW5zZmVySWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0cmFuc2ZlclZhbHVlcy5zZXQoJ2lkJywgdHJhbnNmZXJJZC50b1N0cmluZygpKTtcbiAgICAgIH1cblxuICAgICAgdHhKc29uWydkZXBsb3knXVsnc2Vzc2lvbiddWydUcmFuc2ZlciddWydhcmdzJ10uZm9yRWFjaCgoYXJnKSA9PiB7XG4gICAgICAgIGlmICh0cmFuc2ZlclZhbHVlcy5oYXMoYXJnW2FyZ05hbWVdKSkge1xuICAgICAgICAgIGFyZ1thcmdWYWx1ZV1bJ3BhcnNlZCddID0gdHJhbnNmZXJWYWx1ZXMuZ2V0KGFyZ1thcmdOYW1lXSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgZGVsZWdhdGUgLyB1bmRlbGVnYXRlIGZpZWxkcyBpbnNpZGUgYSBqc29uIHJlcHJlc2VudGluZyB0aGUgdHguXG4gICAqXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gdHhKc29uIGpzb24gdG8gbW9kaWZ5XG4gICAqL1xuICBzZXREZWxlZ2F0ZUZpZWxkc0luSnNvbih0eEpzb246IFJlY29yZDxzdHJpbmcsIGFueT4pOiB2b2lkIHtcbiAgICBpZiAoXG4gICAgICBnZXREZXBsb3lUeXBlKHRoaXMuY2FzcGVyVHguc2Vzc2lvbikgPT09IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nTG9jayB8fFxuICAgICAgZ2V0RGVwbG95VHlwZSh0aGlzLmNhc3BlclR4LnNlc3Npb24pID09PSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ1VubG9ja1xuICAgICkge1xuICAgICAgY29uc3QgYXJnTmFtZSA9IDA7XG4gICAgICBjb25zdCBhcmdWYWx1ZSA9IDE7XG5cbiAgICAgIGNvbnN0IGRlbGVnYXRlVmFsdWVzID0gbmV3IE1hcCgpO1xuICAgICAgZGVsZWdhdGVWYWx1ZXMuc2V0KFRSQU5TQUNUSU9OX1RZUEUsICh0aGlzLmNhc3BlclR4LnNlc3Npb24uZ2V0QXJnQnlOYW1lKFRSQU5TQUNUSU9OX1RZUEUpIGFzIENMU3RyaW5nKS52YWx1ZSgpKTtcbiAgICAgIGRlbGVnYXRlVmFsdWVzLnNldCgnYW1vdW50JywgZ2V0RGVsZWdhdGVBbW91bnQodGhpcy5jYXNwZXJUeC5zZXNzaW9uKSk7XG4gICAgICBkZWxlZ2F0ZVZhbHVlcy5zZXQoREVMRUdBVEVfRlJPTV9BRERSRVNTLCBnZXREZWxlZ2F0b3JBZGRyZXNzKHRoaXMuY2FzcGVyVHguc2Vzc2lvbikpO1xuICAgICAgZGVsZWdhdGVWYWx1ZXMuc2V0KERFTEVHQVRFX1ZBTElEQVRPUiwgZ2V0VmFsaWRhdG9yQWRkcmVzcyh0aGlzLmNhc3BlclR4LnNlc3Npb24pKTtcblxuICAgICAgdHhKc29uLmRlcGxveS5zZXNzaW9uLk1vZHVsZUJ5dGVzLmFyZ3MuZm9yRWFjaCgoYXJnKSA9PiB7XG4gICAgICAgIGlmIChkZWxlZ2F0ZVZhbHVlcy5oYXMoYXJnW2FyZ05hbWVdKSkge1xuICAgICAgICAgIGFyZ1thcmdWYWx1ZV1bJ3BhcnNlZCddID0gZGVsZWdhdGVWYWx1ZXMuZ2V0KGFyZ1thcmdOYW1lXSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGdldCBjYXNwZXJUeCgpOiBEZXBsb3lVdGlsLkRlcGxveSB7XG4gICAgcmV0dXJuIHRoaXMuX2RlcGxveTtcbiAgfVxuXG4gIHNldCBjYXNwZXJUeChkZXBsb3k6IERlcGxveVV0aWwuRGVwbG95KSB7XG4gICAgdGhpcy5fZGVwbG95ID0gZGVwbG95O1xuICB9XG5cbiAgLy8gZW5kcmVnaW9uXG59XG4iXX0=
|