eth-kzg-ceremony-alt/client/req.go
client/req.goRaw
1package client
2
3import (
4 "bytes"
5 "encoding/json"
6 "fmt"
7 "io"
8 "io/ioutil"
9 "net/http"
10
11 kzgceremony "github.com/arnaucube/eth-kzg-ceremony-alt"
12)
13
14type Client struct {
15 url string
16 c *http.Client
17}
18
19func (c *Client) postWithAuth(url, contentType string, body io.Reader, bearer string) (resp *http.Response, err error) {
20 req, err := http.NewRequest("POST", url, body)
21 if err != nil {
22 return nil, err
23 }
24 req.Header.Set("Content-Type", contentType)
25 req.Header.Add("Authorization", bearer)
26 return c.c.Do(req)
27}
28
29func NewClient(sequencerURL string) *Client {
30 httpClient := &http.Client{}
31 return &Client{
32 url: sequencerURL,
33 c: httpClient,
34 }
35}
36
37func (c *Client) GetCurrentStatus() (*MsgStatus, error) {
38 resp, err := c.c.Get(
39 c.url + "/info/status")
40 if err != nil {
41 return nil, err
42 }
43 if resp.StatusCode != http.StatusOK {
44 return nil, fmt.Errorf("unexpected http code: %d", resp.StatusCode)
45 }
46
47 body, err := ioutil.ReadAll(resp.Body)
48 if err != nil {
49 return nil, err
50 }
51
52 var msg MsgStatus
53 err = json.Unmarshal(body, &msg)
54 return &msg, err
55}
56
57func (c *Client) GetCurrentState() (*kzgceremony.State, error) {
58 resp, err := c.c.Get(
59 c.url + "/info/current_state")
60 if err != nil {
61 return nil, err
62 }
63 if resp.StatusCode != http.StatusOK {
64 return nil, fmt.Errorf("unexpected http code: %d", resp.StatusCode)
65 }
66
67 body, err := ioutil.ReadAll(resp.Body)
68 if err != nil {
69 return nil, err
70 }
71
72 var state *kzgceremony.State
73 err = json.Unmarshal(body, &state)
74 return state, err
75}
76
77func (c *Client) GetRequestLink() (*MsgRequestLink, error) {
78 resp, err := c.c.Get(
79 c.url + "/auth/request_link")
80 if err != nil {
81 return nil, err
82 }
83 if resp.StatusCode != http.StatusOK {
84 switch resp.StatusCode {
85 case http.StatusBadRequest:
86 return nil, fmt.Errorf("Invalid request. Missing parameters.")
87 case http.StatusUnauthorized:
88 return nil, fmt.Errorf("Eth address doesn't match message signer, or account nonce is too low")
89 case http.StatusForbidden:
90 return nil, fmt.Errorf("Invalid HTTP method")
91 default:
92 return nil, fmt.Errorf("unexpected http code: %d", resp.StatusCode)
93 }
94 }
95
96 body, err := ioutil.ReadAll(resp.Body)
97 if err != nil {
98 return nil, err
99 }
100
101 var msg MsgRequestLink
102 err = json.Unmarshal(body, &msg)
103 return &msg, err
104}
105
106func (c *Client) PostAuthCallback() (*MsgRequestLink, error) {
107 resp, err := c.c.Get(
108 c.url + "/auth/request_link")
109 if err != nil {
110 return nil, err
111 }
112 if resp.StatusCode != http.StatusOK {
113 switch resp.StatusCode {
114 case http.StatusBadRequest:
115 return nil, fmt.Errorf("Invalid request. Missing parameters.")
116 case http.StatusUnauthorized:
117 return nil, fmt.Errorf("Eth address doesn't match message signer, or account nonce is too low")
118 case http.StatusForbidden:
119 return nil, fmt.Errorf("Invalid HTTP method")
120 default:
121 return nil, fmt.Errorf("unexpected http code: %d", resp.StatusCode)
122 }
123 }
124
125 body, err := ioutil.ReadAll(resp.Body)
126 if err != nil {
127 return nil, err
128 }
129
130 var msg MsgRequestLink
131 err = json.Unmarshal(body, &msg)
132 return &msg, err
133}
134
135type Status int
136
137const (
138 StatusReauth = Status(iota)
139 StatusError
140 StatusWait
141 StatusProceed
142)
143
144func (c *Client) PostTryContribute(sessionID string) (*kzgceremony.BatchContribution, Status, error) {
145 bearer := "Bearer " + sessionID
146 resp, err := c.postWithAuth(
147 c.url+"/lobby/try_contribute", "application/json", nil, bearer)
148 if err != nil {
149 return nil, StatusError, err
150 }
151
152 body, err := ioutil.ReadAll(resp.Body)
153 if err != nil {
154 return nil, StatusError, err
155 }
156
157 if resp.StatusCode != http.StatusOK {
158 fmt.Println(string(body))
159 switch resp.StatusCode {
160 case http.StatusBadRequest:
161 return nil, StatusWait, fmt.Errorf("call came to early. rate limited")
162 case http.StatusUnauthorized:
163 return nil, StatusReauth, fmt.Errorf("unkown session id. unauthorized access")
164 default:
165 return nil, StatusWait, fmt.Errorf("unexpected http code: %d", resp.StatusCode)
166 }
167 }
168
169 err = ioutil.WriteFile("prevBatchContribution.json", body, 0600)
170 if err != nil {
171 return nil, StatusError, err
172 }
173 bc := &kzgceremony.BatchContribution{}
174 err = json.Unmarshal(body, bc)
175 return bc, StatusError, err
176}
177
178func (c *Client) PostAbortContribution(sessionID string) ([]byte, error) {
179 bearer := "Bearer " + sessionID
180 resp, err := c.postWithAuth(
181 c.url+"/contribution/abort", "application/json", nil, bearer)
182 if err != nil {
183 return nil, err
184 }
185 body, err := ioutil.ReadAll(resp.Body)
186 if err != nil {
187 return nil, err
188 }
189 fmt.Println("body", string(body))
190
191 if resp.StatusCode != http.StatusOK {
192 switch resp.StatusCode {
193 case http.StatusBadRequest:
194 return nil, fmt.Errorf("invalid request")
195 case http.StatusUnauthorized:
196 return nil, fmt.Errorf("unkown session id. unauthorized access")
197 default:
198 return nil, fmt.Errorf("unexpected http code: %d", resp.StatusCode)
199 }
200 }
201
202 return body, nil
203}
204
205func (c *Client) PostContribute(sessionID string, bc *kzgceremony.BatchContribution) (*MsgContributeReceipt, error) {
206 bearer := "Bearer " + sessionID
207
208 jsonBC, err := json.Marshal(bc)
209 if err != nil {
210 return nil, err
211 }
212
213 resp, err := c.postWithAuth(
214 c.url+"/contribute", "application/json", bytes.NewBuffer(jsonBC), bearer)
215 if err != nil {
216 return nil, err
217 }
218 if resp.StatusCode != http.StatusOK {
219 switch resp.StatusCode {
220 case http.StatusBadRequest:
221 return nil, fmt.Errorf("invalid request")
222 default:
223 return nil, fmt.Errorf("unexpected http code: %d", resp.StatusCode)
224 }
225 }
226
227 body, err := ioutil.ReadAll(resp.Body)
228 if err != nil {
229 return nil, err
230 }
231
232 var msg MsgContributeReceipt
233 err = json.Unmarshal(body, &msg)
234 return &msg, err
235}