mirror of
https://github.com/OffchainLabs/prysm.git
synced 2026-01-08 23:18:15 -05:00
First pass on pow faucet for testnet (#1624)
* first pass on pow faucet for testnet * delete unused thing * remove unneeded thing * remove other thing * https & remove a log * don't force redirect on https, its not working? * some renaming of stuff * lint * lint * some stablity config * move protos to proto directory, add generated pb file for go users * add health probe * add hpa and request cpu * handle err * some more config
This commit is contained in:
56
tools/faucet/BUILD.bazel
Normal file
56
tools/faucet/BUILD.bazel
Normal file
@@ -0,0 +1,56 @@
|
||||
# gazelle:ignore
|
||||
load("@io_bazel_rules_go//go:def.bzl", "go_binary", "go_library")
|
||||
load("@io_bazel_rules_go//proto:def.bzl", "go_proto_library")
|
||||
load("@io_bazel_rules_docker//go:image.bzl", "go_image")
|
||||
load("@io_bazel_rules_docker//container:container.bzl", "container_push")
|
||||
|
||||
IMPORT_PATH = "github.com/prysmaticlabs/prysm/tools/faucet"
|
||||
SRCS = [
|
||||
"main.go",
|
||||
"server.go",
|
||||
]
|
||||
DEPS = [
|
||||
"//proto/faucet:faucet_go_proto",
|
||||
"@org_golang_google_grpc//:go_default_library",
|
||||
"@org_golang_google_grpc//peer:go_default_library",
|
||||
"@org_golang_google_grpc//reflection:go_default_library",
|
||||
"@com_github_prestonvanloon_go_recaptcha//:go_default_library",
|
||||
]
|
||||
|
||||
go_library(
|
||||
name = "go_default_library",
|
||||
srcs = SRCS,
|
||||
importpath = IMPORT_PATH,
|
||||
visibility = ["//visibility:private"],
|
||||
deps = DEPS,
|
||||
)
|
||||
|
||||
go_binary(
|
||||
name = "faucet",
|
||||
embed = [":go_default_library"],
|
||||
visibility = ["//visibility:public"],
|
||||
)
|
||||
|
||||
go_image(
|
||||
name = "image",
|
||||
srcs = SRCS,
|
||||
importpath = IMPORT_PATH,
|
||||
deps = DEPS,
|
||||
pure = "off", # depends on cgo for go-ethereum crypto
|
||||
static = "on",
|
||||
tags = ["manual"],
|
||||
goarch = "amd64",
|
||||
goos = "linux",
|
||||
race = "off",
|
||||
)
|
||||
|
||||
container_push(
|
||||
name = "push_image",
|
||||
format = "Docker",
|
||||
image = ":image",
|
||||
registry = "gcr.io",
|
||||
repository = "prysmaticlabs/prysm/faucet",
|
||||
tag = "latest",
|
||||
tags = ["manual"],
|
||||
visibility = ["//visibility:private"],
|
||||
)
|
||||
38
tools/faucet/main.go
Normal file
38
tools/faucet/main.go
Normal file
@@ -0,0 +1,38 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"fmt"
|
||||
"net"
|
||||
|
||||
recaptcha "github.com/prestonvanloon/go-recaptcha"
|
||||
faucetpb "github.com/prysmaticlabs/prysm/proto/faucet"
|
||||
"google.golang.org/grpc"
|
||||
"google.golang.org/grpc/reflection"
|
||||
)
|
||||
|
||||
var (
|
||||
port = flag.Int("port", 8000, "Port to server gRPC service")
|
||||
recaptchaSecret = flag.String("recaptcha_secret", "", "Secret to verify recaptcha")
|
||||
)
|
||||
|
||||
func main() {
|
||||
flag.Parse()
|
||||
|
||||
lis, err := net.Listen("tcp", fmt.Sprintf(":%d", *port))
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
s := grpc.NewServer()
|
||||
fmt.Println("recaptcha = " + *recaptchaSecret)
|
||||
faucetpb.RegisterFaucetServiceServer(s, &faucetServer{
|
||||
r: recaptcha.Recaptcha{RecaptchaPrivateKey: *recaptchaSecret},
|
||||
})
|
||||
|
||||
reflection.Register(s)
|
||||
|
||||
fmt.Printf("Serving gRPC requests on port %d\n", *port)
|
||||
if err := s.Serve(lis); err != nil {
|
||||
fmt.Printf("Error: %v", err)
|
||||
}
|
||||
}
|
||||
44
tools/faucet/server.go
Normal file
44
tools/faucet/server.go
Normal file
@@ -0,0 +1,44 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
|
||||
recaptcha "github.com/prestonvanloon/go-recaptcha"
|
||||
faucetpb "github.com/prysmaticlabs/prysm/proto/faucet"
|
||||
"google.golang.org/grpc/peer"
|
||||
)
|
||||
|
||||
var minScore = 0.5
|
||||
|
||||
type faucetServer struct {
|
||||
r recaptcha.Recaptcha
|
||||
}
|
||||
|
||||
// RequestFunds from the ethereum 1.x faucet. Requires a valid captcha
|
||||
// response.
|
||||
func (s *faucetServer) RequestFunds(ctx context.Context, req *faucetpb.FundingRequest) (*faucetpb.FundingResponse, error) {
|
||||
p, ok := peer.FromContext(ctx)
|
||||
if !ok {
|
||||
return nil, errors.New("peer from ctx not ok")
|
||||
}
|
||||
fmt.Printf("Sending captcha request for peer %s\n", p.Addr.String())
|
||||
|
||||
rr, err := s.r.Check(p.Addr.String(), req.RecaptchaResponse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if !rr.Success {
|
||||
fmt.Printf("Unsuccessful recaptcha request. Error codes: %+v\n", rr.ErrorCodes)
|
||||
return &faucetpb.FundingResponse{Error: "Recaptcha failed"}, nil
|
||||
}
|
||||
if rr.Score < minScore {
|
||||
return &faucetpb.FundingResponse{Error: "Recaptcha score too low"}, nil
|
||||
}
|
||||
|
||||
return &faucetpb.FundingResponse{
|
||||
Amount: "500000000000000000",
|
||||
TransactionHash: "0xfake",
|
||||
}, nil
|
||||
}
|
||||
Reference in New Issue
Block a user