@bitgo/account-lib 2.17.2-rc.0.1 → 2.17.2-rc.4

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.
Files changed (107) hide show
  1. package/dist/browser/bitgo-account-lib.min.js +1 -1
  2. package/dist/browser/bitgo-account-lib.min.js.LICENSE.txt +136 -0
  3. package/dist/package.json +10 -3
  4. package/dist/resources/dot/index.ts +2 -0
  5. package/dist/resources/dot/mainnet.ts +2 -0
  6. package/dist/resources/dot/westend.ts +2 -0
  7. package/dist/resources/trx/protobuf/tron.js~account-lib_master +31380 -0
  8. package/dist/src/coin/algo/keyExclusionBuilder.d.ts +9 -0
  9. package/dist/src/coin/algo/keyExclusionBuilder.d.ts.map +1 -0
  10. package/dist/src/coin/algo/keyExclusionBuilder.js +83 -0
  11. package/dist/src/coin/algo/utils.d.ts +39 -22
  12. package/dist/src/coin/algo/utils.d.ts.map +1 -1
  13. package/dist/src/coin/algo/utils.js +88 -73
  14. package/dist/src/coin/baseCoin/baseTransaction.d.ts +8 -1
  15. package/dist/src/coin/baseCoin/baseTransaction.d.ts.map +1 -1
  16. package/dist/src/coin/baseCoin/baseTransaction.js +10 -1
  17. package/dist/src/coin/baseCoin/baseTransactionBuilder.d.ts.map +1 -1
  18. package/dist/src/coin/baseCoin/baseTransactionBuilder.js +1 -1
  19. package/dist/src/coin/baseCoin/iface.d.ts +28 -0
  20. package/dist/src/coin/baseCoin/iface.d.ts.map +1 -1
  21. package/dist/src/coin/baseCoin/iface.js +1 -1
  22. package/dist/src/coin/cspr/utils.js +2 -2
  23. package/dist/src/coin/dot/errors.d.ts +8 -0
  24. package/dist/src/coin/dot/errors.d.ts.map +1 -0
  25. package/dist/src/coin/dot/errors.js +40 -0
  26. package/dist/src/coin/dot/iface.d.ts +153 -0
  27. package/dist/src/coin/dot/iface.d.ts.map +1 -0
  28. package/dist/src/coin/dot/iface.js +15 -0
  29. package/dist/src/coin/dot/index.d.ts +6 -0
  30. package/dist/src/coin/dot/index.d.ts.map +1 -1
  31. package/dist/src/coin/dot/index.js +14 -2
  32. package/dist/src/coin/dot/keyPair.d.ts +15 -2
  33. package/dist/src/coin/dot/keyPair.d.ts.map +1 -1
  34. package/dist/src/coin/dot/keyPair.js +41 -6
  35. package/dist/src/coin/dot/stakingBuilder.d.ts +59 -0
  36. package/dist/src/coin/dot/stakingBuilder.d.ts.map +1 -0
  37. package/dist/src/coin/dot/stakingBuilder.js +157 -0
  38. package/dist/src/coin/dot/transaction.d.ts +31 -3
  39. package/dist/src/coin/dot/transaction.d.ts.map +1 -1
  40. package/dist/src/coin/dot/transaction.js +268 -7
  41. package/dist/src/coin/dot/transactionBuilder.d.ts +105 -9
  42. package/dist/src/coin/dot/transactionBuilder.d.ts.map +1 -1
  43. package/dist/src/coin/dot/transactionBuilder.js +311 -15
  44. package/dist/src/coin/dot/transactionBuilderFactory.d.ts +12 -16
  45. package/dist/src/coin/dot/transactionBuilderFactory.d.ts.map +1 -1
  46. package/dist/src/coin/dot/transactionBuilderFactory.js +60 -25
  47. package/dist/src/coin/dot/transferBuilder.d.ts +62 -4
  48. package/dist/src/coin/dot/transferBuilder.d.ts.map +1 -1
  49. package/dist/src/coin/dot/transferBuilder.js +158 -44
  50. package/dist/src/coin/dot/txnSchema.d.ts +10 -0
  51. package/dist/src/coin/dot/txnSchema.d.ts.map +1 -0
  52. package/dist/src/coin/dot/txnSchema.js +83 -0
  53. package/dist/src/coin/dot/unstakeBuilder.d.ts +38 -0
  54. package/dist/src/coin/dot/unstakeBuilder.d.ts.map +1 -0
  55. package/dist/src/coin/dot/unstakeBuilder.js +111 -0
  56. package/dist/src/coin/dot/utils.d.ts +69 -0
  57. package/dist/src/coin/dot/utils.d.ts.map +1 -1
  58. package/dist/src/coin/dot/utils.js +144 -4
  59. package/dist/src/coin/dot/walletInitializationBuilder.d.ts +51 -5
  60. package/dist/src/coin/dot/walletInitializationBuilder.d.ts.map +1 -1
  61. package/dist/src/coin/dot/walletInitializationBuilder.js +108 -45
  62. package/dist/src/coin/sol/constants.d.ts +24 -0
  63. package/dist/src/coin/sol/constants.d.ts.map +1 -0
  64. package/dist/src/coin/sol/constants.js +35 -0
  65. package/dist/src/coin/sol/iface.d.ts +55 -0
  66. package/dist/src/coin/sol/iface.d.ts.map +1 -0
  67. package/dist/src/coin/sol/iface.js +3 -0
  68. package/dist/src/coin/sol/index.d.ts +5 -0
  69. package/dist/src/coin/sol/index.d.ts.map +1 -0
  70. package/dist/src/coin/sol/index.js +29 -0
  71. package/dist/src/coin/sol/instructionParamsFactory.d.ts +12 -0
  72. package/dist/src/coin/sol/instructionParamsFactory.d.ts.map +1 -0
  73. package/dist/src/coin/sol/instructionParamsFactory.js +99 -0
  74. package/dist/src/coin/sol/keyPair.d.ts +45 -0
  75. package/dist/src/coin/sol/keyPair.d.ts.map +1 -0
  76. package/dist/src/coin/sol/keyPair.js +128 -0
  77. package/dist/src/coin/sol/solInstructionFactory.d.ts +10 -0
  78. package/dist/src/coin/sol/solInstructionFactory.d.ts.map +1 -0
  79. package/dist/src/coin/sol/solInstructionFactory.js +102 -0
  80. package/dist/src/coin/sol/transaction.d.ts +52 -0
  81. package/dist/src/coin/sol/transaction.d.ts.map +1 -0
  82. package/dist/src/coin/sol/transaction.js +345 -0
  83. package/dist/src/coin/sol/transactionBuilder.d.ts +96 -0
  84. package/dist/src/coin/sol/transactionBuilder.d.ts.map +1 -0
  85. package/dist/src/coin/sol/transactionBuilder.js +316 -0
  86. package/dist/src/coin/sol/transactionBuilderFactory.d.ts +34 -0
  87. package/dist/src/coin/sol/transactionBuilderFactory.d.ts.map +1 -0
  88. package/dist/src/coin/sol/transactionBuilderFactory.js +86 -0
  89. package/dist/src/coin/sol/transferBuilder.d.ts +26 -0
  90. package/dist/src/coin/sol/transferBuilder.d.ts.map +1 -0
  91. package/dist/src/coin/sol/transferBuilder.js +140 -0
  92. package/dist/src/coin/sol/utils.d.ts +104 -0
  93. package/dist/src/coin/sol/utils.d.ts.map +1 -0
  94. package/dist/src/coin/sol/utils.js +244 -0
  95. package/dist/src/coin/sol/walletInitializationBuilder.d.ts +26 -0
  96. package/dist/src/coin/sol/walletInitializationBuilder.d.ts.map +1 -0
  97. package/dist/src/coin/sol/walletInitializationBuilder.js +141 -0
  98. package/dist/src/index.d.ts +4 -0
  99. package/dist/src/index.d.ts.map +1 -1
  100. package/dist/src/index.js +10 -2
  101. package/dist/src/utils/crypto.d.ts +8 -0
  102. package/dist/src/utils/crypto.d.ts.map +1 -1
  103. package/dist/src/utils/crypto.js +13 -2
  104. package/package.json +10 -3
  105. package/resources/dot/index.ts +2 -0
  106. package/resources/dot/mainnet.ts +2 -0
  107. package/resources/dot/westend.ts +2 -0
