Skip to content

Commit e6a9f06

Browse files
committed
Added ts catbuffer codes (without aggregateTx)
Appended new signwithCatbuffer method in Transaction (temp) Applied catbuffer builders on standalone transaction (builder) Updated unit tests
1 parent a70afb4 commit e6a9f06

11 files changed

+97
-10
lines changed

src/model/transaction/AccountOperationRestrictionTransaction.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,13 @@ import { Transaction } from './Transaction';
3232
import { TransactionInfo } from './TransactionInfo';
3333
import { TransactionType } from './TransactionType';
3434
import { TransactionVersion } from './TransactionVersion';
35+
import { AccountOperationRestrictionModificationBuilder } from '../../infrastructure/catbuffer/AccountOperationRestrictionModificationBuilder';
36+
import { AccountOperationRestrictionTransactionBuilder } from '../../infrastructure/catbuffer/AccountOperationRestrictionTransactionBuilder';
37+
import { SignatureDto } from '../../infrastructure/catbuffer/SignatureDto';
38+
import { KeyDto } from '../../infrastructure/catbuffer/KeyDto';
39+
import { EntityTypeDto } from '../../infrastructure/catbuffer/EntityTypeDto';
40+
import { AmountDto } from '../../infrastructure/catbuffer/AmountDto';
41+
import { TimestampDto } from '../../infrastructure/catbuffer/TimestampDto';
3542

