@bitgo-beta/sdk-coin-trx 1.2.3-alpha.317 → 1.2.3-alpha.319

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 (45) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/resources/protobuf/Contract.proto +16 -0
  3. package/dist/resources/protobuf/tron.d.ts +1012 -0
  4. package/dist/resources/protobuf/tron.js +4169 -1231
  5. package/dist/resources/protobuf/tron.proto +4 -0
  6. package/dist/src/lib/contractCallBuilder.d.ts +1 -35
  7. package/dist/src/lib/contractCallBuilder.d.ts.map +1 -1
  8. package/dist/src/lib/contractCallBuilder.js +3 -66
  9. package/dist/src/lib/enum.d.ts +24 -1
  10. package/dist/src/lib/enum.d.ts.map +1 -1
  11. package/dist/src/lib/enum.js +26 -2
  12. package/dist/src/lib/freezeBalanceTxBuilder.d.ts +71 -0
  13. package/dist/src/lib/freezeBalanceTxBuilder.d.ts.map +1 -0
  14. package/dist/src/lib/freezeBalanceTxBuilder.js +211 -0
  15. package/dist/src/lib/iface.d.ts +171 -2
  16. package/dist/src/lib/iface.d.ts.map +1 -1
  17. package/dist/src/lib/iface.js +1 -1
  18. package/dist/src/lib/transaction.d.ts.map +1 -1
  19. package/dist/src/lib/transaction.js +51 -1
  20. package/dist/src/lib/transactionBuilder.d.ts +50 -5
  21. package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
  22. package/dist/src/lib/transactionBuilder.js +83 -8
  23. package/dist/src/lib/unfreezeBalanceTxBuilder.d.ts +65 -0
  24. package/dist/src/lib/unfreezeBalanceTxBuilder.d.ts.map +1 -0
  25. package/dist/src/lib/unfreezeBalanceTxBuilder.js +204 -0
  26. package/dist/src/lib/utils.d.ts +34 -2
  27. package/dist/src/lib/utils.d.ts.map +1 -1
  28. package/dist/src/lib/utils.js +178 -3
  29. package/dist/src/lib/voteWitnessTxBuilder.d.ts +62 -0
  30. package/dist/src/lib/voteWitnessTxBuilder.d.ts.map +1 -0
  31. package/dist/src/lib/voteWitnessTxBuilder.js +219 -0
  32. package/dist/src/lib/withdrawExpireUnfreezeTxBuilder.d.ts +49 -0
  33. package/dist/src/lib/withdrawExpireUnfreezeTxBuilder.d.ts.map +1 -0
  34. package/dist/src/lib/withdrawExpireUnfreezeTxBuilder.js +167 -0
  35. package/dist/src/lib/wrappedBuilder.d.ts +32 -0
  36. package/dist/src/lib/wrappedBuilder.d.ts.map +1 -1
  37. package/dist/src/lib/wrappedBuilder.js +49 -1
  38. package/dist/src/trx.d.ts +0 -2
  39. package/dist/src/trx.d.ts.map +1 -1
  40. package/dist/src/trx.js +5 -6
  41. package/package.json +8 -7
  42. package/resources/protobuf/Contract.proto +16 -0
  43. package/resources/protobuf/tron.d.ts +1012 -0
  44. package/resources/protobuf/tron.js +4169 -1231
  45. package/resources/protobuf/tron.proto +4 -0
