dione/rpc/filecoin/filecoin.go

54 lines
1.4 KiB
Go
Raw Normal View History

2020-11-18 18:33:03 +00:00
package filecoin
import (
"encoding/json"
"fmt"
2020-11-18 18:33:03 +00:00
"github.com/Secured-Finance/dione/rpc/types"
"github.com/Secured-Finance/dione/lib"
"github.com/sirupsen/logrus"
"github.com/valyala/fasthttp"
)
var filecoinURL = "https://filecoin.infura.io/"
type LotusClient struct {
host string
projectID string
projectSecret string
2020-11-18 18:33:03 +00:00
httpClient *fasthttp.Client
}
func NewLotusClient(pID, secret string) *LotusClient {
return &LotusClient{
host: filecoinURL,
projectID: pID,
projectSecret: secret,
2020-11-18 18:33:03 +00:00
httpClient: &fasthttp.Client{},
}
}
2020-11-18 18:33:03 +00:00
func (c *LotusClient) GetTransaction(txHash string) ([]byte, error) {
req := fasthttp.AcquireRequest()
req.SetRequestURI(c.host)
req.Header.SetMethod("POST")
req.Header.SetContentType("application/json")
req.Header.Set("Authorization", "Basic "+lib.BasicAuth(c.projectID, c.projectSecret))
2020-11-18 18:33:03 +00:00
requestBody := types.NewRPCRequestBody("Filecoin.ChainGetMessage")
requestBody.Params = append(requestBody.Params, txHash)
body, err := json.Marshal(requestBody)
if err != nil {
return nil, fmt.Errorf("Failed to marshal request body %v", err)
}
req.AppendBody(body)
resp := fasthttp.AcquireResponse()
2020-11-18 18:33:03 +00:00
if err = c.httpClient.Do(req, resp); err != nil {
logrus.Warn("Failed to construct filecoin node rpc request", err)
return nil, err
}
bodyBytes := resp.Body()
2020-11-18 18:33:03 +00:00
logrus.Debug(string(bodyBytes))
return bodyBytes, nil
}