-
Notifications
You must be signed in to change notification settings - Fork 9
/
utils.go
65 lines (55 loc) · 1.32 KB
/
utils.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
package multicast
import (
"crypto/sha256"
"math/rand"
"time"
"github.com/ethereum/go-ethereum/common"
"github.com/gauss-project/aurorafs/pkg/boson"
"github.com/gogf/gf/v2/os/gcache"
"github.com/gogf/gf/v2/os/gctx"
)
var (
cacheCtx = gctx.New()
cache = gcache.New()
)
func ConvertGIDs(GIDs [][]byte) []boson.Address {
var gid []boson.Address
for _, v := range GIDs {
gid = append(gid, boson.NewAddress(v))
}
return gid
}
func GenerateGID(name string) boson.Address {
b := sha256.Sum256([]byte(name))
return boson.NewAddress(b[:])
}
func RandomPeer(peers []boson.Address) boson.Address {
if len(peers) == 0 {
return boson.ZeroAddress
}
rnd := rand.Intn(len(peers))
return peers[rnd]
}
func RandomPeersLimit(peers []boson.Address, limit int) []boson.Address {
if limit <= 1 || len(peers) <= limit {
return peers
}
tmpOrigin := make([]boson.Address, len(peers))
copy(tmpOrigin, peers)
rand.Seed(time.Now().Unix())
rand.Shuffle(len(tmpOrigin), func(i int, j int) {
tmpOrigin[i], tmpOrigin[j] = tmpOrigin[j], tmpOrigin[i]
})
result := make([]boson.Address, 0, limit)
for index, value := range tmpOrigin {
if index == limit {
break
}
result = append(result, value)
}
return result
}
func ConvertHashToGID(h common.Hash) boson.Address {
s := h.Hex()[2:]
return boson.MustParseHexAddress(s)
}