arnaucube
arnaucube/eth-kzg-ceremony-altPublic Self-hosted repository
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}