2023-10-14 04:05:44 +00:00
|
|
|
|
//go:build !js && !wasm
|
|
|
|
|
|
2023-08-21 03:50:38 +00:00
|
|
|
|
package main
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"encoding/hex"
|
|
|
|
|
"flag"
|
|
|
|
|
"fmt"
|
2024-02-19 00:28:29 +00:00
|
|
|
|
"log"
|
2023-08-21 03:50:38 +00:00
|
|
|
|
"os"
|
|
|
|
|
"os/signal"
|
2023-09-25 02:43:35 +00:00
|
|
|
|
"path/filepath"
|
2024-02-19 00:28:29 +00:00
|
|
|
|
"runtime/pprof"
|
2023-08-21 03:50:38 +00:00
|
|
|
|
"syscall"
|
2024-02-19 00:28:29 +00:00
|
|
|
|
"time"
|
2023-08-21 03:50:38 +00:00
|
|
|
|
|
|
|
|
|
"github.com/libp2p/go-libp2p/core/crypto"
|
|
|
|
|
"github.com/libp2p/go-libp2p/core/peer"
|
|
|
|
|
"github.com/pkg/errors"
|
2023-09-03 23:47:09 +00:00
|
|
|
|
"source.quilibrium.com/quilibrium/monorepo/node/app"
|
2023-08-21 03:50:38 +00:00
|
|
|
|
"source.quilibrium.com/quilibrium/monorepo/node/config"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
var (
|
2023-09-09 23:45:47 +00:00
|
|
|
|
configDirectory = flag.String(
|
|
|
|
|
"config",
|
2024-01-03 07:31:42 +00:00
|
|
|
|
filepath.Join(".", ".config"),
|
2023-09-09 23:45:47 +00:00
|
|
|
|
"the configuration directory",
|
|
|
|
|
)
|
2024-01-04 22:48:00 +00:00
|
|
|
|
peerId = flag.Bool(
|
|
|
|
|
"peer-id",
|
|
|
|
|
false,
|
|
|
|
|
"print the peer id to stdout from the config and exit",
|
|
|
|
|
)
|
2024-03-23 20:26:57 +00:00
|
|
|
|
cpuprofile = flag.String(
|
|
|
|
|
"cpuprofile",
|
|
|
|
|
"",
|
|
|
|
|
"write cpu profile to file",
|
|
|
|
|
)
|
2024-02-19 00:28:29 +00:00
|
|
|
|
memprofile = flag.String(
|
|
|
|
|
"memprofile",
|
|
|
|
|
"",
|
|
|
|
|
"write memory profile after 20m to this file",
|
|
|
|
|
)
|
2024-05-25 05:22:50 +00:00
|
|
|
|
network = flag.Uint(
|
|
|
|
|
"network",
|
|
|
|
|
0,
|
|
|
|
|
"sets the active network for the node (mainnet = 0, primary testnet = 1)",
|
|
|
|
|
)
|
2023-08-21 03:50:38 +00:00
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
func main() {
|
|
|
|
|
flag.Parse()
|
|
|
|
|
|
2024-08-08 05:41:46 +00:00
|
|
|
|
if *memprofile != "" {
|
2024-02-19 00:28:29 +00:00
|
|
|
|
go func() {
|
|
|
|
|
for {
|
2024-02-20 07:59:03 +00:00
|
|
|
|
time.Sleep(5 * time.Minute)
|
2024-02-19 00:28:29 +00:00
|
|
|
|
f, err := os.Create(*memprofile)
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Fatal(err)
|
|
|
|
|
}
|
|
|
|
|
pprof.WriteHeapProfile(f)
|
|
|
|
|
f.Close()
|
|
|
|
|
}
|
|
|
|
|
}()
|
|
|
|
|
}
|
|
|
|
|
|
2024-08-08 05:41:46 +00:00
|
|
|
|
if *cpuprofile != "" {
|
2024-03-23 20:26:57 +00:00
|
|
|
|
f, err := os.Create(*cpuprofile)
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Fatal(err)
|
|
|
|
|
}
|
|
|
|
|
pprof.StartCPUProfile(f)
|
|
|
|
|
defer pprof.StopCPUProfile()
|
|
|
|
|
}
|
|
|
|
|
|
2024-01-04 22:48:00 +00:00
|
|
|
|
if *peerId {
|
|
|
|
|
config, err := config.LoadConfig(*configDirectory, "")
|
|
|
|
|
if err != nil {
|
|
|
|
|
panic(err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
printPeerID(config.P2P)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
2024-08-08 05:41:46 +00:00
|
|
|
|
printLogo()
|
|
|
|
|
printVersion()
|
|
|
|
|
fmt.Println(" ")
|
2023-08-21 03:50:38 +00:00
|
|
|
|
|
2023-09-03 23:47:09 +00:00
|
|
|
|
nodeConfig, err := config.LoadConfig(*configDirectory, "")
|
|
|
|
|
if err != nil {
|
|
|
|
|
panic(err)
|
|
|
|
|
}
|
|
|
|
|
|
2024-05-25 05:22:50 +00:00
|
|
|
|
if *network != 0 {
|
|
|
|
|
if nodeConfig.P2P.BootstrapPeers[0] == config.BootstrapPeers[0] {
|
|
|
|
|
fmt.Println(
|
|
|
|
|
"Node has specified to run outside of mainnet but is still " +
|
|
|
|
|
"using default bootstrap list. This will fail. Exiting.",
|
|
|
|
|
)
|
|
|
|
|
os.Exit(1)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
nodeConfig.Engine.GenesisSeed = fmt.Sprintf(
|
|
|
|
|
"%02x%s",
|
|
|
|
|
byte(*network),
|
|
|
|
|
nodeConfig.Engine.GenesisSeed,
|
|
|
|
|
)
|
|
|
|
|
nodeConfig.P2P.Network = uint8(*network)
|
|
|
|
|
fmt.Println(
|
|
|
|
|
"Node is operating outside of mainnet – be sure you intended to do this.",
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
|
2024-08-08 05:41:46 +00:00
|
|
|
|
node, err := app.NewNode(nodeConfig)
|
2023-09-03 23:47:09 +00:00
|
|
|
|
if err != nil {
|
|
|
|
|
panic(err)
|
|
|
|
|
}
|
2023-10-09 04:52:19 +00:00
|
|
|
|
|
2024-08-08 05:41:46 +00:00
|
|
|
|
done := make(chan os.Signal, 1)
|
|
|
|
|
signal.Notify(done, syscall.SIGINT, syscall.SIGTERM)
|
2023-10-09 04:52:19 +00:00
|
|
|
|
|
2024-08-08 05:41:46 +00:00
|
|
|
|
go func() {
|
|
|
|
|
node.Start()
|
|
|
|
|
}()
|
2023-09-03 23:47:09 +00:00
|
|
|
|
|
|
|
|
|
<-done
|
|
|
|
|
node.Stop()
|
2023-08-21 03:50:38 +00:00
|
|
|
|
}
|
|
|
|
|
|
2024-07-29 17:46:36 +00:00
|
|
|
|
func getPeerID(p2pConfig *config.P2PConfig) peer.ID {
|
2023-08-21 03:50:38 +00:00
|
|
|
|
peerPrivKey, err := hex.DecodeString(p2pConfig.PeerPrivKey)
|
|
|
|
|
if err != nil {
|
|
|
|
|
panic(errors.Wrap(err, "error unmarshaling peerkey"))
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
privKey, err := crypto.UnmarshalEd448PrivateKey(peerPrivKey)
|
|
|
|
|
if err != nil {
|
|
|
|
|
panic(errors.Wrap(err, "error unmarshaling peerkey"))
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pub := privKey.GetPublic()
|
|
|
|
|
id, err := peer.IDFromPublicKey(pub)
|
|
|
|
|
if err != nil {
|
|
|
|
|
panic(errors.Wrap(err, "error getting peer id"))
|
|
|
|
|
}
|
|
|
|
|
|
2024-07-29 17:46:36 +00:00
|
|
|
|
return id
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func printPeerID(p2pConfig *config.P2PConfig) {
|
|
|
|
|
id := getPeerID(p2pConfig)
|
|
|
|
|
|
2023-08-21 03:50:38 +00:00
|
|
|
|
fmt.Println("Peer ID: " + id.String())
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func printLogo() {
|
2024-08-08 05:41:46 +00:00
|
|
|
|
fmt.Println("████████████████████████████████████████████████████████████████████████████████")
|
|
|
|
|
fmt.Println("████████████████████████████████████████████████████████████████████████████████")
|
|
|
|
|
fmt.Println("██████████████████████████████ ██████████████████████████████")
|
|
|
|
|
fmt.Println("█████████████████████████ █████████████████████████")
|
|
|
|
|
fmt.Println("█████████████████████ █████████████████████")
|
|
|
|
|
fmt.Println("██████████████████ ██████████████████")
|
|
|
|
|
fmt.Println("████████████████ ██████ ████████████████")
|
|
|
|
|
fmt.Println("██████████████ ████████████████████ ██████████████")
|
|
|
|
|
fmt.Println("█████████████ ████████████████████████████ ████████████")
|
|
|
|
|
fmt.Println("███████████ ██████████████████████████████████ ███████████")
|
|
|
|
|
fmt.Println("██████████ ██████████████████████████████████████ ██████████")
|
|
|
|
|
fmt.Println("█████████ ██████████████████████████████████████████ █████████")
|
|
|
|
|
fmt.Println("████████ ████████████████████████████████████████████ ████████")
|
|
|
|
|
fmt.Println("███████ ████████████████████ ████████████████████ ███████")
|
|
|
|
|
fmt.Println("██████ ███████████████████ ███████████████████ ██████")
|
|
|
|
|
fmt.Println("█████ ███████████████████ ███████████████████ █████")
|
|
|
|
|
fmt.Println("█████ ████████████████████ ████████████████████ █████")
|
|
|
|
|
fmt.Println("████ █████████████████████ █████████████████████ ████")
|
|
|
|
|
fmt.Println("████ ██████████████████████ ██████████████████████ ████")
|
|
|
|
|
fmt.Println("████ █████████████████████████ █████████████████████████ ████")
|
|
|
|
|
fmt.Println("████ ████████████████████████████████████████████████████████ ████")
|
|
|
|
|
fmt.Println("████ ████████████████████████████████████████████████████████ ████")
|
|
|
|
|
fmt.Println("████ ████████████████████ ████████████ ████████████████████ ████")
|
|
|
|
|
fmt.Println("████ ██████████████████ ███████████████████ ████")
|
|
|
|
|
fmt.Println("████ ████████████████ ████████████████ ████")
|
|
|
|
|
fmt.Println("████ ██████████████ ██ ██████████████ ████")
|
|
|
|
|
fmt.Println("█████ ████████████ ██████ ████████████ █████")
|
|
|
|
|
fmt.Println("█████ █████████ ██████████ █████████ █████")
|
|
|
|
|
fmt.Println("██████ ███████ █████████████ ███████ ██████")
|
|
|
|
|
fmt.Println("██████ ████████ █████████████████ ████████ ██████")
|
|
|
|
|
fmt.Println("███████ █████████ █████████████████████ ████████ ███████")
|
|
|
|
|
fmt.Println("████████ █████████████████████████████████ ████████████████")
|
|
|
|
|
fmt.Println("█████████ ██████████████████████████████████ ██████████████")
|
|
|
|
|
fmt.Println("██████████ ██████████████████████████████████ █████████████")
|
|
|
|
|
fmt.Println("████████████ ████████████████████████████████ ███████████")
|
|
|
|
|
fmt.Println("█████████████ ███████████████████████████████ █████████")
|
|
|
|
|
fmt.Println("███████████████ ████████████████ █████████ ███████")
|
|
|
|
|
fmt.Println("█████████████████ █████████ █████")
|
|
|
|
|
fmt.Println("████████████████████ █████████ ██████")
|
|
|
|
|
fmt.Println("███████████████████████ ██████████ ████████")
|
|
|
|
|
fmt.Println("███████████████████████████ ███████████████ ██████████")
|
|
|
|
|
fmt.Println("█████████████████████████████████ █████████████████████████████████")
|
|
|
|
|
fmt.Println("████████████████████████████████████████████████████████████████████████████████")
|
|
|
|
|
fmt.Println("████████████████████████████████████████████████████████████████████████████████")
|
2023-08-21 03:50:38 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func printVersion() {
|
2024-05-27 05:10:15 +00:00
|
|
|
|
patch := config.GetPatchNumber()
|
|
|
|
|
patchString := ""
|
|
|
|
|
if patch != 0x00 {
|
|
|
|
|
patchString = fmt.Sprintf("-p%d", patch)
|
|
|
|
|
}
|
2023-08-21 03:50:38 +00:00
|
|
|
|
fmt.Println(" ")
|
2024-08-08 05:41:46 +00:00
|
|
|
|
fmt.Println(" Quilibrium Node - v" + config.GetVersionString() + patchString + " – Dusk - Bootstrap Node")
|
2023-08-21 03:50:38 +00:00
|
|
|
|
}
|