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	"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}