mirror of
https://source.quilibrium.com/quilibrium/ceremonyclient.git
synced 2024-11-14 20:25:17 +00:00
215 lines
12 KiB
Go
215 lines
12 KiB
Go
//go:build !js && !wasm
|
||
|
||
package main
|
||
|
||
import (
|
||
"encoding/hex"
|
||
"flag"
|
||
"fmt"
|
||
"log"
|
||
"os"
|
||
"os/signal"
|
||
"path/filepath"
|
||
"runtime/pprof"
|
||
"syscall"
|
||
"time"
|
||
|
||
"github.com/libp2p/go-libp2p/core/crypto"
|
||
"github.com/libp2p/go-libp2p/core/peer"
|
||
"github.com/pkg/errors"
|
||
"source.quilibrium.com/quilibrium/monorepo/node/app"
|
||
"source.quilibrium.com/quilibrium/monorepo/node/config"
|
||
)
|
||
|
||
var (
|
||
configDirectory = flag.String(
|
||
"config",
|
||
filepath.Join(".", ".config"),
|
||
"the configuration directory",
|
||
)
|
||
peerId = flag.Bool(
|
||
"peer-id",
|
||
false,
|
||
"print the peer id to stdout from the config and exit",
|
||
)
|
||
cpuprofile = flag.String(
|
||
"cpuprofile",
|
||
"",
|
||
"write cpu profile to file",
|
||
)
|
||
memprofile = flag.String(
|
||
"memprofile",
|
||
"",
|
||
"write memory profile after 20m to this file",
|
||
)
|
||
network = flag.Uint(
|
||
"network",
|
||
0,
|
||
"sets the active network for the node (mainnet = 0, primary testnet = 1)",
|
||
)
|
||
)
|
||
|
||
func main() {
|
||
flag.Parse()
|
||
|
||
if *memprofile != "" {
|
||
go func() {
|
||
for {
|
||
time.Sleep(5 * time.Minute)
|
||
f, err := os.Create(*memprofile)
|
||
if err != nil {
|
||
log.Fatal(err)
|
||
}
|
||
pprof.WriteHeapProfile(f)
|
||
f.Close()
|
||
}
|
||
}()
|
||
}
|
||
|
||
if *cpuprofile != "" {
|
||
f, err := os.Create(*cpuprofile)
|
||
if err != nil {
|
||
log.Fatal(err)
|
||
}
|
||
pprof.StartCPUProfile(f)
|
||
defer pprof.StopCPUProfile()
|
||
}
|
||
|
||
if *peerId {
|
||
config, err := config.LoadConfig(*configDirectory, "")
|
||
if err != nil {
|
||
panic(err)
|
||
}
|
||
|
||
printPeerID(config.P2P)
|
||
return
|
||
}
|
||
|
||
printLogo()
|
||
printVersion()
|
||
fmt.Println(" ")
|
||
|
||
nodeConfig, err := config.LoadConfig(*configDirectory, "")
|
||
if err != nil {
|
||
panic(err)
|
||
}
|
||
|
||
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.",
|
||
)
|
||
}
|
||
|
||
node, err := app.NewNode(nodeConfig)
|
||
if err != nil {
|
||
panic(err)
|
||
}
|
||
|
||
done := make(chan os.Signal, 1)
|
||
signal.Notify(done, syscall.SIGINT, syscall.SIGTERM)
|
||
|
||
go func() {
|
||
node.Start()
|
||
}()
|
||
|
||
<-done
|
||
node.Stop()
|
||
}
|
||
|
||
func getPeerID(p2pConfig *config.P2PConfig) peer.ID {
|
||
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"))
|
||
}
|
||
|
||
return id
|
||
}
|
||
|
||
func printPeerID(p2pConfig *config.P2PConfig) {
|
||
id := getPeerID(p2pConfig)
|
||
|
||
fmt.Println("Peer ID: " + id.String())
|
||
}
|
||
|
||
func printLogo() {
|
||
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("████████████████████████████████████████████████████████████████████████████████")
|
||
}
|
||
|
||
func printVersion() {
|
||
patch := config.GetPatchNumber()
|
||
patchString := ""
|
||
if patch != 0x00 {
|
||
patchString = fmt.Sprintf("-p%d", patch)
|
||
}
|
||
fmt.Println(" ")
|
||
fmt.Println(" Quilibrium Node - v" + config.GetVersionString() + patchString + " – Dusk - Bootstrap Node")
|
||
}
|