5 "github.com/bytom/encoding/base32"
10 //1<seq_id ,increase by 1
13 func next_seq_id() uint32 {
15 atomic.AddUint32(&seq_id, 1)
20 // see the SQL function next_cahin_id in schema.sql on https://github.com/chain/chain
21 func Idgenerate(prefix string) (string, uint64) {
22 var our_epoch_ms uint64 = 1496635208000
25 now_ms := uint64(time.Now().UnixNano() / 1e6)
26 seq_index := uint64(next_seq_id())
27 seq_id := uint64(seq_index % 1024)
30 n = (now_ms - our_epoch_ms) << 23
31 n = n | (shard_id << 10)
34 bin := make([]byte, 8)
35 binary.BigEndian.PutUint64(bin, n)
36 encodestring := base32.HexEncoding.WithPadding(base32.NoPadding).EncodeToString(bin)
38 return prefix + encodestring, seq_index