github.com/Finschia/finschia-sdk@v0.48.1/x/staking/types/keys_test.go (about) 1 package types_test 2 3 import ( 4 "bytes" 5 "encoding/hex" 6 "math/big" 7 "testing" 8 "time" 9 10 "github.com/stretchr/testify/require" 11 12 "github.com/Finschia/finschia-sdk/crypto/keys/ed25519" 13 sdk "github.com/Finschia/finschia-sdk/types" 14 "github.com/Finschia/finschia-sdk/x/staking/types" 15 ) 16 17 var ( 18 keysPK1 = ed25519.GenPrivKeyFromSecret([]byte{1}).PubKey() 19 keysPK2 = ed25519.GenPrivKeyFromSecret([]byte{2}).PubKey() 20 keysPK3 = ed25519.GenPrivKeyFromSecret([]byte{3}).PubKey() 21 keysAddr1 = keysPK1.Address() 22 keysAddr2 = keysPK2.Address() 23 keysAddr3 = keysPK3.Address() 24 ) 25 26 func TestGetValidatorPowerRank(t *testing.T) { 27 valAddr1 := sdk.ValAddress(keysAddr1) 28 val1 := newValidator(t, valAddr1, keysPK1) 29 val1.Tokens = sdk.ZeroInt() 30 val2, val3, val4 := val1, val1, val1 31 val2.Tokens = sdk.TokensFromConsensusPower(1, sdk.DefaultPowerReduction) 32 val3.Tokens = sdk.TokensFromConsensusPower(10, sdk.DefaultPowerReduction) 33 x := new(big.Int).Exp(big.NewInt(2), big.NewInt(40), big.NewInt(0)) 34 val4.Tokens = sdk.TokensFromConsensusPower(x.Int64(), sdk.DefaultPowerReduction) 35 36 tests := []struct { 37 validator types.Validator 38 wantHex string 39 }{ 40 {val1, "230000000000000000149c288ede7df62742fc3b7d0962045a8cef0f79f6"}, 41 {val2, "230000000000000001149c288ede7df62742fc3b7d0962045a8cef0f79f6"}, 42 {val3, "23000000000000000a149c288ede7df62742fc3b7d0962045a8cef0f79f6"}, 43 {val4, "230000010000000000149c288ede7df62742fc3b7d0962045a8cef0f79f6"}, 44 } 45 for i, tt := range tests { 46 got := hex.EncodeToString(types.GetValidatorsByPowerIndexKey(tt.validator, sdk.DefaultPowerReduction)) 47 48 require.Equal(t, tt.wantHex, got, "Keys did not match on test case %d", i) 49 } 50 } 51 52 func TestGetREDByValDstIndexKey(t *testing.T) { 53 tests := []struct { 54 delAddr sdk.AccAddress 55 valSrcAddr sdk.ValAddress 56 valDstAddr sdk.ValAddress 57 wantHex string 58 }{ 59 { 60 sdk.AccAddress(keysAddr1), sdk.ValAddress(keysAddr1), sdk.ValAddress(keysAddr1), 61 "361463d771218209d8bd03c482f69dfba57310f086091463d771218209d8bd03c482f69dfba57310f086091463d771218209d8bd03c482f69dfba57310f08609", 62 }, 63 { 64 sdk.AccAddress(keysAddr1), sdk.ValAddress(keysAddr2), sdk.ValAddress(keysAddr3), 65 "36143ab62f0d93849be495e21e3e9013a517038f45bd1463d771218209d8bd03c482f69dfba57310f08609145ef3b5f25c54946d4a89fc0d09d2f126614540f2", 66 }, 67 { 68 sdk.AccAddress(keysAddr2), sdk.ValAddress(keysAddr1), sdk.ValAddress(keysAddr3), 69 "36143ab62f0d93849be495e21e3e9013a517038f45bd145ef3b5f25c54946d4a89fc0d09d2f126614540f21463d771218209d8bd03c482f69dfba57310f08609", 70 }, 71 } 72 for i, tt := range tests { 73 got := hex.EncodeToString(types.GetREDByValDstIndexKey(tt.delAddr, tt.valSrcAddr, tt.valDstAddr)) 74 75 require.Equal(t, tt.wantHex, got, "Keys did not match on test case %d", i) 76 } 77 } 78 79 func TestGetREDByValSrcIndexKey(t *testing.T) { 80 tests := []struct { 81 delAddr sdk.AccAddress 82 valSrcAddr sdk.ValAddress 83 valDstAddr sdk.ValAddress 84 wantHex string 85 }{ 86 { 87 sdk.AccAddress(keysAddr1), sdk.ValAddress(keysAddr1), sdk.ValAddress(keysAddr1), 88 "351463d771218209d8bd03c482f69dfba57310f086091463d771218209d8bd03c482f69dfba57310f086091463d771218209d8bd03c482f69dfba57310f08609", 89 }, 90 { 91 sdk.AccAddress(keysAddr1), sdk.ValAddress(keysAddr2), sdk.ValAddress(keysAddr3), 92 "35145ef3b5f25c54946d4a89fc0d09d2f126614540f21463d771218209d8bd03c482f69dfba57310f08609143ab62f0d93849be495e21e3e9013a517038f45bd", 93 }, 94 { 95 sdk.AccAddress(keysAddr2), sdk.ValAddress(keysAddr1), sdk.ValAddress(keysAddr3), 96 "351463d771218209d8bd03c482f69dfba57310f08609145ef3b5f25c54946d4a89fc0d09d2f126614540f2143ab62f0d93849be495e21e3e9013a517038f45bd", 97 }, 98 } 99 for i, tt := range tests { 100 got := hex.EncodeToString(types.GetREDByValSrcIndexKey(tt.delAddr, tt.valSrcAddr, tt.valDstAddr)) 101 102 require.Equal(t, tt.wantHex, got, "Keys did not match on test case %d", i) 103 } 104 } 105 106 func TestGetValidatorQueueKey(t *testing.T) { 107 ts := time.Now() 108 height := int64(1024) 109 110 bz := types.GetValidatorQueueKey(ts, height) 111 rTs, rHeight, err := types.ParseValidatorQueueKey(bz) 112 require.NoError(t, err) 113 require.Equal(t, ts.UTC(), rTs.UTC()) 114 require.Equal(t, rHeight, height) 115 } 116 117 func TestTestGetValidatorQueueKeyOrder(t *testing.T) { 118 ts := time.Now().UTC() 119 height := int64(1000) 120 121 endKey := types.GetValidatorQueueKey(ts, height) 122 123 keyA := types.GetValidatorQueueKey(ts.Add(-10*time.Minute), height-10) 124 keyB := types.GetValidatorQueueKey(ts.Add(-5*time.Minute), height+50) 125 keyC := types.GetValidatorQueueKey(ts.Add(10*time.Minute), height+100) 126 127 require.Equal(t, -1, bytes.Compare(keyA, endKey)) // keyA <= endKey 128 require.Equal(t, -1, bytes.Compare(keyB, endKey)) // keyB <= endKey 129 require.Equal(t, 1, bytes.Compare(keyC, endKey)) // keyB >= endKey 130 }