@@ -0,0 +1,157 @@
1
+ "use strict";
2
+ var __extends = (this && this.__extends) || (function () {
3
+ var extendStatics = function (d, b) {
4
+ extendStatics = Object.setPrototypeOf ||
5
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
+ return extendStatics(d, b);
8
+ };
9
+ return function (d, b) {
10
+ if (typeof b !== "function" && b !== null)
11
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
12
+ extendStatics(d, b);
13
+ function __() { this.constructor = d; }
14
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
15
+ };
16
+ })();
17
+ var __importDefault = (this && this.__importDefault) || function (mod) {
18
+ return (mod && mod.__esModule) ? mod : { "default": mod };
19
+ };
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ exports.StakingBuilder = void 0;
22
+ var txwrapper_polkadot_1 = require("@substrate/txwrapper-polkadot");
23
+ var bignumber_js_1 = __importDefault(require("bignumber.js"));
24
+ var utils_1 = __importDefault(require("./utils"));
25
+ var baseCoin_1 = require("../baseCoin");
26
+ var errors_1 = require("../baseCoin/errors");
27
+ var iface_1 = require("./iface");
28
+ var transactionBuilder_1 = require("./transactionBuilder");
29
+ var txnSchema_1 = require("./txnSchema");
30
+ var StakingBuilder = /** @class */ (function (_super) {
31
+ __extends(StakingBuilder, _super);
32
+ function StakingBuilder(_coinConfig) {
33
+ return _super.call(this, _coinConfig) || this;
34
+ }
35
+ /**
36
+ * Take the origin account as a stash and lock up value of its balance.
37
+ * Controller will be the account that controls it.
38
+ *
39
+ * @returns {UnsignedTransaction} an unsigned Dot transaction
40
+ *
41
+ * @see https://polkadot.js.org/docs/substrate/extrinsics/#staking
42
+ */
43
+ StakingBuilder.prototype.buildTransaction = function () {
44
+ var baseTxInfo = this.createBaseTxInfo();
45
+ return txwrapper_polkadot_1.methods.staking.bond({
46
+ value: this._amount,
47
+ controller: this._controller,
48
+ payee: this._payee,
49
+ }, baseTxInfo.baseTxInfo, baseTxInfo.options);
50
+ };
51
+ Object.defineProperty(StakingBuilder.prototype, "transactionType", {
52
+ get: function () {
53
+ return baseCoin_1.TransactionType.StakingActivate;
54
+ },
55
+ enumerable: false,
56
+ configurable: true
57
+ });
58
+ /**
59
+ * The amount to stake.
60
+ *
61
+ * @param {string} amount
62
+ * @returns {StakeBuilder} This staking builder.
63
+ *
64
+ * @see https://wiki.polkadot.network/docs/learn-nominator#required-minimum-stake
65
+ */
66
+ StakingBuilder.prototype.amount = function (amount) {
67
+ this.validateValue(new bignumber_js_1.default(amount));
68
+ this._amount = amount;
69
+ return this;
70
+ };
71
+ /**
72
+ * The controller of the staked amount.
73
+ *
74
+ * @param {string} controller
75
+ * @returns {StakeBuilder} This staking builder.
76
+ *
77
+ * @see https://wiki.polkadot.network/docs/learn-staking#accounts
78
+ */
79
+ StakingBuilder.prototype.owner = function (controller) {
80
+ this.validateAddress(controller);
81
+ this._controller = controller.address;
82
+ return this;
83
+ };
84
+ /**
85
+ * The rewards destination of the staked amount.
86
+ * Can be set to another accounts address.
87
+ *
88
+ * @param {string} payee
89
+ * @returns {StakeBuilder} This staking builder.
90
+ *
91
+ * @see https://wiki.polkadot.network/docs/learn-staking#4-rewards-mechanism
92
+ */
93
+ StakingBuilder.prototype.payee = function (payee) {
94
+ if (typeof payee !== 'string') {
95
+ this.validateAddress({ address: payee.Account });
96
+ this._payee = { Account: payee.Account };
97
+ }
98
+ else {
99
+ this._payee = payee;
100
+ }
101
+ return this;
102
+ };
103
+ /** @inheritdoc */
104
+ StakingBuilder.prototype.validateDecodedTransaction = function (decodedTxn) {
105
+ var _a;
106
+ if (((_a = decodedTxn.method) === null || _a === void 0 ? void 0 : _a.name) === iface_1.MethodNames.Bond) {
107
+ var txMethod = decodedTxn.method.args;
108
+ var value = txMethod.value;
109
+ var controller = txMethod.controller.id;
110
+ var payee = txMethod.payee;
111
+ var validationResult = txnSchema_1.StakeTransactionSchema.validate({ value: value, controller: controller, payee: payee });
112
+ if (validationResult.error) {
113
+ throw new errors_1.InvalidTransactionError("Transaction validation failed: " + validationResult.error.message);
114
+ }
115
+ }
116
+ };
117
+ /** @inheritdoc */
118
+ StakingBuilder.prototype.fromImplementation = function (rawTransaction) {
119
+ var _a, _b;
120
+ var tx = _super.prototype.fromImplementation.call(this, rawTransaction);
121
+ if (((_a = this._method) === null || _a === void 0 ? void 0 : _a.name) === iface_1.MethodNames.Bond) {
122
+ var txMethod = this._method.args;
123
+ this.amount(txMethod.value);
124
+ this.owner({ address: utils_1.default.decodeDotAddress(txMethod.controller.id) });
125
+ var payee = txMethod.payee;
126
+ if (payee.account) {
127
+ this.payee({ Account: utils_1.default.decodeDotAddress(payee.account) });
128
+ }
129
+ else {
130
+ var payeeType = utils_1.default.capitalizeFirstLetter(Object.keys(payee)[0]);
131
+ this.payee(payeeType);
132
+ }
133
+ }
134
+ else {
135
+ throw new errors_1.InvalidTransactionError("Invalid Transaction Type: " + ((_b = this._method) === null || _b === void 0 ? void 0 : _b.name) + ". Expected bond");
136
+ }
137
+ return tx;
138
+ };
139
+ /** @inheritdoc */
140
+ StakingBuilder.prototype.validateTransaction = function (_) {
141
+ _super.prototype.validateTransaction.call(this, _);
142
+ this.validateFields(this._amount, this._controller, this._payee);
143
+ };
144
+ StakingBuilder.prototype.validateFields = function (value, controller, payee) {
145
+ var validationResult = txnSchema_1.StakeTransactionSchema.validate({
146
+ value: value,
147
+ controller: controller,
148
+ payee: payee,
149
+ });
150
+ if (validationResult.error) {
151
+ throw new errors_1.InvalidTransactionError("Stake Builder Transaction validation failed: " + validationResult.error.message);
152
+ }
153
+ };
154
+ return StakingBuilder;
155
+ }(transactionBuilder_1.TransactionBuilder));
156
+ exports.StakingBuilder = StakingBuilder;
157
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Rha2luZ0J1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29pbi9kb3Qvc3Rha2luZ0J1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsb0VBQXdEO0FBQ3hELDhEQUFxQztBQUNyQyxrREFBNEI7QUFDNUIsd0NBQThDO0FBQzlDLDZDQUE2RDtBQUM3RCxpQ0FBb0Y7QUFFcEYsMkRBQTBEO0FBQzFELHlDQUFxRDtBQUdyRDtJQUFvQyxrQ0FBa0I7SUFLcEQsd0JBQVksV0FBaUM7ZUFDM0Msa0JBQU0sV0FBVyxDQUFDO0lBQ3BCLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ08seUNBQWdCLEdBQTFCO1FBQ0UsSUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDM0MsT0FBTyw0QkFBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQ3pCO1lBQ0UsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ25CLFVBQVUsRUFBRSxJQUFJLENBQUMsV0FBVztZQUM1QixLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU07U0FDbkIsRUFDRCxVQUFVLENBQUMsVUFBVSxFQUNyQixVQUFVLENBQUMsT0FBTyxDQUNuQixDQUFDO0lBQ0osQ0FBQztJQUVELHNCQUFjLDJDQUFlO2FBQTdCO1lBQ0UsT0FBTywwQkFBZSxDQUFDLGVBQWUsQ0FBQztRQUN6QyxDQUFDOzs7T0FBQTtJQUVEOzs7Ozs7O09BT0c7SUFDSCwrQkFBTSxHQUFOLFVBQU8sTUFBYztRQUNuQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksc0JBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO1FBQ3RCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCw4QkFBSyxHQUFMLFVBQU0sVUFBdUI7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a0I7SUFDbEIsNENBQW1CLEdBQW5CLFVBQW9CLENBQWM7UUFDaEMsaUJBQU0sbUJBQW1CLFlBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFTyx1Q0FBYyxHQUF0QixVQUF1QixLQUFhLEVBQUUsVUFBa0IsRUFBRSxLQUFxQjtRQUM3RSxJQUFNLGdCQUFnQixHQUFHLGtDQUFzQixDQUFDLFFBQVEsQ0FBQztZQUN2RCxLQUFLLE9BQUE7WUFDTCxVQUFVLFlBQUE7WUFDVixLQUFLLE9BQUE7U0FDTixDQUFDLENBQUM7UUFFSCxJQUFJLGdCQUFnQixDQUFDLEtBQUssRUFBRTtZQUMxQixNQUFNLElBQUksZ0NBQXVCLENBQy9CLGtEQUFnRCxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsT0FBUyxDQUNqRixDQUFDO1NBQ0g7SUFDSCxDQUFDO0lBQ0gscUJBQUM7QUFBRCxDQUFDLEFBdklELENBQW9DLHVDQUFrQixHQXVJckQ7QUF2SVksd0NBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuaW1wb3J0IHsgRGVjb2RlZFNpZ25lZFR4LCBEZWNvZGVkU2lnbmluZ1BheWxvYWQsIFVuc2lnbmVkVHJhbnNhY3Rpb24gfSBmcm9tICdAc3Vic3RyYXRlL3R4d3JhcHBlci1jb3JlJztcbmltcG9ydCB7IG1ldGhvZHMgfSBmcm9tICdAc3Vic3RyYXRlL3R4d3JhcHBlci1wb2xrYWRvdCc7XG5pbXBvcnQgQmlnTnVtYmVyIGZyb20gJ2JpZ251bWJlci5qcyc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICcuLi9iYXNlQ29pbic7XG5pbXBvcnQgeyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvciB9IGZyb20gJy4uL2Jhc2VDb2luL2Vycm9ycyc7XG5pbXBvcnQgeyBNZXRob2ROYW1lcywgU3Rha2VBcmdzLCBTdGFrZUFyZ3NQYXllZSwgU3Rha2VBcmdzUGF5ZWVSYXcgfSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXIgfSBmcm9tICcuL3RyYW5zYWN0aW9uQnVpbGRlcic7XG5pbXBvcnQgeyBTdGFrZVRyYW5zYWN0aW9uU2NoZW1hIH0gZnJvbSAnLi90eG5TY2hlbWEnO1xuaW1wb3J0IHsgQmFzZUFkZHJlc3MgfSBmcm9tICcuLi9iYXNlQ29pbi9pZmFjZSc7XG5cbmV4cG9ydCBjbGFzcyBTdGFraW5nQnVpbGRlciBleHRlbmRzIFRyYW5zYWN0aW9uQnVpbGRlciB7XG4gIHByb3RlY3RlZCBfYW1vdW50OiBzdHJpbmc7XG4gIHByb3RlY3RlZCBfY29udHJvbGxlcjogc3RyaW5nO1xuICBwcm90ZWN0ZWQgX3BheWVlOiBTdGFrZUFyZ3NQYXllZTtcblxuICBjb25zdHJ1Y3RvcihfY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihfY29pbkNvbmZpZyk7XG4gIH1cblxuICAvKipcbiAgICogVGFrZSB0aGUgb3JpZ2luIGFjY291bnQgYXMgYSBzdGFzaCBhbmQgbG9jayB1cCB2YWx1ZSBvZiBpdHMgYmFsYW5jZS5cbiAgICogQ29udHJvbGxlciB3aWxsIGJlIHRoZSBhY2NvdW50IHRoYXQgY29udHJvbHMgaXQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtVbnNpZ25lZFRyYW5zYWN0aW9ufSBhbiB1bnNpZ25lZCBEb3QgdHJhbnNhY3Rpb25cbiAgICpcbiAgICogQHNlZSBodHRwczovL3BvbGthZG90LmpzLm9yZy9kb2NzL3N1YnN0cmF0ZS9leHRyaW5zaWNzLyNzdGFraW5nXG4gICAqL1xuICBwcm90ZWN0ZWQgYnVpbGRUcmFuc2FjdGlvbigpOiBVbnNpZ25lZFRyYW5zYWN0aW9uIHtcbiAgICBjb25zdCBiYXNlVHhJbmZvID0gdGhpcy5jcmVhdGVCYXNlVHhJbmZvKCk7XG4gICAgcmV0dXJuIG1ldGhvZHMuc3Rha2luZy5ib25kKFxuICAgICAge1xuICAgICAgICB2YWx1ZTogdGhpcy5fYW1vdW50LFxuICAgICAgICBjb250cm9sbGVyOiB0aGlzLl9jb250cm9sbGVyLFxuICAgICAgICBwYXllZTogdGhpcy5fcGF5ZWUsXG4gICAgICB9LFxuICAgICAgYmFzZVR4SW5mby5iYXNlVHhJbmZvLFxuICAgICAgYmFzZVR4SW5mby5vcHRpb25zLFxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IHRyYW5zYWN0aW9uVHlwZSgpOiBUcmFuc2FjdGlvblR5cGUge1xuICAgIHJldHVybiBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0FjdGl2YXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBhbW91bnQgdG8gc3Rha2UuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhbW91bnRcbiAgICogQHJldHVybnMge1N0YWtlQnVpbGRlcn0gVGhpcyBzdGFraW5nIGJ1aWxkZXIuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly93aWtpLnBvbGthZG90Lm5ldHdvcmsvZG9jcy9sZWFybi1ub21pbmF0b3IjcmVxdWlyZWQtbWluaW11bS1zdGFrZVxuICAgKi9cbiAgYW1vdW50KGFtb3VudDogc3RyaW5nKTogdGhpcyB7XG4gICAgdGhpcy52YWxpZGF0ZVZhbHVlKG5ldyBCaWdOdW1iZXIoYW1vdW50KSk7XG4gICAgdGhpcy5fYW1vdW50ID0gYW1vdW50O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBjb250cm9sbGVyIG9mIHRoZSBzdGFrZWQgYW1vdW50LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29udHJvbGxlclxuICAgKiBAcmV0dXJucyB7U3Rha2VCdWlsZGVyfSBUaGlzIHN0YWtpbmcgYnVpbGRlci5cbiAgICpcbiAgICogQHNlZSBodHRwczovL3dpa2kucG9sa2Fkb3QubmV0d29yay9kb2NzL2xlYXJuLXN0YWtpbmcjYWNjb3VudHNcbiAgICovXG4gIG93bmVyKGNvbnRyb2xsZXI6IEJhc2VBZGRyZXNzKTogdGhpcyB7XG4gICAgdGhpcy52YWxpZGF0ZUFkZHJlc3MoY29udHJvbGxlcik7XG4gICAgdGhpcy5fY29udHJvbGxlciA9IGNvbnRyb2xsZXIuYWRkcmVzcztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcmV3YXJkcyBkZXN0aW5hdGlvbiBvZiB0aGUgc3Rha2VkIGFtb3VudC5cbiAgICogQ2FuIGJlIHNldCB0byBhbm90aGVyIGFjY291bnRzIGFkZHJlc3MuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXllZVxuICAgKiBAcmV0dXJucyB7U3Rha2VCdWlsZGVyfSBUaGlzIHN0YWtpbmcgYnVpbGRlci5cbiAgICpcbiAgICogQHNlZSBodHRwczovL3dpa2kucG9sa2Fkb3QubmV0d29yay9kb2NzL2xlYXJuLXN0YWtpbmcjNC1yZXdhcmRzLW1lY2hhbmlzbVxuICAgKi9cbiAgcGF5ZWUocGF5ZWU6IFN0YWtlQXJnc1BheWVlKTogdGhpcyB7XG4gICAgaWYgKHR5cGVvZiBwYXllZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMudmFsaWRhdGVBZGRyZXNzKHsgYWRkcmVzczogcGF5ZWUuQWNjb3VudCB9KTtcbiAgICAgIHRoaXMuX3BheWVlID0geyBBY2NvdW50OiBwYXllZS5BY2NvdW50IH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3BheWVlID0gcGF5ZWU7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlRGVjb2RlZFRyYW5zYWN0aW9uKGRlY29kZWRUeG46IERlY29kZWRTaWduaW5nUGF5bG9hZCB8IERlY29kZWRTaWduZWRUeCk6IHZvaWQge1xuICAgIGlmIChkZWNvZGVkVHhuLm1ldGhvZD8ubmFtZSA9PT0gTWV0aG9kTmFtZXMuQm9uZCkge1xuICAgICAgY29uc3QgdHhNZXRob2QgPSBkZWNvZGVkVHhuLm1ldGhvZC5hcmdzIGFzIHVua25vd24gYXMgU3Rha2VBcmdzO1xuICAgICAgY29uc3QgdmFsdWUgPSB0eE1ldGhvZC52YWx1ZTtcbiAgICAgIGNvbnN0IGNvbnRyb2xsZXIgPSB0eE1ldGhvZC5jb250cm9sbGVyLmlkO1xuICAgICAgY29uc3QgcGF5ZWUgPSB0eE1ldGhvZC5wYXllZTtcbiAgICAgIGNvbnN0IHZhbGlkYXRpb25SZXN1bHQgPSBTdGFrZVRyYW5zYWN0aW9uU2NoZW1hLnZhbGlkYXRlKHsgdmFsdWUsIGNvbnRyb2xsZXIsIHBheWVlIH0pO1xuICAgICAgaWYgKHZhbGlkYXRpb25SZXN1bHQuZXJyb3IpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKGBUcmFuc2FjdGlvbiB2YWxpZGF0aW9uIGZhaWxlZDogJHt2YWxpZGF0aW9uUmVzdWx0LmVycm9yLm1lc3NhZ2V9YCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBmcm9tSW1wbGVtZW50YXRpb24ocmF3VHJhbnNhY3Rpb246IHN0cmluZyk6IFRyYW5zYWN0aW9uIHtcbiAgICBjb25zdCB0eCA9IHN1cGVyLmZyb21JbXBsZW1lbnRhdGlvbihyYXdUcmFuc2FjdGlvbik7XG4gICAgaWYgKHRoaXMuX21ldGhvZD8ubmFtZSA9PT0gTWV0aG9kTmFtZXMuQm9uZCkge1xuICAgICAgY29uc3QgdHhNZXRob2QgPSB0aGlzLl9tZXRob2QuYXJncyBhcyBTdGFrZUFyZ3M7XG4gICAgICB0aGlzLmFtb3VudCh0eE1ldGhvZC52YWx1ZSk7XG4gICAgICB0aGlzLm93bmVyKHsgYWRkcmVzczogdXRpbHMuZGVjb2RlRG90QWRkcmVzcyh0eE1ldGhvZC5jb250cm9sbGVyLmlkKSB9KTtcblxuICAgICAgY29uc3QgcGF5ZWUgPSB0eE1ldGhvZC5wYXllZSBhcyBTdGFrZUFyZ3NQYXllZVJhdztcbiAgICAgIGlmIChwYXllZS5hY2NvdW50KSB7XG4gICAgICAgIHRoaXMucGF5ZWUoeyBBY2NvdW50OiB1dGlscy5kZWNvZGVEb3RBZGRyZXNzKHBheWVlLmFjY291bnQpIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcGF5ZWVUeXBlID0gdXRpbHMuY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKE9iamVjdC5rZXlzKHBheWVlKVswXSkgYXMgU3Rha2VBcmdzUGF5ZWU7XG4gICAgICAgIHRoaXMucGF5ZWUocGF5ZWVUeXBlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKGBJbnZhbGlkIFRyYW5zYWN0aW9uIFR5cGU6ICR7dGhpcy5fbWV0aG9kPy5uYW1lfS4gRXhwZWN0ZWQgYm9uZGApO1xuICAgIH1cbiAgICByZXR1cm4gdHg7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVUcmFuc2FjdGlvbihfOiBUcmFuc2FjdGlvbik6IHZvaWQge1xuICAgIHN1cGVyLnZhbGlkYXRlVHJhbnNhY3Rpb24oXyk7XG4gICAgdGhpcy52YWxpZGF0ZUZpZWxkcyh0aGlzLl9hbW91bnQsIHRoaXMuX2NvbnRyb2xsZXIsIHRoaXMuX3BheWVlKTtcbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVGaWVsZHModmFsdWU6IHN0cmluZywgY29udHJvbGxlcjogc3RyaW5nLCBwYXllZTogU3Rha2VBcmdzUGF5ZWUpOiB2b2lkIHtcbiAgICBjb25zdCB2YWxpZGF0aW9uUmVzdWx0ID0gU3Rha2VUcmFuc2FjdGlvblNjaGVtYS52YWxpZGF0ZSh7XG4gICAgICB2YWx1ZSxcbiAgICAgIGNvbnRyb2xsZXIsXG4gICAgICBwYXllZSxcbiAgICB9KTtcblxuICAgIGlmICh2YWxpZGF0aW9uUmVzdWx0LmVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoXG4gICAgICAgIGBTdGFrZSBCdWlsZGVyIFRyYW5zYWN0aW9uIHZhbGlkYXRpb24gZmFpbGVkOiAke3ZhbGlkYXRpb25SZXN1bHQuZXJyb3IubWVzc2FnZX1gLFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -1,11 +1,39 @@
1
- import { BaseTransaction } from '../baseCoin';
1
+ import { BaseCoin as CoinConfig } from '@bitgo/statics';
2
+ import { BaseTransaction, TransactionType } from '../baseCoin';
2
3
  import { BaseKey } from '../baseCoin/iface';
