Skip to content

Commit

Permalink
Merge branch 'release/0.4.7' into fix(resolver)/validate-bch-gateways
Browse files Browse the repository at this point in the history
  • Loading branch information
jazg committed Aug 19, 2021
2 parents efd69de + d9013ef commit d108488
Show file tree
Hide file tree
Showing 5 changed files with 44 additions and 14 deletions.
4 changes: 2 additions & 2 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
FROM debian:stable-slim AS final
FROM debian:buster-slim AS final
# Set up final runner first, so that it caches

# Install Filecoin and Solana dependencies.
Expand Down Expand Up @@ -27,7 +27,7 @@ WORKDIR /lightnode

ARG GITHUB_TOKEN

RUN apt-get update && apt-get install -y ocl-icd-opencl-dev libgmp3-dev
RUN apt-get update && apt-get install -y ocl-icd-opencl-dev libgmp3-dev libhwloc-dev

# Use GitHub personal access token to fetch dependencies.
RUN git config --global url."https://${GITHUB_TOKEN}:x-oauth-basic@github.com/".insteadOf "https://github.com/"
Expand Down
14 changes: 7 additions & 7 deletions compat/v0/compat.go
Original file line number Diff line number Diff line change
Expand Up @@ -663,12 +663,12 @@ func V1TxFromV0Burn(ctx context.Context, v0tx Tx, bindings *binding.Binding, net

details, err := gatewayBinding.GetBurn(&bind.CallOpts{}, ref.Int)
if err != nil {
return tx.Tx{}, err
return tx.Tx{}, fmt.Errorf("getting burn with ref=%v: %v", ref, err)
}

latestBlockHeader, err := client.HeaderByNumber(ctx, nil)
if err != nil {
return tx.Tx{}, err
return tx.Tx{}, fmt.Errorf("getting latest block header: %v", err)
}
confirmations := new(big.Int).Sub(latestBlockHeader.Number, details.Blocknumber).Uint64()
if pack.U64(confirmations) > options.MaxConfirmations {
Expand All @@ -682,18 +682,18 @@ func V1TxFromV0Burn(ctx context.Context, v0tx Tx, bindings *binding.Binding, net
Context: ctx,
}, []*big.Int{ref.Int}, nil)
if err != nil {
return tx.Tx{}, err
return tx.Tx{}, fmt.Errorf("filtering burn logs for block #%v (ref=%v): %v", blockNumber, ref, err)
}
if iter == nil {
return tx.Tx{}, err
return tx.Tx{}, fmt.Errorf("no burn logs for block #%v (ref=%v): %v", blockNumber, ref, err)
}
var txid pack.Bytes
for iter.Next() {
txid = iter.Event.Raw.TxHash.Bytes()
break
}
if iter.Error() != nil {
return tx.Tx{}, err
return tx.Tx{}, fmt.Errorf("getting burn log details for block #%v (ref=%v): %v", blockNumber, ref, err)
}

amount := pack.NewU256FromInt(details.Amount)
Expand All @@ -706,7 +706,7 @@ func V1TxFromV0Burn(ctx context.Context, v0tx Tx, bindings *binding.Binding, net
to = multichain.Address(base58.Encode(toBytes))
toDecode, err = decoder.DecodeAddress(to)
if err != nil {
return tx.Tx{}, err
return tx.Tx{}, fmt.Errorf("decoding address=%v (ref=%v): %v", to, ref, err)
}
}

Expand All @@ -726,7 +726,7 @@ func V1TxFromV0Burn(ctx context.Context, v0tx Tx, bindings *binding.Binding, net
Ghash: ghash,
})
if err != nil {
return tx.Tx{}, err
return tx.Tx{}, fmt.Errorf("encoding input (ref=%v): %v", ref, err)
}
return tx.NewTx(selector, pack.Typed(input.(pack.Struct)))
}
Expand Down
2 changes: 1 addition & 1 deletion compat/v0/store.go
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ func (store Store) decodeHashString(s string) (id.Hash, error) {
hash := id.Hash{}
hashBytes, err1 := base64.RawURLEncoding.DecodeString(s)
if err1 != nil {
hashBytes2, err2 := base64.RawStdEncoding.DecodeString(s)
hashBytes2, err2 := base64.StdEncoding.DecodeString(s)
if err2 != nil {
err := fmt.Errorf("invalid hash encoding ( %v ) persisted: not base64URL %v not base64 %v", s, err1, err2)
return hash, err
Expand Down
27 changes: 26 additions & 1 deletion resolver/resolver_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -762,6 +762,30 @@ var _ = Describe("Resolver", func() {

ipString = "1.1.1.1,9.9.9.9,,,"
httpRequest.Header.Set("x-forwarded-for", ipString)
Eventually(func() jsonrpc.Response {
_, resp := validator.ValidateRequest(innerCtx, httpRequest, jsonrpc.Request{
Version: "2.0",
ID: nil,
Method: jsonrpc.MethodSubmitTx,
Params: paramsJSON,
})
return resp
}).Should(Equal(jsonrpc.Response{}))

ipString = "1.1.1.1 , 9.9.9.9,,,"
httpRequest.Header.Set("x-forwarded-for", ipString)
Eventually(func() jsonrpc.Response {
_, resp := validator.ValidateRequest(innerCtx, httpRequest, jsonrpc.Request{
Version: "2.0",
ID: nil,
Method: jsonrpc.MethodSubmitTx,
Params: paramsJSON,
})
return resp
}).Should(Equal(jsonrpc.Response{}))

ipString = "1.1,9.9.9,,,"
httpRequest.Header.Set("x-forwarded-for", ipString)
Eventually(func() jsonrpc.Response {
_, resp := validator.ValidateRequest(innerCtx, httpRequest, jsonrpc.Request{
Version: "2.0",
Expand All @@ -773,8 +797,9 @@ var _ = Describe("Resolver", func() {
}).Should(Equal(
jsonrpc.NewResponse(nil, nil, &jsonrpc.Error{
Code: jsonrpc.ErrorCodeInvalidRequest,
Message: fmt.Sprintf("could not determine ip for %v", ipString),
Message: fmt.Sprintf("could not parse ip: 9.9.9"),
}),
))

})
})
11 changes: 8 additions & 3 deletions resolver/validator.go
Original file line number Diff line number Diff line change
Expand Up @@ -52,13 +52,18 @@ func (validator *LightnodeValidator) ValidateRequest(ctx context.Context, r *htt
if ipString == "" {
ipString = r.RemoteAddr
} else if ipStrings := strings.Split(ipString, ","); len(ipStrings) > 0 {
ipString = ipStrings[len(ipStrings)-1]
i := 1
ipString = ""
for ipString == "" && len(ipStrings) >= i {
ipString = strings.TrimSpace(ipStrings[len(ipStrings)-i])
i++
}
// if there is a trailling comma, or the x-forwarded-for header is malformed,
// skip parsing
if ipString == "" {
return nil, jsonrpc.NewResponse(req.ID, nil, &jsonrpc.Error{
Code: jsonrpc.ErrorCodeInvalidRequest,
Message: fmt.Sprintf("could not determine ip for %v", strings.Join(ipStrings, ",")),
Message: fmt.Sprintf("could not find forwarded ip in %v", strings.Join(ipStrings, ",")),
})
}
}
Expand All @@ -74,7 +79,7 @@ func (validator *LightnodeValidator) ValidateRequest(ctx context.Context, r *htt
if err != nil {
return nil, jsonrpc.NewResponse(req.ID, nil, &jsonrpc.Error{
Code: jsonrpc.ErrorCodeInvalidRequest,
Message: fmt.Sprintf("could not determine ip for %v", ipString),
Message: fmt.Sprintf("could not parse ip: %v", ipString),
})
}
}
Expand Down

0 comments on commit d108488

Please sign in to comment.