Skip to content

Commit 7ce4ba4

Browse files
authored
Merge pull request #314 from NEMStudios/task/g313_metadata_bug
JAV-72 MetadataTransactionService delta value
2 parents 990ca90 + 552f886 commit 7ce4ba4

File tree

4 files changed

+93
-9
lines changed

4 files changed

+93
-9
lines changed

e2e/service/MetadataTransactionService.spec.ts

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -303,4 +303,86 @@ describe('MetadataTransactionService', () => {
303303
});
304304
});
305305
});
306+
307+
describe('Announce transaction through service with delta size increase', () => {
308+
let listener: Listener;
309+
before (() => {
310+
listener = new Listener(config.apiUrl);
311+
return listener.open();
312+
});
313+
after(() => {
314+
return listener.close();
315+
});
316+
it('should create MosaicMetadataTransaction and announce', (done) => {
317+
const metaDataService = new MetadataTransactionService(metadataHttp);
318+
319+
return metaDataService.createMetadataTransaction(
320+
deadline,
321+
NetworkType.MIJIN_TEST,
322+
MetadataType.Mosaic,
323+
targetAccount.publicAccount,
324+
key,
325+
newValue + 'delta' + 'extra delta',
326+
targetAccount.publicAccount,
327+
mosaicId,
328+
).subscribe((transaction: MosaicMetadataTransaction) => {
329+
const aggregateTransaction = AggregateTransaction.createComplete(Deadline.create(),
330+
[transaction.toAggregate(targetAccount.publicAccount)],
331+
NetworkType.MIJIN_TEST,
332+
[],
333+
);
334+
const signedTransaction = aggregateTransaction.signWith(targetAccount, generationHash);
335+
listener.confirmed(targetAccount.address).subscribe(() => {
336+
done();
337+
});
338+
listener.status(targetAccount.address).subscribe((error) => {
339+
console.log('Error:', error);
340+
assert(false);
341+
done();
342+
});
343+
transactionHttp.announce(signedTransaction);
344+
});
345+
});
346+
});
347+
348+
describe('Announce transaction through service with delta size decrease', () => {
349+
let listener: Listener;
350+
before (() => {
351+
listener = new Listener(config.apiUrl);
352+
return listener.open();
353+
});
354+
after(() => {
355+
return listener.close();
356+
});
357+
it('should create MosaicMetadataTransaction and announce', (done) => {
358+
const metaDataService = new MetadataTransactionService(metadataHttp);
359+
360+
return metaDataService.createMetadataTransaction(
361+
deadline,
362+
NetworkType.MIJIN_TEST,
363+
MetadataType.Mosaic,
364+
targetAccount.publicAccount,
365+
key,
366+
newValue,
367+
targetAccount.publicAccount,
368+
mosaicId,
369+
).subscribe((transaction: MosaicMetadataTransaction) => {
370+
const aggregateTransaction = AggregateTransaction.createComplete(Deadline.create(),
371+
[transaction.toAggregate(targetAccount.publicAccount)],
372+
NetworkType.MIJIN_TEST,
373+
[],
374+
);
375+
const signedTransaction = aggregateTransaction.signWith(targetAccount, generationHash);
376+
listener.confirmed(targetAccount.address).subscribe(() => {
377+
done();
378+
});
379+
listener.status(targetAccount.address).subscribe((error) => {
380+
console.log('Error:', error);
381+
assert(false);
382+
done();
383+
});
384+
transactionHttp.announce(signedTransaction);
385+
});
386+
});
387+
});
306388
});

src/core/format/Convert.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -225,9 +225,7 @@ export class Convert {
225225
const delta: number[] = [];
226226
for (let i = 0; i < length; ++i) {
227227
const xorBuffer = buffer1[i] ^ buffer2[i];
228-
if (xorBuffer !== 0) {
229-
delta.push(xorBuffer);
230-
}
228+
delta.push(xorBuffer);
231229
}
232230
return Convert.uint8ToHex(Uint8Array.from(delta));
233231
}

