@@ -7,6 +7,19 @@ import { TransactionAction } from '../../interfaces';
77import { checkIfIsTimelockedStaking } from '../stake' ;
88import { isMigrationTransaction , isUnlockTimelockedObjectTransaction } from '..' ;
99
10+ export const ACTION_LABELS : Record < TransactionAction , string > = {
11+ [ TransactionAction . Send ] : 'Sent' ,
12+ [ TransactionAction . Receive ] : 'Received' ,
13+ [ TransactionAction . Transaction ] : 'Transaction' ,
14+ [ TransactionAction . Staked ] : 'Stake' ,
15+ [ TransactionAction . Unstaked ] : 'Unstake' ,
16+ [ TransactionAction . TimelockedStaked ] : 'Stake Vesting' ,
17+ [ TransactionAction . TimelockedUnstaked ] : 'Unstake Vesting' ,
18+ [ TransactionAction . TimelockedCollect ] : 'Collect Vesting' ,
19+ [ TransactionAction . Migration ] : 'Migration' ,
20+ [ TransactionAction . PersonalMessage ] : 'Personal Message' ,
21+ } ;
22+
1023export const getTransactionAction = (
1124 transaction : IotaTransactionBlockResponse ,
1225 currentAddress ?: string ,
@@ -20,21 +33,27 @@ export const getTransactionAction = (
2033 } = checkIfIsTimelockedStaking ( transaction ?. events ) ;
2134
2235 const isMigration = isMigrationTransaction ( transaction . transaction ) ;
23- const isSupplyIncreaseVestingCollect = isUnlockTimelockedObjectTransaction (
24- transaction . transaction ,
25- ) ;
36+ const isVestingCollect = isUnlockTimelockedObjectTransaction ( transaction . transaction ) ;
37+
38+ // A coin transfer only has coin-related commands (no contract calls, publish or upgrade)
39+ const programmableTx = transaction . transaction ?. data . transaction ;
40+ const isCoinTransfer =
41+ programmableTx ?. kind === 'ProgrammableTransaction' &&
42+ ! programmableTx . transactions . some (
43+ ( cmd ) => 'MoveCall' in cmd || 'Publish' in cmd || 'Upgrade' in cmd ,
44+ ) ;
2645
2746 if ( isMigration ) {
2847 return TransactionAction . Migration ;
29- } else if ( isSupplyIncreaseVestingCollect ) {
48+ } else if ( isVestingCollect ) {
3049 return TransactionAction . TimelockedCollect ;
3150 } else if ( stakeTypeTransaction ) {
3251 return isTimelockedStaking ? TransactionAction . TimelockedStaked : TransactionAction . Staked ;
3352 } else if ( unstakeTypeTransaction ) {
3453 return isTimelockedUnstaking
3554 ? TransactionAction . TimelockedUnstaked
3655 : TransactionAction . Unstaked ;
37- } else if ( sender ) {
56+ } else if ( sender && isCoinTransfer ) {
3857 return sender === currentAddress ? TransactionAction . Send : TransactionAction . Receive ;
3958 } else {
4059 return TransactionAction . Transaction ;
0 commit comments