@@ -43,6 +43,10 @@ import {
4343 TransactionMetadataUnstake ,
4444 TransactionMetadataUnlockStake ,
4545 TransactionMetadataUnjailValidator ,
46+ TransactionMetadataCoinLockup ,
47+ TransactionMetadataUpdateCoinLockupParams ,
48+ TransactionMetadataCoinLockupTransfer ,
49+ TransactionMetadataCoinUnlock ,
4650} from '../../lib/deso/transaction' ;
4751import { ExtraData } from '../../types/identity' ;
4852import { AccountService } from '../account.service' ;
@@ -310,12 +314,12 @@ export class ApproveComponent implements OnInit {
310314 ) ;
311315 publicKeys = [ daoCoinPublicKey ] ;
312316 if ( daoCoinMetadata . operationType === 0 ) {
313- const mintAmount = this . hexNanosToUnitString (
317+ const mintAmount = this . hexBaseUnitsToUnitString (
314318 daoCoinMetadata . coinsToMintNanos
315319 ) ;
316320 description = `mint ${ mintAmount } ${ daoCoinPublicKey } DAO coins` ;
317321 } else if ( daoCoinMetadata . operationType === 1 ) {
318- const burnAmount = this . hexNanosToUnitString (
322+ const burnAmount = this . hexBaseUnitsToUnitString (
319323 daoCoinMetadata . coinsToBurnNanos
320324 ) ;
321325 description = `burn ${ burnAmount } ${ daoCoinPublicKey } DAO coins` ;
@@ -328,7 +332,7 @@ export class ApproveComponent implements OnInit {
328332 case TransactionMetadataTransferDAOCoin :
329333 const daoCoinTransferMetadata = this . transaction
330334 . metadata as TransactionMetadataTransferDAOCoin ;
331- const daoCoinTransferAmount = this . hexNanosToUnitString (
335+ const daoCoinTransferAmount = this . hexBaseUnitsToUnitString (
332336 daoCoinTransferMetadata . daoCoinToTransferNanos
333337 ) ;
334338 const daoCoinTransferPublicKey = this . base58KeyCheck (
@@ -394,6 +398,7 @@ export class ApproveComponent implements OnInit {
394398 this . hexScaledExchangeRateToFloat (
395399 daoCoinLimitOrderMetadata . scaledExchangeRateCoinsToSellPerCoinToBuy
396400 ) ;
401+ // TODO: figure out if we need to use hexBaseUnitsToUnitString here.
397402 const quantityToFill = this . hexNanosToUnitString (
398403 daoCoinLimitOrderMetadata . quantityToFillInBaseUnits
399404 ) ;
@@ -639,6 +644,76 @@ export class ApproveComponent implements OnInit {
639644 case TransactionMetadataUnjailValidator :
640645 description = 'unjail your validator' ;
641646 break ;
647+ case TransactionMetadataCoinLockup :
648+ // TODO: enhanced description for coin lockup.
649+ // Do we need to special case lock ups of DESO?
650+ const coinLockupMetadata = this . transaction
651+ . metadata as TransactionMetadataCoinLockup ;
652+ const lockupAmount = this . hexBaseUnitsToUnitString (
653+ coinLockupMetadata . lockupAmountBaseUnits
654+ ) ;
655+ const lockupProfilePubKey = this . base58KeyCheck (
656+ coinLockupMetadata . profilePublicKey
657+ ) ;
658+ const lockUpRecipientPubKey = this . base58KeyCheck (
659+ coinLockupMetadata . recipientPublicKey
660+ ) ;
661+ publicKeys = [ lockupProfilePubKey , lockUpRecipientPubKey ] ;
662+ description = `lockup ${ lockupAmount } of your ${ lockupProfilePubKey } coins` ;
663+ break ;
664+ case TransactionMetadataUpdateCoinLockupParams :
665+ // TODO: enhanced description for coin lockup params
666+ const updateCoinLockupParamsMetadata = this . transaction
667+ . metadata as TransactionMetadataUpdateCoinLockupParams ;
668+ description =
669+ `update your coin lockup params\n` +
670+ `${
671+ updateCoinLockupParamsMetadata . removeYieldCurvePoint
672+ ? 'Remove'
673+ : 'Add'
674+ } yield curve point with
675+ ${
676+ updateCoinLockupParamsMetadata . lockupYieldAPYBasisPoints / 100
677+ } % APY for a lockup of
678+ ${
679+ updateCoinLockupParamsMetadata . lockupYieldDurationNanoSecs
680+ } nanoseconds
681+ ${
682+ ! updateCoinLockupParamsMetadata . newLockupTransferRestrictions
683+ ? ''
684+ : 'and update your lockup transfer restrictions'
685+ } `;
686+
687+ break ;
688+ case TransactionMetadataCoinLockupTransfer :
689+ // TODO: enhanced description for coin lockup transfer
690+ // Do we need a special case for DESO?
691+ const coinLockupTransferMetadata = this . transaction
692+ . metadata as TransactionMetadataCoinLockupTransfer ;
693+ const lockupTransferAmount = this . hexBaseUnitsToUnitString (
694+ coinLockupTransferMetadata . lockedCoinsToTransferBaseUnits
695+ ) ;
696+ const lockupTransferProfilePubKey = this . base58KeyCheck (
697+ coinLockupTransferMetadata . profilePublicKey
698+ ) ;
699+ const lockupTransferRecipientPubKey = this . base58KeyCheck (
700+ coinLockupTransferMetadata . recipientPublicKey
701+ ) ;
702+ publicKeys = [
703+ lockupTransferProfilePubKey ,
704+ lockupTransferRecipientPubKey ,
705+ ] ;
706+ description = `transfer ${ lockupTransferAmount } of your locked ${ lockupTransferProfilePubKey } coins to ${ lockupTransferRecipientPubKey } ` ;
707+ break ;
708+ case TransactionMetadataCoinUnlock :
709+ const coinUnlockMetadata = this . transaction
710+ . metadata as TransactionMetadataCoinUnlock ;
711+ const unlockProfilePubKey = this . base58KeyCheck (
712+ coinUnlockMetadata . profilePublicKey
713+ ) ;
714+ publicKeys = [ unlockProfilePubKey ] ;
715+ description = `unlock your locked ${ unlockProfilePubKey } coins` ;
716+ break ;
642717 }
643718
644719 // Set the transaction description based on the description populated with public keys.
@@ -659,16 +734,24 @@ export class ApproveComponent implements OnInit {
659734 return bs58check . encode ( Buffer . from ( [ ...prefix , ...keyBytes ] ) ) ;
660735 }
661736
662- // TODO: create hexBaseUnitsToUnitString function to support proper
663- // DAO Coin base unit conversions.
737+ // uint256 to DESO nano conversions.
664738 hexNanosToUnitString ( nanos : Buffer ) : string {
665739 return this . nanosToUnitString ( parseInt ( nanos . toString ( 'hex' ) , 16 ) ) ;
666740 }
667741
742+ // unit256 to base unit conversions.
743+ hexBaseUnitsToUnitString ( baseUnits : Buffer ) : string {
744+ return this . baseUnitsToUnitString ( parseInt ( baseUnits . toString ( 'hex' ) , 16 ) ) ;
745+ }
746+
668747 nanosToUnitString ( nanos : number ) : string {
669748 return this . toFixedLengthDecimalString ( nanos / 1e9 ) ;
670749 }
671750
751+ baseUnitsToUnitString ( baseUnits : number ) : string {
752+ return this . toFixedLengthDecimalString ( baseUnits / 1e18 ) ;
753+ }
754+
672755 hexScaledExchangeRateToFloat ( hex : Buffer ) : number {
673756 return parseInt ( hex . toString ( 'hex' ) , 16 ) / 1e38 ;
674757 }
0 commit comments