Skip to content

Commit 6c40ea5

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 18e0cae commit 6c40ea5

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
@@ -35,6 +35,7 @@ import { Transaction } from './Transaction';
3535
import { TransactionInfo } from './TransactionInfo';
3636
import { TransactionType } from './TransactionType';
3737
import { TransactionVersion } from './TransactionVersion';
38+
import { RawAddress } from '../../core/format';
3839

3940
/**
4041
* 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
@@ -37,6 +37,19 @@ import { Transaction } from './Transaction';
3737
import { TransactionInfo } from './TransactionInfo';
3838
import { TransactionType } from './TransactionType';
3939
import { TransactionVersion } from './TransactionVersion';
40+
import { MosaicDefinitionTransactionBuilder } from '../../infrastructure/catbuffer/MosaicDefinitionTransactionBuilder';
41+
import { SignatureDto } from '../../infrastructure/catbuffer/SignatureDto';
42+
import { KeyDto } from '../../infrastructure/catbuffer/KeyDto';
43+
import { EntityTypeDto } from '../../infrastructure/catbuffer/EntityTypeDto';
44+
import { AmountDto } from '../../infrastructure/catbuffer/AmountDto';
45+
import { TimestampDto } from '../../infrastructure/catbuffer/TimestampDto';
46+
import { MosaicNonceDto } from '../../infrastructure/catbuffer/MosaicNonceDto';
47+
import { MosaicIdDto } from '../../infrastructure/catbuffer/MosaicIdDto';
48+
import { MosaicFlagsDto } from '../../infrastructure/catbuffer/MosaicFlagsDto';
49+
import { MosaicFlags } from '../mosaic/MosaicFlag';
50+
import { BlockDurationDto } from '../../infrastructure/catbuffer/BlockDurationDto';
51+
import { Convert } from '../../core/format';
52+
import { GeneratorUtils } from '../../infrastructure/catbuffer/GeneratorUtils';
4053

4154
/**
4255
* 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,
@@ -204,7 +204,7 @@ describe('AccountRestrictionTransaction', () => {
204204
NetworkType.MIJIN_TEST,
205205
);
206206

207-
const signedTransaction = mosaicRestrictionTransaction.signWith(account, generationHash);
207+
const signedTransaction = mosaicRestrictionTransaction.signWithCatbuffer(account, generationHash);
208208

209209
expect(signedTransaction.payload.substring(
210210
240,
@@ -246,7 +246,7 @@ describe('AccountRestrictionTransaction', () => {
246246
NetworkType.MIJIN_TEST,
247247
);
248248

249-
const signedTransaction = operationRestrictionTransaction.signWith(account, generationHash);
249+
const signedTransaction = operationRestrictionTransaction.signWithCatbuffer(account, generationHash);
250250

251251
expect(signedTransaction.payload.substring(
252252
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)