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
135func (c *Client) PostTryContribute(sessionID string) (*kzgceremony.BatchContribution, bool, error) {
136 bearer := "Bearer " + sessionID
137 resp, err := c.postWithAuth(
138 c.url+"/lobby/try_contribute", "application/json", nil, bearer)
139 if err != nil {
140 return nil, false, err
141 }
142
143 body, err := ioutil.ReadAll(resp.Body)
144 if err != nil {
145 return nil, false, err
146 }
147
148 if resp.StatusCode != http.StatusOK {
149 fmt.Println(string(body))
150 switch resp.StatusCode {
151 case http.StatusBadRequest:
152 return nil, true, fmt.Errorf("call came to early. rate limited")
153 case http.StatusUnauthorized:
154 return nil, false, fmt.Errorf("unkown session id. unauthorized access")
155 default:
156 return nil, false, fmt.Errorf("unexpected http code: %d", resp.StatusCode)
157 }
158 }
159
160 err = ioutil.WriteFile("prevBatchContribution.json", body, 0600)
161 if err != nil {
162 return nil, false, err
163 }
164 bc := &kzgceremony.BatchContribution{}
165 err = json.Unmarshal(body, bc)
166 return bc, false, err
167}
168
169func (c *Client) PostAbortContribution(sessionID string) ([]byte, error) {
170 bearer := "Bearer " + sessionID
171 resp, err := c.postWithAuth(
172 c.url+"/contribution/abort", "application/json", nil, bearer)
173 if err != nil {
174 return nil, err
175 }
176 body, err := ioutil.ReadAll(resp.Body)
177 if err != nil {
178 return nil, err
179 }
180 fmt.Println("body", string(body))
181
182 if resp.StatusCode != http.StatusOK {
183 switch resp.StatusCode {
184 case http.StatusBadRequest:
185 return nil, fmt.Errorf("invalid request")
186 case http.StatusUnauthorized:
187 return nil, fmt.Errorf("unkown session id. unauthorized access")
188 default:
189 return nil, fmt.Errorf("unexpected http code: %d", resp.StatusCode)
190 }
191 }
192
193 return body, nil
194}
195
196func (c *Client) PostContribute(sessionID string, bc *kzgceremony.BatchContribution) (*MsgContributeReceipt, error) {
197 bearer := "Bearer " + sessionID
198
199 jsonBC, err := json.Marshal(bc)
200 if err != nil {
201 return nil, err
202 }
203
204 resp, err := c.postWithAuth(
205 c.url+"/contribute", "application/json", bytes.NewBuffer(jsonBC), bearer)
206 if err != nil {
207 return nil, err
208 }
209 if resp.StatusCode != http.StatusOK {
210 switch resp.StatusCode {
211 case http.StatusBadRequest:
212 return nil, fmt.Errorf("invalid request")
213 default:
214 return nil, fmt.Errorf("unexpected http code: %d", resp.StatusCode)
215 }
216 }
217
218 body, err := ioutil.ReadAll(resp.Body)
219 if err != nil {
220 return nil, err
221 }
222
223 var msg MsgContributeReceipt
224 err = json.Unmarshal(body, &msg)
225 return &msg, err
226}