From 7ef6db2dc990c57aed37fff21f3bd8839fe06772 Mon Sep 17 00:00:00 2001 From: Lazy Nina <> Date: Fri, 5 Jan 2024 13:37:41 -0500 Subject: [PATCH] Add transcoder for Unlock stake txn type. Add support for approve UI for this new txn type --- src/app/approve/approve.component.ts | 12 ++++++++++++ src/app/identity.service.ts | 2 ++ src/lib/deso/transaction.ts | 12 ++++++++++++ 3 files changed, 26 insertions(+) diff --git a/src/app/approve/approve.component.ts b/src/app/approve/approve.component.ts index 8f83e50a..74d95c1a 100644 --- a/src/app/approve/approve.component.ts +++ b/src/app/approve/approve.component.ts @@ -41,6 +41,7 @@ import { TransactionMetadataUnregisterAsValidator, TransactionMetadataStake, TransactionMetadataUnstake, + TransactionMetadataUnlockStake, } from '../../lib/deso/transaction'; import { ExtraData } from '../../types/identity'; import { AccountService } from '../account.service'; @@ -623,6 +624,17 @@ export class ApproveComponent implements OnInit { ); description = `unstake ${unstakeAmountNanos} $DESO from ${unstakeValidatorPublicKey}`; break; + case TransactionMetadataUnlockStake: + const unlockStakeMetadata = this.transaction + .metadata as TransactionMetadataUnlockStake; + const unlockStakeValidatorPublicKey = this.base58KeyCheck( + unlockStakeMetadata.validatorPublicKey + ); + publicKeys = [unlockStakeValidatorPublicKey]; + description = + `unlock stake from ${unlockStakeValidatorPublicKey}, ` + + `starting from epochs ${unlockStakeMetadata.startEpochNumber} to ${unlockStakeMetadata.endEpochNumber}`; + break; } // Set the transaction description based on the description populated with public keys. diff --git a/src/app/identity.service.ts b/src/app/identity.service.ts index 6e6abd68..90cdac6b 100644 --- a/src/app/identity.service.ts +++ b/src/app/identity.service.ts @@ -39,6 +39,7 @@ import { TransactionMetadataUnregisterAsValidator, TransactionMetadataStake, TransactionMetadataUnstake, + TransactionMetadataUnlockStake, } from '../lib/deso/transaction'; import { SwalHelper } from '../lib/helpers/swal-helper'; import { AccessLevel, PublicUserInfo } from '../types/identity'; @@ -526,6 +527,7 @@ export class IdentityService { case TransactionMetadataUnregisterAsValidator: case TransactionMetadataStake: case TransactionMetadataUnstake: + case TransactionMetadataUnlockStake: return AccessLevel.Full; case TransactionMetadataFollow: diff --git a/src/lib/deso/transaction.ts b/src/lib/deso/transaction.ts index bc07aa1c..4d97f6ee 100644 --- a/src/lib/deso/transaction.ts +++ b/src/lib/deso/transaction.ts @@ -630,6 +630,17 @@ export class TransactionMetadataUnstake extends TransactionMetadata { unstakeAmountNanos: Buffer = Buffer.alloc(0); } +export class TransactionMetadataUnlockStake extends TransactionMetadata { + @Transcode(VarBuffer) + validatorPublicKey: Buffer = Buffer.alloc(0); + + @Transcode(Uvarint64) + startEpochNumber: number = 0; + + @Transcode(Uvarint64) + endEpochNumber: number = 0; +} + export const TransactionTypeMetadataMap = { 1: TransactionMetadataBlockReward, 2: TransactionMetadataBasicTransfer, @@ -667,6 +678,7 @@ export const TransactionTypeMetadataMap = { 35: TransactionMetadataUnregisterAsValidator, 36: TransactionMetadataStake, 37: TransactionMetadataUnstake, + 38: TransactionMetadataUnlockStake, }; export class Transaction extends BinaryRecord {