@@ -0,0 +1,219 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VoteWitnessTxBuilder = 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 VoteWitnessTxBuilder 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.StakingVote;
20
+ }
21
+ /**
22
+ * Set the votes to be used in the transaction
23
+ *
24
+ * @param votes vote data containing vote address and vote count
25
+ * @returns the builder with the new parameter set
26
+ */
27
+ setVotes(votes) {
28
+ this.validateVotes(votes);
29
+ this._votes = votes.map((vote) => ({
30
+ ...vote,
31
+ vote_address: (0, utils_1.getHexAddressFromBase58Address)(vote.vote_address),
32
+ }));
33
+ return this;
34
+ }
35
+ /** @inheritdoc */
36
+ extendValidTo(extensionMs) {
37
+ if (this.transaction.signature && this.transaction.signature.length > 0) {
38
+ throw new sdk_core_1.ExtendTransactionError('Cannot extend a signed transaction');
39
+ }
40
+ if (extensionMs <= 0) {
41
+ throw new Error('Value cannot be below zero');
42
+ }
43
+ if (extensionMs > utils_1.TRANSACTION_MAX_EXPIRATION) {
44
+ throw new sdk_core_1.ExtendTransactionError('The expiration cannot be extended more than one year');
45
+ }
46
+ if (this._expiration) {
47
+ this._expiration = this._expiration + extensionMs;
48
+ }
49
+ else {
50
+ throw new Error('There is not expiration to extend');
51
+ }
52
+ }
53
+ /**
54
+ * Initialize the transaction builder fields using the transaction data
55
+ *
56
+ * @param {TransactionReceipt | string} rawTransaction the transaction data in a string or JSON format
57
+ * @returns {VoteWitnessTxBuilder} the builder with the transaction data set
58
+ */
59
+ initBuilder(rawTransaction) {
60
+ this.transaction = this.fromImplementation(rawTransaction);
61
+ this.transaction.setTransactionType(this.transactionType);
62
+ this.validateRawTransaction(rawTransaction);
63
+ const tx = this.fromImplementation(rawTransaction);
64
+ this.transaction = tx;
65
+ this._signingKeys = [];
66
+ const rawData = tx.toJson().raw_data;
67
+ this._refBlockBytes = rawData.ref_block_bytes;
68
+ this._refBlockHash = rawData.ref_block_hash;
69
+ this._expiration = rawData.expiration;
70
+ this._timestamp = rawData.timestamp;
71
+ this.transaction.setTransactionType(sdk_core_1.TransactionType.StakingVote);
72
+ const contractCall = rawData.contract[0];
73
+ this.initVoteWitnessContractCall(contractCall);
74
+ return this;
75
+ }
76
+ /**
77
+ * Initialize the votewitnesscontract call specific data
78
+ *
79
+ * @param {VoteWitnessContract} contractCall object with transfer data
80
+ */
81
+ initVoteWitnessContractCall(voteWitnessContractCall) {
82
+ const { votes, owner_address } = voteWitnessContractCall.parameter.value;
83
+ if (owner_address) {
84
+ this.source({ address: (0, utils_1.getBase58AddressFromHex)(owner_address) });
85
+ }
86
+ if (votes) {
87
+ this.setVotes(votes.map((vote) => ({
88
+ ...vote,
89
+ vote_address: (0, utils_1.getBase58AddressFromHex)(vote.vote_address),
90
+ })));
91
+ }
92
+ }
93
+ async buildImplementation() {
94
+ this.createVoteWitnessContractTransaction();
95
+ /** @inheritdoccreateTransaction */
96
+ // This method must be extended on child classes
97
+ if (this._signingKeys.length > 0) {
98
+ this.applySignatures();
99
+ }
100
+ if (!this.transaction.id) {
101
+ throw new sdk_core_1.BuildTransactionError('A valid transaction must have an id');
102
+ }
103
+ return Promise.resolve(this.transaction);
104
+ }
105
+ /**
106
+ * Creates the vote witness transaction
107
+ */
108
+ createVoteWitnessContractTransaction() {
109
+ const rawDataHex = this.getVoteWitnessRawDataHex();
110
+ const rawData = (0, utils_1.decodeTransaction)(rawDataHex);
111
+ const contract = rawData.contract[0];
112
+ const contractParameter = contract.parameter;
113
+ contractParameter.value.owner_address = this._ownerAddress.toLocaleLowerCase();
114
+ contractParameter.value.votes = this._votes;
115
+ contractParameter.type_url = 'type.googleapis.com/protocol.VoteWitnessContract';
116
+ contract.type = 'VoteWitnessContract';
117
+ const hexBuffer = Buffer.from(rawDataHex, 'hex');
118
+ const id = (0, crypto_1.createHash)('sha256').update(hexBuffer).digest('hex');
119
+ const txRecip = {
120
+ raw_data: rawData,
121
+ raw_data_hex: rawDataHex,
122
+ txID: id,
123
+ signature: this.transaction.signature,
124
+ };
125
+ this.transaction = new transaction_1.Transaction(this._coinConfig, txRecip);
126
+ }
127
+ /**
128
+ * Helper method to get the vote witness transaction raw data hex
129
+ * @returns vote witness transaction raw data hex
130
+ */
131
+ getVoteWitnessRawDataHex() {
132
+ const voteArray = this._votes.map((vote) => {
133
+ const voteObject = tron_1.protocol.Vote.fromObject({
134
+ voteAddress: (0, utils_1.getByteArrayFromHexAddress)(vote.vote_address),
135
+ voteCount: vote.vote_count,
136
+ });
137
+ return tron_1.protocol.Vote.create(voteObject);
138
+ });
139
+ const rawContract = {
140
+ ownerAddress: (0, utils_1.getByteArrayFromHexAddress)(this._ownerAddress),
141
+ votes: voteArray,
142
+ };
143
+ const voteWitnessContract = tron_1.protocol.VoteWitnessContract.fromObject(rawContract);
144
+ const voteWitnessContractBytes = tron_1.protocol.VoteWitnessContract.encode(voteWitnessContract).finish();
145
+ const txContract = {
146
+ type: ContractType.VoteWitnessContract,
147
+ parameter: {
148
+ value: voteWitnessContractBytes,
149
+ type_url: 'type.googleapis.com/protocol.VoteWitnessContract',
150
+ },
151
+ };
152
+ const raw = {
153
+ refBlockBytes: Buffer.from(this._refBlockBytes, 'hex'),
154
+ refBlockHash: Buffer.from(this._refBlockHash, 'hex'),
155
+ expiration: this._expiration || Date.now() + utils_1.TRANSACTION_DEFAULT_EXPIRATION,
156
+ timestamp: this._timestamp || Date.now(),
157
+ contract: [txContract],
158
+ };
159
+ const rawTx = tron_1.protocol.Transaction.raw.create(raw);
160
+ return Buffer.from(tron_1.protocol.Transaction.raw.encode(rawTx).finish()).toString('hex');
161
+ }
162
+ /** @inheritdoc */
163
+ signImplementation(key) {
164
+ if (this._signingKeys.some((signingKey) => signingKey.key === key.key)) {
165
+ throw new sdk_core_1.SigningError('Duplicated key');
166
+ }
167
+ this._signingKeys.push(key);
168
+ // We keep this return for compatibility but is not meant to be use
169
+ return this.transaction;
170
+ }
171
+ applySignatures() {
172
+ if (!this.transaction.inputs) {
173
+ throw new sdk_core_1.SigningError('Transaction has no inputs');
174
+ }
175
+ this._signingKeys.forEach((key) => this.applySignature(key));
176
+ }
177
+ validateTransaction(transaction) {
178
+ this.validateVoteTransactionFields();
179
+ }
180
+ /**
181
+ * Validates the votes array
182
+ *
183
+ * @param {VoteWitnessData[]} votes - The votes array to validate
184
+ * @throws {Error} when the votes array is invalid
185
+ */
186
+ validateVotes(votes) {
187
+ if (!votes || votes.length === 0) {
188
+ throw new Error('Votes array is missing or empty');
189
+ }
190
+ votes.forEach((vote) => {
191
+ if (!vote.vote_address) {
192
+ throw new Error('Vote address is missing');
193
+ }
194
+ this.validateAddress({ address: vote.vote_address });
195
+ if (vote.vote_count == null || vote.vote_count < 0) {
196
+ throw new Error('Invalid vote count');
197
+ }
198
+ });
199
+ }
200
+ /**
201
+ * Validates if the transaction is a valid vote transaction
202
+ * @param {TransactionReceipt} transaction - The transaction to validate
203
+ * @throws {InvalidTransactionError} when the transaction is invalid
204
+ */
205
+ validateVoteTransactionFields() {
206
+ if (!this._ownerAddress) {
207
+ throw new sdk_core_1.BuildTransactionError('Missing parameter: source');
208
+ }
209
+ if (!this._refBlockBytes || !this._refBlockHash) {
210
+ throw new sdk_core_1.BuildTransactionError('Missing block reference information');
211
+ }
212
+ // Validate votes
213
+ if (!this._votes || this._votes.length === 0) {
214
+ throw new sdk_core_1.BuildTransactionError('Missing or empty votes array');
215
+ }
216
+ }
217
+ }
218
+ exports.VoteWitnessTxBuilder = VoteWitnessTxBuilder;
219
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidm90ZVdpdG5lc3NUeEJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3ZvdGVXaXRuZXNzVHhCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1DQUFvQztBQUNwQyxtREFBNkg7QUFFN0gsNkRBQTBEO0FBQzFELCtDQUE0QztBQUU1QyxtQ0FPaUI7QUFDakIsd0RBQXlEO0FBRXpELElBQU8sWUFBWSxHQUFHLGVBQVEsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQztBQUVqRSxNQUFhLG9CQUFxQixTQUFRLHVDQUFrQjtJQUkxRCxZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNuQixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUkseUJBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLElBQWMsZUFBZTtRQUMzQixPQUFPLDBCQUFlLENBQUMsV0FBVyxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILFFBQVEsQ0FBQyxLQUF3QjtRQUMvQixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNqQyxHQUFHLElBQUk7WUFDUCxZQUFZLEVBQUUsSUFBQSxzQ0FBOEIsRUFBQyxJQUFJLENBQUMsWUFBWSxDQUFDO1NBQ2hFLENBQUMsQ0FBQyxDQUFDO1FBQ0osT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLGFBQWEsQ0FBQyxXQUFtQjtRQUMvQixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMs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Q0FBQztZQUNoRCxNQUFNLElBQUksZ0NBQXFCLENBQUMscUNBQXFDLENBQUMsQ0FBQztRQUN6RSxDQUFDO1FBRUQsaUJBQWlCO1FBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzdDLE1BQU0sSUFBSSxnQ0FBcUIsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO1FBQ2xFLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUEzT0Qsb0RBMk9DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlSGFzaCB9IGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvblR5cGUsIEJhc2VLZXksIEJ1aWxkVHJhbnNhY3Rpb25FcnJvciwgU2lnbmluZ0Vycm9yLCBFeHRlbmRUcmFuc2FjdGlvbkVycm9yIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi90cmFuc2FjdGlvbkJ1aWxkZXInO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICcuL3RyYW5zYWN0aW9uJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uUmVjZWlwdCwgVm90ZVdpdG5lc3NEYXRhLCBWb3RlV2l0bmVzc0NvbnRyYWN0IH0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQge1xuICBkZWNvZGVUcmFuc2FjdGlvbixcbiAgZ2V0SGV4QWRkcmVzc0Zyb21CYXNlNThBZGRyZXNzLFxuICBnZXRCeXRlQXJyYXlGcm9tSGV4QWRkcmVzcyxcbiAgZ2V0QmFzZTU4QWRkcmVzc0Zyb21IZXgsXG4gIFRSQU5TQUNUSU9OX0RFRkFVTFRfRVhQSVJBVElPTixcbiAgVFJBTlNBQ1RJT05fTUFYX0VYUElSQVRJT04sXG59IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgcHJvdG9jb2wgfSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvcHJvdG9idWYvdHJvbic7XG5cbmltcG9ydCBDb250cmFjdFR5cGUgPSBwcm90b2NvbC5UcmFuc2FjdGlvbi5Db250cmFjdC5Db250cmFjdFR5cGU7XG5cbmV4cG9ydCBjbGFzcyBWb3RlV2l0bmVzc1R4QnVpbGRlciBleHRlbmRzIFRyYW5zYWN0aW9uQnVpbGRlciB7XG4gIHByb3RlY3RlZCBfc2lnbmluZ0tleXM6IEJhc2VLZXlbXTtcbiAgcHJpdmF0ZSBfdm90ZXM6IFZvdGVXaXRuZXNzRGF0YVtdO1xuXG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgICB0aGlzLl9zaWduaW5nS2V5cyA9IFtdO1xuICAgIHRoaXMudHJhbnNhY3Rpb24gPSBuZXcgVHJhbnNhY3Rpb24oX2NvaW5Db25maWcpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBnZXQgdHJhbnNhY3Rpb25UeXBlKCk6IFRyYW5zYWN0aW9uVHlwZSB7XG4gICAgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nVm90ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHZvdGVzIHRvIGJlIHVzZWQgaW4gdGhlIHRyYW5zYWN0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB2b3RlcyB2b3RlIGRhdGEgY29udGFpbmluZyB2b3RlIGFkZHJlc3MgYW5kIHZvdGUgY291bnRcbiAgICogQHJldHVybnMgdGhlIGJ1aWxkZXIgd2l0aCB0aGUgbmV3IHBhcmFtZXRlciBzZXRcbiAgICovXG4gIHNldFZvdGVzKHZvdGVzOiBWb3RlV2l0bmVzc0RhdGFbXSk6IHRoaXMge1xuICAgIHRoaXMudmFsaWRhdGVWb3Rlcyh2b3Rlcyk7XG4gICAgdGhpcy5fdm90ZXMgPSB2b3Rlcy5tYXAoKHZvdGUpID0+ICh7XG4gICAgICAuLi52b3RlLFxuICAgICAgdm90ZV9hZGRyZXNzOiBnZXRIZXhBZGRyZXNzRnJvbUJhc2U1OEFkZHJlc3Modm90ZS52b3RlX2FkZHJlc3MpLFxuICAgIH0pKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBleHRlbmRWYWxpZFRvKGV4dGVuc2lvbk1zOiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodGhpcy50cmFuc2FjdGlvbi5zaWduYXR1cmUgJiYgdGhpcy50cmFuc2FjdGlvbi5zaWduYXR1cmUubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgbmV3IEV4dGVuZFRyYW5zYWN0aW9uRXJyb3IoJ0Nhbm5vdCBleHRlbmQgYSBzaWduZWQgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG5cbiAgICBpZiAoZXh0ZW5zaW9uTXMgPD0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdWYWx1ZSBjYW5ub3QgYmUgYmVsb3cgemVybycpO1xuICAgIH1cblxuICAgIGlmIChleHRlbnNpb25NcyA+IFRSQU5TQUNUSU9OX01BWF9FWFBJUkFUSU9OKSB7XG4gICAgICB0aHJvdyBuZXcgRXh0ZW5kVHJhbnNhY3Rpb25FcnJvcignVGhlIGV4cGlyYXRpb24gY2Fubm90IGJlIGV4dGVuZGVkIG1vcmUgdGhhbiBvbmUgeWVhcicpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9leHBpcmF0aW9uKSB7XG4gICAgICB0aGlzLl9leHBpcmF0aW9uID0gdGhpcy5fZXhwaXJhdGlvbiArIGV4dGVuc2lvbk1zO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZXJlIGlzIG5vdCBleHBpcmF0aW9uIHRvIGV4dGVuZCcpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIHRoZSB0cmFuc2FjdGlvbiBidWlsZGVyIGZpZWxkcyB1c2luZyB0aGUgdHJhbnNhY3Rpb24gZGF0YVxuICAgKlxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9uUmVjZWlwdCB8IHN0cmluZ30gcmF3VHJhbnNhY3Rpb24gdGhlIHRyYW5zYWN0aW9uIGRhdGEgaW4gYSBzdHJpbmcgb3IgSlNPTiBmb3JtYXRcbiAgICogQHJldHVybnMge1ZvdGVXaXRuZXNzVHhCdWlsZGVyfSB0aGUgYnVpbGRlciB3aXRoIHRoZSB0cmFuc2FjdGlvbiBkYXRhIHNldFxuICAgKi9cbiAgaW5pdEJ1aWxkZXIocmF3VHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uUmVjZWlwdCB8IHN0cmluZyk6IHRoaXMge1xuICAgIHRoaXMudHJhbnNhY3Rpb24gPSB0aGlzLmZyb21JbXBsZW1lbnRhdGlvbihyYXdUcmFuc2FjdGlvbik7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5zZXRUcmFuc2FjdGlvblR5cGUodGhpcy50cmFuc2FjdGlvblR5cGUpO1xuICAgIHRoaXMudmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbik7XG4gICAgY29uc3QgdHggPSB0aGlzLmZyb21JbXBsZW1lbnRhdGlvbihyYXdUcmFuc2FjdGlvbik7XG4gICAgdGhpcy50cmFuc2FjdGlvbiA9IHR4O1xuICAgIHRoaXMuX3NpZ25pbmdLZXlzID0gW107XG4gICAgY29uc3QgcmF3RGF0YSA9IHR4LnRvSnNvbigpLnJhd19kYXRhO1xuICAgIHRoaXMuX3JlZkJsb2NrQnl0ZXMgPSByYXdEYXRhLnJlZl9ibG9ja19ieXRlcztcbiAgICB0aGlzLl9yZWZCbG9ja0hhc2ggPSByYXdEYXRhLnJlZl9ibG9ja19oYXNoO1xuICAgIHRoaXMuX2V4cGlyYXRpb24gPSByYXdEYXRhLmV4cGlyYXRpb247XG4gICAgdGhpcy5fdGltZXN0YW1wID0gcmF3RGF0YS50aW1lc3RhbXA7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5zZXRUcmFuc2FjdGlvblR5cGUoVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdWb3RlKTtcbiAgICBjb25zdCBjb250cmFjdENhbGwgPSByYXdEYXRhLmNvbnRyYWN0WzBdIGFzIFZvdGVXaXRuZXNzQ29udHJhY3Q7XG4gICAgdGhpcy5pbml0Vm90ZVdpdG5lc3NDb250cmFjdENhbGwoY29udHJhY3RDYWxsKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIHRoZSB2b3Rld2l0bmVzc2NvbnRyYWN0IGNhbGwgc3BlY2lmaWMgZGF0YVxuICAgKlxuICAgKiBAcGFyYW0ge1ZvdGVXaXRuZXNzQ29udHJhY3R9IGNvbnRyYWN0Q2FsbCBvYmplY3Qgd2l0aCB0cmFuc2ZlciBkYXRhXG4gICAqL1xuICBwcm90ZWN0ZWQgaW5pdFZvdGVXaXRuZXNzQ29udHJhY3RDYWxsKHZvdGVXaXRuZXNzQ29udHJhY3RDYWxsOiBWb3RlV2l0bmVzc0NvbnRyYWN0KTogdm9pZCB7XG4gICAgY29uc3QgeyB2b3Rlcywgb3duZXJfYWRkcmVzcyB9ID0gdm90ZVdpdG5lc3NDb250cmFjdENhbGwucGFyYW1ldGVyLnZhbHVlO1xuICAgIGlmIChvd25lcl9hZGRyZXNzKSB7XG4gICAgICB0aGlzLnNvdXJjZSh7IGFkZHJlc3M6IGdldEJhc2U1OEFkZHJlc3NGcm9tSGV4KG93bmVyX2FkZHJlc3MpIH0pO1xuICAgIH1cblxuICAgIGlmICh2b3Rlcykge1xuICAgICAgdGhpcy5zZXRWb3RlcyhcbiAgICAgICAgdm90ZXMubWFwKCh2b3RlKSA9PiAoe1xuICAgICAgICAgIC4uLnZvdGUsXG4gICAgICAgICAgdm90ZV9hZGRyZXNzOiBnZXRCYXNlNThBZGRyZXNzRnJvbUhleCh2b3RlLnZvdGVfYWRkcmVzcyksXG4gICAgICAgIH0pKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgYnVpbGRJbXBsZW1lbnRhdGlvbigpOiBQcm9taXNlPFRyYW5zYWN0aW9uPiB7XG4gICAgdGhpcy5jcmVhdGVWb3RlV2l0bmVzc0NvbnRyYWN0VHJhbnNhY3Rpb24oKTtcbiAgICAvKiogQGluaGVyaXRkb2NjcmVhdGVUcmFuc2FjdGlvbiAqL1xuICAgIC8vIFRoaXMgbWV0aG9kIG11c3QgYmUgZXh0ZW5kZWQgb24gY2hpbGQgY2xhc3Nlc1xuICAgIGlmICh0aGlzLl9zaWduaW5nS2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmFwcGx5U2lnbmF0dXJlcygpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy50cmFuc2FjdGlvbi5pZCkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignQSB2YWxpZCB0cmFuc2FjdGlvbiBtdXN0IGhhdmUgYW4gaWQnKTtcbiAgICB9XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLnRyYW5zYWN0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIHRoZSB2b3RlIHdpdG5lc3MgdHJhbnNhY3Rpb25cbiAgICovXG4gIHByaXZhdGUgY3JlYXRlVm90ZVdpdG5lc3NDb250cmFjdFRyYW5zYWN0aW9uKCk6IHZvaWQge1xuICAgIGNvbnN0IHJhd0RhdGFIZXggPSB0aGlzLmdldFZvdGVXaXRuZXNzUmF3RGF0YUhleCgpO1xuICAgIGNvbnN0IHJhd0RhdGEgPSBkZWNvZGVUcmFuc2FjdGlvbihyYXdEYXRhSGV4KTtcbiAgICBjb25zdCBjb250cmFjdCA9IHJhd0RhdGEuY29udHJhY3RbMF0gYXMgVm90ZVdpdG5lc3NDb250cmFjdDtcbiAgICBjb25zdCBjb250cmFjdFBhcmFtZXRlciA9IGNvbnRyYWN0LnBhcmFtZXRlcjtcbiAgICBjb250cmFjdFBhcmFtZXRlci52YWx1ZS5vd25lcl9hZGRyZXNzID0gdGhpcy5fb3duZXJBZGRyZXNzLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgY29udHJhY3RQYXJhbWV0ZXIudmFsdWUudm90ZXMgPSB0aGlzLl92b3RlcztcbiAgICBjb250cmFjdFBhcmFtZXRlci50eXBlX3VybCA9ICd0eXBlLmdvb2dsZWFwaXMuY29tL3Byb3RvY29sLlZvdGVXaXRuZXNzQ29udHJhY3QnO1xuICAgIGNvbnRyYWN0LnR5cGUgPSAnVm90ZVdpdG5lc3NDb250cmFjdCc7XG4gICAgY29uc3QgaGV4QnVmZmVyID0gQnVmZmVyLmZyb20ocmF3RGF0YUhleCwgJ2hleCcpO1xuICAgIGNvbnN0IGlkID0gY3JlYXRlSGFzaCgnc2hhMjU2JykudXBkYXRlKGhleEJ1ZmZlcikuZGlnZXN0KCdoZXgnKTtcbiAgICBjb25zdCB0eFJlY2lwOiBUcmFuc2FjdGlvblJlY2VpcHQgPSB7XG4gICAgICByYXdfZGF0YTogcmF3RGF0YSxcbiAgICAgIHJhd19kYXRhX2hleDogcmF3RGF0YUhleCxcbiAgICAgIHR4SUQ6IGlkLFxuICAgICAgc2lnbmF0dXJlOiB0aGlzLnRyYW5zYWN0aW9uLnNpZ25hdHVyZSxcbiAgICB9O1xuICAgIHRoaXMudHJhbnNhY3Rpb24gPSBuZXcgVHJhbnNhY3Rpb24odGhpcy5fY29pbkNvbmZpZywgdHhSZWNpcCk7XG4gIH1cblxuICAvKipcbiAgICogSGVscGVyIG1ldGhvZCB0byBnZXQgdGhlIHZvdGUgd2l0bmVzcyB0cmFuc2FjdGlvbiByYXcgZGF0YSBoZXhcbiAgICogQHJldHVybnMgdm90ZSB3aXRuZXNzIHRyYW5zYWN0aW9uIHJhdyBkYXRhIGhleFxuICAgKi9cbiAgcHJpdmF0ZSBnZXRWb3RlV2l0bmVzc1Jhd0RhdGFIZXgoKTogc3RyaW5nIHtcbiAgICBjb25zdCB2b3RlQXJyYXkgPSB0aGlzLl92b3Rlcy5tYXAoKHZvdGUpID0+IHtcbiAgICAgIGNvbnN0IHZvdGVPYmplY3QgPSBwcm90b2NvbC5Wb3RlLmZyb21PYmplY3Qoe1xuICAgICAgICB2b3RlQWRkcmVzczogZ2V0Qnl0ZUFycmF5RnJvbUhleEFkZHJlc3Modm90ZS52b3RlX2FkZHJlc3MpLFxuICAgICAgICB2b3RlQ291bnQ6IHZvdGUudm90ZV9jb3VudCxcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gcHJvdG9jb2wuVm90ZS5jcmVhdGUodm90ZU9iamVjdCk7XG4gICAgfSk7XG4gICAgY29uc3QgcmF3Q29udHJhY3QgPSB7XG4gICAgICBvd25lckFkZHJlc3M6IGdldEJ5dGVBcnJheUZyb21IZXhBZGRyZXNzKHRoaXMuX293bmVyQWRkcmVzcyksXG4gICAgICB2b3Rlczogdm90ZUFycmF5LFxuICAgIH07XG5cbiAgICBjb25zdCB2b3RlV2l0bmVzc0NvbnRyYWN0ID0gcHJvdG9jb2wuVm90ZVdpdG5lc3NDb250cmFjdC5mcm9tT2JqZWN0KHJhd0NvbnRyYWN0KTtcbiAgICBjb25zdCB2b3RlV2l0bmVzc0NvbnRyYWN0Qnl0ZXMgPSBwcm90b2NvbC5Wb3RlV2l0bmVzc0NvbnRyYWN0LmVuY29kZSh2b3RlV2l0bmVzc0NvbnRyYWN0KS5maW5pc2goKTtcbiAgICBjb25zdCB0eENvbnRyYWN0ID0ge1xuICAgICAgdHlwZTogQ29udHJhY3RUeXBlLlZvdGVXaXRuZXNzQ29udHJhY3QsXG4gICAgICBwYXJhbWV0ZXI6IHtcbiAgICAgICAgdmFsdWU6IHZvdGVXaXRuZXNzQ29udHJhY3RCeXRlcyxcbiAgICAgICAgdHlwZV91cmw6ICd0eXBlLmdvb2dsZWFwaXMuY29tL3Byb3RvY29sLlZvdGVXaXRuZXNzQ29udHJhY3QnLFxuICAgICAgfSxcbiAgICB9O1xuICAgIGNvbnN0IHJhdyA9IHtcbiAgICAgIHJlZkJsb2NrQnl0ZXM6IEJ1ZmZlci5mcm9tKHRoaXMuX3JlZkJsb2NrQnl0ZXMsICdoZXgnKSxcbiAgICAgIHJlZkJsb2NrSGFzaDogQnVmZmVyLmZyb20odGhpcy5fcmVmQmxvY2tIYXNoLCAnaGV4JyksXG4gICAgICBleHBpcmF0aW9uOiB0aGlzLl9leHBpcmF0aW9uIHx8IERhdGUubm93KCkgKyBUUkFOU0FDVElPTl9ERUZBVUxUX0VYUElSQVRJT04sXG4gICAgICB0aW1lc3RhbXA6IHRoaXMuX3RpbWVzdGFtcCB8fCBEYXRlLm5vdygpLFxuICAgICAgY29udHJhY3Q6IFt0eENvbnRyYWN0XSxcbiAgICB9O1xuICAgIGNvbnN0IHJhd1R4ID0gcHJvdG9jb2wuVHJhbnNhY3Rpb24ucmF3LmNyZWF0ZShyYXcpO1xuICAgIHJldHVybiBCdWZmZXIuZnJvbShwcm90b2NvbC5UcmFuc2FjdGlvbi5yYXcuZW5jb2RlKHJhd1R4KS5maW5pc2goKSkudG9TdHJpbmcoJ2hleCcpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBzaWduSW1wbGVtZW50YXRpb24oa2V5OiBCYXNlS2V5KTogVHJhbnNhY3Rpb24ge1xuICAgIGlmICh0aGlzLl9zaWduaW5nS2V5cy5zb21lKChzaWduaW5nS2V5KSA9PiBzaWduaW5nS2V5LmtleSA9PT0ga2V5LmtleSkpIHtcbiAgICAgIHRocm93IG5ldyBTaWduaW5nRXJyb3IoJ0R1cGxpY2F0ZWQga2V5Jyk7XG4gICAgfVxuICAgIHRoaXMuX3NpZ25pbmdLZXlzLnB1c2goa2V5KTtcblxuICAgIC8vIFdlIGtlZXAgdGhpcyByZXR1cm4gZm9yIGNvbXBhdGliaWxpdHkgYnV0IGlzIG5vdCBtZWFudCB0byBiZSB1c2VcbiAgICByZXR1cm4gdGhpcy50cmFuc2FjdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlTaWduYXR1cmVzKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy50cmFuc2FjdGlvbi5pbnB1dHMpIHtcbiAgICAgIHRocm93IG5ldyBTaWduaW5nRXJyb3IoJ1RyYW5zYWN0aW9uIGhhcyBubyBpbnB1dHMnKTtcbiAgICB9XG4gICAgdGhpcy5fc2lnbmluZ0tleXMuZm9yRWFjaCgoa2V5KSA9PiB0aGlzLmFwcGx5U2lnbmF0dXJlKGtleSkpO1xuICB9XG5cbiAgdmFsaWRhdGVUcmFuc2FjdGlvbih0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb24pOiB2b2lkIHtcbiAgICB0aGlzLnZhbGlkYXRlVm90ZVRyYW5zYWN0aW9uRmllbGRzKCk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSB2b3RlcyBhcnJheVxuICAgKlxuICAgKiBAcGFyYW0ge1ZvdGVXaXRuZXNzRGF0YVtdfSB2b3RlcyAtIFRoZSB2b3RlcyBhcnJheSB0byB2YWxpZGF0ZVxuICAgKiBAdGhyb3dzIHtFcnJvcn0gd2hlbiB0aGUgdm90ZXMgYXJyYXkgaXMgaW52YWxpZFxuICAgKi9cbiAgdmFsaWRhdGVWb3Rlcyh2b3RlczogVm90ZVdpdG5lc3NEYXRhW10pOiB2b2lkIHtcbiAgICBpZiAoIXZvdGVzIHx8IHZvdGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdWb3RlcyBhcnJheSBpcyBtaXNzaW5nIG9yIGVtcHR5Jyk7XG4gICAgfVxuXG4gICAgdm90ZXMuZm9yRWFjaCgodm90ZSkgPT4ge1xuICAgICAgaWYgKCF2b3RlLnZvdGVfYWRkcmVzcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1ZvdGUgYWRkcmVzcyBpcyBtaXNzaW5nJyk7XG4gICAgICB9XG4gICAgICB0aGlzLnZhbGlkYXRlQWRkcmVzcyh7IGFkZHJlc3M6IHZvdGUudm90ZV9hZGRyZXNzIH0pO1xuXG4gICAgICBpZiAodm90ZS52b3RlX2NvdW50ID09IG51bGwgfHwgdm90ZS52b3RlX2NvdW50IDwgMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdm90ZSBjb3VudCcpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyBpZiB0aGUgdHJhbnNhY3Rpb24gaXMgYSB2YWxpZCB2b3RlIHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb25SZWNlaXB0fSB0cmFuc2FjdGlvbiAtIFRoZSB0cmFuc2FjdGlvbiB0byB2YWxpZGF0ZVxuICAgKiBAdGhyb3dzIHtJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcn0gd2hlbiB0aGUgdHJhbnNhY3Rpb24gaXMgaW52YWxpZFxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZVZvdGVUcmFuc2FjdGlvbkZpZWxkcygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX293bmVyQWRkcmVzcykge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignTWlzc2luZyBwYXJhbWV0ZXI6IHNvdXJjZScpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5fcmVmQmxvY2tCeXRlcyB8fCAhdGhpcy5fcmVmQmxvY2tIYXNoKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdNaXNzaW5nIGJsb2NrIHJlZmVyZW5jZSBpbmZvcm1hdGlvbicpO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIHZvdGVzXG4gICAgaWYgKCF0aGlzLl92b3RlcyB8fCB0aGlzLl92b3Rlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ01pc3Npbmcgb3IgZW1wdHkgdm90ZXMgYXJyYXknKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,49 @@
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, WithdrawExpireUnfreezeContract } from './iface';
6
+ export declare class WithdrawExpireUnfreezeTxBuilder extends TransactionBuilder {
7
+ protected _signingKeys: BaseKey[];
8
+ constructor(_coinConfig: Readonly<CoinConfig>);
9
+ /** @inheritdoc */
10
+ protected get transactionType(): TransactionType;
11
+ /** @inheritdoc */
12
+ extendValidTo(extensionMs: number): void;
13
+ initBuilder(rawTransaction: TransactionReceipt | string): this;
14
+ /**
15
+ * Initialize the withdraw expire unfreeze contract call specific data
16
+ *
17
+ * @param {WithdrawExpireUnfreezeContract} withdrawExpireUnfreezeContractCall object with freeze txn data
18
+ */
19
+ protected initWithdrawExpireUnfreezeContractCall(withdrawExpireUnfreezeContractCall: WithdrawExpireUnfreezeContract): void;
20
+ protected buildImplementation(): Promise<Transaction>;
21
+ /**
22
+ * Helper method to create the withdraw expire unfreeze transaction
23
+ */
24
+ private createWithdrawExpireUnfreezeTransaction;
25
+ /**
26
+ * Helper method to get the withdraw expire unfreeze transaction raw data hex
27
+ *
28
+ * @returns {string} the freeze balance transaction raw data hex
29
+ */
30
+ private getWithdrawExpireUnfreezeRawDataHex;
31
+ /** @inheritdoc */
32
+ protected signImplementation(key: BaseKey): Transaction;
33
+ private applySignatures;
34
+ /**
35
+ * Validates the transaction
36
+ *
37
+ * @param {Transaction} transaction - The transaction to validate
38
+ * @throws {BuildTransactionError} when the transaction is invalid
39
+ */
40
+ validateTransaction(transaction: Transaction): void;
41
+ /**
42
+ * Validates if the transaction is a valid withdraw expire unfreeze transaction
43
+ *
44
+ * @param {TransactionReceipt} transaction - The transaction to validate
45
+ * @throws {BuildTransactionError} when the transaction is invalid
46
+ */
47
+ private validateWithdrawExpireUnfreezeTransactionFields;
48
+ }
49
+ //# sourceMappingURL=withdrawExpireUnfreezeTxBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"withdrawExpireUnfreezeTxBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/withdrawExpireUnfreezeTxBuilder.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,8BAA8B,EAAE,MAAM,SAAS,CAAC;AAY7E,qBAAa,+BAAgC,SAAQ,kBAAkB;IACrE,SAAS,CAAC,YAAY,EAAE,OAAO,EAAE,CAAC;gBAEtB,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAM7C,kBAAkB;IAClB,SAAS,KAAK,eAAe,IAAI,eAAe,CAE/C;IAED,kBAAkB;IAClB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAoBxC,WAAW,CAAC,cAAc,EAAE,kBAAkB,GAAG,MAAM,GAAG,IAAI;IAiB9D;;;;OAIG;IACH,SAAS,CAAC,sCAAsC,CAC9C,kCAAkC,EAAE,8BAA8B,GACjE,IAAI;cAOS,mBAAmB,IAAI,OAAO,CAAC,WAAW,CAAC;IAc3D;;OAEG;IACH,OAAO,CAAC,uCAAuC;IAmB/C;;;;OAIG;IACH,OAAO,CAAC,mCAAmC;IAyB3C,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,+CAA+C;CASxD"}
@@ -0,0 +1,167 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WithdrawExpireUnfreezeTxBuilder = 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 tron_1 = require("../../resources/protobuf/tron");
9
+ const utils_1 = require("./utils");
10
+ var ContractType = tron_1.protocol.Transaction.Contract.ContractType;
11
+ class WithdrawExpireUnfreezeTxBuilder 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.StakingWithdraw;
20
+ }
21
+ /** @inheritdoc */
22
+ extendValidTo(extensionMs) {
23
+ if (this.transaction.signature && this.transaction.signature.length > 0) {
24
+ throw new sdk_core_1.ExtendTransactionError('Cannot extend a signed transaction');
25
+ }
26
+ if (extensionMs <= 0) {
27
+ throw new Error('Value cannot be below zero');
28
+ }
29
+ if (extensionMs > utils_1.TRANSACTION_MAX_EXPIRATION) {
30
+ throw new sdk_core_1.ExtendTransactionError('The expiration cannot be extended more than one year');
31
+ }
32
+ if (this._expiration) {
33
+ this._expiration = this._expiration + extensionMs;
34
+ }
35
+ else {
36
+ throw new Error('There is not expiration to extend');
37
+ }
38
+ }
39
+ initBuilder(rawTransaction) {
40
+ this.transaction = this.fromImplementation(rawTransaction);
41
+ this.transaction.setTransactionType(this.transactionType);
42
+ this.validateRawTransaction(rawTransaction);
43
+ const tx = this.fromImplementation(rawTransaction);
44
+ this.transaction = tx;
45
+ this._signingKeys = [];
46
+ const rawData = tx.toJson().raw_data;
47
+ this._refBlockBytes = rawData.ref_block_bytes;
48
+ this._refBlockHash = rawData.ref_block_hash;
49
+ this._expiration = rawData.expiration;
50
+ this._timestamp = rawData.timestamp;
51
+ const contractCall = rawData.contract[0];
52
+ this.initWithdrawExpireUnfreezeContractCall(contractCall);
53
+ return this;
54
+ }
55
+ /**
56
+ * Initialize the withdraw expire unfreeze contract call specific data
57
+ *
58
+ * @param {WithdrawExpireUnfreezeContract} withdrawExpireUnfreezeContractCall object with freeze txn data
59
+ */
60
+ initWithdrawExpireUnfreezeContractCall(withdrawExpireUnfreezeContractCall) {
61
+ const { owner_address } = withdrawExpireUnfreezeContractCall.parameter.value;
62
+ if (owner_address) {
63
+ this.source({ address: (0, utils_1.getBase58AddressFromHex)(owner_address) });
64
+ }
65
+ }
66
+ async buildImplementation() {
67
+ this.createWithdrawExpireUnfreezeTransaction();
68
+ /** @inheritdoccreateTransaction */
69
+ // This method must be extended on child classes
70
+ if (this._signingKeys.length > 0) {
71
+ this.applySignatures();
72
+ }
73
+ if (!this.transaction.id) {
74
+ throw new sdk_core_1.BuildTransactionError('A valid transaction must have an id');
75
+ }
76
+ return Promise.resolve(this.transaction);
77
+ }
78
+ /**
79
+ * Helper method to create the withdraw expire unfreeze transaction
80
+ */
81
+ createWithdrawExpireUnfreezeTransaction() {
82
+ const rawDataHex = this.getWithdrawExpireUnfreezeRawDataHex();
83
+ const rawData = (0, utils_1.decodeTransaction)(rawDataHex);
84
+ const contract = rawData.contract[0];
85
+ const contractParameter = contract.parameter;
86
+ contractParameter.value.owner_address = this._ownerAddress.toLocaleLowerCase();
87
+ contractParameter.type_url = 'type.googleapis.com/protocol.WithdrawExpireUnfreezeContract';
88
+ contract.type = 'WithdrawExpireUnfreezeContract';
89
+ const hexBuffer = Buffer.from(rawDataHex, 'hex');
90
+ const id = (0, crypto_1.createHash)('sha256').update(hexBuffer).digest('hex');
91
+ const txRecip = {
92
+ raw_data: rawData,
93
+ raw_data_hex: rawDataHex,
94
+ txID: id,
95
+ signature: this.transaction.signature,
96
+ };
97
+ this.transaction = new transaction_1.Transaction(this._coinConfig, txRecip);
98
+ }
99
+ /**
100
+ * Helper method to get the withdraw expire unfreeze transaction raw data hex
101
+ *
102
+ * @returns {string} the freeze balance transaction raw data hex
103
+ */
104
+ getWithdrawExpireUnfreezeRawDataHex() {
105
+ const rawContract = {
106
+ ownerAddress: (0, utils_1.getByteArrayFromHexAddress)(this._ownerAddress),
107
+ };
108
+ const withdrawExpireUnfreezeContract = tron_1.protocol.WithdrawExpireUnfreezeContract.fromObject(rawContract);
109
+ const withdrawExpireUnfreezeContractBytes = tron_1.protocol.WithdrawExpireUnfreezeContract.encode(withdrawExpireUnfreezeContract).finish();
110
+ const txContract = {
111
+ type: ContractType.WithdrawExpireUnfreezeContract,
112
+ parameter: {
113
+ value: withdrawExpireUnfreezeContractBytes,
114
+ type_url: 'type.googleapis.com/protocol.WithdrawExpireUnfreezeContract',
115
+ },
116
+ };
117
+ const raw = {
118
+ refBlockBytes: Buffer.from(this._refBlockBytes, 'hex'),
119
+ refBlockHash: Buffer.from(this._refBlockHash, 'hex'),
120
+ expiration: this._expiration || Date.now() + utils_1.TRANSACTION_DEFAULT_EXPIRATION,
121
+ timestamp: this._timestamp || Date.now(),
122
+ contract: [txContract],
123
+ };
124
+ const rawTx = tron_1.protocol.Transaction.raw.create(raw);
125
+ return Buffer.from(tron_1.protocol.Transaction.raw.encode(rawTx).finish()).toString('hex');
126
+ }
127
+ /** @inheritdoc */
128
+ signImplementation(key) {
129
+ if (this._signingKeys.some((signingKey) => signingKey.key === key.key)) {
130
+ throw new sdk_core_1.SigningError('Duplicated key');
131
+ }
132
+ this._signingKeys.push(key);
133
+ // We keep this return for compatibility but is not meant to be use
134
+ return this.transaction;
135
+ }
136
+ applySignatures() {
137
+ if (!this.transaction.inputs) {
138
+ throw new sdk_core_1.SigningError('Transaction has no inputs');
139
+ }
140
+ this._signingKeys.forEach((key) => this.applySignature(key));
141
+ }
142
+ /**
143
+ * Validates the transaction
144
+ *
145
+ * @param {Transaction} transaction - The transaction to validate
146
+ * @throws {BuildTransactionError} when the transaction is invalid
147
+ */
148
+ validateTransaction(transaction) {
149
+ this.validateWithdrawExpireUnfreezeTransactionFields();
150
+ }
151
+ /**
152
+ * Validates if the transaction is a valid withdraw expire unfreeze transaction
153
+ *
154
+ * @param {TransactionReceipt} transaction - The transaction to validate
155
+ * @throws {BuildTransactionError} when the transaction is invalid
156
+ */
157
+ validateWithdrawExpireUnfreezeTransactionFields() {
158
+ if (!this._ownerAddress) {
159
+ throw new sdk_core_1.BuildTransactionError('Missing parameter: source');
160
+ }
161
+ if (!this._refBlockBytes || !this._refBlockHash) {
162
+ throw new sdk_core_1.BuildTransactionError('Missing block reference information');
163
+ }
164
+ }
165
+ }
166
+ exports.WithdrawExpireUnfreezeTxBuilder = WithdrawExpireUnfreezeTxBuilder;
167
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aGRyYXdFeHBpcmVVbmZyZWV6ZVR4QnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvd2l0aGRyYXdFeHBpcmVVbmZyZWV6ZVR4QnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBb0M7QUFDcEMsbURBQTZIO0FBRTdILDZEQUEwRDtBQUMxRCwrQ0FBNEM7QUFFNUMsd0RBQXlEO0FBQ3pELG1DQU1pQjtBQUVqQixJQUFPLFlBQVksR0FBRyxlQUFRLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUM7QUFFakUsTUFBYSwrQkFBZ0MsU0FBUSx1Q0FBa0I7SUFHckUsWUFBWSxXQUFpQztRQUMzQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbkIsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLHlCQUFXLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixJQUFjLGVBQWU7UUFDM0IsT0FBTywwQkFBZSxDQUFDLGVBQWUsQ0FBQztJQUN6QyxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLGFBQWEsQ0FBQyxXQUFtQjtRQUMvQixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN4RSxNQUFNLElBQUksaUNBQXNCLENBQUMsb0NBQW9DLENBQUMsQ0FBQztRQUN6RSxDQUFDO1FBRUQsSUFBSSxXQUFXLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDckIsTUFBTSxJQUFJLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1FBQ2hELENBQUM7UUFFRCxJQUFJLFdBQVcsR0FBRyxrQ0FBMEIsRUFBRSxDQUFDO1lBQzdDLE1BQU0sSUFBSSxpQ0FBc0IsQ0FBQyxzREFBc0QsQ0FBQyxDQUFDO1FBQzNGLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1FBQ3BELENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxJQUFJLEtBQUssQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO1FBQ3ZELENBQUM7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFDLGNBQTJDO1FBQ3JELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzNELElBQUksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzFELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUM1QyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDdkIsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQztRQUNyQyxJQUFJLENBQUMsY0FBYyxHQUFHLE9BQU8sQ0FBQyxlQUFlLENBQUM7UUFDOUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDO1FBQzVDLElBQUksQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQztRQUN0QyxJQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUM7UUFDcEMsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQW1DLENBQUM7UUFDM0UsSUFBSSxDQUFDLHNDQUFzQyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzFELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7O09BSUc7SUFDTyxzQ0FBc0MsQ0FDOUMsa0NBQWtFO1FBRWxFLE1BQU0sRUFBRSxhQUFhLEVBQUUsR0FBRyxrQ0FBa0MsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDO1FBQzdFLElBQUksYUFBYSxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFBLCtCQUF1QixFQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNuRSxDQUFDO0lBQ0gsQ0FBQztJQUVTLEtBQUssQ0FBQyxtQkFBbUI7UUFDakMsSUFBSSxDQUFDLHVDQUF1QyxFQUFFLENBQUM7UUFDL0MsbUNBQW1DO1FBQ25DLGdEQUFnRDtRQUNoRCxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN6QixDQUFDO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDekIsTUFBTSxJQUFJLGdDQUFxQixDQUFDLHFDQUFxQyxDQUFDLENBQUM7UUFDekUsQ0FBQztRQUNELE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVEOztPQUVHO0lBQ0ssdUNBQXVDO1FBQzdDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxtQ0FBbUMsRUFBRSxDQUFDO1FBQzlELE1BQU0sT0FBTyxHQUFHLElBQUEseUJBQWlCLEVBQUMsVUFBVSxDQUFDLENBQUM7UUFDOUMsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQW1DLENBQUM7UUFDdkUsTUFBTSxpQkFBaUIsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDO1FBQzdDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQy9FLGlCQUFpQixDQUFDLFFBQVEsR0FBRyw2REFBNkQsQ0FBQztRQUMzRixRQUFRLENBQUMsSUFBSSxHQUFHLGdDQUFnQyxDQUFDO1FBQ2pELE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2pELE1BQU0sRUFBRSxHQUFHLElBQUEsbUJBQVUsRUFBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sT0FBTyxHQUF1QjtZQUNsQyxRQUFRLEVBQUUsT0FBTztZQUNqQixZQUFZLEVBQUUsVUFBVTtZQUN4QixJQUFJLEVBQUUsRUFBRTtZQUNSLFNBQVMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVM7U0FDdEMsQ0FBQztRQUNGLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSx5QkFBVyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxtQ0FBbUM7UUFDekMsTUFBTSxXQUFXLEdBQUc7WUFDbEIsWUFBWSxFQUFFLElBQUEsa0NBQTBCLEVBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQztTQUM3RCxDQUFDO1FBQ0YsTUFBTSw4QkFBOEIsR0FBRyxlQUFRLENBQUMsOEJBQThCLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3ZHLE1BQU0sbUNBQW1DLEdBQ3ZDLGVBQVEsQ0FBQyw4QkFBOEIsQ0FBQyxNQUFNLENBQUMsOEJBQThCLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUMxRixNQUFNLFVBQVUsR0FBRztZQUNqQixJQUFJLEVBQUUsWUFBWSxDQUFDLDhCQUE4QjtZQUNqRCxTQUFTLEVBQUU7Z0JBQ1QsS0FBSyxFQUFFLG1DQUFtQztnQkFDMUMsUUFBUSxFQUFFLDZEQUE2RDthQUN4RTtTQUNGLENBQUM7UUFDRixNQUFNLEdBQUcsR0FBRztZQUNWLGFBQWEsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDO1lBQ3RELFlBQVksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDO1lBQ3BELFVBQVUsRUFBRSxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxzQ0FBOEI7WUFDM0UsU0FBUyxFQUFFLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUN4QyxRQUFRLEVBQUUsQ0FBQyxVQUFVLENBQUM7U0FDdkIsQ0FBQztRQUNGLE1BQU0sS0FBSyxHQUFHLGVBQVEsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuRCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBUSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RGLENBQUM7SUFFRCxrQkFBa0I7SUFDUixrQkFBa0IsQ0FBQyxHQUFZO1FBQ3ZDLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDdkUsTUFBTSxJQUFJLHVCQUFZLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUMzQyxDQUFDO1FBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFNUIsbUVBQW1FO1FBQ25FLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBRU8sZUFBZTtRQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUM3QixNQUFNLElBQUksdUJBQVksQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1FBQ3RELENBQUM7UUFFRCxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILG1CQUFtQixDQUFDLFdBQXdCO1FBQzFDLElBQUksQ0FBQywrQ0FBK0MsRUFBRSxDQUFDO0lBQ3pELENBQUM7SUFFRDs7Ozs7T0FLRztJQUNLLCtDQUErQztRQUNyRCxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3hCLE1BQU0sSUFBSSxnQ0FBcUIsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1FBQy9ELENBQUM7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNoRCxNQUFNLElBQUksZ0NBQXFCLENBQUMscUNBQXFDLENBQUMsQ0FBQztRQUN6RSxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBaExELDBFQWdMQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tICdjcnlwdG8nO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25UeXBlLCBCYXNlS2V5LCBFeHRlbmRUcmFuc2FjdGlvbkVycm9yLCBCdWlsZFRyYW5zYWN0aW9uRXJyb3IsIFNpZ25pbmdFcnJvciB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vdHJhbnNhY3Rpb25CdWlsZGVyJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5pbXBvcnQgeyBUcmFuc2FjdGlvblJlY2VpcHQsIFdpdGhkcmF3RXhwaXJlVW5mcmVlemVDb250cmFjdCB9IGZyb20gJy4vaWZhY2UnO1xuaW1wb3J0IHsgcHJvdG9jb2wgfSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvcHJvdG9idWYvdHJvbic7XG5pbXBvcnQge1xuICBkZWNvZGVUcmFuc2FjdGlvbixcbiAgZ2V0Qnl0ZUFycmF5RnJvbUhleEFkZHJlc3MsXG4gIGdldEJhc2U1OEFkZHJlc3NGcm9tSGV4LFxuICBUUkFOU0FDVElPTl9NQVhfRVhQSVJBVElPTixcbiAgVFJBTlNBQ1RJT05fREVGQVVMVF9FWFBJUkFUSU9OLFxufSBmcm9tICcuL3V0aWxzJztcblxuaW1wb3J0IENvbnRyYWN0VHlwZSA9IHByb3RvY29sLlRyYW5zYWN0aW9uLkNvbnRyYWN0LkNvbnRyYWN0VHlwZTtcblxuZXhwb3J0IGNsYXNzIFdpdGhkcmF3RXhwaXJlVW5mcmVlemVUeEJ1aWxkZXIgZXh0ZW5kcyBUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICBwcm90ZWN0ZWQgX3NpZ25pbmdLZXlzOiBCYXNlS2V5W107XG5cbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICAgIHRoaXMuX3NpZ25pbmdLZXlzID0gW107XG4gICAgdGhpcy50cmFuc2FjdGlvbiA9IG5ldyBUcmFuc2FjdGlvbihfY29pbkNvbmZpZyk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGdldCB0cmFuc2FjdGlvblR5cGUoKTogVHJhbnNhY3Rpb25UeXBlIHtcbiAgICByZXR1cm4gVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdXaXRoZHJhdztcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBleHRlbmRWYWxpZFRvKGV4dGVuc2lvbk1zOiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodGhpcy50cmFuc2FjdGlvbi5zaWduYXR1cmUgJiYgdGhpcy50cmFuc2FjdGlvbi5zaWduYXR1cmUubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgbmV3IEV4dGVuZFRyYW5zYWN0aW9uRXJyb3IoJ0Nhbm5vdCBleHRlbmQgYSBzaWduZWQgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG5cbiAgICBpZiAoZXh0ZW5zaW9uTXMgPD0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdWYWx1ZSBjYW5ub3QgYmUgYmVsb3cgemVybycpO1xuICAgIH1cblxuICAgIGlmIChleHRlbnNpb25NcyA+IFRSQU5TQUNUSU9OX01BWF9FWFBJUkFUSU9OKSB7XG4gICAgICB0aHJvdyBuZXcgRXh0ZW5kVHJhbnNhY3Rpb25FcnJvcignVGhlIGV4cGlyYXRpb24gY2Fubm90IGJlIGV4dGVuZGVkIG1vcmUgdGhhbiBvbmUgeWVhcicpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9leHBpcmF0aW9uKSB7XG4gICAgICB0aGlzLl9leHBpcmF0aW9uID0gdGhpcy5fZXhwaXJhdGlvbiArIGV4dGVuc2lvbk1zO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZXJlIGlzIG5vdCBleHBpcmF0aW9uIHRvIGV4dGVuZCcpO1xuICAgIH1cbiAgfVxuXG4gIGluaXRCdWlsZGVyKHJhd1RyYW5zYWN0aW9uOiBUcmFuc2FjdGlvblJlY2VpcHQgfCBzdHJpbmcpOiB0aGlzIHtcbiAgICB0aGlzLnRyYW5zYWN0aW9uID0gdGhpcy5mcm9tSW1wbGVtZW50YXRpb24ocmF3VHJhbnNhY3Rpb24pO1xuICAgIHRoaXMudHJhbnNhY3Rpb24uc2V0VHJhbnNhY3Rpb25UeXBlKHRoaXMudHJhbnNhY3Rpb25UeXBlKTtcbiAgICB0aGlzLnZhbGlkYXRlUmF3VHJhbnNhY3Rpb24ocmF3VHJhbnNhY3Rpb24pO1xuICAgIGNvbnN0IHR4ID0gdGhpcy5mcm9tSW1wbGVtZW50YXRpb24ocmF3VHJhbnNhY3Rpb24pO1xuICAgIHRoaXMudHJhbnNhY3Rpb24gPSB0eDtcbiAgICB0aGlzLl9zaWduaW5nS2V5cyA9IFtdO1xuICAgIGNvbnN0IHJhd0RhdGEgPSB0eC50b0pzb24oKS5yYXdfZGF0YTtcbiAgICB0aGlzLl9yZWZCbG9ja0J5dGVzID0gcmF3RGF0YS5yZWZfYmxvY2tfYnl0ZXM7XG4gICAgdGhpcy5fcmVmQmxvY2tIYXNoID0gcmF3RGF0YS5yZWZfYmxvY2tfaGFzaDtcbiAgICB0aGlzLl9leHBpcmF0aW9uID0gcmF3RGF0YS5leHBpcmF0aW9uO1xuICAgIHRoaXMuX3RpbWVzdGFtcCA9IHJhd0RhdGEudGltZXN0YW1wO1xuICAgIGNvbnN0IGNvbnRyYWN0Q2FsbCA9IHJhd0RhdGEuY29udHJhY3RbMF0gYXMgV2l0aGRyYXdFeHBpcmVVbmZyZWV6ZUNvbnRyYWN0O1xuICAgIHRoaXMuaW5pdFdpdGhkcmF3RXhwaXJlVW5mcmVlemVDb250cmFjdENhbGwoY29udHJhY3RDYWxsKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIHRoZSB3aXRoZHJhdyBleHBpcmUgdW5mcmVlemUgY29udHJhY3QgY2FsbCBzcGVjaWZpYyBkYXRhXG4gICAqXG4gICAqIEBwYXJhbSB7V2l0aGRyYXdFeHBpcmVVbmZyZWV6ZUNvbnRyYWN0fSB3aXRoZHJhd0V4cGlyZVVuZnJlZXplQ29udHJhY3RDYWxsIG9iamVjdCB3aXRoIGZyZWV6ZSB0eG4gZGF0YVxuICAgKi9cbiAgcHJvdGVjdGVkIGluaXRXaXRoZHJhd0V4cGlyZVVuZnJlZXplQ29udHJhY3RDYWxsKFxuICAgIHdpdGhkcmF3RXhwaXJlVW5mcmVlemVDb250cmFjdENhbGw6IFdpdGhkcmF3RXhwaXJlVW5mcmVlemVDb250cmFjdFxuICApOiB2b2lkIHtcbiAgICBjb25zdCB7IG93bmVyX2FkZHJlc3MgfSA9IHdpdGhkcmF3RXhwaXJlVW5mcmVlemVDb250cmFjdENhbGwucGFyYW1ldGVyLnZhbHVlO1xuICAgIGlmIChvd25lcl9hZGRyZXNzKSB7XG4gICAgICB0aGlzLnNvdXJjZSh7IGFkZHJlc3M6IGdldEJhc2U1OEFkZHJlc3NGcm9tSGV4KG93bmVyX2FkZHJlc3MpIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBidWlsZEltcGxlbWVudGF0aW9uKCk6IFByb21pc2U8VHJhbnNhY3Rpb24+IHtcbiAgICB0aGlzLmNyZWF0ZVdpdGhkcmF3RXhwaXJlVW5mcmVlemVUcmFuc2FjdGlvbigpO1xuICAgIC8qKiBAaW5oZXJpdGRvY2NyZWF0ZVRyYW5zYWN0aW9uICovXG4gICAgLy8gVGhpcyBtZXRob2QgbXVzdCBiZSBleHRlbmRlZCBvbiBjaGlsZCBjbGFzc2VzXG4gICAgaWYgKHRoaXMuX3NpZ25pbmdLZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuYXBwbHlTaWduYXR1cmVzKCk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnRyYW5zYWN0aW9uLmlkKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdBIHZhbGlkIHRyYW5zYWN0aW9uIG11c3QgaGF2ZSBhbiBpZCcpO1xuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMudHJhbnNhY3Rpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIEhlbHBlciBtZXRob2QgdG8gY3JlYXRlIHRoZSB3aXRoZHJhdyBleHBpcmUgdW5mcmVlemUgdHJhbnNhY3Rpb25cbiAgICovXG4gIHByaXZhdGUgY3JlYXRlV2l0aGRyYXdFeHBpcmVVbmZyZWV6ZVRyYW5zYWN0aW9uKCk6IHZvaWQge1xuICAgIGNvbnN0IHJhd0RhdGFIZXggPSB0aGlzLmdldFdpdGhkcmF3RXhwaXJlVW5mcmVlemVSYXdEYXRhSGV4KCk7XG4gICAgY29uc3QgcmF3RGF0YSA9IGRlY29kZVRyYW5zYWN0aW9uKHJhd0RhdGFIZXgpO1xuICAgIGNvbnN0IGNvbnRyYWN0ID0gcmF3RGF0YS5jb250cmFjdFswXSBhcyBXaXRoZHJhd0V4cGlyZVVuZnJlZXplQ29udHJhY3Q7XG4gICAgY29uc3QgY29udHJhY3RQYXJhbWV0ZXIgPSBjb250cmFjdC5wYXJhbWV0ZXI7XG4gICAgY29udHJhY3RQYXJhbWV0ZXIudmFsdWUub3duZXJfYWRkcmVzcyA9IHRoaXMuX293bmVyQWRkcmVzcy50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgIGNvbnRyYWN0UGFyYW1ldGVyLnR5cGVfdXJsID0gJ3R5cGUuZ29vZ2xlYXBpcy5jb20vcHJvdG9jb2wuV2l0aGRyYXdFeHBpcmVVbmZyZWV6ZUNvbnRyYWN0JztcbiAgICBjb250cmFjdC50eXBlID0gJ1dpdGhkcmF3RXhwaXJlVW5mcmVlemVDb250cmFjdCc7XG4gICAgY29uc3QgaGV4QnVmZmVyID0gQnVmZmVyLmZyb20ocmF3RGF0YUhleCwgJ2hleCcpO1xuICAgIGNvbnN0IGlkID0gY3JlYXRlSGFzaCgnc2hhMjU2JykudXBkYXRlKGhleEJ1ZmZlcikuZGlnZXN0KCdoZXgnKTtcbiAgICBjb25zdCB0eFJlY2lwOiBUcmFuc2FjdGlvblJlY2VpcHQgPSB7XG4gICAgICByYXdfZGF0YTogcmF3RGF0YSxcbiAgICAgIHJhd19kYXRhX2hleDogcmF3RGF0YUhleCxcbiAgICAgIHR4SUQ6IGlkLFxuICAgICAgc2lnbmF0dXJlOiB0aGlzLnRyYW5zYWN0aW9uLnNpZ25hdHVyZSxcbiAgICB9O1xuICAgIHRoaXMudHJhbnNhY3Rpb24gPSBuZXcgVHJhbnNhY3Rpb24odGhpcy5fY29pbkNvbmZpZywgdHhSZWNpcCk7XG4gIH1cblxuICAvKipcbiAgICogSGVscGVyIG1ldGhvZCB0byBnZXQgdGhlIHdpdGhkcmF3IGV4cGlyZSB1bmZyZWV6ZSB0cmFuc2FjdGlvbiByYXcgZGF0YSBoZXhcbiAgICpcbiAgICogQHJldHVybnMge3N0cmluZ30gdGhlIGZyZWV6ZSBiYWxhbmNlIHRyYW5zYWN0aW9uIHJhdyBkYXRhIGhleFxuICAgKi9cbiAgcHJpdmF0ZSBnZXRXaXRoZHJhd0V4cGlyZVVuZnJlZXplUmF3RGF0YUhleCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHJhd0NvbnRyYWN0ID0ge1xuICAgICAgb3duZXJBZGRyZXNzOiBnZXRCeXRlQXJyYXlGcm9tSGV4QWRkcmVzcyh0aGlzLl9vd25lckFkZHJlc3MpLFxuICAgIH07XG4gICAgY29uc3Qgd2l0aGRyYXdFeHBpcmVVbmZyZWV6ZUNvbnRyYWN0ID0gcHJvdG9jb2wuV2l0aGRyYXdFeHBpcmVVbmZyZWV6ZUNvbnRyYWN0LmZyb21PYmplY3QocmF3Q29udHJhY3QpO1xuICAgIGNvbnN0IHdpdGhkcmF3RXhwaXJlVW5mcmVlemVDb250cmFjdEJ5dGVzID1cbiAgICAgIHByb3RvY29sLldpdGhkcmF3RXhwaXJlVW5mcmVlemVDb250cmFjdC5lbmNvZGUod2l0aGRyYXdFeHBpcmVVbmZyZWV6ZUNvbnRyYWN0KS5maW5pc2goKTtcbiAgICBjb25zdCB0eENvbnRyYWN0ID0ge1xuICAgICAgdHlwZTogQ29udHJhY3RUeXBlLldpdGhkcmF3RXhwaXJlVW5mcmVlemVDb250cmFjdCxcbiAgICAgIHBhcmFtZXRlcjoge1xuICAgICAgICB2YWx1ZTogd2l0aGRyYXdFeHBpcmVVbmZyZWV6ZUNvbnRyYWN0Qnl0ZXMsXG4gICAgICAgIHR5cGVfdXJsOiAndHlwZS5nb29nbGVhcGlzLmNvbS9wcm90b2NvbC5XaXRoZHJhd0V4cGlyZVVuZnJlZXplQ29udHJhY3QnLFxuICAgICAgfSxcbiAgICB9O1xuICAgIGNvbnN0IHJhdyA9IHtcbiAgICAgIHJlZkJsb2NrQnl0ZXM6IEJ1ZmZlci5mcm9tKHRoaXMuX3JlZkJsb2NrQnl0ZXMsICdoZXgnKSxcbiAgICAgIHJlZkJsb2NrSGFzaDogQnVmZmVyLmZyb20odGhpcy5fcmVmQmxvY2tIYXNoLCAnaGV4JyksXG4gICAgICBleHBpcmF0aW9uOiB0aGlzLl9leHBpcmF0aW9uIHx8IERhdGUubm93KCkgKyBUUkFOU0FDVElPTl9ERUZBVUxUX0VYUElSQVRJT04sXG4gICAgICB0aW1lc3RhbXA6IHRoaXMuX3RpbWVzdGFtcCB8fCBEYXRlLm5vdygpLFxuICAgICAgY29udHJhY3Q6IFt0eENvbnRyYWN0XSxcbiAgICB9O1xuICAgIGNvbnN0IHJhd1R4ID0gcHJvdG9jb2wuVHJhbnNhY3Rpb24ucmF3LmNyZWF0ZShyYXcpO1xuICAgIHJldHVybiBCdWZmZXIuZnJvbShwcm90b2NvbC5UcmFuc2FjdGlvbi5yYXcuZW5jb2RlKHJhd1R4KS5maW5pc2goKSkudG9TdHJpbmcoJ2hleCcpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBzaWduSW1wbGVtZW50YXRpb24oa2V5OiBCYXNlS2V5KTogVHJhbnNhY3Rpb24ge1xuICAgIGlmICh0aGlzLl9zaWduaW5nS2V5cy5zb21lKChzaWduaW5nS2V5KSA9PiBzaWduaW5nS2V5LmtleSA9PT0ga2V5LmtleSkpIHtcbiAgICAgIHRocm93IG5ldyBTaWduaW5nRXJyb3IoJ0R1cGxpY2F0ZWQga2V5Jyk7XG4gICAgfVxuICAgIHRoaXMuX3NpZ25pbmdLZXlzLnB1c2goa2V5KTtcblxuICAgIC8vIFdlIGtlZXAgdGhpcyByZXR1cm4gZm9yIGNvbXBhdGliaWxpdHkgYnV0IGlzIG5vdCBtZWFudCB0byBiZSB1c2VcbiAgICByZXR1cm4gdGhpcy50cmFuc2FjdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlTaWduYXR1cmVzKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy50cmFuc2FjdGlvbi5pbnB1dHMpIHtcbiAgICAgIHRocm93IG5ldyBTaWduaW5nRXJyb3IoJ1RyYW5zYWN0aW9uIGhhcyBubyBpbnB1dHMnKTtcbiAgICB9XG5cbiAgICB0aGlzLl9zaWduaW5nS2V5cy5mb3JFYWNoKChrZXkpID0+IHRoaXMuYXBwbHlTaWduYXR1cmUoa2V5KSk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSB0cmFuc2FjdGlvblxuICAgKlxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9ufSB0cmFuc2FjdGlvbiAtIFRoZSB0cmFuc2FjdGlvbiB0byB2YWxpZGF0ZVxuICAgKiBAdGhyb3dzIHtCdWlsZFRyYW5zYWN0aW9uRXJyb3J9IHdoZW4gdGhlIHRyYW5zYWN0aW9uIGlzIGludmFsaWRcbiAgICovXG4gIHZhbGlkYXRlVHJhbnNhY3Rpb24odHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uKTogdm9pZCB7XG4gICAgdGhpcy52YWxpZGF0ZVdpdGhkcmF3RXhwaXJlVW5mcmVlemVUcmFuc2FjdGlvbkZpZWxkcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyBpZiB0aGUgdHJhbnNhY3Rpb24gaXMgYSB2YWxpZCB3aXRoZHJhdyBleHBpcmUgdW5mcmVlemUgdHJhbnNhY3Rpb25cbiAgICpcbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvblJlY2VpcHR9IHRyYW5zYWN0aW9uIC0gVGhlIHRyYW5zYWN0aW9uIHRvIHZhbGlkYXRlXG4gICAqIEB0aHJvd3Mge0J1aWxkVHJhbnNhY3Rpb25FcnJvcn0gd2hlbiB0aGUgdHJhbnNhY3Rpb24gaXMgaW52YWxpZFxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZVdpdGhkcmF3RXhwaXJlVW5mcmVlemVUcmFuc2FjdGlvbkZpZWxkcygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX293bmVyQWRkcmVzcykge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignTWlzc2luZyBwYXJhbWV0ZXI6IHNvdXJjZScpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5fcmVmQmxvY2tCeXRlcyB8fCAhdGhpcy5fcmVmQmxvY2tIYXNoKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdNaXNzaW5nIGJsb2NrIHJlZmVyZW5jZSBpbmZvcm1hdGlvbicpO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -7,6 +7,10 @@ import { TransactionBuilder } from './transactionBuilder';
7
7
  import { ContractCallBuilder } from './contractCallBuilder';
