Skip to content

Commit 7aa54cb

Browse files
committed
added #357 transaction service for resolving alias
1 parent df4e16e commit 7aa54cb

24 files changed

+601
-13
lines changed

src/infrastructure/transaction/CreateTransactionFromDTO.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ const CreateStandaloneTransactionFromDTO = (transactionDTO, transactionInfo): Tr
175175
transactionDTO.version,
176176
Deadline.createFromDTO(transactionDTO.deadline),
177177
UInt64.fromNumericString(transactionDTO.maxFee || '0'),
178-
new MosaicId(transactionDTO.mosaicId),
178+
UnresolvedMapping.toUnresolvedMosaic(transactionDTO.mosaicId),
179179
transactionDTO.action,
180180
UInt64.fromNumericString(transactionDTO.delta),
181181
transactionDTO.signature,

src/model/transaction/AccountAddressRestrictionTransaction.ts

Lines changed: 42 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,10 @@
1414
* limitations under the License.
1515
*/
1616

17-
import { Convert, RawAddress } from '../../core/format';
17+
import { combineLatest, from, of } from 'rxjs';
18+
import { Observable } from 'rxjs/internal/Observable';
19+
import { mergeMap, toArray } from 'rxjs/operators';
20+
import { Convert } from '../../core/format';
1821
import { UnresolvedMapping } from '../../core/utils/UnresolvedMapping';
1922
import { AccountAddressRestrictionTransactionBuilder } from '../../infrastructure/catbuffer/AccountAddressRestrictionTransactionBuilder';
2023
import { AmountDto } from '../../infrastructure/catbuffer/AmountDto';
@@ -25,13 +28,13 @@ import { KeyDto } from '../../infrastructure/catbuffer/KeyDto';
2528
import { SignatureDto } from '../../infrastructure/catbuffer/SignatureDto';
2629
import { TimestampDto } from '../../infrastructure/catbuffer/TimestampDto';
2730
import { UnresolvedAddressDto } from '../../infrastructure/catbuffer/UnresolvedAddressDto';
31+
import { NamespaceHttp } from '../../infrastructure/NamespaceHttp';
2832
import { Address } from '../account/Address';
2933
import { PublicAccount } from '../account/PublicAccount';
3034
import { NetworkType } from '../blockchain/NetworkType';
3135
import { NamespaceId } from '../namespace/NamespaceId';
3236
import { AccountRestrictionFlags } from '../restriction/AccountRestrictionType';
3337
import { UInt64 } from '../UInt64';
34-
import { AccountRestrictionModification } from './AccountRestrictionModification';
3538
import { Deadline } from './Deadline';
3639
import { InnerTransaction } from './InnerTransaction';
3740
import { Transaction } from './Transaction';
@@ -190,4 +193,41 @@ export class AccountAddressRestrictionTransaction extends Transaction {
190193
);
191194
return transactionBuilder.serialize();
192195
}
196+
197+
/**
198+
* @internal
199+
* @param namespaceHttp NamespaceHttp
200+
* @returns {AccountAddressRestrictionTransaction}
201+
*/
202+
resolveAliases(namespaceHttp: NamespaceHttp): Observable<AccountAddressRestrictionTransaction> {
203+
const restrictionAdditions = from(this.restrictionAdditions).pipe(
204+
mergeMap((addition) => addition instanceof NamespaceId ?
205+
namespaceHttp.getLinkedAddress(addition) :
206+
of(addition),
207+
),
208+
toArray(),
209+
);
210+
const restrictionDeletions = from(this.restrictionDeletions).pipe(
211+
mergeMap((deletion) => deletion instanceof NamespaceId ?
212+
namespaceHttp.getLinkedAddress(deletion) :
213+
of(deletion),
214+
),
215+
toArray(),
216+
);
217+
218+
return combineLatest(restrictionAdditions, restrictionDeletions, (additions, deletions) => {
219+
return new AccountAddressRestrictionTransaction(
220+
this.networkType,
221+
this.version,
222+
this.deadline,
223+
this.maxFee,
224+
this.restrictionFlags,
225+
additions,
226+
deletions,
227+
this.signature,
228+
this.signer,
229+
this.transactionInfo,
230+
);
231+
});
232+
}
193233
}

src/model/transaction/AccountLinkTransaction.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,16 @@
1414
* limitations under the License.
1515
*/
1616

