aboutsummaryrefslogtreecommitdiffstats
path: root/crypto
diff options
context:
space:
mode:
Diffstat (limited to 'crypto')
-rw-r--r--crypto/key_store_plain.go27
1 files changed, 25 insertions, 2 deletions
diff --git a/crypto/key_store_plain.go b/crypto/key_store_plain.go
index 6a8afe27d..e3150e9a9 100644
--- a/crypto/key_store_plain.go
+++ b/crypto/key_store_plain.go
@@ -27,11 +27,15 @@ import (
"encoding/hex"
"encoding/json"
"fmt"
- "github.com/ethereum/go-ethereum/common"
"io"
"io/ioutil"
"os"
"path/filepath"
+ "sort"
+ "syscall"
+ "time"
+
+ "github.com/ethereum/go-ethereum/common"
)
// TODO: rename to KeyStore when replacing existing KeyStore
@@ -118,8 +122,15 @@ func GetKeyAddresses(keysDirPath string) (addresses []common.Address, err error)
if err != nil {
return nil, err
}
+ var kfis keyFileInfos
for _, fileInfo := range fileInfos {
- address, err := hex.DecodeString(fileInfo.Name())
+ stat := fileInfo.Sys().(*syscall.Stat_t)
+ ctime := time.Unix(int64(stat.Ctimespec.Sec), int64(stat.Ctimespec.Nsec))
+ kfis = append(kfis, keyFileInfo{fileInfo.Name(), ctime})
+ }
+ sort.Sort(kfis)
+ for _, kfi := range kfis {
+ address, err := hex.DecodeString(kfi.name)
if err != nil {
continue
}
@@ -127,3 +138,15 @@ func GetKeyAddresses(keysDirPath string) (addresses []common.Address, err error)
}
return addresses, err
}
+
+type keyFileInfo struct {
+ name string
+ ctime time.Time
+}
+type keyFileInfos []keyFileInfo
+
+func (a keyFileInfos) Len() int { return len(a) }
+func (a keyFileInfos) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
+func (a keyFileInfos) Less(i, j int) bool {
+ return a[i].ctime.Before(a[j].ctime)
+}