From 0f54e5cf165ecc02cce5db8228aba1680174a638 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 | 3 ++- src/lib/deso/transaction.ts | 12 ++++++++++++ 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/src/app/approve/approve.component.ts b/src/app/approve/approve.component.ts index dd95463f..67098e0c 100644 --- a/src/app/approve/approve.component.ts +++ b/src/app/approve/approve.component.ts @@ -39,7 +39,7 @@ import { TransactionSpendingLimit, TransactionMetadataRegisterAsValidator, TransactionMetadataUnregisterAsValidator, - TransactionMetadataStake, TransactionMetadataUnstake, + TransactionMetadataStake, TransactionMetadataUnstake, TransactionMetadataUnlockStake, } from '../../lib/deso/transaction'; import { ExtraData } from '../../types/identity'; import { AccountService } from '../account.service'; @@ -622,6 +622,16 @@ 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 183cf9bb..053fc63b 100644 --- a/src/app/identity.service.ts +++ b/src/app/identity.service.ts @@ -37,7 +37,7 @@ import { TransactionMetadataUpdateProfile, TransactionMetadataRegisterAsValidator, TransactionMetadataUnregisterAsValidator, - TransactionMetadataStake, TransactionMetadataUnstake, + TransactionMetadataStake, TransactionMetadataUnstake, TransactionMetadataUnlockStake, } from '../lib/deso/transaction'; import { SwalHelper } from '../lib/helpers/swal-helper'; import { AccessLevel, PublicUserInfo } from '../types/identity'; @@ -525,6 +525,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 ecaeafad..460d0ecb 100644 --- a/src/lib/deso/transaction.ts +++ b/src/lib/deso/transaction.ts @@ -629,6 +629,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, @@ -666,6 +677,7 @@ export const TransactionTypeMetadataMap = { 35: TransactionMetadataUnregisterAsValidator, 36: TransactionMetadataStake, 37: TransactionMetadataUnstake, + 38: TransactionMetadataUnlockStake, }; export class Transaction extends BinaryRecord {