17+
import { Observable } from 'rxjs/internal/Observable';
18+
import { of } from 'rxjs/internal/observable/of';
1719
import { Convert } from '../../core/format';
1820
import { AccountLinkTransactionBuilder } from '../../infrastructure/catbuffer/AccountLinkTransactionBuilder';
1921
import { AmountDto } from '../../infrastructure/catbuffer/AmountDto';
2022
import { EmbeddedAccountLinkTransactionBuilder } from '../../infrastructure/catbuffer/EmbeddedAccountLinkTransactionBuilder';
2123
import { KeyDto } from '../../infrastructure/catbuffer/KeyDto';
2224
import { SignatureDto } from '../../infrastructure/catbuffer/SignatureDto';
2325
import { TimestampDto } from '../../infrastructure/catbuffer/TimestampDto';
26+
import { NamespaceHttp } from '../../infrastructure/NamespaceHttp';
2427
import { PublicAccount } from '../account/PublicAccount';
2528
import { NetworkType } from '../blockchain/NetworkType';
2629
import { UInt64 } from '../UInt64';
@@ -163,4 +166,13 @@ export class AccountLinkTransaction extends Transaction {
163166
);
164167
return transactionBuilder.serialize();
165168
}
169+
170+
/**
171+
* @internal
172+
* @param namespaceHttp NamespaceHttp
173+
* @returns {AccountLinkTransaction}
174+
*/
175+
resolveAliases(namespaceHttp: NamespaceHttp): Observable<AccountLinkTransaction> {
176+
return of(this);
177+
}
166178
}

src/model/transaction/AccountMetadataTransaction.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,16 @@
1414
* limitations under the License.
1515
*/
1616

17+
import { Observable } from 'rxjs/internal/Observable';
18+
import { of } from 'rxjs/internal/observable/of';
1719
import { Convert } from '../../core/format';
1820
import { AccountMetadataTransactionBuilder } from '../../infrastructure/catbuffer/AccountMetadataTransactionBuilder';
1921
import { AmountDto } from '../../infrastructure/catbuffer/AmountDto';
2022
import { EmbeddedAccountMetadataTransactionBuilder } from '../../infrastructure/catbuffer/EmbeddedAccountMetadataTransactionBuilder';
2123
import { KeyDto } from '../../infrastructure/catbuffer/KeyDto';
2224
import { SignatureDto } from '../../infrastructure/catbuffer/SignatureDto';
2325
import { TimestampDto } from '../../infrastructure/catbuffer/TimestampDto';
26+
import { NamespaceHttp } from '../../infrastructure/NamespaceHttp';
2427
import { PublicAccount } from '../account/PublicAccount';
2528
import { NetworkType } from '../blockchain/NetworkType';
2629
import { UInt64 } from '../UInt64';
@@ -193,4 +196,13 @@ export class AccountMetadataTransaction extends Transaction {
193196
);
194197
return transactionBuilder.serialize();
195198
}
199+
200+
/**
201+
* @internal
202+
* @param namespaceHttp NamespaceHttp
203+
* @returns {AccountMetadataTransaction}
204+
*/
205+
resolveAliases(namespaceHttp: NamespaceHttp): Observable<AccountMetadataTransaction> {
206+
return of(this);
207+
}
196208
}

src/model/transaction/AccountMosaicRestrictionTransaction.ts

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@
1414
* limitations under the License.
1515
*/
1616

17+
import { combineLatest, from, of } from 'rxjs';
18+
import { Observable } from 'rxjs/internal/Observable';
19+
import { mergeMap, toArray } from 'rxjs/operators';
1720
import { Convert } from '../../core/format';
1821
import { UnresolvedMapping } from '../../core/utils/UnresolvedMapping';
1922
import { AccountMosaicRestrictionTransactionBuilder } from '../../infrastructure/catbuffer/AccountMosaicRestrictionTransactionBuilder';
@@ -25,6 +28,7 @@ import { KeyDto } from '../../infrastructure/catbuffer/KeyDto';
2528
import { SignatureDto } from '../../infrastructure/catbuffer/SignatureDto';
2629
import { TimestampDto } from '../../infrastructure/catbuffer/TimestampDto';
2730
import { UnresolvedMosaicIdDto } from '../../infrastructure/catbuffer/UnresolvedMosaicIdDto';
31+
import { NamespaceHttp } from '../../infrastructure/NamespaceHttp';
2832
import { PublicAccount } from '../account/PublicAccount';
2933
import { NetworkType } from '../blockchain/NetworkType';
3034
import { MosaicId } from '../mosaic/MosaicId';
@@ -189,4 +193,41 @@ export class AccountMosaicRestrictionTransaction extends Transaction {
189193
);
190194
return transactionBuilder.serialize();
191195
}
196+
197+
/**
198+
* @internal
199+
* @param namespaceHttp NamespaceHttp
200+
* @returns {AccountMosaicRestrictionTransaction}
201+
*/
202+
resolveAliases(namespaceHttp: NamespaceHttp): Observable<AccountMosaicRestrictionTransaction> {
203+
const restrictionAdditions = from(this.restrictionAdditions).pipe(
204+
mergeMap((addition) => addition instanceof NamespaceId ?
205+
namespaceHttp.getLinkedMosaicId(addition) :
206+
of(addition),
207+
),
208+
toArray(),
209+
);
210+
const restrictionDeletions = from(this.restrictionDeletions).pipe(
211+
mergeMap((deletion) => deletion instanceof NamespaceId ?
212+
namespaceHttp.getLinkedMosaicId(deletion) :
213+
of(deletion),
214+
),
215+
toArray(),
216+
);
217+
218+
return combineLatest(restrictionAdditions, restrictionDeletions, (additions, deletions) => {
219+
return new AccountMosaicRestrictionTransaction(
220+
this.networkType,
221+
this.version,
222+
this.deadline,
223+
this.maxFee,
224+
this.restrictionFlags,
225+
additions,
226+
deletions,
227+
this.signature,
228+
this.signer,
229+
this.transactionInfo,
230+
);
231+
});
232+
}
192233
}

