package main import ( "fmt" "strconv" "time" ) func (cli *CLI) printChain(nodeID string) { bc := NewBlockchain(nodeID) defer bc.db.Close() bci := bc.Iterator() for { block := bci.Next() fmt.Printf("============ Block %x ============\n", block.Hash) fmt.Printf("Height: %d\n", block.Height) fmt.Printf("Prev. block: %x\n", block.PrevBlockHash) fmt.Printf("Created at : %s\n", time.Unix(block.Timestamp, 0)) pow := NewProofOfWork(block) fmt.Printf("PoW: %s\n\n", strconv.FormatBool(pow.Validate())) for _, tx := range block.Transactions { fmt.Println(tx) } fmt.Printf("\n\n") if len(block.PrevBlockHash) == 0 { break } } } func (cli *CLI) printBlock(blockHash, nodeID string) { bc := NewBlockchain(nodeID) defer bc.db.Close() bci := bc.Iterator() for { block := bci.Next() hash := fmt.Sprintf("%x", block.Hash) if hash == blockHash { fmt.Printf("============ Block %x ============\n", block.Hash) fmt.Printf("Height: %d\n", block.Height) fmt.Printf("Prev. block: %x\n", block.PrevBlockHash) fmt.Printf("Created at : %s\n", time.Unix(block.Timestamp, 0)) pow := NewProofOfWork(block) fmt.Printf("PoW: %s\n\n", strconv.FormatBool(pow.Validate())) for _, tx := range block.Transactions { fmt.Println(tx) } fmt.Printf("\n\n") } if len(block.PrevBlockHash) == 0 { break } } }