@bitgo/sdk-coin-cspr 1.0.1-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintignore +4 -0
- package/.mocharc.yml +8 -0
- package/CHANGELOG.md +8 -0
- package/LICENSE +191 -0
- package/README.md +39 -0
- package/dist/src/cspr.d.ts +101 -0
- package/dist/src/cspr.d.ts.map +1 -0
- package/dist/src/cspr.js +293 -0
- package/dist/src/index.d.ts +4 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +29 -0
- package/dist/src/lib/constants.d.ts +19 -0
- package/dist/src/lib/constants.d.ts.map +1 -0
- package/dist/src/lib/constants.js +28 -0
- package/dist/src/lib/delegateBuilder.d.ts +49 -0
- package/dist/src/lib/delegateBuilder.d.ts.map +1 -0
- package/dist/src/lib/delegateBuilder.js +111 -0
- package/dist/src/lib/ifaces.d.ts +69 -0
- package/dist/src/lib/ifaces.d.ts.map +1 -0
- package/dist/src/lib/ifaces.js +3 -0
- package/dist/src/lib/index.d.ts +6 -0
- package/dist/src/lib/index.d.ts.map +1 -0
- package/dist/src/lib/index.js +31 -0
- package/dist/src/lib/keyPair.d.ts +18 -0
- package/dist/src/lib/keyPair.d.ts.map +1 -0
- package/dist/src/lib/keyPair.js +75 -0
- package/dist/src/lib/transaction.d.ts +55 -0
- package/dist/src/lib/transaction.d.ts.map +1 -0
- package/dist/src/lib/transaction.js +227 -0
- package/dist/src/lib/transactionBuilder.d.ts +124 -0
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder.js +312 -0
- package/dist/src/lib/transactionBuilderFactory.d.ts +46 -0
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilderFactory.js +98 -0
- package/dist/src/lib/transferBuilder.d.ts +39 -0
- package/dist/src/lib/transferBuilder.d.ts.map +1 -0
- package/dist/src/lib/transferBuilder.js +106 -0
- package/dist/src/lib/undelegateBuilder.d.ts +49 -0
- package/dist/src/lib/undelegateBuilder.d.ts.map +1 -0
- package/dist/src/lib/undelegateBuilder.js +111 -0
- package/dist/src/lib/utils.d.ts +188 -0
- package/dist/src/lib/utils.d.ts.map +1 -0
- package/dist/src/lib/utils.js +477 -0
- package/dist/src/lib/walletInitializationBuilder.d.ts +27 -0
- package/dist/src/lib/walletInitializationBuilder.d.ts.map +1 -0
- package/dist/src/lib/walletInitializationBuilder.js +95 -0
- package/dist/src/tcspr.d.ts +11 -0
- package/dist/src/tcspr.d.ts.map +1 -0
- package/dist/src/tcspr.js +24 -0
- package/package.json +62 -0
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import BigNumber from 'bignumber.js';
|
|
2
|
+
import { BaseCoin as CoinConfig } from '@bitgo/statics';
|
|
3
|
+
import { BaseAddress, BaseKey, BaseTransactionBuilder } from '@bitgo/sdk-core';
|
|
4
|
+
import { Transaction } from './transaction';
|
|
5
|
+
import { KeyPair } from './keyPair';
|
|
6
|
+
import { Fee, CasperModuleBytesTransaction, CasperTransferTransaction, CasperDelegateTransaction, SignatureData } from './ifaces';
|
|
7
|
+
export declare const DEFAULT_M = 3;
|
|
8
|
+
export declare const DEFAULT_N = 2;
|
|
9
|
+
export declare abstract class TransactionBuilder extends BaseTransactionBuilder {
|
|
10
|
+
protected _source: BaseAddress;
|
|
11
|
+
protected _fee: Fee;
|
|
12
|
+
private _transaction;
|
|
13
|
+
protected _session: CasperTransferTransaction | CasperModuleBytesTransaction | CasperDelegateTransaction;
|
|
14
|
+
protected _expiration: number;
|
|
15
|
+
protected _multiSignerKeyPairs: KeyPair[];
|
|
16
|
+
protected _signatures: SignatureData[];
|
|
17
|
+
protected _chainName: string;
|
|
18
|
+
constructor(_coinConfig: Readonly<CoinConfig>);
|
|
19
|
+
/** @inheritdoc */
|
|
20
|
+
protected buildImplementation(): Promise<Transaction>;
|
|
21
|
+
/** @inheritdoc */
|
|
22
|
+
protected fromImplementation(rawTransaction: string): Transaction;
|
|
23
|
+
/** @inheritdoc */
|
|
24
|
+
protected signImplementation(key: BaseKey): Transaction;
|
|
25
|
+
/**
|
|
26
|
+
* Initialize the transaction builder fields using the decoded transaction data
|
|
27
|
+
*
|
|
28
|
+
* @param {Transaction} tx the transaction data
|
|
29
|
+
*/
|
|
30
|
+
initBuilder(tx: Transaction): void;
|
|
31
|
+
/**
|
|
32
|
+
* Set the transaction fees
|
|
33
|
+
*
|
|
34
|
+
* @param {BaseFee} fee The maximum gas to pay
|
|
35
|
+
* @returns {TransactionBuilder} This transaction builder
|
|
36
|
+
*/
|
|
37
|
+
fee(fee: Fee): this;
|
|
38
|
+
/**
|
|
39
|
+
* Set the transaction source
|
|
40
|
+
*
|
|
41
|
+
* @param {BaseAddress} address The source account
|
|
42
|
+
* @returns {TransactionBuilder} This transaction builder
|
|
43
|
+
*/
|
|
44
|
+
source(address: BaseAddress): this;
|
|
45
|
+
/**
|
|
46
|
+
* Set the transaction expirationTime
|
|
47
|
+
*
|
|
48
|
+
* @param {string} expirationTime The transaction expirationTime
|
|
49
|
+
* @returns {TransactionBuilder} This transaction builder
|
|
50
|
+
*/
|
|
51
|
+
expiration(expirationTime: number): this;
|
|
52
|
+
/**
|
|
53
|
+
* Set an external transaction signature
|
|
54
|
+
*
|
|
55
|
+
* @param {string} signature Hex encoded signature string
|
|
56
|
+
* @param {KeyPair} keyPair The public key keypair that was used to create the signature
|
|
57
|
+
* @returns {TransactionBuilder} This transaction builder
|
|
58
|
+
*/
|
|
59
|
+
signature(signature: string, keyPair: KeyPair): this;
|
|
60
|
+
nodeChainName(chainName: string): this;
|
|
61
|
+
/** @inheritdoc */
|
|
62
|
+
validateAddress(address: BaseAddress): void;
|
|
63
|
+
/** @inheritdoc */
|
|
64
|
+
validateKey(key: BaseKey): void;
|
|
65
|
+
/** @inheritdoc */
|
|
66
|
+
validateRawTransaction(rawTransaction: string): void;
|
|
67
|
+
/** @inheritdoc */
|
|
68
|
+
validateTransaction(transaction?: Transaction): void;
|
|
69
|
+
/** @inheritdoc */
|
|
70
|
+
validateValue(value: BigNumber): void;
|
|
71
|
+
/**
|
|
72
|
+
* Validates that the mandatory fields are defined
|
|
73
|
+
*/
|
|
74
|
+
validateMandatoryFields(): void;
|
|
75
|
+
/**
|
|
76
|
+
* Validates that the fee field is defined
|
|
77
|
+
*/
|
|
78
|
+
private validateFee;
|
|
79
|
+
/**
|
|
80
|
+
* Validates that the source field is defined
|
|
81
|
+
*/
|
|
82
|
+
private validateSource;
|
|
83
|
+
/**
|
|
84
|
+
* Validates that the given key is not already in this._multiSignerKeyPairs
|
|
85
|
+
*
|
|
86
|
+
* @param {BaseKey} key - The key to check
|
|
87
|
+
*/
|
|
88
|
+
private checkDuplicatedKeys;
|
|
89
|
+
/** @inheritdoc */
|
|
90
|
+
protected get transaction(): Transaction;
|
|
91
|
+
/** @inheritdoc */
|
|
92
|
+
protected set transaction(transaction: Transaction);
|
|
93
|
+
/**
|
|
94
|
+
* Get the chain name for the coin environment
|
|
95
|
+
*/
|
|
96
|
+
get chainName(): string;
|
|
97
|
+
/**
|
|
98
|
+
* Generate a DeployParams instance with the transaction data
|
|
99
|
+
*
|
|
100
|
+
* @returns {DeployUtil.DeployParams}
|
|
101
|
+
*/
|
|
102
|
+
private getDeployParams;
|
|
103
|
+
/**
|
|
104
|
+
* Generate the session for the Deploy according to the transactionType.
|
|
105
|
+
*
|
|
106
|
+
* @returns {DeployUtil.ExecutableDeployItem}
|
|
107
|
+
*/
|
|
108
|
+
private getSession;
|
|
109
|
+
/**
|
|
110
|
+
* Checks whether the transaction has the owner signature
|
|
111
|
+
*
|
|
112
|
+
* @param {string} pub - public key of the signer
|
|
113
|
+
* @returns {boolean} true if the pub key already signed th transaction
|
|
114
|
+
* @private
|
|
115
|
+
*/
|
|
116
|
+
private isTransactionSignedByPub;
|
|
117
|
+
/**
|
|
118
|
+
* Add signatures to the transaction
|
|
119
|
+
*
|
|
120
|
+
* @private
|
|
121
|
+
*/
|
|
122
|
+
private processSigning;
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=transactionBuilder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transactionBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAGxD,OAAO,EACL,WAAW,EACX,OAAO,EACP,sBAAsB,EAMvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EACL,GAAG,EACH,4BAA4B,EAC5B,yBAAyB,EACzB,yBAAyB,EACzB,aAAa,EACd,MAAM,UAAU,CAAC;AAIlB,eAAO,MAAM,SAAS,IAAI,CAAC;AAC3B,eAAO,MAAM,SAAS,IAAI,CAAC;AAC3B,8BAAsB,kBAAmB,SAAQ,sBAAsB;IACrE,SAAS,CAAC,OAAO,EAAE,WAAW,CAAC;IAC/B,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC;IACpB,OAAO,CAAC,YAAY,CAAc;IAClC,SAAS,CAAC,QAAQ,EAAE,yBAAyB,GAAG,4BAA4B,GAAG,yBAAyB,CAAC;IACzG,SAAS,CAAC,WAAW,EAAE,MAAM,CAAC;IAC9B,SAAS,CAAC,oBAAoB,EAAE,OAAO,EAAE,CAAC;IAC1C,SAAS,CAAC,WAAW,EAAE,aAAa,EAAE,CAAC;IACvC,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC;gBAEjB,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAS7C,kBAAkB;cACF,mBAAmB,IAAI,OAAO,CAAC,WAAW,CAAC;IAwB3D,kBAAkB;IAClB,SAAS,CAAC,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,WAAW;IAQjE,kBAAkB;IAClB,SAAS,CAAC,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,WAAW;IAUvD;;;;OAIG;IACH,WAAW,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI;IAalC;;;;;OAKG;IACH,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI;IAMnB;;;;;OAKG;IACH,MAAM,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAMlC;;;;;OAKG;IACH,UAAU,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IAUxC;;;;;;OAMG;IACH,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAcpD,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAQtC,kBAAkB;IAClB,eAAe,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAM3C,kBAAkB;IAClB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAM/B,kBAAkB;IAClB,sBAAsB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IAWpD,kBAAkB;IAClB,mBAAmB,CAAC,WAAW,CAAC,EAAE,WAAW,GAAG,IAAI;IAIpD,kBAAkB;IAClB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAMrC;;OAEG;IACH,uBAAuB,IAAI,IAAI;IAK/B;;OAEG;IACH,OAAO,CAAC,WAAW;IAcnB;;OAEG;IACH,OAAO,CAAC,cAAc;IAOtB;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAqB3B,kBAAkB;IAClB,SAAS,KAAK,WAAW,IAAI,WAAW,CAEvC;IAED,kBAAkB;IAClB,SAAS,KAAK,WAAW,CAAC,WAAW,EAAE,WAAW,EAEjD;IAED;;OAEG;IACH,IAAW,SAAS,IAAI,MAAM,CAE7B;IAID;;;;OAIG;IACH,OAAO,CAAC,eAAe;IAUvB;;;;OAIG;IACH,OAAO,CAAC,UAAU;IA2BlB;;;;;;OAMG;IACH,OAAO,CAAC,wBAAwB;IAShC;;;;OAIG;IACH,OAAO,CAAC,cAAc;CAevB"}
|
|
@@ -0,0 +1,312 @@
|
|
|
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.TransactionBuilder = exports.DEFAULT_N = exports.DEFAULT_M = void 0;
|
|
7
|
+
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
8
|
+
const casper_js_sdk_1 = require("casper-js-sdk");
|
|
9
|
+
const lodash_1 = __importDefault(require("lodash"));
|
|
10
|
+
const sdk_core_1 = require("@bitgo/sdk-core");
|
|
11
|
+
const transaction_1 = require("./transaction");
|
|
12
|
+
const keyPair_1 = require("./keyPair");
|
|
13
|
+
const utils_1 = require("./utils");
|
|
14
|
+
const constants_1 = require("./constants");
|
|
15
|
+
exports.DEFAULT_M = 3;
|
|
16
|
+
exports.DEFAULT_N = 2;
|
|
17
|
+
class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
|
|
18
|
+
constructor(_coinConfig) {
|
|
19
|
+
super(_coinConfig);
|
|
20
|
+
this.transaction = new transaction_1.Transaction(_coinConfig);
|
|
21
|
+
this._multiSignerKeyPairs = [];
|
|
22
|
+
this._signatures = [];
|
|
23
|
+
this._chainName = this.coinName() === 'cspr' ? constants_1.DEFAULT_CHAIN_NAMES.mainnet : constants_1.DEFAULT_CHAIN_NAMES.testnet;
|
|
24
|
+
}
|
|
25
|
+
// region Base Builder
|
|
26
|
+
/** @inheritdoc */
|
|
27
|
+
async buildImplementation() {
|
|
28
|
+
const deployParams = this.getDeployParams();
|
|
29
|
+
const session = this.getSession();
|
|
30
|
+
const payment = casper_js_sdk_1.DeployUtil.standardPayment(lodash_1.default.parseInt(this._fee.gasLimit));
|
|
31
|
+
let cTransaction = this.transaction.casperTx || casper_js_sdk_1.DeployUtil.makeDeploy(deployParams, session, payment);
|
|
32
|
+
// Cannot add arguments to an already signed deploy.
|
|
33
|
+
if (cTransaction.approvals.length === 0) {
|
|
34
|
+
this._session.extraArguments.forEach((extraArgument, extraArgumentName) => {
|
|
35
|
+
if (!cTransaction.session.getArgByName(extraArgumentName)) {
|
|
36
|
+
cTransaction = casper_js_sdk_1.DeployUtil.addArgToDeploy(cTransaction, extraArgumentName, extraArgument);
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
this.transaction.casperTx = cTransaction;
|
|
41
|
+
this.processSigning();
|
|
42
|
+
return this.transaction;
|
|
43
|
+
}
|
|
44
|
+
/** @inheritdoc */
|
|
45
|
+
fromImplementation(rawTransaction) {
|
|
46
|
+
const tx = new transaction_1.Transaction(this._coinConfig);
|
|
47
|
+
const jsonTransaction = JSON.parse(rawTransaction);
|
|
48
|
+
tx.casperTx = casper_js_sdk_1.DeployUtil.deployFromJson(jsonTransaction).unwrap();
|
|
49
|
+
this.initBuilder(tx);
|
|
50
|
+
return this.transaction;
|
|
51
|
+
}
|
|
52
|
+
/** @inheritdoc */
|
|
53
|
+
signImplementation(key) {
|
|
54
|
+
this.checkDuplicatedKeys(key);
|
|
55
|
+
const signer = new keyPair_1.KeyPair({ prv: key.key });
|
|
56
|
+
// Signing the transaction is an operation that relies on all the data being set,
|
|
57
|
+
// so we set the source here and leave the actual signing for the build step
|
|
58
|
+
this._multiSignerKeyPairs.push(signer);
|
|
59
|
+
return this.transaction;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Initialize the transaction builder fields using the decoded transaction data
|
|
63
|
+
*
|
|
64
|
+
* @param {Transaction} tx the transaction data
|
|
65
|
+
*/
|
|
66
|
+
initBuilder(tx) {
|
|
67
|
+
this.transaction = tx;
|
|
68
|
+
this.transaction.loadPreviousSignatures();
|
|
69
|
+
const txData = tx.toJson();
|
|
70
|
+
this.fee(txData.fee);
|
|
71
|
+
this.source({ address: txData.from });
|
|
72
|
+
this.expiration(txData.expiration || constants_1.TRANSACTION_EXPIRATION);
|
|
73
|
+
}
|
|
74
|
+
// endregion
|
|
75
|
+
// region Common builder methods
|
|
76
|
+
/**
|
|
77
|
+
* Set the transaction fees
|
|
78
|
+
*
|
|
79
|
+
* @param {BaseFee} fee The maximum gas to pay
|
|
80
|
+
* @returns {TransactionBuilder} This transaction builder
|
|
81
|
+
*/
|
|
82
|
+
fee(fee) {
|
|
83
|
+
this.validateValue(new bignumber_js_1.default(fee.gasLimit));
|
|
84
|
+
this._fee = fee;
|
|
85
|
+
return this;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Set the transaction source
|
|
89
|
+
*
|
|
90
|
+
* @param {BaseAddress} address The source account
|
|
91
|
+
* @returns {TransactionBuilder} This transaction builder
|
|
92
|
+
*/
|
|
93
|
+
source(address) {
|
|
94
|
+
this.validateAddress(address);
|
|
95
|
+
this._source = address;
|
|
96
|
+
return this;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Set the transaction expirationTime
|
|
100
|
+
*
|
|
101
|
+
* @param {string} expirationTime The transaction expirationTime
|
|
102
|
+
* @returns {TransactionBuilder} This transaction builder
|
|
103
|
+
*/
|
|
104
|
+
expiration(expirationTime) {
|
|
105
|
+
const transactionExpiration = new bignumber_js_1.default(expirationTime);
|
|
106
|
+
if (transactionExpiration.isNaN() || transactionExpiration.isGreaterThan(constants_1.TRANSACTION_EXPIRATION)) {
|
|
107
|
+
throw new sdk_core_1.BuildTransactionError('Invalid transaction expiration');
|
|
108
|
+
}
|
|
109
|
+
this.validateValue(transactionExpiration);
|
|
110
|
+
this._expiration = transactionExpiration.toNumber();
|
|
111
|
+
return this;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Set an external transaction signature
|
|
115
|
+
*
|
|
116
|
+
* @param {string} signature Hex encoded signature string
|
|
117
|
+
* @param {KeyPair} keyPair The public key keypair that was used to create the signature
|
|
118
|
+
* @returns {TransactionBuilder} This transaction builder
|
|
119
|
+
*/
|
|
120
|
+
signature(signature, keyPair) {
|
|
121
|
+
// if we already have a signature for this key pair, just update it
|
|
122
|
+
for (const oldSignature of this._signatures) {
|
|
123
|
+
if (oldSignature.keyPair.getKeys().pub === keyPair.getKeys().pub) {
|
|
124
|
+
oldSignature.signature = signature;
|
|
125
|
+
return this;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
// otherwise add the new signature
|
|
129
|
+
this._signatures.push({ signature, keyPair });
|
|
130
|
+
return this;
|
|
131
|
+
}
|
|
132
|
+
nodeChainName(chainName) {
|
|
133
|
+
this._chainName = chainName;
|
|
134
|
+
return this;
|
|
135
|
+
}
|
|
136
|
+
// endregion
|
|
137
|
+
// region Validators
|
|
138
|
+
/** @inheritdoc */
|
|
139
|
+
validateAddress(address) {
|
|
140
|
+
if (!utils_1.isValidAddress(address.address)) {
|
|
141
|
+
throw new sdk_core_1.BuildTransactionError('Invalid address ' + address.address);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
/** @inheritdoc */
|
|
145
|
+
validateKey(key) {
|
|
146
|
+
if (!new keyPair_1.KeyPair({ prv: key.key })) {
|
|
147
|
+
throw new sdk_core_1.BuildTransactionError('Invalid key');
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
/** @inheritdoc */
|
|
151
|
+
validateRawTransaction(rawTransaction) {
|
|
152
|
+
if (!rawTransaction) {
|
|
153
|
+
throw new sdk_core_1.InvalidTransactionError('Raw transaction is empty');
|
|
154
|
+
}
|
|
155
|
+
try {
|
|
156
|
+
casper_js_sdk_1.DeployUtil.deployFromJson(JSON.parse(rawTransaction));
|
|
157
|
+
}
|
|
158
|
+
catch (e) {
|
|
159
|
+
throw new sdk_core_1.ParseTransactionError('There was an error parsing the JSON string');
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
/** @inheritdoc */
|
|
163
|
+
validateTransaction(transaction) {
|
|
164
|
+
this.validateMandatoryFields();
|
|
165
|
+
}
|
|
166
|
+
/** @inheritdoc */
|
|
167
|
+
validateValue(value) {
|
|
168
|
+
if (value.isLessThan(0)) {
|
|
169
|
+
throw new sdk_core_1.BuildTransactionError('Value cannot be less than zero');
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Validates that the mandatory fields are defined
|
|
174
|
+
*/
|
|
175
|
+
validateMandatoryFields() {
|
|
176
|
+
this.validateFee();
|
|
177
|
+
this.validateSource();
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Validates that the fee field is defined
|
|
181
|
+
*/
|
|
182
|
+
validateFee() {
|
|
183
|
+
if (this._fee === undefined) {
|
|
184
|
+
throw new sdk_core_1.BuildTransactionError('Invalid transaction: missing fee');
|
|
185
|
+
}
|
|
186
|
+
if (!this._fee.gasLimit) {
|
|
187
|
+
throw new sdk_core_1.BuildTransactionError('Invalid transaction: missing gas limit');
|
|
188
|
+
}
|
|
189
|
+
try {
|
|
190
|
+
this.validateValue(new bignumber_js_1.default(this._fee.gasLimit));
|
|
191
|
+
}
|
|
192
|
+
catch (e) {
|
|
193
|
+
throw new sdk_core_1.BuildTransactionError('Invalid gas limit');
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Validates that the source field is defined
|
|
198
|
+
*/
|
|
199
|
+
validateSource() {
|
|
200
|
+
if (this._source === undefined) {
|
|
201
|
+
throw new sdk_core_1.BuildTransactionError('Invalid transaction: missing source');
|
|
202
|
+
}
|
|
203
|
+
this.validateAddress(this._source);
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Validates that the given key is not already in this._multiSignerKeyPairs
|
|
207
|
+
*
|
|
208
|
+
* @param {BaseKey} key - The key to check
|
|
209
|
+
*/
|
|
210
|
+
checkDuplicatedKeys(key) {
|
|
211
|
+
this._multiSignerKeyPairs.forEach((_sourceKeyPair) => {
|
|
212
|
+
if (_sourceKeyPair.getKeys().prv === key.key) {
|
|
213
|
+
throw new sdk_core_1.SigningError('Repeated sign: ' + key.key);
|
|
214
|
+
}
|
|
215
|
+
// Try to get extended keys in order to validate them
|
|
216
|
+
let xprv;
|
|
217
|
+
try {
|
|
218
|
+
xprv = _sourceKeyPair.getExtendedKeys().xprv;
|
|
219
|
+
}
|
|
220
|
+
catch (err) {
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
223
|
+
if (xprv && xprv === key.key) {
|
|
224
|
+
throw new sdk_core_1.SigningError('Repeated sign: ' + key.key);
|
|
225
|
+
}
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
// endregion
|
|
229
|
+
// region Getters and Setters
|
|
230
|
+
/** @inheritdoc */
|
|
231
|
+
get transaction() {
|
|
232
|
+
return this._transaction;
|
|
233
|
+
}
|
|
234
|
+
/** @inheritdoc */
|
|
235
|
+
set transaction(transaction) {
|
|
236
|
+
this._transaction = transaction;
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Get the chain name for the coin environment
|
|
240
|
+
*/
|
|
241
|
+
get chainName() {
|
|
242
|
+
return this._chainName;
|
|
243
|
+
}
|
|
244
|
+
// endregion
|
|
245
|
+
// region auxiliaryMethods
|
|
246
|
+
/**
|
|
247
|
+
* Generate a DeployParams instance with the transaction data
|
|
248
|
+
*
|
|
249
|
+
* @returns {DeployUtil.DeployParams}
|
|
250
|
+
*/
|
|
251
|
+
getDeployParams() {
|
|
252
|
+
const gasPrice = this._fee.gasPrice ? lodash_1.default.parseInt(this._fee.gasPrice) : undefined;
|
|
253
|
+
return new casper_js_sdk_1.DeployUtil.DeployParams(casper_js_sdk_1.CLPublicKey.fromHex(this._source.address), this._chainName, gasPrice, this._expiration || constants_1.TRANSACTION_EXPIRATION);
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Generate the session for the Deploy according to the transactionType.
|
|
257
|
+
*
|
|
258
|
+
* @returns {DeployUtil.ExecutableDeployItem}
|
|
259
|
+
*/
|
|
260
|
+
getSession() {
|
|
261
|
+
let session;
|
|
262
|
+
switch (this.transaction.type) {
|
|
263
|
+
case sdk_core_1.TransactionType.Send:
|
|
264
|
+
const transferSession = this._session;
|
|
265
|
+
session = casper_js_sdk_1.DeployUtil.ExecutableDeployItem.newTransferWithOptionalTransferId(transferSession.amount, transferSession.target, undefined, transferSession.id);
|
|
266
|
+
break;
|
|
267
|
+
case sdk_core_1.TransactionType.WalletInitialization:
|
|
268
|
+
case sdk_core_1.TransactionType.StakingLock:
|
|
269
|
+
case sdk_core_1.TransactionType.StakingUnlock:
|
|
270
|
+
const moduleBytesSession = this._session;
|
|
271
|
+
session = casper_js_sdk_1.DeployUtil.ExecutableDeployItem.newModuleBytes(moduleBytesSession.moduleBytes, moduleBytesSession.args);
|
|
272
|
+
break;
|
|
273
|
+
default:
|
|
274
|
+
throw new sdk_core_1.BuildTransactionError('Transaction Type error');
|
|
275
|
+
}
|
|
276
|
+
return session;
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Checks whether the transaction has the owner signature
|
|
280
|
+
*
|
|
281
|
+
* @param {string} pub - public key of the signer
|
|
282
|
+
* @returns {boolean} true if the pub key already signed th transaction
|
|
283
|
+
* @private
|
|
284
|
+
*/
|
|
285
|
+
isTransactionSignedByPub(pub) {
|
|
286
|
+
return (lodash_1.default.findIndex(this.transaction.casperTx.approvals, (approval) => {
|
|
287
|
+
const approvalSigner = utils_1.removeAlgoPrefixFromHexValue(approval.signer);
|
|
288
|
+
return approvalSigner === pub;
|
|
289
|
+
}) !== -1);
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* Add signatures to the transaction
|
|
293
|
+
*
|
|
294
|
+
* @private
|
|
295
|
+
*/
|
|
296
|
+
processSigning() {
|
|
297
|
+
for (const keyPair of this._multiSignerKeyPairs) {
|
|
298
|
+
// Add signature if it's not already in the deploy
|
|
299
|
+
if (!this.isTransactionSignedByPub(keyPair.getKeys().pub)) {
|
|
300
|
+
this.transaction.sign(keyPair);
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
for (const { signature, keyPair } of this._signatures) {
|
|
304
|
+
// Add signature if it's not already in the deploy
|
|
305
|
+
if (!this.isTransactionSignedByPub(keyPair.getKeys().pub)) {
|
|
306
|
+
this.transaction.addSignature(signature, keyPair);
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
exports.TransactionBuilder = TransactionBuilder;
|
|
312
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsZ0VBQXFDO0FBRXJDLGlEQUFxRTtBQUNyRSxvREFBdUI7QUFDdkIsOENBU3lCO0FBQ3pCLCtDQUE0QztBQUM1Qyx1Q0FBb0M7QUFRcEMsbUNBQXVFO0FBQ3ZFLDJDQUEwRTtBQUU3RCxRQUFBLFNBQVMsR0FBRyxDQUFDLENBQUM7QUFDZCxRQUFBLFNBQVMsR0FBRyxDQUFDLENBQUM7QUFDM0IsTUFBc0Isa0JBQW1CLFNBQVEsaUNBQXNCO0lBVXJFLFlBQVksV0FBaUM7UUFDM0MsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ25CLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSx5QkFBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxvQkFBb0IsR0FBRyxFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQywrQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLCtCQUFtQixDQUFDLE9BQU8sQ0FBQztJQUMzRyxDQUFDO0lBRUQsc0JBQXNCO0lBQ3RCLGtCQUFrQjtJQUNSLEtBQUssQ0FBQyxtQkFBbUI7UUFDakMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzVDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUVsQyxNQUFNLE9BQU8sR0FBRywwQkFBVSxDQUFDLGVBQWUsQ0FBQyxnQkFBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFFM0Us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QU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUN6RCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUNoQztTQUNGO1FBQ0QsS0FBSyxNQUFNLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDckQsa0RBQWtEO1lBQ2xELElBQUksQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUN6RCxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7YUFDbkQ7U0FDRjtJQUNILENBQUM7Q0FFRjtBQWhXRCxnREFnV0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQmlnTnVtYmVyIGZyb20gJ2JpZ251bWJlci5qcyc7XG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuaW1wb3J0IHsgRGVwbG95VXRpbCwgQ0xQdWJsaWNLZXkgYXMgUHVibGljS2V5IH0gZnJvbSAnY2FzcGVyLWpzLXNkayc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtcbiAgQmFzZUFkZHJlc3MsXG4gIEJhc2VLZXksXG4gIEJhc2VUcmFuc2FjdGlvbkJ1aWxkZXIsXG4gIEJ1aWxkVHJhbnNhY3Rpb25FcnJvcixcbiAgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IsXG4gIFBhcnNlVHJhbnNhY3Rpb25FcnJvcixcbiAgU2lnbmluZ0Vycm9yLFxuICBUcmFuc2FjdGlvblR5cGUsXG59IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgS2V5UGFpciB9IGZyb20gJy4va2V5UGFpcic7XG5pbXBvcnQge1xuICBGZWUsXG4gIENhc3Blck1vZHVsZUJ5dGVzVHJhbnNhY3Rpb24sXG4gIENhc3BlclRyYW5zZmVyVHJhbnNhY3Rpb24sXG4gIENhc3BlckRlbGVnYXRlVHJhbnNhY3Rpb24sXG4gIFNpZ25hdHVyZURhdGEsXG59IGZyb20gJy4vaWZhY2VzJztcbmltcG9ydCB7IGlzVmFsaWRBZGRyZXNzLCByZW1vdmVBbGdvUHJlZml4RnJvbUhleFZhbHVlIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBERUZBVUxUX0NIQUlOX05BTUVTLCBUUkFOU0FDVElPTl9FWFBJUkFUSU9OIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9NID0gMztcbmV4cG9ydCBjb25zdCBERUZBVUxUX04gPSAyO1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFRyYW5zYWN0aW9uQnVpbGRlciBleHRlbmRzIEJhc2VUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICBwcm90ZWN0ZWQgX3NvdXJjZTogQmFzZUFkZHJlc3M7XG4gIHByb3RlY3RlZCBfZmVlOiBGZWU7XG4gIHByaXZhdGUgX3RyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbjtcbiAgcHJvdGVjdGVkIF9zZXNzaW9uOiBDYXNwZXJUcmFuc2ZlclRyYW5zYWN0aW9uIHwgQ2FzcGVyTW9kdWxlQnl0ZXNUcmFuc2FjdGlvbiB8IENhc3BlckRlbGVnYXRlVHJhbnNhY3Rpb247XG4gIHByb3RlY3RlZCBfZXhwaXJhdGlvbjogbnVtYmVyO1xuICBwcm90ZWN0ZWQgX211bHRpU2lnbmVyS2V5UGFpcnM6IEtleVBhaXJbXTtcbiAgcHJvdGVjdGVkIF9zaWduYXR1cmVzOiBTaWduYXR1cmVEYXRhW107XG4gIHByb3RlY3RlZCBfY2hhaW5OYW1lOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICAgIHRoaXMudHJhbnNhY3Rpb24gPSBuZXcgVHJhbnNhY3Rpb24oX2NvaW5Db25maWcpO1xuICAgIHRoaXMuX211bHRpU2lnbmVyS2V5UGFpcnMgPSBbXTtcbiAgICB0aGlzLl9zaWduYXR1cmVzID0gW107XG4gICAgdGhpcy5fY2hhaW5OYW1lID0gdGhpcy5jb2luTmFtZSgpID09PSAnY3NwcicgPyBERUZBVUxUX0NIQUlOX05BTUVTLm1haW5uZXQgOiBERUZBVUxUX0NIQUlOX05BTUVTLnRlc3RuZXQ7XG4gIH1cblxuICAvLyByZWdpb24gQmFzZSBCdWlsZGVyXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgYnVpbGRJbXBsZW1lbnRhdGlvbigpOiBQcm9taXNlPFRyYW5zYWN0aW9uPiB7XG4gICAgY29uc3QgZGVwbG95UGFyYW1zID0gdGhpcy5nZXREZXBsb3lQYXJhbXMoKTtcbiAgICBjb25zdCBzZXNzaW9uID0gdGhpcy5nZXRTZXNzaW9uKCk7XG5cbiAgICBjb25zdCBwYXltZW50ID0gRGVwbG95VXRpbC5zdGFuZGFyZFBheW1lbnQoXy5wYXJzZUludCh0aGlzLl9mZWUuZ2FzTGltaXQpKTtcblxuICAgIGxldCBjVHJhbnNhY3Rpb24gPSB0aGlzLnRyYW5zYWN0aW9uLmNhc3BlclR4IHx8IERlcGxveVV0aWwubWFrZURlcGxveShkZXBsb3lQYXJhbXMsIHNlc3Npb24sIHBheW1lbnQpO1xuXG4gICAgLy8gQ2Fubm90IGFkZCBhcmd1bWVudHMgdG8gYW4gYWxyZWFkeSBzaWduZWQgZGVwbG95LlxuICAgIGlmIChjVHJhbnNhY3Rpb24uYXBwcm92YWxzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5fc2Vzc2lvbi5leHRyYUFyZ3VtZW50cy5mb3JFYWNoKChleHRyYUFyZ3VtZW50LCBleHRyYUFyZ3VtZW50TmFtZSkgPT4ge1xuICAgICAgICBpZiAoIWNUcmFuc2FjdGlvbi5zZXNzaW9uLmdldEFyZ0J5TmFtZShleHRyYUFyZ3VtZW50TmFtZSkpIHtcbiAgICAgICAgICBjVHJhbnNhY3Rpb24gPSBEZXBsb3lVdGlsLmFkZEFyZ1RvRGVwbG95KGNUcmFuc2FjdGlvbiwgZXh0cmFBcmd1bWVudE5hbWUsIGV4dHJhQXJndW1lbnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLnRyYW5zYWN0aW9uLmNhc3BlclR4ID0gY1RyYW5zYWN0aW9uO1xuXG4gICAgdGhpcy5wcm9jZXNzU2lnbmluZygpO1xuXG4gICAgcmV0dXJuIHRoaXMudHJhbnNhY3Rpb247XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGZyb21JbXBsZW1lbnRhdGlvbihyYXdUcmFuc2FjdGlvbjogc3RyaW5nKTogVHJhbnNhY3Rpb24ge1xuICAgIGNvbnN0IHR4ID0gbmV3IFRyYW5zYWN0aW9uKHRoaXMuX2NvaW5Db25maWcpO1xuICAgIGNvbnN0IGpzb25UcmFuc2FjdGlvbiA9IEpTT04ucGFyc2UocmF3VHJhbnNhY3Rpb24pO1xuICAgIHR4LmNhc3BlclR4ID0gRGVwbG95VXRpbC5kZXBsb3lGcm9tSnNvbihqc29uVHJhbnNhY3Rpb24pLnVud3JhcCgpO1xuICAgIHRoaXMuaW5pdEJ1aWxkZXIodHgpO1xuICAgIHJldHVybiB0aGlzLnRyYW5zYWN0aW9uO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBzaWduSW1wbGVtZW50YXRpb24oa2V5OiBCYXNlS2V5KTogVHJhbnNhY3Rpb24ge1xuICAgIHRoaXMuY2hlY2tEdXBsaWNhdGVkS2V5cyhrZXkpO1xuICAgIGNvbnN0IHNpZ25lciA9IG5ldyBLZXlQYWlyKHsgcHJ2OiBrZXkua2V5IH0pO1xuXG4gICAgLy8gU2lnbmluZyB0aGUgdHJhbnNhY3Rpb24gaXMgYW4gb3BlcmF0aW9uIHRoYXQgcmVsaWVzIG9uIGFsbCB0aGUgZGF0YSBiZWluZyBzZXQsXG4gICAgLy8gc28gd2Ugc2V0IHRoZSBzb3VyY2UgaGVyZSBhbmQgbGVhdmUgdGhlIGFjdHVhbCBzaWduaW5nIGZvciB0aGUgYnVpbGQgc3RlcFxuICAgIHRoaXMuX211bHRpU2lnbmVyS2V5UGFpcnMucHVzaChzaWduZXIpO1xuICAgIHJldHVybiB0aGlzLnRyYW5zYWN0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgdGhlIHRyYW5zYWN0aW9uIGJ1aWxkZXIgZmllbGRzIHVzaW5nIHRoZSBkZWNvZGVkIHRyYW5zYWN0aW9uIGRhdGFcbiAgICpcbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvbn0gdHggdGhlIHRyYW5zYWN0aW9uIGRhdGFcbiAgICovXG4gIGluaXRCdWlsZGVyKHR4OiBUcmFuc2FjdGlvbik6IHZvaWQge1xuICAgIHRoaXMudHJhbnNhY3Rpb24gPSB0eDtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLmxvYWRQcmV2aW91c1NpZ25hdHVyZXMoKTtcbiAgICBjb25zdCB0eERhdGEgPSB0eC50b0pzb24oKTtcbiAgICB0aGlzLmZlZSh0eERhdGEuZmVlKTtcbiAgICB0aGlzLnNvdXJjZSh7IGFkZHJlc3M6IHR4RGF0YS5mcm9tIH0pO1xuICAgIHRoaXMuZXhwaXJhdGlvbih0eERhdGEuZXhwaXJhdGlvbiB8fCBUUkFOU0FDVElPTl9FWFBJUkFUSU9OKTtcbiAgfVxuXG4gIC8vIGVuZHJlZ2lvblxuXG4gIC8vIHJlZ2lvbiBDb21tb24gYnVpbGRlciBtZXRob2RzXG5cbiAgLyoqXG4gICAqIFNldCB0aGUgdHJhbnNhY3Rpb24gZmVlc1xuICAgKlxuICAgKiBAcGFyYW0ge0Jhc2VGZWV9IGZlZSBUaGUgbWF4aW11bSBnYXMgdG8gcGF5XG4gICAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkJ1aWxkZXJ9IFRoaXMgdHJhbnNhY3Rpb24gYnVpbGRlclxuICAgKi9cbiAgZmVlKGZlZTogRmVlKTogdGhpcyB7XG4gICAgdGhpcy52YWxpZGF0ZVZhbHVlKG5ldyBCaWdOdW1iZXIoZmVlLmdhc0xpbWl0KSk7XG4gICAgdGhpcy5fZmVlID0gZmVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgdHJhbnNhY3Rpb24gc291cmNlXG4gICAqXG4gICAqIEBwYXJhbSB7QmFzZUFkZHJlc3N9IGFkZHJlc3MgVGhlIHNvdXJjZSBhY2NvdW50XG4gICAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbkJ1aWxkZXJ9IFRoaXMgdHJhbnNhY3Rpb24gYnVpbGRlclxuICAgKi9cbiAgc291cmNlKGFkZHJlc3M6IEJhc2VBZGRyZXNzKTogdGhpcyB7XG4gICAgdGhpcy52YWxpZGF0ZUFkZHJlc3MoYWRkcmVzcyk7XG4gICAgdGhpcy5fc291cmNlID0gYWRkcmVzcztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHRyYW5zYWN0aW9uIGV4cGlyYXRpb25UaW1lXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBleHBpcmF0aW9uVGltZSBUaGUgdHJhbnNhY3Rpb24gZXhwaXJhdGlvblRpbWVcbiAgICogQHJldHVybnMge1RyYW5zYWN0aW9uQnVpbGRlcn0gVGhpcyB0cmFuc2FjdGlvbiBidWlsZGVyXG4gICAqL1xuICBleHBpcmF0aW9uKGV4cGlyYXRpb25UaW1lOiBudW1iZXIpOiB0aGlzIHtcbiAgICBjb25zdCB0cmFuc2FjdGlvbkV4cGlyYXRpb24gPSBuZXcgQmlnTnVtYmVyKGV4cGlyYXRpb25UaW1lKTtcbiAgICBpZiAodHJhbnNhY3Rpb25FeHBpcmF0aW9uLmlzTmFOKCkgfHwgdHJhbnNhY3Rpb25FeHBpcmF0aW9uLmlzR3JlYXRlclRoYW4oVFJBTlNBQ1RJT05fRVhQSVJBVElPTikpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgdHJhbnNhY3Rpb24gZXhwaXJhdGlvbicpO1xuICAgIH1cbiAgICB0aGlzLnZhbGlkYXRlVmFsdWUodHJhbnNhY3Rpb25FeHBpcmF0aW9uKTtcbiAgICB0aGlzLl9leHBpcmF0aW9uID0gdHJhbnNhY3Rpb25FeHBpcmF0aW9uLnRvTnVtYmVyKCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGFuIGV4dGVybmFsIHRyYW5zYWN0aW9uIHNpZ25hdHVyZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2lnbmF0dXJlIEhleCBlbmNvZGVkIHNpZ25hdHVyZSBzdHJpbmdcbiAgICogQHBhcmFtIHtLZXlQYWlyfSBrZXlQYWlyIFRoZSBwdWJsaWMga2V5IGtleXBhaXIgdGhhdCB3YXMgdXNlZCB0byBjcmVhdGUgdGhlIHNpZ25hdHVyZVxuICAgKiBAcmV0dXJucyB7VHJhbnNhY3Rpb25CdWlsZGVyfSBUaGlzIHRyYW5zYWN0aW9uIGJ1aWxkZXJcbiAgICovXG4gIHNpZ25hdHVyZShzaWduYXR1cmU6IHN0cmluZywga2V5UGFpcjogS2V5UGFpcik6IHRoaXMge1xuICAgIC8vIGlmIHdlIGFscmVhZHkgaGF2ZSBhIHNpZ25hdHVyZSBmb3IgdGhpcyBrZXkgcGFpciwganVzdCB1cGRhdGUgaXRcbiAgICBmb3IgKGNvbnN0IG9sZFNpZ25hdHVyZSBvZiB0aGlzLl9zaWduYXR1cmVzKSB7XG4gICAgICBpZiAob2xkU2lnbmF0dXJlLmtleVBhaXIuZ2V0S2V5cygpLnB1YiA9PT0ga2V5UGFpci5nZXRLZXlzKCkucHViKSB7XG4gICAgICAgIG9sZFNpZ25hdHVyZS5zaWduYXR1cmUgPSBzaWduYXR1cmU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIG90aGVyd2lzZSBhZGQgdGhlIG5ldyBzaWduYXR1cmVcbiAgICB0aGlzLl9zaWduYXR1cmVzLnB1c2goeyBzaWduYXR1cmUsIGtleVBhaXIgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBub2RlQ2hhaW5OYW1lKGNoYWluTmFtZTogc3RyaW5nKTogdGhpcyB7XG4gICAgdGhpcy5fY2hhaW5OYW1lID0gY2hhaW5OYW1lO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gZW5kcmVnaW9uXG5cbiAgLy8gcmVnaW9uIFZhbGlkYXRvcnNcbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlQWRkcmVzcyhhZGRyZXNzOiBCYXNlQWRkcmVzcyk6IHZvaWQge1xuICAgIGlmICghaXNWYWxpZEFkZHJlc3MoYWRkcmVzcy5hZGRyZXNzKSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCBhZGRyZXNzICcgKyBhZGRyZXNzLmFkZHJlc3MpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZUtleShrZXk6IEJhc2VLZXkpOiB2b2lkIHtcbiAgICBpZiAoIW5ldyBLZXlQYWlyKHsgcHJ2OiBrZXkua2V5IH0pKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIGtleScpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZVJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXJhd1RyYW5zYWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ1JhdyB0cmFuc2FjdGlvbiBpcyBlbXB0eScpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgRGVwbG95VXRpbC5kZXBsb3lGcm9tSnNvbihKU09OLnBhcnNlKHJhd1RyYW5zYWN0aW9uKSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlVHJhbnNhY3Rpb25FcnJvcignVGhlcmUgd2FzIGFuIGVycm9yIHBhcnNpbmcgdGhlIEpTT04gc3RyaW5nJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlVHJhbnNhY3Rpb24odHJhbnNhY3Rpb24/OiBUcmFuc2FjdGlvbik6IHZvaWQge1xuICAgIHRoaXMudmFsaWRhdGVNYW5kYXRvcnlGaWVsZHMoKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZVZhbHVlKHZhbHVlOiBCaWdOdW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodmFsdWUuaXNMZXNzVGhhbigwKSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignVmFsdWUgY2Fubm90IGJlIGxlc3MgdGhhbiB6ZXJvJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGF0IHRoZSBtYW5kYXRvcnkgZmllbGRzIGFyZSBkZWZpbmVkXG4gICAqL1xuICB2YWxpZGF0ZU1hbmRhdG9yeUZpZWxkcygpOiB2b2lkIHtcbiAgICB0aGlzLnZhbGlkYXRlRmVlKCk7XG4gICAgdGhpcy52YWxpZGF0ZVNvdXJjZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGF0IHRoZSBmZWUgZmllbGQgaXMgZGVmaW5lZFxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZUZlZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fZmVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgdHJhbnNhY3Rpb246IG1pc3NpbmcgZmVlJyk7XG4gICAgfVxuICAgIGlmICghdGhpcy5fZmVlLmdhc0xpbWl0KSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIHRyYW5zYWN0aW9uOiBtaXNzaW5nIGdhcyBsaW1pdCcpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgdGhpcy52YWxpZGF0ZVZhbHVlKG5ldyBCaWdOdW1iZXIodGhpcy5fZmVlLmdhc0xpbWl0KSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCBnYXMgbGltaXQnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoYXQgdGhlIHNvdXJjZSBmaWVsZCBpcyBkZWZpbmVkXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlU291cmNlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9zb3VyY2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCB0cmFuc2FjdGlvbjogbWlzc2luZyBzb3VyY2UnKTtcbiAgICB9XG4gICAgdGhpcy52YWxpZGF0ZUFkZHJlc3ModGhpcy5fc291cmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhhdCB0aGUgZ2l2ZW4ga2V5IGlzIG5vdCBhbHJlYWR5IGluIHRoaXMuX211bHRpU2lnbmVyS2V5UGFpcnNcbiAgICpcbiAgICogQHBhcmFtIHtCYXNlS2V5fSBrZXkgLSBUaGUga2V5IHRvIGNoZWNrXG4gICAqL1xuICBwcml2YXRlIGNoZWNrRHVwbGljYXRlZEtleXMoa2V5OiBCYXNlS2V5KSB7XG4gICAgdGhpcy5fbXVsdGlTaWduZXJLZXlQYWlycy5mb3JFYWNoKChfc291cmNlS2V5UGFpcikgPT4ge1xuICAgICAgaWYgKF9zb3VyY2VLZXlQYWlyLmdldEtleXMoKS5wcnYgPT09IGtleS5rZXkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFNpZ25pbmdFcnJvcignUmVwZWF0ZWQgc2lnbjogJyArIGtleS5rZXkpO1xuICAgICAgfVxuICAgICAgLy8gVHJ5IHRvIGdldCBleHRlbmRlZCBrZXlzIGluIG9yZGVyIHRvIHZhbGlkYXRlIHRoZW1cbiAgICAgIGxldCB4cHJ2O1xuICAgICAgdHJ5IHtcbiAgICAgICAgeHBydiA9IF9zb3VyY2VLZXlQYWlyLmdldEV4dGVuZGVkS2V5cygpLnhwcnY7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHhwcnYgJiYgeHBydiA9PT0ga2V5LmtleSkge1xuICAgICAgICB0aHJvdyBuZXcgU2lnbmluZ0Vycm9yKCdSZXBlYXRlZCBzaWduOiAnICsga2V5LmtleSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvLyBlbmRyZWdpb25cblxuICAvLyByZWdpb24gR2V0dGVycyBhbmQgU2V0dGVyc1xuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGdldCB0cmFuc2FjdGlvbigpOiBUcmFuc2FjdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zYWN0aW9uO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBzZXQgdHJhbnNhY3Rpb24odHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uKSB7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24gPSB0cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGNoYWluIG5hbWUgZm9yIHRoZSBjb2luIGVudmlyb25tZW50XG4gICAqL1xuICBwdWJsaWMgZ2V0IGNoYWluTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9jaGFpbk5hbWU7XG4gIH1cbiAgLy8gZW5kcmVnaW9uXG5cbiAgLy8gcmVnaW9uIGF1eGlsaWFyeU1ldGhvZHNcbiAgLyoqXG4gICAqIEdlbmVyYXRlIGEgRGVwbG95UGFyYW1zIGluc3RhbmNlIHdpdGggdGhlIHRyYW5zYWN0aW9uIGRhdGFcbiAgICpcbiAgICogQHJldHVybnMge0RlcGxveVV0aWwuRGVwbG95UGFyYW1zfVxuICAgKi9cbiAgcHJpdmF0ZSBnZXREZXBsb3lQYXJhbXMoKTogRGVwbG95VXRpbC5EZXBsb3lQYXJhbXMge1xuICAgIGNvbnN0IGdhc1ByaWNlID0gdGhpcy5fZmVlLmdhc1ByaWNlID8gXy5wYXJzZUludCh0aGlzLl9mZWUuZ2FzUHJpY2UpIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiBuZXcgRGVwbG95VXRpbC5EZXBsb3lQYXJhbXMoXG4gICAgICBQdWJsaWNLZXkuZnJvbUhleCh0aGlzLl9zb3VyY2UuYWRkcmVzcyksXG4gICAgICB0aGlzLl9jaGFpbk5hbWUsXG4gICAgICBnYXNQcmljZSxcbiAgICAgIHRoaXMuX2V4cGlyYXRpb24gfHwgVFJBTlNBQ1RJT05fRVhQSVJBVElPTlxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgdGhlIHNlc3Npb24gZm9yIHRoZSBEZXBsb3kgYWNjb3JkaW5nIHRvIHRoZSB0cmFuc2FjdGlvblR5cGUuXG4gICAqXG4gICAqIEByZXR1cm5zIHtEZXBsb3lVdGlsLkV4ZWN1dGFibGVEZXBsb3lJdGVtfVxuICAgKi9cbiAgcHJpdmF0ZSBnZXRTZXNzaW9uKCk6IERlcGxveVV0aWwuRXhlY3V0YWJsZURlcGxveUl0ZW0ge1xuICAgIGxldCBzZXNzaW9uO1xuICAgIHN3aXRjaCAodGhpcy50cmFuc2FjdGlvbi50eXBlKSB7XG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5TZW5kOlxuICAgICAgICBjb25zdCB0cmFuc2ZlclNlc3Npb24gPSB0aGlzLl9zZXNzaW9uIGFzIENhc3BlclRyYW5zZmVyVHJhbnNhY3Rpb247XG4gICAgICAgIHNlc3Npb24gPSBEZXBsb3lVdGlsLkV4ZWN1dGFibGVEZXBsb3lJdGVtLm5ld1RyYW5zZmVyV2l0aE9wdGlvbmFsVHJhbnNmZXJJZChcbiAgICAgICAgICB0cmFuc2ZlclNlc3Npb24uYW1vdW50LFxuICAgICAgICAgIHRyYW5zZmVyU2Vzc2lvbi50YXJnZXQsXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgIHRyYW5zZmVyU2Vzc2lvbi5pZFxuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLldhbGxldEluaXRpYWxpemF0aW9uOlxuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0xvY2s6XG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nVW5sb2NrOlxuICAgICAgICBjb25zdCBtb2R1bGVCeXRlc1Nlc3Npb24gPSB0aGlzLl9zZXNzaW9uIGFzIENhc3Blck1vZHVsZUJ5dGVzVHJhbnNhY3Rpb247XG4gICAgICAgIHNlc3Npb24gPSBEZXBsb3lVdGlsLkV4ZWN1dGFibGVEZXBsb3lJdGVtLm5ld01vZHVsZUJ5dGVzKFxuICAgICAgICAgIG1vZHVsZUJ5dGVzU2Vzc2lvbi5tb2R1bGVCeXRlcyxcbiAgICAgICAgICBtb2R1bGVCeXRlc1Nlc3Npb24uYXJnc1xuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ1RyYW5zYWN0aW9uIFR5cGUgZXJyb3InKTtcbiAgICB9XG4gICAgcmV0dXJuIHNlc3Npb247XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIHRyYW5zYWN0aW9uIGhhcyB0aGUgb3duZXIgc2lnbmF0dXJlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwdWIgLSBwdWJsaWMga2V5IG9mIHRoZSBzaWduZXJcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgdGhlIHB1YiBrZXkgYWxyZWFkeSBzaWduZWQgdGggdHJhbnNhY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgaXNUcmFuc2FjdGlvblNpZ25lZEJ5UHViKHB1Yjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIF8uZmluZEluZGV4KHRoaXMudHJhbnNhY3Rpb24uY2FzcGVyVHguYXBwcm92YWxzLCAoYXBwcm92YWwpID0+IHtcbiAgICAgICAgY29uc3QgYXBwcm92YWxTaWduZXIgPSByZW1vdmVBbGdvUHJlZml4RnJvbUhleFZhbHVlKGFwcHJvdmFsLnNpZ25lcik7XG4gICAgICAgIHJldHVybiBhcHByb3ZhbFNpZ25lciA9PT0gcHViO1xuICAgICAgfSkgIT09IC0xXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgc2lnbmF0dXJlcyB0byB0aGUgdHJhbnNhY3Rpb25cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgcHJvY2Vzc1NpZ25pbmcoKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBrZXlQYWlyIG9mIHRoaXMuX211bHRpU2lnbmVyS2V5UGFpcnMpIHtcbiAgICAgIC8vIEFkZCBzaWduYXR1cmUgaWYgaXQncyBub3QgYWxyZWFkeSBpbiB0aGUgZGVwbG95XG4gICAgICBpZiAoIXRoaXMuaXNUcmFuc2FjdGlvblNpZ25lZEJ5UHViKGtleVBhaXIuZ2V0S2V5cygpLnB1YikpIHtcbiAgICAgICAgdGhpcy50cmFuc2FjdGlvbi5zaWduKGtleVBhaXIpO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IHsgc2lnbmF0dXJlLCBrZXlQYWlyIH0gb2YgdGhpcy5fc2lnbmF0dXJlcykge1xuICAgICAgLy8gQWRkIHNpZ25hdHVyZSBpZiBpdCdzIG5vdCBhbHJlYWR5IGluIHRoZSBkZXBsb3lcbiAgICAgIGlmICghdGhpcy5pc1RyYW5zYWN0aW9uU2lnbmVkQnlQdWIoa2V5UGFpci5nZXRLZXlzKCkucHViKSkge1xuICAgICAgICB0aGlzLnRyYW5zYWN0aW9uLmFkZFNpZ25hdHVyZShzaWduYXR1cmUsIGtleVBhaXIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvLyBlbmRyZWdpb25cbn1cbiJdfQ==
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { BaseCoin as CoinConfig } from '@bitgo/statics';
|
|
2
|
+
import { BaseTransactionBuilderFactory } from '@bitgo/sdk-core';
|
|
3
|
+
import { WalletInitializationBuilder } from './walletInitializationBuilder';
|
|
4
|
+
import { TransferBuilder } from './transferBuilder';
|
|
5
|
+
import { TransactionBuilder } from './transactionBuilder';
|
|
6
|
+
import { Transaction } from './transaction';
|
|
7
|
+
import { DelegateBuilder } from './delegateBuilder';
|
|
8
|
+
import { UndelegateBuilder } from './undelegateBuilder';
|
|
9
|
+
export declare class TransactionBuilderFactory extends BaseTransactionBuilderFactory {
|
|
10
|
+
constructor(_coinConfig: Readonly<CoinConfig>);
|
|
11
|
+
/** @inheritdoc */
|
|
12
|
+
getWalletInitializationBuilder(tx?: Transaction): WalletInitializationBuilder;
|
|
13
|
+
/**
|
|
14
|
+
* Initialize an undelegate builder
|
|
15
|
+
*
|
|
16
|
+
* @param {Transaction | undefined} tx - the transaction used to initialize the builder
|
|
17
|
+
* @returns {UndelegateBuilder} the builder initialized
|
|
18
|
+
*/
|
|
19
|
+
getUndelegateBuilder(tx?: Transaction): UndelegateBuilder;
|
|
20
|
+
/**
|
|
21
|
+
* Initialize an delegate builder
|
|
22
|
+
*
|
|
23
|
+
* @param {Transaction | undefined} tx - the transaction used to initialize the builder
|
|
24
|
+
* @returns {DelegateBuilder} the builder initialized
|
|
25
|
+
*/
|
|
26
|
+
getDelegateBuilder(tx?: Transaction): DelegateBuilder;
|
|
27
|
+
/** @inheritDoc */
|
|
28
|
+
getTransferBuilder(tx?: Transaction): TransferBuilder;
|
|
29
|
+
/** @inheritDoc */
|
|
30
|
+
from(raw: string): TransactionBuilder;
|
|
31
|
+
/**
|
|
32
|
+
* Initialize the builder with the given transaction
|
|
33
|
+
*
|
|
34
|
+
* @param {Transaction | undefined} tx - the transaction used to initialize the builder
|
|
35
|
+
* @param {TransactionBuilder} builder - the builder to be initialized
|
|
36
|
+
* @returns {TransactionBuilder} the builder initialized
|
|
37
|
+
*/
|
|
38
|
+
private initializeBuilder;
|
|
39
|
+
/**
|
|
40
|
+
* Check the raw transaction has a valid format in the blockchain context, throw otherwise.
|
|
41
|
+
*
|
|
42
|
+
* @param {any} rawTransaction - Transaction in any format
|
|
43
|
+
*/
|
|
44
|
+
private validateRawTransaction;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=transactionBuilderFactory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transactionBuilderFactory.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilderFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAExD,OAAO,EACL,6BAA6B,EAI9B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,qBAAa,yBAA0B,SAAQ,6BAA6B;gBAC9D,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C,kBAAkB;IAClB,8BAA8B,CAAC,EAAE,CAAC,EAAE,WAAW,GAAG,2BAA2B;IAI7E;;;;;OAKG;IACH,oBAAoB,CAAC,EAAE,CAAC,EAAE,WAAW,GAAG,iBAAiB;IAIzD;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,CAAC,EAAE,WAAW,GAAG,eAAe;IAIrD,kBAAkB;IAClB,kBAAkB,CAAC,EAAE,CAAC,EAAE,WAAW,GAAG,eAAe;IAIrD,kBAAkB;IAClB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB;IAyBrC;;;;;;OAMG;IACH,OAAO,CAAC,iBAAiB;IAOzB;;;;OAIG;IACH,OAAO,CAAC,sBAAsB;CAU/B"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TransactionBuilderFactory = void 0;
|
|
4
|
+
const casper_js_sdk_1 = require("casper-js-sdk");
|
|
5
|
+
const sdk_core_1 = require("@bitgo/sdk-core");
|
|
6
|
+
const walletInitializationBuilder_1 = require("./walletInitializationBuilder");
|
|
7
|
+
const transferBuilder_1 = require("./transferBuilder");
|
|
8
|
+
const transaction_1 = require("./transaction");
|
|
9
|
+
const utils_1 = require("./utils");
|
|
10
|
+
const delegateBuilder_1 = require("./delegateBuilder");
|
|
11
|
+
const undelegateBuilder_1 = require("./undelegateBuilder");
|
|
12
|
+
class TransactionBuilderFactory extends sdk_core_1.BaseTransactionBuilderFactory {
|
|
13
|
+
constructor(_coinConfig) {
|
|
14
|
+
super(_coinConfig);
|
|
15
|
+
}
|
|
16
|
+
/** @inheritdoc */
|
|
17
|
+
getWalletInitializationBuilder(tx) {
|
|
18
|
+
return this.initializeBuilder(tx, new walletInitializationBuilder_1.WalletInitializationBuilder(this._coinConfig));
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Initialize an undelegate builder
|
|
22
|
+
*
|
|
23
|
+
* @param {Transaction | undefined} tx - the transaction used to initialize the builder
|
|
24
|
+
* @returns {UndelegateBuilder} the builder initialized
|
|
25
|
+
*/
|
|
26
|
+
getUndelegateBuilder(tx) {
|
|
27
|
+
return this.initializeBuilder(tx, new undelegateBuilder_1.UndelegateBuilder(this._coinConfig));
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Initialize an delegate builder
|
|
31
|
+
*
|
|
32
|
+
* @param {Transaction | undefined} tx - the transaction used to initialize the builder
|
|
33
|
+
* @returns {DelegateBuilder} the builder initialized
|
|
34
|
+
*/
|
|
35
|
+
getDelegateBuilder(tx) {
|
|
36
|
+
return this.initializeBuilder(tx, new delegateBuilder_1.DelegateBuilder(this._coinConfig));
|
|
37
|
+
}
|
|
38
|
+
/** @inheritDoc */
|
|
39
|
+
getTransferBuilder(tx) {
|
|
40
|
+
return this.initializeBuilder(tx, new transferBuilder_1.TransferBuilder(this._coinConfig));
|
|
41
|
+
}
|
|
42
|
+
/** @inheritDoc */
|
|
43
|
+
from(raw) {
|
|
44
|
+
this.validateRawTransaction(raw);
|
|
45
|
+
const tx = new transaction_1.Transaction(this._coinConfig);
|
|
46
|
+
const deployJson = JSON.parse(raw);
|
|
47
|
+
try {
|
|
48
|
+
tx.casperTx = casper_js_sdk_1.DeployUtil.deployFromJson(deployJson).unwrap();
|
|
49
|
+
}
|
|
50
|
+
catch (e) {
|
|
51
|
+
throw new sdk_core_1.InvalidTransactionError('Invalid transaction: ' + e);
|
|
52
|
+
}
|
|
53
|
+
const casperDeployType = utils_1.getDeployType(tx.casperTx.session);
|
|
54
|
+
switch (casperDeployType) {
|
|
55
|
+
case sdk_core_1.TransactionType.Send:
|
|
56
|
+
return this.getTransferBuilder(tx);
|
|
57
|
+
case sdk_core_1.TransactionType.WalletInitialization:
|
|
58
|
+
return this.getWalletInitializationBuilder(tx);
|
|
59
|
+
case sdk_core_1.TransactionType.StakingLock:
|
|
60
|
+
return this.getDelegateBuilder(tx);
|
|
61
|
+
case sdk_core_1.TransactionType.StakingUnlock:
|
|
62
|
+
return this.getUndelegateBuilder(tx);
|
|
63
|
+
default:
|
|
64
|
+
throw new sdk_core_1.InvalidTransactionError('Invalid transaction ' + tx.casperTx);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Initialize the builder with the given transaction
|
|
69
|
+
*
|
|
70
|
+
* @param {Transaction | undefined} tx - the transaction used to initialize the builder
|
|
71
|
+
* @param {TransactionBuilder} builder - the builder to be initialized
|
|
72
|
+
* @returns {TransactionBuilder} the builder initialized
|
|
73
|
+
*/
|
|
74
|
+
initializeBuilder(tx, builder) {
|
|
75
|
+
if (tx) {
|
|
76
|
+
builder.initBuilder(tx);
|
|
77
|
+
}
|
|
78
|
+
return builder;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Check the raw transaction has a valid format in the blockchain context, throw otherwise.
|
|
82
|
+
*
|
|
83
|
+
* @param {any} rawTransaction - Transaction in any format
|
|
84
|
+
*/
|
|
85
|
+
validateRawTransaction(rawTransaction) {
|
|
86
|
+
if (!rawTransaction) {
|
|
87
|
+
throw new sdk_core_1.ParseTransactionError('Invalid raw transaction: Undefined');
|
|
88
|
+
}
|
|
89
|
+
try {
|
|
90
|
+
JSON.parse(rawTransaction);
|
|
91
|
+
}
|
|
92
|
+
catch (e) {
|
|
93
|
+
throw new sdk_core_1.ParseTransactionError('Invalid raw transaction format');
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
exports.TransactionBuilderFactory = TransactionBuilderFactory;
|
|
98
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvdHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSxpREFBMkM7QUFDM0MsOENBS3lCO0FBQ3pCLCtFQUE0RTtBQUM1RSx1REFBb0Q7QUFFcEQsK0NBQTRDO0FBQzVDLG1DQUF3QztBQUN4Qyx1REFBb0Q7QUFDcEQsMkRBQXdEO0FBRXhELE1BQWEseUJBQTBCLFNBQVEsd0NBQTZCO0lBQzFFLFlBQVksV0FBaUM7UUFDM0MsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsOEJBQThCLENBQUMsRUFBZ0I7UUFDN0MsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBRSxFQUFFLElBQUkseURBQTJCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDdkYsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsb0JBQW9CLENBQUMsRUFBZ0I7UUFDbkMsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBRSxFQUFFLElBQUkscUNBQWlCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDN0UsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsa0JBQWtCLENBQUMsRUFBZ0I7UUFDakMsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBRSxFQUFFLElBQUksaUNBQWUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLGtCQUFrQixDQUFDLEVBQWdCO1FBQ2pDLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsRUFBRSxJQUFJLGlDQUFlLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixJQUFJLENBQUMsR0FBVztRQUNkLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNqQyxNQUFNLEVBQUUsR0FBRyxJQUFJLHlCQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzdDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbkMsSUFBSTtZQUNGLEVBQUUsQ0FBQyxRQUFRLEdBQUcsMEJBQVUsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7U0FDOUQ7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLE1BQU0sSUFBSSxrQ0FBdUIsQ0FBQyx1QkFBdUIsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUNoRTtRQUVELE1BQU0sZ0JBQWdCLEdBQUcscUJBQWEsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzVELFFBQVEsZ0JBQWdCLEVBQUU7WUFDeEIsS0FBSywwQkFBZSxDQUFDLElBQUk7Z0JBQ3ZCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3JDLEtBQUssMEJBQWUsQ0FBQyxvQkFBb0I7Z0JBQ3ZDLE9BQU8sSUFBSSxDQUFDLDhCQUE4QixDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2pELEtBQUssMEJBQWUsQ0FBQyxXQUFXO2dCQUM5QixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNyQyxLQUFLLDBCQUFlLENBQUMsYUFBYTtnQkFDaEMsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDdkM7Z0JBQ0UsTUFBTSxJQUFJLGtDQUF1QixDQUFDLHNCQUFzQixHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUMzRTtJQUNILENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSyxpQkFBaUIsQ0FBK0IsRUFBMkIsRUFBRSxPQUFVO1FBQzdGLElBQUksRUFBRSxFQUFFO1lBQ04sT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUN6QjtRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssc0JBQXNCLENBQUMsY0FBc0I7UUFDbkQsSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUNuQixNQUFNLElBQUksZ0NBQXFCLENBQUMsb0NBQW9DLENBQUMsQ0FBQztTQUN2RTtRQUNELElBQUk7WUFDRixJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1NBQzVCO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDVixNQUFNLElBQUksZ0NBQXFCLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztTQUNuRTtJQUNILENBQUM7Q0FDRjtBQTFGRCw4REEwRkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuaW1wb3J0IHsgRGVwbG95VXRpbCB9IGZyb20gJ2Nhc3Blci1qcy1zZGsnO1xuaW1wb3J0IHtcbiAgQmFzZVRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnksXG4gIFRyYW5zYWN0aW9uVHlwZSxcbiAgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IsXG4gIFBhcnNlVHJhbnNhY3Rpb25FcnJvcixcbn0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IFdhbGxldEluaXRpYWxpemF0aW9uQnVpbGRlciB9IGZyb20gJy4vd2FsbGV0SW5pdGlhbGl6YXRpb25CdWlsZGVyJztcbmltcG9ydCB7IFRyYW5zZmVyQnVpbGRlciB9IGZyb20gJy4vdHJhbnNmZXJCdWlsZGVyJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vdHJhbnNhY3Rpb25CdWlsZGVyJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5pbXBvcnQgeyBnZXREZXBsb3lUeXBlIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBEZWxlZ2F0ZUJ1aWxkZXIgfSBmcm9tICcuL2RlbGVnYXRlQnVpbGRlcic7XG5pbXBvcnQgeyBVbmRlbGVnYXRlQnVpbGRlciB9IGZyb20gJy4vdW5kZWxlZ2F0ZUJ1aWxkZXInO1xuXG5leHBvcnQgY2xhc3MgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSBleHRlbmRzIEJhc2VUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5IHtcbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGdldFdhbGxldEluaXRpYWxpemF0aW9uQnVpbGRlcih0eD86IFRyYW5zYWN0aW9uKTogV2FsbGV0SW5pdGlhbGl6YXRpb25CdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5pbml0aWFsaXplQnVpbGRlcih0eCwgbmV3IFdhbGxldEluaXRpYWxpemF0aW9uQnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKSk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSBhbiB1bmRlbGVnYXRlIGJ1aWxkZXJcbiAgICpcbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvbiB8IHVuZGVmaW5lZH0gdHggLSB0aGUgdHJhbnNhY3Rpb24gdXNlZCB0byBpbml0aWFsaXplIHRoZSBidWlsZGVyXG4gICAqIEByZXR1cm5zIHtVbmRlbGVnYXRlQnVpbGRlcn0gdGhlIGJ1aWxkZXIgaW5pdGlhbGl6ZWRcbiAgICovXG4gIGdldFVuZGVsZWdhdGVCdWlsZGVyKHR4PzogVHJhbnNhY3Rpb24pOiBVbmRlbGVnYXRlQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuaW5pdGlhbGl6ZUJ1aWxkZXIodHgsIG5ldyBVbmRlbGVnYXRlQnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKSk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSBhbiBkZWxlZ2F0ZSBidWlsZGVyXG4gICAqXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb24gfCB1bmRlZmluZWR9IHR4IC0gdGhlIHRyYW5zYWN0aW9uIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgYnVpbGRlclxuICAgKiBAcmV0dXJucyB7RGVsZWdhdGVCdWlsZGVyfSB0aGUgYnVpbGRlciBpbml0aWFsaXplZFxuICAgKi9cbiAgZ2V0RGVsZWdhdGVCdWlsZGVyKHR4PzogVHJhbnNhY3Rpb24pOiBEZWxlZ2F0ZUJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLmluaXRpYWxpemVCdWlsZGVyKHR4LCBuZXcgRGVsZWdhdGVCdWlsZGVyKHRoaXMuX2NvaW5Db25maWcpKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBnZXRUcmFuc2ZlckJ1aWxkZXIodHg/OiBUcmFuc2FjdGlvbik6IFRyYW5zZmVyQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuaW5pdGlhbGl6ZUJ1aWxkZXIodHgsIG5ldyBUcmFuc2ZlckJ1aWxkZXIodGhpcy5fY29pbkNvbmZpZykpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGZyb20ocmF3OiBzdHJpbmcpOiBUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICAgIHRoaXMudmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXcpO1xuICAgIGNvbnN0IHR4ID0gbmV3IFRyYW5zYWN0aW9uKHRoaXMuX2NvaW5Db25maWcpO1xuICAgIGNvbnN0IGRlcGxveUpzb24gPSBKU09OLnBhcnNlKHJhdyk7XG4gICAgdHJ5IHtcbiAgICAgIHR4LmNhc3BlclR4ID0gRGVwbG95VXRpbC5kZXBsb3lGcm9tSnNvbihkZXBsb3lKc29uKS51bndyYXAoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgdHJhbnNhY3Rpb246ICcgKyBlKTtcbiAgICB9XG5cbiAgICBjb25zdCBjYXNwZXJEZXBsb3lUeXBlID0gZ2V0RGVwbG95VHlwZSh0eC5jYXNwZXJUeC5zZXNzaW9uKTtcbiAgICBzd2l0Y2ggKGNhc3BlckRlcGxveVR5cGUpIHtcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlNlbmQ6XG4gICAgICAgIHJldHVybiB0aGlzLmdldFRyYW5zZmVyQnVpbGRlcih0eCk7XG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5XYWxsZXRJbml0aWFsaXphdGlvbjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0V2FsbGV0SW5pdGlhbGl6YXRpb25CdWlsZGVyKHR4KTtcbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdMb2NrOlxuICAgICAgICByZXR1cm4gdGhpcy5nZXREZWxlZ2F0ZUJ1aWxkZXIodHgpO1xuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ1VubG9jazpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VW5kZWxlZ2F0ZUJ1aWxkZXIodHgpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIHRyYW5zYWN0aW9uICcgKyB0eC5jYXNwZXJUeCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgdGhlIGJ1aWxkZXIgd2l0aCB0aGUgZ2l2ZW4gdHJhbnNhY3Rpb25cbiAgICpcbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvbiB8IHVuZGVmaW5lZH0gdHggLSB0aGUgdHJhbnNhY3Rpb24gdXNlZCB0byBpbml0aWFsaXplIHRoZSBidWlsZGVyXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb25CdWlsZGVyfSBidWlsZGVyIC0gdGhlIGJ1aWxkZXIgdG8gYmUgaW5pdGlhbGl6ZWRcbiAgICogQHJldHVybnMge1RyYW5zYWN0aW9uQnVpbGRlcn0gdGhlIGJ1aWxkZXIgaW5pdGlhbGl6ZWRcbiAgICovXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUJ1aWxkZXI8VCBleHRlbmRzIFRyYW5zYWN0aW9uQnVpbGRlcj4odHg6IFRyYW5zYWN0aW9uIHwgdW5kZWZpbmVkLCBidWlsZGVyOiBUKTogVCB7XG4gICAgaWYgKHR4KSB7XG4gICAgICBidWlsZGVyLmluaXRCdWlsZGVyKHR4KTtcbiAgICB9XG4gICAgcmV0dXJuIGJ1aWxkZXI7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgdGhlIHJhdyB0cmFuc2FjdGlvbiBoYXMgYSB2YWxpZCBmb3JtYXQgaW4gdGhlIGJsb2NrY2hhaW4gY29udGV4dCwgdGhyb3cgb3RoZXJ3aXNlLlxuICAgKlxuICAgKiBAcGFyYW0ge2FueX0gcmF3VHJhbnNhY3Rpb24gLSBUcmFuc2FjdGlvbiBpbiBhbnkgZm9ybWF0XG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlUmF3VHJhbnNhY3Rpb24ocmF3VHJhbnNhY3Rpb246IHN0cmluZykge1xuICAgIGlmICghcmF3VHJhbnNhY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZVRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgcmF3IHRyYW5zYWN0aW9uOiBVbmRlZmluZWQnKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIEpTT04ucGFyc2UocmF3VHJhbnNhY3Rpb24pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZVRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgcmF3IHRyYW5zYWN0aW9uIGZvcm1hdCcpO1xuICAgIH1cbiAgfVxufVxuIl19
|