src/model/transaction/AccountOperationRestrictionTransaction.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
* limitations under the License.
1515
*/
1616

17+
import { Observable } from 'rxjs/internal/Observable';
18+
import { of } from 'rxjs/internal/observable/of';
1719
import { Convert } from '../../core/format';
1820
import {
1921
AccountOperationRestrictionTransactionBuilder,
@@ -25,6 +27,7 @@ import {
2527
import { KeyDto } from '../../infrastructure/catbuffer/KeyDto';
2628
import { SignatureDto } from '../../infrastructure/catbuffer/SignatureDto';
2729
import { TimestampDto } from '../../infrastructure/catbuffer/TimestampDto';
30+
import { NamespaceHttp } from '../../infrastructure/NamespaceHttp';
2831
import { PublicAccount } from '../account/PublicAccount';
2932
import { NetworkType } from '../blockchain/NetworkType';
3033
import { AccountRestrictionFlags } from '../restriction/AccountRestrictionType';
@@ -174,4 +177,13 @@ export class AccountOperationRestrictionTransaction extends Transaction {
174177
);
175178
return transactionBuilder.serialize();
176179
}
180+
181+
/**
182+
* @internal
183+
* @param namespaceHttp NamespaceHttp
184+
* @returns {AccountOperationRestrictionTransaction}
185+
*/
186+
resolveAliases(namespaceHttp: NamespaceHttp): Observable<AccountOperationRestrictionTransaction> {
187+
return of(this);
188+
}
177189
}

src/model/transaction/AddressAliasTransaction.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
* limitations under the License.
1515
*/
1616

17+
import { Observable } from 'rxjs/internal/Observable';
18+
import { of } from 'rxjs/internal/observable/of';
1719
import { Convert, RawAddress } from '../../core/format';
1820
import { AddressAliasTransactionBuilder } from '../../infrastructure/catbuffer/AddressAliasTransactionBuilder';
1921
import { AddressDto } from '../../infrastructure/catbuffer/AddressDto';
@@ -23,6 +25,7 @@ import { KeyDto } from '../../infrastructure/catbuffer/KeyDto';
2325
import { NamespaceIdDto } from '../../infrastructure/catbuffer/NamespaceIdDto';
2426
import { SignatureDto } from '../../infrastructure/catbuffer/SignatureDto';
2527
import { TimestampDto } from '../../infrastructure/catbuffer/TimestampDto';
28+
import { NamespaceHttp } from '../../infrastructure/NamespaceHttp';
2629
import { Address } from '../account/Address';
2730
import { PublicAccount } from '../account/PublicAccount';
2831
import { NetworkType } from '../blockchain/NetworkType';
@@ -183,4 +186,13 @@ export class AddressAliasTransaction extends Transaction {
183186
);
184187
return transactionBuilder.serialize();
185188
}
189+
190+
/**
191+
* @internal
192+
* @param namespaceHttp NamespaceHttp
193+
* @returns {AddressAliasTransaction}
194+
*/
195+
resolveAliases(namespaceHttp: NamespaceHttp): Observable<AddressAliasTransaction> {
196+
return of(this);
197+
}
186198
}

src/model/transaction/AggregateTransaction.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
*/
1616

