Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
bde728b
Fixed #390 Spread operator does not assign super class methods
rg911 Dec 18, 2019
e251e4c
Merge branch 'master' into task/g390_max_fee
rg911 Dec 18, 2019
faaef7f
Fixed #393 applied catbuffer generator on aggregate
rg911 Dec 20, 2019
2c7de1f
Fixed missing semicolon
rg911 Dec 20, 2019
fd775e8
Merge branch 'master' into task/g393_reapply_catbuffer
rg911 Dec 22, 2019
3f68b80
Fixed #393 applied catbuffer generator on aggregate
rg911 Dec 20, 2019
cb0c6b1
Fixed missing semicolon
rg911 Dec 20, 2019
a999695
Merge branch 'task/g393_reapply_catbuffer' of github.com:NEMStudios/n…
rg911 Dec 22, 2019
8ef45a0
Applied catbuffer on receipt
rg911 Dec 22, 2019
250b5c2
Merge branch 'master' into task/g390_max_fee
rg911 Dec 22, 2019
38ba4d6
Merge branch 'master' into task/g393_reapply_catbuffer
rg911 Dec 22, 2019
6d8c421
Moved object assgin to a static method in MappingDto
rg911 Dec 22, 2019
4c656b2
Fixed #390 Spread operator does not assign super class methods
rg911 Dec 18, 2019
a21ba91
Moved object assgin to a static method in MappingDto
rg911 Dec 22, 2019
d65d9eb
Merge branch 'task/g390_max_fee' of github.com:NEMStudios/nem2-sdk-ty…
rg911 Dec 22, 2019
fc8410b
Fixed #393 applied catbuffer generator on aggregate
rg911 Dec 20, 2019
62629a0
Fixed missing semicolon
rg911 Dec 20, 2019
127124d
Applied catbuffer on receipt
rg911 Dec 22, 2019
0d06c22
Merge branch 'task/g393_reapply_catbuffer' of github.com:NEMStudios/n…
rg911 Dec 22, 2019
57ac6c3
Fixed semicolom in import
rg911 Dec 22, 2019
7867c9f
Merge pull request #391 from NEMStudios/task/g390_max_fee
rg911 Dec 23, 2019
ab5a537
Fixed #393 applied catbuffer generator on aggregate
rg911 Dec 20, 2019
fc99749
Fixed missing semicolon
rg911 Dec 20, 2019
04831f8
Applied catbuffer on receipt
rg911 Dec 22, 2019
84e5f6c
Fixed semicolom in import
rg911 Dec 22, 2019
01370fd
Merge branch 'task/g393_reapply_catbuffer' of github.com:NEMStudios/n…
rg911 Dec 23, 2019
70f3ab9
Removed redundant switch case
rg911 Dec 23, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions src/core/utils/DtoMapping.ts
Original file line number Diff line number Diff line change
Expand Up @@ -54,4 +54,15 @@ export class DtoMapping {
}
})));
}

