@bitgo-beta/sdk-coin-vet 1.0.1-beta.67 → 1.0.1-beta.670

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 (160) hide show
  1. package/dist/src/index.d.ts +1 -0
  2. package/dist/src/index.d.ts.map +1 -1
  3. package/dist/src/index.js +2 -1
  4. package/dist/src/lib/constants.d.ts +28 -0
  5. package/dist/src/lib/constants.d.ts.map +1 -1
  6. package/dist/src/lib/constants.js +30 -2
  7. package/dist/src/lib/iface.d.ts +28 -2
  8. package/dist/src/lib/iface.d.ts.map +1 -1
  9. package/dist/src/lib/iface.js +1 -1
  10. package/dist/src/lib/index.d.ts +21 -0
  11. package/dist/src/lib/index.d.ts.map +1 -1
  12. package/dist/src/lib/index.js +44 -2
  13. package/dist/src/lib/transaction/addressInitializationTransaction.d.ts +31 -0
  14. package/dist/src/lib/transaction/addressInitializationTransaction.d.ts.map +1 -0
  15. package/dist/src/lib/transaction/addressInitializationTransaction.js +170 -0
  16. package/dist/src/lib/transaction/burnNftTransaction.d.ts +29 -0
  17. package/dist/src/lib/transaction/burnNftTransaction.d.ts.map +1 -0
  18. package/dist/src/lib/transaction/burnNftTransaction.js +138 -0
  19. package/dist/src/lib/transaction/claimRewards.d.ts +31 -0
  20. package/dist/src/lib/transaction/claimRewards.d.ts.map +1 -0
  21. package/dist/src/lib/transaction/claimRewards.js +151 -0
  22. package/dist/src/lib/transaction/delegateClauseTransaction.d.ts +27 -0
  23. package/dist/src/lib/transaction/delegateClauseTransaction.d.ts.map +1 -0
  24. package/dist/src/lib/transaction/delegateClauseTransaction.js +158 -0
  25. package/dist/src/lib/transaction/exitDelegation.d.ts +29 -0
  26. package/dist/src/lib/transaction/exitDelegation.d.ts.map +1 -0
  27. package/dist/src/lib/transaction/exitDelegation.js +143 -0
  28. package/dist/src/lib/transaction/flushTokenTransaction.d.ts +20 -0
  29. package/dist/src/lib/transaction/flushTokenTransaction.d.ts.map +1 -0
  30. package/dist/src/lib/transaction/flushTokenTransaction.js +98 -0
  31. package/dist/src/lib/transaction/nftTransaction.d.ts +17 -0
  32. package/dist/src/lib/transaction/nftTransaction.d.ts.map +1 -0
  33. package/dist/src/lib/transaction/nftTransaction.js +108 -0
  34. package/dist/src/lib/transaction/stakeClauseTransaction.d.ts +27 -0
  35. package/dist/src/lib/transaction/stakeClauseTransaction.d.ts.map +1 -0
  36. package/dist/src/lib/transaction/stakeClauseTransaction.js +158 -0
  37. package/dist/src/lib/transaction/stakingTransaction.d.ts +31 -0
  38. package/dist/src/lib/transaction/stakingTransaction.d.ts.map +1 -0
  39. package/dist/src/lib/transaction/stakingTransaction.js +169 -0
  40. package/dist/src/lib/transaction/tokenTransaction.d.ts +14 -0
  41. package/dist/src/lib/transaction/tokenTransaction.d.ts.map +1 -0
  42. package/dist/src/lib/transaction/tokenTransaction.js +95 -0
  43. package/dist/src/lib/transaction/transaction.d.ts +18 -28
  44. package/dist/src/lib/transaction/transaction.d.ts.map +1 -1
  45. package/dist/src/lib/transaction/transaction.js +99 -58
  46. package/dist/src/lib/transaction/validatorRegistrationTransaction.d.ts +32 -0
  47. package/dist/src/lib/transaction/validatorRegistrationTransaction.d.ts.map +1 -0
  48. package/dist/src/lib/transaction/validatorRegistrationTransaction.js +170 -0
  49. package/dist/src/lib/transactionBuilder/addressInitializationBuilder.d.ts +78 -0
  50. package/dist/src/lib/transactionBuilder/addressInitializationBuilder.d.ts.map +1 -0
  51. package/dist/src/lib/transactionBuilder/addressInitializationBuilder.js +158 -0
  52. package/dist/src/lib/transactionBuilder/burnNftBuilder.d.ts +59 -0
  53. package/dist/src/lib/transactionBuilder/burnNftBuilder.d.ts.map +1 -0
  54. package/dist/src/lib/transactionBuilder/burnNftBuilder.js +118 -0
  55. package/dist/src/lib/transactionBuilder/claimRewardsBuilder.d.ts +59 -0
  56. package/dist/src/lib/transactionBuilder/claimRewardsBuilder.d.ts.map +1 -0
  57. package/dist/src/lib/transactionBuilder/claimRewardsBuilder.js +117 -0
  58. package/dist/src/lib/transactionBuilder/delegateTxnBuilder.d.ts +72 -0
  59. package/dist/src/lib/transactionBuilder/delegateTxnBuilder.d.ts.map +1 -0
  60. package/dist/src/lib/transactionBuilder/delegateTxnBuilder.js +133 -0
  61. package/dist/src/lib/transactionBuilder/exitDelegationBuilder.d.ts +59 -0
  62. package/dist/src/lib/transactionBuilder/exitDelegationBuilder.d.ts.map +1 -0
  63. package/dist/src/lib/transactionBuilder/exitDelegationBuilder.js +118 -0
  64. package/dist/src/lib/transactionBuilder/flushTokenTransactionBuilder.d.ts +66 -0
  65. package/dist/src/lib/transactionBuilder/flushTokenTransactionBuilder.d.ts.map +1 -0
  66. package/dist/src/lib/transactionBuilder/flushTokenTransactionBuilder.js +129 -0
  67. package/dist/src/lib/transactionBuilder/nftTransactionBuilder.d.ts +23 -0
  68. package/dist/src/lib/transactionBuilder/nftTransactionBuilder.d.ts.map +1 -0
  69. package/dist/src/lib/transactionBuilder/nftTransactionBuilder.js +93 -0
  70. package/dist/src/lib/transactionBuilder/stakeClauseTxnBuilder.d.ts +73 -0
  71. package/dist/src/lib/transactionBuilder/stakeClauseTxnBuilder.d.ts.map +1 -0
  72. package/dist/src/lib/transactionBuilder/stakeClauseTxnBuilder.js +146 -0
  73. package/dist/src/lib/transactionBuilder/stakingBuilder.d.ts +73 -0
  74. package/dist/src/lib/transactionBuilder/stakingBuilder.d.ts.map +1 -0
  75. package/dist/src/lib/transactionBuilder/stakingBuilder.js +147 -0
  76. package/dist/src/lib/transactionBuilder/tokenTransactionBuilder.d.ts +21 -0
  77. package/dist/src/lib/transactionBuilder/tokenTransactionBuilder.d.ts.map +1 -0
  78. package/dist/src/lib/transactionBuilder/tokenTransactionBuilder.js +70 -0
  79. package/dist/src/lib/transactionBuilder/transactionBuilder.d.ts +10 -9
  80. package/dist/src/lib/transactionBuilder/transactionBuilder.d.ts.map +1 -1
  81. package/dist/src/lib/transactionBuilder/transactionBuilder.js +25 -19
  82. package/dist/src/lib/transactionBuilder/validatorRegistrationBuilder.d.ts +79 -0
  83. package/dist/src/lib/transactionBuilder/validatorRegistrationBuilder.d.ts.map +1 -0
  84. package/dist/src/lib/transactionBuilder/validatorRegistrationBuilder.js +150 -0
  85. package/dist/src/lib/transactionBuilderFactory.d.ts +55 -0
  86. package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
  87. package/dist/src/lib/transactionBuilderFactory.js +124 -1
  88. package/dist/src/lib/types.d.ts +21 -0
  89. package/dist/src/lib/types.d.ts.map +1 -1
  90. package/dist/src/lib/types.js +1 -1
  91. package/dist/src/lib/utils.d.ts +102 -1
  92. package/dist/src/lib/utils.d.ts.map +1 -1
  93. package/dist/src/lib/utils.js +277 -8
  94. package/dist/src/register.d.ts.map +1 -1
  95. package/dist/src/register.js +5 -1
  96. package/dist/src/vet.d.ts +94 -3
  97. package/dist/src/vet.d.ts.map +1 -1
  98. package/dist/src/vet.js +505 -10
  99. package/dist/src/vetNFTCollection.d.ts +18 -0
  100. package/dist/src/vetNFTCollection.d.ts.map +1 -0
  101. package/dist/src/vetNFTCollection.js +52 -0
  102. package/dist/src/vetToken.d.ts +1 -1
  103. package/dist/src/vetToken.d.ts.map +1 -1
  104. package/dist/src/vetToken.js +2 -2
  105. package/dist/test/resources/vet.d.ts +88 -0
  106. package/dist/test/resources/vet.d.ts.map +1 -0
  107. package/dist/test/resources/vet.js +143 -0
  108. package/dist/test/transactionBuilder/addressInitializationBuilder.d.ts +2 -0
  109. package/dist/test/transactionBuilder/addressInitializationBuilder.d.ts.map +1 -0
  110. package/dist/test/transactionBuilder/addressInitializationBuilder.js +141 -0
  111. package/dist/test/transactionBuilder/burnNftBuilder.d.ts +2 -0
  112. package/dist/test/transactionBuilder/burnNftBuilder.d.ts.map +1 -0
  113. package/dist/test/transactionBuilder/burnNftBuilder.js +150 -0
  114. package/dist/test/transactionBuilder/claimRewardsBuilder.d.ts +2 -0
  115. package/dist/test/transactionBuilder/claimRewardsBuilder.d.ts.map +1 -0
  116. package/dist/test/transactionBuilder/claimRewardsBuilder.js +183 -0
  117. package/dist/test/transactionBuilder/delegateClauseTxnBuilder.d.ts +2 -0
  118. package/dist/test/transactionBuilder/delegateClauseTxnBuilder.d.ts.map +1 -0
  119. package/dist/test/transactionBuilder/delegateClauseTxnBuilder.js +209 -0
  120. package/dist/test/transactionBuilder/exitDelegationBuilder.d.ts +2 -0
  121. package/dist/test/transactionBuilder/exitDelegationBuilder.d.ts.map +1 -0
  122. package/dist/test/transactionBuilder/exitDelegationBuilder.js +150 -0
  123. package/dist/test/transactionBuilder/flushTokenTransactionBuilder.d.ts +2 -0
  124. package/dist/test/transactionBuilder/flushTokenTransactionBuilder.d.ts.map +1 -0
  125. package/dist/test/transactionBuilder/flushTokenTransactionBuilder.js +132 -0
  126. package/dist/test/transactionBuilder/nftTransactionBuilder.d.ts +2 -0
  127. package/dist/test/transactionBuilder/nftTransactionBuilder.d.ts.map +1 -0
  128. package/dist/test/transactionBuilder/nftTransactionBuilder.js +242 -0
  129. package/dist/test/transactionBuilder/stakeClauseTransactionBuilder.d.ts +2 -0
  130. package/dist/test/transactionBuilder/stakeClauseTransactionBuilder.d.ts.map +1 -0
  131. package/dist/test/transactionBuilder/stakeClauseTransactionBuilder.js +247 -0
  132. package/dist/test/transactionBuilder/stakingTransaction.d.ts +2 -0
  133. package/dist/test/transactionBuilder/stakingTransaction.d.ts.map +1 -0
  134. package/dist/test/transactionBuilder/stakingTransaction.js +250 -0
  135. package/dist/test/transactionBuilder/tokenTransactionBuilder.d.ts +2 -0
  136. package/dist/test/transactionBuilder/tokenTransactionBuilder.d.ts.map +1 -0
  137. package/dist/test/transactionBuilder/tokenTransactionBuilder.js +249 -0
  138. package/dist/test/transactionBuilder/transferBuilder.d.ts +2 -0
  139. package/dist/test/transactionBuilder/transferBuilder.d.ts.map +1 -0
  140. package/dist/test/transactionBuilder/transferBuilder.js +244 -0
  141. package/dist/test/transactionBuilder/validatorRegistrationTxnBuilder.d.ts +2 -0
  142. package/dist/test/transactionBuilder/validatorRegistrationTxnBuilder.d.ts.map +1 -0
  143. package/dist/test/transactionBuilder/validatorRegistrationTxnBuilder.js +231 -0
  144. package/dist/test/unit/keyPair.d.ts +2 -0
  145. package/dist/test/unit/keyPair.d.ts.map +1 -0
  146. package/dist/test/unit/keyPair.js +181 -0
  147. package/dist/test/unit/stakingFlowE2E.d.ts +2 -0
  148. package/dist/test/unit/stakingFlowE2E.d.ts.map +1 -0
  149. package/dist/test/unit/stakingFlowE2E.js +292 -0
  150. package/dist/test/unit/utils.d.ts +2 -0
  151. package/dist/test/unit/utils.d.ts.map +1 -0
  152. package/dist/test/unit/utils.js +106 -0
  153. package/dist/test/unit/vet.d.ts +2 -0
  154. package/dist/test/unit/vet.d.ts.map +1 -0
  155. package/dist/test/unit/vet.js +336 -0
  156. package/dist/tsconfig.tsbuildinfo +1 -0
  157. package/package.json +16 -10
  158. package/.eslintignore +0 -5
  159. package/.mocharc.yml +0 -8
  160. package/CHANGELOG.md +0 -40