8
8
  import { TransactionReceipt } from './iface';
9
9
  import { TokenTransferBuilder } from './tokenTransferBuilder';
10
+ import { FreezeBalanceTxBuilder } from './freezeBalanceTxBuilder';
11
+ import { VoteWitnessTxBuilder } from './voteWitnessTxBuilder';
12
+ import { UnfreezeBalanceTxBuilder } from './unfreezeBalanceTxBuilder';
13
+ import { WithdrawExpireUnfreezeTxBuilder } from './withdrawExpireUnfreezeTxBuilder';
10
14
  /**
11
15
  * Wrapped Builder class
12
16
  * This builder is created to maintain compatibility with the current uses of account-lib
@@ -24,6 +28,34 @@ export declare class WrappedBuilder extends TransactionBuilder {
24
28
  getContractCallBuilder(tx?: TransactionReceipt | string): ContractCallBuilder;
25
29
  getTransactionBuilder(tx?: TransactionReceipt | string): TransactionBuilder;
26
30
  getTokenTransferBuilder(tx?: TransactionReceipt | string): TokenTransferBuilder;
31
+ /**
32
+ * Returns a specific builder to create a freeze balance transaction
33
+ *
34
+ * @param {TransactionReceipt} transaction - The transaction to initialize builder
35
+ * @returns {FreezeBalanceTxBuilder} The specific freeze balance builder
36
+ */
37
+ getFreezeBalanceV2TxBuilder(tx?: TransactionReceipt | string): FreezeBalanceTxBuilder;
38
+ /**
39
+ * Returns a specific builder to create a vote witness transaction
40
+ *
41
+ * @param {TransactionReceipt} transaction - The transaction to initialize builder
42
+ * @returns {VoteWitnessTxBuilder} The specific vote witness builder
43
+ */
44
+ getVoteWitnessTxBuilder(tx?: TransactionReceipt | string): VoteWitnessTxBuilder;
45
+ /**
46
+ * Returns a specific builder to create an unfreeze balance transaction
47
+ *
48
+ * @param {Transaction} [tx] The transaction to initialize builder
49
+ * @returns {UnfreezeBalanceTxBuilder} The specific unfreeze builder
50
+ */
51
+ getUnfreezeBalanceV2TxBuilder(tx?: TransactionReceipt | string): UnfreezeBalanceTxBuilder;
52
+ /**
53
+ * Returns a specific builder to create a withdraw expire unfreeze transaction
54
+ *
55
+ * @param {Transaction} [tx] The transaction to initialize builder
56
+ * @returns {WithdrawExpireUnfreezeTxBuilder} The specific withdraw builder
57
+ */
58
+ getWithdrawExpireUnfreezeTxBuilder(tx?: TransactionReceipt | string): WithdrawExpireUnfreezeTxBuilder;
27
59
  private initializeBuilder;
