From b0791af5c6fa57f433234154e268af1adf92266a Mon Sep 17 00:00:00 2001 From: Ivan Kuznetsov Date: Mon, 28 Aug 2017 21:03:43 +0700 Subject: [PATCH] Improve command line arguments processing --- cli.go | 68 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ main.go | 36 ++---------------------------- 2 files changed, 70 insertions(+), 34 deletions(-) create mode 100644 cli.go diff --git a/cli.go b/cli.go new file mode 100644 index 0000000..7893a53 --- /dev/null +++ b/cli.go @@ -0,0 +1,68 @@ +package main + +import ( + "fmt" + "os" + "strconv" +) + +// CLI responsible for processing command line arguments +type CLI struct { + bc *Blockchain +} + +func (cli *CLI) printUsage() { + fmt.Println("Usage:") + fmt.Println(" addBlock BLOCK_DATA - add a block to the blockchain") + fmt.Println(" printChain - print all the blocks of the blockchain") +} + +func (cli *CLI) validateArgs() { + if len(os.Args) < 2 { + cli.printUsage() + os.Exit(1) + } +} + +func (cli *CLI) addBlock() { + if len(os.Args) < 3 { + fmt.Println("Error: BLOCK_DATA is not specified.") + os.Exit(1) + } + cli.bc.AddBlock(os.Args[2]) + fmt.Println("Success!") +} + +func (cli *CLI) printChain() { + bci := cli.bc.Iterator() + + for { + block := bci.Next() + + fmt.Printf("Prev. hash: %x\n", block.PrevBlockHash) + fmt.Printf("Data: %s\n", block.Data) + fmt.Printf("Hash: %x\n", block.Hash) + pow := NewProofOfWork(block) + fmt.Printf("PoW: %s\n", strconv.FormatBool(pow.Validate())) + fmt.Println() + + if len(block.PrevBlockHash) == 0 { + break + } + } +} + +// ProcessArgs parses command line arguments and processes commands +func (cli *CLI) ProcessArgs() { + cli.validateArgs() + + switch os.Args[1] { + case "addBlock": + cli.addBlock() + case "printChain": + cli.printChain() + default: + cli.printUsage() + os.Exit(1) + } +} diff --git a/main.go b/main.go index 5c94a85..4d45535 100644 --- a/main.go +++ b/main.go @@ -1,41 +1,9 @@ package main -import ( - "fmt" - "os" - "strconv" -) - func main() { bc := NewBlockchain() defer bc.db.Close() - if len(os.Args) < 2 { - fmt.Println("Wrong!") - os.Exit(1) - } - - if os.Args[1] == "addBlock" { - bc.AddBlock(os.Args[2]) - fmt.Println("Success!") - } - - if os.Args[1] == "printChain" { - bci := bc.Iterator() - - for { - block := bci.Next() - - fmt.Printf("Prev. hash: %x\n", block.PrevBlockHash) - fmt.Printf("Data: %s\n", block.Data) - fmt.Printf("Hash: %x\n", block.Hash) - pow := NewProofOfWork(block) - fmt.Printf("PoW: %s\n", strconv.FormatBool(pow.Validate())) - fmt.Println() - - if len(block.PrevBlockHash) == 0 { - break - } - } - } + cli := CLI{bc} + cli.ProcessArgs() }