Skip to content

Commit 91566e4

Browse files
author
Greg S
committed
PR #101: fixed CreateTransactionFromDTO maxFee fields ; finalized getTransactionEffectiveFee implementation
1 parent 4896b41 commit 91566e4

File tree

2 files changed

+49
-42
lines changed

2 files changed

+49
-42
lines changed

src/infrastructure/TransactionHttp.ts

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import {SignedTransaction} from '../model/transaction/SignedTransaction';
2525
import { SyncAnnounce } from '../model/transaction/SyncAnnounce';
2626
import {Transaction} from '../model/transaction/Transaction';
2727
import {TransactionAnnounceResponse} from '../model/transaction/TransactionAnnounceResponse';
28+
import {TransactionInfo} from '../model/transaction/TransactionInfo';
2829
import {TransactionStatus} from '../model/transaction/TransactionStatus';
2930
import {TransactionType} from '../model/transaction/TransactionType';
3031
import {UInt64} from '../model/UInt64';
@@ -205,15 +206,21 @@ export class TransactionHttp extends Http implements TransactionRepository {
205206
*/
206207
public getTransactionEffectiveFee(transactionId: string): Observable<number> {
207208
return observableFrom(this.transactionRoutesApi.getTransaction(transactionId)).pipe(
208-
mergeMap((transactionDTO) => observableFrom(
209-
this.blockchainRoutesApi.getBlockByHeight(transactionDTO.meta.height)).pipe(
209+
mergeMap((transactionDTO) => {
210+
// parse transaction to take advantage of `size` getter overload
211+
const transaction = CreateTransactionFromDTO(transactionDTO);
212+
const uintHeight = (transaction.transactionInfo as TransactionInfo).height;
213+
214+
// now read block details
215+
return observableFrom(this.blockchainRoutesApi.getBlockByHeight(uintHeight.compact())).pipe(
210216
map((blockDTO) => {
211-
// parse transaction for call to `size` overload
212-
const transaction = CreateTransactionFromDTO(transactionDTO);
213217

214218
// @see https://nemtech.github.io/concepts/transaction.html#fees
215219
// effective_fee = feeMultiplier x transaction::size
216220
return blockDTO.block.feeMultiplier * transaction.size;
217-
}))));
221+
}));
222+
}), catchError((err) => {
223+
return observableThrowError(err);
224+
}));
218225
}
219226
}

src/infrastructure/transaction/CreateTransactionFromDTO.ts

