OSDN Git Service

Hulk did something
[bytom/vapor.git] / blockchain / signers / idgenerate.go
1 package signers
2
3 import (
4         "encoding/binary"
5         "sync/atomic"
6         "time"
7
8         "github.com/vapor/encoding/base32"
9 )
10
11 //1<seq_id ,increase by 1
12 var seqID uint32
13
14 func nextSeqID() uint32 {
15
16         atomic.AddUint32(&seqID, 1)
17
18         return seqID
19 }
20
21 //IDGenerate generate signer unique id
22 func IDGenerate() string {
23         var ourEpochMS uint64 = 1496635208000
24         var n uint64
25
26         nowMS := uint64(time.Now().UnixNano() / 1e6)
27         seqIndex := uint64(nextSeqID())
28         seqID := uint64(seqIndex % 1024)
29         shardID := uint64(5)
30
31         n = (nowMS - ourEpochMS) << 23
32         n = n | (shardID << 10)
33         n = n | seqID
34
35         bin := make([]byte, 8)
36         binary.BigEndian.PutUint64(bin, n)
37         encodeString := base32.HexEncoding.WithPadding(base32.NoPadding).EncodeToString(bin)
38
39         return encodeString
40
41 }