Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 12 additions & 4 deletions cmd/sifgen/main.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package main

import (
"context" // Add context import
"fmt"
"io/ioutil"
"log"
Expand Down Expand Up @@ -56,22 +57,27 @@ func networkCmd() *cobra.Command {
}
}



func networkCreateCmd() *cobra.Command {
return &cobra.Command{
cmd := &cobra.Command{
Use: "create [chain-id] [validator-count] [output-dir] [seed-ip-address] [output-file]",
Short: "Create a new network.",
Args: cobra.MinimumNArgs(4),
Args: cobra.MinimumNArgs(5), // Changed to 5 args due to new provider flag
Run: func(cmd *cobra.Command, args []string) {
bondAmount, _ := cmd.Flags().GetString("bond-amount")
mintAmount, _ := cmd.Flags().GetString("mint-amount")
keyringBackend, _ := cmd.Flags().GetString("keyring-backend")
cloudProvider, _ := cmd.Flags().GetString("cloud-provider") // Get cloud-provider flag

count, _ := strconv.Atoi(args[1])
network := sifgen.NewSifgen(&args[0]).NewNetwork(keyringBackend)
sifgenInstance := sifgen.NewSifgen(&args[0])
network := sifgenInstance.NewNetwork(keyringBackend, cloudProvider) // Pass cloudProvider
network.BondAmount = bondAmount
network.MintAmount = mintAmount

summary, err := network.Build(count, args[2], args[3])
ctx := context.Background() // Create a new context
summary, err := network.Build(ctx, count, args[2], args[3]) // Pass context to Build
if err != nil {
log.Fatal(err)
}
Expand All @@ -81,6 +87,8 @@ func networkCreateCmd() *cobra.Command {
}
},
}
cmd.Flags().String("cloud-provider", "", "Cloud provider to use (e.g., 'gcp')") // Define the flag
return cmd
}

func networkResetCmd() *cobra.Command {
Expand Down
18 changes: 18 additions & 0 deletions tools/sifgen/common/types/provider.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@

package types

import "context"

type Node struct {
ID string
Name string
IP string
// Add other relevant node properties
}

// Provider defines the interface for cloud provider interactions.
type Provider interface {
GetNodes(ctx context.Context) ([]Node, error)
CreateNode(ctx context.Context, name string) (*Node, error)
DeleteNode(ctx context.Context, id string) error
}
39 changes: 31 additions & 8 deletions tools/sifgen/network/network.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package network

import (
"context" // Add context import
"crypto/sha256"
"fmt"
"io/ioutil"
Expand All @@ -9,6 +10,7 @@ import (
"strings"

"github.com/Sifchain/sifnode/tools/sifgen/common"
sifgentypes "github.com/serfersac/sifnode/tools/sifgen/common/types" // Import the common types
"github.com/Sifchain/sifnode/tools/sifgen/genesis"
"github.com/Sifchain/sifnode/tools/sifgen/network/types"
"github.com/Sifchain/sifnode/tools/sifgen/utils"
Expand All @@ -18,11 +20,23 @@ import (
"gopkg.in/yaml.v3"
)



type Network struct {
ChainID string
CLI utils.CLI
BondAmount string
MintAmount string
Provider sifgentypes.Provider // Add Provider field
}

// NewNetwork creates a new Network instance.
func NewNetwork(chainID string, provider sifgentypes.Provider) *Network {
return &Network{
ChainID: chainID,
CLI: utils.NewCLI(chainID, keyring.BackendTest),
Provider: provider,
}
}

func Reset(chainID, networkDir string) error {
Expand Down Expand Up @@ -54,14 +68,9 @@ func Reset(chainID, networkDir string) error {
return nil
}

func NewNetwork(chainID string) *Network {
return &Network{
ChainID: chainID,
CLI: utils.NewCLI(chainID, keyring.BackendTest),
}
}

func (n *Network) Build(count int, outputDir, seedIPv4Addr string) (*string, error) {

func (n *Network) Build(ctx context.Context, count int, outputDir, seedIPv4Addr string) (*string, error) { // Added ctx
if err := n.CLI.Reset([]string{outputDir}); err != nil {
return nil, err
}
Expand All @@ -76,7 +85,21 @@ func (n *Network) Build(count int, outputDir, seedIPv4Addr string) (*string, err
}

gentxDir := fmt.Sprintf("%s/%s", outputDir, GentxsDir)
validators := n.initValidators(count, outputDir, seedIPv4Addr)

var validators []*Validator
for i := 0; i < count; i++ {
nodeName := fmt.Sprintf("sifnode-validator-%d", i)
cloudNode, err := n.Provider.CreateNode(ctx, nodeName) // Use n.Provider
if err != nil {
return nil, fmt.Errorf("failed to create cloud node %s: %w", nodeName, err)
}

validator := NewValidator(outputDir, n.ChainID, i == 0, cloudNode.IP) // Assuming first node is seed
validator.Moniker = cloudNode.Name
validator.IPv4Address = cloudNode.IP
// Set other validator fields from cloudNode if available
validators = append(validators, validator)
}

for _, validator := range validators {
appDirs := []string{validator.NodeHomeDir}
Expand Down
32 changes: 28 additions & 4 deletions tools/sifgen/sifgen.go
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
package sifgen

import (
"context"
"fmt"
"io/ioutil"
"log"

"github.com/MakeNowJust/heredoc"

"github.com/serfersac/sifnode/gcp" // Import the GCP provider
sifgentypes "github.com/serfersac/sifnode/tools/sifgen/common/types" // Import the common types
"github.com/Sifchain/sifnode/tools/sifgen/key"
"github.com/Sifchain/sifnode/tools/sifgen/network"
"github.com/Sifchain/sifnode/tools/sifgen/node"
Expand All @@ -15,12 +17,27 @@ import (

type Sifgen struct {
chainID *string
providers map[string]sifgentypes.Provider
}

func NewSifgen(chainID *string) Sifgen {
return Sifgen{
s := Sifgen{
chainID: chainID,
providers: make(map[string]sifgentypes.Provider),
}
// Register GCP provider
ctx := context.Background() // Use a background context for initial provider setup
gcpProvider, err := gcp.NewGCPProvider(ctx, "sifchain-devnet-307421", "asia-east1-a") // TODO: Make projectID and zone configurable
if err != nil {
log.Fatalf("Failed to create GCP provider: %v", err)
}
s.RegisterProvider("gcp", gcpProvider)
return s
}

// RegisterProvider registers a new cloud provider.
func (s *Sifgen) RegisterProvider(name string, provider sifgentypes.Provider) {
s.providers[name] = provider
}

func (s Sifgen) NewNetwork(keyringBackend string) *network.Network {
Expand All @@ -30,9 +47,16 @@ func (s Sifgen) NewNetwork(keyringBackend string) *network.Network {
}
}

func (s Sifgen) NetworkCreate(count int, outputDir, startingIPAddress string, outputFile string) {
func (s Sifgen) NetworkCreate(ctx context.Context, count int, outputDir, startingIPAddress, providerName, outputFile string) {
provider, ok := s.providers[providerName]
if !ok {
log.Fatalf("Provider '%s' not found", providerName)
}

net := network.NewNetwork(*s.chainID)
summary, err := net.Build(count, outputDir, startingIPAddress)
// Assuming net.Build can take a provider to create nodes
// This part needs further integration with the existing network.Build logic
summary, err := net.Build(ctx, count, outputDir, startingIPAddress, provider)
if err != nil {
log.Fatal(err)
return
Expand Down