Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: multiple bootstrap peers per network #762

Merged
merged 1 commit into from
Oct 21, 2024
Merged
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
8 changes: 4 additions & 4 deletions cmd/common/cmdline.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ import (
"fmt"
"os"

"github.com/blinklabs-io/gouroboros"
ouroboros "github.com/blinklabs-io/gouroboros"
)

type GlobalFlags struct {
Expand Down Expand Up @@ -86,9 +86,9 @@ func (f *GlobalFlags) Parse() {
os.Exit(1)
}
if f.NetworkMagic == 0 {
network := ouroboros.NetworkByName(f.Network)
if network == ouroboros.NetworkInvalid {
fmt.Printf("Invalid network specified: %s\n", f.Network)
network, ok := ouroboros.NetworkByName(f.Network)
if !ok {
fmt.Printf("Unknown network specified: %s\n", f.Network)
os.Exit(1)
}
f.NetworkMagic = int(network.NetworkMagic)
Expand Down
6 changes: 3 additions & 3 deletions cmd/gouroboros/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -91,9 +91,9 @@ func main() {
}

if f.networkMagic == 0 {
network := ouroboros.NetworkByName(f.network)
if network == ouroboros.NetworkInvalid {
fmt.Printf("Invalid network specified: %s\n", f.network)
network, ok := ouroboros.NetworkByName(f.network)
if !ok {
fmt.Printf("Unknown network specified: %s\n", f.network)
os.Exit(1)
}
f.networkMagic = int(network.NetworkMagic)
Expand Down
108 changes: 62 additions & 46 deletions networks.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,93 +18,109 @@ import "github.com/blinklabs-io/gouroboros/ledger/common"

// Network definitions
var (
NetworkTestnet = Network{
Id: common.AddressNetworkTestnet,
Name: "testnet",
NetworkMagic: 1097911063,
}
NetworkMainnet = Network{
Id: common.AddressNetworkMainnet,
Name: "mainnet",
NetworkMagic: 764824073,
PublicRootAddress: "backbone.cardano.iog.io",
PublicRootPort: 3001,
Id: common.AddressNetworkMainnet,
Name: "mainnet",
NetworkMagic: 764824073,
BootstrapPeers: []NetworkBootstrapPeer{
{
Address: "backbone.cardano.iog.io",
Port: 3001,
},
{
Address: "backbone.mainnet.emurgornd.com",
Port: 3001,
},
{
Address: "backbone.mainnet.cardanofoundation.org",
Port: 3001,
},
},
}
NetworkPreprod = Network{
Id: common.AddressNetworkTestnet,
Name: "preprod",
NetworkMagic: 1,
PublicRootAddress: "preprod-node.world.dev.cardano.org",
PublicRootPort: 30000,
Id: common.AddressNetworkTestnet,
Name: "preprod",
NetworkMagic: 1,
BootstrapPeers: []NetworkBootstrapPeer{
{
Address: "preprod-node.play.dev.cardano.org",
Port: 3001,
},
},
}
NetworkPreview = Network{
Id: common.AddressNetworkTestnet,
Name: "preview",
NetworkMagic: 2,
PublicRootAddress: "preview-node.play.dev.cardano.org",
PublicRootPort: 3001,
Id: common.AddressNetworkTestnet,
Name: "preview",
NetworkMagic: 2,
BootstrapPeers: []NetworkBootstrapPeer{
{
Address: "preview-node.play.dev.cardano.org",
Port: 3001,
},
},
}
NetworkSancho = Network{
Id: common.AddressNetworkTestnet,
Name: "sanchonet",
NetworkMagic: 4,
PublicRootAddress: "sanchonet-node.play.dev.cardano.org",
PublicRootPort: 3001,
Id: common.AddressNetworkTestnet,
Name: "sanchonet",
NetworkMagic: 4,
BootstrapPeers: []NetworkBootstrapPeer{
{
Address: "sanchonet-node.play.dev.cardano.org",
Port: 3001,
},
},
}

NetworkInvalid = Network{
Id: 0,
Name: "invalid",
NetworkMagic: 0,
} // NetworkInvalid is used as a return value for lookup functions when a network isn't found
)

// List of valid networks for use in lookup functions
var networks = []Network{
NetworkTestnet,
NetworkMainnet,
NetworkPreprod,
NetworkPreview,
NetworkSancho,
}

// NetworkByName returns a predefined network by name
func NetworkByName(name string) Network {
func NetworkByName(name string) (Network, bool) {
for _, network := range networks {
if network.Name == name {
return network
return network, true
}
}
return NetworkInvalid
return Network{}, false
}

// NetworkById returns a predefined network by ID
func NetworkById(id uint8) Network {
func NetworkById(id uint8) (Network, bool) {
for _, network := range networks {
if network.Id == id {
return network
return network, true
}
}
return NetworkInvalid
return Network{}, false
}

// NetworkByNetworkMagic returns a predefined network by network magic
func NetworkByNetworkMagic(networkMagic uint32) Network {
func NetworkByNetworkMagic(networkMagic uint32) (Network, bool) {
for _, network := range networks {
if network.NetworkMagic == networkMagic {
return network
return network, true
}
}
return NetworkInvalid
return Network{}, false
}

// Network represents a Cardano network
type Network struct {
Id uint8 // network ID used for addresses
Name string
NetworkMagic uint32
PublicRootAddress string
PublicRootPort uint
Id uint8 // network ID used for addresses
Name string
NetworkMagic uint32
BootstrapPeers []NetworkBootstrapPeer
}

type NetworkBootstrapPeer struct {
Address string
Port uint
}

func (n Network) String() string {
Expand Down