1717
import { sha3_256 } from 'js-sha3';
18+
import { Observable } from 'rxjs/internal/Observable';
1819
import {KeyPair, MerkleHashBuilder, SHA3Hasher, SignSchema} from '../../core/crypto';
1920
import {Convert, RawArray} from '../../core/format';
2021
import {AggregateBondedTransactionBuilder} from '../../infrastructure/catbuffer/AggregateBondedTransactionBuilder';
@@ -26,6 +27,7 @@ import { Hash256Dto } from '../../infrastructure/catbuffer/Hash256Dto';
2627
import {KeyDto} from '../../infrastructure/catbuffer/KeyDto';
2728
import {SignatureDto} from '../../infrastructure/catbuffer/SignatureDto';
2829
import {TimestampDto} from '../../infrastructure/catbuffer/TimestampDto';
30+
import { NamespaceHttp } from '../../infrastructure/NamespaceHttp';
2931
import {CreateTransactionFromPayload} from '../../infrastructure/transaction/CreateTransactionFromPayload';
3032
import {Account} from '../account/Account';
3133
import {PublicAccount} from '../account/PublicAccount';
@@ -400,4 +402,13 @@ export class AggregateTransaction extends Transaction {
400402
private getInnerTransactionPaddingSize(size: number, alignment: number): number {
401403
return 0 === size % alignment ? 0 : alignment - (size % alignment);
402404
}
405+
406+
/**
407+
* @internal
408+
* @param namespaceHttp NamespaceHttp
409+
* @returns {AggregateTransaction}
410+
*/
411+
resolveAliases(namespaceHttp: NamespaceHttp): Observable<AggregateTransaction> {
412+
throw new Error('Not implemented');
413+
}
403414
}

src/model/transaction/LockFundsTransaction.ts

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,10 @@
1414
* limitations under the License.
1515
*/
1616

17+
import { Observable } from 'rxjs/internal/Observable';
18+
import { of } from 'rxjs/internal/observable/of';
19+
import { map } from 'rxjs/internal/operators/map';
20+
import { mergeMap } from 'rxjs/internal/operators/mergeMap';
1721
import { Convert } from '../../core/format';
1822
import { AmountDto } from '../../infrastructure/catbuffer/AmountDto';
1923
import { BlockDurationDto } from '../../infrastructure/catbuffer/BlockDurationDto';
@@ -25,10 +29,12 @@ import { SignatureDto } from '../../infrastructure/catbuffer/SignatureDto';
2529
import { TimestampDto } from '../../infrastructure/catbuffer/TimestampDto';
2630
import { UnresolvedMosaicBuilder } from '../../infrastructure/catbuffer/UnresolvedMosaicBuilder';
2731
import { UnresolvedMosaicIdDto } from '../../infrastructure/catbuffer/UnresolvedMosaicIdDto';
32+
import { NamespaceHttp } from '../../infrastructure/NamespaceHttp';
2833
import { PublicAccount } from '../account/PublicAccount';
2934
import { NetworkType } from '../blockchain/NetworkType';
3035
import { Mosaic } from '../mosaic/Mosaic';
3136
import { MosaicId } from '../mosaic/MosaicId';
37+
import { NamespaceId } from '../namespace/NamespaceId';
3238
import { UInt64 } from '../UInt64';
3339
import { Deadline } from './Deadline';
3440
import { InnerTransaction } from './InnerTransaction';
@@ -50,6 +56,7 @@ export class LockFundsTransaction extends Transaction {
5056
* Aggregate bonded hash.
5157
*/
5258
public readonly hash: string;
59+
signedTransaction: SignedTransaction;
5360

5461
/**
5562
* Create a Lock funds transaction object
@@ -108,6 +115,7 @@ export class LockFundsTransaction extends Transaction {
108115
transactionInfo?: TransactionInfo) {
109116
super(TransactionType.LOCK, networkType, version, deadline, maxFee, signature, signer, transactionInfo);
110117
this.hash = signedTransaction.hash;
118+
this.signedTransaction = signedTransaction;
111119
if (signedTransaction.type !== TransactionType.AGGREGATE_BONDED) {
112120
throw new Error('Signed transaction must be Aggregate Bonded Transaction');
113121
}
@@ -200,4 +208,42 @@ export class LockFundsTransaction extends Transaction {
200208
);
201209
return transactionBuilder.serialize();
202210
}
211+
212+
/**
213+
* @internal
214+
* @param namespaceHttp NamespaceHttp
215+
* @returns {LockFundsTransaction}
216+
*/
217+
resolveAliases(namespaceHttp: NamespaceHttp): Observable<LockFundsTransaction> {
218+
return of(this.mosaic).pipe(
219+
mergeMap((mosaic) => mosaic.id instanceof NamespaceId ?
220+
namespaceHttp.getLinkedMosaicId(mosaic.id).pipe(
221+
map((mosaicId) => new LockFundsTransaction(
222+
this.networkType,
223+
this.version,
224+
this.deadline,
225+
this.maxFee,
226+
new Mosaic(mosaicId, mosaic.amount),
227+
this.duration,
228+
this.signedTransaction,
229+
this.signature,
230+
this.signer,
231+
this.transactionInfo,
232+
)),
233+
) :
234+
of(new LockFundsTransaction(
235+
this.networkType,
236+
this.version,
237+
this.deadline,
238+
this.maxFee,
239+
mosaic,
240+
this.duration,
241+
this.signedTransaction,
242+
this.signature,
243+
this.signer,
244+
this.transactionInfo,
245+
)),
246+
),
247+
);
248+
}
203249
}

0 commit comments

Comments
 (0)