@@ -0,0 +1,158 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.StakeClauseTransaction = void 0;
7
+ const sdk_core_1 = require("@bitgo-beta/sdk-core");
8
+ const sdk_core_2 = require("@vechain/sdk-core");
9
+ const transaction_1 = require("./transaction");
10
+ const ethereumjs_abi_1 = __importDefault(require("ethereumjs-abi"));
11
+ const utils_1 = __importDefault(require("../utils"));
12
+ const bignumber_js_1 = __importDefault(require("bignumber.js"));
13
+ const ethereumjs_util_1 = require("ethereumjs-util");
14
+ class StakeClauseTransaction extends transaction_1.Transaction {
15
+ constructor(_coinConfig) {
16
+ super(_coinConfig);
17
+ this._type = sdk_core_1.TransactionType.StakingActivate;
18
+ }
19
+ get stakingContractAddress() {
20
+ return this._stakingContractAddress;
21
+ }
22
+ set stakingContractAddress(address) {
23
+ this._stakingContractAddress = address;
24
+ }
25
+ get levelId() {
26
+ return this._levelId;
27
+ }
28
+ set levelId(levelId) {
29
+ this._levelId = levelId;
30
+ }
31
+ get amountToStake() {
32
+ return this._amountToStake;
33
+ }
34
+ set amountToStake(amount) {
35
+ this._amountToStake = amount;
36
+ }
37
+ buildClauses() {
38
+ if (!this.stakingContractAddress) {
39
+ throw new Error('Staking contract address is not set');
40
+ }
41
+ utils_1.default.validateStakingContractAddress(this.stakingContractAddress, this._coinConfig);
42
+ if (this.levelId === undefined || this.levelId === null) {
43
+ throw new Error('Level ID is not set');
44
+ }
45
+ if (!this.amountToStake) {
46
+ throw new Error('Amount to stake is not set');
47
+ }
48
+ const data = this.getStakingData(this.levelId);
49
+ this._transactionData = data;
50
+ // Create the clause for staking
51
+ this._clauses = [
52
+ {
53
+ to: this.stakingContractAddress,
54
+ value: this.amountToStake,
55
+ data: this._transactionData,
56
+ },
57
+ ];
58
+ // Set recipients based on the clauses
59
+ this._recipients = [
60
+ {
61
+ address: this.stakingContractAddress,
62
+ amount: this.amountToStake,
63
+ },
64
+ ];
65
+ }
66
+ /**
67
+ * Encodes staking transaction data using ethereumjs-abi for stake method
68
+ *
69
+ * @param {number} levelId - The level ID for staking
70
+ * @returns {string} - The encoded transaction data
71
+ */
72
+ getStakingData(levelId) {
73
+ const methodName = 'stake';
74
+ const types = ['uint8'];
75
+ const params = [levelId];
76
+ const method = ethereumjs_abi_1.default.methodID(methodName, types);
77
+ const args = ethereumjs_abi_1.default.rawEncode(types, params);
78
+ return (0, ethereumjs_util_1.addHexPrefix)(Buffer.concat([method, args]).toString('hex'));
79
+ }
80
+ toJson() {
81
+ const json = {
82
+ id: this.id,
83
+ chainTag: this.chainTag,
84
+ blockRef: this.blockRef,
85
+ expiration: this.expiration,
86
+ gasPriceCoef: this.gasPriceCoef,
87
+ gas: this.gas,
88
+ dependsOn: this.dependsOn,
89
+ nonce: this.nonce,
90
+ data: this.transactionData,
91
+ value: this.amountToStake,
92
+ sender: this.sender,
93
+ to: this.stakingContractAddress,
94
+ stakingContractAddress: this.stakingContractAddress,
95
+ amountToStake: this.amountToStake,
96
+ levelId: this.levelId,
97
+ };
98
+ return json;
99
+ }
100
+ fromDeserializedSignedTransaction(signedTx) {
101
+ try {
102
+ if (!signedTx || !signedTx.body) {
103
+ throw new sdk_core_1.InvalidTransactionError('Invalid transaction: missing transaction body');
104
+ }
105
+ // Store the raw transaction
106
+ this.rawTransaction = signedTx;
107
+ // Set transaction body properties
108
+ const body = signedTx.body;
109
+ this.chainTag = typeof body.chainTag === 'number' ? body.chainTag : 0;
110
+ this.blockRef = body.blockRef || '0x0';
111
+ this.expiration = typeof body.expiration === 'number' ? body.expiration : 64;
112
+ this.clauses = body.clauses || [];
113
+ this.gasPriceCoef = typeof body.gasPriceCoef === 'number' ? body.gasPriceCoef : 128;
114
+ this.gas = typeof body.gas === 'number' ? body.gas : Number(body.gas) || 0;
115
+ this.dependsOn = body.dependsOn || null;
116
+ this.nonce = String(body.nonce);
117
+ // Set staking-specific properties
118
+ if (body.clauses.length > 0) {
119
+ const clause = body.clauses[0];
120
+ if (clause.to) {
121
+ this.stakingContractAddress = clause.to;
122
+ }
123
+ if (clause.value) {
124
+ this.amountToStake = new bignumber_js_1.default(clause.value).toFixed();
125
+ }
126
+ if (clause.data) {
127
+ this.transactionData = clause.data;
128
+ const decoded = utils_1.default.decodeStakeClauseData(clause.data);
129
+ this.levelId = decoded.levelId;
130
+ }
131
+ }
132
+ // Set recipients from clauses
133
+ this.recipients = body.clauses.map((clause) => ({
134
+ address: (clause.to || '0x0').toString().toLowerCase(),
135
+ amount: new bignumber_js_1.default(clause.value || 0).toString(),
136
+ }));
137
+ this.loadInputsAndOutputs();
138
+ // Set sender address
139
+ if (signedTx.signature && signedTx.origin) {
140
+ this.sender = signedTx.origin.toString().toLowerCase();
141
+ }
142
+ // Set signatures if present
143
+ if (signedTx.signature) {
144
+ // First signature is sender's signature
145
+ this.senderSignature = Buffer.from(signedTx.signature.slice(0, sdk_core_2.Secp256k1.SIGNATURE_LENGTH));
146
+ // If there's additional signature data, it's the fee payer's signature
147
+ if (signedTx.signature.length > sdk_core_2.Secp256k1.SIGNATURE_LENGTH) {
148
+ this.feePayerSignature = Buffer.from(signedTx.signature.slice(sdk_core_2.Secp256k1.SIGNATURE_LENGTH));
149
+ }
150
+ }
151
+ }
152
+ catch (e) {
153
+ throw new sdk_core_1.InvalidTransactionError(`Failed to deserialize transaction: ${e.message}`);
154
+ }
155
+ }
156
+ }
157
+ exports.StakeClauseTransaction = StakeClauseTransaction;
158
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Rha2VDbGF1c2VUcmFuc2FjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdHJhbnNhY3Rpb24vc3Rha2VDbGF1c2VUcmFuc2FjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxtREFBZ0Y7QUFFaEYsZ0RBQTZFO0FBQzdFLCtDQUE0QztBQUU1QyxvRUFBeUM7QUFDekMscURBQTZCO0FBQzdCLGdFQUFxQztBQUNyQyxxREFBK0M7QUFFL0MsTUFBYSxzQkFBdUIsU0FBUSx5QkFBVztJQUtyRCxZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNuQixJQUFJLENBQUMsS0FBSyxHQUFHLDBCQUFlLENBQUMsZUFBZSxDQUFDO0lBQy9DLENBQUM7SUFFRCxJQUFJLHNCQUFzQjtRQUN4QixPQUFPLElBQUksQ0FBQyx1QkFBdUIsQ0FBQztJQUN0QyxDQUFDO0lBRUQsSUFBSSxzQkFBc0IsQ0FBQyxPQUFlO1FBQ3hDLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxPQUFPLENBQUM7SUFDekMsQ0FBQztJQUVELElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBRUQsSUFBSSxPQUFPLENBQUMsT0FBZTtRQUN6QixJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2YsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQzdCLENBQUM7SUFFRCxJQUFJLGFBQWEsQ0FBQyxNQUFjO1FBQzlCLElBQUksQ0FBQyxjQUFjLEdBQUcsTUFBTSxDQUFDO0lBQy9CLENBQUM7SUFFRCxZQUFZO1FBQ1YsSUFBSSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1lBQ2pDLE1BQU0sSUFBSSxLQUFLLENBQUMscUNBQXFDLENBQUMsQ0FBQztRQUN6RCxDQUFDO1FBRUQsZUFBSyxD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RSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3pELENBQUM7WUFFRCw0QkFBNEI7WUFDNUIsSUFBSSxRQUFRLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ3ZCLHdDQUF3QztnQkFDeEMsSUFBSSxDQUFDLGVBQWUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxvQkFBUyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztnQkFFNUYsdUVBQXVFO2dCQUN2RSxJQUFJLFFBQVEsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLG9CQUFTLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztvQkFDM0QsSUFBSSxDQUFDLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsb0JBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7Z0JBQzdGLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxNQUFNLElBQUksa0NBQXVCLENBQUMsc0NBQXNDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZGLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUExS0Qsd0RBMEtDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVHJhbnNhY3Rpb25UeXBlLCBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvciB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIGFzIFZldFRyYW5zYWN0aW9uLCBTZWNwMjU2azEgfSBmcm9tICdAdmVjaGFpbi9zZGstY29yZSc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgVmV0VHJhbnNhY3Rpb25EYXRhIH0gZnJvbSAnLi4vaWZhY2UnO1xuaW1wb3J0IEV0aGVyZXVtQWJpIGZyb20gJ2V0aGVyZXVtanMtYWJpJztcbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgQmlnTnVtYmVyIGZyb20gJ2JpZ251bWJlci5qcyc7XG5pbXBvcnQgeyBhZGRIZXhQcmVmaXggfSBmcm9tICdldGhlcmV1bWpzLXV0aWwnO1xuXG5leHBvcnQgY2xhc3MgU3Rha2VDbGF1c2VUcmFuc2FjdGlvbiBleHRlbmRzIFRyYW5zYWN0aW9uIHtcbiAgcHJpdmF0ZSBfc3Rha2luZ0NvbnRyYWN0QWRkcmVzczogc3RyaW5nO1xuICBwcml2YXRlIF9sZXZlbElkOiBudW1iZXI7XG4gIHByaXZhdGUgX2Ftb3VudFRvU3Rha2U6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihfY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihfY29pbkNvbmZpZyk7XG4gICAgdGhpcy5fdHlwZSA9IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nQWN0aXZhdGU7XG4gIH1cblxuICBnZXQgc3Rha2luZ0NvbnRyYWN0QWRkcmVzcygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zdGFraW5nQ29udHJhY3RBZGRyZXNzO1xuICB9XG5cbiAgc2V0IHN0YWtpbmdDb250cmFjdEFkZHJlc3MoYWRkcmVzczogc3RyaW5nKSB7XG4gICAgdGhpcy5fc3Rha2luZ0NvbnRyYWN0QWRkcmVzcyA9IGFkZHJlc3M7XG4gIH1cblxuICBnZXQgbGV2ZWxJZCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9sZXZlbElkO1xuICB9XG5cbiAgc2V0IGxldmVsSWQobGV2ZWxJZDogbnVtYmVyKSB7XG4gICAgdGhpcy5fbGV2ZWxJZCA9IGxldmVsSWQ7XG4gIH1cblxuICBnZXQgYW1vdW50VG9TdGFrZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9hbW91bnRUb1N0YWtlO1xuICB9XG5cbiAgc2V0IGFtb3VudFRvU3Rha2UoYW1vdW50OiBzdHJpbmcpIHtcbiAgICB0aGlzLl9hbW91bnRUb1N0YWtlID0gYW1vdW50O1xuICB9XG5cbiAgYnVpbGRDbGF1c2VzKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zdGFraW5nQ29udHJhY3RBZGRyZXNzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1N0YWtpbmcgY29udHJhY3QgYWRkcmVzcyBpcyBub3Qgc2V0Jyk7XG4gICAgfVxuXG4gICAgdXRpbHMudmFsaWRhdGVTdGFraW5nQ29udHJhY3RBZGRyZXNzKHRoaXMuc3Rha2luZ0NvbnRyYWN0QWRkcmVzcywgdGhpcy5fY29pbkNvbmZpZyk7XG5cbiAgICBpZiAodGhpcy5sZXZlbElkID09PSB1bmRlZmluZWQgfHwgdGhpcy5sZXZlbElkID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0xldmVsIElEIGlzIG5vdCBzZXQnKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuYW1vdW50VG9TdGFrZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBbW91bnQgdG8gc3Rha2UgaXMgbm90IHNldCcpO1xuICAgIH1cblxuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmdldFN0YWtpbmdEYXRhKHRoaXMubGV2ZWxJZCk7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb25EYXRhID0gZGF0YTtcblxuICAgIC8vIENyZWF0ZSB0aGUgY2xhdXNlIGZvciBzdGFraW5nXG4gICAgdGhpcy5fY2xhdXNlcyA9IFtcbiAgICAgIHtcbiAgICAgICAgdG86IHRoaXMuc3Rha2luZ0NvbnRyYWN0QWRkcmVzcyxcbiAgICAgICAgdmFsdWU6IHRoaXMuYW1vdW50VG9TdGFrZSxcbiAgICAgICAgZGF0YTogdGhpcy5fdHJhbnNhY3Rpb25EYXRhLFxuICAgICAgfSxcbiAgICBdO1xuXG4gICAgLy8gU2V0IHJlY2lwaWVudHMgYmFzZWQgb24gdGhlIGNsYXVzZXNcbiAgICB0aGlzLl9yZWNpcGllbnRzID0gW1xuICAgICAge1xuICAgICAgICBhZGRyZXNzOiB0aGlzLnN0YWtpbmdDb250cmFjdEFkZHJlc3MsXG4gICAgICAgIGFtb3VudDogdGhpcy5hbW91bnRUb1N0YWtlLFxuICAgICAgfSxcbiAgICBdO1xuICB9XG4gIC8qKlxuICAgKiBFbmNvZGVzIHN0YWtpbmcgdHJhbnNhY3Rpb24gZGF0YSB1c2luZyBldGhlcmV1bWpzLWFiaSBmb3Igc3Rha2UgbWV0aG9kXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBsZXZlbElkIC0gVGhlIGxldmVsIElEIGZvciBzdGFraW5nXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gVGhlIGVuY29kZWQgdHJhbnNhY3Rpb24gZGF0YVxuICAgKi9cbiAgZ2V0U3Rha2luZ0RhdGEobGV2ZWxJZDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCBtZXRob2ROYW1lID0gJ3N0YWtlJztcbiAgICBjb25zdCB0eXBlcyA9IFsndWludDgnXTtcbiAgICBjb25zdCBwYXJhbXMgPSBbbGV2ZWxJZF07XG5cbiAgICBjb25zdCBtZXRob2QgPSBFdGhlcmV1bUFiaS5tZXRob2RJRChtZXRob2ROYW1lLCB0eXBlcyk7XG4gICAgY29uc3QgYXJncyA9IEV0aGVyZXVtQWJpLnJhd0VuY29kZSh0eXBlcywgcGFyYW1zKTtcblxuICAgIHJldHVybiBhZGRIZXhQcmVmaXgoQnVmZmVyLmNvbmNhdChbbWV0aG9kLCBhcmdzXSkudG9TdHJpbmcoJ2hleCcpKTtcbiAgfVxuXG4gIHRvSnNvbigpOiBWZXRUcmFuc2FjdGlvbkRhdGEge1xuICAgIGNvbnN0IGpzb246IFZldFRyYW5zYWN0aW9uRGF0YSA9IHtcbiAgICAgIGlkOiB0aGlzLmlkLFxuICAgICAgY2hhaW5UYWc6IHRoaXMuY2hhaW5UYWcsXG4gICAgICBibG9ja1JlZjogdGhpcy5ibG9ja1JlZixcbiAgICAgIGV4cGlyYXRpb246IHRoaXMuZXhwaXJhdGlvbixcbiAgICAgIGdhc1ByaWNlQ29lZjogdGhpcy5nYXNQcmljZUNvZWYsXG4gICAgICBnYXM6IHRoaXMuZ2FzLFxuICAgICAgZGVwZW5kc09uOiB0aGlzLmRlcGVuZHNPbixcbiAgICAgIG5vbmNlOiB0aGlzLm5vbmNlLFxuICAgICAgZGF0YTogdGhpcy50cmFuc2FjdGlvbkRhdGEsXG4gICAgICB2YWx1ZTogdGhpcy5hbW91bnRUb1N0YWtlLFxuICAgICAgc2VuZGVyOiB0aGlzLnNlbmRlcixcbiAgICAgIHRvOiB0aGlzLnN0YWtpbmdDb250cmFjdEFkZHJlc3MsXG4gICAgICBzdGFraW5nQ29udHJhY3RBZGRyZXNzOiB0aGlzLnN0YWtpbmdDb250cmFjdEFkZHJlc3MsXG4gICAgICBhbW91bnRUb1N0YWtlOiB0aGlzLmFtb3VudFRvU3Rha2UsXG4gICAgICBsZXZlbElkOiB0aGlzLmxldmVsSWQsXG4gICAgfTtcblxuICAgIHJldHVybiBqc29uO1xuICB9XG5cbiAgZnJvbURlc2VyaWFsaXplZFNpZ25lZFRyYW5zYWN0aW9uKHNpZ25lZFR4OiBWZXRUcmFuc2FjdGlvbik6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICBpZiAoIXNpZ25lZFR4IHx8ICFzaWduZWRUeC5ib2R5KSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCB0cmFuc2FjdGlvbjogbWlzc2luZyB0cmFuc2FjdGlvbiBib2R5Jyk7XG4gICAgICB9XG5cbiAgICAgIC8vIFN0b3JlIHRoZSByYXcgdHJhbnNhY3Rpb25cbiAgICAgIHRoaXMucmF3VHJhbnNhY3Rpb24gPSBzaWduZWRUeDtcblxuICAgICAgLy8gU2V0IHRyYW5zYWN0aW9uIGJvZHkgcHJvcGVydGllc1xuICAgICAgY29uc3QgYm9keSA9IHNpZ25lZFR4LmJvZHk7XG4gICAgICB0aGlzLmNoYWluVGFnID0gdHlwZW9mIGJvZHkuY2hhaW5UYWcgPT09ICdudW1iZXInID8gYm9keS5jaGFpblRhZyA6IDA7XG4gICAgICB0aGlzLmJsb2NrUmVmID0gYm9keS5ibG9ja1JlZiB8fCAnMHgwJztcbiAgICAgIHRoaXMuZXhwaXJhdGlvbiA9IHR5cGVvZiBib2R5LmV4cGlyYXRpb24gPT09ICdudW1iZXInID8gYm9keS5leHBpcmF0aW9uIDogNjQ7XG4gICAgICB0aGlzLmNsYXVzZXMgPSBib2R5LmNsYXVzZXMgfHwgW107XG4gICAgICB0aGlzLmdhc1ByaWNlQ29lZiA9IHR5cGVvZiBib2R5Lmdhc1ByaWNlQ29lZiA9PT0gJ251bWJlcicgPyBib2R5Lmdhc1ByaWNlQ29lZiA6IDEyODtcbiAgICAgIHRoaXMuZ2FzID0gdHlwZW9mIGJvZHkuZ2FzID09PSAnbnVtYmVyJyA/IGJvZHkuZ2FzIDogTnVtYmVyKGJvZHkuZ2FzKSB8fCAwO1xuICAgICAgdGhpcy5kZXBlbmRzT24gPSBib2R5LmRlcGVuZHNPbiB8fCBudWxsO1xuICAgICAgdGhpcy5ub25jZSA9IFN0cmluZyhib2R5Lm5vbmNlKTtcblxuICAgICAgLy8gU2V0IHN0YWtpbmctc3BlY2lmaWMgcHJvcGVydGllc1xuICAgICAgaWYgKGJvZHkuY2xhdXNlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IGNsYXVzZSA9IGJvZHkuY2xhdXNlc1swXTtcbiAgICAgICAgaWYgKGNsYXVzZS50bykge1xuICAgICAgICAgIHRoaXMuc3Rha2luZ0NvbnRyYWN0QWRkcmVzcyA9IGNsYXVzZS50bztcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2xhdXNlLnZhbHVlKSB7XG4gICAgICAgICAgdGhpcy5hbW91bnRUb1N0YWtlID0gbmV3IEJpZ051bWJlcihjbGF1c2UudmFsdWUpLnRvRml4ZWQoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2xhdXNlLmRhdGEpIHtcbiAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRGF0YSA9IGNsYXVzZS5kYXRhO1xuICAgICAgICAgIGNvbnN0IGRlY29kZWQgPSB1dGlscy5kZWNvZGVTdGFrZUNsYXVzZURhdGEoY2xhdXNlLmRhdGEpO1xuICAgICAgICAgIHRoaXMubGV2ZWxJZCA9IGRlY29kZWQubGV2ZWxJZDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBTZXQgcmVjaXBpZW50cyBmcm9tIGNsYXVzZXNcbiAgICAgIHRoaXMucmVjaXBpZW50cyA9IGJvZHkuY2xhdXNlcy5tYXAoKGNsYXVzZSkgPT4gKHtcbiAgICAgICAgYWRkcmVzczogKGNsYXVzZS50byB8fCAnMHgwJykudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICBhbW91bnQ6IG5ldyBCaWdOdW1iZXIoY2xhdXNlLnZhbHVlIHx8IDApLnRvU3RyaW5nKCksXG4gICAgICB9KSk7XG4gICAgICB0aGlzLmxvYWRJbnB1dHNBbmRPdXRwdXRzKCk7XG5cbiAgICAgIC8vIFNldCBzZW5kZXIgYWRkcmVzc1xuICAgICAgaWYgKHNpZ25lZFR4LnNpZ25hdHVyZSAmJiBzaWduZWRUeC5vcmlnaW4pIHtcbiAgICAgICAgdGhpcy5zZW5kZXIgPSBzaWduZWRUeC5vcmlnaW4udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgfVxuXG4gICAgICAvLyBTZXQgc2lnbmF0dXJlcyBpZiBwcmVzZW50XG4gICAgICBpZiAoc2lnbmVkVHguc2lnbmF0dXJlKSB7XG4gICAgICAgIC8vIEZpcnN0IHNpZ25hdHVyZSBpcyBzZW5kZXIncyBzaWduYXR1cmVcbiAgICAgICAgdGhpcy5zZW5kZXJTaWduYXR1cmUgPSBCdWZmZXIuZnJvbShzaWduZWRUeC5zaWduYXR1cmUuc2xpY2UoMCwgU2VjcDI1NmsxLlNJR05BVFVSRV9MRU5HVEgpKTtcblxuICAgICAgICAvLyBJZiB0aGVyZSdzIGFkZGl0aW9uYWwgc2lnbmF0dXJlIGRhdGEsIGl0J3MgdGhlIGZlZSBwYXllcidzIHNpZ25hdHVyZVxuICAgICAgICBpZiAoc2lnbmVkVHguc2lnbmF0dXJlLmxlbmd0aCA+IFNlY3AyNTZrMS5TSUdOQVRVUkVfTEVOR1RIKSB7XG4gICAgICAgICAgdGhpcy5mZWVQYXllclNpZ25hdHVyZSA9IEJ1ZmZlci5mcm9tKHNpZ25lZFR4LnNpZ25hdHVyZS5zbGljZShTZWNwMjU2azEuU0lHTkFUVVJFX0xFTkdUSCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKGBGYWlsZWQgdG8gZGVzZXJpYWxpemUgdHJhbnNhY3Rpb246ICR7ZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -0,0 +1,31 @@
1
+ import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
2
+ import { Transaction as VetTransaction } from '@vechain/sdk-core';
3
+ import { Transaction } from './transaction';
4
+ import { VetTransactionData } from '../iface';
5
+ export declare class StakingTransaction extends Transaction {
6
+ private _stakingContractAddress;
7
+ private _levelId;
8
+ private _autorenew;
9
+ private _amountToStake;
10
+ constructor(_coinConfig: Readonly<CoinConfig>);
11
+ get stakingContractAddress(): string;
12
+ set stakingContractAddress(address: string);
13
+ get levelId(): number;
14
+ set levelId(levelId: number);
15
+ get autorenew(): boolean;
16
+ set autorenew(autorenew: boolean);
17
+ get amountToStake(): string;
18
+ set amountToStake(amount: string);
19
+ buildClauses(): void;
20
+ /**
21
+ * Encodes staking transaction data using ethereumjs-abi for stakeAndDelegate method
22
+ *
23
+ * @param {number} levelId - The level ID for staking
24
+ * @param {boolean} autorenew - Whether to enable autorenew
25
+ * @returns {string} - The encoded transaction data
26
+ */
27
+ getStakingData(levelId: number, autorenew?: boolean): string;
28
+ toJson(): VetTransactionData;
29
+ fromDeserializedSignedTransaction(signedTx: VetTransaction): void;
30
+ }
31
+ //# sourceMappingURL=stakingTransaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stakingTransaction.d.ts","sourceRoot":"","sources":["../../../../src/lib/transaction/stakingTransaction.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,WAAW,IAAI,cAAc,EAAa,MAAM,mBAAmB,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAM9C,qBAAa,kBAAmB,SAAQ,WAAW;IACjD,OAAO,CAAC,uBAAuB,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,UAAU,CAAQ;IAC1B,OAAO,CAAC,cAAc,CAAS;gBAEnB,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAM7C,IAAI,sBAAsB,IAAI,MAAM,CAEnC;IAED,IAAI,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAEzC;IAED,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,IAAI,OAAO,CAAC,OAAO,EAAE,MAAM,EAE1B;IAED,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,IAAI,SAAS,CAAC,SAAS,EAAE,OAAO,EAE/B;IAED,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED,IAAI,aAAa,CAAC,MAAM,EAAE,MAAM,EAE/B;IAED,YAAY,IAAI,IAAI;IAmCpB;;;;;;OAMG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,UAAO,GAAG,MAAM;IAWzD,MAAM,IAAI,kBAAkB;IAuB5B,iCAAiC,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;CA+DlE"}
@@ -0,0 +1,169 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.StakingTransaction = void 0;
7
+ const sdk_core_1 = require("@bitgo-beta/sdk-core");
8
+ const sdk_core_2 = require("@vechain/sdk-core");
9
+ const transaction_1 = require("./transaction");
10
+ const ethereumjs_abi_1 = __importDefault(require("ethereumjs-abi"));
11
+ const utils_1 = __importDefault(require("../utils"));
12
+ const bignumber_js_1 = __importDefault(require("bignumber.js"));
13
+ const ethereumjs_util_1 = require("ethereumjs-util");
14
+ class StakingTransaction extends transaction_1.Transaction {
15
+ constructor(_coinConfig) {
16
+ super(_coinConfig);
17
+ this._autorenew = true;
18
+ this._type = sdk_core_1.TransactionType.ContractCall;
19
+ this._autorenew = true;
20
+ }
21
+ get stakingContractAddress() {
22
+ return this._stakingContractAddress;
23
+ }
24
+ set stakingContractAddress(address) {
25
+ this._stakingContractAddress = address;
26
+ }
27
+ get levelId() {
28
+ return this._levelId;
29
+ }
30
+ set levelId(levelId) {
31
+ this._levelId = levelId;
32
+ }
33
+ get autorenew() {
34
+ return this._autorenew;
35
+ }
36
+ set autorenew(autorenew) {
37
+ this._autorenew = autorenew;
38
+ }
39
+ get amountToStake() {
40
+ return this._amountToStake;
41
+ }
42
+ set amountToStake(amount) {
43
+ this._amountToStake = amount;
44
+ }
45
+ buildClauses() {
46
+ if (!this.stakingContractAddress) {
47
+ throw new Error('Staking contract address is not set');
48
+ }
49
+ utils_1.default.validateStakingContractAddress(this.stakingContractAddress, this._coinConfig);
50
+ if (this.levelId === undefined || this.levelId === null) {
51
+ throw new Error('Level ID is not set');
52
+ }
53
+ if (!this.amountToStake) {
54
+ throw new Error('Amount to stake is not set');
55
+ }
56
+ const data = this.getStakingData(this.levelId, this.autorenew);
57
+ this._transactionData = data;
58
+ // Create the clause for staking
59
+ this._clauses = [
60
+ {
61
+ to: this.stakingContractAddress,
62
+ value: this.amountToStake,
63
+ data: this._transactionData,
64
+ },
65
+ ];
66
+ // Set recipients based on the clauses
67
+ this._recipients = [
68
+ {
69
+ address: this.stakingContractAddress,
70
+ amount: this.amountToStake,
71
+ },
72
+ ];
73
+ }
74
+ /**
75
+ * Encodes staking transaction data using ethereumjs-abi for stakeAndDelegate method
76
+ *
77
+ * @param {number} levelId - The level ID for staking
78
+ * @param {boolean} autorenew - Whether to enable autorenew
79
+ * @returns {string} - The encoded transaction data
80
+ */
81
+ getStakingData(levelId, autorenew = true) {
82
+ const methodName = 'stakeAndDelegate';
83
+ const types = ['uint8', 'bool'];
84
+ const params = [levelId, autorenew];
85
+ const method = ethereumjs_abi_1.default.methodID(methodName, types);
86
+ const args = ethereumjs_abi_1.default.rawEncode(types, params);
87
+ return (0, ethereumjs_util_1.addHexPrefix)(Buffer.concat([method, args]).toString('hex'));
88
+ }
89
+ toJson() {
90
+ const json = {
91
+ id: this.id,
92
+ chainTag: this.chainTag,
93
+ blockRef: this.blockRef,
94
+ expiration: this.expiration,
95
+ gasPriceCoef: this.gasPriceCoef,
96
+ gas: this.gas,
97
+ dependsOn: this.dependsOn,
98
+ nonce: this.nonce,
99
+ data: this.transactionData,
100
+ value: this.amountToStake,
101
+ sender: this.sender,
102
+ to: this.stakingContractAddress,
103
+ stakingContractAddress: this.stakingContractAddress,
104
+ amountToStake: this.amountToStake,
105
+ nftTokenId: this.levelId,
106
+ autorenew: this.autorenew,
107
+ };
108
+ return json;
109
+ }
110
+ fromDeserializedSignedTransaction(signedTx) {
111
+ try {
112
+ if (!signedTx || !signedTx.body) {
113
+ throw new sdk_core_1.InvalidTransactionError('Invalid transaction: missing transaction body');
114
+ }
115
+ // Store the raw transaction
116
+ this.rawTransaction = signedTx;
117
+ // Set transaction body properties
118
+ const body = signedTx.body;
119
+ this.chainTag = typeof body.chainTag === 'number' ? body.chainTag : 0;
120
+ this.blockRef = body.blockRef || '0x0';
121
+ this.expiration = typeof body.expiration === 'number' ? body.expiration : 64;
122
+ this.clauses = body.clauses || [];
123
+ this.gasPriceCoef = typeof body.gasPriceCoef === 'number' ? body.gasPriceCoef : 128;
124
+ this.gas = typeof body.gas === 'number' ? body.gas : Number(body.gas) || 0;
125
+ this.dependsOn = body.dependsOn || null;
126
+ this.nonce = String(body.nonce);
127
+ // Set staking-specific properties
128
+ if (body.clauses.length > 0) {
129
+ const clause = body.clauses[0];
130
+ if (clause.to) {
131
+ this.stakingContractAddress = clause.to;
132
+ }
133
+ if (clause.value) {
134
+ this.amountToStake = String(clause.value);
135
+ }
136
+ if (clause.data) {
137
+ this.transactionData = clause.data;
138
+ const decoded = utils_1.default.decodeStakingData(clause.data);
139
+ this.levelId = decoded.levelId;
140
+ this.autorenew = decoded.autorenew;
141
+ }
142
+ }
143
+ // Set recipients from clauses
144
+ this.recipients = body.clauses.map((clause) => ({
145
+ address: (clause.to || '0x0').toString().toLowerCase(),
146
+ amount: new bignumber_js_1.default(clause.value || 0).toString(),
147
+ }));
148
+ this.loadInputsAndOutputs();
149
+ // Set sender address
150
+ if (signedTx.signature && signedTx.origin) {
151
+ this.sender = signedTx.origin.toString().toLowerCase();
152
+ }
153
+ // Set signatures if present
154
+ if (signedTx.signature) {
155
+ // First signature is sender's signature
156
+ this.senderSignature = Buffer.from(signedTx.signature.slice(0, sdk_core_2.Secp256k1.SIGNATURE_LENGTH));
157
+ // If there's additional signature data, it's the fee payer's signature
158
+ if (signedTx.signature.length > sdk_core_2.Secp256k1.SIGNATURE_LENGTH) {
159
+ this.feePayerSignature = Buffer.from(signedTx.signature.slice(sdk_core_2.Secp256k1.SIGNATURE_LENGTH));
160
+ }
161
+ }
162
+ }
163
+ catch (e) {
164
+ throw new sdk_core_1.InvalidTransactionError(`Failed to deserialize transaction: ${e.message}`);
165
+ }
166
+ }
167
+ }
168
+ exports.StakingTransaction = StakingTransaction;
169
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Rha2luZ1RyYW5zYWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbi9zdGFraW5nVHJhbnNhY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsbURBQWdGO0FBRWhGLGdEQUE2RTtBQUM3RSwrQ0FBNEM7QUFFNUMsb0VBQXlDO0FBQ3pDLHFEQUE2QjtBQUM3QixnRUFBcUM7QUFDckMscURBQStDO0FBRS9DLE1BQWEsa0JBQW1CLFNBQVEseUJBQVc7SUFNakQsWUFBWSxXQUFpQztRQUMzQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFKYixlQUFVLEdBQUcsSUFBSSxDQUFDO1FBS3hCLElBQUksQ0FBQyxLQUFLLEdBQUcsMEJBQWUsQ0FBQyxZQUFZLENBQUM7UUFDMUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7SUFDekIsQ0FBQztJQUVELElBQUksc0JBQXNCO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLHVCQUF1QixDQUFDO0lBQ3RDLENBQUM7SUFFRCxJQUFJLHNCQUFzQixDQUFDLE9BQWU7UUFDeEMsSUFBSSxDQUFDLHVCQUF1QixHQUFHLE9BQU8sQ0FBQztJQUN6QyxDQUFDO0lBRUQsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxJQUFJLE9BQU8sQ0FBQyxPQUFlO1FBQ3pCLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDekIsQ0FBQztJQUVELElBQUksU0FBUyxDQUFDLFNBQWtCO1FBQzlCLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO0lBQzlCLENBQUM7SUFFRCxJQUFJLGFBQWE7UUFDZixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDN0IsQ0FBQztJQUVELElB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eyBUcmFuc2FjdGlvblR5cGUsIEludmFsaWRUcmFuc2FjdGlvbkVycm9yIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gYXMgVmV0VHJhbnNhY3Rpb24sIFNlY3AyNTZrMSB9IGZyb20gJ0B2ZWNoYWluL3Nkay1jb3JlJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5pbXBvcnQgeyBWZXRUcmFuc2FjdGlvbkRhdGEgfSBmcm9tICcuLi9pZmFjZSc7XG5pbXBvcnQgRXRoZXJldW1BYmkgZnJvbSAnZXRoZXJldW1qcy1hYmknO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCBCaWdOdW1iZXIgZnJvbSAnYmlnbnVtYmVyLmpzJztcbmltcG9ydCB7IGFkZEhleFByZWZpeCB9IGZyb20gJ2V0aGVyZXVtanMtdXRpbCc7XG5cbmV4cG9ydCBjbGFzcyBTdGFraW5nVHJhbnNhY3Rpb24gZXh0ZW5kcyBUcmFuc2FjdGlvbiB7XG4gIHByaXZhdGUgX3N0YWtpbmdDb250cmFjdEFkZHJlc3M6IHN0cmluZztcbiAgcHJpdmF0ZSBfbGV2ZWxJZDogbnVtYmVyO1xuICBwcml2YXRlIF9hdXRvcmVuZXcgPSB0cnVlO1xuICBwcml2YXRlIF9hbW91bnRUb1N0YWtlOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICAgIHRoaXMuX3R5cGUgPSBUcmFuc2FjdGlvblR5cGUuQ29udHJhY3RDYWxsO1xuICAgIHRoaXMuX2F1dG9yZW5ldyA9IHRydWU7XG4gIH1cblxuICBnZXQgc3Rha2luZ0NvbnRyYWN0QWRkcmVzcygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zdGFraW5nQ29udHJhY3RBZGRyZXNzO1xuICB9XG5cbiAgc2V0IHN0YWtpbmdDb250cmFjdEFkZHJlc3MoYWRkcmVzczogc3RyaW5nKSB7XG4gICAgdGhpcy5fc3Rha2luZ0NvbnRyYWN0QWRkcmVzcyA9IGFkZHJlc3M7XG4gIH1cblxuICBnZXQgbGV2ZWxJZCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9sZXZlbElkO1xuICB9XG5cbiAgc2V0IGxldmVsSWQobGV2ZWxJZDogbnVtYmVyKSB7XG4gICAgdGhpcy5fbGV2ZWxJZCA9IGxldmVsSWQ7XG4gIH1cblxuICBnZXQgYXV0b3JlbmV3KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9hdXRvcmVuZXc7XG4gIH1cblxuICBzZXQgYXV0b3JlbmV3KGF1dG9yZW5ldzogYm9vbGVhbikge1xuICAgIHRoaXMuX2F1dG9yZW5ldyA9IGF1dG9yZW5ldztcbiAgfVxuXG4gIGdldCBhbW91bnRUb1N0YWtlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2Ftb3VudFRvU3Rha2U7XG4gIH1cblxuICBzZXQgYW1vdW50VG9TdGFrZShhbW91bnQ6IHN0cmluZykge1xuICAgIHRoaXMuX2Ftb3VudFRvU3Rha2UgPSBhbW91bnQ7XG4gIH1cblxuICBidWlsZENsYXVzZXMoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnN0YWtpbmdDb250cmFjdEFkZHJlc3MpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU3Rha2luZyBjb250cmFjdCBhZGRyZXNzIGlzIG5vdCBzZXQnKTtcbiAgICB9XG5cbiAgICB1dGlscy52YWxpZGF0ZVN0YWtpbmdDb250cmFjdEFkZHJlc3ModGhpcy5zdGFraW5nQ29udHJhY3RBZGRyZXNzLCB0aGlzLl9jb2luQ29uZmlnKTtcblxuICAgIGlmICh0aGlzLmxldmVsSWQgPT09IHVuZGVmaW5lZCB8fCB0aGlzLmxldmVsSWQgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTGV2ZWwgSUQgaXMgbm90IHNldCcpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5hbW91bnRUb1N0YWtlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Ftb3VudCB0byBzdGFrZSBpcyBub3Qgc2V0Jyk7XG4gICAgfVxuXG4gICAgY29uc3QgZGF0YSA9IHRoaXMuZ2V0U3Rha2luZ0RhdGEodGhpcy5sZXZlbElkLCB0aGlzLmF1dG9yZW5ldyk7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb25EYXRhID0gZGF0YTtcblxuICAgIC8vIENyZWF0ZSB0aGUgY2xhdXNlIGZvciBzdGFraW5nXG4gICAgdGhpcy5fY2xhdXNlcyA9IFtcbiAgICAgIHtcbiAgICAgICAgdG86IHRoaXMuc3Rha2luZ0NvbnRyYWN0QWRkcmVzcyxcbiAgICAgICAgdmFsdWU6IHRoaXMuYW1vdW50VG9TdGFrZSxcbiAgICAgICAgZGF0YTogdGhpcy5fdHJhbnNhY3Rpb25EYXRhLFxuICAgICAgfSxcbiAgICBdO1xuXG4gICAgLy8gU2V0IHJlY2lwaWVudHMgYmFzZWQgb24gdGhlIGNsYXVzZXNcbiAgICB0aGlzLl9yZWNpcGllbnRzID0gW1xuICAgICAge1xuICAgICAgICBhZGRyZXNzOiB0aGlzLnN0YWtpbmdDb250cmFjdEFkZHJlc3MsXG4gICAgICAgIGFtb3VudDogdGhpcy5hbW91bnRUb1N0YWtlLFxuICAgICAgfSxcbiAgICBdO1xuICB9XG4gIC8qKlxuICAgKiBFbmNvZGVzIHN0YWtpbmcgdHJhbnNhY3Rpb24gZGF0YSB1c2luZyBldGhlcmV1bWpzLWFiaSBmb3Igc3Rha2VBbmREZWxlZ2F0ZSBtZXRob2RcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGxldmVsSWQgLSBUaGUgbGV2ZWwgSUQgZm9yIHN0YWtpbmdcbiAgICogQHBhcmFtIHtib29sZWFufSBhdXRvcmVuZXcgLSBXaGV0aGVyIHRvIGVuYWJsZSBhdXRvcmVuZXdcbiAgICogQHJldHVybnMge3N0cmluZ30gLSBUaGUgZW5jb2RlZCB0cmFuc2FjdGlvbiBkYXRhXG4gICAqL1xuICBnZXRTdGFraW5nRGF0YShsZXZlbElkOiBudW1iZXIsIGF1dG9yZW5ldyA9IHRydWUpOiBzdHJpbmcge1xuICAgIGNvbnN0IG1ldGhvZE5hbWUgPSAnc3Rha2VBbmREZWxlZ2F0ZSc7XG4gICAgY29uc3QgdHlwZXMgPSBbJ3VpbnQ4JywgJ2Jvb2wnXTtcbiAgICBjb25zdCBwYXJhbXMgPSBbbGV2ZWxJZCwgYXV0b3JlbmV3XTtcblxuICAgIGNvbnN0IG1ldGhvZCA9IEV0aGVyZXVtQWJpLm1ldGhvZElEKG1ldGhvZE5hbWUsIHR5cGVzKTtcbiAgICBjb25zdCBhcmdzID0gRXRoZXJldW1BYmkucmF3RW5jb2RlKHR5cGVzLCBwYXJhbXMpO1xuXG4gICAgcmV0dXJuIGFkZEhleFByZWZpeChCdWZmZXIuY29uY2F0KFttZXRob2QsIGFyZ3NdKS50b1N0cmluZygnaGV4JykpO1xuICB9XG5cbiAgdG9Kc29uKCk6IFZldFRyYW5zYWN0aW9uRGF0YSB7XG4gICAgY29uc3QganNvbjogVmV0VHJhbnNhY3Rpb25EYXRhID0ge1xuICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICBjaGFpblRhZzogdGhpcy5jaGFpblRhZyxcbiAgICAgIGJsb2NrUmVmOiB0aGlzLmJsb2NrUmVmLFxuICAgICAgZXhwaXJhdGlvbjogdGhpcy5leHBpcmF0aW9uLFxuICAgICAgZ2FzUHJpY2VDb2VmOiB0aGlzLmdhc1ByaWNlQ29lZixcbiAgICAgIGdhczogdGhpcy5nYXMsXG4gICAgICBkZXBlbmRzT246IHRoaXMuZGVwZW5kc09uLFxuICAgICAgbm9uY2U6IHRoaXMubm9uY2UsXG4gICAgICBkYXRhOiB0aGlzLnRyYW5zYWN0aW9uRGF0YSxcbiAgICAgIHZhbHVlOiB0aGlzLmFtb3VudFRvU3Rha2UsXG4gICAgICBzZW5kZXI6IHRoaXMuc2VuZGVyLFxuICAgICAgdG86IHRoaXMuc3Rha2luZ0NvbnRyYWN0QWRkcmVzcyxcbiAgICAgIHN0YWtpbmdDb250cmFjdEFkZHJlc3M6IHRoaXMuc3Rha2luZ0NvbnRyYWN0QWRkcmVzcyxcbiAgICAgIGFtb3VudFRvU3Rha2U6IHRoaXMuYW1vdW50VG9TdGFrZSxcbiAgICAgIG5mdFRva2VuSWQ6IHRoaXMubGV2ZWxJZCxcbiAgICAgIGF1dG9yZW5ldzogdGhpcy5hdXRvcmVuZXcsXG4gICAgfTtcblxuICAgIHJldHVybiBqc29uO1xuICB9XG5cbiAgZnJvbURlc2VyaWFsaXplZFNpZ25lZFRyYW5zYWN0aW9uKHNpZ25lZFR4OiBWZXRUcmFuc2FjdGlvbik6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICBpZiAoIXNpZ25lZFR4IHx8ICFzaWduZWRUeC5ib2R5KSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCB0cmFuc2FjdGlvbjogbWlzc2luZyB0cmFuc2FjdGlvbiBib2R5Jyk7XG4gICAgICB9XG5cbiAgICAgIC8vIFN0b3JlIHRoZSByYXcgdHJhbnNhY3Rpb25cbiAgICAgIHRoaXMucmF3VHJhbnNhY3Rpb24gPSBzaWduZWRUeDtcblxuICAgICAgLy8gU2V0IHRyYW5zYWN0aW9uIGJvZHkgcHJvcGVydGllc1xuICAgICAgY29uc3QgYm9keSA9IHNpZ25lZFR4LmJvZHk7XG4gICAgICB0aGlzLmNoYWluVGFnID0gdHlwZW9mIGJvZHkuY2hhaW5UYWcgPT09ICdudW1iZXInID8gYm9keS5jaGFpblRhZyA6IDA7XG4gICAgICB0aGlzLmJsb2NrUmVmID0gYm9keS5ibG9ja1JlZiB8fCAnMHgwJztcbiAgICAgIHRoaXMuZXhwaXJhdGlvbiA9IHR5cGVvZiBib2R5LmV4cGlyYXRpb24gPT09ICdudW1iZXInID8gYm9keS5leHBpcmF0aW9uIDogNjQ7XG4gICAgICB0aGlzLmNsYXVzZXMgPSBib2R5LmNsYXVzZXMgfHwgW107XG4gICAgICB0aGlzLmdhc1ByaWNlQ29lZiA9IHR5cGVvZiBib2R5Lmdhc1ByaWNlQ29lZiA9PT0gJ251bWJlcicgPyBib2R5Lmdhc1ByaWNlQ29lZiA6IDEyODtcbiAgICAgIHRoaXMuZ2FzID0gdHlwZW9mIGJvZHkuZ2FzID09PSAnbnVtYmVyJyA/IGJvZHkuZ2FzIDogTnVtYmVyKGJvZHkuZ2FzKSB8fCAwO1xuICAgICAgdGhpcy5kZXBlbmRzT24gPSBib2R5LmRlcGVuZHNPbiB8fCBudWxsO1xuICAgICAgdGhpcy5ub25jZSA9IFN0cmluZyhib2R5Lm5vbmNlKTtcblxuICAgICAgLy8gU2V0IHN0YWtpbmctc3BlY2lmaWMgcHJvcGVydGllc1xuICAgICAgaWYgKGJvZHkuY2xhdXNlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IGNsYXVzZSA9IGJvZHkuY2xhdXNlc1swXTtcbiAgICAgICAgaWYgKGNsYXVzZS50bykge1xuICAgICAgICAgIHRoaXMuc3Rha2luZ0NvbnRyYWN0QWRkcmVzcyA9IGNsYXVzZS50bztcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2xhdXNlLnZhbHVlKSB7XG4gICAgICAgICAgdGhpcy5hbW91bnRUb1N0YWtlID0gU3RyaW5nKGNsYXVzZS52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNsYXVzZS5kYXRhKSB7XG4gICAgICAgICAgdGhpcy50cmFuc2FjdGlvbkRhdGEgPSBjbGF1c2UuZGF0YTtcbiAgICAgICAgICBjb25zdCBkZWNvZGVkID0gdXRpbHMuZGVjb2RlU3Rha2luZ0RhdGEoY2xhdXNlLmRhdGEpO1xuICAgICAgICAgIHRoaXMubGV2ZWxJZCA9IGRlY29kZWQubGV2ZWxJZDtcbiAgICAgICAgICB0aGlzLmF1dG9yZW5ldyA9IGRlY29kZWQuYXV0b3JlbmV3O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFNldCByZWNpcGllbnRzIGZyb20gY2xhdXNlc1xuICAgICAgdGhpcy5yZWNpcGllbnRzID0gYm9keS5jbGF1c2VzLm1hcCgoY2xhdXNlKSA9PiAoe1xuICAgICAgICBhZGRyZXNzOiAoY2xhdXNlLnRvIHx8ICcweDAnKS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCksXG4gICAgICAgIGFtb3VudDogbmV3IEJpZ051bWJlcihjbGF1c2UudmFsdWUgfHwgMCkudG9TdHJpbmcoKSxcbiAgICAgIH0pKTtcbiAgICAgIHRoaXMubG9hZElucHV0c0FuZE91dHB1dHMoKTtcblxuICAgICAgLy8gU2V0IHNlbmRlciBhZGRyZXNzXG4gICAgICBpZiAoc2lnbmVkVHguc2lnbmF0dXJlICYmIHNpZ25lZFR4Lm9yaWdpbikge1xuICAgICAgICB0aGlzLnNlbmRlciA9IHNpZ25lZFR4Lm9yaWdpbi50b1N0cmluZygpLnRvTG93ZXJDYXNlKCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNldCBzaWduYXR1cmVzIGlmIHByZXNlbnRcbiAgICAgIGlmIChzaWduZWRUeC5zaWduYXR1cmUpIHtcbiAgICAgICAgLy8gRmlyc3Qgc2lnbmF0dXJlIGlzIHNlbmRlcidzIHNpZ25hdHVyZVxuICAgICAgICB0aGlzLnNlbmRlclNpZ25hdHVyZSA9IEJ1ZmZlci5mcm9tKHNpZ25lZFR4LnNpZ25hdHVyZS5zbGljZSgwLCBTZWNwMjU2azEuU0lHTkFUVVJFX0xFTkdUSCkpO1xuXG4gICAgICAgIC8vIElmIHRoZXJlJ3MgYWRkaXRpb25hbCBzaWduYXR1cmUgZGF0YSwgaXQncyB0aGUgZmVlIHBheWVyJ3Mgc2lnbmF0dXJlXG4gICAgICAgIGlmIChzaWduZWRUeC5zaWduYXR1cmUubGVuZ3RoID4gU2VjcDI1NmsxLlNJR05BVFVSRV9MRU5HVEgpIHtcbiAgICAgICAgICB0aGlzLmZlZVBheWVyU2lnbmF0dXJlID0gQnVmZmVyLmZyb20oc2lnbmVkVHguc2lnbmF0dXJlLnNsaWNlKFNlY3AyNTZrMS5TSUdOQVRVUkVfTEVOR1RIKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoYEZhaWxlZCB0byBkZXNlcmlhbGl6ZSB0cmFuc2FjdGlvbjogJHtlLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -0,0 +1,14 @@
1
+ import { Transaction as VetTransaction } from '@vechain/sdk-core';
2
+ import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
3
+ import { Transaction } from './transaction';
4
+ import { VetTransactionData } from '../iface';
5
+ export declare class TokenTransaction extends Transaction {
6
+ private _tokenAddress;
7
+ constructor(_coinConfig: Readonly<CoinConfig>);
8
+ get tokenAddress(): string;
9
+ set tokenAddress(address: string);
10
+ buildClauses(): void;
11
+ toJson(): VetTransactionData;
12
+ fromDeserializedSignedTransaction(signedTx: VetTransaction): void;
13
+ }
14
+ //# sourceMappingURL=tokenTransaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenTransaction.d.ts","sourceRoot":"","sources":["../../../../src/lib/transaction/tokenTransaction.ts"],"names":[],"mappings":"AACA,OAAO,EAAa,WAAW,IAAI,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAE7E,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAE7D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAG5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAE9C,qBAAa,gBAAiB,SAAQ,WAAW;IAC/C,OAAO,CAAC,aAAa,CAAS;gBAElB,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAK7C,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,IAAI,YAAY,CAAC,OAAO,EAAE,MAAM,EAE/B;IAED,YAAY,IAAI,IAAI;IAcpB,MAAM,IAAI,kBAAkB;IAmB5B,iCAAiC,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;CA4ClE"}
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.TokenTransaction = void 0;
7
+ const assert_1 = __importDefault(require("assert"));
8
+ const sdk_core_1 = require("@vechain/sdk-core");
9
+ const sdk_core_2 = require("@bitgo-beta/sdk-core");
10
+ const transaction_1 = require("./transaction");
11
+ const utils_1 = __importDefault(require("../utils"));
12
+ class TokenTransaction extends transaction_1.Transaction {
13
+ constructor(_coinConfig) {
14
+ super(_coinConfig);
15
+ this._type = sdk_core_2.TransactionType.Send;
16
+ }
17
+ get tokenAddress() {
18
+ return this._tokenAddress;
19
+ }
20
+ set tokenAddress(address) {
21
+ this._tokenAddress = address;
22
+ }
23
+ buildClauses() {
24
+ if (!this.tokenAddress) {
25
+ throw new Error('Token address is not set');
26
+ }
27
+ this.clauses = this.recipients.map((recipient) => {
28
+ const data = utils_1.default.getTransferTokenData(recipient.address, String(recipient.amount));
29
+ return {
30
+ to: this.tokenAddress,
31
+ value: '0x0',
32
+ data,
33
+ };
34
+ });
35
+ }
36
+ toJson() {
37
+ const json = {
38
+ id: this.id,
39
+ chainTag: this.chainTag,
40
+ blockRef: this.blockRef,
41
+ expiration: this.expiration,
42
+ recipients: this.recipients,
43
+ gasPriceCoef: this.gasPriceCoef,
44
+ gas: this.gas,
45
+ dependsOn: this.dependsOn,
46
+ nonce: this.nonce,
47
+ sender: this.sender,
48
+ feePayer: this.feePayerAddress,
49
+ tokenAddress: this.tokenAddress,
50
+ };
51
+ return json;
52
+ }
53
+ fromDeserializedSignedTransaction(signedTx) {
54
+ try {
55
+ if (!signedTx || !signedTx.body) {
56
+ throw new sdk_core_2.InvalidTransactionError('Invalid transaction: missing transaction body');
57
+ }
58
+ // Store the raw transaction
59
+ this.rawTransaction = signedTx;
60
+ // Set transaction body properties
61
+ const body = signedTx.body;
62
+ this.chainTag = body.chainTag;
63
+ this.blockRef = body.blockRef;
64
+ this.expiration = body.expiration;
65
+ this.clauses = body.clauses;
66
+ this.gasPriceCoef = typeof body.gasPriceCoef === 'number' ? body.gasPriceCoef : 128;
67
+ this.gas = Number(body.gas);
68
+ this.dependsOn = body.dependsOn;
69
+ this.nonce = String(body.nonce);
70
+ // Set recipients from clauses
71
+ (0, assert_1.default)(body.clauses[0].to, 'token address not found in the clauses');
72
+ this.tokenAddress = body.clauses[0].to;
73
+ this.recipients = body.clauses.map((clause) => utils_1.default.decodeTransferTokenData(clause.data));
74
+ this.loadInputsAndOutputs();
75
+ // Set sender address
76
+ if (signedTx.signature && signedTx.origin) {
77
+ this.sender = signedTx.origin.toString().toLowerCase();
78
+ }
79
+ // Set signatures if present
80
+ if (signedTx.signature) {
81
+ // First signature is sender's signature
82
+ this.senderSignature = Buffer.from(signedTx.signature.slice(0, sdk_core_1.Secp256k1.SIGNATURE_LENGTH));
83
+ // If there's additional signature data, it's the fee payer's signature
84
+ if (signedTx.signature.length > sdk_core_1.Secp256k1.SIGNATURE_LENGTH) {
85
+ this.feePayerSignature = Buffer.from(signedTx.signature.slice(sdk_core_1.Secp256k1.SIGNATURE_LENGTH));
86
+ }
87
+ }
88
+ }
89
+ catch (e) {
90
+ throw new sdk_core_2.InvalidTransactionError(`Failed to deserialize transaction: ${e.message}`);
91
+ }
92
+ }
93
+ }
94
+ exports.TokenTransaction = TokenTransaction;
95
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5UcmFuc2FjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdHJhbnNhY3Rpb24vdG9rZW5UcmFuc2FjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsZ0RBQTZFO0FBRzdFLG1EQUFnRjtBQUNoRiwrQ0FBNEM7QUFDNUMscURBQTZCO0FBSTdCLE1BQWEsZ0JBQWlCLFNBQVEseUJBQVc7SUFHL0MsWUFBWSxXQUFpQztRQUMzQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbkIsSUFBSSxDQUFDLEtBQUssR0FBRywwQkFBZSxDQUFDLElBQUksQ0FBQztJQUNwQyxDQUFDO0lBRUQsSUFBSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFFRCxJQUFJLFlBQVksQ0FBQyxPQUFlO1FBQzlCLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxDQUFDO0lBQy9CLENBQUM7SUFFRCxZQUFZO1FBQ1YsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN2QixNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFDOUMsQ0FBQztRQUNELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtZQUMvQyxNQUFNLElBQUksR0FBRyxlQUFLLENBQUMsb0JBQW9CLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDckYsT0FBTztnQkFDTCxFQUFFLEVBQUUsSUFBSSxDQUFDLFlBQVk7Z0JBQ3JCLEtBQUssRUFBRSxLQUFLO2dCQUNaLElBQUk7YUFDTCxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsTUFBTTtRQUNKLE1BQU0sSUFB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QUMsQ0FBQztnQkFFNUYsdUVBQXVFO2dCQUN2RSxJQUFJLFFBQVEsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLG9CQUFTLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztvQkFDM0QsSUFBSSxDQUFDLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsb0JBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7Z0JBQzdGLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxNQUFNLElBQUksa0NBQXVCLENBQUMsc0NBQXNDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZGLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUE3RkQsNENBNkZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHsgU2VjcDI1NmsxLCBUcmFuc2FjdGlvbiBhcyBWZXRUcmFuc2FjdGlvbiB9IGZyb20gJ0B2ZWNoYWluL3Nkay1jb3JlJztcblxuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IsIFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMnO1xuXG5pbXBvcnQgeyBWZXRUcmFuc2FjdGlvbkRhdGEgfSBmcm9tICcuLi9pZmFjZSc7XG5cbmV4cG9ydCBjbGFzcyBUb2tlblRyYW5zYWN0aW9uIGV4dGVuZHMgVHJhbnNhY3Rpb24ge1xuICBwcml2YXRlIF90b2tlbkFkZHJlc3M6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihfY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihfY29pbkNvbmZpZyk7XG4gICAgdGhpcy5fdHlwZSA9IFRyYW5zYWN0aW9uVHlwZS5TZW5kO1xuICB9XG5cbiAgZ2V0IHRva2VuQWRkcmVzcygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl90b2tlbkFkZHJlc3M7XG4gIH1cblxuICBzZXQgdG9rZW5BZGRyZXNzKGFkZHJlc3M6IHN0cmluZykge1xuICAgIHRoaXMuX3Rva2VuQWRkcmVzcyA9IGFkZHJlc3M7XG4gIH1cblxuICBidWlsZENsYXVzZXMoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnRva2VuQWRkcmVzcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUb2tlbiBhZGRyZXNzIGlzIG5vdCBzZXQnKTtcbiAgICB9XG4gICAgdGhpcy5jbGF1c2VzID0gdGhpcy5yZWNpcGllbnRzLm1hcCgocmVjaXBpZW50KSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0gdXRpbHMuZ2V0VHJhbnNmZXJUb2tlbkRhdGEocmVjaXBpZW50LmFkZHJlc3MsIFN0cmluZyhyZWNpcGllbnQuYW1vdW50KSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0bzogdGhpcy50b2tlbkFkZHJlc3MsXG4gICAgICAgIHZhbHVlOiAnMHgwJyxcbiAgICAgICAgZGF0YSxcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICB0b0pzb24oKTogVmV0VHJhbnNhY3Rpb25EYXRhIHtcbiAgICBjb25zdCBqc29uOiBWZXRUcmFuc2FjdGlvbkRhdGEgPSB7XG4gICAgICBpZDogdGhpcy5pZCxcbiAgICAgIGNoYWluVGFnOiB0aGlzLmNoYWluVGFnLFxuICAgICAgYmxvY2tSZWY6IHRoaXMuYmxvY2tSZWYsXG4gICAgICBleHBpcmF0aW9uOiB0aGlzLmV4cGlyYXRpb24sXG4gICAgICByZWNpcGllbnRzOiB0aGlzLnJlY2lwaWVudHMsXG4gICAgICBnYXNQcmljZUNvZWY6IHRoaXMuZ2FzUHJpY2VDb2VmLFxuICAgICAgZ2FzOiB0aGlzLmdhcyxcbiAgICAgIGRlcGVuZHNPbjogdGhpcy5kZXBlbmRzT24sXG4gICAgICBub25jZTogdGhpcy5ub25jZSxcbiAgICAgIHNlbmRlcjogdGhpcy5zZW5kZXIsXG4gICAgICBmZWVQYXllcjogdGhpcy5mZWVQYXllckFkZHJlc3MsXG4gICAgICB0b2tlbkFkZHJlc3M6IHRoaXMudG9rZW5BZGRyZXNzLFxuICAgIH07XG5cbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG4gIGZyb21EZXNlcmlhbGl6ZWRTaWduZWRUcmFuc2FjdGlvbihzaWduZWRUeDogVmV0VHJhbnNhY3Rpb24pOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgaWYgKCFzaWduZWRUeCB8fCAhc2lnbmVkVHguYm9keSkge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgdHJhbnNhY3Rpb246IG1pc3NpbmcgdHJhbnNhY3Rpb24gYm9keScpO1xuICAgICAgfVxuXG4gICAgICAvLyBTdG9yZSB0aGUgcmF3IHRyYW5zYWN0aW9uXG4gICAgICB0aGlzLnJhd1RyYW5zYWN0aW9uID0gc2lnbmVkVHg7XG5cbiAgICAgIC8vIFNldCB0cmFuc2FjdGlvbiBib2R5IHByb3BlcnRpZXNcbiAgICAgIGNvbnN0IGJvZHkgPSBzaWduZWRUeC5ib2R5O1xuICAgICAgdGhpcy5jaGFpblRhZyA9IGJvZHkuY2hhaW5UYWc7XG4gICAgICB0aGlzLmJsb2NrUmVmID0gYm9keS5ibG9ja1JlZjtcbiAgICAgIHRoaXMuZXhwaXJhdGlvbiA9IGJvZHkuZXhwaXJhdGlvbjtcbiAgICAgIHRoaXMuY2xhdXNlcyA9IGJvZHkuY2xhdXNlcztcbiAgICAgIHRoaXMuZ2FzUHJpY2VDb2VmID0gdHlwZW9mIGJvZHkuZ2FzUHJpY2VDb2VmID09PSAnbnVtYmVyJyA/IGJvZHkuZ2FzUHJpY2VDb2VmIDogMTI4O1xuICAgICAgdGhpcy5nYXMgPSBOdW1iZXIoYm9keS5nYXMpO1xuICAgICAgdGhpcy5kZXBlbmRzT24gPSBib2R5LmRlcGVuZHNPbjtcbiAgICAgIHRoaXMubm9uY2UgPSBTdHJpbmcoYm9keS5ub25jZSk7XG4gICAgICAvLyBTZXQgcmVjaXBpZW50cyBmcm9tIGNsYXVzZXNcbiAgICAgIGFzc2VydChib2R5LmNsYXVzZXNbMF0udG8sICd0b2tlbiBhZGRyZXNzIG5vdCBmb3VuZCBpbiB0aGUgY2xhdXNlcycpO1xuICAgICAgdGhpcy50b2tlbkFkZHJlc3MgPSBib2R5LmNsYXVzZXNbMF0udG87XG4gICAgICB0aGlzLnJlY2lwaWVudHMgPSBib2R5LmNsYXVzZXMubWFwKChjbGF1c2UpID0+IHV0aWxzLmRlY29kZVRyYW5zZmVyVG9rZW5EYXRhKGNsYXVzZS5kYXRhKSk7XG4gICAgICB0aGlzLmxvYWRJbnB1dHNBbmRPdXRwdXRzKCk7XG5cbiAgICAgIC8vIFNldCBzZW5kZXIgYWRkcmVzc1xuICAgICAgaWYgKHNpZ25lZFR4LnNpZ25hdHVyZSAmJiBzaWduZWRUeC5vcmlnaW4pIHtcbiAgICAgICAgdGhpcy5zZW5kZXIgPSBzaWduZWRUeC5vcmlnaW4udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgfVxuXG4gICAgICAvLyBTZXQgc2lnbmF0dXJlcyBpZiBwcmVzZW50XG4gICAgICBpZiAoc2lnbmVkVHguc2lnbmF0dXJlKSB7XG4gICAgICAgIC8vIEZpcnN0IHNpZ25hdHVyZSBpcyBzZW5kZXIncyBzaWduYXR1cmVcbiAgICAgICAgdGhpcy5zZW5kZXJTaWduYXR1cmUgPSBCdWZmZXIuZnJvbShzaWduZWRUeC5zaWduYXR1cmUuc2xpY2UoMCwgU2VjcDI1NmsxLlNJR05BVFVSRV9MRU5HVEgpKTtcblxuICAgICAgICAvLyBJZiB0aGVyZSdzIGFkZGl0aW9uYWwgc2lnbmF0dXJlIGRhdGEsIGl0J3MgdGhlIGZlZSBwYXllcidzIHNpZ25hdHVyZVxuICAgICAgICBpZiAoc2lnbmVkVHguc2lnbmF0dXJlLmxlbmd0aCA+IFNlY3AyNTZrMS5TSUdOQVRVUkVfTEVOR1RIKSB7XG4gICAgICAgICAgdGhpcy5mZWVQYXllclNpZ25hdHVyZSA9IEJ1ZmZlci5mcm9tKHNpZ25lZFR4LnNpZ25hdHVyZS5zbGljZShTZWNwMjU2azEuU0lHTkFUVVJFX0xFTkdUSCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKGBGYWlsZWQgdG8gZGVzZXJpYWxpemUgdHJhbnNhY3Rpb246ICR7ZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -1,28 +1,17 @@
1
- import { BaseTransaction, TransactionType, TransactionRecipient, PublicKey } from '@bitgo-beta/sdk-core';
1
+ import { BaseTransaction, TransactionType, TransactionRecipient } from '@bitgo-beta/sdk-core';
2
2
  import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
