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