@bitgo-beta/sdk-coin-flrp 1.0.1-beta.67 → 1.0.1-beta.69
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +6 -6
- package/dist/src/flrp.d.ts +0 -91
- package/dist/src/flrp.d.ts.map +0 -1
- package/dist/src/flrp.js +0 -343
- package/dist/src/iface.d.ts +0 -25
- package/dist/src/iface.d.ts.map +0 -1
- package/dist/src/iface.js +0 -3
- package/dist/src/index.d.ts +0 -6
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/index.js +0 -45
- package/dist/src/lib/atomicInCTransactionBuilder.d.ts +0 -26
- package/dist/src/lib/atomicInCTransactionBuilder.d.ts.map +0 -1
- package/dist/src/lib/atomicInCTransactionBuilder.js +0 -64
- package/dist/src/lib/atomicTransactionBuilder.d.ts +0 -96
- package/dist/src/lib/atomicTransactionBuilder.d.ts.map +0 -1
- package/dist/src/lib/atomicTransactionBuilder.js +0 -318
- package/dist/src/lib/constants.d.ts +0 -170
- package/dist/src/lib/constants.d.ts.map +0 -1
- package/dist/src/lib/constants.js +0 -227
- package/dist/src/lib/delegatorTxBuilder.d.ts +0 -58
- package/dist/src/lib/delegatorTxBuilder.d.ts.map +0 -1
- package/dist/src/lib/delegatorTxBuilder.js +0 -224
- package/dist/src/lib/errors.d.ts +0 -8
- package/dist/src/lib/errors.d.ts.map +0 -1
- package/dist/src/lib/errors.js +0 -19
- package/dist/src/lib/exportInCTxBuilder.d.ts +0 -77
- package/dist/src/lib/exportInCTxBuilder.d.ts.map +0 -1
- package/dist/src/lib/exportInCTxBuilder.js +0 -199
- package/dist/src/lib/exportInPTxBuilder.d.ts +0 -30
- package/dist/src/lib/exportInPTxBuilder.d.ts.map +0 -1
- package/dist/src/lib/exportInPTxBuilder.js +0 -120
- package/dist/src/lib/iface.d.ts +0 -119
- package/dist/src/lib/iface.d.ts.map +0 -1
- package/dist/src/lib/iface.js +0 -22
- package/dist/src/lib/importInCTxBuilder.d.ts +0 -67
- package/dist/src/lib/importInCTxBuilder.d.ts.map +0 -1
- package/dist/src/lib/importInCTxBuilder.js +0 -403
- package/dist/src/lib/importInPTxBuilder.d.ts +0 -73
- package/dist/src/lib/importInPTxBuilder.d.ts.map +0 -1
- package/dist/src/lib/importInPTxBuilder.js +0 -464
- package/dist/src/lib/index.d.ts +0 -12
- package/dist/src/lib/index.d.ts.map +0 -1
- package/dist/src/lib/index.js +0 -39
- package/dist/src/lib/keyPair.d.ts +0 -58
- package/dist/src/lib/keyPair.d.ts.map +0 -1
- package/dist/src/lib/keyPair.js +0 -142
- package/dist/src/lib/permissionlessValidatorTxBuilder.d.ts +0 -81
- package/dist/src/lib/permissionlessValidatorTxBuilder.d.ts.map +0 -1
- package/dist/src/lib/permissionlessValidatorTxBuilder.js +0 -248
- package/dist/src/lib/transaction.d.ts +0 -111
- package/dist/src/lib/transaction.d.ts.map +0 -1
- package/dist/src/lib/transaction.js +0 -322
- package/dist/src/lib/transactionBuilder.d.ts +0 -85
- package/dist/src/lib/transactionBuilder.d.ts.map +0 -1
- package/dist/src/lib/transactionBuilder.js +0 -167
- package/dist/src/lib/transactionBuilderFactory.d.ts +0 -37
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +0 -1
- package/dist/src/lib/transactionBuilderFactory.js +0 -91
- package/dist/src/lib/types.d.ts +0 -78
- package/dist/src/lib/types.d.ts.map +0 -1
- package/dist/src/lib/types.js +0 -5
- package/dist/src/lib/utils.d.ts +0 -217
- package/dist/src/lib/utils.d.ts.map +0 -1
- package/dist/src/lib/utils.js +0 -498
- package/dist/src/lib/validatorTxBuilder.d.ts +0 -40
- package/dist/src/lib/validatorTxBuilder.d.ts.map +0 -1
- package/dist/src/lib/validatorTxBuilder.js +0 -180
- package/dist/src/register.d.ts +0 -3
- package/dist/src/register.d.ts.map +0 -1
- package/dist/src/register.js +0 -11
- package/dist/src/tflrp.d.ts +0 -8
- package/dist/src/tflrp.d.ts.map +0 -1
- package/dist/src/tflrp.js +0 -14
- package/dist/test/unit/delegatorTxBuilder.test.d.ts +0 -2
- package/dist/test/unit/delegatorTxBuilder.test.d.ts.map +0 -1
- package/dist/test/unit/delegatorTxBuilder.test.js +0 -233
- package/dist/test/unit/flrp.d.ts +0 -2
- package/dist/test/unit/flrp.d.ts.map +0 -1
- package/dist/test/unit/flrp.js +0 -118
- package/dist/test/unit/lib/atomicTransactionBuilder.d.ts +0 -2
- package/dist/test/unit/lib/atomicTransactionBuilder.d.ts.map +0 -1
- package/dist/test/unit/lib/atomicTransactionBuilder.js +0 -222
- package/dist/test/unit/lib/exportInCTxBuilder.d.ts +0 -2
- package/dist/test/unit/lib/exportInCTxBuilder.d.ts.map +0 -1
- package/dist/test/unit/lib/exportInCTxBuilder.js +0 -584
- package/dist/test/unit/lib/exportInPTxBuilder.d.ts +0 -2
- package/dist/test/unit/lib/exportInPTxBuilder.d.ts.map +0 -1
- package/dist/test/unit/lib/exportInPTxBuilder.js +0 -377
- package/dist/test/unit/lib/importInCTxBuilder.d.ts +0 -2
- package/dist/test/unit/lib/importInCTxBuilder.d.ts.map +0 -1
- package/dist/test/unit/lib/importInCTxBuilder.js +0 -257
- package/dist/test/unit/lib/importInPTxBuilder.d.ts +0 -2
- package/dist/test/unit/lib/importInPTxBuilder.d.ts.map +0 -1
- package/dist/test/unit/lib/importInPTxBuilder.js +0 -500
- package/dist/test/unit/lib/transaction.d.ts +0 -2
- package/dist/test/unit/lib/transaction.d.ts.map +0 -1
- package/dist/test/unit/lib/transaction.js +0 -460
- package/dist/test/unit/lib/utils.d.ts +0 -2
- package/dist/test/unit/lib/utils.d.ts.map +0 -1
- package/dist/test/unit/lib/utils.js +0 -286
- package/dist/test/unit/permissionlessValidatorTxBuilder.test.d.ts +0 -2
- package/dist/test/unit/permissionlessValidatorTxBuilder.test.d.ts.map +0 -1
- package/dist/test/unit/permissionlessValidatorTxBuilder.test.js +0 -271
- package/dist/test/unit/smoke.d.ts +0 -2
- package/dist/test/unit/smoke.d.ts.map +0 -1
- package/dist/test/unit/smoke.js +0 -23
- package/dist/test/unit/transactionBuilder.test.d.ts +0 -2
- package/dist/test/unit/transactionBuilder.test.d.ts.map +0 -1
- package/dist/test/unit/transactionBuilder.test.js +0 -114
- package/dist/test/unit/validatorTxBuilder.test.d.ts +0 -2
- package/dist/test/unit/validatorTxBuilder.test.d.ts.map +0 -1
- package/dist/test/unit/validatorTxBuilder.test.js +0 -293
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
import { DefaultKeys, KeyPairOptions, Secp256k1ExtendedKeyPair } from '@bitgo-beta/sdk-core';
|
|
2
|
-
export declare enum addressFormat {
|
|
3
|
-
testnet = "fuji",
|
|
4
|
-
mainnet = "flr"
|
|
5
|
-
}
|
|
6
|
-
export declare class KeyPair extends Secp256k1ExtendedKeyPair {
|
|
7
|
-
/**
|
|
8
|
-
* Public constructor. By default, creates a key pair with a random master seed.
|
|
9
|
-
*
|
|
10
|
-
* @param { KeyPairOptions } source Either a master seed, a private key, or a public key
|
|
11
|
-
*/
|
|
12
|
-
constructor(source?: KeyPairOptions);
|
|
13
|
-
/**
|
|
14
|
-
* Build a keypair from a protocol private key or extended private key.
|
|
15
|
-
*
|
|
16
|
-
* @param {string} prv A raw private key
|
|
17
|
-
*/
|
|
18
|
-
recordKeysFromPrivateKey(prv: string): void;
|
|
19
|
-
/**
|
|
20
|
-
* Build an ECPair from a protocol public key or extended public key.
|
|
21
|
-
*
|
|
22
|
-
* @param {string} pub A raw public key
|
|
23
|
-
*/
|
|
24
|
-
recordKeysFromPublicKey(pub: string): void;
|
|
25
|
-
/**
|
|
26
|
-
* Default keys format is a pair of Uint8Array keys
|
|
27
|
-
*
|
|
28
|
-
* @returns { DefaultKeys } The keys in the defined format
|
|
29
|
-
*/
|
|
30
|
-
getKeys(): DefaultKeys;
|
|
31
|
-
/**
|
|
32
|
-
* Get a Flare P-Chain public mainnet address
|
|
33
|
-
*
|
|
34
|
-
* @param {string} format - flare hrp selector: Mainnet(flr) or Testnet(fuji)
|
|
35
|
-
* @returns {string} The mainnet address derived from the public key
|
|
36
|
-
*/
|
|
37
|
-
getAddress(format?: string): string;
|
|
38
|
-
/**
|
|
39
|
-
* Get a public address of public key.
|
|
40
|
-
*
|
|
41
|
-
* @param {string} hrp - select Mainnet(flr) or Testnet(fuji) for the address
|
|
42
|
-
* @returns {string} The address derived from the public key and hrp
|
|
43
|
-
*/
|
|
44
|
-
getFlrPAddress(hrp: string): string;
|
|
45
|
-
/**
|
|
46
|
-
* Get a Flare P-Chain public mainnet address buffer
|
|
47
|
-
*
|
|
48
|
-
* @returns {Buffer} The address buffer derived from the public key
|
|
49
|
-
*/
|
|
50
|
-
private getAddressBuffer;
|
|
51
|
-
/**
|
|
52
|
-
* Use the safe Buffer instead of the regular buffer to derive the address buffer. Used in the OVC.
|
|
53
|
-
*
|
|
54
|
-
* @returns {Buffer}
|
|
55
|
-
*/
|
|
56
|
-
private getAddressSafeBuffer;
|
|
57
|
-
}
|
|
58
|
-
//# sourceMappingURL=keyPair.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"keyPair.d.ts","sourceRoot":"","sources":["../../../src/lib/keyPair.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EAMX,cAAc,EACd,wBAAwB,EACzB,MAAM,sBAAsB,CAAC;AAM9B,oBAAY,aAAa;IACvB,OAAO,SAAS;IAChB,OAAO,QAAQ;CAChB;AAED,qBAAa,OAAQ,SAAQ,wBAAwB;IACnD;;;;OAIG;gBACS,MAAM,CAAC,EAAE,cAAc;IAoBnC;;;;OAIG;IACH,wBAAwB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAW3C;;;;OAIG;IACH,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAkB1C;;;;OAIG;IACH,OAAO,IAAI,WAAW;IAOtB;;;;;OAKG;IACH,UAAU,CAAC,MAAM,SAAY,GAAG,MAAM;IAGtC;;;;;OAKG;IACH,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAKnC;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IASxB;;;;OAIG;IACH,OAAO,CAAC,oBAAoB;CAK7B"}
|
package/dist/src/lib/keyPair.js
DELETED
|
@@ -1,142 +0,0 @@
|
|
|
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
|
-
exports.KeyPair = exports.addressFormat = void 0;
|
|
7
|
-
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
8
|
-
const secp256k1_1 = require("@bitgo-beta/secp256k1");
|
|
9
|
-
const crypto_1 = require("crypto");
|
|
10
|
-
const utils_1 = __importDefault(require("./utils"));
|
|
11
|
-
const DEFAULT_SEED_SIZE_BYTES = 16;
|
|
12
|
-
var addressFormat;
|
|
13
|
-
(function (addressFormat) {
|
|
14
|
-
addressFormat["testnet"] = "fuji";
|
|
15
|
-
addressFormat["mainnet"] = "flr";
|
|
16
|
-
})(addressFormat || (exports.addressFormat = addressFormat = {}));
|
|
17
|
-
class KeyPair extends sdk_core_1.Secp256k1ExtendedKeyPair {
|
|
18
|
-
/**
|
|
19
|
-
* Public constructor. By default, creates a key pair with a random master seed.
|
|
20
|
-
*
|
|
21
|
-
* @param { KeyPairOptions } source Either a master seed, a private key, or a public key
|
|
22
|
-
*/
|
|
23
|
-
constructor(source) {
|
|
24
|
-
super(source);
|
|
25
|
-
if (!source) {
|
|
26
|
-
const seed = (0, crypto_1.randomBytes)(DEFAULT_SEED_SIZE_BYTES);
|
|
27
|
-
this.hdNode = secp256k1_1.bip32.fromSeed(seed);
|
|
28
|
-
}
|
|
29
|
-
else if ((0, sdk_core_1.isSeed)(source)) {
|
|
30
|
-
this.hdNode = secp256k1_1.bip32.fromSeed(source.seed);
|
|
31
|
-
}
|
|
32
|
-
else if ((0, sdk_core_1.isPrivateKey)(source)) {
|
|
33
|
-
this.recordKeysFromPrivateKey(source.prv);
|
|
34
|
-
}
|
|
35
|
-
else if ((0, sdk_core_1.isPublicKey)(source)) {
|
|
36
|
-
this.recordKeysFromPublicKey(source.pub);
|
|
37
|
-
}
|
|
38
|
-
else {
|
|
39
|
-
throw new Error('Invalid key pair options');
|
|
40
|
-
}
|
|
41
|
-
if (this.hdNode) {
|
|
42
|
-
this.keyPair = sdk_core_1.Secp256k1ExtendedKeyPair.toKeyPair(this.hdNode);
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* Build a keypair from a protocol private key or extended private key.
|
|
47
|
-
*
|
|
48
|
-
* @param {string} prv A raw private key
|
|
49
|
-
*/
|
|
50
|
-
recordKeysFromPrivateKey(prv) {
|
|
51
|
-
if (!utils_1.default.isValidPrivateKey(prv)) {
|
|
52
|
-
throw new Error('Unsupported private key');
|
|
53
|
-
}
|
|
54
|
-
if ((0, sdk_core_1.isValidXprv)(prv)) {
|
|
55
|
-
this.hdNode = secp256k1_1.bip32.fromBase58(prv);
|
|
56
|
-
}
|
|
57
|
-
else {
|
|
58
|
-
this.keyPair = secp256k1_1.ECPair.fromPrivateKey(Buffer.from(prv.slice(0, 64), 'hex'));
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Build an ECPair from a protocol public key or extended public key.
|
|
63
|
-
*
|
|
64
|
-
* @param {string} pub A raw public key
|
|
65
|
-
*/
|
|
66
|
-
recordKeysFromPublicKey(pub) {
|
|
67
|
-
try {
|
|
68
|
-
if ((0, sdk_core_1.isValidXpub)(pub)) {
|
|
69
|
-
this.hdNode = secp256k1_1.bip32.fromBase58(pub);
|
|
70
|
-
}
|
|
71
|
-
else {
|
|
72
|
-
this.keyPair = secp256k1_1.ECPair.fromPublicKey(Buffer.from(pub, 'hex'));
|
|
73
|
-
}
|
|
74
|
-
return;
|
|
75
|
-
}
|
|
76
|
-
catch (e) {
|
|
77
|
-
try {
|
|
78
|
-
this.keyPair = secp256k1_1.ECPair.fromPublicKey(Buffer.from(utils_1.default.cb58Decode(pub)));
|
|
79
|
-
return;
|
|
80
|
-
}
|
|
81
|
-
catch (e) {
|
|
82
|
-
throw new Error('Unsupported public key');
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
/**
|
|
87
|
-
* Default keys format is a pair of Uint8Array keys
|
|
88
|
-
*
|
|
89
|
-
* @returns { DefaultKeys } The keys in the defined format
|
|
90
|
-
*/
|
|
91
|
-
getKeys() {
|
|
92
|
-
return {
|
|
93
|
-
pub: this.getPublicKey({ compressed: true }).toString('hex'),
|
|
94
|
-
prv: this.getPrivateKey()?.toString('hex'),
|
|
95
|
-
};
|
|
96
|
-
}
|
|
97
|
-
/**
|
|
98
|
-
* Get a Flare P-Chain public mainnet address
|
|
99
|
-
*
|
|
100
|
-
* @param {string} format - flare hrp selector: Mainnet(flr) or Testnet(fuji)
|
|
101
|
-
* @returns {string} The mainnet address derived from the public key
|
|
102
|
-
*/
|
|
103
|
-
getAddress(format = 'mainnet') {
|
|
104
|
-
return this.getFlrPAddress(addressFormat[format]);
|
|
105
|
-
}
|
|
106
|
-
/**
|
|
107
|
-
* Get a public address of public key.
|
|
108
|
-
*
|
|
109
|
-
* @param {string} hrp - select Mainnet(flr) or Testnet(fuji) for the address
|
|
110
|
-
* @returns {string} The address derived from the public key and hrp
|
|
111
|
-
*/
|
|
112
|
-
getFlrPAddress(hrp) {
|
|
113
|
-
const addressBuffer = Buffer.from(this.getAddressBuffer());
|
|
114
|
-
return utils_1.default.addressToString(hrp, 'P', addressBuffer);
|
|
115
|
-
}
|
|
116
|
-
/**
|
|
117
|
-
* Get a Flare P-Chain public mainnet address buffer
|
|
118
|
-
*
|
|
119
|
-
* @returns {Buffer} The address buffer derived from the public key
|
|
120
|
-
*/
|
|
121
|
-
getAddressBuffer() {
|
|
122
|
-
try {
|
|
123
|
-
// Use the safe buffer method for address derivation
|
|
124
|
-
return this.getAddressSafeBuffer();
|
|
125
|
-
}
|
|
126
|
-
catch (error) {
|
|
127
|
-
return this.getAddressSafeBuffer();
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
/**
|
|
131
|
-
* Use the safe Buffer instead of the regular buffer to derive the address buffer. Used in the OVC.
|
|
132
|
-
*
|
|
133
|
-
* @returns {Buffer}
|
|
134
|
-
*/
|
|
135
|
-
getAddressSafeBuffer() {
|
|
136
|
-
const publicKeyHex = this.keyPair.publicKey.toString('hex');
|
|
137
|
-
const sha256 = (0, crypto_1.createHash)('sha256').update(publicKeyHex, 'hex').digest();
|
|
138
|
-
return (0, crypto_1.createHash)('ripemd160').update(sha256).digest();
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
exports.KeyPair = KeyPair;
|
|
142
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5UGFpci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIva2V5UGFpci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxtREFTOEI7QUFDOUIscURBQXNEO0FBQ3RELG1DQUFpRDtBQUNqRCxvREFBNEI7QUFFNUIsTUFBTSx1QkFBdUIsR0FBRyxFQUFFLENBQUM7QUFDbkMsSUFBWSxhQUdYO0FBSEQsV0FBWSxhQUFhO0lBQ3ZCLGlDQUFnQixDQUFBO0lBQ2hCLGdDQUFlLENBQUE7QUFDakIsQ0FBQyxFQUhXLGFBQWEsNkJBQWIsYUFBYSxRQUd4QjtBQUVELE1BQWEsT0FBUSxTQUFRLG1DQUF3QjtJQUNuRDs7OztPQUlHO0lBQ0gsWUFBWSxNQUF1QjtRQUNqQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDZCxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDWixNQUFNLElBQUksR0FBRyxJQUFBLG9CQUFXLEVBQUMsdUJBQXVCLENBQUMsQ0FBQztZQUNsRCxJQUFJLENBQUMsTUFBTSxHQUFHLGlCQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JDLENBQUM7YUFBTSxJQUFJLElBQUEsaUJBQU0sRUFBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxNQUFNLEdBQUcsaUJBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVDLENBQUM7YUFBTSxJQUFJLElBQUEsdUJBQVksRUFBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDNUMsQ0FBQzthQUFNLElBQUksSUFBQSxzQkFBVyxFQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMzQyxDQUFD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UUFDckMsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixPQUFPLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQ3JDLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLG9CQUFvQjtRQUMxQixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUQsTUFBTSxNQUFNLEdBQUcsSUFBQSxtQkFBVSxFQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDekUsT0FBTyxJQUFBLG1CQUFVLEVBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ3pELENBQUM7Q0FDRjtBQXpIRCwwQkF5SEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBEZWZhdWx0S2V5cyxcbiAgaXNQcml2YXRlS2V5LFxuICBpc1B1YmxpY0tleSxcbiAgaXNTZWVkLFxuICBpc1ZhbGlkWHBydixcbiAgaXNWYWxpZFhwdWIsXG4gIEtleVBhaXJPcHRpb25zLFxuICBTZWNwMjU2azFFeHRlbmRlZEtleVBhaXIsXG59IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IGJpcDMyLCBFQ1BhaXIgfSBmcm9tICdAYml0Z28tYmV0YS9zZWNwMjU2azEnO1xuaW1wb3J0IHsgcmFuZG9tQnl0ZXMsIGNyZWF0ZUhhc2ggfSBmcm9tICdjcnlwdG8nO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4vdXRpbHMnO1xuXG5jb25zdCBERUZBVUxUX1NFRURfU0laRV9CWVRFUyA9IDE2O1xuZXhwb3J0IGVudW0gYWRkcmVzc0Zvcm1hdCB7XG4gIHRlc3RuZXQgPSAnZnVqaScsXG4gIG1haW5uZXQgPSAnZmxyJyxcbn1cblxuZXhwb3J0IGNsYXNzIEtleVBhaXIgZXh0ZW5kcyBTZWNwMjU2azFFeHRlbmRlZEtleVBhaXIge1xuICAvKipcbiAgICogUHVibGljIGNvbnN0cnVjdG9yLiBCeSBkZWZhdWx0LCBjcmVhdGVzIGEga2V5IHBhaXIgd2l0aCBhIHJhbmRvbSBtYXN0ZXIgc2VlZC5cbiAgICpcbiAgICogQHBhcmFtIHsgS2V5UGFpck9wdGlvbnMgfSBzb3VyY2UgRWl0aGVyIGEgbWFzdGVyIHNlZWQsIGEgcHJpdmF0ZSBrZXksIG9yIGEgcHVibGljIGtleVxuICAgKi9cbiAgY29uc3RydWN0b3Ioc291cmNlPzogS2V5UGFpck9wdGlvbnMpIHtcbiAgICBzdXBlcihzb3VyY2UpO1xuICAgIGlmICghc291cmNlKSB7XG4gICAgICBjb25zdCBzZWVkID0gcmFuZG9tQnl0ZXMoREVGQVVMVF9TRUVEX1NJWkVfQllURVMpO1xuICAgICAgdGhpcy5oZE5vZGUgPSBiaXAzMi5mcm9tU2VlZChzZWVkKTtcbiAgICB9IGVsc2UgaWYgKGlzU2VlZChzb3VyY2UpKSB7XG4gICAgICB0aGlzLmhkTm9kZSA9IGJpcDMyLmZyb21TZWVkKHNvdXJjZS5zZWVkKTtcbiAgICB9IGVsc2UgaWYgKGlzUHJpdmF0ZUtleShzb3VyY2UpKSB7XG4gICAgICB0aGlzLnJlY29yZEtleXNGcm9tUHJpdmF0ZUtleShzb3VyY2UucHJ2KTtcbiAgICB9IGVsc2UgaWYgKGlzUHVibGljS2V5KHNvdXJjZSkpIHtcbiAgICAgIHRoaXMucmVjb3JkS2V5c0Zyb21QdWJsaWNLZXkoc291cmNlLnB1Yik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBrZXkgcGFpciBvcHRpb25zJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaGROb2RlKSB7XG4gICAgICB0aGlzLmtleVBhaXIgPSBTZWNwMjU2azFFeHRlbmRlZEtleVBhaXIudG9LZXlQYWlyKHRoaXMuaGROb2RlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgYSBrZXlwYWlyIGZyb20gYSBwcm90b2NvbCBwcml2YXRlIGtleSBvciBleHRlbmRlZCBwcml2YXRlIGtleS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBydiBBIHJhdyBwcml2YXRlIGtleVxuICAgKi9cbiAgcmVjb3JkS2V5c0Zyb21Qcml2YXRlS2V5KHBydjogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF1dGlscy5pc1ZhbGlkUHJpdmF0ZUtleShwcnYpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIHByaXZhdGUga2V5Jyk7XG4gICAgfVxuICAgIGlmIChpc1ZhbGlkWHBydihwcnYpKSB7XG4gICAgICB0aGlzLmhkTm9kZSA9IGJpcDMyLmZyb21CYXNlNTgocHJ2KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5rZXlQYWlyID0gRUNQYWlyLmZyb21Qcml2YXRlS2V5KEJ1ZmZlci5mcm9tKHBydi5zbGljZSgwLCA2NCksICdoZXgnKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGFuIEVDUGFpciBmcm9tIGEgcHJvdG9jb2wgcHVibGljIGtleSBvciBleHRlbmRlZCBwdWJsaWMga2V5LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHViIEEgcmF3IHB1YmxpYyBrZXlcbiAgICovXG4gIHJlY29yZEtleXNGcm9tUHVibGljS2V5KHB1Yjogc3RyaW5nKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChpc1ZhbGlkWHB1YihwdWIpKSB7XG4gICAgICAgIHRoaXMuaGROb2RlID0gYmlwMzIuZnJvbUJhc2U1OChwdWIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5rZXlQYWlyID0gRUNQYWlyLmZyb21QdWJsaWNLZXkoQnVmZmVyLmZyb20ocHViLCAnaGV4JykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMua2V5UGFpciA9IEVDUGFpci5mcm9tUHVibGljS2V5KEJ1ZmZlci5mcm9tKHV0aWxzLmNiNThEZWNvZGUocHViKSkpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgcHVibGljIGtleScpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZhdWx0IGtleXMgZm9ybWF0IGlzIGEgcGFpciBvZiBVaW50OEFycmF5IGtleXNcbiAgICpcbiAgICogQHJldHVybnMgeyBEZWZhdWx0S2V5cyB9IFRoZSBrZXlzIGluIHRoZSBkZWZpbmVkIGZvcm1hdFxuICAgKi9cbiAgZ2V0S2V5cygpOiBEZWZhdWx0S2V5cyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHB1YjogdGhpcy5nZXRQdWJsaWNLZXkoeyBjb21wcmVzc2VkOiB0cnVlIH0pLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgIHBydjogdGhpcy5nZXRQcml2YXRlS2V5KCk/LnRvU3RyaW5nKCdoZXgnKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhIEZsYXJlIFAtQ2hhaW4gcHVibGljIG1haW5uZXQgYWRkcmVzc1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZm9ybWF0IC0gZmxhcmUgaHJwIHNlbGVjdG9yOiBNYWlubmV0KGZscikgb3IgVGVzdG5ldChmdWppKVxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgbWFpbm5ldCBhZGRyZXNzIGRlcml2ZWQgZnJvbSB0aGUgcHVibGljIGtleVxuICAgKi9cbiAgZ2V0QWRkcmVzcyhmb3JtYXQgPSAnbWFpbm5ldCcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldEZsclBBZGRyZXNzKGFkZHJlc3NGb3JtYXRbZm9ybWF0XSk7XG4gIH1cbiAgLyoqXG4gICAqIEdldCBhIHB1YmxpYyBhZGRyZXNzIG9mIHB1YmxpYyBrZXkuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBocnAgLSBzZWxlY3QgTWFpbm5ldChmbHIpIG9yIFRlc3RuZXQoZnVqaSkgZm9yIHRoZSBhZGRyZXNzXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBhZGRyZXNzIGRlcml2ZWQgZnJvbSB0aGUgcHVibGljIGtleSBhbmQgaHJwXG4gICAqL1xuICBnZXRGbHJQQWRkcmVzcyhocnA6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgYWRkcmVzc0J1ZmZlciA9IEJ1ZmZlci5mcm9tKHRoaXMuZ2V0QWRkcmVzc0J1ZmZlcigpKTtcbiAgICByZXR1cm4gdXRpbHMuYWRkcmVzc1RvU3RyaW5nKGhycCwgJ1AnLCBhZGRyZXNzQnVmZmVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYSBGbGFyZSBQLUNoYWluIHB1YmxpYyBtYWlubmV0IGFkZHJlc3MgYnVmZmVyXG4gICAqXG4gICAqIEByZXR1cm5zIHtCdWZmZXJ9IFRoZSBhZGRyZXNzIGJ1ZmZlciBkZXJpdmVkIGZyb20gdGhlIHB1YmxpYyBrZXlcbiAgICovXG4gIHByaXZhdGUgZ2V0QWRkcmVzc0J1ZmZlcigpOiBCdWZmZXIge1xuICAgIHRyeSB7XG4gICAgICAvLyBVc2UgdGhlIHNhZmUgYnVmZmVyIG1ldGhvZCBmb3IgYWRkcmVzcyBkZXJpdmF0aW9uXG4gICAgICByZXR1cm4gdGhpcy5nZXRBZGRyZXNzU2FmZUJ1ZmZlcigpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRBZGRyZXNzU2FmZUJ1ZmZlcigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVc2UgdGhlIHNhZmUgQnVmZmVyIGluc3RlYWQgb2YgdGhlIHJlZ3VsYXIgYnVmZmVyIHRvIGRlcml2ZSB0aGUgYWRkcmVzcyBidWZmZXIuIFVzZWQgaW4gdGhlIE9WQy5cbiAgICpcbiAgICogQHJldHVybnMge0J1ZmZlcn1cbiAgICovXG4gIHByaXZhdGUgZ2V0QWRkcmVzc1NhZmVCdWZmZXIoKTogQnVmZmVyIHtcbiAgICBjb25zdCBwdWJsaWNLZXlIZXggPSB0aGlzLmtleVBhaXIucHVibGljS2V5LnRvU3RyaW5nKCdoZXgnKTtcbiAgICBjb25zdCBzaGEyNTYgPSBjcmVhdGVIYXNoKCdzaGEyNTYnKS51cGRhdGUocHVibGljS2V5SGV4LCAnaGV4JykuZGlnZXN0KCk7XG4gICAgcmV0dXJuIGNyZWF0ZUhhc2goJ3JpcGVtZDE2MCcpLnVwZGF0ZShzaGEyNTYpLmRpZ2VzdCgpO1xuICB9XG59XG4iXX0=
|
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
import { TransactionType } from '@bitgo-beta/sdk-core';
|
|
2
|
-
import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
|
|
3
|
-
import { AtomicTransactionBuilder } from './atomicTransactionBuilder';
|
|
4
|
-
import { Tx } from './iface';
|
|
5
|
-
export declare class PermissionlessValidatorTxBuilder extends AtomicTransactionBuilder {
|
|
6
|
-
protected _nodeID: string | undefined;
|
|
7
|
-
protected _blsPublicKey: string | undefined;
|
|
8
|
-
protected _blsSignature: string | undefined;
|
|
9
|
-
protected _startTime: bigint | undefined;
|
|
10
|
-
protected _endTime: bigint | undefined;
|
|
11
|
-
protected _stakeAmount: bigint | undefined;
|
|
12
|
-
protected _delegationFeeRate: number | undefined;
|
|
13
|
-
/**
|
|
14
|
-
* @param coinConfig
|
|
15
|
-
*/
|
|
16
|
-
constructor(coinConfig: Readonly<CoinConfig>);
|
|
17
|
-
/**
|
|
18
|
-
* get transaction type
|
|
19
|
-
* @protected
|
|
20
|
-
*/
|
|
21
|
-
protected get transactionType(): TransactionType;
|
|
22
|
-
/**
|
|
23
|
-
* Set the node ID for permissionless validation
|
|
24
|
-
* @param nodeID - The node ID
|
|
25
|
-
*/
|
|
26
|
-
nodeID(nodeID: string): this;
|
|
27
|
-
/**
|
|
28
|
-
* Set the BLS public key for permissionless validation
|
|
29
|
-
* @param blsPublicKey - The BLS public key
|
|
30
|
-
*/
|
|
31
|
-
blsPublicKey(blsPublicKey: string): this;
|
|
32
|
-
/**
|
|
33
|
-
* Set the BLS signature for permissionless validation
|
|
34
|
-
* @param blsSignature - The BLS signature
|
|
35
|
-
*/
|
|
36
|
-
blsSignature(blsSignature: string): this;
|
|
37
|
-
/**
|
|
38
|
-
* Set the start time for validation
|
|
39
|
-
* @param startTime - Unix timestamp for when validation starts
|
|
40
|
-
*/
|
|
41
|
-
startTime(startTime: string | number | bigint): this;
|
|
42
|
-
/**
|
|
43
|
-
* Set the end time for validation
|
|
44
|
-
* @param endTime - Unix timestamp for when validation ends
|
|
45
|
-
*/
|
|
46
|
-
endTime(endTime: string | number | bigint): this;
|
|
47
|
-
/**
|
|
48
|
-
* Set the stake amount for validation
|
|
49
|
-
* @param amount - Amount to stake (in nFLR)
|
|
50
|
-
*/
|
|
51
|
-
stakeAmount(amount: string | number | bigint): this;
|
|
52
|
-
/**
|
|
53
|
-
* Set the delegation fee rate
|
|
54
|
-
* @param value - Delegation fee rate in basis points
|
|
55
|
-
*/
|
|
56
|
-
delegationFeeRate(value: number): this;
|
|
57
|
-
/**
|
|
58
|
-
* Set reward addresses where validation rewards should be sent
|
|
59
|
-
* @param addresses - Array of reward addresses
|
|
60
|
-
*/
|
|
61
|
-
rewardAddresses(addresses: string[]): this;
|
|
62
|
-
/**
|
|
63
|
-
* Validate that the delegation fee is at least the minDelegationFee
|
|
64
|
-
* @param delegationFeeRate number
|
|
65
|
-
*/
|
|
66
|
-
validateDelegationFeeRate(delegationFeeRate: number): void;
|
|
67
|
-
/** @inheritdoc */
|
|
68
|
-
initBuilder(tx: Tx): this;
|
|
69
|
-
/**
|
|
70
|
-
* Verify if the transaction is a permissionless validator transaction
|
|
71
|
-
* @param tx
|
|
72
|
-
*/
|
|
73
|
-
static verifyTxType(tx: unknown): boolean;
|
|
74
|
-
verifyTxType(tx: unknown): boolean;
|
|
75
|
-
/**
|
|
76
|
-
* Build the permissionless validator transaction
|
|
77
|
-
* @protected
|
|
78
|
-
*/
|
|
79
|
-
protected buildFlareTransaction(): Promise<void>;
|
|
80
|
-
}
|
|
81
|
-
//# sourceMappingURL=permissionlessValidatorTxBuilder.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"permissionlessValidatorTxBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/permissionlessValidatorTxBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC9E,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAa7B,qBAAa,gCAAiC,SAAQ,wBAAwB;IAC5E,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,SAAS,CAAC,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5C,SAAS,CAAC,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5C,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,SAAS,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,SAAS,CAAC,kBAAkB,EAAE,MAAM,GAAG,SAAS,CAAC;IAEjD;;OAEG;gBACS,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC;IAW5C;;;OAGG;IACH,SAAS,KAAK,eAAe,IAAI,eAAe,CAE/C;IAED;;;OAGG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAQ5B;;;OAGG;IACH,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;IAiBxC;;;OAGG;IACH,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;IAcxC;;;OAGG;IACH,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI;IASpD;;;OAGG;IACH,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI;IAShD;;;OAGG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI;IASnD;;;OAGG;IACH,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAMtC;;;OAGG;IACH,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI;IAS1C;;;OAGG;IACH,yBAAyB,CAAC,iBAAiB,EAAE,MAAM,GAAG,IAAI;IAW1D,kBAAkB;IAClB,WAAW,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI;IAkCzB;;;OAGG;IACH,MAAM,CAAC,YAAY,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO;IAOzC,YAAY,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO;IAIlC;;;OAGG;cACa,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;CAgEvD"}
|
|
@@ -1,248 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.PermissionlessValidatorTxBuilder = void 0;
|
|
4
|
-
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
5
|
-
const atomicTransactionBuilder_1 = require("./atomicTransactionBuilder");
|
|
6
|
-
const constants_1 = require("./constants");
|
|
7
|
-
const utils_1 = require("./utils");
|
|
8
|
-
class PermissionlessValidatorTxBuilder extends atomicTransactionBuilder_1.AtomicTransactionBuilder {
|
|
9
|
-
/**
|
|
10
|
-
* @param coinConfig
|
|
11
|
-
*/
|
|
12
|
-
constructor(coinConfig) {
|
|
13
|
-
super(coinConfig);
|
|
14
|
-
this._nodeID = undefined;
|
|
15
|
-
this._blsPublicKey = undefined;
|
|
16
|
-
this._blsSignature = undefined;
|
|
17
|
-
this._startTime = undefined;
|
|
18
|
-
this._endTime = undefined;
|
|
19
|
-
this._stakeAmount = undefined;
|
|
20
|
-
this._delegationFeeRate = undefined;
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* get transaction type
|
|
24
|
-
* @protected
|
|
25
|
-
*/
|
|
26
|
-
get transactionType() {
|
|
27
|
-
return sdk_core_1.TransactionType.AddPermissionlessValidator;
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* Set the node ID for permissionless validation
|
|
31
|
-
* @param nodeID - The node ID
|
|
32
|
-
*/
|
|
33
|
-
nodeID(nodeID) {
|
|
34
|
-
if (!nodeID || nodeID.length === 0) {
|
|
35
|
-
throw new sdk_core_1.BuildTransactionError('Node ID cannot be empty');
|
|
36
|
-
}
|
|
37
|
-
this._nodeID = nodeID;
|
|
38
|
-
return this;
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* Set the BLS public key for permissionless validation
|
|
42
|
-
* @param blsPublicKey - The BLS public key
|
|
43
|
-
*/
|
|
44
|
-
blsPublicKey(blsPublicKey) {
|
|
45
|
-
if (!blsPublicKey || blsPublicKey.length === 0) {
|
|
46
|
-
throw new sdk_core_1.BuildTransactionError('BLS public key cannot be empty');
|
|
47
|
-
}
|
|
48
|
-
// BLS public key should be 48 bytes (96 hex characters) with 0x prefix or 192 hex characters with 0x prefix for uncompressed
|
|
49
|
-
if (!(0, utils_1.createHexRegex)(constants_1.BLS_PUBLIC_KEY_COMPRESSED_LENGTH, true).test(blsPublicKey) &&
|
|
50
|
-
!(0, utils_1.createHexRegex)(constants_1.BLS_PUBLIC_KEY_UNCOMPRESSED_LENGTH, true).test(blsPublicKey)) {
|
|
51
|
-
throw new sdk_core_1.BuildTransactionError('Invalid BLS public key format');
|
|
52
|
-
}
|
|
53
|
-
this._blsPublicKey = blsPublicKey;
|
|
54
|
-
return this;
|
|
55
|
-
}
|
|
56
|
-
/**
|
|
57
|
-
* Set the BLS signature for permissionless validation
|
|
58
|
-
* @param blsSignature - The BLS signature
|
|
59
|
-
*/
|
|
60
|
-
blsSignature(blsSignature) {
|
|
61
|
-
if (!blsSignature || blsSignature.length === 0) {
|
|
62
|
-
throw new sdk_core_1.BuildTransactionError('BLS signature cannot be empty');
|
|
63
|
-
}
|
|
64
|
-
// BLS signature should be 96 bytes (192 hex characters) with 0x prefix
|
|
65
|
-
if (!(0, utils_1.createHexRegex)(constants_1.BLS_SIGNATURE_LENGTH, true).test(blsSignature)) {
|
|
66
|
-
throw new sdk_core_1.BuildTransactionError('Invalid BLS signature format');
|
|
67
|
-
}
|
|
68
|
-
this._blsSignature = blsSignature;
|
|
69
|
-
return this;
|
|
70
|
-
}
|
|
71
|
-
/**
|
|
72
|
-
* Set the start time for validation
|
|
73
|
-
* @param startTime - Unix timestamp for when validation starts
|
|
74
|
-
*/
|
|
75
|
-
startTime(startTime) {
|
|
76
|
-
const time = BigInt(startTime);
|
|
77
|
-
if (time < 0) {
|
|
78
|
-
throw new sdk_core_1.BuildTransactionError('Start time must be non-negative');
|
|
79
|
-
}
|
|
80
|
-
this._startTime = time;
|
|
81
|
-
return this;
|
|
82
|
-
}
|
|
83
|
-
/**
|
|
84
|
-
* Set the end time for validation
|
|
85
|
-
* @param endTime - Unix timestamp for when validation ends
|
|
86
|
-
*/
|
|
87
|
-
endTime(endTime) {
|
|
88
|
-
const time = BigInt(endTime);
|
|
89
|
-
if (time <= 0) {
|
|
90
|
-
throw new sdk_core_1.BuildTransactionError('End time must be positive');
|
|
91
|
-
}
|
|
92
|
-
this._endTime = time;
|
|
93
|
-
return this;
|
|
94
|
-
}
|
|
95
|
-
/**
|
|
96
|
-
* Set the stake amount for validation
|
|
97
|
-
* @param amount - Amount to stake (in nFLR)
|
|
98
|
-
*/
|
|
99
|
-
stakeAmount(amount) {
|
|
100
|
-
const stake = BigInt(amount);
|
|
101
|
-
if (stake <= 0) {
|
|
102
|
-
throw new sdk_core_1.BuildTransactionError('Stake amount must be positive');
|
|
103
|
-
}
|
|
104
|
-
this._stakeAmount = stake;
|
|
105
|
-
return this;
|
|
106
|
-
}
|
|
107
|
-
/**
|
|
108
|
-
* Set the delegation fee rate
|
|
109
|
-
* @param value - Delegation fee rate in basis points
|
|
110
|
-
*/
|
|
111
|
-
delegationFeeRate(value) {
|
|
112
|
-
this.validateDelegationFeeRate(value);
|
|
113
|
-
this._delegationFeeRate = value;
|
|
114
|
-
return this;
|
|
115
|
-
}
|
|
116
|
-
/**
|
|
117
|
-
* Set reward addresses where validation rewards should be sent
|
|
118
|
-
* @param addresses - Array of reward addresses
|
|
119
|
-
*/
|
|
120
|
-
rewardAddresses(addresses) {
|
|
121
|
-
if (!addresses || addresses.length === 0) {
|
|
122
|
-
throw new sdk_core_1.BuildTransactionError('At least one reward address is required');
|
|
123
|
-
}
|
|
124
|
-
// Store reward addresses in the transaction (we'll need to extend the type)
|
|
125
|
-
this.transaction._rewardAddresses = addresses;
|
|
126
|
-
return this;
|
|
127
|
-
}
|
|
128
|
-
/**
|
|
129
|
-
* Validate that the delegation fee is at least the minDelegationFee
|
|
130
|
-
* @param delegationFeeRate number
|
|
131
|
-
*/
|
|
132
|
-
validateDelegationFeeRate(delegationFeeRate) {
|
|
133
|
-
// For Flare, use a minimum delegation fee of 2% (20000 basis points)
|
|
134
|
-
const minDelegationFee = constants_1.MIN_DELEGATION_FEE_BASIS_POINTS;
|
|
135
|
-
if (delegationFeeRate < minDelegationFee) {
|
|
136
|
-
const minDelegationFeePercent = (minDelegationFee / constants_1.BASIS_POINTS_DIVISOR) * constants_1.PERCENTAGE_MULTIPLIER;
|
|
137
|
-
throw new sdk_core_1.BuildTransactionError(`Delegation fee cannot be less than ${minDelegationFee} basis points (${minDelegationFeePercent}%)`);
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
/** @inheritdoc */
|
|
141
|
-
initBuilder(tx) {
|
|
142
|
-
// Extract permissionless validator-specific fields from transaction
|
|
143
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
144
|
-
const txData = tx;
|
|
145
|
-
if (txData.nodeID) {
|
|
146
|
-
this._nodeID = txData.nodeID;
|
|
147
|
-
}
|
|
148
|
-
if (txData.blsPublicKey) {
|
|
149
|
-
this._blsPublicKey = txData.blsPublicKey;
|
|
150
|
-
}
|
|
151
|
-
if (txData.blsSignature) {
|
|
152
|
-
this._blsSignature = txData.blsSignature;
|
|
153
|
-
}
|
|
154
|
-
if (txData.startTime) {
|
|
155
|
-
this._startTime = BigInt(txData.startTime);
|
|
156
|
-
}
|
|
157
|
-
if (txData.endTime) {
|
|
158
|
-
this._endTime = BigInt(txData.endTime);
|
|
159
|
-
}
|
|
160
|
-
if (txData.stakeAmount) {
|
|
161
|
-
this._stakeAmount = BigInt(txData.stakeAmount);
|
|
162
|
-
}
|
|
163
|
-
if (txData.delegationFeeRate !== undefined) {
|
|
164
|
-
this._delegationFeeRate = txData.delegationFeeRate;
|
|
165
|
-
}
|
|
166
|
-
if (txData.rewardAddresses) {
|
|
167
|
-
this.transaction._rewardAddresses =
|
|
168
|
-
txData.rewardAddresses;
|
|
169
|
-
}
|
|
170
|
-
return this;
|
|
171
|
-
}
|
|
172
|
-
/**
|
|
173
|
-
* Verify if the transaction is a permissionless validator transaction
|
|
174
|
-
* @param tx
|
|
175
|
-
*/
|
|
176
|
-
static verifyTxType(tx) {
|
|
177
|
-
// Check if transaction has permissionless validator-specific properties
|
|
178
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
179
|
-
const txData = tx;
|
|
180
|
-
return txData && txData.blsPublicKey && txData.blsSignature;
|
|
181
|
-
}
|
|
182
|
-
verifyTxType(tx) {
|
|
183
|
-
return PermissionlessValidatorTxBuilder.verifyTxType(tx);
|
|
184
|
-
}
|
|
185
|
-
/**
|
|
186
|
-
* Build the permissionless validator transaction
|
|
187
|
-
* @protected
|
|
188
|
-
*/
|
|
189
|
-
async buildFlareTransaction() {
|
|
190
|
-
// Basic validation
|
|
191
|
-
if (!this._nodeID) {
|
|
192
|
-
throw new sdk_core_1.BuildTransactionError('Node ID is required for permissionless validator transaction');
|
|
193
|
-
}
|
|
194
|
-
if (!this._blsPublicKey) {
|
|
195
|
-
throw new sdk_core_1.BuildTransactionError('BLS public key is required for permissionless validator transaction');
|
|
196
|
-
}
|
|
197
|
-
if (!this._blsSignature) {
|
|
198
|
-
throw new sdk_core_1.BuildTransactionError('BLS signature is required for permissionless validator transaction');
|
|
199
|
-
}
|
|
200
|
-
if (!this._startTime) {
|
|
201
|
-
throw new sdk_core_1.BuildTransactionError('Start time is required for permissionless validator transaction');
|
|
202
|
-
}
|
|
203
|
-
if (!this._endTime) {
|
|
204
|
-
throw new sdk_core_1.BuildTransactionError('End time is required for permissionless validator transaction');
|
|
205
|
-
}
|
|
206
|
-
if (!this._stakeAmount) {
|
|
207
|
-
throw new sdk_core_1.BuildTransactionError('Stake amount is required for permissionless validator transaction');
|
|
208
|
-
}
|
|
209
|
-
if (this._delegationFeeRate === undefined) {
|
|
210
|
-
throw new sdk_core_1.BuildTransactionError('Delegation fee rate is required for permissionless validator transaction');
|
|
211
|
-
}
|
|
212
|
-
const rewardAddresses = this.transaction
|
|
213
|
-
._rewardAddresses;
|
|
214
|
-
if (!rewardAddresses || rewardAddresses.length === 0) {
|
|
215
|
-
throw new sdk_core_1.BuildTransactionError('Reward addresses are required for permissionless validator transaction');
|
|
216
|
-
}
|
|
217
|
-
// Validate time range
|
|
218
|
-
if (this._endTime <= this._startTime) {
|
|
219
|
-
throw new sdk_core_1.BuildTransactionError('End time must be after start time');
|
|
220
|
-
}
|
|
221
|
-
try {
|
|
222
|
-
// TODO: Implement actual FlareJS PVM API call when available
|
|
223
|
-
// For now, create a placeholder transaction structure
|
|
224
|
-
const validatorTx = {
|
|
225
|
-
type: constants_1.ADD_PERMISSIONLESS_VALIDATOR_TYPE,
|
|
226
|
-
nodeID: this._nodeID,
|
|
227
|
-
blsPublicKey: this._blsPublicKey,
|
|
228
|
-
blsSignature: this._blsSignature,
|
|
229
|
-
startTime: this._startTime,
|
|
230
|
-
endTime: this._endTime,
|
|
231
|
-
stakeAmount: this._stakeAmount,
|
|
232
|
-
delegationFeeRate: this._delegationFeeRate,
|
|
233
|
-
rewardAddress: rewardAddresses[0],
|
|
234
|
-
fromAddresses: this.transaction._fromAddresses,
|
|
235
|
-
networkId: this.transaction._networkID,
|
|
236
|
-
sourceBlockchainId: this.transaction._blockchainID,
|
|
237
|
-
threshold: this.transaction._threshold || 1,
|
|
238
|
-
locktime: this.transaction._locktime || 0n,
|
|
239
|
-
};
|
|
240
|
-
this.transaction.setTransaction(validatorTx);
|
|
241
|
-
}
|
|
242
|
-
catch (error) {
|
|
243
|
-
throw new sdk_core_1.BuildTransactionError(`Failed to build permissionless validator transaction: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
exports.PermissionlessValidatorTxBuilder = PermissionlessValidatorTxBuilder;
|
|
248
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeEJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3Blcm1pc3Npb25sZXNzVmFsaWRhdG9yVHhCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1EQUE4RTtBQUU5RSx5RUFBc0U7QUFHdEUsMkNBUXFCO0FBQ3JCLG1DQUF5QztBQUV6QyxNQUFhLGdDQUFpQyxTQUFRLG1EQUF3QjtJQVM1RTs7T0FFRztJQUNILFlBQVksVUFBZ0M7UUFDMUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2xCLElBQUksQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDO1FBQy9CLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDO1FBQy9CLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO1FBQzVCLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDO1FBQzFCLElBQUksQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDO1FBQzlCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxTQUFTLENBQUM7SUFDdEMsQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQWMsZUFBZTtRQUMzQixPQUFPLDBCQUFlLENBQUMsMEJBQTBCLENBQUM7SUFDcEQsQ0FBQztJQUVEOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxNQUFjO1FBQ25CLElBQUksQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNuQyxNQUFNLElBQUksZ0NBQXFCLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUM3RCxDQUFDO1FBQ0QsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7UUFDdEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsWUFBWSxDQUFDLFlBQW9CO1FBQy9CLElB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SUFBSSxDQUFDLGFBQWE7Z0JBQ2hDLFlBQVksRUFBRSxJQUFJLENBQUMsYUFBYTtnQkFDaEMsU0FBUyxFQUFFLElBQUksQ0FBQyxVQUFVO2dCQUMxQixPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVE7Z0JBQ3RCLFdBQVcsRUFBRSxJQUFJLENBQUMsWUFBWTtnQkFDOUIsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGtCQUFrQjtnQkFDMUMsYUFBYSxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pDLGFBQWEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWM7Z0JBQzlDLFNBQVMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVU7Z0JBQ3RDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYTtnQkFDbEQsU0FBUyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxJQUFJLENBQUM7Z0JBQzNDLFFBQVEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsSUFBSSxFQUFFO2FBQzNDLENBQUM7WUFFRixJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMvQyxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sSUFBSSxnQ0FBcUIsQ0FDN0IseURBQ0UsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsZUFDM0MsRUFBRSxDQUNILENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBclJELDRFQXFSQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJ1aWxkVHJhbnNhY3Rpb25FcnJvciwgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgQXRvbWljVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi9hdG9taWNUcmFuc2FjdGlvbkJ1aWxkZXInO1xuaW1wb3J0IHsgVHggfSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB7IFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yRXh0ZW5kZWRUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHtcbiAgQUREX1BFUk1JU1NJT05MRVNTX1ZBTElEQVRPUl9UWVBFLFxuICBCQVNJU19QT0lOVFNfRElWSVNPUixcbiAgQkxTX1BVQkxJQ19LRVlfQ09NUFJFU1NFRF9MRU5HVEgsXG4gIEJMU19QVUJMSUNfS0VZX1VOQ09NUFJFU1NFRF9MRU5HVEgsXG4gIEJMU19TSUdOQVRVUkVfTEVOR1RILFxuICBNSU5fREVMRUdBVElPTl9GRUVfQkFTSVNfUE9JTlRTLFxuICBQRVJDRU5UQUdFX01VTFRJUExJRVIsXG59IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IGNyZWF0ZUhleFJlZ2V4IH0gZnJvbSAnLi91dGlscyc7XG5cbmV4cG9ydCBjbGFzcyBQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4QnVpbGRlciBleHRlbmRzIEF0b21pY1RyYW5zYWN0aW9uQnVpbGRlciB7XG4gIHByb3RlY3RlZCBfbm9kZUlEOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHByb3RlY3RlZCBfYmxzUHVibGljS2V5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHByb3RlY3RlZCBfYmxzU2lnbmF0dXJlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHByb3RlY3RlZCBfc3RhcnRUaW1lOiBiaWdpbnQgfCB1bmRlZmluZWQ7XG4gIHByb3RlY3RlZCBfZW5kVGltZTogYmlnaW50IHwgdW5kZWZpbmVkO1xuICBwcm90ZWN0ZWQgX3N0YWtlQW1vdW50OiBiaWdpbnQgfCB1bmRlZmluZWQ7XG4gIHByb3RlY3RlZCBfZGVsZWdhdGlvbkZlZVJhdGU6IG51bWJlciB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQHBhcmFtIGNvaW5Db25maWdcbiAgICovXG4gIGNvbnN0cnVjdG9yKGNvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoY29pbkNvbmZpZyk7XG4gICAgdGhpcy5fbm9kZUlEID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX2Jsc1B1YmxpY0tleSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9ibHNTaWduYXR1cmUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fc3RhcnRUaW1lID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX2VuZFRpbWUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fc3Rha2VBbW91bnQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fZGVsZWdhdGlvbkZlZVJhdGUgPSB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogZ2V0IHRyYW5zYWN0aW9uIHR5cGVcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCB0cmFuc2FjdGlvblR5cGUoKTogVHJhbnNhY3Rpb25UeXBlIHtcbiAgICByZXR1cm4gVHJhbnNhY3Rpb25UeXBlLkFkZFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgbm9kZSBJRCBmb3IgcGVybWlzc2lvbmxlc3MgdmFsaWRhdGlvblxuICAgKiBAcGFyYW0gbm9kZUlEIC0gVGhlIG5vZGUgSURcbiAgICovXG4gIG5vZGVJRChub2RlSUQ6IHN0cmluZyk6IHRoaXMge1xuICAgIGlmICghbm9kZUlEIHx8IG5vZGVJRC5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ05vZGUgSUQgY2Fubm90IGJlIGVtcHR5Jyk7XG4gICAgfVxuICAgIHRoaXMuX25vZGVJRCA9IG5vZGVJRDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIEJMUyBwdWJsaWMga2V5IGZvciBwZXJtaXNzaW9ubGVzcyB2YWxpZGF0aW9uXG4gICAqIEBwYXJhbSBibHNQdWJsaWNLZXkgLSBUaGUgQkxTIHB1YmxpYyBrZXlcbiAgICovXG4gIGJsc1B1YmxpY0tleShibHNQdWJsaWNLZXk6IHN0cmluZyk6IHRoaXMge1xuICAgIGlmICghYmxzUHVibGljS2V5IHx8IGJsc1B1YmxpY0tleS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0JMUyBwdWJsaWMga2V5IGNhbm5vdCBiZSBlbXB0eScpO1xuICAgIH1cblxuICAgIC8vIEJMUyBwdWJsaWMga2V5IHNob3VsZCBiZSA0OCBieXRlcyAoOTYgaGV4IGNoYXJhY3RlcnMpIHdpdGggMHggcHJlZml4IG9yIDE5MiBoZXggY2hhcmFjdGVycyB3aXRoIDB4IHByZWZpeCBmb3IgdW5jb21wcmVzc2VkXG4gICAgaWYgKFxuICAgICAgIWNyZWF0ZUhleFJlZ2V4KEJMU19QVUJMSUNfS0VZX0NPTVBSRVNTRURfTEVOR1RILCB0cnVlKS50ZXN0KGJsc1B1YmxpY0tleSkgJiZcbiAgICAgICFjcmVhdGVIZXhSZWdleChCTFNfUFVCTElDX0tFWV9VTkNPTVBSRVNTRURfTEVOR1RILCB0cnVlKS50ZXN0KGJsc1B1YmxpY0tleSlcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgQkxTIHB1YmxpYyBrZXkgZm9ybWF0Jyk7XG4gICAgfVxuXG4gICAgdGhpcy5fYmxzUHVibGljS2V5ID0gYmxzUHVibGljS2V5O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgQkxTIHNpZ25hdHVyZSBmb3IgcGVybWlzc2lvbmxlc3MgdmFsaWRhdGlvblxuICAgKiBAcGFyYW0gYmxzU2lnbmF0dXJlIC0gVGhlIEJMUyBzaWduYXR1cmVcbiAgICovXG4gIGJsc1NpZ25hdHVyZShibHNTaWduYXR1cmU6IHN0cmluZyk6IHRoaXMge1xuICAgIGlmICghYmxzU2lnbmF0dXJlIHx8IGJsc1NpZ25hdHVyZS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0JMUyBzaWduYXR1cmUgY2Fubm90IGJlIGVtcHR5Jyk7XG4gICAgfVxuXG4gICAgLy8gQkxTIHNpZ25hdHVyZSBzaG91bGQgYmUgOTYgYnl0ZXMgKDE5MiBoZXggY2hhcmFjdGVycykgd2l0aCAweCBwcmVmaXhcbiAgICBpZiAoIWNyZWF0ZUhleFJlZ2V4KEJMU19TSUdOQVRVUkVfTEVOR1RILCB0cnVlKS50ZXN0KGJsc1NpZ25hdHVyZSkpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgQkxTIHNpZ25hdHVyZSBmb3JtYXQnKTtcbiAgICB9XG5cbiAgICB0aGlzLl9ibHNTaWduYXR1cmUgPSBibHNTaWduYXR1cmU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBzdGFydCB0aW1lIGZvciB2YWxpZGF0aW9uXG4gICAqIEBwYXJhbSBzdGFydFRpbWUgLSBVbml4IHRpbWVzdGFtcCBmb3Igd2hlbiB2YWxpZGF0aW9uIHN0YXJ0c1xuICAgKi9cbiAgc3RhcnRUaW1lKHN0YXJ0VGltZTogc3RyaW5nIHwgbnVtYmVyIHwgYmlnaW50KTogdGhpcyB7XG4gICAgY29uc3QgdGltZSA9IEJpZ0ludChzdGFydFRpbWUpO1xuICAgIGlmICh0aW1lIDwgMCkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignU3RhcnQgdGltZSBtdXN0IGJlIG5vbi1uZWdhdGl2ZScpO1xuICAgIH1cbiAgICB0aGlzLl9zdGFydFRpbWUgPSB0aW1lO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgZW5kIHRpbWUgZm9yIHZhbGlkYXRpb25cbiAgICogQHBhcmFtIGVuZFRpbWUgLSBVbml4IHRpbWVzdGFtcCBmb3Igd2hlbiB2YWxpZGF0aW9uIGVuZHNcbiAgICovXG4gIGVuZFRpbWUoZW5kVGltZTogc3RyaW5nIHwgbnVtYmVyIHwgYmlnaW50KTogdGhpcyB7XG4gICAgY29uc3QgdGltZSA9IEJpZ0ludChlbmRUaW1lKTtcbiAgICBpZiAodGltZSA8PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdFbmQgdGltZSBtdXN0IGJlIHBvc2l0aXZlJyk7XG4gICAgfVxuICAgIHRoaXMuX2VuZFRpbWUgPSB0aW1lO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgc3Rha2UgYW1vdW50IGZvciB2YWxpZGF0aW9uXG4gICAqIEBwYXJhbSBhbW91bnQgLSBBbW91bnQgdG8gc3Rha2UgKGluIG5GTFIpXG4gICAqL1xuICBzdGFrZUFtb3VudChhbW91bnQ6IHN0cmluZyB8IG51bWJlciB8IGJpZ2ludCk6IHRoaXMge1xuICAgIGNvbnN0IHN0YWtlID0gQmlnSW50KGFtb3VudCk7XG4gICAgaWYgKHN0YWtlIDw9IDApIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ1N0YWtlIGFtb3VudCBtdXN0IGJlIHBvc2l0aXZlJyk7XG4gICAgfVxuICAgIHRoaXMuX3N0YWtlQW1vdW50ID0gc3Rha2U7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBkZWxlZ2F0aW9uIGZlZSByYXRlXG4gICAqIEBwYXJhbSB2YWx1ZSAtIERlbGVnYXRpb24gZmVlIHJhdGUgaW4gYmFzaXMgcG9pbnRzXG4gICAqL1xuICBkZWxlZ2F0aW9uRmVlUmF0ZSh2YWx1ZTogbnVtYmVyKTogdGhpcyB7XG4gICAgdGhpcy52YWxpZGF0ZURlbGVnYXRpb25GZWVSYXRlKHZhbHVlKTtcbiAgICB0aGlzLl9kZWxlZ2F0aW9uRmVlUmF0ZSA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCByZXdhcmQgYWRkcmVzc2VzIHdoZXJlIHZhbGlkYXRpb24gcmV3YXJkcyBzaG91bGQgYmUgc2VudFxuICAgKiBAcGFyYW0gYWRkcmVzc2VzIC0gQXJyYXkgb2YgcmV3YXJkIGFkZHJlc3Nlc1xuICAgKi9cbiAgcmV3YXJkQWRkcmVzc2VzKGFkZHJlc3Nlczogc3RyaW5nW10pOiB0aGlzIHtcbiAgICBpZiAoIWFkZHJlc3NlcyB8fCBhZGRyZXNzZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdBdCBsZWFzdCBvbmUgcmV3YXJkIGFkZHJlc3MgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG4gICAgLy8gU3RvcmUgcmV3YXJkIGFkZHJlc3NlcyBpbiB0aGUgdHJhbnNhY3Rpb24gKHdlJ2xsIG5lZWQgdG8gZXh0ZW5kIHRoZSB0eXBlKVxuICAgICh0aGlzLnRyYW5zYWN0aW9uIGFzIHVua25vd24gYXMgUGVybWlzc2lvbmxlc3NWYWxpZGF0b3JFeHRlbmRlZFRyYW5zYWN0aW9uKS5fcmV3YXJkQWRkcmVzc2VzID0gYWRkcmVzc2VzO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHRoYXQgdGhlIGRlbGVnYXRpb24gZmVlIGlzIGF0IGxlYXN0IHRoZSBtaW5EZWxlZ2F0aW9uRmVlXG4gICAqIEBwYXJhbSBkZWxlZ2F0aW9uRmVlUmF0ZSBudW1iZXJcbiAgICovXG4gIHZhbGlkYXRlRGVsZWdhdGlvbkZlZVJhdGUoZGVsZWdhdGlvbkZlZVJhdGU6IG51bWJlcik6IHZvaWQge1xuICAgIC8vIEZvciBGbGFyZSwgdXNlIGEgbWluaW11bSBkZWxlZ2F0aW9uIGZlZSBvZiAyJSAoMjAwMDAgYmFzaXMgcG9pbnRzKVxuICAgIGNvbnN0IG1pbkRlbGVnYXRpb25GZWUgPSBNSU5fREVMRUdBVElPTl9GRUVfQkFTSVNfUE9JTlRTO1xuICAgIGlmIChkZWxlZ2F0aW9uRmVlUmF0ZSA8IG1pbkRlbGVnYXRpb25GZWUpIHtcbiAgICAgIGNvbnN0IG1pbkRlbGVnYXRpb25GZWVQZXJjZW50ID0gKG1pbkRlbGVnYXRpb25GZWUgLyBCQVNJU19QT0lOVFNfRElWSVNPUikgKiBQRVJDRU5UQUdFX01VTFRJUExJRVI7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKFxuICAgICAgICBgRGVsZWdhdGlvbiBmZWUgY2Fubm90IGJlIGxlc3MgdGhhbiAke21pbkRlbGVnYXRpb25GZWV9IGJhc2lzIHBvaW50cyAoJHttaW5EZWxlZ2F0aW9uRmVlUGVyY2VudH0lKWBcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGluaXRCdWlsZGVyKHR4OiBUeCk6IHRoaXMge1xuICAgIC8vIEV4dHJhY3QgcGVybWlzc2lvbmxlc3MgdmFsaWRhdG9yLXNwZWNpZmljIGZpZWxkcyBmcm9tIHRyYW5zYWN0aW9uXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBjb25zdCB0eERhdGEgPSB0eCBhcyBhbnk7XG5cbiAgICBpZiAodHhEYXRhLm5vZGVJRCkge1xuICAgICAgdGhpcy5fbm9kZUlEID0gdHhEYXRhLm5vZGVJRDtcbiAgICB9XG4gICAgaWYgKHR4RGF0YS5ibHNQdWJsaWNLZXkpIHtcbiAgICAgIHRoaXMuX2Jsc1B1YmxpY0tleSA9IHR4RGF0YS5ibHNQdWJsaWNLZXk7XG4gICAgfVxuICAgIGlmICh0eERhdGEuYmxzU2lnbmF0dXJlKSB7XG4gICAgICB0aGlzLl9ibHNTaWduYXR1cmUgPSB0eERhdGEuYmxzU2lnbmF0dXJlO1xuICAgIH1cbiAgICBpZiAodHhEYXRhLnN0YXJ0VGltZSkge1xuICAgICAgdGhpcy5fc3RhcnRUaW1lID0gQmlnSW50KHR4RGF0YS5zdGFydFRpbWUpO1xuICAgIH1cbiAgICBpZiAodHhEYXRhLmVuZFRpbWUpIHtcbiAgICAgIHRoaXMuX2VuZFRpbWUgPSBCaWdJbnQodHhEYXRhLmVuZFRpbWUpO1xuICAgIH1cbiAgICBpZiAodHhEYXRhLnN0YWtlQW1vdW50KSB7XG4gICAgICB0aGlzLl9zdGFrZUFtb3VudCA9IEJpZ0ludCh0eERhdGEuc3Rha2VBbW91bnQpO1xuICAgIH1cbiAgICBpZiAodHhEYXRhLmRlbGVnYXRpb25GZWVSYXRlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX2RlbGVnYXRpb25GZWVSYXRlID0gdHhEYXRhLmRlbGVnYXRpb25GZWVSYXRlO1xuICAgIH1cbiAgICBpZiAodHhEYXRhLnJld2FyZEFkZHJlc3Nlcykge1xuICAgICAgKHRoaXMudHJhbnNhY3Rpb24gYXMgdW5rbm93biBhcyBQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvckV4dGVuZGVkVHJhbnNhY3Rpb24pLl9yZXdhcmRBZGRyZXNzZXMgPVxuICAgICAgICB0eERhdGEucmV3YXJkQWRkcmVzc2VzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmeSBpZiB0aGUgdHJhbnNhY3Rpb24gaXMgYSBwZXJtaXNzaW9ubGVzcyB2YWxpZGF0b3IgdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIHR4XG4gICAqL1xuICBzdGF0aWMgdmVyaWZ5VHhUeXBlKHR4OiB1bmtub3duKTogYm9vbGVhbiB7XG4gICAgLy8gQ2hlY2sgaWYgdHJhbnNhY3Rpb24gaGFzIHBlcm1pc3Npb25sZXNzIHZhbGlkYXRvci1zcGVjaWZpYyBwcm9wZXJ0aWVzXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBjb25zdCB0eERhdGEgPSB0eCBhcyBhbnk7XG4gICAgcmV0dXJuIHR4RGF0YSAmJiB0eERhdGEuYmxzUHVibGljS2V5ICYmIHR4RGF0YS5ibHNTaWduYXR1cmU7XG4gIH1cblxuICB2ZXJpZnlUeFR5cGUodHg6IHVua25vd24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gUGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeEJ1aWxkZXIudmVyaWZ5VHhUeXBlKHR4KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCB0aGUgcGVybWlzc2lvbmxlc3MgdmFsaWRhdG9yIHRyYW5zYWN0aW9uXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBidWlsZEZsYXJlVHJhbnNhY3Rpb24oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gQmFzaWMgdmFsaWRhdGlvblxuICAgIGlmICghdGhpcy5fbm9kZUlEKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdOb2RlIElEIGlzIHJlcXVpcmVkIGZvciBwZXJtaXNzaW9ubGVzcyB2YWxpZGF0b3IgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLl9ibHNQdWJsaWNLZXkpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0JMUyBwdWJsaWMga2V5IGlzIHJlcXVpcmVkIGZvciBwZXJtaXNzaW9ubGVzcyB2YWxpZGF0b3IgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLl9ibHNTaWduYXR1cmUpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0JMUyBzaWduYXR1cmUgaXMgcmVxdWlyZWQgZm9yIHBlcm1pc3Npb25sZXNzIHZhbGlkYXRvciB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuX3N0YXJ0VGltZSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignU3RhcnQgdGltZSBpcyByZXF1aXJlZCBmb3IgcGVybWlzc2lvbmxlc3MgdmFsaWRhdG9yIHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuICAgIGlmICghdGhpcy5fZW5kVGltZSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignRW5kIHRpbWUgaXMgcmVxdWlyZWQgZm9yIHBlcm1pc3Npb25sZXNzIHZhbGlkYXRvciB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuX3N0YWtlQW1vdW50KSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdTdGFrZSBhbW91bnQgaXMgcmVxdWlyZWQgZm9yIHBlcm1pc3Npb25sZXNzIHZhbGlkYXRvciB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgICBpZiAodGhpcy5fZGVsZWdhdGlvbkZlZVJhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignRGVsZWdhdGlvbiBmZWUgcmF0ZSBpcyByZXF1aXJlZCBmb3IgcGVybWlzc2lvbmxlc3MgdmFsaWRhdG9yIHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuXG4gICAgY29uc3QgcmV3YXJkQWRkcmVzc2VzID0gKHRoaXMudHJhbnNhY3Rpb24gYXMgdW5rbm93biBhcyBQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvckV4dGVuZGVkVHJhbnNhY3Rpb24pXG4gICAgICAuX3Jld2FyZEFkZHJlc3NlcztcbiAgICBpZiAoIXJld2FyZEFkZHJlc3NlcyB8fCByZXdhcmRBZGRyZXNzZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdSZXdhcmQgYWRkcmVzc2VzIGFyZSByZXF1aXJlZCBmb3IgcGVybWlzc2lvbmxlc3MgdmFsaWRhdG9yIHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgdGltZSByYW5nZVxuICAgIGlmICh0aGlzLl9lbmRUaW1lIDw9IHRoaXMuX3N0YXJ0VGltZSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignRW5kIHRpbWUgbXVzdCBiZSBhZnRlciBzdGFydCB0aW1lJyk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFRPRE86IEltcGxlbWVudCBhY3R1YWwgRmxhcmVKUyBQVk0gQVBJIGNhbGwgd2hlbiBhdmFpbGFibGVcbiAgICAgIC8vIEZvciBub3csIGNyZWF0ZSBhIHBsYWNlaG9sZGVyIHRyYW5zYWN0aW9uIHN0cnVjdHVyZVxuICAgICAgY29uc3QgdmFsaWRhdG9yVHggPSB7XG4gICAgICAgIHR5cGU6IEFERF9QRVJNSVNTSU9OTEVTU19WQUxJREFUT1JfVFlQRSxcbiAgICAgICAgbm9kZUlEOiB0aGlzLl9ub2RlSUQsXG4gICAgICAgIGJsc1B1YmxpY0tleTogdGhpcy5fYmxzUHVibGljS2V5LFxuICAgICAgICBibHNTaWduYXR1cmU6IHRoaXMuX2Jsc1NpZ25hdHVyZSxcbiAgICAgICAgc3RhcnRUaW1lOiB0aGlzLl9zdGFydFRpbWUsXG4gICAgICAgIGVuZFRpbWU6IHRoaXMuX2VuZFRpbWUsXG4gICAgICAgIHN0YWtlQW1vdW50OiB0aGlzLl9zdGFrZUFtb3VudCxcbiAgICAgICAgZGVsZWdhdGlvbkZlZVJhdGU6IHRoaXMuX2RlbGVnYXRpb25GZWVSYXRlLFxuICAgICAgICByZXdhcmRBZGRyZXNzOiByZXdhcmRBZGRyZXNzZXNbMF0sXG4gICAgICAgIGZyb21BZGRyZXNzZXM6IHRoaXMudHJhbnNhY3Rpb24uX2Zyb21BZGRyZXNzZXMsXG4gICAgICAgIG5ldHdvcmtJZDogdGhpcy50cmFuc2FjdGlvbi5fbmV0d29ya0lELFxuICAgICAgICBzb3VyY2VCbG9ja2NoYWluSWQ6IHRoaXMudHJhbnNhY3Rpb24uX2Jsb2NrY2hhaW5JRCxcbiAgICAgICAgdGhyZXNob2xkOiB0aGlzLnRyYW5zYWN0aW9uLl90aHJlc2hvbGQgfHwgMSxcbiAgICAgICAgbG9ja3RpbWU6IHRoaXMudHJhbnNhY3Rpb24uX2xvY2t0aW1lIHx8IDBuLFxuICAgICAgfTtcblxuICAgICAgdGhpcy50cmFuc2FjdGlvbi5zZXRUcmFuc2FjdGlvbih2YWxpZGF0b3JUeCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoXG4gICAgICAgIGBGYWlsZWQgdG8gYnVpbGQgcGVybWlzc2lvbmxlc3MgdmFsaWRhdG9yIHRyYW5zYWN0aW9uOiAke1xuICAgICAgICAgIGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InXG4gICAgICAgIH1gXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuIl19
|