4
+ import { UnsignedTransaction } from '@substrate/txwrapper-core';
5
+ import { TypeRegistry } from '@substrate/txwrapper-core/lib/types';
6
+ import { KeyPair } from './keyPair';
7
+ import { TxData } from './iface';
3
8
  export declare class Transaction extends BaseTransaction {
9
+ protected _dotTransaction: UnsignedTransaction;
10
+ private _signedTransaction?;
11
+ private _registry;
12
+ private _chainName;
13
+ private _sender;
14
+ constructor(coinConfig: Readonly<CoinConfig>);
4
15
  /** @inheritdoc */
5
- canSign(key: BaseKey): boolean;
16
+ canSign({ key }: BaseKey): boolean;
17
+ /** @inheritdoc */
18
+ sign(keyPair: KeyPair): Promise<void>;
19
+ registry(registry: TypeRegistry): void;
20
+ chainName(chainName: string): void;
21
+ sender(sender: string): void;
6
22
  /** @inheritdoc */
7
23
  toBroadcastFormat(): string;
24
+ transactionSize(): number;
8
25
  /** @inheritdoc */
9
- toJson(): any;
26
+ toJson(): TxData;
27
+ /**
28
+ * Load the input and output data on this transaction.
29
+ */
30
+ loadInputsAndOutputs(): void;
31
+ setTransaction(tx: UnsignedTransaction): void;
32
+ /**
33
+ * Set the transaction type.
34
+ *
35
+ * @param {TransactionType} transactionType The transaction type to be set.
36
+ */
37
+ transactionType(transactionType: TransactionType): void;
10
38
  }
