github.com/kotalco/kotal@v0.3.0/clients/ethereum2/prysm_beacon_node.go (about)

     1  package ethereum2
     2  
     3  import (
     4  	"fmt"
     5  	"strings"
     6  
     7  	ethereum2v1alpha1 "github.com/kotalco/kotal/apis/ethereum2/v1alpha1"
     8  	"github.com/kotalco/kotal/controllers/shared"
     9  	corev1 "k8s.io/api/core/v1"
    10  )
    11  
    12  // PrysmBeaconNode is Prysmatic Labs Ethereum 2.0 client
    13  // https://github.com/prysmaticlabs/prysm
    14  type PrysmBeaconNode struct {
    15  	node *ethereum2v1alpha1.BeaconNode
    16  }
    17  
    18  // HomeDir returns container home directory
    19  func (t *PrysmBeaconNode) HomeDir() string {
    20  	return PrysmHomeDir
    21  }
    22  
    23  // Command returns environment variables for running the client
    24  func (t *PrysmBeaconNode) Env() []corev1.EnvVar {
    25  	return nil
    26  }
    27  
    28  // Args returns command line arguments required for client
    29  func (t *PrysmBeaconNode) Args() (args []string) {
    30  
    31  	node := t.node
    32  
    33  	args = append(args, PrysmAcceptTermsOfUse)
    34  
    35  	args = append(args, PrysmDataDir, shared.PathData(t.HomeDir()))
    36  
    37  	args = append(args, PrysmLogging, string(t.node.Spec.Logging))
    38  
    39  	args = append(args, PrysmExecutionEngineEndpoint, node.Spec.ExecutionEngineEndpoint)
    40  
    41  	args = append(args, PrysmFeeRecipient, string(node.Spec.FeeRecipient))
    42  
    43  	jwtSecretPath := fmt.Sprintf("%s/jwt.secret", shared.PathSecrets(t.HomeDir()))
    44  	args = append(args, PrysmJwtSecretFile, jwtSecretPath)
    45  
    46  	args = append(args, fmt.Sprintf("--%s", node.Spec.Network))
    47  
    48  	if node.Spec.CheckpointSyncURL != "" {
    49  		args = append(args, PrysmCheckpointSyncUrl, node.Spec.CheckpointSyncURL)
    50  		args = append(args, PrysmGenesisBeaconApiUrl, node.Spec.CheckpointSyncURL)
    51  	}
    52  
    53  	if node.Spec.RPCPort != 0 {
    54  		args = append(args, PrysmRPCPort, fmt.Sprintf("%d", node.Spec.RPCPort))
    55  	}
    56  
    57  	// RPC is always on in prysm
    58  	args = append(args, PrysmRPCHost, shared.Host(true))
    59  
    60  	if node.Spec.GRPC {
    61  		args = append(args, PrysmGRPCGatewayCorsDomains, strings.Join(node.Spec.CORSDomains, ","))
    62  		args = append(args, PrysmGRPCPort, fmt.Sprintf("%d", node.Spec.GRPCPort))
    63  		args = append(args, PrysmGRPCHost, shared.Host(node.Spec.GRPC))
    64  	} else {
    65  		args = append(args, PrysmDisableGRPC)
    66  	}
    67  
    68  	if node.Spec.CertSecretName != "" {
    69  		args = append(args, PrysmTLSCert, fmt.Sprintf("%s/tls.crt", shared.PathSecrets(t.HomeDir())))
    70  		args = append(args, PrysmTLSKey, fmt.Sprintf("%s/tls.key", shared.PathSecrets(t.HomeDir())))
    71  	}
    72  
    73  	args = append(args, PrysmP2PTCPPort, fmt.Sprintf("%d", node.Spec.P2PPort))
    74  	args = append(args, PrysmP2PUDPPort, fmt.Sprintf("%d", node.Spec.P2PPort))
    75  
    76  	return
    77  }
    78  
    79  // Command returns command for running the client
    80  func (t *PrysmBeaconNode) Command() (command []string) {
    81  	command = []string{"beacon-chain"}
    82  	return
    83  }