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