11
39
  //# sourceMappingURL=transaction.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../../../src/coin/dot/transaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAG5C,qBAAa,WAAY,SAAQ,eAAe;IAC9C,kBAAkB;IAClB,OAAO,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO;IAI9B,kBAAkB;IAClB,iBAAiB,IAAI,MAAM;IAI3B,kBAAkB;IAClB,MAAM,IAAI,GAAG;CAGd"}
1
+ {"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../../../src/coin/dot/transaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAG5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AAEnE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,MAAM,EAAsE,MAAM,SAAS,CAAC;AAGrG,qBAAa,WAAY,SAAQ,eAAe;IAC9C,SAAS,CAAC,eAAe,EAAE,mBAAmB,CAAC;IAC/C,OAAO,CAAC,kBAAkB,CAAC,CAAS;IACpC,OAAO,CAAC,SAAS,CAAe;IAChC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,OAAO,CAAS;gBAEZ,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI5C,kBAAkB;IAClB,OAAO,CAAC,EAAE,GAAG,EAAE,EAAE,OAAO,GAAG,OAAO;IASlC,kBAAkB;IACZ,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAwB3C,QAAQ,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI;IAItC,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAIlC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI5B,kBAAkB;IAClB,iBAAiB,IAAI,MAAM;IAa3B,eAAe,IAAI,MAAM;IAIzB,kBAAkB;IAClB,MAAM,IAAI,MAAM;IAuFhB;;OAEG;IACH,oBAAoB,IAAI,IAAI;IAsD5B,cAAc,CAAC,EAAE,EAAE,mBAAmB,GAAG,IAAI;IAI7C;;;;OAIG;IACH,eAAe,CAAC,eAAe,EAAE,eAAe,GAAG,IAAI;CAGxD"}
@@ -14,28 +14,289 @@ var __extends = (this && this.__extends) || (function () {
14
14
  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
15
15
  };
16
16
  })();
