@bitgo/account-lib 2.17.1-rc.8 → 2.17.2-node12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/bitgo-account-lib.js +2 -0
- package/dist/browser/bitgo-account-lib.js.LICENSE.txt +416 -0
- package/dist/browser/bitgo-account-lib.min.js +1 -1
- package/dist/browser/bitgo-account-lib.min.js.LICENSE.txt +4 -4
- package/dist/package.json +4 -4
- package/dist/resources/dot/index.ts +2 -0
- package/dist/resources/dot/mainnet.ts +2 -0
- package/dist/resources/dot/westend.ts +2 -0
- package/dist/src/coin/dot/addressInitializationBuilder.d.ts +80 -0
- package/dist/src/coin/dot/addressInitializationBuilder.d.ts.map +1 -0
- package/dist/src/coin/dot/addressInitializationBuilder.js +205 -0
- package/dist/src/coin/dot/batchTransactionBuilder.d.ts +47 -0
- package/dist/src/coin/dot/batchTransactionBuilder.d.ts.map +1 -0
- package/dist/src/coin/dot/batchTransactionBuilder.js +145 -0
- package/dist/src/coin/dot/errors.d.ts +8 -0
- package/dist/src/coin/dot/errors.d.ts.map +1 -0
- package/dist/src/coin/dot/errors.js +40 -0
- package/dist/src/coin/dot/iface.d.ts +181 -0
- package/dist/src/coin/dot/iface.d.ts.map +1 -0
- package/dist/src/coin/dot/iface.js +37 -0
- package/dist/src/coin/dot/stakingBuilder.d.ts +59 -0
- package/dist/src/coin/dot/stakingBuilder.d.ts.map +1 -0
- package/dist/src/coin/dot/stakingBuilder.js +157 -0
- package/dist/src/coin/dot/txnSchema.d.ts +12 -0
- package/dist/src/coin/dot/txnSchema.d.ts.map +1 -0
- package/dist/src/coin/dot/txnSchema.js +95 -0
- package/dist/src/coin/dot/unnominateBuilder.d.ts +24 -0
- package/dist/src/coin/dot/unnominateBuilder.d.ts.map +1 -0
- package/dist/src/coin/dot/unnominateBuilder.js +72 -0
- package/dist/src/coin/dot/unstakeBuilder.d.ts +38 -0
- package/dist/src/coin/dot/unstakeBuilder.d.ts.map +1 -0
- package/dist/src/coin/dot/unstakeBuilder.js +111 -0
- package/dist/src/coin/near/index.d.ts +5 -0
- package/dist/src/coin/near/index.d.ts.map +1 -0
- package/dist/src/coin/near/index.js +29 -0
- package/dist/src/coin/near/keyPair.d.ts +19 -0
- package/dist/src/coin/near/keyPair.d.ts.map +1 -0
- package/dist/src/coin/near/keyPair.js +76 -0
- package/dist/src/coin/near/transaction.d.ts +11 -0
- package/dist/src/coin/near/transaction.d.ts.map +1 -0
- package/dist/src/coin/near/transaction.js +41 -0
- package/dist/src/coin/near/transactionBuilder.d.ts +28 -0
- package/dist/src/coin/near/transactionBuilder.d.ts.map +1 -0
- package/dist/src/coin/near/transactionBuilder.js +68 -0
- package/dist/src/coin/near/transactionBuilderFactory.d.ts +24 -0
- package/dist/src/coin/near/transactionBuilderFactory.d.ts.map +1 -0
- package/dist/src/coin/near/transactionBuilderFactory.js +56 -0
- package/dist/src/coin/near/transferBuilder.d.ts +14 -0
- package/dist/src/coin/near/transferBuilder.d.ts.map +1 -0
- package/dist/src/coin/near/transferBuilder.js +81 -0
- package/dist/src/coin/near/utils.d.ts +19 -0
- package/dist/src/coin/near/utils.d.ts.map +1 -0
- package/dist/src/coin/near/utils.js +61 -0
- package/dist/src/coin/near/walletInitializationBuilder.d.ts +14 -0
- package/dist/src/coin/near/walletInitializationBuilder.d.ts.map +1 -0
- package/dist/src/coin/near/walletInitializationBuilder.js +81 -0
- package/dist/src/coin/sol/constants.d.ts +49 -0
- package/dist/src/coin/sol/constants.d.ts.map +1 -0
- package/dist/src/coin/sol/constants.js +65 -0
- package/dist/src/coin/sol/iface.d.ts +80 -0
- package/dist/src/coin/sol/iface.d.ts.map +1 -0
- package/dist/src/coin/sol/iface.js +3 -0
- package/dist/src/coin/sol/index.d.ts +8 -0
- package/dist/src/coin/sol/index.d.ts.map +1 -0
- package/dist/src/coin/sol/index.js +35 -0
- package/dist/src/coin/sol/instructionParamsFactory.d.ts +12 -0
- package/dist/src/coin/sol/instructionParamsFactory.d.ts.map +1 -0
- package/dist/src/coin/sol/instructionParamsFactory.js +198 -0
- package/dist/src/coin/sol/keyPair.d.ts +27 -0
- package/dist/src/coin/sol/keyPair.d.ts.map +1 -0
- package/dist/src/coin/sol/keyPair.js +81 -0
- package/dist/src/coin/sol/solInstructionFactory.d.ts +10 -0
- package/dist/src/coin/sol/solInstructionFactory.d.ts.map +1 -0
- package/dist/src/coin/sol/solInstructionFactory.js +174 -0
- package/dist/src/coin/sol/stakingActivateBuilder.d.ts +41 -0
- package/dist/src/coin/sol/stakingActivateBuilder.d.ts.map +1 -0
- package/dist/src/coin/sol/stakingActivateBuilder.js +162 -0
- package/dist/src/coin/sol/stakingDeactivateBuilder.d.ts +23 -0
- package/dist/src/coin/sol/stakingDeactivateBuilder.d.ts.map +1 -0
- package/dist/src/coin/sol/stakingDeactivateBuilder.js +130 -0
- package/dist/src/coin/sol/stakingWithdrawBuilder.d.ts +31 -0
- package/dist/src/coin/sol/stakingWithdrawBuilder.d.ts.map +1 -0
- package/dist/src/coin/sol/stakingWithdrawBuilder.js +146 -0
- package/dist/src/coin/sol/transaction.d.ts +56 -0
- package/dist/src/coin/sol/transaction.d.ts.map +1 -0
- package/dist/src/coin/sol/transaction.js +419 -0
- package/dist/src/coin/sol/transactionBuilder.d.ts +98 -0
- package/dist/src/coin/sol/transactionBuilder.d.ts.map +1 -0
- package/dist/src/coin/sol/transactionBuilder.js +318 -0
- package/dist/src/coin/sol/transactionBuilderFactory.d.ts +68 -0
- package/dist/src/coin/sol/transactionBuilderFactory.d.ts.map +1 -0
- package/dist/src/coin/sol/transactionBuilderFactory.js +132 -0
- package/dist/src/coin/sol/transferBuilder.d.ts +26 -0
- package/dist/src/coin/sol/transferBuilder.d.ts.map +1 -0
- package/dist/src/coin/sol/transferBuilder.js +138 -0
- package/dist/src/coin/sol/utils.d.ts +126 -0
- package/dist/src/coin/sol/utils.d.ts.map +1 -0
- package/dist/src/coin/sol/utils.js +315 -0
- package/dist/src/coin/sol/walletInitializationBuilder.d.ts +26 -0
- package/dist/src/coin/sol/walletInitializationBuilder.d.ts.map +1 -0
- package/dist/src/coin/sol/walletInitializationBuilder.js +139 -0
- package/dist/src/coin/stx/abstractContractBuilder.d.ts +19 -0
- package/dist/src/coin/stx/abstractContractBuilder.d.ts.map +1 -0
- package/dist/src/coin/stx/abstractContractBuilder.js +140 -0
- package/dist/src/coin/stx/constants.d.ts +8 -0
- package/dist/src/coin/stx/constants.d.ts.map +1 -0
- package/dist/src/coin/stx/constants.js +19 -0
- package/dist/src/coin/stx/sendmanyBuilder.d.ts +23 -0
- package/dist/src/coin/stx/sendmanyBuilder.d.ts.map +1 -0
- package/dist/src/coin/stx/sendmanyBuilder.js +140 -0
- package/dist/src/coin/stx/transaction.js +2 -2
- package/dist/src/coin/stx/utils.d.ts +3 -3
- package/dist/src/coin/stx/utils.d.ts.map +1 -1
- package/dist/src/coin/stx/utils.js +10 -7
- package/dist/src/keyPair/index.d.ts +4 -0
- package/dist/src/keyPair/index.d.ts.map +1 -0
- package/dist/src/keyPair/index.js +38 -0
- package/dist/src/mpc/curves.d.ts +14 -0
- package/dist/src/mpc/curves.d.ts.map +1 -0
- package/dist/src/mpc/curves.js +99 -0
- package/dist/src/mpc/shamir.d.ts +7 -0
- package/dist/src/mpc/shamir.d.ts.map +1 -0
- package/dist/src/mpc/shamir.js +91 -0
- package/dist/src/mpc/tss.d.ts +69 -0
- package/dist/src/mpc/tss.d.ts.map +1 -0
- package/dist/src/mpc/tss.js +255 -0
- package/dist/src/utils/ed25519KeyDeriver.d.ts +49 -0
- package/dist/src/utils/ed25519KeyDeriver.d.ts.map +1 -0
- package/dist/src/utils/ed25519KeyDeriver.js +92 -0
- package/dist/src/utils/index.d.ts +9 -0
- package/dist/src/utils/index.d.ts.map +1 -0
- package/dist/src/utils/index.js +43 -0
- package/package.json +4 -4
|
@@ -0,0 +1,35 @@
|
|
|
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.WalletInitializationBuilder = exports.TransferBuilder = exports.TransactionBuilderFactory = exports.Transaction = exports.KeyPair = void 0;
|
|
23
|
+
var Utils = __importStar(require("./utils"));
|
|
24
|
+
exports.Utils = Utils;
|
|
25
|
+
var keyPair_1 = require("./keyPair");
|
|
26
|
+
Object.defineProperty(exports, "KeyPair", { enumerable: true, get: function () { return keyPair_1.KeyPair; } });
|
|
27
|
+
var transaction_1 = require("./transaction");
|
|
28
|
+
Object.defineProperty(exports, "Transaction", { enumerable: true, get: function () { return transaction_1.Transaction; } });
|
|
29
|
+
var transactionBuilderFactory_1 = require("./transactionBuilderFactory");
|
|
30
|
+
Object.defineProperty(exports, "TransactionBuilderFactory", { enumerable: true, get: function () { return transactionBuilderFactory_1.TransactionBuilderFactory; } });
|
|
31
|
+
var transferBuilder_1 = require("./transferBuilder");
|
|
32
|
+
Object.defineProperty(exports, "TransferBuilder", { enumerable: true, get: function () { return transferBuilder_1.TransferBuilder; } });
|
|
33
|
+
var walletInitializationBuilder_1 = require("./walletInitializationBuilder");
|
|
34
|
+
Object.defineProperty(exports, "WalletInitializationBuilder", { enumerable: true, get: function () { return walletInitializationBuilder_1.WalletInitializationBuilder; } });
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29pbi9zb2wvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDZDQUFpQztBQU94QixzQkFBSztBQUxkLHFDQUFvQztBQUEzQixrR0FBQSxPQUFPLE9BQUE7QUFDaEIsNkNBQTRDO0FBQW5DLDBHQUFBLFdBQVcsT0FBQTtBQUNwQix5RUFBd0U7QUFBL0Qsc0lBQUEseUJBQXlCLE9BQUE7QUFDbEMscURBQW9EO0FBQTNDLGtIQUFBLGVBQWUsT0FBQTtBQUN4Qiw2RUFBNEU7QUFBbkUsMElBQUEsMkJBQTJCLE9BQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBVdGlscyBmcm9tICcuL3V0aWxzJztcblxuZXhwb3J0IHsgS2V5UGFpciB9IGZyb20gJy4va2V5UGFpcic7XG5leHBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuZXhwb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSB9IGZyb20gJy4vdHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSc7XG5leHBvcnQgeyBUcmFuc2ZlckJ1aWxkZXIgfSBmcm9tICcuL3RyYW5zZmVyQnVpbGRlcic7XG5leHBvcnQgeyBXYWxsZXRJbml0aWFsaXphdGlvbkJ1aWxkZXIgfSBmcm9tICcuL3dhbGxldEluaXRpYWxpemF0aW9uQnVpbGRlcic7XG5leHBvcnQgeyBVdGlscyB9O1xuIl19
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { TransactionInstruction } from '@solana/web3.js';
|
|
2
|
+
import { TransactionType } from '../baseCoin';
|
|
3
|
+
import { InstructionParams } from './iface';
|
|
4
|
+
/**
|
|
5
|
+
* Construct instructions params from Solana instructions
|
|
6
|
+
*
|
|
7
|
+
* @param {TransactionType} type - the transaction type
|
|
8
|
+
* @param {TransactionInstruction[]} instructions - solana instructions
|
|
9
|
+
* @returns {InstructionParams[]} An array containing instruction params
|
|
10
|
+
*/
|
|
11
|
+
export declare function instructionParamsFactory(type: TransactionType, instructions: TransactionInstruction[]): InstructionParams[];
|
|
12
|
+
//# sourceMappingURL=instructionParamsFactory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instructionParamsFactory.d.ts","sourceRoot":"","sources":["../../../../src/coin/sol/instructionParamsFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuC,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAE9F,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAU9C,OAAO,EACL,iBAAiB,EAQlB,MAAM,SAAS,CAAC;AAGjB;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,eAAe,EACrB,YAAY,EAAE,sBAAsB,EAAE,GACrC,iBAAiB,EAAE,CAerB"}
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.instructionParamsFactory = void 0;
|
|
4
|
+
var web3_js_1 = require("@solana/web3.js");
|
|
5
|
+
var baseCoin_1 = require("../baseCoin");
|
|
6
|
+
var errors_1 = require("../baseCoin/errors");
|
|
7
|
+
var constants_1 = require("./constants");
|
|
8
|
+
var utils_1 = require("./utils");
|
|
9
|
+
/**
|
|
10
|
+
* Construct instructions params from Solana instructions
|
|
11
|
+
*
|
|
12
|
+
* @param {TransactionType} type - the transaction type
|
|
13
|
+
* @param {TransactionInstruction[]} instructions - solana instructions
|
|
14
|
+
* @returns {InstructionParams[]} An array containing instruction params
|
|
15
|
+
*/
|
|
16
|
+
function instructionParamsFactory(type, instructions) {
|
|
17
|
+
switch (type) {
|
|
18
|
+
case baseCoin_1.TransactionType.WalletInitialization:
|
|
19
|
+
return parseWalletInitInstructions(instructions);
|
|
20
|
+
case baseCoin_1.TransactionType.Send:
|
|
21
|
+
return parseSendInstructions(instructions);
|
|
22
|
+
case baseCoin_1.TransactionType.StakingActivate:
|
|
23
|
+
return parseStakingActivateInstructions(instructions);
|
|
24
|
+
case baseCoin_1.TransactionType.StakingDeactivate:
|
|
25
|
+
return parseStakingDeactivateInstructions(instructions);
|
|
26
|
+
case baseCoin_1.TransactionType.StakingWithdraw:
|
|
27
|
+
return parseStakingWithdrawInstructions(instructions);
|
|
28
|
+
default:
|
|
29
|
+
throw new errors_1.NotSupported('Invalid transaction, transaction type not supported: ' + type);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
exports.instructionParamsFactory = instructionParamsFactory;
|
|
33
|
+
/**
|
|
34
|
+
* Parses Solana instructions to Wallet initialization tx instructions params
|
|
35
|
+
*
|
|
36
|
+
* @param {TransactionInstruction[]} instructions - containing create and initialize nonce solana instructions
|
|
37
|
+
* @returns {InstructionParams[]} An array containing instruction params for Wallet initialization tx
|
|
38
|
+
*/
|
|
39
|
+
function parseWalletInitInstructions(instructions) {
|
|
40
|
+
var instructionData = [];
|
|
41
|
+
var createInstruction = web3_js_1.SystemInstruction.decodeCreateAccount(instructions[constants_1.walletInitInstructionIndexes.Create]);
|
|
42
|
+
var nonceInitInstruction = web3_js_1.SystemInstruction.decodeNonceInitialize(instructions[constants_1.walletInitInstructionIndexes.InitializeNonceAccount]);
|
|
43
|
+
var walletInit = {
|
|
44
|
+
type: constants_1.InstructionBuilderTypes.CreateNonceAccount,
|
|
45
|
+
params: {
|
|
46
|
+
fromAddress: createInstruction.fromPubkey.toString(),
|
|
47
|
+
nonceAddress: nonceInitInstruction.noncePubkey.toString(),
|
|
48
|
+
authAddress: nonceInitInstruction.authorizedPubkey.toString(),
|
|
49
|
+
amount: createInstruction.lamports.toString(),
|
|
50
|
+
},
|
|
51
|
+
};
|
|
52
|
+
instructionData.push(walletInit);
|
|
53
|
+
var memo = getMemo(instructions, constants_1.walletInitInstructionIndexes);
|
|
54
|
+
if (memo) {
|
|
55
|
+
instructionData.push(memo);
|
|
56
|
+
}
|
|
57
|
+
return instructionData;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Parses Solana instructions to Send tx instructions params
|
|
61
|
+
* Only supports Memo, Transfer and Advance Nonce Solana instructions
|
|
62
|
+
*
|
|
63
|
+
* @param {TransactionInstruction[]} instructions - an array of supported Solana instructions
|
|
64
|
+
* @returns {InstructionParams[]} An array containing instruction params for Send tx
|
|
65
|
+
*/
|
|
66
|
+
function parseSendInstructions(instructions) {
|
|
67
|
+
var instructionData = [];
|
|
68
|
+
for (var _i = 0, instructions_1 = instructions; _i < instructions_1.length; _i++) {
|
|
69
|
+
var instruction = instructions_1[_i];
|
|
70
|
+
var type = utils_1.getInstructionType(instruction);
|
|
71
|
+
switch (type) {
|
|
72
|
+
case constants_1.ValidInstructionTypesEnum.Memo:
|
|
73
|
+
var memo = { type: constants_1.InstructionBuilderTypes.Memo, params: { memo: instruction.data.toString() } };
|
|
74
|
+
instructionData.push(memo);
|
|
75
|
+
break;
|
|
76
|
+
case constants_1.ValidInstructionTypesEnum.AdvanceNonceAccount:
|
|
77
|
+
var advanceNonceInstruction = web3_js_1.SystemInstruction.decodeNonceAdvance(instruction);
|
|
78
|
+
var nonce = {
|
|
79
|
+
type: constants_1.InstructionBuilderTypes.NonceAdvance,
|
|
80
|
+
params: {
|
|
81
|
+
walletNonceAddress: advanceNonceInstruction.noncePubkey.toString(),
|
|
82
|
+
authWalletAddress: advanceNonceInstruction.authorizedPubkey.toString(),
|
|
83
|
+
},
|
|
84
|
+
};
|
|
85
|
+
instructionData.push(nonce);
|
|
86
|
+
break;
|
|
87
|
+
case constants_1.ValidInstructionTypesEnum.Transfer:
|
|
88
|
+
var transferInstruction = web3_js_1.SystemInstruction.decodeTransfer(instruction);
|
|
89
|
+
var transfer = {
|
|
90
|
+
type: constants_1.InstructionBuilderTypes.Transfer,
|
|
91
|
+
params: {
|
|
92
|
+
fromAddress: transferInstruction.fromPubkey.toString(),
|
|
93
|
+
toAddress: transferInstruction.toPubkey.toString(),
|
|
94
|
+
amount: transferInstruction.lamports.toString(),
|
|
95
|
+
},
|
|
96
|
+
};
|
|
97
|
+
instructionData.push(transfer);
|
|
98
|
+
break;
|
|
99
|
+
default:
|
|
100
|
+
throw new errors_1.NotSupported('Invalid transaction, instruction type not supported: ' + utils_1.getInstructionType(instruction));
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return instructionData;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Parses Solana instructions to create staking tx and delegate tx instructions params
|
|
107
|
+
* Only supports StakingActivate and Memo Solana instructions
|
|
108
|
+
*
|
|
109
|
+
* @param {TransactionInstruction[]} instructions - an array of supported Solana instructions
|
|
110
|
+
* @returns {InstructionParams[]} An array containing instruction params for staking activate tx
|
|
111
|
+
*/
|
|
112
|
+
function parseStakingActivateInstructions(instructions) {
|
|
113
|
+
var instructionData = [];
|
|
114
|
+
var createInstruction = web3_js_1.SystemInstruction.decodeCreateAccount(instructions[constants_1.stakingActivateInstructionsIndexes.Create]);
|
|
115
|
+
var initializeInstruction = web3_js_1.StakeInstruction.decodeInitialize(instructions[constants_1.stakingActivateInstructionsIndexes.Initialize]);
|
|
116
|
+
var delegateInstruction = web3_js_1.StakeInstruction.decodeDelegate(instructions[constants_1.stakingActivateInstructionsIndexes.Delegate]);
|
|
117
|
+
var stakingActivate = {
|
|
118
|
+
type: constants_1.InstructionBuilderTypes.StakingActivate,
|
|
119
|
+
params: {
|
|
120
|
+
fromAddress: createInstruction.fromPubkey.toString(),
|
|
121
|
+
stakingAddress: initializeInstruction.stakePubkey.toString(),
|
|
122
|
+
amount: createInstruction.lamports.toString(),
|
|
123
|
+
validator: delegateInstruction.votePubkey.toString(),
|
|
124
|
+
},
|
|
125
|
+
};
|
|
126
|
+
instructionData.push(stakingActivate);
|
|
127
|
+
var memo = getMemo(instructions, constants_1.stakingActivateInstructionsIndexes);
|
|
128
|
+
if (memo) {
|
|
129
|
+
instructionData.push(memo);
|
|
130
|
+
}
|
|
131
|
+
return instructionData;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Parses Solana instructions to create deactivate tx instructions params
|
|
135
|
+
* Only supports StakingDeactivate and Memo Solana instructions
|
|
136
|
+
*
|
|
137
|
+
* @param {TransactionInstruction[]} instructions - an array of supported Solana instructions
|
|
138
|
+
* @returns {InstructionParams[]} An array containing instruction params for staking deactivate tx
|
|
139
|
+
*/
|
|
140
|
+
function parseStakingDeactivateInstructions(instructions) {
|
|
141
|
+
var instructionData = [];
|
|
142
|
+
var deactivateInstruction = web3_js_1.StakeInstruction.decodeDeactivate(instructions[constants_1.stakingDeactivateInstructionsIndexes.Deactivate]);
|
|
143
|
+
var stakingDeactivate = {
|
|
144
|
+
type: constants_1.InstructionBuilderTypes.StakingDeactivate,
|
|
145
|
+
params: {
|
|
146
|
+
fromAddress: deactivateInstruction.authorizedPubkey.toString(),
|
|
147
|
+
stakingAddress: deactivateInstruction.stakePubkey.toString(),
|
|
148
|
+
},
|
|
149
|
+
};
|
|
150
|
+
instructionData.push(stakingDeactivate);
|
|
151
|
+
var memo = getMemo(instructions, constants_1.stakingDeactivateInstructionsIndexes);
|
|
152
|
+
if (memo) {
|
|
153
|
+
instructionData.push(memo);
|
|
154
|
+
}
|
|
155
|
+
return instructionData;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Parses Solana instructions to create staking withdraw tx instructions params
|
|
159
|
+
* Only supports StakingWithdraw and Memo Solana instructions
|
|
160
|
+
*
|
|
161
|
+
* @param {TransactionInstruction[]} instructions - an array of supported Solana instructions
|
|
162
|
+
* @returns {InstructionParams[]} An array containing instruction params for staking withdraw tx
|
|
163
|
+
*/
|
|
164
|
+
function parseStakingWithdrawInstructions(instructions) {
|
|
165
|
+
var instructionData = [];
|
|
166
|
+
var withdrawInstruction = web3_js_1.StakeInstruction.decodeWithdraw(instructions[constants_1.stakingWithdrawInstructionsIndexes.Withdraw]);
|
|
167
|
+
var stakingWithdraw = {
|
|
168
|
+
type: constants_1.InstructionBuilderTypes.StakingWithdraw,
|
|
169
|
+
params: {
|
|
170
|
+
fromAddress: withdrawInstruction.authorizedPubkey.toString(),
|
|
171
|
+
stakingAddress: withdrawInstruction.stakePubkey.toString(),
|
|
172
|
+
amount: withdrawInstruction.lamports.toString(),
|
|
173
|
+
},
|
|
174
|
+
};
|
|
175
|
+
instructionData.push(stakingWithdraw);
|
|
176
|
+
var memo = getMemo(instructions, constants_1.stakingWithdrawInstructionsIndexes);
|
|
177
|
+
if (memo) {
|
|
178
|
+
instructionData.push(memo);
|
|
179
|
+
}
|
|
180
|
+
return instructionData;
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Get the memo object from instructions if it exists
|
|
184
|
+
*
|
|
185
|
+
* @param {TransactionInstruction[]} instructions - the array of supported Solana instructions to be parsed
|
|
186
|
+
* @param {Record<string, number>} instructionIndexes - the instructions indexes of the current transaction
|
|
187
|
+
* @returns {Memo | undefined} - memo object or undefined
|
|
188
|
+
*/
|
|
189
|
+
function getMemo(instructions, instructionIndexes) {
|
|
190
|
+
var instructionsLength = Object.keys(instructionIndexes).length;
|
|
191
|
+
if (instructions.length === instructionsLength && instructions[instructionIndexes.Memo]) {
|
|
192
|
+
return {
|
|
193
|
+
type: constants_1.InstructionBuilderTypes.Memo,
|
|
194
|
+
params: { memo: instructions[instructionIndexes.Memo].data.toString() },
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdHJ1Y3Rpb25QYXJhbXNGYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvaW4vc29sL2luc3RydWN0aW9uUGFyYW1zRmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwyQ0FBOEY7QUFFOUYsd0NBQThDO0FBQzlDLDZDQUFrRDtBQUNsRCx5Q0FPcUI7QUFXckIsaUNBQTZDO0FBRTdDOzs7Ozs7R0FNRztBQUNILFNBQWdCLHdCQUF3QixDQUN0QyxJQUFxQixFQUNyQixZQUFzQztJQUV0QyxRQUFRLElBQUksRUFBRTtRQUNaLEtBQUssMEJBQWUsQ0FBQyxvQkFBb0I7WUFDdkMsT0FBTywyQkFBMkIsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNuRCxLQUFLLDBCQUFlLENBQUMsSUFBSTtZQUN2QixPQUFPLHFCQUFxQixDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzdDLEtBQUssMEJBQWUsQ0FBQyxlQUFlO1lBQ2xDLE9BQU8sZ0NBQWdDLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDeEQsS0FBSywwQkFBZSxDQUFDLGlCQUFpQjtZQUNwQyxPQUFPLGtDQUFrQyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzFELEtBQUssMEJBQWUsQ0FBQyxlQUFlO1lBQ2xDLE9BQU8sZ0NBQWdDLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDeEQ7WUFDRSxNQUFNLElBQUkscUJBQVksQ0FBQyx1REFBdUQsR0FBRyxJQUFJLENBQUMsQ0FBQztLQUMxRjtBQUNILENBQUM7QUFsQkQsNERBa0JDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLDJCQUEyQixDQUFDLFlBQXNDO0lBQ3pFLElBQU0sZUFBZSxHQUE2QixFQUFFLENBQUM7SUFDckQsSUFBTSxpQkFBaUIsR0FBRywyQkFBaUIsQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLENBQUMsd0NBQTRCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNuSCxJQUFNLG9CQUFvQixH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QUFDLGVBQWUsQ0FBQyxDQUFDO0lBRXRDLElBQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxZQUFZLEVBQUUsOENBQWtDLENBQUMsQ0FBQztJQUN2RSxJQUFJLElBQUksRUFBRTtRQUNSLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDNUI7SUFFRCxPQUFPLGVBQWUsQ0FBQztBQUN6QixDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBUyxPQUFPLENBQUMsWUFBc0MsRUFBRSxrQkFBMEM7SUFDakcsSUFBTSxrQkFBa0IsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ2xFLElBQUksWUFBWSxDQUFDLE1BQU0sS0FBSyxrQkFBa0IsSUFBSSxZQUFZLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDdkYsT0FBTztZQUNMLElBQUksRUFBRSxtQ0FBdUIsQ0FBQyxJQUFJO1lBQ2xDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxZQUFZLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFO1NBQ3hFLENBQUM7S0FDSDtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdGFrZUluc3RydWN0aW9uLCBTeXN0ZW1JbnN0cnVjdGlvbiwgVHJhbnNhY3Rpb25JbnN0cnVjdGlvbiB9IGZyb20gJ0Bzb2xhbmEvd2ViMy5qcyc7XG5cbmltcG9ydCB7IFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJy4uL2Jhc2VDb2luJztcbmltcG9ydCB7IE5vdFN1cHBvcnRlZCB9IGZyb20gJy4uL2Jhc2VDb2luL2Vycm9ycyc7XG5pbXBvcnQge1xuICBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcyxcbiAgVmFsaWRJbnN0cnVjdGlvblR5cGVzRW51bSxcbiAgd2FsbGV0SW5pdEluc3RydWN0aW9uSW5kZXhlcyxcbiAgc3Rha2luZ0FjdGl2YXRlSW5zdHJ1Y3Rpb25zSW5kZXhlcyxcbiAgc3Rha2luZ0RlYWN0aXZhdGVJbnN0cnVjdGlvbnNJbmRleGVzLFxuICBzdGFraW5nV2l0aGRyYXdJbnN0cnVjdGlvbnNJbmRleGVzLFxufSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuICBJbnN0cnVjdGlvblBhcmFtcyxcbiAgV2FsbGV0SW5pdCxcbiAgVHJhbnNmZXIsXG4gIE5vbmNlLFxuICBNZW1vLFxuICBTdGFraW5nQWN0aXZhdGUsXG4gIFN0YWtpbmdEZWFjdGl2YXRlLFxuICBTdGFraW5nV2l0aGRyYXcsXG59IGZyb20gJy4vaWZhY2UnO1xuaW1wb3J0IHsgZ2V0SW5zdHJ1Y3Rpb25UeXBlIH0gZnJvbSAnLi91dGlscyc7XG5cbi8qKlxuICogQ29uc3RydWN0IGluc3RydWN0aW9ucyBwYXJhbXMgZnJvbSBTb2xhbmEgaW5zdHJ1Y3Rpb25zXG4gKlxuICogQHBhcmFtIHtUcmFuc2FjdGlvblR5cGV9IHR5cGUgLSB0aGUgdHJhbnNhY3Rpb24gdHlwZVxuICogQHBhcmFtIHtUcmFuc2FjdGlvbkluc3RydWN0aW9uW119IGluc3RydWN0aW9ucyAtIHNvbGFuYSBpbnN0cnVjdGlvbnNcbiAqIEByZXR1cm5zIHtJbnN0cnVjdGlvblBhcmFtc1tdfSBBbiBhcnJheSBjb250YWluaW5nIGluc3RydWN0aW9uIHBhcmFtc1xuICovXG5leHBvcnQgZnVuY3Rpb24gaW5zdHJ1Y3Rpb25QYXJhbXNGYWN0b3J5KFxuICB0eXBlOiBUcmFuc2FjdGlvblR5cGUsXG4gIGluc3RydWN0aW9uczogVHJhbnNhY3Rpb25JbnN0cnVjdGlvbltdLFxuKTogSW5zdHJ1Y3Rpb25QYXJhbXNbXSB7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLldhbGxldEluaXRpYWxpemF0aW9uOlxuICAgICAgcmV0dXJuIHBhcnNlV2FsbGV0SW5pdEluc3RydWN0aW9ucyhpbnN0cnVjdGlvbnMpO1xuICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlNlbmQ6XG4gICAgICByZXR1cm4gcGFyc2VTZW5kSW5zdHJ1Y3Rpb25zKGluc3RydWN0aW9ucyk7XG4gICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0FjdGl2YXRlOlxuICAgICAgcmV0dXJuIHBhcnNlU3Rha2luZ0FjdGl2YXRlSW5zdHJ1Y3Rpb25zKGluc3RydWN0aW9ucyk7XG4gICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0RlYWN0aXZhdGU6XG4gICAgICByZXR1cm4gcGFyc2VTdGFraW5nRGVhY3RpdmF0ZUluc3RydWN0aW9ucyhpbnN0cnVjdGlvbnMpO1xuICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdXaXRoZHJhdzpcbiAgICAgIHJldHVybiBwYXJzZVN0YWtpbmdXaXRoZHJhd0luc3RydWN0aW9ucyhpbnN0cnVjdGlvbnMpO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkKCdJbnZhbGlkIHRyYW5zYWN0aW9uLCB0cmFuc2FjdGlvbiB0eXBlIG5vdCBzdXBwb3J0ZWQ6ICcgKyB0eXBlKTtcbiAgfVxufVxuXG4vKipcbiAqIFBhcnNlcyBTb2xhbmEgaW5zdHJ1Y3Rpb25zIHRvIFdhbGxldCBpbml0aWFsaXphdGlvbiB0eCBpbnN0cnVjdGlvbnMgcGFyYW1zXG4gKlxuICogQHBhcmFtIHtUcmFuc2FjdGlvbkluc3RydWN0aW9uW119IGluc3RydWN0aW9ucyAtIGNvbnRhaW5pbmcgY3JlYXRlIGFuZCBpbml0aWFsaXplIG5vbmNlIHNvbGFuYSBpbnN0cnVjdGlvbnNcbiAqIEByZXR1cm5zIHtJbnN0cnVjdGlvblBhcmFtc1tdfSBBbiBhcnJheSBjb250YWluaW5nIGluc3RydWN0aW9uIHBhcmFtcyBmb3IgV2FsbGV0IGluaXRpYWxpemF0aW9uIHR4XG4gKi9cbmZ1bmN0aW9uIHBhcnNlV2FsbGV0SW5pdEluc3RydWN0aW9ucyhpbnN0cnVjdGlvbnM6IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXSk6IEFycmF5PFdhbGxldEluaXQgfCBNZW1vPiB7XG4gIGNvbnN0IGluc3RydWN0aW9uRGF0YTogQXJyYXk8V2FsbGV0SW5pdCB8IE1lbW8+ID0gW107XG4gIGNvbnN0IGNyZWF0ZUluc3RydWN0aW9uID0gU3lzdGVtSW5zdHJ1Y3Rpb24uZGVjb2RlQ3JlYXRlQWNjb3VudChpbnN0cnVjdGlvbnNbd2FsbGV0SW5pdEluc3RydWN0aW9uSW5kZXhlcy5DcmVhdGVdKTtcbiAgY29uc3Qgbm9uY2VJbml0SW5zdHJ1Y3Rpb24gPSBTeXN0ZW1JbnN0cnVjdGlvbi5kZWNvZGVOb25jZUluaXRpYWxpemUoXG4gICAgaW5zdHJ1Y3Rpb25zW3dhbGxldEluaXRJbnN0cnVjdGlvbkluZGV4ZXMuSW5pdGlhbGl6ZU5vbmNlQWNjb3VudF0sXG4gICk7XG5cbiAgY29uc3Qgd2FsbGV0SW5pdDogV2FsbGV0SW5pdCA9IHtcbiAgICB0eXBlOiBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5DcmVhdGVOb25jZUFjY291bnQsXG4gICAgcGFyYW1zOiB7XG4gICAgICBmcm9tQWRkcmVzczogY3JlYXRlSW5zdHJ1Y3Rpb24uZnJvbVB1YmtleS50b1N0cmluZygpLFxuICAgICAgbm9uY2VBZGRyZXNzOiBub25jZUluaXRJbnN0cnVjdGlvbi5ub25jZVB1YmtleS50b1N0cmluZygpLFxuICAgICAgYXV0aEFkZHJlc3M6IG5vbmNlSW5pdEluc3RydWN0aW9uLmF1dGhvcml6ZWRQdWJrZXkudG9TdHJpbmcoKSxcbiAgICAgIGFtb3VudDogY3JlYXRlSW5zdHJ1Y3Rpb24ubGFtcG9ydHMudG9TdHJpbmcoKSxcbiAgICB9LFxuICB9O1xuICBpbnN0cnVjdGlvbkRhdGEucHVzaCh3YWxsZXRJbml0KTtcblxuICBjb25zdCBtZW1vID0gZ2V0TWVtbyhpbnN0cnVjdGlvbnMsIHdhbGxldEluaXRJbnN0cnVjdGlvbkluZGV4ZXMpO1xuICBpZiAobWVtbykge1xuICAgIGluc3RydWN0aW9uRGF0YS5wdXNoKG1lbW8pO1xuICB9XG5cbiAgcmV0dXJuIGluc3RydWN0aW9uRGF0YTtcbn1cblxuLyoqXG4gKiBQYXJzZXMgU29sYW5hIGluc3RydWN0aW9ucyB0byBTZW5kIHR4IGluc3RydWN0aW9ucyBwYXJhbXNcbiAqIE9ubHkgc3VwcG9ydHMgTWVtbywgVHJhbnNmZXIgYW5kIEFkdmFuY2UgTm9uY2UgU29sYW5hIGluc3RydWN0aW9uc1xuICpcbiAqIEBwYXJhbSB7VHJhbnNhY3Rpb25JbnN0cnVjdGlvbltdfSBpbnN0cnVjdGlvbnMgLSBhbiBhcnJheSBvZiBzdXBwb3J0ZWQgU29sYW5hIGluc3RydWN0aW9uc1xuICogQHJldHVybnMge0luc3RydWN0aW9uUGFyYW1zW119IEFuIGFycmF5IGNvbnRhaW5pbmcgaW5zdHJ1Y3Rpb24gcGFyYW1zIGZvciBTZW5kIHR4XG4gKi9cbmZ1bmN0aW9uIHBhcnNlU2VuZEluc3RydWN0aW9ucyhpbnN0cnVjdGlvbnM6IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXSk6IEFycmF5PE5vbmNlIHwgTWVtbyB8IFRyYW5zZmVyPiB7XG4gIGNvbnN0IGluc3RydWN0aW9uRGF0YTogQXJyYXk8Tm9uY2UgfCBNZW1vIHwgVHJhbnNmZXI+ID0gW107XG4gIGZvciAoY29uc3QgaW5zdHJ1Y3Rpb24gb2YgaW5zdHJ1Y3Rpb25zKSB7XG4gICAgY29uc3QgdHlwZSA9IGdldEluc3RydWN0aW9uVHlwZShpbnN0cnVjdGlvbik7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIFZhbGlkSW5zdHJ1Y3Rpb25UeXBlc0VudW0uTWVtbzpcbiAgICAgICAgY29uc3QgbWVtbzogTWVtbyA9IHsgdHlwZTogSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuTWVtbywgcGFyYW1zOiB7IG1lbW86IGluc3RydWN0aW9uLmRhdGEudG9TdHJpbmcoKSB9IH07XG4gICAgICAgIGluc3RydWN0aW9uRGF0YS5wdXNoKG1lbW8pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVmFsaWRJbnN0cnVjdGlvblR5cGVzRW51bS5BZHZhbmNlTm9uY2VBY2NvdW50OlxuICAgICAgICBjb25zdCBhZHZhbmNlTm9uY2VJbnN0cnVjdGlvbiA9IFN5c3RlbUluc3RydWN0aW9uLmRlY29kZU5vbmNlQWR2YW5jZShpbnN0cnVjdGlvbik7XG4gICAgICAgIGNvbnN0IG5vbmNlOiBOb25jZSA9IHtcbiAgICAgICAgICB0eXBlOiBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5Ob25jZUFkdmFuY2UsXG4gICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICB3YWxsZXROb25jZUFkZHJlc3M6IGFkdmFuY2VOb25jZUluc3RydWN0aW9uLm5vbmNlUHVia2V5LnRvU3RyaW5nKCksXG4gICAgICAgICAgICBhdXRoV2FsbGV0QWRkcmVzczogYWR2YW5jZU5vbmNlSW5zdHJ1Y3Rpb24uYXV0aG9yaXplZFB1YmtleS50b1N0cmluZygpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGluc3RydWN0aW9uRGF0YS5wdXNoKG5vbmNlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFZhbGlkSW5zdHJ1Y3Rpb25UeXBlc0VudW0uVHJhbnNmZXI6XG4gICAgICAgIGNvbnN0IHRyYW5zZmVySW5zdHJ1Y3Rpb24gPSBTeXN0ZW1JbnN0cnVjdGlvbi5kZWNvZGVUcmFuc2ZlcihpbnN0cnVjdGlvbik7XG4gICAgICAgIGNvbnN0IHRyYW5zZmVyOiBUcmFuc2ZlciA9IHtcbiAgICAgICAgICB0eXBlOiBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5UcmFuc2ZlcixcbiAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgIGZyb21BZGRyZXNzOiB0cmFuc2Zlckluc3RydWN0aW9uLmZyb21QdWJrZXkudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIHRvQWRkcmVzczogdHJhbnNmZXJJbnN0cnVjdGlvbi50b1B1YmtleS50b1N0cmluZygpLFxuICAgICAgICAgICAgYW1vdW50OiB0cmFuc2Zlckluc3RydWN0aW9uLmxhbXBvcnRzLnRvU3RyaW5nKCksXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgaW5zdHJ1Y3Rpb25EYXRhLnB1c2godHJhbnNmZXIpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWQoXG4gICAgICAgICAgJ0ludmFsaWQgdHJhbnNhY3Rpb24sIGluc3RydWN0aW9uIHR5cGUgbm90IHN1cHBvcnRlZDogJyArIGdldEluc3RydWN0aW9uVHlwZShpbnN0cnVjdGlvbiksXG4gICAgICAgICk7XG4gICAgfVxuICB9XG4gIHJldHVybiBpbnN0cnVjdGlvbkRhdGE7XG59XG5cbi8qKlxuICogUGFyc2VzIFNvbGFuYSBpbnN0cnVjdGlvbnMgdG8gY3JlYXRlIHN0YWtpbmcgdHggYW5kIGRlbGVnYXRlIHR4IGluc3RydWN0aW9ucyBwYXJhbXNcbiAqIE9ubHkgc3VwcG9ydHMgU3Rha2luZ0FjdGl2YXRlIGFuZCBNZW1vIFNvbGFuYSBpbnN0cnVjdGlvbnNcbiAqXG4gKiBAcGFyYW0ge1RyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXX0gaW5zdHJ1Y3Rpb25zIC0gYW4gYXJyYXkgb2Ygc3VwcG9ydGVkIFNvbGFuYSBpbnN0cnVjdGlvbnNcbiAqIEByZXR1cm5zIHtJbnN0cnVjdGlvblBhcmFtc1tdfSBBbiBhcnJheSBjb250YWluaW5nIGluc3RydWN0aW9uIHBhcmFtcyBmb3Igc3Rha2luZyBhY3RpdmF0ZSB0eFxuICovXG5mdW5jdGlvbiBwYXJzZVN0YWtpbmdBY3RpdmF0ZUluc3RydWN0aW9ucyhpbnN0cnVjdGlvbnM6IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXSk6IEFycmF5PFN0YWtpbmdBY3RpdmF0ZSB8IE1lbW8+IHtcbiAgY29uc3QgaW5zdHJ1Y3Rpb25EYXRhOiBBcnJheTxTdGFraW5nQWN0aXZhdGUgfCBNZW1vPiA9IFtdO1xuICBjb25zdCBjcmVhdGVJbnN0cnVjdGlvbiA9IFN5c3RlbUluc3RydWN0aW9uLmRlY29kZUNyZWF0ZUFjY291bnQoXG4gICAgaW5zdHJ1Y3Rpb25zW3N0YWtpbmdBY3RpdmF0ZUluc3RydWN0aW9uc0luZGV4ZXMuQ3JlYXRlXSxcbiAgKTtcbiAgY29uc3QgaW5pdGlhbGl6ZUluc3RydWN0aW9uID0gU3Rha2VJbnN0cnVjdGlvbi5kZWNvZGVJbml0aWFsaXplKFxuICAgIGluc3RydWN0aW9uc1tzdGFraW5nQWN0aXZhdGVJbnN0cnVjdGlvbnNJbmRleGVzLkluaXRpYWxpemVdLFxuICApO1xuICBjb25zdCBkZWxlZ2F0ZUluc3RydWN0aW9uID0gU3Rha2VJbnN0cnVjdGlvbi5kZWNvZGVEZWxlZ2F0ZShcbiAgICBpbnN0cnVjdGlvbnNbc3Rha2luZ0FjdGl2YXRlSW5zdHJ1Y3Rpb25zSW5kZXhlcy5EZWxlZ2F0ZV0sXG4gICk7XG5cbiAgY29uc3Qgc3Rha2luZ0FjdGl2YXRlOiBTdGFraW5nQWN0aXZhdGUgPSB7XG4gICAgdHlwZTogSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuU3Rha2luZ0FjdGl2YXRlLFxuICAgIHBhcmFtczoge1xuICAgICAgZnJvbUFkZHJlc3M6IGNyZWF0ZUluc3RydWN0aW9uLmZyb21QdWJrZXkudG9TdHJpbmcoKSxcbiAgICAgIHN0YWtpbmdBZGRyZXNzOiBpbml0aWFsaXplSW5zdHJ1Y3Rpb24uc3Rha2VQdWJrZXkudG9TdHJpbmcoKSxcbiAgICAgIGFtb3VudDogY3JlYXRlSW5zdHJ1Y3Rpb24ubGFtcG9ydHMudG9TdHJpbmcoKSxcbiAgICAgIHZhbGlkYXRvcjogZGVsZWdhdGVJbnN0cnVjdGlvbi52b3RlUHVia2V5LnRvU3RyaW5nKCksXG4gICAgfSxcbiAgfTtcbiAgaW5zdHJ1Y3Rpb25EYXRhLnB1c2goc3Rha2luZ0FjdGl2YXRlKTtcblxuICBjb25zdCBtZW1vID0gZ2V0TWVtbyhpbnN0cnVjdGlvbnMsIHN0YWtpbmdBY3RpdmF0ZUluc3RydWN0aW9uc0luZGV4ZXMpO1xuICBpZiAobWVtbykge1xuICAgIGluc3RydWN0aW9uRGF0YS5wdXNoKG1lbW8pO1xuICB9XG5cbiAgcmV0dXJuIGluc3RydWN0aW9uRGF0YTtcbn1cblxuLyoqXG4gKiBQYXJzZXMgU29sYW5hIGluc3RydWN0aW9ucyB0byBjcmVhdGUgZGVhY3RpdmF0ZSB0eCBpbnN0cnVjdGlvbnMgcGFyYW1zXG4gKiBPbmx5IHN1cHBvcnRzIFN0YWtpbmdEZWFjdGl2YXRlIGFuZCBNZW1vIFNvbGFuYSBpbnN0cnVjdGlvbnNcbiAqXG4gKiBAcGFyYW0ge1RyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXX0gaW5zdHJ1Y3Rpb25zIC0gYW4gYXJyYXkgb2Ygc3VwcG9ydGVkIFNvbGFuYSBpbnN0cnVjdGlvbnNcbiAqIEByZXR1cm5zIHtJbnN0cnVjdGlvblBhcmFtc1tdfSBBbiBhcnJheSBjb250YWluaW5nIGluc3RydWN0aW9uIHBhcmFtcyBmb3Igc3Rha2luZyBkZWFjdGl2YXRlIHR4XG4gKi9cbmZ1bmN0aW9uIHBhcnNlU3Rha2luZ0RlYWN0aXZhdGVJbnN0cnVjdGlvbnMoaW5zdHJ1Y3Rpb25zOiBUcmFuc2FjdGlvbkluc3RydWN0aW9uW10pOiBBcnJheTxTdGFraW5nRGVhY3RpdmF0ZSB8IE1lbW8+IHtcbiAgY29uc3QgaW5zdHJ1Y3Rpb25EYXRhOiBBcnJheTxTdGFraW5nRGVhY3RpdmF0ZSB8IE1lbW8+ID0gW107XG4gIGNvbnN0IGRlYWN0aXZhdGVJbnN0cnVjdGlvbiA9IFN0YWtlSW5zdHJ1Y3Rpb24uZGVjb2RlRGVhY3RpdmF0ZShcbiAgICBpbnN0cnVjdGlvbnNbc3Rha2luZ0RlYWN0aXZhdGVJbnN0cnVjdGlvbnNJbmRleGVzLkRlYWN0aXZhdGVdLFxuICApO1xuICBjb25zdCBzdGFraW5nRGVhY3RpdmF0ZTogU3Rha2luZ0RlYWN0aXZhdGUgPSB7XG4gICAgdHlwZTogSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuU3Rha2luZ0RlYWN0aXZhdGUsXG4gICAgcGFyYW1zOiB7XG4gICAgICBmcm9tQWRkcmVzczogZGVhY3RpdmF0ZUluc3RydWN0aW9uLmF1dGhvcml6ZWRQdWJrZXkudG9TdHJpbmcoKSxcbiAgICAgIHN0YWtpbmdBZGRyZXNzOiBkZWFjdGl2YXRlSW5zdHJ1Y3Rpb24uc3Rha2VQdWJrZXkudG9TdHJpbmcoKSxcbiAgICB9LFxuICB9O1xuICBpbnN0cnVjdGlvbkRhdGEucHVzaChzdGFraW5nRGVhY3RpdmF0ZSk7XG5cbiAgY29uc3QgbWVtbyA9IGdldE1lbW8oaW5zdHJ1Y3Rpb25zLCBzdGFraW5nRGVhY3RpdmF0ZUluc3RydWN0aW9uc0luZGV4ZXMpO1xuICBpZiAobWVtbykge1xuICAgIGluc3RydWN0aW9uRGF0YS5wdXNoKG1lbW8pO1xuICB9XG4gIHJldHVybiBpbnN0cnVjdGlvbkRhdGE7XG59XG5cbi8qKlxuICogUGFyc2VzIFNvbGFuYSBpbnN0cnVjdGlvbnMgdG8gY3JlYXRlIHN0YWtpbmcgIHdpdGhkcmF3IHR4IGluc3RydWN0aW9ucyBwYXJhbXNcbiAqIE9ubHkgc3VwcG9ydHMgU3Rha2luZ1dpdGhkcmF3IGFuZCBNZW1vIFNvbGFuYSBpbnN0cnVjdGlvbnNcbiAqXG4gKiBAcGFyYW0ge1RyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXX0gaW5zdHJ1Y3Rpb25zIC0gYW4gYXJyYXkgb2Ygc3VwcG9ydGVkIFNvbGFuYSBpbnN0cnVjdGlvbnNcbiAqIEByZXR1cm5zIHtJbnN0cnVjdGlvblBhcmFtc1tdfSBBbiBhcnJheSBjb250YWluaW5nIGluc3RydWN0aW9uIHBhcmFtcyBmb3Igc3Rha2luZyB3aXRoZHJhdyB0eFxuICovXG5mdW5jdGlvbiBwYXJzZVN0YWtpbmdXaXRoZHJhd0luc3RydWN0aW9ucyhpbnN0cnVjdGlvbnM6IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXSk6IEFycmF5PFN0YWtpbmdXaXRoZHJhdyB8IE1lbW8+IHtcbiAgY29uc3QgaW5zdHJ1Y3Rpb25EYXRhOiBBcnJheTxTdGFraW5nV2l0aGRyYXcgfCBNZW1vPiA9IFtdO1xuICBjb25zdCB3aXRoZHJhd0luc3RydWN0aW9uID0gU3Rha2VJbnN0cnVjdGlvbi5kZWNvZGVXaXRoZHJhdyhcbiAgICBpbnN0cnVjdGlvbnNbc3Rha2luZ1dpdGhkcmF3SW5zdHJ1Y3Rpb25zSW5kZXhlcy5XaXRoZHJhd10sXG4gICk7XG5cbiAgY29uc3Qgc3Rha2luZ1dpdGhkcmF3OiBTdGFraW5nV2l0aGRyYXcgPSB7XG4gICAgdHlwZTogSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuU3Rha2luZ1dpdGhkcmF3LFxuICAgIHBhcmFtczoge1xuICAgICAgZnJvbUFkZHJlc3M6IHdpdGhkcmF3SW5zdHJ1Y3Rpb24uYXV0aG9yaXplZFB1YmtleS50b1N0cmluZygpLFxuICAgICAgc3Rha2luZ0FkZHJlc3M6IHdpdGhkcmF3SW5zdHJ1Y3Rpb24uc3Rha2VQdWJrZXkudG9TdHJpbmcoKSxcbiAgICAgIGFtb3VudDogd2l0aGRyYXdJbnN0cnVjdGlvbi5sYW1wb3J0cy50b1N0cmluZygpLFxuICAgIH0sXG4gIH07XG4gIGluc3RydWN0aW9uRGF0YS5wdXNoKHN0YWtpbmdXaXRoZHJhdyk7XG5cbiAgY29uc3QgbWVtbyA9IGdldE1lbW8oaW5zdHJ1Y3Rpb25zLCBzdGFraW5nV2l0aGRyYXdJbnN0cnVjdGlvbnNJbmRleGVzKTtcbiAgaWYgKG1lbW8pIHtcbiAgICBpbnN0cnVjdGlvbkRhdGEucHVzaChtZW1vKTtcbiAgfVxuXG4gIHJldHVybiBpbnN0cnVjdGlvbkRhdGE7XG59XG5cbi8qKlxuICogR2V0IHRoZSBtZW1vIG9iamVjdCBmcm9tIGluc3RydWN0aW9ucyBpZiBpdCBleGlzdHNcbiAqXG4gKiBAcGFyYW0ge1RyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXX0gaW5zdHJ1Y3Rpb25zIC0gdGhlIGFycmF5IG9mIHN1cHBvcnRlZCBTb2xhbmEgaW5zdHJ1Y3Rpb25zIHRvIGJlIHBhcnNlZFxuICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBudW1iZXI+fSBpbnN0cnVjdGlvbkluZGV4ZXMgLSB0aGUgaW5zdHJ1Y3Rpb25zIGluZGV4ZXMgb2YgdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb25cbiAqIEByZXR1cm5zIHtNZW1vIHwgdW5kZWZpbmVkfSAtIG1lbW8gb2JqZWN0IG9yIHVuZGVmaW5lZFxuICovXG5mdW5jdGlvbiBnZXRNZW1vKGluc3RydWN0aW9uczogVHJhbnNhY3Rpb25JbnN0cnVjdGlvbltdLCBpbnN0cnVjdGlvbkluZGV4ZXM6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4pOiBNZW1vIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgaW5zdHJ1Y3Rpb25zTGVuZ3RoID0gT2JqZWN0LmtleXMoaW5zdHJ1Y3Rpb25JbmRleGVzKS5sZW5ndGg7XG4gIGlmIChpbnN0cnVjdGlvbnMubGVuZ3RoID09PSBpbnN0cnVjdGlvbnNMZW5ndGggJiYgaW5zdHJ1Y3Rpb25zW2luc3RydWN0aW9uSW5kZXhlcy5NZW1vXSkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5NZW1vLFxuICAgICAgcGFyYW1zOiB7IG1lbW86IGluc3RydWN0aW9uc1tpbnN0cnVjdGlvbkluZGV4ZXMuTWVtb10uZGF0YS50b1N0cmluZygpIH0sXG4gICAgfTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { Ed25519KeyPair } from '../baseCoin';
|
|
2
|
+
import { DefaultKeys, KeyPairOptions } from '../baseCoin/iface';
|
|
3
|
+
import { SolanaKeys } from './iface';
|
|
4
|
+
export declare class KeyPair extends Ed25519KeyPair {
|
|
5
|
+
protected keyPair: DefaultKeys;
|
|
6
|
+
protected source?: KeyPairOptions;
|
|
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
|
+
/** @inheritdoc */
|
|
14
|
+
recordKeysFromPrivateKeyInProtocolFormat(prv: string): DefaultKeys;
|
|
15
|
+
/** @inheritdoc */
|
|
16
|
+
recordKeysFromPublicKeyInProtocolFormat(pub: string): DefaultKeys;
|
|
17
|
+
/**
|
|
18
|
+
* Solana default keys format public key as a base58 string and secret key as Uint8Array
|
|
19
|
+
*
|
|
20
|
+
* @param {boolean} raw defines if the prv key is returned in Uint8Array, default is base58
|
|
21
|
+
* @returns {SolanaKeys} The keys in the defined format
|
|
22
|
+
*/
|
|
23
|
+
getKeys(raw?: boolean): SolanaKeys;
|
|
24
|
+
/** @inheritdoc */
|
|
25
|
+
getAddress(): string;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=keyPair.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keyPair.d.ts","sourceRoot":"","sources":["../../../../src/coin/sol/keyPair.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAGrC,qBAAa,OAAQ,SAAQ,cAAc;IACzC,SAAS,CAAC,OAAO,EAAE,WAAW,CAAC;IAC/B,SAAS,CAAC,MAAM,CAAC,EAAE,cAAc,CAAC;IAElC;;;;OAIG;gBACS,MAAM,CAAC,EAAE,cAAc;IAInC,kBAAkB;IAClB,wCAAwC,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW;IAUlE,kBAAkB;IAClB,uCAAuC,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW;IAMjE;;;;;OAKG;IACH,OAAO,CAAC,GAAG,UAAQ,GAAG,UAAU;IAqBhC,kBAAkB;IAClB,UAAU,IAAI,MAAM;CAIrB"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __extends = (this && this.__extends) || (function () {
|
|
3
|
+
var extendStatics = function (d, b) {
|
|
4
|
+
extendStatics = Object.setPrototypeOf ||
|
|
5
|
+
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
6
|
+
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
7
|
+
return extendStatics(d, b);
|
|
8
|
+
};
|
|
9
|
+
return function (d, b) {
|
|
10
|
+
if (typeof b !== "function" && b !== null)
|
|
11
|
+
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
12
|
+
extendStatics(d, b);
|
|
13
|
+
function __() { this.constructor = d; }
|
|
14
|
+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
15
|
+
};
|
|
16
|
+
})();
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.KeyPair = void 0;
|
|
19
|
+
var web3_js_1 = require("@solana/web3.js");
|
|
20
|
+
var baseCoin_1 = require("../baseCoin");
|
|
21
|
+
var utils_1 = require("./utils");
|
|
22
|
+
var KeyPair = /** @class */ (function (_super) {
|
|
23
|
+
__extends(KeyPair, _super);
|
|
24
|
+
/**
|
|
25
|
+
* Public constructor. By default, creates a key pair with a random master seed.
|
|
26
|
+
*
|
|
27
|
+
* @param { KeyPairOptions } source Either a master seed, a private key, or a public key
|
|
28
|
+
*/
|
|
29
|
+
function KeyPair(source) {
|
|
30
|
+
return _super.call(this, source) || this;
|
|
31
|
+
}
|
|
32
|
+
/** @inheritdoc */
|
|
33
|
+
KeyPair.prototype.recordKeysFromPrivateKeyInProtocolFormat = function (prv) {
|
|
34
|
+
var prvKey = utils_1.base58ToUint8Array(prv);
|
|
35
|
+
var keyPair = web3_js_1.Keypair.fromSecretKey(prvKey);
|
|
36
|
+
return {
|
|
37
|
+
pub: keyPair.publicKey.toBuffer().toString('hex'),
|
|
38
|
+
prv: Buffer.from(keyPair.secretKey.slice(0, 32)).toString('hex'),
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
/** @inheritdoc */
|
|
42
|
+
KeyPair.prototype.recordKeysFromPublicKeyInProtocolFormat = function (pub) {
|
|
43
|
+
return {
|
|
44
|
+
pub: Buffer.from(utils_1.base58ToUint8Array(pub)).toString('hex'),
|
|
45
|
+
};
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* Solana default keys format public key as a base58 string and secret key as Uint8Array
|
|
49
|
+
*
|
|
50
|
+
* @param {boolean} raw defines if the prv key is returned in Uint8Array, default is base58
|
|
51
|
+
* @returns {SolanaKeys} The keys in the defined format
|
|
52
|
+
*/
|
|
53
|
+
KeyPair.prototype.getKeys = function (raw) {
|
|
54
|
+
if (raw === void 0) { raw = false; }
|
|
55
|
+
// keys are originally created in hex, but we need base58
|
|
56
|
+
var publicKeyBuffer = Buffer.from(this.keyPair.pub, 'hex');
|
|
57
|
+
var base58Pub = utils_1.Uint8ArrayTobase58(publicKeyBuffer);
|
|
58
|
+
var result = { pub: base58Pub };
|
|
59
|
+
if (!!this.keyPair.prv) {
|
|
60
|
+
var secretKeyBuffer = Buffer.from(this.keyPair.prv, 'hex');
|
|
61
|
+
var solanaSecretKey = new Uint8Array(64);
|
|
62
|
+
solanaSecretKey.set(secretKeyBuffer);
|
|
63
|
+
solanaSecretKey.set(publicKeyBuffer, 32);
|
|
64
|
+
if (raw) {
|
|
65
|
+
result.prv = solanaSecretKey;
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
result.prv = utils_1.Uint8ArrayTobase58(solanaSecretKey);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return result;
|
|
72
|
+
};
|
|
73
|
+
/** @inheritdoc */
|
|
74
|
+
KeyPair.prototype.getAddress = function () {
|
|
75
|
+
var keys = this.getKeys();
|
|
76
|
+
return keys.pub;
|
|
77
|
+
};
|
|
78
|
+
return KeyPair;
|
|
79
|
+
}(baseCoin_1.Ed25519KeyPair));
|
|
80
|
+
exports.KeyPair = KeyPair;
|
|
81
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5UGFpci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb2luL3NvbC9rZXlQYWlyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDJDQUF3RDtBQUN4RCx3Q0FBNkM7QUFHN0MsaUNBQWlFO0FBRWpFO0lBQTZCLDJCQUFjO0lBSXpDOzs7O09BSUc7SUFDSCxpQkFBWSxNQUF1QjtlQUNqQyxrQkFBTSxNQUFNLENBQUM7SUFDZixDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLDBEQUF3QyxHQUF4QyxVQUF5QyxHQUFXO1FBQ2xELElBQU0sTUFBTSxHQUFHLDBCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZDLElBQU0sT0FBTyxHQUFHLGlCQUFVLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRWpELE9BQU87WUFDTCxHQUFHLEVBQUUsT0FBTyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO1lBQ2pELEdBQUcsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7U0FDakUsQ0FBQztJQUNKLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIseURBQXVDLEdBQXZDLFVBQXdDLEdBQVc7UUFDakQsT0FBTztZQUNMLEdBQUcsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLDBCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztTQUMxRCxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gseUJBQU8sR0FBUCxVQUFRLEdBQVc7UUFBWCxvQkFBQSxFQUFBLFdBQVc7UUFDakIseURBQXlEO1FBQ3pELElBQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDN0QsSUFBTSxTQUFTLEdBQUcsMEJBQWtCLENBQUMsZUFBZSxDQUFDLENBQUM7UUFFdEQsSUFBTSxNQUFNLEdBQWUsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLENBQUM7UUFDOUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUU7WUFDdEIsSUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUM3RCxJQUFNLGVBQWUsR0FBRyxJQUFJLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMzQyxlQUFlLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQ3JDLGVBQWUsQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBRXpDLElBQUksR0FBRyxFQUFFO2dCQUNQLE1BQU0sQ0FBQyxHQUFHLEdBQUcsZUFBZSxDQUFDO2FBQzlCO2lCQUFNO2dCQUNMLE1BQU0sQ0FBQyxHQUFHLEdBQUcsMEJBQWtCLENBQUMsZUFBZSxDQUFDLENBQUM7YUFDbEQ7U0FDRjtRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsNEJBQVUsR0FBVjtRQUNFLElBQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUM1QixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUM7SUFDbEIsQ0FBQztJQUNILGNBQUM7QUFBRCxDQUFDLEFBL0RELENBQTZCLHlCQUFjLEdBK0QxQztBQS9EWSwwQkFBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEtleXBhaXIgYXMgU29sS2V5cGFpciB9IGZyb20gJ0Bzb2xhbmEvd2ViMy5qcyc7XG5pbXBvcnQgeyBFZDI1NTE5S2V5UGFpciB9IGZyb20gJy4uL2Jhc2VDb2luJztcbmltcG9ydCB7IERlZmF1bHRLZXlzLCBLZXlQYWlyT3B0aW9ucyB9IGZyb20gJy4uL2Jhc2VDb2luL2lmYWNlJztcbmltcG9ydCB7IFNvbGFuYUtleXMgfSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB7IGJhc2U1OFRvVWludDhBcnJheSwgVWludDhBcnJheVRvYmFzZTU4IH0gZnJvbSAnLi91dGlscyc7XG5cbmV4cG9ydCBjbGFzcyBLZXlQYWlyIGV4dGVuZHMgRWQyNTUxOUtleVBhaXIge1xuICBwcm90ZWN0ZWQga2V5UGFpcjogRGVmYXVsdEtleXM7XG4gIHByb3RlY3RlZCBzb3VyY2U/OiBLZXlQYWlyT3B0aW9ucztcblxuICAvKipcbiAgICogUHVibGljIGNvbnN0cnVjdG9yLiBCeSBkZWZhdWx0LCBjcmVhdGVzIGEga2V5IHBhaXIgd2l0aCBhIHJhbmRvbSBtYXN0ZXIgc2VlZC5cbiAgICpcbiAgICogQHBhcmFtIHsgS2V5UGFpck9wdGlvbnMgfSBzb3VyY2UgRWl0aGVyIGEgbWFzdGVyIHNlZWQsIGEgcHJpdmF0ZSBrZXksIG9yIGEgcHVibGljIGtleVxuICAgKi9cbiAgY29uc3RydWN0b3Ioc291cmNlPzogS2V5UGFpck9wdGlvbnMpIHtcbiAgICBzdXBlcihzb3VyY2UpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHJlY29yZEtleXNGcm9tUHJpdmF0ZUtleUluUHJvdG9jb2xGb3JtYXQocHJ2OiBzdHJpbmcpOiBEZWZhdWx0S2V5cyB7XG4gICAgY29uc3QgcHJ2S2V5ID0gYmFzZTU4VG9VaW50OEFycmF5KHBydik7XG4gICAgY29uc3Qga2V5UGFpciA9IFNvbEtleXBhaXIuZnJvbVNlY3JldEtleShwcnZLZXkpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHB1Yjoga2V5UGFpci5wdWJsaWNLZXkudG9CdWZmZXIoKS50b1N0cmluZygnaGV4JyksXG4gICAgICBwcnY6IEJ1ZmZlci5mcm9tKGtleVBhaXIuc2VjcmV0S2V5LnNsaWNlKDAsIDMyKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgIH07XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcmVjb3JkS2V5c0Zyb21QdWJsaWNLZXlJblByb3RvY29sRm9ybWF0KHB1Yjogc3RyaW5nKTogRGVmYXVsdEtleXMge1xuICAgIHJldHVybiB7XG4gICAgICBwdWI6IEJ1ZmZlci5mcm9tKGJhc2U1OFRvVWludDhBcnJheShwdWIpKS50b1N0cmluZygnaGV4JyksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTb2xhbmEgZGVmYXVsdCBrZXlzIGZvcm1hdCBwdWJsaWMga2V5IGFzIGEgYmFzZTU4IHN0cmluZyBhbmQgc2VjcmV0IGtleSBhcyBVaW50OEFycmF5XG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gcmF3IGRlZmluZXMgaWYgdGhlIHBydiBrZXkgaXMgcmV0dXJuZWQgaW4gVWludDhBcnJheSwgZGVmYXVsdCBpcyBiYXNlNThcbiAgICogQHJldHVybnMge1NvbGFuYUtleXN9IFRoZSBrZXlzIGluIHRoZSBkZWZpbmVkIGZvcm1hdFxuICAgKi9cbiAgZ2V0S2V5cyhyYXcgPSBmYWxzZSk6IFNvbGFuYUtleXMge1xuICAgIC8vIGtleXMgYXJlIG9yaWdpbmFsbHkgY3JlYXRlZCBpbiBoZXgsIGJ1dCB3ZSBuZWVkIGJhc2U1OFxuICAgIGNvbnN0IHB1YmxpY0tleUJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHRoaXMua2V5UGFpci5wdWIsICdoZXgnKTtcbiAgICBjb25zdCBiYXNlNThQdWIgPSBVaW50OEFycmF5VG9iYXNlNTgocHVibGljS2V5QnVmZmVyKTtcblxuICAgIGNvbnN0IHJlc3VsdDogU29sYW5hS2V5cyA9IHsgcHViOiBiYXNlNThQdWIgfTtcbiAgICBpZiAoISF0aGlzLmtleVBhaXIucHJ2KSB7XG4gICAgICBjb25zdCBzZWNyZXRLZXlCdWZmZXIgPSBCdWZmZXIuZnJvbSh0aGlzLmtleVBhaXIucHJ2LCAnaGV4Jyk7XG4gICAgICBjb25zdCBzb2xhbmFTZWNyZXRLZXkgPSBuZXcgVWludDhBcnJheSg2NCk7XG4gICAgICBzb2xhbmFTZWNyZXRLZXkuc2V0KHNlY3JldEtleUJ1ZmZlcik7XG4gICAgICBzb2xhbmFTZWNyZXRLZXkuc2V0KHB1YmxpY0tleUJ1ZmZlciwgMzIpO1xuXG4gICAgICBpZiAocmF3KSB7XG4gICAgICAgIHJlc3VsdC5wcnYgPSBzb2xhbmFTZWNyZXRLZXk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHQucHJ2ID0gVWludDhBcnJheVRvYmFzZTU4KHNvbGFuYVNlY3JldEtleSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgZ2V0QWRkcmVzcygpOiBzdHJpbmcge1xuICAgIGNvbnN0IGtleXMgPSB0aGlzLmdldEtleXMoKTtcbiAgICByZXR1cm4ga2V5cy5wdWI7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { TransactionInstruction } from '@solana/web3.js';
|
|
2
|
+
import { InstructionParams } from './iface';
|
|
3
|
+
/**
|
|
4
|
+
* Construct Solana instructions from instructions params
|
|
5
|
+
*
|
|
6
|
+
* @param {InstructionParams} instructionToBuild - the data containing the instruction params
|
|
7
|
+
* @returns {TransactionInstruction[]} An array containing supported Solana instructions
|
|
8
|
+
*/
|
|
9
|
+
export declare function solInstructionFactory(instructionToBuild: InstructionParams): TransactionInstruction[];
|
|
10
|
+
//# sourceMappingURL=solInstructionFactory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"solInstructionFactory.d.ts","sourceRoot":"","sources":["../../../../src/coin/sol/solInstructionFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,sBAAsB,EAEvB,MAAM,iBAAiB,CAAC;AAIzB,OAAO,EACL,iBAAiB,EAQlB,MAAM,SAAS,CAAC;AAEjB;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,kBAAkB,EAAE,iBAAiB,GAAG,sBAAsB,EAAE,CAmBrG"}
|
|
@@ -0,0 +1,174 @@
|
|
|
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.solInstructionFactory = void 0;
|
|
7
|
+
var web3_js_1 = require("@solana/web3.js");
|
|
8
|
+
var assert_1 = __importDefault(require("assert"));
|
|
9
|
+
var bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
10
|
+
var constants_1 = require("./constants");
|
|
11
|
+
/**
|
|
12
|
+
* Construct Solana instructions from instructions params
|
|
13
|
+
*
|
|
14
|
+
* @param {InstructionParams} instructionToBuild - the data containing the instruction params
|
|
15
|
+
* @returns {TransactionInstruction[]} An array containing supported Solana instructions
|
|
16
|
+
*/
|
|
17
|
+
function solInstructionFactory(instructionToBuild) {
|
|
18
|
+
switch (instructionToBuild.type) {
|
|
19
|
+
case constants_1.InstructionBuilderTypes.NonceAdvance:
|
|
20
|
+
return advanceNonceInstruction(instructionToBuild);
|
|
21
|
+
case constants_1.InstructionBuilderTypes.Memo:
|
|
22
|
+
return memoInstruction(instructionToBuild);
|
|
23
|
+
case constants_1.InstructionBuilderTypes.Transfer:
|
|
24
|
+
return transferInstruction(instructionToBuild);
|
|
25
|
+
case constants_1.InstructionBuilderTypes.CreateNonceAccount:
|
|
26
|
+
return createNonceAccountInstruction(instructionToBuild);
|
|
27
|
+
case constants_1.InstructionBuilderTypes.StakingActivate:
|
|
28
|
+
return stakingInitializeInstruction(instructionToBuild);
|
|
29
|
+
case constants_1.InstructionBuilderTypes.StakingDeactivate:
|
|
30
|
+
return stakingDeactivateInstruction(instructionToBuild);
|
|
31
|
+
case constants_1.InstructionBuilderTypes.StakingWithdraw:
|
|
32
|
+
return stakingWithdrawInstruction(instructionToBuild);
|
|
33
|
+
default:
|
|
34
|
+
throw new Error("Invalid instruction type or not supported");
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
exports.solInstructionFactory = solInstructionFactory;
|
|
38
|
+
/**
|
|
39
|
+
* Construct Advance Nonce Solana instructions
|
|
40
|
+
*
|
|
41
|
+
* @param {Nonce} data - the data to build the instruction
|
|
42
|
+
* @returns {TransactionInstruction[]} An array containing Advance Nonce Solana instruction
|
|
43
|
+
*/
|
|
44
|
+
function advanceNonceInstruction(data) {
|
|
45
|
+
var _a = data.params, authWalletAddress = _a.authWalletAddress, walletNonceAddress = _a.walletNonceAddress;
|
|
46
|
+
assert_1.default(authWalletAddress, 'Missing authWalletAddress param');
|
|
47
|
+
assert_1.default(walletNonceAddress, 'Missing walletNonceAddress param');
|
|
48
|
+
var nonceInstruction = web3_js_1.SystemProgram.nonceAdvance({
|
|
49
|
+
noncePubkey: new web3_js_1.PublicKey(walletNonceAddress),
|
|
50
|
+
authorizedPubkey: new web3_js_1.PublicKey(authWalletAddress),
|
|
51
|
+
});
|
|
52
|
+
return [nonceInstruction];
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Construct Memo Solana instructions
|
|
56
|
+
*
|
|
57
|
+
* @param {Memo} data - the data to build the instruction
|
|
58
|
+
* @returns {TransactionInstruction[]} An array containing Memo Solana instruction
|
|
59
|
+
*/
|
|
60
|
+
function memoInstruction(data) {
|
|
61
|
+
var memo = data.params.memo;
|
|
62
|
+
assert_1.default(memo, 'Missing memo param');
|
|
63
|
+
var memoInstruction = new web3_js_1.TransactionInstruction({
|
|
64
|
+
keys: [],
|
|
65
|
+
programId: new web3_js_1.PublicKey(constants_1.MEMO_PROGRAM_PK),
|
|
66
|
+
data: Buffer.from(memo),
|
|
67
|
+
});
|
|
68
|
+
return [memoInstruction];
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Construct Transfer Solana instructions
|
|
72
|
+
*
|
|
73
|
+
* @param {Transfer} data - the data to build the instruction
|
|
74
|
+
* @returns {TransactionInstruction[]} An array containing Transfer Solana instruction
|
|
75
|
+
*/
|
|
76
|
+
function transferInstruction(data) {
|
|
77
|
+
var _a = data.params, fromAddress = _a.fromAddress, toAddress = _a.toAddress, amount = _a.amount;
|
|
78
|
+
assert_1.default(fromAddress, 'Missing fromAddress param');
|
|
79
|
+
assert_1.default(toAddress, 'Missing toAddress param');
|
|
80
|
+
assert_1.default(amount, 'Missing toAddress param');
|
|
81
|
+
var transferInstruction = web3_js_1.SystemProgram.transfer({
|
|
82
|
+
fromPubkey: new web3_js_1.PublicKey(fromAddress),
|
|
83
|
+
toPubkey: new web3_js_1.PublicKey(toAddress),
|
|
84
|
+
lamports: new bignumber_js_1.default(amount).toNumber(),
|
|
85
|
+
});
|
|
86
|
+
return [transferInstruction];
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Construct Create and Initialize Nonce Solana instructions
|
|
90
|
+
*
|
|
91
|
+
* @param {WalletInit} data - the data to build the instruction
|
|
92
|
+
* @returns {TransactionInstruction[]} An array containing Create and Initialize Nonce Solana instruction
|
|
93
|
+
*/
|
|
94
|
+
function createNonceAccountInstruction(data) {
|
|
95
|
+
var _a = data.params, fromAddress = _a.fromAddress, nonceAddress = _a.nonceAddress, authAddress = _a.authAddress, amount = _a.amount;
|
|
96
|
+
assert_1.default(fromAddress, 'Missing fromAddress param');
|
|
97
|
+
assert_1.default(nonceAddress, 'Missing nonceAddress param');
|
|
98
|
+
assert_1.default(authAddress, 'Missing authAddress param');
|
|
99
|
+
assert_1.default(amount, 'Missing amount param');
|
|
100
|
+
var nonceAccountInstruction = web3_js_1.SystemProgram.createNonceAccount({
|
|
101
|
+
fromPubkey: new web3_js_1.PublicKey(fromAddress),
|
|
102
|
+
noncePubkey: new web3_js_1.PublicKey(nonceAddress),
|
|
103
|
+
authorizedPubkey: new web3_js_1.PublicKey(authAddress),
|
|
104
|
+
lamports: new bignumber_js_1.default(amount).toNumber(),
|
|
105
|
+
});
|
|
106
|
+
return nonceAccountInstruction.instructions;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Construct Create Staking Account and Delegate Solana instructions
|
|
110
|
+
*
|
|
111
|
+
* @param {StakingActivate} data - the data to build the instruction
|
|
112
|
+
* @returns {TransactionInstruction[]} An array containing Create Staking Account and Delegate Solana instructions
|
|
113
|
+
*/
|
|
114
|
+
function stakingInitializeInstruction(data) {
|
|
115
|
+
var _a = data.params, fromAddress = _a.fromAddress, stakingAddress = _a.stakingAddress, amount = _a.amount, validator = _a.validator;
|
|
116
|
+
assert_1.default(fromAddress, 'Missing fromAddress param');
|
|
117
|
+
assert_1.default(stakingAddress, 'Missing stakingAddress param');
|
|
118
|
+
assert_1.default(amount, 'Missing amount param');
|
|
119
|
+
assert_1.default(validator, 'Missing validator param');
|
|
120
|
+
var fromPubkey = new web3_js_1.PublicKey(fromAddress);
|
|
121
|
+
var stakePubkey = new web3_js_1.PublicKey(stakingAddress);
|
|
122
|
+
var tx = new web3_js_1.Transaction();
|
|
123
|
+
var walletInitStaking = web3_js_1.StakeProgram.createAccount({
|
|
124
|
+
fromPubkey: fromPubkey,
|
|
125
|
+
stakePubkey: stakePubkey,
|
|
126
|
+
authorized: new web3_js_1.Authorized(fromPubkey, fromPubkey),
|
|
127
|
+
lockup: new web3_js_1.Lockup(0, 0, fromPubkey),
|
|
128
|
+
lamports: new bignumber_js_1.default(amount).toNumber(),
|
|
129
|
+
});
|
|
130
|
+
tx.add(walletInitStaking);
|
|
131
|
+
var delegateStaking = web3_js_1.StakeProgram.delegate({
|
|
132
|
+
stakePubkey: new web3_js_1.PublicKey(stakingAddress),
|
|
133
|
+
authorizedPubkey: new web3_js_1.PublicKey(fromAddress),
|
|
134
|
+
votePubkey: new web3_js_1.PublicKey(validator),
|
|
135
|
+
});
|
|
136
|
+
tx.add(delegateStaking);
|
|
137
|
+
return tx.instructions;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Construct staking deactivate Solana instructions
|
|
141
|
+
*
|
|
142
|
+
* @param {StakingDeactivate} data - the data to build the instruction
|
|
143
|
+
* @returns {TransactionInstruction[]} An array containing staking deactivate instruction
|
|
144
|
+
*/
|
|
145
|
+
function stakingDeactivateInstruction(data) {
|
|
146
|
+
var _a = data.params, fromAddress = _a.fromAddress, stakingAddress = _a.stakingAddress;
|
|
147
|
+
assert_1.default(fromAddress, 'Missing fromAddress param');
|
|
148
|
+
assert_1.default(stakingAddress, 'Missing stakingAddress param');
|
|
149
|
+
var deactivateStaking = web3_js_1.StakeProgram.deactivate({
|
|
150
|
+
stakePubkey: new web3_js_1.PublicKey(stakingAddress),
|
|
151
|
+
authorizedPubkey: new web3_js_1.PublicKey(fromAddress),
|
|
152
|
+
});
|
|
153
|
+
return deactivateStaking.instructions;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Construct Staking Withdraw Solana instructions
|
|
157
|
+
*
|
|
158
|
+
* @param {StakingWithdraw} data - the data to build the instruction
|
|
159
|
+
* @returns {TransactionInstruction[]} An array containing Staking Withdraw Solana instructions
|
|
160
|
+
*/
|
|
161
|
+
function stakingWithdrawInstruction(data) {
|
|
162
|
+
var _a = data.params, fromAddress = _a.fromAddress, stakingAddress = _a.stakingAddress, amount = _a.amount;
|
|
163
|
+
assert_1.default(fromAddress, 'Missing fromAddress param');
|
|
164
|
+
assert_1.default(stakingAddress, 'Missing stakingAddress param');
|
|
165
|
+
assert_1.default(amount, 'Missing amount param');
|
|
166
|
+
var withdrawStaking = web3_js_1.StakeProgram.withdraw({
|
|
167
|
+
stakePubkey: new web3_js_1.PublicKey(stakingAddress),
|
|
168
|
+
authorizedPubkey: new web3_js_1.PublicKey(fromAddress),
|
|
169
|
+
toPubkey: new web3_js_1.PublicKey(fromAddress),
|
|
170
|
+
lamports: new bignumber_js_1.default(amount).toNumber(),
|
|
171
|
+
});
|
|
172
|
+
return withdrawStaking.instructions;
|
|
173
|
+
}
|
|
174
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29sSW5zdHJ1Y3Rpb25GYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvaW4vc29sL3NvbEluc3RydWN0aW9uRmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSwyQ0FReUI7QUFDekIsa0RBQTRCO0FBQzVCLDhEQUFxQztBQUNyQyx5Q0FBdUU7QUFZdkU7Ozs7O0dBS0c7QUFDSCxTQUFnQixxQkFBcUIsQ0FBQyxrQkFBcUM7SUFDekUsUUFBUSxrQkFBa0IsQ0FBQyxJQUFJLEVBQUU7UUFDL0IsS0FBSyxtQ0FBdUIsQ0FBQyxZQUFZO1lBQ3ZDLE9BQU8sdUJBQXVCLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUNyRCxLQUFLLG1DQUF1QixDQUFDLElBQUk7WUFDL0IsT0FBTyxlQUFlLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUM3QyxLQUFLLG1DQUF1QixDQUFDLFFBQVE7WUFDbkMsT0FBTyxtQkFBbUIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ2pELEtBQUssbUNBQXVCLENBQUMsa0JBQWtCO1lBQzdDLE9BQU8sNkJBQTZCLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUMzRCxLQUFLLG1DQUF1QixDQUFDLGVBQWU7WUFDMUMsT0FBTyw0QkFBNEIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQzFELEtBQUssbUNBQXVCLENBQUMsaUJBQWlCO1lBQzVDLE9BQU8sNEJBQTRCLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUMxRCxLQUFLLG1DQUF1QixDQUFDLGVBQWU7WUFDMUMsT0FBTywwQkFBMEIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3hEO1lBQ0UsTUFBTSxJQUFJLEtBQUssQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDO0tBQ2hFO0FBQ0gsQ0FBQztBQW5CRCxzREFtQkM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQVMsdUJBQXVCLENBQUMsSUFBVztJQUV4QyxJQUFBLEtBQ0UsSUFB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LFFBQVEsRUFBRSxJQUFJLHNCQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxFQUFFO0tBQzNDLENBQUMsQ0FBQztJQUVILE9BQU8sZUFBZSxDQUFDLFlBQVksQ0FBQztBQUN0QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQXV0aG9yaXplZCxcbiAgTG9ja3VwLFxuICBQdWJsaWNLZXksXG4gIFN0YWtlUHJvZ3JhbSxcbiAgU3lzdGVtUHJvZ3JhbSxcbiAgVHJhbnNhY3Rpb25JbnN0cnVjdGlvbixcbiAgVHJhbnNhY3Rpb24sXG59IGZyb20gJ0Bzb2xhbmEvd2ViMy5qcyc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgQmlnTnVtYmVyIGZyb20gJ2JpZ251bWJlci5qcyc7XG5pbXBvcnQgeyBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcywgTUVNT19QUk9HUkFNX1BLIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHtcbiAgSW5zdHJ1Y3Rpb25QYXJhbXMsXG4gIE1lbW8sXG4gIE5vbmNlLFxuICBTdGFraW5nQWN0aXZhdGUsXG4gIFN0YWtpbmdEZWFjdGl2YXRlLFxuICBTdGFraW5nV2l0aGRyYXcsXG4gIFRyYW5zZmVyLFxuICBXYWxsZXRJbml0LFxufSBmcm9tICcuL2lmYWNlJztcblxuLyoqXG4gKiBDb25zdHJ1Y3QgU29sYW5hIGluc3RydWN0aW9ucyBmcm9tIGluc3RydWN0aW9ucyBwYXJhbXNcbiAqXG4gKiBAcGFyYW0ge0luc3RydWN0aW9uUGFyYW1zfSBpbnN0cnVjdGlvblRvQnVpbGQgLSB0aGUgZGF0YSBjb250YWluaW5nIHRoZSBpbnN0cnVjdGlvbiBwYXJhbXNcbiAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkluc3RydWN0aW9uW119IEFuIGFycmF5IGNvbnRhaW5pbmcgc3VwcG9ydGVkIFNvbGFuYSBpbnN0cnVjdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNvbEluc3RydWN0aW9uRmFjdG9yeShpbnN0cnVjdGlvblRvQnVpbGQ6IEluc3RydWN0aW9uUGFyYW1zKTogVHJhbnNhY3Rpb25JbnN0cnVjdGlvbltdIHtcbiAgc3dpdGNoIChpbnN0cnVjdGlvblRvQnVpbGQudHlwZSkge1xuICAgIGNhc2UgSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuTm9uY2VBZHZhbmNlOlxuICAgICAgcmV0dXJuIGFkdmFuY2VOb25jZUluc3RydWN0aW9uKGluc3RydWN0aW9uVG9CdWlsZCk7XG4gICAgY2FzZSBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5NZW1vOlxuICAgICAgcmV0dXJuIG1lbW9JbnN0cnVjdGlvbihpbnN0cnVjdGlvblRvQnVpbGQpO1xuICAgIGNhc2UgSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuVHJhbnNmZXI6XG4gICAgICByZXR1cm4gdHJhbnNmZXJJbnN0cnVjdGlvbihpbnN0cnVjdGlvblRvQnVpbGQpO1xuICAgIGNhc2UgSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuQ3JlYXRlTm9uY2VBY2NvdW50OlxuICAgICAgcmV0dXJuIGNyZWF0ZU5vbmNlQWNjb3VudEluc3RydWN0aW9uKGluc3RydWN0aW9uVG9CdWlsZCk7XG4gICAgY2FzZSBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5TdGFraW5nQWN0aXZhdGU6XG4gICAgICByZXR1cm4gc3Rha2luZ0luaXRpYWxpemVJbnN0cnVjdGlvbihpbnN0cnVjdGlvblRvQnVpbGQpO1xuICAgIGNhc2UgSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuU3Rha2luZ0RlYWN0aXZhdGU6XG4gICAgICByZXR1cm4gc3Rha2luZ0RlYWN0aXZhdGVJbnN0cnVjdGlvbihpbnN0cnVjdGlvblRvQnVpbGQpO1xuICAgIGNhc2UgSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuU3Rha2luZ1dpdGhkcmF3OlxuICAgICAgcmV0dXJuIHN0YWtpbmdXaXRoZHJhd0luc3RydWN0aW9uKGluc3RydWN0aW9uVG9CdWlsZCk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBpbnN0cnVjdGlvbiB0eXBlIG9yIG5vdCBzdXBwb3J0ZWRgKTtcbiAgfVxufVxuXG4vKipcbiAqIENvbnN0cnVjdCBBZHZhbmNlIE5vbmNlIFNvbGFuYSBpbnN0cnVjdGlvbnNcbiAqXG4gKiBAcGFyYW0ge05vbmNlfSBkYXRhIC0gdGhlIGRhdGEgdG8gYnVpbGQgdGhlIGluc3RydWN0aW9uXG4gKiBAcmV0dXJucyB7VHJhbnNhY3Rpb25JbnN0cnVjdGlvbltdfSBBbiBhcnJheSBjb250YWluaW5nIEFkdmFuY2UgTm9uY2UgU29sYW5hIGluc3RydWN0aW9uXG4gKi9cbmZ1bmN0aW9uIGFkdmFuY2VOb25jZUluc3RydWN0aW9uKGRhdGE6IE5vbmNlKTogVHJhbnNhY3Rpb25JbnN0cnVjdGlvbltdIHtcbiAgY29uc3Qge1xuICAgIHBhcmFtczogeyBhdXRoV2FsbGV0QWRkcmVzcywgd2FsbGV0Tm9uY2VBZGRyZXNzIH0sXG4gIH0gPSBkYXRhO1xuICBhc3NlcnQoYXV0aFdhbGxldEFkZHJlc3MsICdNaXNzaW5nIGF1dGhXYWxsZXRBZGRyZXNzIHBhcmFtJyk7XG4gIGFzc2VydCh3YWxsZXROb25jZUFkZHJlc3MsICdNaXNzaW5nIHdhbGxldE5vbmNlQWRkcmVzcyBwYXJhbScpO1xuICBjb25zdCBub25jZUluc3RydWN0aW9uID0gU3lzdGVtUHJvZ3JhbS5ub25jZUFkdmFuY2Uoe1xuICAgIG5vbmNlUHVia2V5OiBuZXcgUHVibGljS2V5KHdhbGxldE5vbmNlQWRkcmVzcyksXG4gICAgYXV0aG9yaXplZFB1YmtleTogbmV3IFB1YmxpY0tleShhdXRoV2FsbGV0QWRkcmVzcyksXG4gIH0pO1xuICByZXR1cm4gW25vbmNlSW5zdHJ1Y3Rpb25dO1xufVxuXG4vKipcbiAqIENvbnN0cnVjdCBNZW1vIFNvbGFuYSBpbnN0cnVjdGlvbnNcbiAqXG4gKiBAcGFyYW0ge01lbW99IGRhdGEgLSB0aGUgZGF0YSB0byBidWlsZCB0aGUgaW5zdHJ1Y3Rpb25cbiAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkluc3RydWN0aW9uW119IEFuIGFycmF5IGNvbnRhaW5pbmcgTWVtbyBTb2xhbmEgaW5zdHJ1Y3Rpb25cbiAqL1xuZnVuY3Rpb24gbWVtb0luc3RydWN0aW9uKGRhdGE6IE1lbW8pOiBUcmFuc2FjdGlvbkluc3RydWN0aW9uW10ge1xuICBjb25zdCB7XG4gICAgcGFyYW1zOiB7IG1lbW8gfSxcbiAgfSA9IGRhdGE7XG4gIGFzc2VydChtZW1vLCAnTWlzc2luZyBtZW1vIHBhcmFtJyk7XG4gIGNvbnN0IG1lbW9JbnN0cnVjdGlvbiA9IG5ldyBUcmFuc2FjdGlvbkluc3RydWN0aW9uKHtcbiAgICBrZXlzOiBbXSxcbiAgICBwcm9ncmFtSWQ6IG5ldyBQdWJsaWNLZXkoTUVNT19QUk9HUkFNX1BLKSxcbiAgICBkYXRhOiBCdWZmZXIuZnJvbShtZW1vKSxcbiAgfSk7XG4gIHJldHVybiBbbWVtb0luc3RydWN0aW9uXTtcbn1cblxuLyoqXG4gKiBDb25zdHJ1Y3QgVHJhbnNmZXIgU29sYW5hIGluc3RydWN0aW9uc1xuICpcbiAqIEBwYXJhbSB7VHJhbnNmZXJ9IGRhdGEgLSB0aGUgZGF0YSB0byBidWlsZCB0aGUgaW5zdHJ1Y3Rpb25cbiAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkluc3RydWN0aW9uW119IEFuIGFycmF5IGNvbnRhaW5pbmcgVHJhbnNmZXIgU29sYW5hIGluc3RydWN0aW9uXG4gKi9cbmZ1bmN0aW9uIHRyYW5zZmVySW5zdHJ1Y3Rpb24oZGF0YTogVHJhbnNmZXIpOiBUcmFuc2FjdGlvbkluc3RydWN0aW9uW10ge1xuICBjb25zdCB7XG4gICAgcGFyYW1zOiB7IGZyb21BZGRyZXNzLCB0b0FkZHJlc3MsIGFtb3VudCB9LFxuICB9ID0gZGF0YTtcbiAgYXNzZXJ0KGZyb21BZGRyZXNzLCAnTWlzc2luZyBmcm9tQWRkcmVzcyBwYXJhbScpO1xuICBhc3NlcnQodG9BZGRyZXNzLCAnTWlzc2luZyB0b0FkZHJlc3MgcGFyYW0nKTtcbiAgYXNzZXJ0KGFtb3VudCwgJ01pc3NpbmcgdG9BZGRyZXNzIHBhcmFtJyk7XG4gIGNvbnN0IHRyYW5zZmVySW5zdHJ1Y3Rpb24gPSBTeXN0ZW1Qcm9ncmFtLnRyYW5zZmVyKHtcbiAgICBmcm9tUHVia2V5OiBuZXcgUHVibGljS2V5KGZyb21BZGRyZXNzKSxcbiAgICB0b1B1YmtleTogbmV3IFB1YmxpY0tleSh0b0FkZHJlc3MpLFxuICAgIGxhbXBvcnRzOiBuZXcgQmlnTnVtYmVyKGFtb3VudCkudG9OdW1iZXIoKSxcbiAgfSk7XG4gIHJldHVybiBbdHJhbnNmZXJJbnN0cnVjdGlvbl07XG59XG5cbi8qKlxuICogQ29uc3RydWN0IENyZWF0ZSBhbmQgSW5pdGlhbGl6ZSBOb25jZSBTb2xhbmEgaW5zdHJ1Y3Rpb25zXG4gKlxuICogQHBhcmFtIHtXYWxsZXRJbml0fSBkYXRhIC0gdGhlIGRhdGEgdG8gYnVpbGQgdGhlIGluc3RydWN0aW9uXG4gKiBAcmV0dXJucyB7VHJhbnNhY3Rpb25JbnN0cnVjdGlvbltdfSBBbiBhcnJheSBjb250YWluaW5nIENyZWF0ZSBhbmQgSW5pdGlhbGl6ZSBOb25jZSBTb2xhbmEgaW5zdHJ1Y3Rpb25cbiAqL1xuZnVuY3Rpb24gY3JlYXRlTm9uY2VBY2NvdW50SW5zdHJ1Y3Rpb24oZGF0YTogV2FsbGV0SW5pdCk6IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXSB7XG4gIGNvbnN0IHtcbiAgICBwYXJhbXM6IHsgZnJvbUFkZHJlc3MsIG5vbmNlQWRkcmVzcywgYXV0aEFkZHJlc3MsIGFtb3VudCB9LFxuICB9ID0gZGF0YTtcbiAgYXNzZXJ0KGZyb21BZGRyZXNzLCAnTWlzc2luZyBmcm9tQWRkcmVzcyBwYXJhbScpO1xuICBhc3NlcnQobm9uY2VBZGRyZXNzLCAnTWlzc2luZyBub25jZUFkZHJlc3MgcGFyYW0nKTtcbiAgYXNzZXJ0KGF1dGhBZGRyZXNzLCAnTWlzc2luZyBhdXRoQWRkcmVzcyBwYXJhbScpO1xuICBhc3NlcnQoYW1vdW50LCAnTWlzc2luZyBhbW91bnQgcGFyYW0nKTtcbiAgY29uc3Qgbm9uY2VBY2NvdW50SW5zdHJ1Y3Rpb24gPSBTeXN0ZW1Qcm9ncmFtLmNyZWF0ZU5vbmNlQWNjb3VudCh7XG4gICAgZnJvbVB1YmtleTogbmV3IFB1YmxpY0tleShmcm9tQWRkcmVzcyksXG4gICAgbm9uY2VQdWJrZXk6IG5ldyBQdWJsaWNLZXkobm9uY2VBZGRyZXNzKSxcbiAgICBhdXRob3JpemVkUHVia2V5OiBuZXcgUHVibGljS2V5KGF1dGhBZGRyZXNzKSxcbiAgICBsYW1wb3J0czogbmV3IEJpZ051bWJlcihhbW91bnQpLnRvTnVtYmVyKCksXG4gIH0pO1xuICByZXR1cm4gbm9uY2VBY2NvdW50SW5zdHJ1Y3Rpb24uaW5zdHJ1Y3Rpb25zO1xufVxuXG4vKipcbiAqIENvbnN0cnVjdCBDcmVhdGUgU3Rha2luZyBBY2NvdW50IGFuZCBEZWxlZ2F0ZSBTb2xhbmEgaW5zdHJ1Y3Rpb25zXG4gKlxuICogQHBhcmFtIHtTdGFraW5nQWN0aXZhdGV9IGRhdGEgLSB0aGUgZGF0YSB0byBidWlsZCB0aGUgaW5zdHJ1Y3Rpb25cbiAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkluc3RydWN0aW9uW119IEFuIGFycmF5IGNvbnRhaW5pbmcgQ3JlYXRlIFN0YWtpbmcgQWNjb3VudCBhbmQgRGVsZWdhdGUgU29sYW5hIGluc3RydWN0aW9uc1xuICovXG5mdW5jdGlvbiBzdGFraW5nSW5pdGlhbGl6ZUluc3RydWN0aW9uKGRhdGE6IFN0YWtpbmdBY3RpdmF0ZSk6IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXSB7XG4gIGNvbnN0IHtcbiAgICBwYXJhbXM6IHsgZnJvbUFkZHJlc3MsIHN0YWtpbmdBZGRyZXNzLCBhbW91bnQsIHZhbGlkYXRvciB9LFxuICB9ID0gZGF0YTtcbiAgYXNzZXJ0KGZyb21BZGRyZXNzLCAnTWlzc2luZyBmcm9tQWRkcmVzcyBwYXJhbScpO1xuICBhc3NlcnQoc3Rha2luZ0FkZHJlc3MsICdNaXNzaW5nIHN0YWtpbmdBZGRyZXNzIHBhcmFtJyk7XG4gIGFzc2VydChhbW91bnQsICdNaXNzaW5nIGFtb3VudCBwYXJhbScpO1xuICBhc3NlcnQodmFsaWRhdG9yLCAnTWlzc2luZyB2YWxpZGF0b3IgcGFyYW0nKTtcblxuICBjb25zdCBmcm9tUHVia2V5ID0gbmV3IFB1YmxpY0tleShmcm9tQWRkcmVzcyk7XG4gIGNvbnN0IHN0YWtlUHVia2V5ID0gbmV3IFB1YmxpY0tleShzdGFraW5nQWRkcmVzcyk7XG5cbiAgY29uc3QgdHggPSBuZXcgVHJhbnNhY3Rpb24oKTtcblxuICBjb25zdCB3YWxsZXRJbml0U3Rha2luZyA9IFN0YWtlUHJvZ3JhbS5jcmVhdGVBY2NvdW50KHtcbiAgICBmcm9tUHVia2V5LFxuICAgIHN0YWtlUHVia2V5LFxuICAgIGF1dGhvcml6ZWQ6IG5ldyBBdXRob3JpemVkKGZyb21QdWJrZXksIGZyb21QdWJrZXkpLCAvLyBzdGFrZXIgYW5kIHdpdGhkcmF3ZXJcbiAgICBsb2NrdXA6IG5ldyBMb2NrdXAoMCwgMCwgZnJvbVB1YmtleSksIC8vIExvb2t1cCBzZXRzIHRoZSBtaW5pbXVtIGVwb2NoIHRvIHdpdGhkcmF3LCBieSBkZWZhdWx0IGlzIDAsMCB3aGljaCBtZWFucyB0aGVyZSdzIG5vIG1pbmltdW0gbGltaXRcbiAgICBsYW1wb3J0czogbmV3IEJpZ051bWJlcihhbW91bnQpLnRvTnVtYmVyKCksXG4gIH0pO1xuICB0eC5hZGQod2FsbGV0SW5pdFN0YWtpbmcpO1xuXG4gIGNvbnN0IGRlbGVnYXRlU3Rha2luZyA9IFN0YWtlUHJvZ3JhbS5kZWxlZ2F0ZSh7XG4gICAgc3Rha2VQdWJrZXk6IG5ldyBQdWJsaWNLZXkoc3Rha2luZ0FkZHJlc3MpLFxuICAgIGF1dGhvcml6ZWRQdWJrZXk6IG5ldyBQdWJsaWNLZXkoZnJvbUFkZHJlc3MpLFxuICAgIHZvdGVQdWJrZXk6IG5ldyBQdWJsaWNLZXkodmFsaWRhdG9yKSxcbiAgfSk7XG4gIHR4LmFkZChkZWxlZ2F0ZVN0YWtpbmcpO1xuXG4gIHJldHVybiB0eC5pbnN0cnVjdGlvbnM7XG59XG5cbi8qKlxuICogQ29uc3RydWN0IHN0YWtpbmcgZGVhY3RpdmF0ZSBTb2xhbmEgaW5zdHJ1Y3Rpb25zXG4gKlxuICogQHBhcmFtIHtTdGFraW5nRGVhY3RpdmF0ZX0gZGF0YSAtIHRoZSBkYXRhIHRvIGJ1aWxkIHRoZSBpbnN0cnVjdGlvblxuICogQHJldHVybnMge1RyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXX0gQW4gYXJyYXkgY29udGFpbmluZyBzdGFraW5nIGRlYWN0aXZhdGUgaW5zdHJ1Y3Rpb25cbiAqL1xuZnVuY3Rpb24gc3Rha2luZ0RlYWN0aXZhdGVJbnN0cnVjdGlvbihkYXRhOiBTdGFraW5nRGVhY3RpdmF0ZSk6IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXSB7XG4gIGNvbnN0IHtcbiAgICBwYXJhbXM6IHsgZnJvbUFkZHJlc3MsIHN0YWtpbmdBZGRyZXNzIH0sXG4gIH0gPSBkYXRhO1xuICBhc3NlcnQoZnJvbUFkZHJlc3MsICdNaXNzaW5nIGZyb21BZGRyZXNzIHBhcmFtJyk7XG4gIGFzc2VydChzdGFraW5nQWRkcmVzcywgJ01pc3Npbmcgc3Rha2luZ0FkZHJlc3MgcGFyYW0nKTtcblxuICBjb25zdCBkZWFjdGl2YXRlU3Rha2luZyA9IFN0YWtlUHJvZ3JhbS5kZWFjdGl2YXRlKHtcbiAgICBzdGFrZVB1YmtleTogbmV3IFB1YmxpY0tleShzdGFraW5nQWRkcmVzcyksXG4gICAgYXV0aG9yaXplZFB1YmtleTogbmV3IFB1YmxpY0tleShmcm9tQWRkcmVzcyksXG4gIH0pO1xuXG4gIHJldHVybiBkZWFjdGl2YXRlU3Rha2luZy5pbnN0cnVjdGlvbnM7XG59XG5cbi8qKlxuICogQ29uc3RydWN0IFN0YWtpbmcgV2l0aGRyYXcgU29sYW5hIGluc3RydWN0aW9uc1xuICpcbiAqIEBwYXJhbSB7U3Rha2luZ1dpdGhkcmF3fSBkYXRhIC0gdGhlIGRhdGEgdG8gYnVpbGQgdGhlIGluc3RydWN0aW9uXG4gKiBAcmV0dXJucyB7VHJhbnNhY3Rpb25JbnN0cnVjdGlvbltdfSBBbiBhcnJheSBjb250YWluaW5nIFN0YWtpbmcgV2l0aGRyYXcgIFNvbGFuYSBpbnN0cnVjdGlvbnNcbiAqL1xuZnVuY3Rpb24gc3Rha2luZ1dpdGhkcmF3SW5zdHJ1Y3Rpb24oZGF0YTogU3Rha2luZ1dpdGhkcmF3KTogVHJhbnNhY3Rpb25JbnN0cnVjdGlvbltdIHtcbiAgY29uc3Qge1xuICAgIHBhcmFtczogeyBmcm9tQWRkcmVzcywgc3Rha2luZ0FkZHJlc3MsIGFtb3VudCB9LFxuICB9ID0gZGF0YTtcbiAgYXNzZXJ0KGZyb21BZGRyZXNzLCAnTWlzc2luZyBmcm9tQWRkcmVzcyBwYXJhbScpO1xuICBhc3NlcnQoc3Rha2luZ0FkZHJlc3MsICdNaXNzaW5nIHN0YWtpbmdBZGRyZXNzIHBhcmFtJyk7XG4gIGFzc2VydChhbW91bnQsICdNaXNzaW5nIGFtb3VudCBwYXJhbScpO1xuXG4gIGNvbnN0IHdpdGhkcmF3U3Rha2luZyA9IFN0YWtlUHJvZ3JhbS53aXRoZHJhdyh7XG4gICAgc3Rha2VQdWJrZXk6IG5ldyBQdWJsaWNLZXkoc3Rha2luZ0FkZHJlc3MpLFxuICAgIGF1dGhvcml6ZWRQdWJrZXk6IG5ldyBQdWJsaWNLZXkoZnJvbUFkZHJlc3MpLFxuICAgIHRvUHVia2V5OiBuZXcgUHVibGljS2V5KGZyb21BZGRyZXNzKSxcbiAgICBsYW1wb3J0czogbmV3IEJpZ051bWJlcihhbW91bnQpLnRvTnVtYmVyKCksXG4gIH0pO1xuXG4gIHJldHVybiB3aXRoZHJhd1N0YWtpbmcuaW5zdHJ1Y3Rpb25zO1xufVxuIl19
|