3
3
  import { TransactionClause, Transaction as VetTransaction } from '@vechain/sdk-core';
4
- import { VetTransactionExplanation } from '../iface';
5
- export interface VetTransactionData {
6
- id: string;
7
- chainTag: number;
8
- blockRef: string;
9
- expiration: number;
10
- gasPriceCoef: number;
11
- gas: number;
12
- dependsOn: string | null;
13
- nonce: number;
14
- sender: string;
15
- feePayer: string;
16
- recipients: TransactionRecipient[];
17
- }
4
+ import { VetTransactionExplanation, VetTransactionData } from '../iface';
18
5
  export declare class Transaction extends BaseTransaction {
19
6
  protected _rawTransaction: VetTransaction;
20
7
  protected _type: TransactionType;
21
8
  protected _recipients: TransactionRecipient[];
9
+ protected _clauses: TransactionClause[];
10
+ protected _contract: string;
11
+ protected _transactionData: string;
22
12
  private _chainTag;
23
13
  private _blockRef;
24
14
  private _expiration;
25
- private _clauses;
26
15
  private _gasPriceCoef;
27
16
  private _gas;
28
17
  private _dependsOn;
@@ -31,9 +20,7 @@ export declare class Transaction extends BaseTransaction {
31
20
  private _senderSignature;
32
21
  private _feePayerAddress;
33
22
  private _feePayerSignature;
34
- private _feePayerPubKey;
35
- static EMPTY_PUBLIC_KEY: Buffer<ArrayBuffer>;
36
- static EMPTY_SIGNATURE: Buffer<ArrayBuffer>;
23
+ private _isRecovery;
37
24
  constructor(_coinConfig: Readonly<CoinConfig>);
38
25
  get id(): string;
39
26
  get rawTransaction(): VetTransaction;
@@ -46,7 +33,7 @@ export declare class Transaction extends BaseTransaction {
46
33
  set senderSignature(sig: Buffer);
47
34
  get feePayerAddress(): string;
48
35
  set feePayerAddress(address: string);
49
- get feePayerSignature(): Uint8Array;
36
+ get feePayerSignature(): Uint8Array | undefined;
50
37
  set feePayerSignature(sig: Buffer);
51
38
  get chainTag(): number;
52
39
  set chainTag(tag: number);
@@ -64,10 +51,14 @@ export declare class Transaction extends BaseTransaction {
64
51
  set gas(g: number);
65
52
  get dependsOn(): string | null;
66
53
  set dependsOn(dep: string | null);
67
- get nonce(): number;
68
- set nonce(n: number);
69
- get feePayerPubKey(): PublicKey;
70
- set feePayerPubKey(pubKey: PublicKey);
54
+ get nonce(): string;
55
+ set nonce(n: string);
56
+ get contract(): string;
57
+ set contract(address: string);
58
+ get transactionData(): string;
59
+ set transactionData(transactionData: string);
60
+ get isRecovery(): boolean;
61
+ set isRecovery(isRecovery: boolean);
71
62
  /**
72
63
  * Get all signatures associated with this transaction
73
64
  * Required by BaseTransaction
@@ -95,14 +86,13 @@ export declare class Transaction extends BaseTransaction {
95
86
  */
96
87
  fromDeserializedSignedTransaction(signedTx: VetTransaction): void;
97
88
  addSenderSignature(signature: Buffer): void;
98
- getFeePayerPubKey(): string;
99
- addFeePayerSignature(publicKey: PublicKey, signature: Buffer): void;
89
+ addFeePayerSignature(signature: Buffer): void;
100
90
  build(): Promise<void>;
101
91
  /**
102
92
  * Sets the transaction ID from the raw transaction if it is signed
103
- * @private
93
+ * @protected
104
94
  */
105
- private generateTxnId;
95
+ protected generateTxnIdAndSetSender(): void;
106
96
  protected buildRawTransaction(): Promise<void>;
107
97
  loadInputsAndOutputs(): void;
108
98
  fromRawTransaction(rawTransaction: string): void;