OSDN Git Service

6b0860cf9e6ebb274477cbf438be4b56d89c177f
[bytom/bytom.git] / account / indexer.go
1 package account
2
3 import (
4         "encoding/json"
5
6         "github.com/bytom/blockchain/query"
7         "github.com/bytom/protocol/bc"
8 )
9
10 const (
11         //UTXOPreFix is StandardUTXOKey prefix
12         UTXOPreFix = "ACU:"
13         //SUTXOPrefix is ContractUTXOKey prefix
14         SUTXOPrefix = "SCU:"
15 )
16
17 // StandardUTXOKey makes an account unspent outputs key to store
18 func StandardUTXOKey(id bc.Hash) []byte {
19         name := id.String()
20         return []byte(UTXOPreFix + name)
21 }
22
23 // ContractUTXOKey makes a smart contract unspent outputs key to store
24 func ContractUTXOKey(id bc.Hash) []byte {
25         name := id.String()
26         return []byte(SUTXOPrefix + name)
27 }
28
29 var emptyJSONObject = json.RawMessage(`{}`)
30
31 //Annotated init an annotated account object
32 func Annotated(a *Account) (*query.AnnotatedAccount, error) {
33         aa := &query.AnnotatedAccount{
34                 ID:       a.ID,
35                 Alias:    a.Alias,
36                 Quorum:   a.Quorum,
37                 Tags:     &emptyJSONObject,
38                 XPubs:    a.XPubs,
39                 KeyIndex: a.KeyIndex,
40         }
41
42         tags, err := json.Marshal(a.Tags)
43         if err != nil {
44                 return nil, err
45         }
46         if len(tags) > 0 {
47                 rawTags := json.RawMessage(tags)
48                 aa.Tags = &rawTags
49         }
50
51         return aa, nil
52 }