3643
export class AccountOperationRestrictionTransaction extends Transaction {
3744

src/model/transaction/AddressAliasTransaction.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ import { Transaction } from './Transaction';
3636
import { TransactionInfo } from './TransactionInfo';
3737
import { TransactionType } from './TransactionType';
3838
import { TransactionVersion } from './TransactionVersion';
39+
import { RawAddress } from '../../core/format';
3940

4041
/**
4142
* In case a mosaic has the flag 'supplyMutable' set to true, the creator of the mosaic can change the supply,

src/model/transaction/MosaicDefinitionTransaction.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,19 @@ import { Transaction } from './Transaction';
3939
import { TransactionInfo } from './TransactionInfo';
4040
import { TransactionType } from './TransactionType';
4141
import { TransactionVersion } from './TransactionVersion';
42+
import { MosaicDefinitionTransactionBuilder } from '../../infrastructure/catbuffer/MosaicDefinitionTransactionBuilder';
43+
import { SignatureDto } from '../../infrastructure/catbuffer/SignatureDto';
44+
import { KeyDto } from '../../infrastructure/catbuffer/KeyDto';
45+
import { EntityTypeDto } from '../../infrastructure/catbuffer/EntityTypeDto';
46+
import { AmountDto } from '../../infrastructure/catbuffer/AmountDto';
47+
import { TimestampDto } from '../../infrastructure/catbuffer/TimestampDto';
48+
import { MosaicNonceDto } from '../../infrastructure/catbuffer/MosaicNonceDto';
49+
import { MosaicIdDto } from '../../infrastructure/catbuffer/MosaicIdDto';
50+
import { MosaicFlagsDto } from '../../infrastructure/catbuffer/MosaicFlagsDto';
51+
import { MosaicFlags } from '../mosaic/MosaicFlag';
52+
import { BlockDurationDto } from '../../infrastructure/catbuffer/BlockDurationDto';
53+
import { Convert } from '../../core/format';
54+
import { GeneratorUtils } from '../../infrastructure/catbuffer/GeneratorUtils';
4255

4356
/**
4457
* Before a mosaic can be created or transferred, a corresponding definition of the mosaic has to be created and published to the network.

src/model/transaction/Transaction.ts

Lines changed: 64 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,16 @@ export abstract class Transaction {
112112
*/
113113
protected abstract generateEmbeddedBytes(): Uint8Array;
114114

115+
/**
116+
* @internal
117+
*/
118+
protected abstract buildTransaction(): VerifiableTransaction;
119+
120+
/**
121+
* @internal
122+
*/
123+
protected abstract generateBytes(): Uint8Array;
124+
115125
/**
116126
* @internal
117127
* Serialize and sign transaction creating a new SignedTransaction
@@ -142,8 +152,60 @@ export abstract class Transaction {
142152
}
143153

144154
/**
145-
* Converts the transaction into AggregateTransaction compatible
146-
* @returns {Array.<*>} AggregateTransaction bytes
155+
* @internal
156+
* Serialize and sign transaction creating a new SignedTransaction
157+
* @param account - The account to sign the transaction
158+
* @param generationHash - Network generation hash hex
159+
* @param {SignSchema} signSchema The Sign Schema. (KECCAK_REVERSED_KEY / SHA3)
160+
* @returns {SignedTransaction}
161+
*/
162+
public signWithCatbuffer(account: Account, generationHash: string, signSchema: SignSchema = SignSchema.SHA3): SignedTransaction {
163+
const generationHashBytes = Array.from(Convert.hexToUint8(generationHash));
164+
const byteBuffer = Array.from(this.generateBytes());
165+
const signingBytes = generationHashBytes.concat(byteBuffer.slice(4 + 64 + 32));
166+
const keyPairEncoded = KeyPair.createKeyPairFromPrivateKeyString(account.privateKey, signSchema);
167+
const signature = Array.from(KeyPair.sign(account, new Uint8Array(signingBytes), signSchema));
168+
const signedTransactionBuffer = byteBuffer
169+
.splice(0, 4)
170+
.concat(signature)
171+
.concat(Array.from(keyPairEncoded.publicKey))
172+
.concat(byteBuffer
173+
.splice(64 + 32, byteBuffer.length));
174+
const payload = Convert.uint8ToHex(signedTransactionBuffer);
175+
return new SignedTransaction(
176+
payload,
177+
this.createTransactionHash(payload, generationHashBytes),
178+
account.publicKey,
179+
this.type,
180+
this.networkType);
181+
}
182+
183+
/**
184+
* Generate transaction hash hex
185+
* @param {string} transactionPayload HexString Payload
186+
* @param {Array<number>} generationHashBuffer Network generation hash byte
187+
* @returns {string} Returns Transaction Payload hash
188+
*/
189+
public createTransactionHash(transactionPayload: string, generationHashBuffer: number[]): string {
190+
const byteBuffer = Array.from(Convert.hexToUint8(transactionPayload));
191+
const signingBytes = byteBuffer
192+
.slice(4, 36)
193+
.concat(byteBuffer
194+
.slice(4 + 64, 4 + 64 + 32))
195+
.concat(generationHashBuffer)
196+
.concat(byteBuffer
197+
.splice(4 + 64 + 32, byteBuffer.length));
198+
199+
const hash = new Uint8Array(32);
200+
201+
SHA3Hasher.func(hash, signingBytes, 32);
202+
203+
return Convert.uint8ToHex(hash);
204+
}
205+
206+
/**
207+
* @internal
208+
* @returns {Array<number>}
147209
*/
148210
public aggregateTransaction(): number[] {
149211
const signer = Convert.hexToUint8(this.signer!.publicKey);

test/model/transaction/AccountLinkTransaction.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ describe('AccountLinkTransaction', () => {
6666
expect(accountLinkTransaction.linkAction).to.be.equal(1);
6767
expect(accountLinkTransaction.remoteAccountKey).to.be.equal(account.publicKey);
6868

69-
const signedTransaction = accountLinkTransaction.signWith(account, generationHash);
69+
const signedTransaction = accountLinkTransaction.signWithCatbuffer(account, generationHash);
7070

7171
expect(signedTransaction.payload.substring(
7272
240,

test/model/transaction/AccountRestrictionTransaction.spec.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ describe('AccountRestrictionTransaction', () => {
162162
NetworkType.MIJIN_TEST,
163163
);
164164

165-
const signedTransaction = addressRestrictionTransaction.signWith(account, generationHash);
165+
const signedTransaction = addressRestrictionTransaction.signWithCatbuffer(account, generationHash);
166166

167167
expect(signedTransaction.payload.substring(
168168
240,
@@ -213,7 +213,7 @@ describe('AccountRestrictionTransaction', () => {
213213
NetworkType.MIJIN_TEST,
214214
);
215215

216-
const signedTransaction = mosaicRestrictionTransaction.signWith(account, generationHash);
216+
const signedTransaction = mosaicRestrictionTransaction.signWithCatbuffer(account, generationHash);
217217

218218
expect(signedTransaction.payload.substring(
219219
240,
@@ -266,7 +266,7 @@ describe('AccountRestrictionTransaction', () => {
266266
NetworkType.MIJIN_TEST,
267267
);
268268

269-
const signedTransaction = operationRestrictionTransaction.signWith(account, generationHash);
269+
const signedTransaction = operationRestrictionTransaction.signWithCatbuffer(account, generationHash);
270270

271271
expect(signedTransaction.payload.substring(
272272
240,

test/model/transaction/AddressAliasTransaction.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ describe('AddressAliasTransaction', () => {
8080
expect(addressAliasTransaction.namespaceId.id.higher).to.be.equal(3779697293);
8181
expect(addressAliasTransaction.address.plain()).to.be.equal('SBILTA367K2LX2FEXG5TFWAS7GEFYAGY7QLFBYKC');
8282

83-
const signedTransaction = addressAliasTransaction.signWith(account, generationHash);
83+
const signedTransaction = addressAliasTransaction.signWithCatbuffer(account, generationHash);
8484

8585
expect(signedTransaction.payload.substring(
8686
240,

test/model/transaction/ModifyMultisigAccountTransaction.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ describe('ModifyMultisigAccountTransaction', () => {
110110
expect(modifyMultisigAccountTransaction.modifications[1].cosignatoryPublicAccount.publicKey)
111111
.to.be.equal('B1B5581FC81A6970DEE418D2C2978F2724228B7B36C5C6DF71B0162BB04778B4');
112112

113-
const signedTransaction = modifyMultisigAccountTransaction.signWith(account, generationHash);
113+
const signedTransaction = modifyMultisigAccountTransaction.signWithCatbuffer(account, generationHash);
114114

115115
expect(signedTransaction.payload.substring(
116116
240,

test/model/transaction/MosaicAliasTransaction.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ describe('MosaicAliasTransaction', () => {
8080
expect(mosaicAliasTransaction.mosaicId.id.lower).to.be.equal(2262289484);
8181
expect(mosaicAliasTransaction.mosaicId.id.higher).to.be.equal(3405110546);
8282

83-
const signedTransaction = mosaicAliasTransaction.signWith(account, generationHash);
83+
const signedTransaction = mosaicAliasTransaction.signWithCatbuffer(account, generationHash);
8484

8585
expect(signedTransaction.payload.substring(
8686
240,

test/model/transaction/MosaicDefinitionTransaction.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ describe('MosaicDefinitionTransaction', () => {
9393
expect(mosaicDefinitionTransaction.mosaicProperties.transferable).to.be.equal(true);
9494
expect(mosaicDefinitionTransaction.mosaicProperties.restrictable).to.be.equal(true);
9595

96-
const signedTransaction = mosaicDefinitionTransaction.signWith(account, generationHash);
96+
const signedTransaction = mosaicDefinitionTransaction.signWithCatbuffer(account, generationHash);
9797

9898
expect(signedTransaction.payload.substring(
9999
240,

0 commit comments

Comments
 (0)