@bitgo-beta/sdk-coin-trx 1.2.3-alpha.402 → 1.2.3-alpha.404
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/src/index.d.ts +6 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +22 -0
- package/dist/src/lib/address.d.ts +11 -0
- package/dist/src/lib/address.d.ts.map +1 -0
- package/dist/src/lib/address.js +13 -0
- package/dist/src/lib/builder.d.ts +3 -0
- package/dist/src/lib/builder.d.ts.map +1 -0
- package/dist/src/lib/builder.js +10 -0
- package/dist/src/lib/constants.d.ts +3 -0
- package/dist/src/lib/constants.d.ts.map +1 -0
- package/dist/src/lib/constants.js +6 -0
- package/dist/src/lib/contractCallBuilder.d.ts +62 -0
- package/dist/src/lib/contractCallBuilder.d.ts.map +1 -0
- package/dist/src/lib/contractCallBuilder.js +218 -0
- package/dist/src/lib/delegateResourceTxBuilder.d.ts +27 -0
- package/dist/src/lib/delegateResourceTxBuilder.d.ts.map +1 -0
- package/dist/src/lib/delegateResourceTxBuilder.js +98 -0
- package/dist/src/lib/enum.d.ts +58 -0
- package/dist/src/lib/enum.d.ts.map +1 -0
- package/dist/src/lib/enum.js +64 -0
- package/dist/src/lib/freezeBalanceTxBuilder.d.ts +71 -0
- package/dist/src/lib/freezeBalanceTxBuilder.d.ts.map +1 -0
- package/dist/src/lib/freezeBalanceTxBuilder.js +211 -0
- package/dist/src/lib/iface.d.ts +321 -0
- package/dist/src/lib/iface.d.ts.map +1 -0
- package/dist/src/lib/iface.js +3 -0
- package/dist/src/lib/index.d.ts +12 -0
- package/dist/src/lib/index.d.ts.map +1 -0
- package/dist/src/lib/index.js +53 -0
- package/dist/src/lib/keyPair.d.ts +43 -0
- package/dist/src/lib/keyPair.d.ts.map +1 -0
- package/dist/src/lib/keyPair.js +134 -0
- package/dist/src/lib/resourceManagementTxBuilder.d.ts +72 -0
- package/dist/src/lib/resourceManagementTxBuilder.d.ts.map +1 -0
- package/dist/src/lib/resourceManagementTxBuilder.js +150 -0
- package/dist/src/lib/tokenTransferBuilder.d.ts +23 -0
- package/dist/src/lib/tokenTransferBuilder.d.ts.map +1 -0
- package/dist/src/lib/tokenTransferBuilder.js +42 -0
- package/dist/src/lib/transaction.d.ts +74 -0
- package/dist/src/lib/transaction.d.ts.map +1 -0
- package/dist/src/lib/transaction.js +312 -0
- package/dist/src/lib/transactionBuilder.d.ts +110 -0
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder.js +304 -0
- package/dist/src/lib/undelegateResourceTxBuilder.d.ts +27 -0
- package/dist/src/lib/undelegateResourceTxBuilder.d.ts.map +1 -0
- package/dist/src/lib/undelegateResourceTxBuilder.js +98 -0
- package/dist/src/lib/unfreezeBalanceTxBuilder.d.ts +65 -0
- package/dist/src/lib/unfreezeBalanceTxBuilder.d.ts.map +1 -0
- package/dist/src/lib/unfreezeBalanceTxBuilder.js +204 -0
- package/dist/src/lib/utils.d.ts +225 -0
- package/dist/src/lib/utils.d.ts.map +1 -0
- package/dist/src/lib/utils.js +824 -0
- package/dist/src/lib/voteWitnessTxBuilder.d.ts +62 -0
- package/dist/src/lib/voteWitnessTxBuilder.d.ts.map +1 -0
- package/dist/src/lib/voteWitnessTxBuilder.js +219 -0
- package/dist/src/lib/withdrawBuilder.d.ts +49 -0
- package/dist/src/lib/withdrawBuilder.d.ts.map +1 -0
- package/dist/src/lib/withdrawBuilder.js +167 -0
- package/dist/src/lib/withdrawExpireUnfreezeTxBuilder.d.ts +49 -0
- package/dist/src/lib/withdrawExpireUnfreezeTxBuilder.d.ts.map +1 -0
- package/dist/src/lib/withdrawExpireUnfreezeTxBuilder.js +167 -0
- package/dist/src/lib/wrappedBuilder.d.ts +110 -0
- package/dist/src/lib/wrappedBuilder.d.ts.map +1 -0
- package/dist/src/lib/wrappedBuilder.js +192 -0
- package/dist/src/register.d.ts +3 -0
- package/dist/src/register.d.ts.map +1 -0
- package/dist/src/register.js +15 -0
- package/dist/src/trx.d.ts +266 -0
- package/dist/src/trx.d.ts.map +1 -0
- package/dist/src/trx.js +788 -0
- package/dist/src/trxToken.d.ts +38 -0
- package/dist/src/trxToken.d.ts.map +1 -0
- package/dist/src/trxToken.js +91 -0
- package/dist/src/ttrx.d.ts +13 -0
- package/dist/src/ttrx.d.ts.map +1 -0
- package/dist/src/ttrx.js +14 -0
- package/dist/test/fixtures.d.ts +40 -0
- package/dist/test/fixtures.d.ts.map +1 -0
- package/dist/test/fixtures.js +46 -0
- package/dist/test/resources.d.ts +586 -0
- package/dist/test/resources.d.ts.map +1 -0
- package/dist/test/resources.js +746 -0
- package/dist/test/unit/index.d.ts +2 -0
- package/dist/test/unit/index.d.ts.map +1 -0
- package/dist/test/unit/index.js +19 -0
- package/dist/test/unit/keyPair.d.ts +2 -0
- package/dist/test/unit/keyPair.d.ts.map +1 -0
- package/dist/test/unit/keyPair.js +163 -0
- package/dist/test/unit/transaction.d.ts +2 -0
- package/dist/test/unit/transaction.d.ts.map +1 -0
- package/dist/test/unit/transaction.js +38 -0
- package/dist/test/unit/transactionBuilder/contractCallBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/contractCallBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/contractCallBuilder.js +315 -0
- package/dist/test/unit/transactionBuilder/delegateResourceTxBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/delegateResourceTxBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/delegateResourceTxBuilder.js +255 -0
- package/dist/test/unit/transactionBuilder/freezeBalanceTxBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/freezeBalanceTxBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/freezeBalanceTxBuilder.js +256 -0
- package/dist/test/unit/transactionBuilder/tokenTransferBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/tokenTransferBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/tokenTransferBuilder.js +42 -0
- package/dist/test/unit/transactionBuilder/undelegateResourceTxBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/undelegateResourceTxBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/undelegateResourceTxBuilder.js +255 -0
- package/dist/test/unit/transactionBuilder/unfreezeBalanceTxBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/unfreezeBalanceTxBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/unfreezeBalanceTxBuilder.js +256 -0
- package/dist/test/unit/transactionBuilder/voteWitnessTxBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/voteWitnessTxBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/voteWitnessTxBuilder.js +277 -0
- package/dist/test/unit/transactionBuilder/withdrawBalanceBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/withdrawBalanceBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/withdrawBalanceBuilder.js +213 -0
- package/dist/test/unit/transactionBuilder/withdrawExpireUnfreezeTxBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/withdrawExpireUnfreezeTxBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/withdrawExpireUnfreezeTxBuilder.js +213 -0
- package/dist/test/unit/transactionBuilder/wrappedBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/wrappedBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/wrappedBuilder.js +50 -0
- package/dist/test/unit/transactionBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder.js +178 -0
- package/dist/test/unit/trx.d.ts +2 -0
- package/dist/test/unit/trx.d.ts.map +1 -0
- package/dist/test/unit/trx.js +532 -0
- package/dist/test/unit/util.d.ts +2 -0
- package/dist/test/unit/util.d.ts.map +1 -0
- package/dist/test/unit/util.js +141 -0
- package/dist/test/unit/verifyTransaction.d.ts +2 -0
- package/dist/test/unit/verifyTransaction.d.ts.map +1 -0
- package/dist/test/unit/verifyTransaction.js +378 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +10 -7
- package/.eslintignore +0 -5
- package/.mocharc.yml +0 -8
- package/CHANGELOG.md +0 -1092
- package/resources/README.md +0 -31
- package/resources/protobuf/Contract.proto +0 -288
- package/resources/protobuf/Discover.proto +0 -44
- package/resources/protobuf/tron.d.ts +0 -12469
- package/resources/protobuf/tron.js +0 -37192
- package/resources/protobuf/tron.proto +0 -683
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enum.d.ts","sourceRoot":"","sources":["../../../src/lib/enum.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,oBAAY,YAAY;IACtB;;OAEG;IACH,QAAQ,IAAA;IACR;;OAEG;IACH,uBAAuB,IAAA;IACvB;;OAEG;IACH,oBAAoB,IAAA;IACpB;;OAEG;IACH,eAAe,IAAA;IACf;;OAEG;IACH,WAAW,IAAA;IACX;;OAEG;IACH,iBAAiB,IAAA;IACjB;;OAEG;IACH,sBAAsB,IAAA;IACtB;;OAEG;IACH,eAAe,IAAA;IACf;;OAEG;IACH,wBAAwB,IAAA;IACxB;;OAEG;IACH,0BAA0B,IAAA;CAC3B;AAED,oBAAY,cAAc;IACxB,KAAK,IAAA;IACL,OAAO,IAAA;IACP,MAAM,IAAA;CACP;AAED;;GAEG;AACH,oBAAY,YAAY;IACtB,SAAS,cAAc;IACvB,MAAM,WAAW;CAClB"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TronResource = exports.PermissionType = exports.ContractType = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Contract type describes a class of contract in a Transaction. This structure is used to identify what the Contract is.
|
|
6
|
+
*/
|
|
7
|
+
var ContractType;
|
|
8
|
+
(function (ContractType) {
|
|
9
|
+
/**
|
|
10
|
+
* This is a transfer of TRX contract.
|
|
11
|
+
*/
|
|
12
|
+
ContractType[ContractType["Transfer"] = 0] = "Transfer";
|
|
13
|
+
/**
|
|
14
|
+
* This is the multi-sig initialization contract.
|
|
15
|
+
*/
|
|
16
|
+
ContractType[ContractType["AccountPermissionUpdate"] = 1] = "AccountPermissionUpdate";
|
|
17
|
+
/**
|
|
18
|
+
* This is a smart contract type.
|
|
19
|
+
*/
|
|
20
|
+
ContractType[ContractType["TriggerSmartContract"] = 2] = "TriggerSmartContract";
|
|
21
|
+
/**
|
|
22
|
+
* This is the contract for freezeBuilder
|
|
23
|
+
*/
|
|
24
|
+
ContractType[ContractType["FreezeBalanceV2"] = 3] = "FreezeBalanceV2";
|
|
25
|
+
/**
|
|
26
|
+
* This is the contract for voting for witnesses
|
|
27
|
+
*/
|
|
28
|
+
ContractType[ContractType["VoteWitness"] = 4] = "VoteWitness";
|
|
29
|
+
/**
|
|
30
|
+
* This is the contract for unfreezing balances
|
|
31
|
+
*/
|
|
32
|
+
ContractType[ContractType["UnfreezeBalanceV2"] = 5] = "UnfreezeBalanceV2";
|
|
33
|
+
/**
|
|
34
|
+
* This is the contract for withdrawing expired unfrozen balances
|
|
35
|
+
*/
|
|
36
|
+
ContractType[ContractType["WithdrawExpireUnfreeze"] = 6] = "WithdrawExpireUnfreeze";
|
|
37
|
+
/**
|
|
38
|
+
* This is the contract for withdrawing reward balances
|
|
39
|
+
*/
|
|
40
|
+
ContractType[ContractType["WithdrawBalance"] = 7] = "WithdrawBalance";
|
|
41
|
+
/**
|
|
42
|
+
* This is the contract for delegating resource
|
|
43
|
+
*/
|
|
44
|
+
ContractType[ContractType["DelegateResourceContract"] = 8] = "DelegateResourceContract";
|
|
45
|
+
/**
|
|
46
|
+
* This is the contract for un-delegating resource
|
|
47
|
+
*/
|
|
48
|
+
ContractType[ContractType["UnDelegateResourceContract"] = 9] = "UnDelegateResourceContract";
|
|
49
|
+
})(ContractType || (exports.ContractType = ContractType = {}));
|
|
50
|
+
var PermissionType;
|
|
51
|
+
(function (PermissionType) {
|
|
52
|
+
PermissionType[PermissionType["Owner"] = 0] = "Owner";
|
|
53
|
+
PermissionType[PermissionType["Witness"] = 1] = "Witness";
|
|
54
|
+
PermissionType[PermissionType["Active"] = 2] = "Active";
|
|
55
|
+
})(PermissionType || (exports.PermissionType = PermissionType = {}));
|
|
56
|
+
/**
|
|
57
|
+
* Tron resource types
|
|
58
|
+
*/
|
|
59
|
+
var TronResource;
|
|
60
|
+
(function (TronResource) {
|
|
61
|
+
TronResource["BANDWIDTH"] = "BANDWIDTH";
|
|
62
|
+
TronResource["ENERGY"] = "ENERGY";
|
|
63
|
+
})(TronResource || (exports.TronResource = TronResource = {}));
|
|
64
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW51bS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvZW51bS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQTs7R0FFRztBQUNILElBQVksWUF5Q1g7QUF6Q0QsV0FBWSxZQUFZO0lBQ3RCOztPQUVHO0lBQ0gsdURBQVEsQ0FBQTtJQUNSOztPQUVHO0lBQ0gscUZBQXVCLENBQUE7SUFDdkI7O09BRUc7SUFDSCwrRUFBb0IsQ0FBQTtJQUNwQjs7T0FFRztJQUNILHFFQUFlLENBQUE7SUFDZjs7T0FFRztJQUNILDZEQUFXLENBQUE7SUFDWDs7T0FFRztJQUNILHlFQUFpQixDQUFBO0lBQ2pCOztPQUVHO0lBQ0gsbUZBQXNCLENBQUE7SUFDdEI7O09BRUc7SUFDSCxxRUFBZSxDQUFBO0lBQ2Y7O09BRUc7SUFDSCx1RkFBd0IsQ0FBQTtJQUN4Qjs7T0FFRztJQUNILDJGQUEwQixDQUFBO0FBQzVCLENBQUMsRUF6Q1csWUFBWSw0QkFBWixZQUFZLFFBeUN2QjtBQUVELElBQVksY0FJWDtBQUpELFdBQVksY0FBYztJQUN4QixxREFBSyxDQUFBO0lBQ0wseURBQU8sQ0FBQTtJQUNQLHVEQUFNLENBQUE7QUFDUixDQUFDLEVBSlcsY0FBYyw4QkFBZCxjQUFjLFFBSXpCO0FBRUQ7O0dBRUc7QUFDSCxJQUFZLFlBR1g7QUFIRCxXQUFZLFlBQVk7SUFDdEIsdUNBQXVCLENBQUE7SUFDdkIsaUNBQWlCLENBQUE7QUFDbkIsQ0FBQyxFQUhXLFlBQVksNEJBQVosWUFBWSxRQUd2QiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29udHJhY3QgdHlwZSBkZXNjcmliZXMgYSBjbGFzcyBvZiBjb250cmFjdCBpbiBhIFRyYW5zYWN0aW9uLiBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIHRvIGlkZW50aWZ5IHdoYXQgdGhlIENvbnRyYWN0IGlzLlxuICovXG5leHBvcnQgZW51bSBDb250cmFjdFR5cGUge1xuICAvKipcbiAgICogVGhpcyBpcyBhIHRyYW5zZmVyIG9mIFRSWCBjb250cmFjdC5cbiAgICovXG4gIFRyYW5zZmVyLFxuICAvKipcbiAgICogVGhpcyBpcyB0aGUgbXVsdGktc2lnIGluaXRpYWxpemF0aW9uIGNvbnRyYWN0LlxuICAgKi9cbiAgQWNjb3VudFBlcm1pc3Npb25VcGRhdGUsXG4gIC8qKlxuICAgKiBUaGlzIGlzIGEgc21hcnQgY29udHJhY3QgdHlwZS5cbiAgICovXG4gIFRyaWdnZXJTbWFydENvbnRyYWN0LFxuICAvKipcbiAgICogVGhpcyBpcyB0aGUgY29udHJhY3QgZm9yIGZyZWV6ZUJ1aWxkZXJcbiAgICovXG4gIEZyZWV6ZUJhbGFuY2VWMixcbiAgLyoqXG4gICAqIFRoaXMgaXMgdGhlIGNvbnRyYWN0IGZvciB2b3RpbmcgZm9yIHdpdG5lc3Nlc1xuICAgKi9cbiAgVm90ZVdpdG5lc3MsXG4gIC8qKlxuICAgKiBUaGlzIGlzIHRoZSBjb250cmFjdCBmb3IgdW5mcmVlemluZyBiYWxhbmNlc1xuICAgKi9cbiAgVW5mcmVlemVCYWxhbmNlVjIsXG4gIC8qKlxuICAgKiBUaGlzIGlzIHRoZSBjb250cmFjdCBmb3Igd2l0aGRyYXdpbmcgZXhwaXJlZCB1bmZyb3plbiBiYWxhbmNlc1xuICAgKi9cbiAgV2l0aGRyYXdFeHBpcmVVbmZyZWV6ZSxcbiAgLyoqXG4gICAqIFRoaXMgaXMgdGhlIGNvbnRyYWN0IGZvciB3aXRoZHJhd2luZyByZXdhcmQgYmFsYW5jZXNcbiAgICovXG4gIFdpdGhkcmF3QmFsYW5jZSxcbiAgLyoqXG4gICAqIFRoaXMgaXMgdGhlIGNvbnRyYWN0IGZvciBkZWxlZ2F0aW5nIHJlc291cmNlXG4gICAqL1xuICBEZWxlZ2F0ZVJlc291cmNlQ29udHJhY3QsXG4gIC8qKlxuICAgKiBUaGlzIGlzIHRoZSBjb250cmFjdCBmb3IgdW4tZGVsZWdhdGluZyByZXNvdXJjZVxuICAgKi9cbiAgVW5EZWxlZ2F0ZVJlc291cmNlQ29udHJhY3QsXG59XG5cbmV4cG9ydCBlbnVtIFBlcm1pc3Npb25UeXBlIHtcbiAgT3duZXIsXG4gIFdpdG5lc3MsXG4gIEFjdGl2ZSxcbn1cblxuLyoqXG4gKiBUcm9uIHJlc291cmNlIHR5cGVzXG4gKi9cbmV4cG9ydCBlbnVtIFRyb25SZXNvdXJjZSB7XG4gIEJBTkRXSURUSCA9ICdCQU5EV0lEVEgnLFxuICBFTkVSR1kgPSAnRU5FUkdZJyxcbn1cbiJdfQ==
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { TransactionType, BaseKey } from '@bitgo-beta/sdk-core';
|
|
2
|
+
import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
|
|
3
|
+
import { TransactionBuilder } from './transactionBuilder';
|
|
4
|
+
import { Transaction } from './transaction';
|
|
5
|
+
import { TransactionReceipt, FreezeBalanceV2Contract } from './iface';
|
|
6
|
+
export declare class FreezeBalanceTxBuilder extends TransactionBuilder {
|
|
7
|
+
protected _signingKeys: BaseKey[];
|
|
8
|
+
private _frozenBalance;
|
|
9
|
+
private _resource;
|
|
10
|
+
constructor(_coinConfig: Readonly<CoinConfig>);
|
|
11
|
+
/** @inheritdoc */
|
|
12
|
+
protected get transactionType(): TransactionType;
|
|
13
|
+
/**
|
|
14
|
+
* Set the frozen balance amount
|
|
15
|
+
*
|
|
16
|
+
* @param amount amount in TRX to freeze
|
|
17
|
+
* @returns the builder with the new parameter set
|
|
18
|
+
*/
|
|
19
|
+
setFrozenBalance(amount: string): this;
|
|
20
|
+
/**
|
|
21
|
+
* Set the resource type
|
|
22
|
+
*
|
|
23
|
+
* @param resource resource type to freeze
|
|
24
|
+
* @returns the builder with the new parameter set
|
|
25
|
+
*/
|
|
26
|
+
setResource(resource: string): this;
|
|
27
|
+
/** @inheritdoc */
|
|
28
|
+
extendValidTo(extensionMs: number): void;
|
|
29
|
+
/**
|
|
30
|
+
* Initialize the transaction builder fields using the transaction data
|
|
31
|
+
*
|
|
32
|
+
* @param {TransactionReceipt | string} rawTransaction the transaction data in a string or JSON format
|
|
33
|
+
* @returns {FreezeBalanceTxBuilder} the builder with the transaction data set
|
|
34
|
+
*/
|
|
35
|
+
initBuilder(rawTransaction: TransactionReceipt | string): this;
|
|
36
|
+
/**
|
|
37
|
+
* Initialize the freeze contract call specific data
|
|
38
|
+
*
|
|
39
|
+
* @param {FreezeBalanceV2Contract} freezeContractCall object with freeze txn data
|
|
40
|
+
*/
|
|
41
|
+
protected initFreezeContractCall(freezeContractCall: FreezeBalanceV2Contract): void;
|
|
42
|
+
protected buildImplementation(): Promise<Transaction>;
|
|
43
|
+
/**
|
|
44
|
+
* Helper method to create the freeze balance transaction
|
|
45
|
+
*/
|
|
46
|
+
private createFreezeBalanceTransaction;
|
|
47
|
+
/**
|
|
48
|
+
* Helper method to get the freeze balance transaction raw data hex
|
|
49
|
+
*
|
|
50
|
+
* @returns {string} the freeze balance transaction raw data hex
|
|
51
|
+
*/
|
|
52
|
+
private getFreezeRawDataHex;
|
|
53
|
+
/** @inheritdoc */
|
|
54
|
+
protected signImplementation(key: BaseKey): Transaction;
|
|
55
|
+
private applySignatures;
|
|
56
|
+
/**
|
|
57
|
+
* Validates the transaction
|
|
58
|
+
*
|
|
59
|
+
* @param {Transaction} transaction - The transaction to validate
|
|
60
|
+
* @throws {InvalidTransactionError} when the transaction is invalid
|
|
61
|
+
*/
|
|
62
|
+
validateTransaction(transaction: Transaction): void;
|
|
63
|
+
/**
|
|
64
|
+
* Validates if the transaction is a valid freeze transaction
|
|
65
|
+
*
|
|
66
|
+
* @param {TransactionReceipt} transaction - The transaction to validate
|
|
67
|
+
* @throws {BuildTransactionError} when the transaction is invalid
|
|
68
|
+
*/
|
|
69
|
+
private validateFreezeTransactionFields;
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=freezeBalanceTxBuilder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"freezeBalanceTxBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/freezeBalanceTxBuilder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,OAAO,EAA+D,MAAM,sBAAsB,CAAC;AAC7H,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAYtE,qBAAa,sBAAuB,SAAQ,kBAAkB;IAC5D,SAAS,CAAC,YAAY,EAAE,OAAO,EAAE,CAAC;IAClC,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,SAAS,CAAS;gBAEd,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAM7C,kBAAkB;IAClB,SAAS,KAAK,eAAe,IAAI,eAAe,CAE/C;IAED;;;;;OAKG;IACH,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAKtC;;;;;OAKG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAMnC,kBAAkB;IAClB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAoBxC;;;;;OAKG;IACH,WAAW,CAAC,cAAc,EAAE,kBAAkB,GAAG,MAAM,GAAG,IAAI;IAkB9D;;;;OAIG;IACH,SAAS,CAAC,sBAAsB,CAAC,kBAAkB,EAAE,uBAAuB,GAAG,IAAI;cAenE,mBAAmB,IAAI,OAAO,CAAC,WAAW,CAAC;IAc3D;;OAEG;IACH,OAAO,CAAC,8BAA8B;IAqBtC;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IA0B3B,kBAAkB;IAClB,SAAS,CAAC,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,WAAW;IAUvD,OAAO,CAAC,eAAe;IAQvB;;;;;OAKG;IACH,mBAAmB,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;IAInD;;;;;OAKG;IACH,OAAO,CAAC,+BAA+B;CAiBxC"}
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FreezeBalanceTxBuilder = void 0;
|
|
4
|
+
const crypto_1 = require("crypto");
|
|
5
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
6
|
+
const transactionBuilder_1 = require("./transactionBuilder");
|
|
7
|
+
const transaction_1 = require("./transaction");
|
|
8
|
+
const utils_1 = require("./utils");
|
|
9
|
+
const tron_1 = require("../../resources/protobuf/tron");
|
|
10
|
+
var ContractType = tron_1.protocol.Transaction.Contract.ContractType;
|
|
11
|
+
class FreezeBalanceTxBuilder extends transactionBuilder_1.TransactionBuilder {
|
|
12
|
+
constructor(_coinConfig) {
|
|
13
|
+
super(_coinConfig);
|
|
14
|
+
this._signingKeys = [];
|
|
15
|
+
this.transaction = new transaction_1.Transaction(_coinConfig);
|
|
16
|
+
}
|
|
17
|
+
/** @inheritdoc */
|
|
18
|
+
get transactionType() {
|
|
19
|
+
return sdk_core_1.TransactionType.StakingActivate;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Set the frozen balance amount
|
|
23
|
+
*
|
|
24
|
+
* @param amount amount in TRX to freeze
|
|
25
|
+
* @returns the builder with the new parameter set
|
|
26
|
+
*/
|
|
27
|
+
setFrozenBalance(amount) {
|
|
28
|
+
this._frozenBalance = amount;
|
|
29
|
+
return this;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Set the resource type
|
|
33
|
+
*
|
|
34
|
+
* @param resource resource type to freeze
|
|
35
|
+
* @returns the builder with the new parameter set
|
|
36
|
+
*/
|
|
37
|
+
setResource(resource) {
|
|
38
|
+
this.validateResource(resource);
|
|
39
|
+
this._resource = resource;
|
|
40
|
+
return this;
|
|
41
|
+
}
|
|
42
|
+
/** @inheritdoc */
|
|
43
|
+
extendValidTo(extensionMs) {
|
|
44
|
+
if (this.transaction.signature && this.transaction.signature.length > 0) {
|
|
45
|
+
throw new sdk_core_1.ExtendTransactionError('Cannot extend a signed transaction');
|
|
46
|
+
}
|
|
47
|
+
if (extensionMs <= 0) {
|
|
48
|
+
throw new Error('Value cannot be below zero');
|
|
49
|
+
}
|
|
50
|
+
if (extensionMs > utils_1.TRANSACTION_MAX_EXPIRATION) {
|
|
51
|
+
throw new sdk_core_1.ExtendTransactionError('The expiration cannot be extended more than one year');
|
|
52
|
+
}
|
|
53
|
+
if (this._expiration) {
|
|
54
|
+
this._expiration = this._expiration + extensionMs;
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
throw new Error('There is not expiration to extend');
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Initialize the transaction builder fields using the transaction data
|
|
62
|
+
*
|
|
63
|
+
* @param {TransactionReceipt | string} rawTransaction the transaction data in a string or JSON format
|
|
64
|
+
* @returns {FreezeBalanceTxBuilder} the builder with the transaction data set
|
|
65
|
+
*/
|
|
66
|
+
initBuilder(rawTransaction) {
|
|
67
|
+
this.transaction = this.fromImplementation(rawTransaction);
|
|
68
|
+
this.transaction.setTransactionType(this.transactionType);
|
|
69
|
+
this.validateRawTransaction(rawTransaction);
|
|
70
|
+
const tx = this.fromImplementation(rawTransaction);
|
|
71
|
+
this.transaction = tx;
|
|
72
|
+
this._signingKeys = [];
|
|
73
|
+
const rawData = tx.toJson().raw_data;
|
|
74
|
+
this._refBlockBytes = rawData.ref_block_bytes;
|
|
75
|
+
this._refBlockHash = rawData.ref_block_hash;
|
|
76
|
+
this._expiration = rawData.expiration;
|
|
77
|
+
this._timestamp = rawData.timestamp;
|
|
78
|
+
this.transaction.setTransactionType(sdk_core_1.TransactionType.StakingActivate);
|
|
79
|
+
const contractCall = rawData.contract[0];
|
|
80
|
+
this.initFreezeContractCall(contractCall);
|
|
81
|
+
return this;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Initialize the freeze contract call specific data
|
|
85
|
+
*
|
|
86
|
+
* @param {FreezeBalanceV2Contract} freezeContractCall object with freeze txn data
|
|
87
|
+
*/
|
|
88
|
+
initFreezeContractCall(freezeContractCall) {
|
|
89
|
+
const { resource, owner_address, frozen_balance } = freezeContractCall.parameter.value;
|
|
90
|
+
if (owner_address) {
|
|
91
|
+
this.source({ address: (0, utils_1.getBase58AddressFromHex)(owner_address) });
|
|
92
|
+
}
|
|
93
|
+
if (resource) {
|
|
94
|
+
this.setResource(resource);
|
|
95
|
+
}
|
|
96
|
+
if (frozen_balance) {
|
|
97
|
+
this.setFrozenBalance(frozen_balance.toString());
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
async buildImplementation() {
|
|
101
|
+
this.createFreezeBalanceTransaction();
|
|
102
|
+
/** @inheritdoccreateTransaction */
|
|
103
|
+
// This method must be extended on child classes
|
|
104
|
+
if (this._signingKeys.length > 0) {
|
|
105
|
+
this.applySignatures();
|
|
106
|
+
}
|
|
107
|
+
if (!this.transaction.id) {
|
|
108
|
+
throw new sdk_core_1.BuildTransactionError('A valid transaction must have an id');
|
|
109
|
+
}
|
|
110
|
+
return Promise.resolve(this.transaction);
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Helper method to create the freeze balance transaction
|
|
114
|
+
*/
|
|
115
|
+
createFreezeBalanceTransaction() {
|
|
116
|
+
const rawDataHex = this.getFreezeRawDataHex();
|
|
117
|
+
const rawData = (0, utils_1.decodeTransaction)(rawDataHex);
|
|
118
|
+
const contract = rawData.contract[0];
|
|
119
|
+
const contractParameter = contract.parameter;
|
|
120
|
+
contractParameter.value.owner_address = this._ownerAddress.toLocaleLowerCase();
|
|
121
|
+
contractParameter.value.frozen_balance = Number(this._frozenBalance);
|
|
122
|
+
contractParameter.value.resource = this._resource;
|
|
123
|
+
contractParameter.type_url = 'type.googleapis.com/protocol.FreezeBalanceV2Contract';
|
|
124
|
+
contract.type = 'FreezeBalanceV2Contract';
|
|
125
|
+
const hexBuffer = Buffer.from(rawDataHex, 'hex');
|
|
126
|
+
const id = (0, crypto_1.createHash)('sha256').update(hexBuffer).digest('hex');
|
|
127
|
+
const txRecip = {
|
|
128
|
+
raw_data: rawData,
|
|
129
|
+
raw_data_hex: rawDataHex,
|
|
130
|
+
txID: id,
|
|
131
|
+
signature: this.transaction.signature,
|
|
132
|
+
};
|
|
133
|
+
this.transaction = new transaction_1.Transaction(this._coinConfig, txRecip);
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Helper method to get the freeze balance transaction raw data hex
|
|
137
|
+
*
|
|
138
|
+
* @returns {string} the freeze balance transaction raw data hex
|
|
139
|
+
*/
|
|
140
|
+
getFreezeRawDataHex() {
|
|
141
|
+
const rawContract = {
|
|
142
|
+
ownerAddress: (0, utils_1.getByteArrayFromHexAddress)(this._ownerAddress),
|
|
143
|
+
frozenBalance: this._frozenBalance,
|
|
144
|
+
resource: this._resource,
|
|
145
|
+
};
|
|
146
|
+
const freezeContract = tron_1.protocol.FreezeBalanceV2Contract.fromObject(rawContract);
|
|
147
|
+
const freezeContractBytes = tron_1.protocol.FreezeBalanceV2Contract.encode(freezeContract).finish();
|
|
148
|
+
const txContract = {
|
|
149
|
+
type: ContractType.FreezeBalanceV2Contract,
|
|
150
|
+
parameter: {
|
|
151
|
+
value: freezeContractBytes,
|
|
152
|
+
type_url: 'type.googleapis.com/protocol.FreezeBalanceV2Contract',
|
|
153
|
+
},
|
|
154
|
+
};
|
|
155
|
+
const raw = {
|
|
156
|
+
refBlockBytes: Buffer.from(this._refBlockBytes, 'hex'),
|
|
157
|
+
refBlockHash: Buffer.from(this._refBlockHash, 'hex'),
|
|
158
|
+
expiration: this._expiration || Date.now() + utils_1.TRANSACTION_DEFAULT_EXPIRATION,
|
|
159
|
+
timestamp: this._timestamp || Date.now(),
|
|
160
|
+
contract: [txContract],
|
|
161
|
+
};
|
|
162
|
+
const rawTx = tron_1.protocol.Transaction.raw.create(raw);
|
|
163
|
+
return Buffer.from(tron_1.protocol.Transaction.raw.encode(rawTx).finish()).toString('hex');
|
|
164
|
+
}
|
|
165
|
+
/** @inheritdoc */
|
|
166
|
+
signImplementation(key) {
|
|
167
|
+
if (this._signingKeys.some((signingKey) => signingKey.key === key.key)) {
|
|
168
|
+
throw new sdk_core_1.SigningError('Duplicated key');
|
|
169
|
+
}
|
|
170
|
+
this._signingKeys.push(key);
|
|
171
|
+
// We keep this return for compatibility but is not meant to be use
|
|
172
|
+
return this.transaction;
|
|
173
|
+
}
|
|
174
|
+
applySignatures() {
|
|
175
|
+
if (!this.transaction.inputs) {
|
|
176
|
+
throw new sdk_core_1.SigningError('Transaction has no inputs');
|
|
177
|
+
}
|
|
178
|
+
this._signingKeys.forEach((key) => this.applySignature(key));
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Validates the transaction
|
|
182
|
+
*
|
|
183
|
+
* @param {Transaction} transaction - The transaction to validate
|
|
184
|
+
* @throws {InvalidTransactionError} when the transaction is invalid
|
|
185
|
+
*/
|
|
186
|
+
validateTransaction(transaction) {
|
|
187
|
+
this.validateFreezeTransactionFields();
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Validates if the transaction is a valid freeze transaction
|
|
191
|
+
*
|
|
192
|
+
* @param {TransactionReceipt} transaction - The transaction to validate
|
|
193
|
+
* @throws {BuildTransactionError} when the transaction is invalid
|
|
194
|
+
*/
|
|
195
|
+
validateFreezeTransactionFields() {
|
|
196
|
+
if (!this._frozenBalance) {
|
|
197
|
+
throw new sdk_core_1.BuildTransactionError('Missing parameter: frozenBalance');
|
|
198
|
+
}
|
|
199
|
+
if (!this._ownerAddress) {
|
|
200
|
+
throw new sdk_core_1.BuildTransactionError('Missing parameter: source');
|
|
201
|
+
}
|
|
202
|
+
if (!this._resource) {
|
|
203
|
+
throw new sdk_core_1.BuildTransactionError('Missing parameter: resource');
|
|
204
|
+
}
|
|
205
|
+
if (!this._refBlockBytes || !this._refBlockHash) {
|
|
206
|
+
throw new sdk_core_1.BuildTransactionError('Missing block reference information');
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
exports.FreezeBalanceTxBuilder = FreezeBalanceTxBuilder;
|
|
211
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJlZXplQmFsYW5jZVR4QnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvZnJlZXplQmFsYW5jZVR4QnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBb0M7QUFDcEMsbURBQTZIO0FBRTdILDZEQUEwRDtBQUMxRCwrQ0FBNEM7QUFFNUMsbUNBTWlCO0FBQ2pCLHdEQUF5RDtBQUV6RCxJQUFPLFlBQVksR0FBRyxlQUFRLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUM7QUFFakUsTUFBYSxzQkFBdUIsU0FBUSx1Q0FBa0I7SUFLNUQsWUFBWSxXQUFpQztRQUMzQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbkIsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLHlCQUFXLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixJQUFjLGVBQWU7UUFDM0IsT0FBTywwQkFBZSxDQUFDLGVBQWUsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxnQkFBZ0IsQ0FBQyxNQUFjO1FBQzdCLElBQUksQ0FBQyxjQUFjLEdBQUcsTUFBTSxDQUFDO1FBQzdCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsV0FBVyxDQUFDLFFBQWdCO1FBQzFCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQztRQUMxQixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsYUFBYSxDQUFDLFdBQW1CO1FBQy9CLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFH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K0I7UUFDckMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN6QixNQUFNLElBQUksZ0NBQXFCLENBQUMsa0NBQWtDLENBQUMsQ0FBQztRQUN0RSxDQUFDO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN4QixNQUFNLElBQUksZ0NBQXFCLENBQUMsMkJBQTJCLENBQUMsQ0FBQztRQUMvRCxDQUFDO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNwQixNQUFNLElBQUksZ0NBQXFCLENBQUMsNkJBQTZCLENBQUMsQ0FBQztRQUNqRSxDQUFDO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDaEQsTUFBTSxJQUFJLGdDQUFxQixDQUFDLHFDQUFxQyxDQUFDLENBQUM7UUFDekUsQ0FBQztJQUNILENBQUM7Q0FDRjtBQWpPRCx3REFpT0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVIYXNoIH0gZnJvbSAnY3J5cHRvJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uVHlwZSwgQmFzZUtleSwgRXh0ZW5kVHJhbnNhY3Rpb25FcnJvciwgQnVpbGRUcmFuc2FjdGlvbkVycm9yLCBTaWduaW5nRXJyb3IgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXIgfSBmcm9tICcuL3RyYW5zYWN0aW9uQnVpbGRlcic7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25SZWNlaXB0LCBGcmVlemVCYWxhbmNlVjJDb250cmFjdCB9IGZyb20gJy4vaWZhY2UnO1xuaW1wb3J0IHtcbiAgZGVjb2RlVHJhbnNhY3Rpb24sXG4gIGdldEJ5dGVBcnJheUZyb21IZXhBZGRyZXNzLFxuICBnZXRCYXNlNThBZGRyZXNzRnJvbUhleCxcbiAgVFJBTlNBQ1RJT05fTUFYX0VYUElSQVRJT04sXG4gIFRSQU5TQUNUSU9OX0RFRkFVTFRfRVhQSVJBVElPTixcbn0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBwcm90b2NvbCB9IGZyb20gJy4uLy4uL3Jlc291cmNlcy9wcm90b2J1Zi90cm9uJztcblxuaW1wb3J0IENvbnRyYWN0VHlwZSA9IHByb3RvY29sLlRyYW5zYWN0aW9uLkNvbnRyYWN0LkNvbnRyYWN0VHlwZTtcblxuZXhwb3J0IGNsYXNzIEZyZWV6ZUJhbGFuY2VUeEJ1aWxkZXIgZXh0ZW5kcyBUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICBwcm90ZWN0ZWQgX3NpZ25pbmdLZXlzOiBCYXNlS2V5W107XG4gIHByaXZhdGUgX2Zyb3plbkJhbGFuY2U6IHN0cmluZztcbiAgcHJpdmF0ZSBfcmVzb3VyY2U6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihfY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihfY29pbkNvbmZpZyk7XG4gICAgdGhpcy5fc2lnbmluZ0tleXMgPSBbXTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uKF9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgZ2V0IHRyYW5zYWN0aW9uVHlwZSgpOiBUcmFuc2FjdGlvblR5cGUge1xuICAgIHJldHVybiBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0FjdGl2YXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgZnJvemVuIGJhbGFuY2UgYW1vdW50XG4gICAqXG4gICAqIEBwYXJhbSBhbW91bnQgYW1vdW50IGluIFRSWCB0byBmcmVlemVcbiAgICogQHJldHVybnMgdGhlIGJ1aWxkZXIgd2l0aCB0aGUgbmV3IHBhcmFtZXRlciBzZXRcbiAgICovXG4gIHNldEZyb3plbkJhbGFuY2UoYW1vdW50OiBzdHJpbmcpOiB0aGlzIHtcbiAgICB0aGlzLl9mcm96ZW5CYWxhbmNlID0gYW1vdW50O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgcmVzb3VyY2UgdHlwZVxuICAgKlxuICAgKiBAcGFyYW0gcmVzb3VyY2UgcmVzb3VyY2UgdHlwZSB0byBmcmVlemVcbiAgICogQHJldHVybnMgdGhlIGJ1aWxkZXIgd2l0aCB0aGUgbmV3IHBhcmFtZXRlciBzZXRcbiAgICovXG4gIHNldFJlc291cmNlKHJlc291cmNlOiBzdHJpbmcpOiB0aGlzIHtcbiAgICB0aGlzLnZhbGlkYXRlUmVzb3VyY2UocmVzb3VyY2UpO1xuICAgIHRoaXMuX3Jlc291cmNlID0gcmVzb3VyY2U7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgZXh0ZW5kVmFsaWRUbyhleHRlbnNpb25NczogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudHJhbnNhY3Rpb24uc2lnbmF0dXJlICYmIHRoaXMudHJhbnNhY3Rpb24uc2lnbmF0dXJlLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IG5ldyBFeHRlbmRUcmFuc2FjdGlvbkVycm9yKCdDYW5ub3QgZXh0ZW5kIGEgc2lnbmVkIHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuXG4gICAgaWYgKGV4dGVuc2lvbk1zIDw9IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVmFsdWUgY2Fubm90IGJlIGJlbG93IHplcm8nKTtcbiAgICB9XG5cbiAgICBpZiAoZXh0ZW5zaW9uTXMgPiBUUkFOU0FDVElPTl9NQVhfRVhQSVJBVElPTikge1xuICAgICAgdGhyb3cgbmV3IEV4dGVuZFRyYW5zYWN0aW9uRXJyb3IoJ1RoZSBleHBpcmF0aW9uIGNhbm5vdCBiZSBleHRlbmRlZCBtb3JlIHRoYW4gb25lIHllYXInKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fZXhwaXJhdGlvbikge1xuICAgICAgdGhpcy5fZXhwaXJhdGlvbiA9IHRoaXMuX2V4cGlyYXRpb24gKyBleHRlbnNpb25NcztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGVyZSBpcyBub3QgZXhwaXJhdGlvbiB0byBleHRlbmQnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSB0aGUgdHJhbnNhY3Rpb24gYnVpbGRlciBmaWVsZHMgdXNpbmcgdGhlIHRyYW5zYWN0aW9uIGRhdGFcbiAgICpcbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvblJlY2VpcHQgfCBzdHJpbmd9IHJhd1RyYW5zYWN0aW9uIHRoZSB0cmFuc2FjdGlvbiBkYXRhIGluIGEgc3RyaW5nIG9yIEpTT04gZm9ybWF0XG4gICAqIEByZXR1cm5zIHtGcmVlemVCYWxhbmNlVHhCdWlsZGVyfSB0aGUgYnVpbGRlciB3aXRoIHRoZSB0cmFuc2FjdGlvbiBkYXRhIHNldFxuICAgKi9cbiAgaW5pdEJ1aWxkZXIocmF3VHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uUmVjZWlwdCB8IHN0cmluZyk6IHRoaXMge1xuICAgIHRoaXMudHJhbnNhY3Rpb24gPSB0aGlzLmZyb21JbXBsZW1lbnRhdGlvbihyYXdUcmFuc2FjdGlvbik7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5zZXRUcmFuc2FjdGlvblR5cGUodGhpcy50cmFuc2FjdGlvblR5cGUpO1xuICAgIHRoaXMudmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbik7XG4gICAgY29uc3QgdHggPSB0aGlzLmZyb21JbXBsZW1lbnRhdGlvbihyYXdUcmFuc2FjdGlvbik7XG4gICAgdGhpcy50cmFuc2FjdGlvbiA9IHR4O1xuICAgIHRoaXMuX3NpZ25pbmdLZXlzID0gW107XG4gICAgY29uc3QgcmF3RGF0YSA9IHR4LnRvSnNvbigpLnJhd19kYXRhO1xuICAgIHRoaXMuX3JlZkJsb2NrQnl0ZXMgPSByYXdEYXRhLnJlZl9ibG9ja19ieXRlcztcbiAgICB0aGlzLl9yZWZCbG9ja0hhc2ggPSByYXdEYXRhLnJlZl9ibG9ja19oYXNoO1xuICAgIHRoaXMuX2V4cGlyYXRpb24gPSByYXdEYXRhLmV4cGlyYXRpb247XG4gICAgdGhpcy5fdGltZXN0YW1wID0gcmF3RGF0YS50aW1lc3RhbXA7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5zZXRUcmFuc2FjdGlvblR5cGUoVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdBY3RpdmF0ZSk7XG4gICAgY29uc3QgY29udHJhY3RDYWxsID0gcmF3RGF0YS5jb250cmFjdFswXSBhcyBGcmVlemVCYWxhbmNlVjJDb250cmFjdDtcbiAgICB0aGlzLmluaXRGcmVlemVDb250cmFjdENhbGwoY29udHJhY3RDYWxsKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIHRoZSBmcmVlemUgY29udHJhY3QgY2FsbCBzcGVjaWZpYyBkYXRhXG4gICAqXG4gICAqIEBwYXJhbSB7RnJlZXplQmFsYW5jZVYyQ29udHJhY3R9IGZyZWV6ZUNvbnRyYWN0Q2FsbCBvYmplY3Qgd2l0aCBmcmVlemUgdHhuIGRhdGFcbiAgICovXG4gIHByb3RlY3RlZCBpbml0RnJlZXplQ29udHJhY3RDYWxsKGZyZWV6ZUNvbnRyYWN0Q2FsbDogRnJlZXplQmFsYW5jZVYyQ29udHJhY3QpOiB2b2lkIHtcbiAgICBjb25zdCB7IHJlc291cmNlLCBvd25lcl9hZGRyZXNzLCBmcm96ZW5fYmFsYW5jZSB9ID0gZnJlZXplQ29udHJhY3RDYWxsLnBhcmFtZXRlci52YWx1ZTtcbiAgICBpZiAob3duZXJfYWRkcmVzcykge1xuICAgICAgdGhpcy5zb3VyY2UoeyBhZGRyZXNzOiBnZXRCYXNlNThBZGRyZXNzRnJvbUhleChvd25lcl9hZGRyZXNzKSB9KTtcbiAgICB9XG5cbiAgICBpZiAocmVzb3VyY2UpIHtcbiAgICAgIHRoaXMuc2V0UmVzb3VyY2UocmVzb3VyY2UpO1xuICAgIH1cblxuICAgIGlmIChmcm96ZW5fYmFsYW5jZSkge1xuICAgICAgdGhpcy5zZXRGcm96ZW5CYWxhbmNlKGZyb3plbl9iYWxhbmNlLnRvU3RyaW5nKCkpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBidWlsZEltcGxlbWVudGF0aW9uKCk6IFByb21pc2U8VHJhbnNhY3Rpb24+IHtcbiAgICB0aGlzLmNyZWF0ZUZyZWV6ZUJhbGFuY2VUcmFuc2FjdGlvbigpO1xuICAgIC8qKiBAaW5oZXJpdGRvY2NyZWF0ZVRyYW5zYWN0aW9uICovXG4gICAgLy8gVGhpcyBtZXRob2QgbXVzdCBiZSBleHRlbmRlZCBvbiBjaGlsZCBjbGFzc2VzXG4gICAgaWYgKHRoaXMuX3NpZ25pbmdLZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuYXBwbHlTaWduYXR1cmVzKCk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnRyYW5zYWN0aW9uLmlkKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdBIHZhbGlkIHRyYW5zYWN0aW9uIG11c3QgaGF2ZSBhbiBpZCcpO1xuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMudHJhbnNhY3Rpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIEhlbHBlciBtZXRob2QgdG8gY3JlYXRlIHRoZSBmcmVlemUgYmFsYW5jZSB0cmFuc2FjdGlvblxuICAgKi9cbiAgcHJpdmF0ZSBjcmVhdGVGcmVlemVCYWxhbmNlVHJhbnNhY3Rpb24oKTogdm9pZCB7XG4gICAgY29uc3QgcmF3RGF0YUhleCA9IHRoaXMuZ2V0RnJlZXplUmF3RGF0YUhleCgpO1xuICAgIGNvbnN0IHJhd0RhdGEgPSBkZWNvZGVUcmFuc2FjdGlvbihyYXdEYXRhSGV4KTtcbiAgICBjb25zdCBjb250cmFjdCA9IHJhd0RhdGEuY29udHJhY3RbMF0gYXMgRnJlZXplQmFsYW5jZVYyQ29udHJhY3Q7XG4gICAgY29uc3QgY29udHJhY3RQYXJhbWV0ZXIgPSBjb250cmFjdC5wYXJhbWV0ZXI7XG4gICAgY29udHJhY3RQYXJhbWV0ZXIudmFsdWUub3duZXJfYWRkcmVzcyA9IHRoaXMuX293bmVyQWRkcmVzcy50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgIGNvbnRyYWN0UGFyYW1ldGVyLnZhbHVlLmZyb3plbl9iYWxhbmNlID0gTnVtYmVyKHRoaXMuX2Zyb3plbkJhbGFuY2UpO1xuICAgIGNvbnRyYWN0UGFyYW1ldGVyLnZhbHVlLnJlc291cmNlID0gdGhpcy5fcmVzb3VyY2U7XG4gICAgY29udHJhY3RQYXJhbWV0ZXIudHlwZV91cmwgPSAndHlwZS5nb29nbGVhcGlzLmNvbS9wcm90b2NvbC5GcmVlemVCYWxhbmNlVjJDb250cmFjdCc7XG4gICAgY29udHJhY3QudHlwZSA9ICdGcmVlemVCYWxhbmNlVjJDb250cmFjdCc7XG4gICAgY29uc3QgaGV4QnVmZmVyID0gQnVmZmVyLmZyb20ocmF3RGF0YUhleCwgJ2hleCcpO1xuICAgIGNvbnN0IGlkID0gY3JlYXRlSGFzaCgnc2hhMjU2JykudXBkYXRlKGhleEJ1ZmZlcikuZGlnZXN0KCdoZXgnKTtcbiAgICBjb25zdCB0eFJlY2lwOiBUcmFuc2FjdGlvblJlY2VpcHQgPSB7XG4gICAgICByYXdfZGF0YTogcmF3RGF0YSxcbiAgICAgIHJhd19kYXRhX2hleDogcmF3RGF0YUhleCxcbiAgICAgIHR4SUQ6IGlkLFxuICAgICAgc2lnbmF0dXJlOiB0aGlzLnRyYW5zYWN0aW9uLnNpZ25hdHVyZSxcbiAgICB9O1xuICAgIHRoaXMudHJhbnNhY3Rpb24gPSBuZXcgVHJhbnNhY3Rpb24odGhpcy5fY29pbkNvbmZpZywgdHhSZWNpcCk7XG4gIH1cblxuICAvKipcbiAgICogSGVscGVyIG1ldGhvZCB0byBnZXQgdGhlIGZyZWV6ZSBiYWxhbmNlIHRyYW5zYWN0aW9uIHJhdyBkYXRhIGhleFxuICAgKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSB0aGUgZnJlZXplIGJhbGFuY2UgdHJhbnNhY3Rpb24gcmF3IGRhdGEgaGV4XG4gICAqL1xuICBwcml2YXRlIGdldEZyZWV6ZVJhd0RhdGFIZXgoKTogc3RyaW5nIHtcbiAgICBjb25zdCByYXdDb250cmFjdCA9IHtcbiAgICAgIG93bmVyQWRkcmVzczogZ2V0Qnl0ZUFycmF5RnJvbUhleEFkZHJlc3ModGhpcy5fb3duZXJBZGRyZXNzKSxcbiAgICAgIGZyb3plbkJhbGFuY2U6IHRoaXMuX2Zyb3plbkJhbGFuY2UsXG4gICAgICByZXNvdXJjZTogdGhpcy5fcmVzb3VyY2UsXG4gICAgfTtcbiAgICBjb25zdCBmcmVlemVDb250cmFjdCA9IHByb3RvY29sLkZyZWV6ZUJhbGFuY2VWMkNvbnRyYWN0LmZyb21PYmplY3QocmF3Q29udHJhY3QpO1xuICAgIGNvbnN0IGZyZWV6ZUNvbnRyYWN0Qnl0ZXMgPSBwcm90b2NvbC5GcmVlemVCYWxhbmNlVjJDb250cmFjdC5lbmNvZGUoZnJlZXplQ29udHJhY3QpLmZpbmlzaCgpO1xuICAgIGNvbnN0IHR4Q29udHJhY3QgPSB7XG4gICAgICB0eXBlOiBDb250cmFjdFR5cGUuRnJlZXplQmFsYW5jZVYyQ29udHJhY3QsXG4gICAgICBwYXJhbWV0ZXI6IHtcbiAgICAgICAgdmFsdWU6IGZyZWV6ZUNvbnRyYWN0Qnl0ZXMsXG4gICAgICAgIHR5cGVfdXJsOiAndHlwZS5nb29nbGVhcGlzLmNvbS9wcm90b2NvbC5GcmVlemVCYWxhbmNlVjJDb250cmFjdCcsXG4gICAgICB9LFxuICAgIH07XG4gICAgY29uc3QgcmF3ID0ge1xuICAgICAgcmVmQmxvY2tCeXRlczogQnVmZmVyLmZyb20odGhpcy5fcmVmQmxvY2tCeXRlcywgJ2hleCcpLFxuICAgICAgcmVmQmxvY2tIYXNoOiBCdWZmZXIuZnJvbSh0aGlzLl9yZWZCbG9ja0hhc2gsICdoZXgnKSxcbiAgICAgIGV4cGlyYXRpb246IHRoaXMuX2V4cGlyYXRpb24gfHwgRGF0ZS5ub3coKSArIFRSQU5TQUNUSU9OX0RFRkFVTFRfRVhQSVJBVElPTixcbiAgICAgIHRpbWVzdGFtcDogdGhpcy5fdGltZXN0YW1wIHx8IERhdGUubm93KCksXG4gICAgICBjb250cmFjdDogW3R4Q29udHJhY3RdLFxuICAgIH07XG4gICAgY29uc3QgcmF3VHggPSBwcm90b2NvbC5UcmFuc2FjdGlvbi5yYXcuY3JlYXRlKHJhdyk7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHByb3RvY29sLlRyYW5zYWN0aW9uLnJhdy5lbmNvZGUocmF3VHgpLmZpbmlzaCgpKS50b1N0cmluZygnaGV4Jyk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIHNpZ25JbXBsZW1lbnRhdGlvbihrZXk6IEJhc2VLZXkpOiBUcmFuc2FjdGlvbiB7XG4gICAgaWYgKHRoaXMuX3NpZ25pbmdLZXlzLnNvbWUoKHNpZ25pbmdLZXkpID0+IHNpZ25pbmdLZXkua2V5ID09PSBrZXkua2V5KSkge1xuICAgICAgdGhyb3cgbmV3IFNpZ25pbmdFcnJvcignRHVwbGljYXRlZCBrZXknKTtcbiAgICB9XG4gICAgdGhpcy5fc2lnbmluZ0tleXMucHVzaChrZXkpO1xuXG4gICAgLy8gV2Uga2VlcCB0aGlzIHJldHVybiBmb3IgY29tcGF0aWJpbGl0eSBidXQgaXMgbm90IG1lYW50IHRvIGJlIHVzZVxuICAgIHJldHVybiB0aGlzLnRyYW5zYWN0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseVNpZ25hdHVyZXMoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnRyYW5zYWN0aW9uLmlucHV0cykge1xuICAgICAgdGhyb3cgbmV3IFNpZ25pbmdFcnJvcignVHJhbnNhY3Rpb24gaGFzIG5vIGlucHV0cycpO1xuICAgIH1cblxuICAgIHRoaXMuX3NpZ25pbmdLZXlzLmZvckVhY2goKGtleSkgPT4gdGhpcy5hcHBseVNpZ25hdHVyZShrZXkpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIHRyYW5zYWN0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uIC0gVGhlIHRyYW5zYWN0aW9uIHRvIHZhbGlkYXRlXG4gICAqIEB0aHJvd3Mge0ludmFsaWRUcmFuc2FjdGlvbkVycm9yfSB3aGVuIHRoZSB0cmFuc2FjdGlvbiBpcyBpbnZhbGlkXG4gICAqL1xuICB2YWxpZGF0ZVRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbik6IHZvaWQge1xuICAgIHRoaXMudmFsaWRhdGVGcmVlemVUcmFuc2FjdGlvbkZpZWxkcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyBpZiB0aGUgdHJhbnNhY3Rpb24gaXMgYSB2YWxpZCBmcmVlemUgdHJhbnNhY3Rpb25cbiAgICpcbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvblJlY2VpcHR9IHRyYW5zYWN0aW9uIC0gVGhlIHRyYW5zYWN0aW9uIHRvIHZhbGlkYXRlXG4gICAqIEB0aHJvd3Mge0J1aWxkVHJhbnNhY3Rpb25FcnJvcn0gd2hlbiB0aGUgdHJhbnNhY3Rpb24gaXMgaW52YWxpZFxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZUZyZWV6ZVRyYW5zYWN0aW9uRmllbGRzKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fZnJvemVuQmFsYW5jZSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignTWlzc2luZyBwYXJhbWV0ZXI6IGZyb3plbkJhbGFuY2UnKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuX293bmVyQWRkcmVzcykge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignTWlzc2luZyBwYXJhbWV0ZXI6IHNvdXJjZScpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5fcmVzb3VyY2UpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ01pc3NpbmcgcGFyYW1ldGVyOiByZXNvdXJjZScpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5fcmVmQmxvY2tCeXRlcyB8fCAhdGhpcy5fcmVmQmxvY2tIYXNoKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdNaXNzaW5nIGJsb2NrIHJlZmVyZW5jZSBpbmZvcm1hdGlvbicpO1xuICAgIH1cbiAgfVxufVxuIl19
|