28
60
  /** @inheritdoc */
29
61
  extendValidTo(extensionMs: number): void;
@@ -1 +1 @@
1
- {"version":3,"file":"wrappedBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/wrappedBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,eAAe,EAA2B,MAAM,sBAAsB,CAAC;AACzF,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAI1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D;;;;GAIG;AACH,qBAAa,cAAe,SAAQ,kBAAkB;IACpD,OAAO,CAAC,QAAQ,CAAqB;gBAEzB,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAM7C;;;;;OAKG;IACH,sBAAsB,CAAC,EAAE,CAAC,EAAE,kBAAkB,GAAG,MAAM,GAAG,mBAAmB;IAI7E,qBAAqB,CAAC,EAAE,CAAC,EAAE,kBAAkB,GAAG,MAAM,GAAG,kBAAkB;IAI3E,uBAAuB,CAAC,EAAE,CAAC,EAAE,kBAAkB,GAAG,MAAM,GAAG,oBAAoB;IAI/E,OAAO,CAAC,iBAAiB;IAOzB,kBAAkB;IAClB,aAAa,CAAC,WAAW,EAAE,MAAM;IAIjC,kBAAkB;IAClB,IAAI,CAAC,GAAG,EAAE,OAAO;IAIjB,kBAAkB;IACZ,KAAK,IAAI,OAAO,CAAC,eAAe,CAAC;IAIvC,kBAAkB;IAClB,IAAI,CAAC,GAAG,EAAE,GAAG;IAiBb;;;;;OAKG;IACH,OAAO,CAAC,YAAY;IAIpB,kBAAkB;IAClB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAIvC,kBAAkB;IAClB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAO/B,kBAAkB;IAClB,sBAAsB,CAAC,cAAc,EAAE,GAAG,GAAG,IAAI;IAIjD,kBAAkB;IAClB,mBAAmB,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;IAInD,kBAAkB;IAClB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;CAGtC"}
1
+ {"version":3,"file":"wrappedBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/wrappedBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,eAAe,EAA2B,MAAM,sBAAsB,CAAC;AACzF,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAI1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,+BAA+B,EAAE,MAAM,mCAAmC,CAAC;AAEpF;;;;GAIG;AACH,qBAAa,cAAe,SAAQ,kBAAkB;IACpD,OAAO,CAAC,QAAQ,CAAqB;gBAEzB,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAM7C;;;;;OAKG;IACH,sBAAsB,CAAC,EAAE,CAAC,EAAE,kBAAkB,GAAG,MAAM,GAAG,mBAAmB;IAI7E,qBAAqB,CAAC,EAAE,CAAC,EAAE,kBAAkB,GAAG,MAAM,GAAG,kBAAkB;IAI3E,uBAAuB,CAAC,EAAE,CAAC,EAAE,kBAAkB,GAAG,MAAM,GAAG,oBAAoB;IAI/E;;;;;OAKG;IACH,2BAA2B,CAAC,EAAE,CAAC,EAAE,kBAAkB,GAAG,MAAM,GAAG,sBAAsB;IAIrF;;;;;OAKG;IACH,uBAAuB,CAAC,EAAE,CAAC,EAAE,kBAAkB,GAAG,MAAM,GAAG,oBAAoB;IAI/E;;;;;OAKG;IACH,6BAA6B,CAAC,EAAE,CAAC,EAAE,kBAAkB,GAAG,MAAM,GAAG,wBAAwB;IAIzF;;;;;OAKG;IACH,kCAAkC,CAAC,EAAE,CAAC,EAAE,kBAAkB,GAAG,MAAM,GAAG,+BAA+B;IAIrG,OAAO,CAAC,iBAAiB;IAOzB,kBAAkB;IAClB,aAAa,CAAC,WAAW,EAAE,MAAM;IAIjC,kBAAkB;IAClB,IAAI,CAAC,GAAG,EAAE,OAAO;IAIjB,kBAAkB;IACZ,KAAK,IAAI,OAAO,CAAC,eAAe,CAAC;IAIvC,kBAAkB;IAClB,IAAI,CAAC,GAAG,EAAE,GAAG;IAyBb;;;;;OAKG;IACH,OAAO,CAAC,YAAY;IAIpB,kBAAkB;IAClB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAIvC,kBAAkB;IAClB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAO/B,kBAAkB;IAClB,sBAAsB,CAAC,cAAc,EAAE,GAAG,GAAG,IAAI;IAIjD,kBAAkB;IAClB,mBAAmB,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;IAInD,kBAAkB;IAClB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;CAGtC"}