Lines changed: 37 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ const CreateStandaloneTransactionFromDTO = (transactionDTO, transactionInfo): Tr
122122
extractNetworkType(transactionDTO.version),
123123
extractTransactionVersion(transactionDTO.version),
124124
Deadline.createFromDTO(transactionDTO.deadline),
125-
new UInt64(transactionDTO.maxFee || [0, 0]),
125+
UInt64.fromUint(transactionDTO.maxFee || 0),
126126
extractRecipient(transactionDTO.recipient),
127127
extractMosaics(transactionDTO.mosaics),
128128
transactionDTO.message !== undefined ?
@@ -136,7 +136,7 @@ const CreateStandaloneTransactionFromDTO = (transactionDTO, transactionInfo): Tr
136136
extractNetworkType(transactionDTO.version),
137137
extractTransactionVersion(transactionDTO.version),
138138
Deadline.createFromDTO(transactionDTO.deadline),
139-
new UInt64(transactionDTO.maxFee || [0, 0]),
139+
UInt64.fromUint(transactionDTO.maxFee || 0),
140140
transactionDTO.namespaceType,
141141
transactionDTO.name,
142142
new NamespaceId(transactionDTO.namespaceId),
@@ -151,37 +151,37 @@ const CreateStandaloneTransactionFromDTO = (transactionDTO, transactionInfo): Tr
151151
extractNetworkType(transactionDTO.version),
152152
extractTransactionVersion(transactionDTO.version),
153153
Deadline.createFromDTO(transactionDTO.deadline),
154-
new UInt64(transactionDTO.maxFee || [0, 0]),
154+
UInt64.fromUint(transactionDTO.maxFee || 0),
155155
transactionDTO.nonce,
156156
new MosaicId(transactionDTO.mosaicId),
157157
new MosaicProperties(
158158
new UInt64(transactionDTO.properties[0].value),
159159
(new UInt64(transactionDTO.properties[1].value)).compact(),
160-
new UInt64(transactionDTO.properties.length === 3 ? transactionDTO.properties[2].value : [0, 0]),
161-
),
162-
transactionDTO.signature,
163-
PublicAccount.createFromPublicKey(transactionDTO.signer, extractNetworkType(transactionDTO.version)),
164-
transactionInfo,
165-
);
166-
} else if (transactionDTO.type === TransactionType.MOSAIC_SUPPLY_CHANGE) {
167-
return new MosaicSupplyChangeTransaction(
168-
extractNetworkType(transactionDTO.version),
169-
extractTransactionVersion(transactionDTO.version),
170-
Deadline.createFromDTO(transactionDTO.deadline),
171-
new UInt64(transactionDTO.maxFee || [0, 0]),
172-
new MosaicId(transactionDTO.mosaicId),
173-
transactionDTO.direction,
174-
new UInt64(transactionDTO.delta),
175-
transactionDTO.signature,
176-
PublicAccount.createFromPublicKey(transactionDTO.signer, extractNetworkType(transactionDTO.version)),
177-
transactionInfo,
178-
);
179-
} else if (transactionDTO.type === TransactionType.MODIFY_MULTISIG_ACCOUNT) {
180-
return new ModifyMultisigAccountTransaction(
181-
extractNetworkType(transactionDTO.version),
182-
extractTransactionVersion(transactionDTO.version),
183-
Deadline.createFromDTO(transactionDTO.deadline),
184-
new UInt64(transactionDTO.maxFee || [0, 0]),
160+
new UInt64(transactionDTO.properties.length === 3 ? transactionDTO.properties[2].value : [0, 0]),
161+
),
162+
transactionDTO.signature,
163+
PublicAccount.createFromPublicKey(transactionDTO.signer, extractNetworkType(transactionDTO.version)),
164+
transactionInfo,
165+
);
166+
} else if (transactionDTO.type === TransactionType.MOSAIC_SUPPLY_CHANGE) {
167+
return new MosaicSupplyChangeTransaction(
168+
extractNetworkType(transactionDTO.version),
169+
extractTransactionVersion(transactionDTO.version),
170+
Deadline.createFromDTO(transactionDTO.deadline),
171+
UInt64.fromUint(transactionDTO.maxFee || 0),
172+
new MosaicId(transactionDTO.mosaicId),
173+
transactionDTO.direction,
174+
new UInt64(transactionDTO.delta),
175+
transactionDTO.signature,
176+
PublicAccount.createFromPublicKey(transactionDTO.signer, extractNetworkType(transactionDTO.version)),
177+
transactionInfo,
178+
);
179+
} else if (transactionDTO.type === TransactionType.MODIFY_MULTISIG_ACCOUNT) {
180+
return new ModifyMultisigAccountTransaction(
181+
extractNetworkType(transactionDTO.version),
182+
extractTransactionVersion(transactionDTO.version),
183+
Deadline.createFromDTO(transactionDTO.deadline),
184+
UInt64.fromUint(transactionDTO.maxFee || 0),
185185
transactionDTO.minApprovalDelta,
186186
transactionDTO.minRemovalDelta,
187187
transactionDTO.modifications ? transactionDTO.modifications.map((modificationDTO) => new MultisigCosignatoryModification(
@@ -198,7 +198,7 @@ const CreateStandaloneTransactionFromDTO = (transactionDTO, transactionInfo): Tr
198198
networkType,
199199
extractTransactionVersion(transactionDTO.version),
200200
Deadline.createFromDTO(transactionDTO.deadline),
201-
new UInt64(transactionDTO.maxFee || [0, 0]),
201+
UInt64.fromUint(transactionDTO.maxFee || 0),
202202
new Mosaic(new MosaicId(transactionDTO.mosaicId), new UInt64(transactionDTO.amount)),
203203
new UInt64(transactionDTO.duration),
204204
new SignedTransaction('', transactionDTO.hash, '', TransactionType.AGGREGATE_BONDED, networkType),
@@ -211,7 +211,7 @@ const CreateStandaloneTransactionFromDTO = (transactionDTO, transactionInfo): Tr
211211
extractNetworkType(transactionDTO.version),
212212
extractTransactionVersion(transactionDTO.version),
213213
Deadline.createFromDTO(transactionDTO.deadline),
214-
new UInt64(transactionDTO.maxFee || [0, 0]),
214+
UInt64.fromUint(transactionDTO.maxFee || 0),
215215
new Mosaic(new MosaicId(transactionDTO.mosaicId), new UInt64(transactionDTO.amount)),
216216
new UInt64(transactionDTO.duration),
217217
transactionDTO.hashAlgorithm,
@@ -226,7 +226,7 @@ const CreateStandaloneTransactionFromDTO = (transactionDTO, transactionInfo): Tr
226226
extractNetworkType(transactionDTO.version),
227227
extractTransactionVersion(transactionDTO.version),
228228
Deadline.createFromDTO(transactionDTO.deadline),
229-
new UInt64(transactionDTO.maxFee || [0, 0]),
229+
UInt64.fromUint(transactionDTO.maxFee || 0),
230230
transactionDTO.hashAlgorithm,
231231
transactionDTO.secret,
232232
transactionDTO.proof,
@@ -239,7 +239,7 @@ const CreateStandaloneTransactionFromDTO = (transactionDTO, transactionInfo): Tr
239239
extractNetworkType(transactionDTO.version),
240240
extractTransactionVersion(transactionDTO.version),
241241
Deadline.createFromDTO(transactionDTO.deadline),
242-
new UInt64(transactionDTO.maxFee || [0, 0]),
242+
UInt64.fromUint(transactionDTO.maxFee || 0),
243243
transactionDTO.aliasAction,
244244
new NamespaceId(transactionDTO.namespaceId),
245245
new MosaicId(transactionDTO.mosaicId),
@@ -252,7 +252,7 @@ const CreateStandaloneTransactionFromDTO = (transactionDTO, transactionInfo): Tr
252252
extractNetworkType(transactionDTO.version),
253253
extractTransactionVersion(transactionDTO.version),
254254
Deadline.createFromDTO(transactionDTO.deadline),
255-
new UInt64(transactionDTO.maxFee || [0, 0]),
255+
UInt64.fromUint(transactionDTO.maxFee || 0),
256256
transactionDTO.aliasAction,
257257
new NamespaceId(transactionDTO.namespaceId),
258258
extractRecipient(transactionDTO.address) as Address,
@@ -265,7 +265,7 @@ const CreateStandaloneTransactionFromDTO = (transactionDTO, transactionInfo): Tr
265265
extractNetworkType(transactionDTO.version),
266266
extractTransactionVersion(transactionDTO.version),
267267
Deadline.createFromDTO(transactionDTO.deadline),
268-
new UInt64(transactionDTO.maxFee || [0, 0]),
268+
UInt64.fromUint(transactionDTO.maxFee || 0),
269269
transactionDTO.propertyType,
270270
transactionDTO.modifications ? transactionDTO.modifications.map((modificationDTO) => new AccountPropertyModification(
271271
modificationDTO.modificationType,
@@ -280,7 +280,7 @@ const CreateStandaloneTransactionFromDTO = (transactionDTO, transactionInfo): Tr
280280
extractNetworkType(transactionDTO.version),
281281
extractTransactionVersion(transactionDTO.version),
282282
Deadline.createFromDTO(transactionDTO.deadline),
283-
new UInt64(transactionDTO.maxFee || [0, 0]),
283+
UInt64.fromUint(transactionDTO.maxFee || 0),
284284
transactionDTO.propertyType,
285285
transactionDTO.modifications ? transactionDTO.modifications.map((modificationDTO) => new AccountPropertyModification(
286286
modificationDTO.modificationType,
@@ -295,7 +295,7 @@ const CreateStandaloneTransactionFromDTO = (transactionDTO, transactionInfo): Tr
295295
extractNetworkType(transactionDTO.version),
296296
extractTransactionVersion(transactionDTO.version),
297297
Deadline.createFromDTO(transactionDTO.deadline),
298-
new UInt64(transactionDTO.maxFee || [0, 0]),
298+
UInt64.fromUint(transactionDTO.maxFee || 0),
299299
transactionDTO.propertyType,
300300
transactionDTO.modifications ? transactionDTO.modifications.map((modificationDTO) => new AccountPropertyModification(
301301
modificationDTO.modificationType,
@@ -310,7 +310,7 @@ const CreateStandaloneTransactionFromDTO = (transactionDTO, transactionInfo): Tr
310310
extractNetworkType(transactionDTO.version),
311311
extractTransactionVersion(transactionDTO.version),
312312
Deadline.createFromDTO(transactionDTO.deadline),
313-
new UInt64(transactionDTO.maxFee || [0, 0]),
313+
UInt64.fromUint(transactionDTO.maxFee || 0),
314314
transactionDTO.remoteAccountKey,
315315
transactionDTO.linkAction,
316316
transactionDTO.signature,

0 commit comments

Comments
 (0)