Skip to content

Commit 2cd728d

Browse files
Lazy Ninalazynina
authored andcommitted
Add transcoder for stake transaction metadata. Add support for approve component for this new txn type.
1 parent 34af38b commit 2cd728d

File tree

4 files changed

+51
-0
lines changed

4 files changed

+51
-0
lines changed

src/app/approve/approve.component.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ import {
3939
TransactionSpendingLimit,
4040
TransactionMetadataRegisterAsValidator,
4141
TransactionMetadataUnregisterAsValidator,
42+
TransactionMetadataStake,
4243
} from '../../lib/deso/transaction';
4344
import { ExtraData } from '../../types/identity';
4445
import { AccountService } from '../account.service';
@@ -597,6 +598,18 @@ export class ApproveComponent implements OnInit {
597598
case TransactionMetadataUnregisterAsValidator:
598599
description = 'unregister as a validator';
599600
break;
601+
case TransactionMetadataStake:
602+
const stakeMetadata = this.transaction
603+
.metadata as TransactionMetadataStake;
604+
const stakeValidatorPublicKey = this.base58KeyCheck(
605+
stakeMetadata.validatorPublicKey
606+
);
607+
publicKeys = [stakeValidatorPublicKey];
608+
const stakeAmountNanos = this.hexNanosToUnitString(
609+
stakeMetadata.stakeAmountNanos
610+
);
611+
description = `stake ${stakeAmountNanos} $DESO to ${stakeValidatorPublicKey}`;
612+
break;
600613
}
601614

602615
// Set the transaction description based on the description populated with public keys.
@@ -617,6 +630,8 @@ export class ApproveComponent implements OnInit {
617630
return bs58check.encode(Buffer.from([...prefix, ...keyBytes]));
618631
}
619632

633+
// TODO: create hexBaseUnitsToUnitString function to support proper
634+
// DAO Coin base unit conversions.
620635
hexNanosToUnitString(nanos: Buffer): string {
621636
return this.nanosToUnitString(parseInt(nanos.toString('hex'), 16));
622637
}

src/app/identity.service.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ import {
3737
TransactionMetadataUpdateProfile,
3838
TransactionMetadataRegisterAsValidator,
3939
TransactionMetadataUnregisterAsValidator,
40+
TransactionMetadataStake,
4041
} from '../lib/deso/transaction';
4142
import { SwalHelper } from '../lib/helpers/swal-helper';
4243
import { AccessLevel, PublicUserInfo } from '../types/identity';
@@ -522,6 +523,7 @@ export class IdentityService {
522523
case TransactionMetadataDAOCoinLimitOrder:
523524
case TransactionMetadataRegisterAsValidator:
524525
case TransactionMetadataUnregisterAsValidator:
526+
case TransactionMetadataStake:
525527
return AccessLevel.Full;
526528

527529
case TransactionMetadataFollow:

src/lib/bindata/transcoders.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,26 @@ export function Optional<T>(transcoder: Transcoder<T>): Transcoder<T | null> {
9696
};
9797
}
9898

99+
export function BoolOptional<T>(
100+
transcoder: Transcoder<T>
101+
): Transcoder<T | null> {
102+
return {
103+
read: (bytes: Buffer) => {
104+
const existence = bytes.readUInt8(0) != 0;
105+
if (!existence) {
106+
return [null, bytes.slice(1)];
107+
}
108+
return transcoder.read(bytes.slice(1));
109+
},
110+
write: (value: T | null) => {
111+
if (value === null) {
112+
return Buffer.alloc(1);
113+
}
114+
return Buffer.concat([Buffer.alloc(1, 1), transcoder.write(value)]);
115+
},
116+
};
117+
}
118+
99119
export const ChunkBuffer = (width: number): Transcoder<Buffer[]> => ({
100120
read: (bytes) => {
101121
let [count, buffer] = bufToUvarint64(bytes);

src/lib/deso/transaction.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { BinaryRecord, Transcode } from '../bindata';
22
import {
33
ArrayOf,
44
Boolean,
5+
BoolOptional,
56
ChunkBuffer,
67
Enum,
78
FixedBuffer,
@@ -609,6 +610,18 @@ export class TransactionMetadataRegisterAsValidator extends TransactionMetadata
609610

610611
export class TransactionMetadataUnregisterAsValidator extends TransactionMetadata {}
611612

613+
export class TransactionMetadataStake extends TransactionMetadata {
614+
@Transcode(VarBuffer)
615+
validatorPublicKey: Buffer = Buffer.alloc(0);
616+
617+
@Transcode(Uint8)
618+
rewardMethod: number = 0;
619+
620+
// TODO: We may want a better way to handle uint256s.
621+
@Transcode(BoolOptional(VarBuffer))
622+
stakeAmountNanos: Buffer = Buffer.alloc(0);
623+
}
624+
612625
export const TransactionTypeMetadataMap = {
613626
1: TransactionMetadataBlockReward,
614627
2: TransactionMetadataBasicTransfer,
@@ -644,6 +657,7 @@ export const TransactionTypeMetadataMap = {
644657
33: TransactionMetadataNewMessage,
645658
34: TransactionMetadataRegisterAsValidator,
646659
35: TransactionMetadataUnregisterAsValidator,
660+
36: TransactionMetadataStake,
647661
};
648662

649663
export class Transaction extends BinaryRecord {

0 commit comments

Comments
 (0)