feat(simapp/v2): Testnet init command (#20866)

This commit is contained in:
Hieu Vu
2024-07-05 08:25:54 +00:00
committed by GitHub
parent d79cd5898f
commit 476edaa90b
5 changed files with 587 additions and 3 deletions
+58
View File
@@ -2,7 +2,9 @@ package serverv2
import (
"context"
"errors"
"fmt"
"net"
"github.com/spf13/cobra"
"github.com/spf13/viper"
@@ -47,3 +49,59 @@ func GetLoggerFromCmd(cmd *cobra.Command) corelog.Logger {
return logger
}
// ExternalIP https://stackoverflow.com/questions/23558425/how-do-i-get-the-local-ip-address-in-go
// TODO there must be a better way to get external IP
func ExternalIP() (string, error) {
ifaces, err := net.Interfaces()
if err != nil {
return "", err
}
for _, iface := range ifaces {
if skipInterface(iface) {
continue
}
addrs, err := iface.Addrs()
if err != nil {
return "", err
}
for _, addr := range addrs {
ip := addrToIP(addr)
if ip == nil || ip.IsLoopback() {
continue
}
ip = ip.To4()
if ip == nil {
continue // not an ipv4 address
}
return ip.String(), nil
}
}
return "", errors.New("are you connected to the network?")
}
func skipInterface(iface net.Interface) bool {
if iface.Flags&net.FlagUp == 0 {
return true // interface down
}
if iface.Flags&net.FlagLoopback != 0 {
return true // loopback interface
}
return false
}
func addrToIP(addr net.Addr) net.IP {
var ip net.IP
switch v := addr.(type) {
case *net.IPNet:
ip = v.IP
case *net.IPAddr:
ip = v.IP
}
return ip
}