src/service/MetadataTransactionService.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ export class MetadataTransactionService {
137137
targetPublicKey,
138138
key,
139139
newValueBytes.length - currentValueByte.length,
140-
value,
140+
Convert.decodeHex(Convert.xor(currentValueByte, newValueBytes)),
141141
networkType,
142142
maxFee,
143143
);
@@ -191,7 +191,7 @@ export class MetadataTransactionService {
191191
key,
192192
mosaicId,
193193
newValueBytes.length - currentValueByte.length,
194-
value,
194+
Convert.decodeHex(Convert.xor(currentValueByte, newValueBytes)),
195195
networkType,
196196
maxFee,
197197
);
@@ -246,7 +246,7 @@ export class MetadataTransactionService {
246246
key,
247247
namespaceId,
248248
newValueBytes.length - currentValueByte.length,
249-
value,
249+
Convert.decodeHex(Convert.xor(currentValueByte, newValueBytes)),
250250
networkType,
251251
maxFee,
252252
);

test/service/MetadataTransactionservice.spec.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import {expect} from 'chai';
1818
import {of as observableOf} from 'rxjs';
1919
import {deepEqual, instance, mock, when} from 'ts-mockito';
20+
import { Convert } from '../../src/core/format/Convert';
2021
import { MetadataHttp } from '../../src/infrastructure/MetadataHttp';
2122
import { Account } from '../../src/model/account/Account';
2223
import {NetworkType} from '../../src/model/blockchain/NetworkType';
@@ -70,7 +71,8 @@ describe('MetadataTransactionService', () => {
7071
.subscribe((transaction: AccountMetadataTransaction) => {
7172
expect(transaction.type).to.be.equal(TransactionType.ACCOUNT_METADATA_TRANSACTION);
7273
expect(transaction.scopedMetadataKey.toHex()).to.be.equal(key.toHex());
73-
expect(transaction.value).to.be.equal(value + deltaValue);
74+
expect(Convert.utf8ToHex(transaction.value))
75+
.to.be.equal(Convert.xor(Convert.utf8ToUint8(value), Convert.utf8ToUint8(value + deltaValue)));
7476
expect(transaction.valueSizeDelta).to.be.equal(deltaValue.length);
7577
expect(transaction.targetPublicKey).to.be.equal(account.publicKey);
7678
done();
@@ -89,7 +91,8 @@ describe('MetadataTransactionService', () => {
8991
.subscribe((transaction: MosaicMetadataTransaction) => {
9092
expect(transaction.type).to.be.equal(TransactionType.MOSAIC_METADATA_TRANSACTION);
9193
expect(transaction.scopedMetadataKey.toHex()).to.be.equal(key.toHex());
92-
expect(transaction.value).to.be.equal(value + deltaValue);
94+
expect(Convert.utf8ToHex(transaction.value))
95+
.to.be.equal(Convert.xor(Convert.utf8ToUint8(value), Convert.utf8ToUint8(value + deltaValue)));
9396
expect(transaction.targetMosaicId.toHex()).to.be.equal(targetIdHex);
9497
expect(transaction.valueSizeDelta).to.be.equal(deltaValue.length);
9598
expect(transaction.targetPublicKey).to.be.equal(account.publicKey);
@@ -109,7 +112,8 @@ describe('MetadataTransactionService', () => {
109112
.subscribe((transaction: NamespaceMetadataTransaction) => {
110113
expect(transaction.type).to.be.equal(TransactionType.NAMESPACE_METADATA_TRANSACTION);
111114
expect(transaction.scopedMetadataKey.toHex()).to.be.equal(key.toHex());
112-
expect(transaction.value).to.be.equal(value + deltaValue);
115+
expect(Convert.utf8ToHex(transaction.value))
116+
.to.be.equal(Convert.xor(Convert.utf8ToUint8(value), Convert.utf8ToUint8(value + deltaValue)));
113117
expect(transaction.targetNamespaceId.toHex()).to.be.equal(targetIdHex);
114118
expect(transaction.valueSizeDelta).to.be.equal(deltaValue.length);
115119
expect(transaction.targetPublicKey).to.be.equal(account.publicKey);

0 commit comments

Comments
 (0)