OSDN Git Service

refactor list-unspent-outputs (#465)
[bytom/bytom-spv.git] / blockchain / query / annotated.go
1 package query
2
3 import (
4         "encoding/json"
5
6         "github.com/bytom/crypto/ed25519/chainkd"
7         chainjson "github.com/bytom/encoding/json"
8         "github.com/bytom/protocol/bc"
9 )
10
11 //AnnotatedTx means an annotated transaction.
12 type AnnotatedTx struct {
13         ID                     bc.Hash            `json:"tx_id"`
14         Timestamp              uint64             `json:"block_time"`
15         BlockID                bc.Hash            `json:"block_hash"`
16         BlockHeight            uint64             `json:"block_height"`
17         Position               uint32             `json:"block_index"`
18         BlockTransactionsCount uint32             `json:"block_transactions_count,omitempty"`
19         Inputs                 []*AnnotatedInput  `json:"inputs"`
20         Outputs                []*AnnotatedOutput `json:"outputs"`
21         StatusFail             bool               `json:"status_fail"`
22 }
23
24 //AnnotatedInput means an annotated transaction input.
25 type AnnotatedInput struct {
26         Type            string              `json:"type"`
27         AssetID         bc.AssetID          `json:"asset_id"`
28         AssetAlias      string              `json:"asset_alias,omitempty"`
29         AssetDefinition *chainjson.HexBytes `json:"asset_definition"`
30         Amount          uint64              `json:"amount"`
31         IssuanceProgram chainjson.HexBytes  `json:"issuance_program,omitempty"`
32         ControlProgram  chainjson.HexBytes  `json:"-"`
33         SpentOutputID   *bc.Hash            `json:"spent_output_id,omitempty"`
34         AccountID       string              `json:"account_id,omitempty"`
35         AccountAlias    string              `json:"account_alias,omitempty"`
36         Arbitrary       chainjson.HexBytes  `json:"arbitrary,omitempty"`
37 }
38
39 //AnnotatedOutput means an annotated transaction output.
40 type AnnotatedOutput struct {
41         Type            string              `json:"type"`
42         OutputID        bc.Hash             `json:"id"`
43         TransactionID   *bc.Hash            `json:"transaction_id,omitempty"`
44         Position        int                 `json:"position"`
45         AssetID         bc.AssetID          `json:"asset_id"`
46         AssetAlias      string              `json:"asset_alias,omitempty"`
47         AssetDefinition *chainjson.HexBytes `json:"asset_definition"`
48         Amount          uint64              `json:"amount"`
49         AccountID       string              `json:"account_id,omitempty"`
50         AccountAlias    string              `json:"account_alias,omitempty"`
51         ControlProgram  chainjson.HexBytes  `json:"control_program"`
52 }
53
54 //AnnotatedAccount means an annotated account.
55 type AnnotatedAccount struct {
56         ID       string           `json:"id"`
57         Alias    string           `json:"alias,omitempty"`
58         XPubs    []chainkd.XPub   `json:"xpubs"`
59         Quorum   int              `json:"quorum"`
60         Tags     *json.RawMessage `json:"tags"`
61         KeyIndex uint64           `json:"key_index"`
62 }
63
64 //AnnotatedAsset means an annotated asset.
65 type AnnotatedAsset struct {
66         ID              bc.AssetID         `json:"id"`
67         Alias           string             `json:"alias,omitempty"`
68         IssuanceProgram chainjson.HexBytes `json:"issuance_program"`
69         Keys            []*AssetKey        `json:"keys"`
70         Quorum          int                `json:"quorum"`
71         Definition      *json.RawMessage   `json:"definition"`
72         Tags            *json.RawMessage   `json:"tags"`
73 }
74
75 //AssetKey means an asset key.
76 type AssetKey struct {
77         RootXPub            chainkd.XPub         `json:"root_xpub"`
78         AssetPubkey         chainjson.HexBytes   `json:"asset_pubkey"`
79         AssetDerivationPath []chainjson.HexBytes `json:"asset_derivation_path"`
80 }
81
82 type AnnotatedUTXO struct {
83         Alias               string `json:"account_alias"`
84         OutputID            string `json:"id"`
85         AssetID             string `json:"asset_id"`
86         AssetAlias          string `json:"asset_alias"`
87         Amount              uint64 `json:"amount"`
88         AccountID           string `json:"account_id"`
89         Address             string `json:"address"`
90         ControlProgramIndex uint64 `json:"control_program_index"`
91         Program             string `json:"program"`
92         SourceID            string `json:"source_id"`
93         SourcePos           uint64 `json:"source_pos"`
94         ValidHeight         uint64 `json:"valid_height"`
95 }