From cbf5e94ca448308852047a0c4ef347d8b40b7f41 Mon Sep 17 00:00:00 2001 From: Steven Liu Date: Wed, 13 Feb 2019 19:41:23 +0000 Subject: [PATCH 1/8] #24 getTransactionStatus fails when querying for failed transactions --- src/infrastructure/TransactionHttp.ts | 25 ++++-------------- src/model/transaction/SyncAnnounce.ts | 38 +++++++++++++++++++++++++++ test/model/UInt64.spec.ts | 2 +- 3 files changed, 44 insertions(+), 21 deletions(-) create mode 100644 src/model/transaction/SyncAnnounce.ts diff --git a/src/infrastructure/TransactionHttp.ts b/src/infrastructure/TransactionHttp.ts index 33f4b76d03..9351063fbc 100644 --- a/src/infrastructure/TransactionHttp.ts +++ b/src/infrastructure/TransactionHttp.ts @@ -22,6 +22,7 @@ import {PublicAccount} from '../model/account/PublicAccount'; import {CosignatureSignedTransaction} from '../model/transaction/CosignatureSignedTransaction'; import {Deadline} from '../model/transaction/Deadline'; import {SignedTransaction} from '../model/transaction/SignedTransaction'; +import { SyncAnnounce } from '../model/transaction/SyncAnnounce'; import {Transaction} from '../model/transaction/Transaction'; import {TransactionAnnounceResponse} from '../model/transaction/TransactionAnnounceResponse'; import {TransactionStatus} from '../model/transaction/TransactionStatus'; @@ -93,7 +94,7 @@ export class TransactionHttp extends Http implements TransactionRepository { transactionStatusDTO.status, transactionStatusDTO.hash, Deadline.createFromDTO(transactionStatusDTO.deadline), - new UInt64(transactionStatusDTO.height)); + transactionStatusDTO.height ? new UInt64(transactionStatusDTO.height) : UInt64.fromUint(0)); })); } @@ -115,7 +116,7 @@ export class TransactionHttp extends Http implements TransactionRepository { transactionStatusDTO.status, transactionStatusDTO.hash, Deadline.createFromDTO(transactionStatusDTO.deadline), - new UInt64(transactionStatusDTO.height)); + transactionStatusDTO.height ? new UInt64(transactionStatusDTO.height) : UInt64.fromUint(0)); }); })); } @@ -182,27 +183,11 @@ export class TransactionHttp extends Http implements TransactionRepository { } else { return CreateTransactionFromDTO(response); } - }),catchError((err) => { + }), catchError((err) => { if (err.statusCode === 405) { return observableThrowError('non sync server'); } return observableThrowError(err); - }),); - } -} - -class SyncAnnounce { - constructor(/** - * Transaction serialized data - */ - public readonly payload: string, - /** - * Transaction hash - */ - public readonly hash: string, - /** - * Transaction address - */ - public readonly address: string) { + })); } } diff --git a/src/model/transaction/SyncAnnounce.ts b/src/model/transaction/SyncAnnounce.ts new file mode 100644 index 0000000000..912ac1de0f --- /dev/null +++ b/src/model/transaction/SyncAnnounce.ts @@ -0,0 +1,38 @@ +/* + * Copyright 2018 NEM + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export class SyncAnnounce { + /** + * @internal + * @param payload + * @param hash + * @param address + */ + constructor( + /** + * Transaction serialized data + */ + public readonly payload: string, + /** + * Transaction hash + */ + public readonly hash: string, + /** + * Transaction address + */ + public readonly address: string) { + } +} diff --git a/test/model/UInt64.spec.ts b/test/model/UInt64.spec.ts index fcba223ea6..2a9c410eb7 100644 --- a/test/model/UInt64.spec.ts +++ b/test/model/UInt64.spec.ts @@ -64,7 +64,7 @@ describe('Uint64', () => { expect(uint64Compact).to.be.equal(51110867862); }); - it('should fromUnit throw exception with negative unit value', () => { + it('should fromUnit throw exception with negative uint value', () => { expect(() => { UInt64.fromUint(-1); }).to.throw(Error, 'Unsigned integer cannot be negative'); From f721fdb2bf0428eb5499be6c7b0d4dc1ed522032 Mon Sep 17 00:00:00 2001 From: Steven Liu Date: Thu, 21 Feb 2019 17:58:52 +0000 Subject: [PATCH 2/8] typo fixed --- test/model/UInt64.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/model/UInt64.spec.ts b/test/model/UInt64.spec.ts index 2a9c410eb7..b62c1da636 100644 --- a/test/model/UInt64.spec.ts +++ b/test/model/UInt64.spec.ts @@ -64,7 +64,7 @@ describe('Uint64', () => { expect(uint64Compact).to.be.equal(51110867862); }); - it('should fromUnit throw exception with negative uint value', () => { + it('should fromUint throw exception with negative uint value', () => { expect(() => { UInt64.fromUint(-1); }).to.throw(Error, 'Unsigned integer cannot be negative'); From c0c5417d2b329469d0e4d0a9cf978f8b0f3f91f4 Mon Sep 17 00:00:00 2001 From: Steven Liu Date: Wed, 13 Feb 2019 19:41:23 +0000 Subject: [PATCH 3/8] #24 getTransactionStatus fails when querying for failed transactions --- src/infrastructure/TransactionHttp.ts | 25 ++++-------------- src/model/transaction/SyncAnnounce.ts | 38 +++++++++++++++++++++++++++ test/model/UInt64.spec.ts | 2 +- 3 files changed, 44 insertions(+), 21 deletions(-) create mode 100644 src/model/transaction/SyncAnnounce.ts diff --git a/src/infrastructure/TransactionHttp.ts b/src/infrastructure/TransactionHttp.ts index 33f4b76d03..9351063fbc 100644 --- a/src/infrastructure/TransactionHttp.ts +++ b/src/infrastructure/TransactionHttp.ts @@ -22,6 +22,7 @@ import {PublicAccount} from '../model/account/PublicAccount'; import {CosignatureSignedTransaction} from '../model/transaction/CosignatureSignedTransaction'; import {Deadline} from '../model/transaction/Deadline'; import {SignedTransaction} from '../model/transaction/SignedTransaction'; +import { SyncAnnounce } from '../model/transaction/SyncAnnounce'; import {Transaction} from '../model/transaction/Transaction'; import {TransactionAnnounceResponse} from '../model/transaction/TransactionAnnounceResponse'; import {TransactionStatus} from '../model/transaction/TransactionStatus'; @@ -93,7 +94,7 @@ export class TransactionHttp extends Http implements TransactionRepository { transactionStatusDTO.status, transactionStatusDTO.hash, Deadline.createFromDTO(transactionStatusDTO.deadline), - new UInt64(transactionStatusDTO.height)); + transactionStatusDTO.height ? new UInt64(transactionStatusDTO.height) : UInt64.fromUint(0)); })); } @@ -115,7 +116,7 @@ export class TransactionHttp extends Http implements TransactionRepository { transactionStatusDTO.status, transactionStatusDTO.hash, Deadline.createFromDTO(transactionStatusDTO.deadline), - new UInt64(transactionStatusDTO.height)); + transactionStatusDTO.height ? new UInt64(transactionStatusDTO.height) : UInt64.fromUint(0)); }); })); } @@ -182,27 +183,11 @@ export class TransactionHttp extends Http implements TransactionRepository { } else { return CreateTransactionFromDTO(response); } - }),catchError((err) => { + }), catchError((err) => { if (err.statusCode === 405) { return observableThrowError('non sync server'); } return observableThrowError(err); - }),); - } -} - -class SyncAnnounce { - constructor(/** - * Transaction serialized data - */ - public readonly payload: string, - /** - * Transaction hash - */ - public readonly hash: string, - /** - * Transaction address - */ - public readonly address: string) { + })); } } diff --git a/src/model/transaction/SyncAnnounce.ts b/src/model/transaction/SyncAnnounce.ts new file mode 100644 index 0000000000..912ac1de0f --- /dev/null +++ b/src/model/transaction/SyncAnnounce.ts @@ -0,0 +1,38 @@ +/* + * Copyright 2018 NEM + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export class SyncAnnounce { + /** + * @internal + * @param payload + * @param hash + * @param address + */ + constructor( + /** + * Transaction serialized data + */ + public readonly payload: string, + /** + * Transaction hash + */ + public readonly hash: string, + /** + * Transaction address + */ + public readonly address: string) { + } +} diff --git a/test/model/UInt64.spec.ts b/test/model/UInt64.spec.ts index 035d0d43b2..2827b32754 100644 --- a/test/model/UInt64.spec.ts +++ b/test/model/UInt64.spec.ts @@ -73,7 +73,7 @@ describe('Uint64', () => { expect(uint64Compact).to.be.equal(51110867862); }); - it('should fromUnit throw exception with negative unit value', () => { + it('should fromUnit throw exception with negative uint value', () => { expect(() => { UInt64.fromUint(-1); }).to.throw(Error, 'Unsigned integer cannot be negative'); From 1e077036ebc9ab67cff0b0c255d79c507102e334 Mon Sep 17 00:00:00 2001 From: Steven Liu Date: Thu, 21 Feb 2019 17:58:52 +0000 Subject: [PATCH 4/8] typo fixed --- test/model/UInt64.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/model/UInt64.spec.ts b/test/model/UInt64.spec.ts index 2827b32754..d1c9aed3d0 100644 --- a/test/model/UInt64.spec.ts +++ b/test/model/UInt64.spec.ts @@ -73,7 +73,7 @@ describe('Uint64', () => { expect(uint64Compact).to.be.equal(51110867862); }); - it('should fromUnit throw exception with negative uint value', () => { + it('should fromUint throw exception with negative uint value', () => { expect(() => { UInt64.fromUint(-1); }).to.throw(Error, 'Unsigned integer cannot be negative'); From f659124f6b8b032779362558acc48784a84cc937 Mon Sep 17 00:00:00 2001 From: Greg S Date: Thu, 28 Feb 2019 16:26:03 +0100 Subject: [PATCH 5/8] Fixed MosaicDefinitionTransaction.create() to accept MosaicNonce and MosaicId --- e2e/infrastructure/TransactionHttp.spec.ts | 9 +++++---- .../transaction/MosaicDefinitionTransaction.ts | 18 +++++++++++------- .../transaction/AggregateTransaction.spec.ts | 5 +++-- .../MosaicDefinitionTransaction.spec.ts | 13 +++++++------ 4 files changed, 26 insertions(+), 19 deletions(-) diff --git a/e2e/infrastructure/TransactionHttp.spec.ts b/e2e/infrastructure/TransactionHttp.spec.ts index cbe2d4b796..de6cd4aaca 100644 --- a/e2e/infrastructure/TransactionHttp.spec.ts +++ b/e2e/infrastructure/TransactionHttp.spec.ts @@ -26,6 +26,7 @@ import {Address} from '../../src/model/account/Address'; import {PublicAccount} from '../../src/model/account/PublicAccount'; import {NetworkType} from '../../src/model/blockchain/NetworkType'; import {MosaicId} from '../../src/model/mosaic/MosaicId'; +import {MosaicNonce} from '../../src/model/mosaic/MosaicNonce'; import {MosaicProperties} from '../../src/model/mosaic/MosaicProperties'; import {MosaicSupplyType} from '../../src/model/mosaic/MosaicSupplyType'; import {NetworkCurrencyMosaic} from '../../src/model/mosaic/NetworkCurrencyMosaic'; @@ -151,8 +152,8 @@ describe('TransactionHttp', () => { it('standalone', (done) => { const mosaicDefinitionTransaction = MosaicDefinitionTransaction.create( Deadline.create(), - new Uint8Array([0xE6, 0xDE, 0x84, 0xB8]), - UInt64.fromUint(1), + new MosaicNonce(new Uint8Array([0xE6, 0xDE, 0x84, 0xB8])), // nonce + new MosaicId(UInt64.fromUint(1).toDTO()), // ID MosaicProperties.create({ supplyMutable: true, transferable: true, @@ -170,8 +171,8 @@ describe('TransactionHttp', () => { it('aggregate', (done) => { const mosaicDefinitionTransaction = MosaicDefinitionTransaction.create( Deadline.create(), - new Uint8Array([0xE6, 0xDE, 0x84, 0xB8]), - UInt64.fromUint(1), + new MosaicNonce(new Uint8Array([0xE6, 0xDE, 0x84, 0xB8])), // nonce + new MosaicId(UInt64.fromUint(1).toDTO()), // ID MosaicProperties.create({ supplyMutable: true, transferable: true, diff --git a/src/model/transaction/MosaicDefinitionTransaction.ts b/src/model/transaction/MosaicDefinitionTransaction.ts index 7da9d80169..3adaf444a4 100644 --- a/src/model/transaction/MosaicDefinitionTransaction.ts +++ b/src/model/transaction/MosaicDefinitionTransaction.ts @@ -14,7 +14,11 @@ * limitations under the License. */ -import { MosaicCreationTransaction as MosaicDefinitionTransactionLibrary, mosaicId as mosaicIdLibrary, VerifiableTransaction } from 'nem2-library'; +import { + MosaicCreationTransaction as MosaicDefinitionTransactionLibrary, + mosaicId as mosaicIdLibrary, + VerifiableTransaction, +} from 'nem2-library'; import { PublicAccount } from '../account/PublicAccount'; import { NetworkType } from '../blockchain/NetworkType'; import { MosaicId } from '../mosaic/MosaicId'; @@ -37,23 +41,23 @@ export class MosaicDefinitionTransaction extends Transaction { /** * Create a mosaic creation transaction object * @param deadline - The deadline to include the transaction. - * @param nonce - The mosaic nonce ex: [0xE6, 0xDE, 0x84, 0xB8]. - * @param mosaicId - The mosaic id ex: [481110499, 231112638]. + * @param nonce - The mosaic nonce ex: MosaicNonce.createRandom(). + * @param mosaicId - The mosaic id ex: new MosaicId([481110499, 231112638]). * @param mosaicProperties - The mosaic properties. * @param networkType - The network type. * @returns {MosaicDefinitionTransaction} */ public static create(deadline: Deadline, - nonce: Uint8Array, - mosaicId: UInt64, + nonce: MosaicNonce, + mosaicId: MosaicId, mosaicProperties: MosaicProperties, networkType: NetworkType): MosaicDefinitionTransaction { return new MosaicDefinitionTransaction(networkType, TransactionVersion.MOSAIC_DEFINITION, deadline, new UInt64([0, 0]), - new MosaicNonce(nonce), - new MosaicId(mosaicId.toDTO()), + nonce, + mosaicId, mosaicProperties, ); } diff --git a/test/model/transaction/AggregateTransaction.spec.ts b/test/model/transaction/AggregateTransaction.spec.ts index 480d548410..dadce01227 100644 --- a/test/model/transaction/AggregateTransaction.spec.ts +++ b/test/model/transaction/AggregateTransaction.spec.ts @@ -22,6 +22,7 @@ import {Address} from '../../../src/model/account/Address'; import {PublicAccount} from '../../../src/model/account/PublicAccount'; import {NetworkType} from '../../../src/model/blockchain/NetworkType'; import {MosaicId} from '../../../src/model/mosaic/MosaicId'; +import {MosaicNonce} from '../../../src/model/mosaic/MosaicNonce'; import {MosaicProperties} from '../../../src/model/mosaic/MosaicProperties'; import {MosaicSupplyType} from '../../../src/model/mosaic/MosaicSupplyType'; import {AggregateTransaction} from '../../../src/model/transaction/AggregateTransaction'; @@ -98,8 +99,8 @@ describe('AggregateTransaction', () => { it('should createComplete an AggregateTransaction object with MosaicDefinitionTransaction', () => { const mosaicDefinitionTransaction = MosaicDefinitionTransaction.create( Deadline.create(), - new Uint8Array([0xE6, 0xDE, 0x84, 0xB8]), // nonce - UInt64.fromUint(1), // ID + new MosaicNonce(new Uint8Array([0xE6, 0xDE, 0x84, 0xB8])), // nonce + new MosaicId(UInt64.fromUint(1).toDTO()), // ID MosaicProperties.create({ supplyMutable: true, transferable: true, diff --git a/test/model/transaction/MosaicDefinitionTransaction.spec.ts b/test/model/transaction/MosaicDefinitionTransaction.spec.ts index 7d1e0db358..41799026bc 100644 --- a/test/model/transaction/MosaicDefinitionTransaction.spec.ts +++ b/test/model/transaction/MosaicDefinitionTransaction.spec.ts @@ -17,6 +17,8 @@ import {expect} from 'chai'; import {Account} from '../../../src/model/account/Account'; import {NetworkType} from '../../../src/model/blockchain/NetworkType'; +import {MosaicId} from '../../../src/model/mosaic/MosaicId'; +import {MosaicNonce} from '../../../src/model/mosaic/MosaicNonce'; import {MosaicProperties} from '../../../src/model/mosaic/MosaicProperties'; import {Deadline} from '../../../src/model/transaction/Deadline'; import {MosaicDefinitionTransaction} from '../../../src/model/transaction/MosaicDefinitionTransaction'; @@ -34,8 +36,8 @@ describe('MosaicDefinitionTransaction', () => { it('should createComplete an MosaicDefinitionTransaction object and sign it with flags 7', () => { const mosaicDefinitionTransaction = MosaicDefinitionTransaction.create( Deadline.create(), - new Uint8Array([0xE6, 0xDE, 0x84, 0xB8]), - UInt64.fromUint(1), + new MosaicNonce(new Uint8Array([0xE6, 0xDE, 0x84, 0xB8])), // nonce + new MosaicId(UInt64.fromUint(1).toDTO()), // ID MosaicProperties.create({ supplyMutable: true, transferable: true, @@ -64,11 +66,10 @@ describe('MosaicDefinitionTransaction', () => { it('should createComplete an MosaicDefinitionTransaction object and sign it with flags 0', () => { - const nonce = [0xE6, 0xDE, 0x84, 0xB8]; const mosaicDefinitionTransaction = MosaicDefinitionTransaction.create( Deadline.create(), - new Uint8Array(nonce), - UInt64.fromUint(mosaicId(nonce, convert.hexToUint8(account.publicKey))), + new MosaicNonce(new Uint8Array([0xE6, 0xDE, 0x84, 0xB8])), // nonce + new MosaicId(UInt64.fromUint(1).toDTO()), // ID MosaicProperties.create({ supplyMutable: false, transferable: false, @@ -91,7 +92,7 @@ describe('MosaicDefinitionTransaction', () => { expect(signedTransaction.payload.substring( 240, signedTransaction.payload.length, - )).to.be.equal('E6DE84B8000000000000000001000302E803000000000000'); + )).to.be.equal('E6DE84B8010000000000000001000302E803000000000000'); }); }); From 6c64182aa92da339e8422c44ce71d9b26d073608 Mon Sep 17 00:00:00 2001 From: Greg S Date: Thu, 28 Feb 2019 16:28:50 +0100 Subject: [PATCH 6/8] v0.10.3-1: Fixed usability of MosaicDefinitionTransaction --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 180cb866b1..cb0e8bffac 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "nem2-sdk", - "version": "0.10.3-0", + "version": "0.10.3-1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index ade9071dc0..050b502036 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "nem2-sdk", - "version": "0.10.3-0", + "version": "0.10.3-1", "description": "Reactive Nem2 sdk for typescript and javascript", "scripts": { "pretest": "npm run build", From 0a8bb8c54a463af33e5b935ea3b4f6cd7c81b246 Mon Sep 17 00:00:00 2001 From: Steven Liu Date: Fri, 1 Mar 2019 11:02:20 +0000 Subject: [PATCH 7/8] added missed import for syncAnnounce --- src/model/model.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/model/model.ts b/src/model/model.ts index ecd0cbbba2..1f0399e0ba 100644 --- a/src/model/model.ts +++ b/src/model/model.ts @@ -79,6 +79,7 @@ export * from './transaction/RegisterNamespaceTransaction'; export * from './transaction/SecretLockTransaction'; export * from './transaction/SecretProofTransaction'; export * from './transaction/SignedTransaction'; +export * from './transaction/SyncAnnounce'; export * from './transaction/Transaction'; export * from './transaction/TransactionAnnounceResponse'; export * from './transaction/TransactionInfo'; From 4f9ab350d0a1aeb114f4995f1f5b7c70838b5c24 Mon Sep 17 00:00:00 2001 From: Steven Liu Date: Fri, 1 Mar 2019 11:04:15 +0000 Subject: [PATCH 8/8] comments header to change to 2019 --- src/model/transaction/SyncAnnounce.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/model/transaction/SyncAnnounce.ts b/src/model/transaction/SyncAnnounce.ts index 912ac1de0f..5efe2fcfda 100644 --- a/src/model/transaction/SyncAnnounce.ts +++ b/src/model/transaction/SyncAnnounce.ts @@ -1,5 +1,5 @@ /* - * Copyright 2018 NEM + * Copyright 2019 NEM * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License.