17
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
18
+ if (k2 === undefined) k2 = k;
19
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
20
+ }) : (function(o, m, k, k2) {
21
+ if (k2 === undefined) k2 = k;
22
+ o[k2] = m[k];
23
+ }));
24
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
25
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
26
+ }) : function(o, v) {
27
+ o["default"] = v;
28
+ });
29
+ var __importStar = (this && this.__importStar) || function (mod) {
30
+ if (mod && mod.__esModule) return mod;
31
+ var result = {};
32
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
33
+ __setModuleDefault(result, mod);
34
+ return result;
35
+ };
36
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
37
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
38
+ return new (P || (P = Promise))(function (resolve, reject) {
39
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
40
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
41
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
42
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
43
+ });
44
+ };
45
+ var __generator = (this && this.__generator) || function (thisArg, body) {
46
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
47
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
48
+ function verb(n) { return function (v) { return step([n, v]); }; }
49
+ function step(op) {
50
+ if (f) throw new TypeError("Generator is already executing.");
51
+ while (_) try {
52
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
53
+ if (y = 0, t) op = [op[0] & 2, t.value];
54
+ switch (op[0]) {
55
+ case 0: case 1: t = op; break;
56
+ case 4: _.label++; return { value: op[1], done: false };
57
+ case 5: _.label++; y = op[1]; op = [0]; continue;
58
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
59
+ default:
60
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
61
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
62
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
63
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
64
+ if (t[2]) _.ops.pop();
65
+ _.trys.pop(); continue;
66
+ }
67
+ op = body.call(thisArg, _);
68
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
69
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
70
+ }
71
+ };
72
+ var __importDefault = (this && this.__importDefault) || function (mod) {
73
+ return (mod && mod.__esModule) ? mod : { "default": mod };
74
+ };
17
75
  Object.defineProperty(exports, "__esModule", { value: true });
18
76
  exports.Transaction = void 0;
19
77
  var baseCoin_1 = require("../baseCoin");
20
78
  var errors_1 = require("../baseCoin/errors");
79
+ var txwrapper_polkadot_1 = require("@substrate/txwrapper-polkadot");
80
+ var keyring_1 = __importStar(require("@polkadot/keyring"));
81
+ var keyPair_1 = require("./keyPair");
82
+ var utils_1 = __importDefault(require("./utils"));
21
83
  var Transaction = /** @class */ (function (_super) {
22
84
  __extends(Transaction, _super);
23
- function Transaction() {
24
- return _super !== null && _super.apply(this, arguments) || this;
85
+ function Transaction(coinConfig) {
86
+ return _super.call(this, coinConfig) || this;
25
87
  }
26
88
  /** @inheritdoc */
27
- Transaction.prototype.canSign = function (key) {
28
- throw new errors_1.NotImplementedError('canSign not implemented');
89
+ Transaction.prototype.canSign = function (_a) {
90
+ var key = _a.key;
91
+ var kp = new keyPair_1.KeyPair({ prv: key });
92
+ var addr = kp.getAddress();
93
+ if (addr === this._sender) {
94
+ return true;
95
+ }
96
+ return false;
97
+ };
98
+ /** @inheritdoc */
99
+ Transaction.prototype.sign = function (keyPair) {
100
+ return __awaiter(this, void 0, void 0, function () {
101
+ var _a, prv, pub, signingPayload, keyring, secretKey, publicKey, signingKeyPair, txHex;
102
+ return __generator(this, function (_b) {
103
+ if (!this._dotTransaction) {
104
+ throw new errors_1.InvalidTransactionError('No transaction data to sign');
105
+ }
106
+ _a = keyPair.getKeys(), prv = _a.prv, pub = _a.pub;
107
+ if (!prv) {
108
+ throw new errors_1.SigningError('Missing private key');
109
+ }
110
+ signingPayload = txwrapper_polkadot_1.construct.signingPayload(this._dotTransaction, {
111
+ registry: this._registry,
112
+ });
113
+ keyring = new keyring_1.default({ type: 'ed25519' });
114
+ secretKey = new Uint8Array(Buffer.from(prv, 'hex'));
115
+ publicKey = new Uint8Array(Buffer.from(pub, 'hex'));
116
+ signingKeyPair = keyring.addFromPair({ secretKey: secretKey, publicKey: publicKey });
117
+ txHex = utils_1.default.createSignedTx(signingKeyPair, signingPayload, this._dotTransaction, {
118
+ metadataRpc: this._dotTransaction.metadataRpc,
119
+ registry: this._registry,
120
+ });
121
+ this._signedTransaction = txHex;
122
+ return [2 /*return*/];
123
+ });
124
+ });
125
+ };
126
+ Transaction.prototype.registry = function (registry) {
127
+ this._registry = registry;
128
+ };
129
+ Transaction.prototype.chainName = function (chainName) {
130
+ this._chainName = chainName;
131
+ };
132
+ Transaction.prototype.sender = function (sender) {
133
+ this._sender = sender;
29
134
  };
30
135
  /** @inheritdoc */
31
136
  Transaction.prototype.toBroadcastFormat = function () {
32
- throw new errors_1.NotImplementedError('toBroadcastFormat not implemented');
137
+ if (!this._dotTransaction) {
138
+ throw new errors_1.InvalidTransactionError('Empty transaction');
139
+ }
140
+ if (this._signedTransaction && this._signedTransaction.length > 0) {
141
+ return this._signedTransaction;
142
+ }
143
+ else {
144
+ return txwrapper_polkadot_1.construct.signingPayload(this._dotTransaction, {
145
+ registry: this._registry,
146
+ });
147
+ }
148
+ };
149
+ Transaction.prototype.transactionSize = function () {
150
+ return this.toBroadcastFormat().length / 2;
33
151
  };
34
152
  /** @inheritdoc */
35
153
  Transaction.prototype.toJson = function () {
36
- throw new errors_1.NotImplementedError('toJson not implemented');
154
+ if (!this._dotTransaction) {
155
+ throw new errors_1.InvalidTransactionError('Empty transaction');
156
+ }
157
+ var decodedTx = txwrapper_polkadot_1.decode(this._dotTransaction, {
158
+ metadataRpc: this._dotTransaction.metadataRpc,
159
+ registry: this._registry,
160
+ });
161
+ var result = {
162
+ sender: decodedTx.address,
163
+ referenceBlock: decodedTx.blockHash,
164
+ blockNumber: decodedTx.blockNumber,
165
+ genesisHash: decodedTx.genesisHash,
166
+ nonce: decodedTx.nonce,
167
+ specVersion: decodedTx.specVersion,
168
+ transactionVersion: decodedTx.transactionVersion,
169
+ eraPeriod: decodedTx.eraPeriod,
170
+ chainName: this._chainName,
171
+ tip: decodedTx.tip,
172
+ };
173
+ if (this.type === baseCoin_1.TransactionType.Send) {
174
+ var txMethod = decodedTx.method.args;
175
+ if (txMethod.real) {
176
+ var keypairReal = new keyPair_1.KeyPair({
177
+ pub: Buffer.from(keyring_1.decodeAddress(txMethod.real)).toString('hex'),
178
+ });
179
+ result.owner = keypairReal.getAddress();
180
+ result.forceProxyType = txMethod.forceProxyType;
181
+ var decodedCall = utils_1.default.decodeCallMethod(this._dotTransaction, {
182
+ metadataRpc: this._dotTransaction.metadataRpc,
183
+ registry: this._registry,
184
+ });
185
+ var keypairDest = new keyPair_1.KeyPair({
186
+ pub: Buffer.from(keyring_1.decodeAddress(decodedCall.dest.id)).toString('hex'),
187
+ });
188
+ result.to = keypairDest.getAddress();
189
+ result.amount = decodedCall.value;
190
+ }
191
+ else {
192
+ var keypairDest = new keyPair_1.KeyPair({
193
+ pub: Buffer.from(keyring_1.decodeAddress(txMethod.dest.id)).toString('hex'),
194
+ });
195
+ result.to = keypairDest.getAddress();
196
+ result.amount = txMethod.value;
197
+ }
198
+ }
199
+ if (this.type === baseCoin_1.TransactionType.StakingActivate) {
200
+ var txMethod = decodedTx.method.args;
201
+ var keypair = new keyPair_1.KeyPair({
202
+ pub: Buffer.from(keyring_1.decodeAddress(txMethod.controller.id, false, this._registry.chainSS58)).toString('hex'),
203
+ });
204
+ result.controller = keypair.getAddress();
205
+ result.amount = txMethod.value;
206
+ var payee = txMethod.payee;
207
+ if (payee.account) {
208
+ var keypair_1 = new keyPair_1.KeyPair({
209
+ pub: Buffer.from(keyring_1.decodeAddress(payee.account, false, this._registry.chainSS58)).toString('hex'),
210
+ });
211
+ result.payee = keypair_1.getAddress();
212
+ }
213
+ else {
214
+ var payeeType = utils_1.default.capitalizeFirstLetter(Object.keys(payee)[0]);
215
+ result.payee = payeeType;
216
+ }
217
+ }
218
+ if (this.type === baseCoin_1.TransactionType.WalletInitialization) {
219
+ var txMethod = decodedTx.method.args;
220
+ var keypair = new keyPair_1.KeyPair({
221
+ pub: Buffer.from(keyring_1.decodeAddress(txMethod.delegate, false, this._registry.chainSS58)).toString('hex'),
222
+ });
223
+ result.owner = keypair.getAddress();
224
+ result.proxyType = txMethod.proxyType;
225
+ result.delay = txMethod.delay;
226
+ }
227
+ if (this.type === baseCoin_1.TransactionType.StakingUnlock) {
228
+ var txMethod = decodedTx.method.args;
229
+ result.amount = txMethod.value;
230
+ }
231
+ return result;
232
+ };
233
+ /**
234
+ * Load the input and output data on this transaction.
235
+ */
236
+ Transaction.prototype.loadInputsAndOutputs = function () {
237
+ if (!this._dotTransaction) {
238
+ return;
239
+ }
240
+ var decodedTx = txwrapper_polkadot_1.decode(this._dotTransaction, {
241
+ metadataRpc: this._dotTransaction.metadataRpc,
242
+ registry: this._registry,
243
+ });
244
+ if (this.type === baseCoin_1.TransactionType.Send) {
245
+ var txMethod = decodedTx.method.args;
246
+ var to = void 0;
247
+ var value = void 0;
248
+ var from = void 0;
249
+ if (txMethod.real) {
250
+ var decodedCall = utils_1.default.decodeCallMethod(this._dotTransaction, {
251
+ metadataRpc: this._dotTransaction.metadataRpc,
252
+ registry: this._registry,
253
+ });
254
+ var keypairDest = new keyPair_1.KeyPair({
255
+ pub: Buffer.from(keyring_1.decodeAddress(decodedCall.dest.id)).toString('hex'),
256
+ });
257
+ var keypairFrom = new keyPair_1.KeyPair({
258
+ pub: Buffer.from(keyring_1.decodeAddress(txMethod.real)).toString('hex'),
259
+ });
260
+ to = keypairDest.getAddress();
261
+ value = "" + decodedCall.value;
262
+ from = keypairFrom.getAddress(txMethod.real);
263
+ }
264
+ else {
265
+ var keypairDest = new keyPair_1.KeyPair({
266
+ pub: Buffer.from(keyring_1.decodeAddress(txMethod.dest.id)).toString('hex'),
267
+ });
268
+ to = keypairDest.getAddress();
269
+ value = txMethod.value;
270
+ from = decodedTx.address;
271
+ }
272
+ this._outputs = [
273
+ {
274
+ address: to,
275
+ value: value,
276
+ coin: this._coinConfig.name,
277
+ },
278
+ ];
279
+ this._inputs = [
280
+ {
281
+ address: from,
282
+ value: value,
283
+ coin: this._coinConfig.name,
284
+ },
285
+ ];
286
+ }
287
+ };
288
+ Transaction.prototype.setTransaction = function (tx) {
289
+ this._dotTransaction = tx;
290
+ };
291
+ /**
292
+ * Set the transaction type.
293
+ *
294
+ * @param {TransactionType} transactionType The transaction type to be set.
295
+ */
296
+ Transaction.prototype.transactionType = function (transactionType) {
297
+ this._type = transactionType;
37
298
  };
38
299
  return Transaction;
39
300
  }(baseCoin_1.BaseTransaction));
40
301
  exports.Transaction = Transaction;
41
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29pbi9kb3QvdHJhbnNhY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsd0NBQThDO0FBRTlDLDZDQUF5RDtBQUV6RDtJQUFpQywrQkFBZTtJQUFoRDs7SUFlQSxDQUFDO0lBZEMsa0JBQWtCO0lBQ2xCLDZCQUFPLEdBQVAsVUFBUSxHQUFZO1FBQ2xCLE1BQU0sSUFBSSw0QkFBbUIsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsdUNBQWlCLEdBQWpCO1FBQ0UsTUFBTSxJQUFJLDRCQUFtQixDQUFDLG1DQUFtQyxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVELGtCQUFrQjtJQUNsQiw0QkFBTSxHQUFOO1FBQ0UsTUFBTSxJQUFJLDRCQUFtQixDQUFDLHdCQUF3QixDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUNILGtCQUFDO0FBQUQsQ0FBQyxBQWZELENBQWlDLDBCQUFlLEdBZS9DO0FBZlksa0NBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlVHJhbnNhY3Rpb24gfSBmcm9tICcuLi9iYXNlQ29pbic7XG5pbXBvcnQgeyBCYXNlS2V5IH0gZnJvbSAnLi4vYmFzZUNvaW4vaWZhY2UnO1xuaW1wb3J0IHsgTm90SW1wbGVtZW50ZWRFcnJvciB9IGZyb20gJy4uL2Jhc2VDb2luL2Vycm9ycyc7XG5cbmV4cG9ydCBjbGFzcyBUcmFuc2FjdGlvbiBleHRlbmRzIEJhc2VUcmFuc2FjdGlvbiB7XG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBjYW5TaWduKGtleTogQmFzZUtleSk6IGJvb2xlYW4ge1xuICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCdjYW5TaWduIG5vdCBpbXBsZW1lbnRlZCcpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHRvQnJvYWRjYXN0Rm9ybWF0KCk6IHN0cmluZyB7XG4gICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoJ3RvQnJvYWRjYXN0Rm9ybWF0IG5vdCBpbXBsZW1lbnRlZCcpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHRvSnNvbigpOiBhbnkge1xuICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCd0b0pzb24gbm90IGltcGxlbWVudGVkJyk7XG4gIH1cbn1cbiJdfQ==
302
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29pbi9kb3QvdHJhbnNhY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBLHdDQUErRDtBQUUvRCw2Q0FBMkU7QUFDM0Usb0VBQWtFO0FBR2xFLDJEQUEyRDtBQUMzRCxxQ0FBb0M7QUFFcEMsa0RBQTRCO0FBRTVCO0lBQWlDLCtCQUFlO0lBTzlDLHFCQUFZLFVBQWdDO2VBQzFDLGtCQUFNLFVBQVUsQ0FBQztJQUNuQixDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLDZCQUFPLEdBQVAsVUFBUSxFQUFnQjtZQUFkLEdBQUcsU0FBQTtRQUNYLElBQU0sRUFBRSxHQUFHLElBQUksaUJBQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ3JDLElBQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUM3QixJQUFJLElBQUksS0FBSyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ3pCLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxrQkFBa0I7SUFDWiwwQkFBSSxHQUFWLFVBQVcsT0FBZ0I7Ozs7Z0JBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFO29CQUN6QixNQUFNLElBQUksZ0NBQXVCLENBQUMsNkJBQTZCLENBQUMsQ0FBQztpQkFDbEU7Z0JBQ0ssS0FBZSxPQUFPLENBQUMsT0FBTyxFQUFFLEVBQTlCLEdBQUcsU0FBQSxFQUFFLEdBQUcsU0FBQSxDQUF1QjtnQkFDdkMsSUFBSSxDQUFDLEdBQUcsRUFBRTtvQkFDUixNQUFNLElBQUkscUJBQVksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO2lCQUMvQztn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VyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5pbXBvcnQgeyBCYXNlVHJhbnNhY3Rpb24sIFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJy4uL2Jhc2VDb2luJztcbmltcG9ydCB7IEJhc2VLZXkgfSBmcm9tICcuLi9iYXNlQ29pbi9pZmFjZSc7XG5pbXBvcnQgeyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvciwgU2lnbmluZ0Vycm9yIH0gZnJvbSAnLi4vYmFzZUNvaW4vZXJyb3JzJztcbmltcG9ydCB7IGNvbnN0cnVjdCwgZGVjb2RlIH0gZnJvbSAnQHN1YnN0cmF0ZS90eHdyYXBwZXItcG9sa2Fkb3QnO1xuaW1wb3J0IHsgVW5zaWduZWRUcmFuc2FjdGlvbiB9IGZyb20gJ0BzdWJzdHJhdGUvdHh3cmFwcGVyLWNvcmUnO1xuaW1wb3J0IHsgVHlwZVJlZ2lzdHJ5IH0gZnJvbSAnQHN1YnN0cmF0ZS90eHdyYXBwZXItY29yZS9saWIvdHlwZXMnO1xuaW1wb3J0IEtleXJpbmcsIHsgZGVjb2RlQWRkcmVzcyB9IGZyb20gJ0Bwb2xrYWRvdC9rZXlyaW5nJztcbmltcG9ydCB7IEtleVBhaXIgfSBmcm9tICcuL2tleVBhaXInO1xuaW1wb3J0IHsgVHhEYXRhLCBEZWNvZGVkVHgsIFN0YWtlQXJncywgU3Rha2VBcmdzUGF5ZWVSYXcsIEFkZFByb3h5QXJncywgVW5zdGFrZUFyZ3MgfSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB1dGlscyBmcm9tICcuL3V0aWxzJztcblxuZXhwb3J0IGNsYXNzIFRyYW5zYWN0aW9uIGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uIHtcbiAgcHJvdGVjdGVkIF9kb3RUcmFuc2FjdGlvbjogVW5zaWduZWRUcmFuc2FjdGlvbjtcbiAgcHJpdmF0ZSBfc2lnbmVkVHJhbnNhY3Rpb24/OiBzdHJpbmc7XG4gIHByaXZhdGUgX3JlZ2lzdHJ5OiBUeXBlUmVnaXN0cnk7XG4gIHByaXZhdGUgX2NoYWluTmFtZTogc3RyaW5nO1xuICBwcml2YXRlIF9zZW5kZXI6IHN0cmluZztcblxuICBjb25zdHJ1Y3Rvcihjb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKGNvaW5Db25maWcpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGNhblNpZ24oeyBrZXkgfTogQmFzZUtleSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGtwID0gbmV3IEtleVBhaXIoeyBwcnY6IGtleSB9KTtcbiAgICBjb25zdCBhZGRyID0ga3AuZ2V0QWRkcmVzcygpO1xuICAgIGlmIChhZGRyID09PSB0aGlzLl9zZW5kZXIpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgYXN5bmMgc2lnbihrZXlQYWlyOiBLZXlQYWlyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLl9kb3RUcmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdObyB0cmFuc2FjdGlvbiBkYXRhIHRvIHNpZ24nKTtcbiAgICB9XG4gICAgY29uc3QgeyBwcnYsIHB1YiB9ID0ga2V5UGFpci5nZXRLZXlzKCk7XG4gICAgaWYgKCFwcnYpIHtcbiAgICAgIHRocm93IG5ldyBTaWduaW5nRXJyb3IoJ01pc3NpbmcgcHJpdmF0ZSBrZXknKTtcbiAgICB9XG4gICAgY29uc3Qgc2lnbmluZ1BheWxvYWQgPSBjb25zdHJ1Y3Quc2lnbmluZ1BheWxvYWQodGhpcy5fZG90VHJhbnNhY3Rpb24sIHtcbiAgICAgIHJlZ2lzdHJ5OiB0aGlzLl9yZWdpc3RyeSxcbiAgICB9KTtcbiAgICAvLyBTaWduIGEgcGF5bG9hZC4gVGhpcyBvcGVyYXRpb24gc2hvdWxkIGJlIHBlcmZvcm1lZCBvbiBhbiBvZmZsaW5lIGRldmljZS5cbiAgICBjb25zdCBrZXlyaW5nID0gbmV3IEtleXJpbmcoeyB0eXBlOiAnZWQyNTUxOScgfSk7XG4gICAgY29uc3Qgc2VjcmV0S2V5ID0gbmV3IFVpbnQ4QXJyYXkoQnVmZmVyLmZyb20ocHJ2LCAnaGV4JykpO1xuICAgIGNvbnN0IHB1YmxpY0tleSA9IG5ldyBVaW50OEFycmF5KEJ1ZmZlci5mcm9tKHB1YiwgJ2hleCcpKTtcbiAgICBjb25zdCBzaWduaW5nS2V5UGFpciA9IGtleXJpbmcuYWRkRnJvbVBhaXIoeyBzZWNyZXRLZXksIHB1YmxpY0tleSB9KTtcbiAgICBjb25zdCB0eEhleCA9IHV0aWxzLmNyZWF0ZVNpZ25lZFR4KHNpZ25pbmdLZXlQYWlyLCBzaWduaW5nUGF5bG9hZCwgdGhpcy5fZG90VHJhbnNhY3Rpb24sIHtcbiAgICAgIG1ldGFkYXRhUnBjOiB0aGlzLl9kb3RUcmFuc2FjdGlvbi5tZXRhZGF0YVJwYyxcbiAgICAgIHJlZ2lzdHJ5OiB0aGlzLl9yZWdpc3RyeSxcbiAgICB9KTtcblxuICAgIHRoaXMuX3NpZ25lZFRyYW5zYWN0aW9uID0gdHhIZXg7XG4gIH1cblxuICByZWdpc3RyeShyZWdpc3RyeTogVHlwZVJlZ2lzdHJ5KTogdm9pZCB7XG4gICAgdGhpcy5fcmVnaXN0cnkgPSByZWdpc3RyeTtcbiAgfVxuXG4gIGNoYWluTmFtZShjaGFpbk5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuX2NoYWluTmFtZSA9IGNoYWluTmFtZTtcbiAgfVxuXG4gIHNlbmRlcihzZW5kZXI6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuX3NlbmRlciA9IHNlbmRlcjtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB0b0Jyb2FkY2FzdEZvcm1hdCgpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5fZG90VHJhbnNhY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignRW1wdHkgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX3NpZ25lZFRyYW5zYWN0aW9uICYmIHRoaXMuX3NpZ25lZFRyYW5zYWN0aW9uLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiB0aGlzLl9zaWduZWRUcmFuc2FjdGlvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGNvbnN0cnVjdC5zaWduaW5nUGF5bG9hZCh0aGlzLl9kb3RUcmFuc2FjdGlvbiwge1xuICAgICAgICByZWdpc3RyeTogdGhpcy5fcmVnaXN0cnksXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICB0cmFuc2FjdGlvblNpemUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy50b0Jyb2FkY2FzdEZvcm1hdCgpLmxlbmd0aCAvIDI7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdG9Kc29uKCk6IFR4RGF0YSB7XG4gICAgaWYgKCF0aGlzLl9kb3RUcmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdFbXB0eSB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgICBjb25zdCBkZWNvZGVkVHggPSBkZWNvZGUodGhpcy5fZG90VHJhbnNhY3Rpb24sIHtcbiAgICAgIG1ldGFkYXRhUnBjOiB0aGlzLl9kb3RUcmFuc2FjdGlvbi5tZXRhZGF0YVJwYyxcbiAgICAgIHJlZ2lzdHJ5OiB0aGlzLl9yZWdpc3RyeSxcbiAgICB9KSBhcyB1bmtub3duIGFzIERlY29kZWRUeDtcblxuICAgIGNvbnN0IHJlc3VsdDogVHhEYXRhID0ge1xuICAgICAgc2VuZGVyOiBkZWNvZGVkVHguYWRkcmVzcyxcbiAgICAgIHJlZmVyZW5jZUJsb2NrOiBkZWNvZGVkVHguYmxvY2tIYXNoLFxuICAgICAgYmxvY2tOdW1iZXI6IGRlY29kZWRUeC5ibG9ja051bWJlcixcbiAgICAgIGdlbmVzaXNIYXNoOiBkZWNvZGVkVHguZ2VuZXNpc0hhc2gsXG4gICAgICBub25jZTogZGVjb2RlZFR4Lm5vbmNlLFxuICAgICAgc3BlY1ZlcnNpb246IGRlY29kZWRUeC5zcGVjVmVyc2lvbixcbiAgICAgIHRyYW5zYWN0aW9uVmVyc2lvbjogZGVjb2RlZFR4LnRyYW5zYWN0aW9uVmVyc2lvbixcbiAgICAgIGVyYVBlcmlvZDogZGVjb2RlZFR4LmVyYVBlcmlvZCxcbiAgICAgIGNoYWluTmFtZTogdGhpcy5fY2hhaW5OYW1lLFxuICAgICAgdGlwOiBkZWNvZGVkVHgudGlwLFxuICAgIH07XG5cbiAgICBpZiAodGhpcy50eXBlID09PSBUcmFuc2FjdGlvblR5cGUuU2VuZCkge1xuICAgICAgY29uc3QgdHhNZXRob2QgPSBkZWNvZGVkVHgubWV0aG9kLmFyZ3MgYXMgYW55O1xuICAgICAgaWYgKHR4TWV0aG9kLnJlYWwpIHtcbiAgICAgICAgY29uc3Qga2V5cGFpclJlYWwgPSBuZXcgS2V5UGFpcih7XG4gICAgICAgICAgcHViOiBCdWZmZXIuZnJvbShkZWNvZGVBZGRyZXNzKHR4TWV0aG9kLnJlYWwpKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgIH0pO1xuICAgICAgICByZXN1bHQub3duZXIgPSBrZXlwYWlyUmVhbC5nZXRBZGRyZXNzKCk7XG4gICAgICAgIHJlc3VsdC5mb3JjZVByb3h5VHlwZSA9IHR4TWV0aG9kLmZvcmNlUHJveHlUeXBlO1xuICAgICAgICBjb25zdCBkZWNvZGVkQ2FsbCA9IHV0aWxzLmRlY29kZUNhbGxNZXRob2QodGhpcy5fZG90VHJhbnNhY3Rpb24sIHtcbiAgICAgICAgICBtZXRhZGF0YVJwYzogdGhpcy5fZG90VHJhbnNhY3Rpb24ubWV0YWRhdGFScGMsXG4gICAgICAgICAgcmVnaXN0cnk6IHRoaXMuX3JlZ2lzdHJ5LFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3Qga2V5cGFpckRlc3QgPSBuZXcgS2V5UGFpcih7XG4gICAgICAgICAgcHViOiBCdWZmZXIuZnJvbShkZWNvZGVBZGRyZXNzKGRlY29kZWRDYWxsLmRlc3QuaWQpKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgIH0pO1xuICAgICAgICByZXN1bHQudG8gPSBrZXlwYWlyRGVzdC5nZXRBZGRyZXNzKCk7XG4gICAgICAgIHJlc3VsdC5hbW91bnQgPSBkZWNvZGVkQ2FsbC52YWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGtleXBhaXJEZXN0ID0gbmV3IEtleVBhaXIoe1xuICAgICAgICAgIHB1YjogQnVmZmVyLmZyb20oZGVjb2RlQWRkcmVzcyh0eE1ldGhvZC5kZXN0LmlkKSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICB9KTtcbiAgICAgICAgcmVzdWx0LnRvID0ga2V5cGFpckRlc3QuZ2V0QWRkcmVzcygpO1xuICAgICAgICByZXN1bHQuYW1vdW50ID0gdHhNZXRob2QudmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudHlwZSA9PT0gVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdBY3RpdmF0ZSkge1xuICAgICAgY29uc3QgdHhNZXRob2QgPSBkZWNvZGVkVHgubWV0aG9kLmFyZ3MgYXMgU3Rha2VBcmdzO1xuICAgICAgY29uc3Qga2V5cGFpciA9IG5ldyBLZXlQYWlyKHtcbiAgICAgICAgcHViOiBCdWZmZXIuZnJvbShkZWNvZGVBZGRyZXNzKHR4TWV0aG9kLmNvbnRyb2xsZXIuaWQsIGZhbHNlLCB0aGlzLl9yZWdpc3RyeS5jaGFpblNTNTgpKS50b1N0cmluZygnaGV4JyksXG4gICAgICB9KTtcblxuICAgICAgcmVzdWx0LmNvbnRyb2xsZXIgPSBrZXlwYWlyLmdldEFkZHJlc3MoKTtcbiAgICAgIHJlc3VsdC5hbW91bnQgPSB0eE1ldGhvZC52YWx1ZTtcblxuICAgICAgY29uc3QgcGF5ZWUgPSB0eE1ldGhvZC5wYXllZSBhcyBTdGFrZUFyZ3NQYXllZVJhdztcbiAgICAgIGlmIChwYXllZS5hY2NvdW50KSB7XG4gICAgICAgIGNvbnN0IGtleXBhaXIgPSBuZXcgS2V5UGFpcih7XG4gICAgICAgICAgcHViOiBCdWZmZXIuZnJvbShkZWNvZGVBZGRyZXNzKHBheWVlLmFjY291bnQsIGZhbHNlLCB0aGlzLl9yZWdpc3RyeS5jaGFpblNTNTgpKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgIH0pO1xuICAgICAgICByZXN1bHQucGF5ZWUgPSBrZXlwYWlyLmdldEFkZHJlc3MoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHBheWVlVHlwZSA9IHV0aWxzLmNhcGl0YWxpemVGaXJzdExldHRlcihPYmplY3Qua2V5cyhwYXllZSlbMF0pIGFzIHN0cmluZztcbiAgICAgICAgcmVzdWx0LnBheWVlID0gcGF5ZWVUeXBlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLnR5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5XYWxsZXRJbml0aWFsaXphdGlvbikge1xuICAgICAgY29uc3QgdHhNZXRob2QgPSBkZWNvZGVkVHgubWV0aG9kLmFyZ3MgYXMgQWRkUHJveHlBcmdzO1xuICAgICAgY29uc3Qga2V5cGFpciA9IG5ldyBLZXlQYWlyKHtcbiAgICAgICAgcHViOiBCdWZmZXIuZnJvbShkZWNvZGVBZGRyZXNzKHR4TWV0aG9kLmRlbGVnYXRlLCBmYWxzZSwgdGhpcy5fcmVnaXN0cnkuY2hhaW5TUzU4KSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgfSk7XG4gICAgICByZXN1bHQub3duZXIgPSBrZXlwYWlyLmdldEFkZHJlc3MoKTtcbiAgICAgIHJlc3VsdC5wcm94eVR5cGUgPSB0eE1ldGhvZC5wcm94eVR5cGU7XG4gICAgICByZXN1bHQuZGVsYXkgPSB0eE1ldGhvZC5kZWxheTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50eXBlID09PSBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ1VubG9jaykge1xuICAgICAgY29uc3QgdHhNZXRob2QgPSBkZWNvZGVkVHgubWV0aG9kLmFyZ3MgYXMgVW5zdGFrZUFyZ3M7XG4gICAgICByZXN1bHQuYW1vdW50ID0gdHhNZXRob2QudmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkIHRoZSBpbnB1dCBhbmQgb3V0cHV0IGRhdGEgb24gdGhpcyB0cmFuc2FjdGlvbi5cbiAgICovXG4gIGxvYWRJbnB1dHNBbmRPdXRwdXRzKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fZG90VHJhbnNhY3Rpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZGVjb2RlZFR4ID0gZGVjb2RlKHRoaXMuX2RvdFRyYW5zYWN0aW9uLCB7XG4gICAgICBtZXRhZGF0YVJwYzogdGhpcy5fZG90VHJhbnNhY3Rpb24ubWV0YWRhdGFScGMsXG4gICAgICByZWdpc3RyeTogdGhpcy5fcmVnaXN0cnksXG4gICAgfSkgYXMgdW5rbm93biBhcyBEZWNvZGVkVHg7XG5cbiAgICBpZiAodGhpcy50eXBlID09PSBUcmFuc2FjdGlvblR5cGUuU2VuZCkge1xuICAgICAgY29uc3QgdHhNZXRob2QgPSBkZWNvZGVkVHgubWV0aG9kLmFyZ3MgYXMgYW55O1xuICAgICAgbGV0IHRvOiBzdHJpbmc7XG4gICAgICBsZXQgdmFsdWU6IHN0cmluZztcbiAgICAgIGxldCBmcm9tOiBzdHJpbmc7XG4gICAgICBpZiAodHhNZXRob2QucmVhbCkge1xuICAgICAgICBjb25zdCBkZWNvZGVkQ2FsbCA9IHV0aWxzLmRlY29kZUNhbGxNZXRob2QodGhpcy5fZG90VHJhbnNhY3Rpb24sIHtcbiAgICAgICAgICBtZXRhZGF0YVJwYzogdGhpcy5fZG90VHJhbnNhY3Rpb24ubWV0YWRhdGFScGMsXG4gICAgICAgICAgcmVnaXN0cnk6IHRoaXMuX3JlZ2lzdHJ5LFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3Qga2V5cGFpckRlc3QgPSBuZXcgS2V5UGFpcih7XG4gICAgICAgICAgcHViOiBCdWZmZXIuZnJvbShkZWNvZGVBZGRyZXNzKGRlY29kZWRDYWxsLmRlc3QuaWQpKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBrZXlwYWlyRnJvbSA9IG5ldyBLZXlQYWlyKHtcbiAgICAgICAgICBwdWI6IEJ1ZmZlci5mcm9tKGRlY29kZUFkZHJlc3ModHhNZXRob2QucmVhbCkpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRvID0ga2V5cGFpckRlc3QuZ2V0QWRkcmVzcygpO1xuICAgICAgICB2YWx1ZSA9IGAke2RlY29kZWRDYWxsLnZhbHVlfWA7XG4gICAgICAgIGZyb20gPSBrZXlwYWlyRnJvbS5nZXRBZGRyZXNzKHR4TWV0aG9kLnJlYWwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qga2V5cGFpckRlc3QgPSBuZXcgS2V5UGFpcih7XG4gICAgICAgICAgcHViOiBCdWZmZXIuZnJvbShkZWNvZGVBZGRyZXNzKHR4TWV0aG9kLmRlc3QuaWQpKS50b1N0cmluZygnaGV4JyksXG4gICAgICAgIH0pO1xuICAgICAgICB0byA9IGtleXBhaXJEZXN0LmdldEFkZHJlc3MoKTtcbiAgICAgICAgdmFsdWUgPSB0eE1ldGhvZC52YWx1ZTtcbiAgICAgICAgZnJvbSA9IGRlY29kZWRUeC5hZGRyZXNzO1xuICAgICAgfVxuICAgICAgdGhpcy5fb3V0cHV0cyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6IHRvLFxuICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIGNvaW46IHRoaXMuX2NvaW5Db25maWcubmFtZSxcbiAgICAgICAgfSxcbiAgICAgIF07XG5cbiAgICAgIHRoaXMuX2lucHV0cyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6IGZyb20sXG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgY29pbjogdGhpcy5fY29pbkNvbmZpZy5uYW1lLFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICB9XG4gIH1cblxuICBzZXRUcmFuc2FjdGlvbih0eDogVW5zaWduZWRUcmFuc2FjdGlvbik6IHZvaWQge1xuICAgIHRoaXMuX2RvdFRyYW5zYWN0aW9uID0gdHg7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSB0cmFuc2FjdGlvbiB0eXBlLlxuICAgKlxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9uVHlwZX0gdHJhbnNhY3Rpb25UeXBlIFRoZSB0cmFuc2FjdGlvbiB0eXBlIHRvIGJlIHNldC5cbiAgICovXG4gIHRyYW5zYWN0aW9uVHlwZSh0cmFuc2FjdGlvblR5cGU6IFRyYW5zYWN0aW9uVHlwZSk6IHZvaWQge1xuICAgIHRoaXMuX3R5cGUgPSB0cmFuc2FjdGlvblR5cGU7XG4gIH1cbn1cbiJdfQ==