/**
* Creates a copy of the first object adding the attributes of the second object.
* @param object the object to be cloned
* @param attributes the extra attributes to be added to the object.
* @returns a copy of the first object with the new attributes added.
*/
public static assign<T>(object: T, attributes: any): T {
return Object.assign({__proto__: Object.getPrototypeOf(object)}, object, attributes);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@

import { AggregateTransactionBodyBuilder } from './AggregateTransactionBodyBuilder';
import { AmountDto } from './AmountDto';
import { CosignatureBuilder } from './CosignatureBuilder';
import { EmbeddedTransactionBuilder } from './EmbeddedTransactionBuilder';
import { EntityTypeDto } from './EntityTypeDto';
import { GeneratorUtils } from './GeneratorUtils';
import { Hash256Dto } from './Hash256Dto';
Expand Down Expand Up @@ -50,7 +52,7 @@ export class AggregateBondedTransactionBuilder extends TransactionBuilder {
* @param cosignatures Cosignatures data (fills remaining body space after transactions).
*/
// tslint:disable-next-line: max-line-length
public constructor(signature: SignatureDto, signerPublicKey: KeyDto, version: number, network: NetworkTypeDto, type: EntityTypeDto, fee: AmountDto, deadline: TimestampDto, transactionsHash: Hash256Dto, transactions: Uint8Array, cosignatures: Uint8Array) {
public constructor(signature: SignatureDto, signerPublicKey: KeyDto, version: number, network: NetworkTypeDto, type: EntityTypeDto, fee: AmountDto, deadline: TimestampDto, transactionsHash: Hash256Dto, transactions: EmbeddedTransactionBuilder[], cosignatures: CosignatureBuilder[]) {
super(signature, signerPublicKey, version, network, type, fee, deadline);
this.aggregateTransactionBody = new AggregateTransactionBodyBuilder(transactionsHash, transactions, cosignatures);
}
Expand Down Expand Up @@ -94,7 +96,7 @@ export class AggregateBondedTransactionBuilder extends TransactionBuilder {
*
* @return Sub-transaction data (transactions are variable sized and payload size is in bytes).
*/
public getTransactions(): Uint8Array {
public getTransactions(): EmbeddedTransactionBuilder[] {
return this.aggregateTransactionBody.getTransactions();
}

Expand All @@ -103,7 +105,7 @@ export class AggregateBondedTransactionBuilder extends TransactionBuilder {
*
* @return Cosignatures data (fills remaining body space after transactions).
*/
public getCosignatures(): Uint8Array {
public getCosignatures(): CosignatureBuilder[] {
return this.aggregateTransactionBody.getCosignatures();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@

import { AggregateTransactionBodyBuilder } from './AggregateTransactionBodyBuilder';
import { AmountDto } from './AmountDto';
import { CosignatureBuilder } from './CosignatureBuilder';
import { EmbeddedTransactionBuilder } from './EmbeddedTransactionBuilder';
import { EntityTypeDto } from './EntityTypeDto';
import { GeneratorUtils } from './GeneratorUtils';
import { Hash256Dto } from './Hash256Dto';
Expand Down Expand Up @@ -50,7 +52,7 @@ export class AggregateCompleteTransactionBuilder extends TransactionBuilder {
* @param cosignatures Cosignatures data (fills remaining body space after transactions).
*/
// tslint:disable-next-line: max-line-length
public constructor(signature: SignatureDto, signerPublicKey: KeyDto, version: number, network: NetworkTypeDto, type: EntityTypeDto, fee: AmountDto, deadline: TimestampDto, transactionsHash: Hash256Dto, transactions: Uint8Array, cosignatures: Uint8Array) {
public constructor(signature: SignatureDto, signerPublicKey: KeyDto, version: number, network: NetworkTypeDto, type: EntityTypeDto, fee: AmountDto, deadline: TimestampDto, transactionsHash: Hash256Dto, transactions: EmbeddedTransactionBuilder[], cosignatures: CosignatureBuilder[]) {
super(signature, signerPublicKey, version, network, type, fee, deadline);
this.aggregateTransactionBody = new AggregateTransactionBodyBuilder(transactionsHash, transactions, cosignatures);
}
Expand Down Expand Up @@ -94,7 +96,7 @@ export class AggregateCompleteTransactionBuilder extends TransactionBuilder {
*
* @return Sub-transaction data (transactions are variable sized and payload size is in bytes).
*/
public getTransactions(): Uint8Array {
public getTransactions(): EmbeddedTransactionBuilder[] {
return this.aggregateTransactionBody.getTransactions();
}

Expand All @@ -103,7 +105,7 @@ export class AggregateCompleteTransactionBuilder extends TransactionBuilder {
*
* @return Cosignatures data (fills remaining body space after transactions).
*/
public getCosignatures(): Uint8Array {
public getCosignatures(): CosignatureBuilder[] {
return this.aggregateTransactionBody.getCosignatures();
}

Expand Down
52 changes: 39 additions & 13 deletions src/infrastructure/catbuffer/AggregateTransactionBodyBuilder.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,9 @@
*** along with Catapult. If not, see <http://www.gnu.org/licenses/>.
**/

import { CosignatureBuilder } from './CosignatureBuilder';
import { EmbeddedTransactionBuilder } from './EmbeddedTransactionBuilder';
import { EmbeddedTransactionHelper } from './EmbeddedTransactionHelper';
import { GeneratorUtils } from './GeneratorUtils';
import { Hash256Dto } from './Hash256Dto';

Expand All @@ -29,9 +32,9 @@ export class AggregateTransactionBodyBuilder {
/** Reserved padding to align end of AggregateTransactionHeader on 8-byte boundary. */
aggregateTransactionHeader_Reserved1: number;
/** Sub-transaction data (transactions are variable sized and payload size is in bytes). */
transactions: Uint8Array;
transactions: EmbeddedTransactionBuilder[];
/** Cosignatures data (fills remaining body space after transactions). */
cosignatures: Uint8Array;
cosignatures: CosignatureBuilder[];

/**
* Constructor.
Expand All @@ -40,7 +43,8 @@ export class AggregateTransactionBodyBuilder {
* @param transactions Sub-transaction data (transactions are variable sized and payload size is in bytes).
* @param cosignatures Cosignatures data (fills remaining body space after transactions).
*/
public constructor(transactionsHash: Hash256Dto, transactions: Uint8Array, cosignatures: Uint8Array) {
// tslint:disable-next-line: max-line-length
public constructor(transactionsHash: Hash256Dto, transactions: EmbeddedTransactionBuilder[], cosignatures: CosignatureBuilder[]) {
this.transactionsHash = transactionsHash;
this.aggregateTransactionHeader_Reserved1 = 0;
this.transactions = transactions;
Expand All @@ -62,9 +66,24 @@ export class AggregateTransactionBodyBuilder {
// tslint:disable-next-line: max-line-length
const aggregateTransactionHeader_Reserved1 = GeneratorUtils.bufferToUint(GeneratorUtils.getBytes(Uint8Array.from(byteArray), 4));
byteArray.splice(0, 4);
const transactions = GeneratorUtils.getBytes(Uint8Array.from(byteArray), payloadSize);
byteArray.splice(0, payloadSize);
const cosignatures = Uint8Array.from(byteArray);
let transactionsByteSize = payloadSize;
const transactions: EmbeddedTransactionBuilder[] = [];
while (transactionsByteSize > 0) {
const item = EmbeddedTransactionHelper.loadFromBinary(Uint8Array.from(byteArray));
transactions.push(item);
const itemSize = item.getSize() + GeneratorUtils.getTransactionPaddingSize(item.getSize(), 8);
transactionsByteSize -= itemSize;
byteArray.splice(0, itemSize);
}
let cosignaturesByteSize = byteArray.length;
const cosignatures: CosignatureBuilder[] = [];
while (cosignaturesByteSize > 0) {
const item = CosignatureBuilder.loadFromBinary(Uint8Array.from(byteArray));
cosignatures.push(item);
const itemSize = item.getSize();
cosignaturesByteSize -= itemSize;
byteArray.splice(0, itemSize);
}
return new AggregateTransactionBodyBuilder(transactionsHash, transactions, cosignatures);
}

Expand All @@ -91,7 +110,7 @@ export class AggregateTransactionBodyBuilder {
*
* @return Sub-transaction data (transactions are variable sized and payload size is in bytes).
*/
public getTransactions(): Uint8Array {
public getTransactions(): EmbeddedTransactionBuilder[] {
return this.transactions;
}

Expand All @@ -100,7 +119,7 @@ export class AggregateTransactionBodyBuilder {
*
* @return Cosignatures data (fills remaining body space after transactions).
*/
public getCosignatures(): Uint8Array {
public getCosignatures(): CosignatureBuilder[] {
return this.cosignatures;
}

Expand All @@ -114,8 +133,8 @@ export class AggregateTransactionBodyBuilder {
size += this.transactionsHash.getSize();
size += 4; // payloadSize
size += 4; // aggregateTransactionHeader_Reserved1
size += this.transactions.length;
size += this.cosignatures.length;
this.transactions.forEach((o) => size += EmbeddedTransactionHelper.serialize(o).length);
this.cosignatures.forEach((o) => size += o.getSize());
return size;
}

Expand All @@ -128,13 +147,20 @@ export class AggregateTransactionBodyBuilder {
let newArray = Uint8Array.from([]);
const transactionsHashBytes = this.transactionsHash.serialize();
newArray = GeneratorUtils.concatTypedArrays(newArray, transactionsHashBytes);
const payloadSizeBytes = GeneratorUtils.uintToBuffer(this.transactions.length, 4);
// tslint:disable-next-line: max-line-length
const payloadSizeBytes = GeneratorUtils.uintToBuffer(EmbeddedTransactionHelper.getEmbeddedTransactionSize(this.transactions), 4);
newArray = GeneratorUtils.concatTypedArrays(newArray, payloadSizeBytes);
// tslint:disable-next-line: max-line-length
const aggregateTransactionHeader_Reserved1Bytes = GeneratorUtils.uintToBuffer(this.getAggregateTransactionHeader_Reserved1(), 4);
newArray = GeneratorUtils.concatTypedArrays(newArray, aggregateTransactionHeader_Reserved1Bytes);
newArray = GeneratorUtils.concatTypedArrays(newArray, this.transactions);
newArray = GeneratorUtils.concatTypedArrays(newArray, this.cosignatures);
this.transactions.forEach((item) => {
const transactionsBytes = EmbeddedTransactionHelper.serialize(item);
newArray = GeneratorUtils.concatTypedArrays(newArray, transactionsBytes);
});
this.cosignatures.forEach((item) => {
const cosignaturesBytes = item.serialize();
newArray = GeneratorUtils.concatTypedArrays(newArray, cosignaturesBytes);
});
return newArray;
}
}
111 changes: 111 additions & 0 deletions src/infrastructure/catbuffer/BalanceChangeReceiptBuilder.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
// tslint:disable: jsdoc-format
/**
*** Copyright (c) 2016-present,
*** Jaguar0625, gimre, BloodyRookie, Tech Bureau, Corp. All rights reserved.
***
*** This file is part of Catapult.
***
*** Catapult is free software: you can redistribute it and/or modify
*** it under the terms of the GNU Lesser General Public License as published by
*** the Free Software Foundation, either version 3 of the License, or
*** (at your option) any later version.
***
*** Catapult is distributed in the hope that it will be useful,
*** but WITHOUT ANY WARRANTY; without even the implied warranty of
*** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
*** GNU Lesser General Public License for more details.
***
*** You should have received a copy of the GNU Lesser General Public License
*** along with Catapult. If not, see <http://www.gnu.org/licenses/>.
**/

import { GeneratorUtils } from './GeneratorUtils';
import { KeyDto } from './KeyDto';
import { MosaicBuilder } from './MosaicBuilder';
import { ReceiptBuilder } from './ReceiptBuilder';
import { ReceiptTypeDto } from './ReceiptTypeDto';

/** Binary layout for a balance change receipt. */
export class BalanceChangeReceiptBuilder extends ReceiptBuilder {
/** Mosaic. */
mosaic: MosaicBuilder;
/** Account public key. */
targetPublicKey: KeyDto;

/**
* Constructor.
*
* @param version Receipt version.
* @param type Receipt type.
* @param mosaic Mosaic.
* @param targetPublicKey Account public key.
*/
public constructor(version: number, type: ReceiptTypeDto, mosaic: MosaicBuilder, targetPublicKey: KeyDto) {
super(version, type);
this.mosaic = mosaic;
this.targetPublicKey = targetPublicKey;
}

/**
* Creates an instance of BalanceChangeReceiptBuilder from binary payload.
*
* @param payload Byte payload to use to serialize the object.
* @return Instance of BalanceChangeReceiptBuilder.
*/
public static loadFromBinary(payload: Uint8Array): BalanceChangeReceiptBuilder {
const byteArray = Array.from(payload);
const superObject = ReceiptBuilder.loadFromBinary(Uint8Array.from(byteArray));
byteArray.splice(0, superObject.getSize());
const mosaic = MosaicBuilder.loadFromBinary(Uint8Array.from(byteArray));
byteArray.splice(0, mosaic.getSize());
const targetPublicKey = KeyDto.loadFromBinary(Uint8Array.from(byteArray));
byteArray.splice(0, targetPublicKey.getSize());
return new BalanceChangeReceiptBuilder(superObject.version, superObject.type, mosaic, targetPublicKey);
}

/**
* Gets mosaic.
*
* @return Mosaic.
*/
public getMosaic(): MosaicBuilder {
return this.mosaic;
}

/**
* Gets account public key.
*
* @return Account public key.
*/
public getTargetPublicKey(): KeyDto {
return this.targetPublicKey;
}

/**
* Gets the size of the object.
*
* @return Size in bytes.
*/
public getSize(): number {
let size: number = super.getSize();
size += this.mosaic.getSize();
size += this.targetPublicKey.getSize();
return size;
}

/**
* Serializes an object to bytes.
*
* @return Serialized bytes.
*/
public serialize(): Uint8Array {
let newArray = Uint8Array.from([]);
const superBytes = super.serialize();
newArray = GeneratorUtils.concatTypedArrays(newArray, superBytes);
const mosaicBytes = this.mosaic.serialize();
newArray = GeneratorUtils.concatTypedArrays(newArray, mosaicBytes);
const targetPublicKeyBytes = this.targetPublicKey.serialize();
newArray = GeneratorUtils.concatTypedArrays(newArray, targetPublicKeyBytes);
return newArray;
}
}
Loading