Implement 'startnode' CLI command
This commit is contained in:
parent
2e06c0a637
commit
60a1386f3d
20
cli.go
20
cli.go
|
@ -19,6 +19,7 @@ func (cli *CLI) printUsage() {
|
||||||
fmt.Println(" printchain - Print all the blocks of the blockchain")
|
fmt.Println(" printchain - Print all the blocks of the blockchain")
|
||||||
fmt.Println(" reindexutxo - Rebuilds the UTXO set")
|
fmt.Println(" reindexutxo - Rebuilds the UTXO set")
|
||||||
fmt.Println(" send -from FROM -to TO -amount AMOUNT - Send AMOUNT of coins from FROM address to TO")
|
fmt.Println(" send -from FROM -to TO -amount AMOUNT - Send AMOUNT of coins from FROM address to TO")
|
||||||
|
fmt.Println(" startnode -node-id NODE_ID - Start a node with specified ID")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cli *CLI) validateArgs() {
|
func (cli *CLI) validateArgs() {
|
||||||
|
@ -39,12 +40,14 @@ func (cli *CLI) Run() {
|
||||||
printChainCmd := flag.NewFlagSet("printchain", flag.ExitOnError)
|
printChainCmd := flag.NewFlagSet("printchain", flag.ExitOnError)
|
||||||
reindexUTXOCmd := flag.NewFlagSet("reindexutxo", flag.ExitOnError)
|
reindexUTXOCmd := flag.NewFlagSet("reindexutxo", flag.ExitOnError)
|
||||||
sendCmd := flag.NewFlagSet("send", flag.ExitOnError)
|
sendCmd := flag.NewFlagSet("send", flag.ExitOnError)
|
||||||
|
startNodeCmd := flag.NewFlagSet("startnode", flag.ExitOnError)
|
||||||
|
|
||||||
getBalanceAddress := getBalanceCmd.String("address", "", "The address to get balance for")
|
getBalanceAddress := getBalanceCmd.String("address", "", "The address to get balance for")
|
||||||
createBlockchainAddress := createBlockchainCmd.String("address", "", "The address to send genesis block reward to")
|
createBlockchainAddress := createBlockchainCmd.String("address", "", "The address to send genesis block reward to")
|
||||||
sendFrom := sendCmd.String("from", "", "Source wallet address")
|
sendFrom := sendCmd.String("from", "", "Source wallet address")
|
||||||
sendTo := sendCmd.String("to", "", "Destination wallet address")
|
sendTo := sendCmd.String("to", "", "Destination wallet address")
|
||||||
sendAmount := sendCmd.Int("amount", 0, "Amount to send")
|
sendAmount := sendCmd.Int("amount", 0, "Amount to send")
|
||||||
|
startNodeID := startNodeCmd.Int("node-id", 0, "Node ID")
|
||||||
|
|
||||||
switch os.Args[1] {
|
switch os.Args[1] {
|
||||||
case "getbalance":
|
case "getbalance":
|
||||||
|
@ -72,13 +75,18 @@ func (cli *CLI) Run() {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Panic(err)
|
log.Panic(err)
|
||||||
}
|
}
|
||||||
|
case "reindexutxo":
|
||||||
|
err := reindexUTXOCmd.Parse(os.Args[2:])
|
||||||
|
if err != nil {
|
||||||
|
log.Panic(err)
|
||||||
|
}
|
||||||
case "send":
|
case "send":
|
||||||
err := sendCmd.Parse(os.Args[2:])
|
err := sendCmd.Parse(os.Args[2:])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Panic(err)
|
log.Panic(err)
|
||||||
}
|
}
|
||||||
case "reindexutxo":
|
case "startnode":
|
||||||
err := reindexUTXOCmd.Parse(os.Args[2:])
|
err := startNodeCmd.Parse(os.Args[2:])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Panic(err)
|
log.Panic(err)
|
||||||
}
|
}
|
||||||
|
@ -127,4 +135,12 @@ func (cli *CLI) Run() {
|
||||||
|
|
||||||
cli.send(*sendFrom, *sendTo, *sendAmount)
|
cli.send(*sendFrom, *sendTo, *sendAmount)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if startNodeCmd.Parsed() {
|
||||||
|
if *startNodeID == 0 {
|
||||||
|
startNodeCmd.Usage()
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
cli.startNode(*startNodeID)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import "fmt"
|
||||||
|
|
||||||
|
func (cli *CLI) startNode(nodeID int) {
|
||||||
|
fmt.Printf("Starting node %d\n", nodeID)
|
||||||
|
StartServer(nodeID)
|
||||||
|
}
|
|
@ -0,0 +1,30 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"log"
|
||||||
|
"net"
|
||||||
|
)
|
||||||
|
|
||||||
|
func handleConnection(conn net.Conn) {
|
||||||
|
io.Copy(conn, conn)
|
||||||
|
conn.Close()
|
||||||
|
}
|
||||||
|
|
||||||
|
// StartServer starts a node
|
||||||
|
func StartServer(nodeID int) {
|
||||||
|
ln, err := net.Listen("tcp", fmt.Sprintf(":%d", nodeID))
|
||||||
|
if err != nil {
|
||||||
|
log.Panic(err)
|
||||||
|
}
|
||||||
|
defer ln.Close()
|
||||||
|
|
||||||
|
for {
|
||||||
|
conn, err := ln.Accept()
|
||||||
|
if err != nil {
|
||||||
|
log.Panic(err)
|
||||||
|
}
|
||||||
|
go handleConnection(conn)
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue