-
Notifications
You must be signed in to change notification settings - Fork 9
/
Copy pathchain_api.go
128 lines (115 loc) · 3.63 KB
/
chain_api.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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
package node
import (
"context"
"fmt"
"strings"
)
// ChainAPI -
type ChainAPI interface {
ChainID(ctx context.Context) (string, error)
InvalidBlocks(ctx context.Context) ([]InvalidBlock, error)
InvalidBlock(ctx context.Context, blockHash string) (InvalidBlock, error)
IsBootstrapped(ctx context.Context) (Bootstrapped, error)
LevelsCaboose(ctx context.Context) (Caboose, error)
LevelsCheckpoint(ctx context.Context) (Checkpoint, error)
LevelsSavepoint(ctx context.Context) (Savepoint, error)
PendingOperations(ctx context.Context) (MempoolResponse, error)
}
// Chain -
type Chain struct {
baseURL string
chainID string
client *client
}
// NewChain -
func NewChain(baseURL, chainID string) *Chain {
return &Chain{
baseURL: strings.TrimSuffix(baseURL, "/"),
chainID: chainID,
client: newClient(),
}
}
// NewMainChain -
func NewMainChain(baseURL string) *Chain {
return NewChain(baseURL, "main")
}
// ChainID -
func (api *Chain) ChainID(ctx context.Context) (string, error) {
req, err := newGetRequest(api.baseURL, fmt.Sprintf("chains/%s/chain_id", api.chainID), nil)
if err != nil {
return "", err
}
var chainID string
err = req.doWithJSONResponse(ctx, api.client, &chainID)
return chainID, err
}
// InvalidBlocks -
func (api *Chain) InvalidBlocks(ctx context.Context) ([]InvalidBlock, error) {
req, err := newGetRequest(api.baseURL, fmt.Sprintf("chains/%s/invalid_blocks", api.chainID), nil)
if err != nil {
return nil, err
}
var result []InvalidBlock
err = req.doWithJSONResponse(ctx, api.client, &result)
return result, err
}
// InvalidBlock -
func (api *Chain) InvalidBlock(ctx context.Context, blockHash string) (InvalidBlock, error) {
req, err := newGetRequest(api.baseURL, fmt.Sprintf("chains/%s/invalid_blocks/%s", api.chainID, blockHash), nil)
if err != nil {
return InvalidBlock{}, err
}
var result InvalidBlock
err = req.doWithJSONResponse(ctx, api.client, &result)
return result, err
}
// IsBootstrapped -
func (api *Chain) IsBootstrapped(ctx context.Context) (Bootstrapped, error) {
req, err := newGetRequest(api.baseURL, fmt.Sprintf("chains/%s/is_bootstrapped", api.chainID), nil)
if err != nil {
return Bootstrapped{}, err
}
var result Bootstrapped
err = req.doWithJSONResponse(ctx, api.client, &result)
return result, err
}
// LevelsCaboose -
func (api *Chain) LevelsCaboose(ctx context.Context) (Caboose, error) {
req, err := newGetRequest(api.baseURL, fmt.Sprintf("chains/%s/levels/caboose", api.chainID), nil)
if err != nil {
return Caboose{}, err
}
var result Caboose
err = req.doWithJSONResponse(ctx, api.client, &result)
return result, err
}
// LevelsCheckpoint -
func (api *Chain) LevelsCheckpoint(ctx context.Context) (Checkpoint, error) {
req, err := newGetRequest(api.baseURL, fmt.Sprintf("chains/%s/levels/checkpoint", api.chainID), nil)
if err != nil {
return Checkpoint{}, err
}
var result Checkpoint
err = req.doWithJSONResponse(ctx, api.client, &result)
return result, err
}
// LevelsSavepoint -
func (api *Chain) LevelsSavepoint(ctx context.Context) (Savepoint, error) {
req, err := newGetRequest(api.baseURL, fmt.Sprintf("chains/%s/levels/savepoint", api.chainID), nil)
if err != nil {
return Savepoint{}, err
}
var result Savepoint
err = req.doWithJSONResponse(ctx, api.client, &result)
return result, err
}
// PendingOperations -
func (api *Chain) PendingOperations(ctx context.Context) (MempoolResponse, error) {
req, err := newGetRequest(api.baseURL, fmt.Sprintf("chains/%s/mempool/pending_operations?version=1", api.chainID), nil)
if err != nil {
return MempoolResponse{}, err
}
var result MempoolResponse
err = req.doWithJSONResponse(ctx, api.client, &result)
return result, err
}