mirror of
https://github.com/OffchainLabs/prysm.git
synced 2026-01-09 23:48:06 -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