Skip to content

Commit e0df5c2

Browse files
committed
Changed to resolve alias from receipts
1 parent ffc5581 commit e0df5c2

31 files changed

+657
-254
lines changed

e2e/service/TransactionService.spec.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,14 @@
1515
*/
1616

1717
import { assert } from 'chai';
18+
import { expect } from 'chai';
1819
import { Listener } from '../../src/infrastructure/Listener';
1920
import { NamespaceHttp } from '../../src/infrastructure/NamespaceHttp';
2021
import { TransactionHttp } from '../../src/infrastructure/TransactionHttp';
2122
import { Account } from '../../src/model/account/Account';
2223
import { NetworkType } from '../../src/model/blockchain/NetworkType';
2324
import { PlainMessage } from '../../src/model/message/PlainMessage';
24-
import { Mosaic, MosaicSupplyChangeAction, MosaicSupplyChangeTransaction, Address } from '../../src/model/model';
25+
import { Address, Mosaic, MosaicSupplyChangeAction, MosaicSupplyChangeTransaction } from '../../src/model/model';
2526
import { MosaicFlags } from '../../src/model/mosaic/MosaicFlags';
2627
import { MosaicId } from '../../src/model/mosaic/MosaicId';
2728
import { MosaicNonce } from '../../src/model/mosaic/MosaicNonce';
@@ -36,7 +37,6 @@ import { NamespaceRegistrationTransaction } from '../../src/model/transaction/Na
3637
import { TransferTransaction } from '../../src/model/transaction/TransferTransaction';
3738
import { UInt64 } from '../../src/model/UInt64';
3839
import { TransactionService } from '../../src/service/TransactionService';
39-
import { expect } from 'chai';
4040

