mirror of
https://github.com/OffchainLabs/prysm.git
synced 2026-01-08 23:18:15 -05:00
Add relay node tool (#825)
* Add relay node * gosec * add docker image config * gazelle * punctuation
This commit is contained in:
52
tools/relaynode/BUILD.bazel
Normal file
52
tools/relaynode/BUILD.bazel
Normal file
@@ -0,0 +1,52 @@
|
||||
load("@io_bazel_rules_go//go:def.bzl", "go_binary", "go_library")
|
||||
load("@io_bazel_rules_docker//go:image.bzl", "go_image")
|
||||
load("@io_bazel_rules_docker//container:container.bzl", "container_push")
|
||||
|
||||
go_library(
|
||||
name = "go_default_library",
|
||||
srcs = ["relaynode.go"],
|
||||
importpath = "github.com/prysmaticlabs/prysm/tools/relaynode",
|
||||
visibility = ["//visibility:private"],
|
||||
deps = [
|
||||
"@com_github_ipfs_go_log//:go_default_library",
|
||||
"@com_github_libp2p_go_libp2p//:go_default_library",
|
||||
"@com_github_libp2p_go_libp2p_circuit//:go_default_library",
|
||||
"@com_github_libp2p_go_libp2p_crypto//:go_default_library",
|
||||
"@com_github_multiformats_go_multiaddr//:go_default_library",
|
||||
],
|
||||
)
|
||||
|
||||
go_image(
|
||||
name = "image",
|
||||
srcs = ["relaynode.go"],
|
||||
importpath = "github.com/prysmaticlabs/prysm/tools/relaynode",
|
||||
visibility = ["//visibility:private"],
|
||||
static = "on",
|
||||
tags = ["manual"],
|
||||
goarch = "amd64",
|
||||
goos = "linux",
|
||||
deps = [
|
||||
"@com_github_ipfs_go_log//:go_default_library",
|
||||
"@com_github_libp2p_go_libp2p//:go_default_library",
|
||||
"@com_github_libp2p_go_libp2p_circuit//:go_default_library",
|
||||
"@com_github_libp2p_go_libp2p_crypto//:go_default_library",
|
||||
"@com_github_multiformats_go_multiaddr//:go_default_library",
|
||||
],
|
||||
)
|
||||
|
||||
container_push(
|
||||
name = "push_image",
|
||||
format = "Docker",
|
||||
image = ":image",
|
||||
registry = "gcr.io",
|
||||
repository = "prysmaticlabs/prysm/relaynode",
|
||||
tag = "latest",
|
||||
tags = ["manual"],
|
||||
visibility = ["//visibility:private"],
|
||||
)
|
||||
|
||||
go_binary(
|
||||
name = "relaynode",
|
||||
embed = [":go_default_library"],
|
||||
visibility = ["//visibility:public"],
|
||||
)
|
||||
77
tools/relaynode/relaynode.go
Normal file
77
tools/relaynode/relaynode.go
Normal file
@@ -0,0 +1,77 @@
|
||||
/**
|
||||
* Relay node
|
||||
*
|
||||
* A simple libp2p relay node peers to connect inbound traffic behind a NAT or
|
||||
* other network restriction.
|
||||
*
|
||||
* Usage: Run relaynode --help for flag options.
|
||||
*/
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"flag"
|
||||
"fmt"
|
||||
|
||||
logging "github.com/ipfs/go-log"
|
||||
libp2p "github.com/libp2p/go-libp2p"
|
||||
circuit "github.com/libp2p/go-libp2p-circuit"
|
||||
crypto "github.com/libp2p/go-libp2p-crypto"
|
||||
multiaddr "github.com/multiformats/go-multiaddr"
|
||||
)
|
||||
|
||||
var (
|
||||
privateKey = flag.String("private", "", "Private key to use for peer ID")
|
||||
port = flag.Int("port", 4000, "Port to listen for connections")
|
||||
debug = flag.Bool("debug", false, "Enable debug logging")
|
||||
|
||||
log = logging.Logger("prysm-relaynode")
|
||||
)
|
||||
|
||||
func main() {
|
||||
flag.Parse()
|
||||
|
||||
if *debug {
|
||||
logging.SetDebugLogging()
|
||||
}
|
||||
|
||||
ctx := context.Background()
|
||||
log.Start(ctx, "main")
|
||||
defer log.Finish(ctx)
|
||||
|
||||
srcMAddr, err := multiaddr.NewMultiaddr(fmt.Sprintf("/ip4/0.0.0.0/tcp/%d", *port))
|
||||
if err != nil {
|
||||
log.Fatalf("Unable to construct multiaddr %v", err)
|
||||
}
|
||||
|
||||
opts := []libp2p.Option{
|
||||
libp2p.EnableRelay(circuit.OptHop),
|
||||
libp2p.ListenAddrs(srcMAddr),
|
||||
}
|
||||
|
||||
if *privateKey != "" {
|
||||
b, err := crypto.ConfigDecodeKey(*privateKey)
|
||||
if err != nil {
|
||||
log.Fatalf("Failed to decode private key %v", err)
|
||||
}
|
||||
pk, err := crypto.UnmarshalPrivateKey(b)
|
||||
if err != nil {
|
||||
log.Fatalf("Failed to unmarshal private key %v", err)
|
||||
}
|
||||
opts = append(opts, libp2p.Identity(pk))
|
||||
} else {
|
||||
log.Warning("No private key provided. Using random key.")
|
||||
}
|
||||
|
||||
h, err := libp2p.New(
|
||||
ctx,
|
||||
opts...,
|
||||
)
|
||||
if err != nil {
|
||||
log.Fatalf("Failed to create host %v", err)
|
||||
}
|
||||
|
||||
fmt.Printf("Relay available: /ip4/0.0.0.0/tcp/%v/p2p/%s\n", *port, h.ID().Pretty())
|
||||
|
||||
select {}
|
||||
}
|
||||
Reference in New Issue
Block a user