4141
describe('TransactionService', () => {
4242
let account: Account;

src/core/utils/TransactionMapping.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ import { CreateTransactionFromDTO } from '../../infrastructure/transaction/Creat
1818
import { CreateTransactionFromPayload } from '../../infrastructure/transaction/CreateTransactionFromPayload';
1919
import { InnerTransaction } from '../../model/transaction/InnerTransaction';
2020
import { Transaction } from '../../model/transaction/Transaction';
21-
import { SignSchema } from '../crypto/SignSchema';
2221

2322
export class TransactionMapping {
2423

src/core/utils/UnresolvedMapping.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,11 @@
1414
* limitations under the License.
1515
*/
1616
import { Address } from '../../model/account/Address';
17+
import { NetworkType } from '../../model/blockchain/NetworkType';
1718
import { MosaicId } from '../../model/mosaic/MosaicId';
1819
import { NamespaceId } from '../../model/namespace/NamespaceId';
1920
import { Convert } from '../format/Convert';
2021
import { RawAddress } from '../format/RawAddress';
21-
import { NetworkType } from "../../model/blockchain/NetworkType";
2222

2323
/**
2424
* @internal

src/infrastructure/receipt/CreateReceiptFromDTO.ts

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

17+
import { UnresolvedMapping } from '../../core/utils/UnresolvedMapping';
1718
import { Address } from '../../model/account/Address';
1819
import {PublicAccount} from '../../model/account/PublicAccount';
1920
import {MosaicId} from '../../model/mosaic/MosaicId';
20-
import { AddressAlias } from '../../model/namespace/AddressAlias';
21-
import { AliasType } from '../../model/namespace/AliasType';
22-
import { MosaicAlias } from '../../model/namespace/MosaicAlias';
2321
import { NamespaceId } from '../../model/namespace/NamespaceId';
2422
import { ArtifactExpiryReceipt } from '../../model/receipt/ArtifactExpiryReceipt';
2523
import { BalanceChangeReceipt } from '../../model/receipt/BalanceChangeReceipt';
@@ -95,7 +93,7 @@ const createResolutionStatement = (statementDTO, resolutionType): ResolutionStat
9593
return new ResolutionStatement(
9694
ResolutionType.Address,
9795
UInt64.fromNumericString(statementDTO.height),
98-
Address.createFromEncoded(statementDTO.unresolved),
96+
extractUnresolvedAddress(statementDTO.unresolved),
9997
statementDTO.resolutionEntries.map((entry) => {
10098
return new ResolutionEntry(Address.createFromEncoded(entry.resolved),
10199
new ReceiptSource(entry.source.primaryId, entry.source.secondaryId));
@@ -105,7 +103,7 @@ const createResolutionStatement = (statementDTO, resolutionType): ResolutionStat
105103
return new ResolutionStatement(
106104
ResolutionType.Mosaic,
107105
UInt64.fromNumericString(statementDTO.height),
108-
new MosaicId(statementDTO.unresolved),
106+
UnresolvedMapping.toUnresolvedMosaic(statementDTO.unresolved),
109107
statementDTO.resolutionEntries.map((entry) => {
110108
return new ResolutionEntry(new MosaicId(entry.resolved),
111109
new ReceiptSource(entry.source.primaryId, entry.source.secondaryId));
@@ -197,6 +195,12 @@ const createInflationReceipt = (receiptDTO): Receipt => {
197195
);
198196
};
199197

198+
/**
199+
* @internal
200+
* @param receiptType receipt type
201+
* @param id Artifact id
202+
* @returns {MosaicId | NamespaceId}
203+
*/
200204
const extractArtifactId = (receiptType: ReceiptType, id: string): MosaicId | NamespaceId => {
201205
switch (receiptType) {
202206
case ReceiptType.Mosaic_Expired:
@@ -208,3 +212,21 @@ const extractArtifactId = (receiptType: ReceiptType, id: string): MosaicId | Nam
208212
throw new Error('Receipt type is not supported.');
209213
}
210214
};
215+
216+
/**
217+
* @interal
218+
* @param unresolvedAddress unresolved address
219+
* @returns {Address | NamespaceId}
220+
*/
221+
const extractUnresolvedAddress = (unresolvedAddress: any): Address | NamespaceId => {
222+
if (typeof unresolvedAddress === 'string') {
223+
return UnresolvedMapping.toUnresolvedAddress(unresolvedAddress);
224+
} else if (typeof unresolvedAddress === 'object') { // Is JSON object
225+
if (unresolvedAddress.hasOwnProperty('address')) {
226+
return Address.createFromRawAddress(unresolvedAddress.address);
227+
} else if (unresolvedAddress.hasOwnProperty('id')) {
228+
return NamespaceId.createFromEncoded(unresolvedAddress.id);
229+
}
230+
}
231+
throw new Error(`UnresolvedAddress: ${unresolvedAddress} type is not recognised`);
232+
};

src/model/transaction/AccountAddressRestrictionTransaction.ts

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

17-
import { combineLatest, from, of } from 'rxjs';
17+
import { combineLatest, of } from 'rxjs';
1818
import { Observable } from 'rxjs/internal/Observable';
19-
import { mergeMap, toArray } from 'rxjs/operators';
19+
import { map } from 'rxjs/operators';
2020
import { Convert } from '../../core/format';
2121
import { UnresolvedMapping } from '../../core/utils/UnresolvedMapping';
2222
import { AccountAddressRestrictionTransactionBuilder } from '../../infrastructure/catbuffer/AccountAddressRestrictionTransactionBuilder';
@@ -28,11 +28,13 @@ import { KeyDto } from '../../infrastructure/catbuffer/KeyDto';
2828
import { SignatureDto } from '../../infrastructure/catbuffer/SignatureDto';
2929
import { TimestampDto } from '../../infrastructure/catbuffer/TimestampDto';
3030
import { UnresolvedAddressDto } from '../../infrastructure/catbuffer/UnresolvedAddressDto';
31-
import { NamespaceHttp } from '../../infrastructure/NamespaceHttp';
31+
import { ReceiptHttp } from '../../infrastructure/ReceiptHttp';
32+
import { TransactionService } from '../../service/TransactionService';
3233
import { Address } from '../account/Address';
3334
import { PublicAccount } from '../account/PublicAccount';
3435
import { NetworkType } from '../blockchain/NetworkType';
3536
import { NamespaceId } from '../namespace/NamespaceId';
37+
import { ResolutionType } from '../receipt/ResolutionType';
3638
import { AccountRestrictionFlags } from '../restriction/AccountRestrictionType';
3739
import { UInt64 } from '../UInt64';
3840
import { Deadline } from './Deadline';
@@ -196,23 +198,40 @@ export class AccountAddressRestrictionTransaction extends Transaction {
196198

197199
/**
198200
* @internal
199-
* @param namespaceHttp NamespaceHttp
200-
* @returns {AccountAddressRestrictionTransaction}
201+
* @param receiptHttp ReceiptHttp
202+
* @returns {TransferTransaction}
201203
*/
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(),
204+
resolveAliases(receiptHttp: ReceiptHttp): Observable<AccountAddressRestrictionTransaction> {
205+
const hasUnresolved = this.restrictionAdditions.find((address) => address instanceof NamespaceId) !== undefined ||
206+
this.restrictionDeletions.find((address) => address instanceof NamespaceId) !== undefined;
207+
208+
if (!hasUnresolved) {
209+
return of(this);
210+
}
211+
212+
const transactionInfo = this.checkTransactionHeightAndIndex();
213+
214+
const statementObservable = receiptHttp.getBlockReceipts(transactionInfo.height.toString());
215+
const restrictionAdditions = statementObservable.pipe(
216+
map((statement) => {
217+
return this.restrictionAdditions.map((addition) => {
218+
return addition instanceof NamespaceId ?
219+
TransactionService.getResolvedFromReceipt(ResolutionType.Address, addition as NamespaceId,
220+
statement, transactionInfo.index, transactionInfo.height.toString()) as Address :
221+
addition;
222+
});
223+
}),
209224
);
210-
const restrictionDeletions = from(this.restrictionDeletions).pipe(
211-
mergeMap((deletion) => deletion instanceof NamespaceId ?
212-
namespaceHttp.getLinkedAddress(deletion) :
213-
of(deletion),
214-
),
215-
toArray(),
225+
226+
const restrictionDeletions = statementObservable.pipe(
227+
map((statement) => {
228+
return this.restrictionDeletions.map((deletion) => {
229+
return deletion instanceof NamespaceId ?
230+
TransactionService.getResolvedFromReceipt(ResolutionType.Address, deletion as NamespaceId,
231+
statement, transactionInfo.index, transactionInfo.height.toString()) as Address :
232+
deletion;
233+
});
234+
}),
216235
);
217236

218237
return combineLatest(restrictionAdditions, restrictionDeletions, (additions, deletions) => {

src/model/transaction/AccountLinkTransaction.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import { EmbeddedAccountLinkTransactionBuilder } from '../../infrastructure/catb
2323
import { KeyDto } from '../../infrastructure/catbuffer/KeyDto';
2424
import { SignatureDto } from '../../infrastructure/catbuffer/SignatureDto';
2525
import { TimestampDto } from '../../infrastructure/catbuffer/TimestampDto';
26-
import { NamespaceHttp } from '../../infrastructure/NamespaceHttp';
26+
import { ReceiptHttp } from '../../infrastructure/ReceiptHttp';
2727
import { PublicAccount } from '../account/PublicAccount';
2828
import { NetworkType } from '../blockchain/NetworkType';
2929
import { UInt64 } from '../UInt64';
@@ -169,10 +169,10 @@ export class AccountLinkTransaction extends Transaction {
169169

170170
/**
171171
* @internal
172-
* @param namespaceHttp NamespaceHttp
173-
* @returns {AccountLinkTransaction}
172+
* @param receiptHttp ReceiptHttp
173+
* @returns {TransferTransaction}
174174
*/
175-
resolveAliases(namespaceHttp: NamespaceHttp): Observable<AccountLinkTransaction> {
175+
resolveAliases(receiptHttp: ReceiptHttp): Observable<AccountLinkTransaction> {
176176
return of(this);
177177
}
178178
}

src/model/transaction/AccountMetadataTransaction.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import { EmbeddedAccountMetadataTransactionBuilder } from '../../infrastructure/
2323
import { KeyDto } from '../../infrastructure/catbuffer/KeyDto';
2424
import { SignatureDto } from '../../infrastructure/catbuffer/SignatureDto';
2525
import { TimestampDto } from '../../infrastructure/catbuffer/TimestampDto';
26-
import { NamespaceHttp } from '../../infrastructure/NamespaceHttp';
26+
import { ReceiptHttp } from '../../infrastructure/ReceiptHttp';
2727
import { PublicAccount } from '../account/PublicAccount';
2828
import { NetworkType } from '../blockchain/NetworkType';
2929
import { UInt64 } from '../UInt64';
@@ -199,10 +199,10 @@ export class AccountMetadataTransaction extends Transaction {
199199

200200
/**
201201
* @internal
202-
* @param namespaceHttp NamespaceHttp
203-
* @returns {AccountMetadataTransaction}
202+
* @param receiptHttp ReceiptHttp
203+
* @returns {TransferTransaction}
204204
*/
205-
resolveAliases(namespaceHttp: NamespaceHttp): Observable<AccountMetadataTransaction> {
205+
resolveAliases(receiptHttp: ReceiptHttp): Observable<AccountMetadataTransaction> {
206206
return of(this);
207207
}
208208
}

src/model/transaction/AccountMosaicRestrictionTransaction.ts

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

17-
import { combineLatest, from, of } from 'rxjs';
17+
import { combineLatest, of } from 'rxjs';
1818
import { Observable } from 'rxjs/internal/Observable';
19-
import { mergeMap, toArray } from 'rxjs/operators';
19+
import { map } from 'rxjs/operators';
2020
import { Convert } from '../../core/format';
2121
import { UnresolvedMapping } from '../../core/utils/UnresolvedMapping';
2222
import { AccountMosaicRestrictionTransactionBuilder } from '../../infrastructure/catbuffer/AccountMosaicRestrictionTransactionBuilder';
@@ -28,11 +28,13 @@ import { KeyDto } from '../../infrastructure/catbuffer/KeyDto';
2828
import { SignatureDto } from '../../infrastructure/catbuffer/SignatureDto';
2929
import { TimestampDto } from '../../infrastructure/catbuffer/TimestampDto';
3030
import { UnresolvedMosaicIdDto } from '../../infrastructure/catbuffer/UnresolvedMosaicIdDto';
31-
import { NamespaceHttp } from '../../infrastructure/NamespaceHttp';
31+
import { ReceiptHttp } from '../../infrastructure/ReceiptHttp';
32+
import { TransactionService } from '../../service/TransactionService';
3233
import { PublicAccount } from '../account/PublicAccount';
3334
import { NetworkType } from '../blockchain/NetworkType';
3435
import { MosaicId } from '../mosaic/MosaicId';
3536
import { NamespaceId } from '../namespace/NamespaceId';
37+
import { ResolutionType } from '../receipt/ResolutionType';
3638
import { AccountRestrictionFlags } from '../restriction/AccountRestrictionType';
3739
import { UInt64 } from '../UInt64';
3840
import { Deadline } from './Deadline';
@@ -196,23 +198,40 @@ export class AccountMosaicRestrictionTransaction extends Transaction {
196198

197199
/**
198200
* @internal
199-
* @param namespaceHttp NamespaceHttp
200-
* @returns {AccountMosaicRestrictionTransaction}
201+
* @param receiptHttp ReceiptHttp
202+
* @returns {TransferTransaction}
201203
*/
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(),
204+
resolveAliases(receiptHttp: ReceiptHttp): Observable<AccountMosaicRestrictionTransaction> {
205+
const hasUnresolved = this.restrictionAdditions.find((mosaicId) => mosaicId instanceof NamespaceId) !== undefined ||
206+
this.restrictionDeletions.find((mosaicId) => mosaicId instanceof NamespaceId) !== undefined;
207+
208+
if (!hasUnresolved) {
209+
return of(this);
210+
}
211+
212+
const transactionInfo = this.checkTransactionHeightAndIndex();
213+
214+
const statementObservable = receiptHttp.getBlockReceipts(transactionInfo.height.toString());
215+
const restrictionAdditions = statementObservable.pipe(
216+
map((statement) => {
217+
return this.restrictionAdditions.map((addition) => {
218+
return addition instanceof NamespaceId ?
219+
TransactionService.getResolvedFromReceipt(ResolutionType.Mosaic, addition as NamespaceId,
220+
statement, transactionInfo.index, transactionInfo.height.toString()) as MosaicId :
221+
addition;
222+
});
223+
}),
209224
);
210-
const restrictionDeletions = from(this.restrictionDeletions).pipe(
211-
mergeMap((deletion) => deletion instanceof NamespaceId ?
212-
namespaceHttp.getLinkedMosaicId(deletion) :
213-
of(deletion),
214-
),
215-
toArray(),
225+
226+
const restrictionDeletions = statementObservable.pipe(
227+
map((statement) => {
228+
return this.restrictionDeletions.map((deletion) => {
229+
return deletion instanceof NamespaceId ?
230+
TransactionService.getResolvedFromReceipt(ResolutionType.Mosaic, deletion as NamespaceId,
231+
statement, transactionInfo.index, transactionInfo.height.toString()) as MosaicId :
232+
deletion;
233+
});
234+
}),
216235
);
217236

218237
return combineLatest(restrictionAdditions, restrictionDeletions, (additions, deletions) => {

src/model/transaction/AccountOperationRestrictionTransaction.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ import {
2727
import { KeyDto } from '../../infrastructure/catbuffer/KeyDto';
2828
import { SignatureDto } from '../../infrastructure/catbuffer/SignatureDto';
2929
import { TimestampDto } from '../../infrastructure/catbuffer/TimestampDto';
30-
import { NamespaceHttp } from '../../infrastructure/NamespaceHttp';
30+
import { ReceiptHttp } from '../../infrastructure/ReceiptHttp';
3131
import { PublicAccount } from '../account/PublicAccount';
3232
import { NetworkType } from '../blockchain/NetworkType';
3333
import { AccountRestrictionFlags } from '../restriction/AccountRestrictionType';
@@ -180,10 +180,10 @@ export class AccountOperationRestrictionTransaction extends Transaction {
180180

181181
/**
182182
* @internal
183-
* @param namespaceHttp NamespaceHttp
184-
* @returns {AccountOperationRestrictionTransaction}
183+
* @param receiptHttp ReceiptHttp
184+
* @returns {TransferTransaction}
185185
*/
186-
resolveAliases(namespaceHttp: NamespaceHttp): Observable<AccountOperationRestrictionTransaction> {
186+
resolveAliases(receiptHttp: ReceiptHttp): Observable<AccountOperationRestrictionTransaction> {
187187
return of(this);
188188
}
189189
}

src/model/transaction/AddressAliasTransaction.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ import { KeyDto } from '../../infrastructure/catbuffer/KeyDto';
2525
import { NamespaceIdDto } from '../../infrastructure/catbuffer/NamespaceIdDto';
2626
import { SignatureDto } from '../../infrastructure/catbuffer/SignatureDto';
2727
import { TimestampDto } from '../../infrastructure/catbuffer/TimestampDto';
28-
import { NamespaceHttp } from '../../infrastructure/NamespaceHttp';
28+
import { ReceiptHttp } from '../../infrastructure/ReceiptHttp';
2929
import { Address } from '../account/Address';
3030
import { PublicAccount } from '../account/PublicAccount';
3131
import { NetworkType } from '../blockchain/NetworkType';
@@ -189,10 +189,10 @@ export class AddressAliasTransaction extends Transaction {
189189

190190
/**
191191
* @internal
192-
* @param namespaceHttp NamespaceHttp
193-
* @returns {AddressAliasTransaction}
192+
* @param receiptHttp ReceiptHttp
193+
* @returns {TransferTransaction}
194194
*/
195-
resolveAliases(namespaceHttp: NamespaceHttp): Observable<AddressAliasTransaction> {
195+
resolveAliases(receiptHttp: ReceiptHttp): Observable<AddressAliasTransaction> {
196196
return of(this);
197197
}
198198
}

0 commit comments

Comments
 (0)