aboutsummaryrefslogtreecommitdiffstats
path: root/dev_console.go
diff options
context:
space:
mode:
authorobscuren <geffobscura@gmail.com>2014-01-09 23:19:44 +0800
committerobscuren <geffobscura@gmail.com>2014-01-09 23:19:44 +0800
commit01740695cda7fe27c53f0fa078732fa5a15a88a5 (patch)
treeadf377b670c61c400d2481e0b7539292bd7da6ee /dev_console.go
parentd895f83136eccc7e440792fdb45fd4d40876d82e (diff)
downloadgo-tangerine-01740695cda7fe27c53f0fa078732fa5a15a88a5.tar
go-tangerine-01740695cda7fe27c53f0fa078732fa5a15a88a5.tar.gz
go-tangerine-01740695cda7fe27c53f0fa078732fa5a15a88a5.tar.bz2
go-tangerine-01740695cda7fe27c53f0fa078732fa5a15a88a5.tar.lz
go-tangerine-01740695cda7fe27c53f0fa078732fa5a15a88a5.tar.xz
go-tangerine-01740695cda7fe27c53f0fa078732fa5a15a88a5.tar.zst
go-tangerine-01740695cda7fe27c53f0fa078732fa5a15a88a5.zip
moved db to dev console
Diffstat (limited to 'dev_console.go')
-rw-r--r--dev_console.go115
1 files changed, 115 insertions, 0 deletions
diff --git a/dev_console.go b/dev_console.go
new file mode 100644
index 000000000..65166c0c1
--- /dev/null
+++ b/dev_console.go
@@ -0,0 +1,115 @@
+package main
+
+import (
+ "fmt"
+ "bufio"
+ "strings"
+ "os"
+ "errors"
+ "encoding/hex"
+)
+
+type Console struct {
+ db *MemDatabase
+ trie *Trie
+}
+
+func NewConsole() *Console {
+ db, _ := NewMemDatabase()
+ trie := NewTrie(db, "")
+
+ return &Console{db: db, trie: trie}
+}
+
+func (i *Console) ValidateInput(action string, argumentLength int) error {
+ err := false
+ var expArgCount int
+
+ switch {
+ case action == "update" && argumentLength != 2:
+ err = true
+ expArgCount = 2
+ case action == "get" && argumentLength != 1:
+ err = true
+ expArgCount = 1
+ case action == "dag" && argumentLength != 2:
+ err = true
+ expArgCount = 2
+ }
+
+ if err {
+ return errors.New(fmt.Sprintf("'%s' requires %d args, got %d", action, expArgCount, argumentLength))
+ } else {
+ return nil
+ }
+}
+
+func (i *Console) ParseInput(input string) bool {
+ scanner := bufio.NewScanner(strings.NewReader(input))
+ scanner.Split(bufio.ScanWords)
+
+ count := 0
+ var tokens []string
+ for scanner.Scan() {
+ count++
+ tokens = append(tokens, scanner.Text())
+ }
+ if err := scanner.Err(); err != nil {
+ fmt.Fprintln(os.Stderr, "reading input:", err)
+ }
+
+ if len(tokens) == 0 { return true }
+
+ err := i.ValidateInput(tokens[0], count-1)
+ if err != nil {
+ fmt.Println(err)
+ } else {
+ switch tokens[0] {
+ case "update":
+ i.trie.Update(tokens[1], tokens[2])
+
+ fmt.Println(hex.EncodeToString([]byte(i.trie.root)))
+ case "get":
+ fmt.Println(i.trie.Get(tokens[1]))
+ case "root":
+ fmt.Println(hex.EncodeToString([]byte(i.trie.root)))
+ case "rawroot":
+ fmt.Println(i.trie.root)
+ case "print":
+ i.db.Print()
+ case "dag":
+ fmt.Println(DaggerVerify(Big(tokens[1]), BigPow(2, 36), Big(tokens[2])))
+ case "exit", "quit", "q":
+ return false
+ case "help":
+ fmt.Printf( "COMMANDS:\n"+
+ "\033[1m= DB =\033[0m\n"+
+ "update KEY VALUE - Updates/Creates a new value for the given key\n"+
+ "get KEY - Retrieves the given key\n"+
+ "root - Prints the hex encoded merkle root\n"+
+ "rawroot - Prints the raw merkle root\n"+
+ "\033[1m= Dagger =\033[0m\n"+
+ "dag HASH NONCE - Verifies a nonce with the given hash with dagger\n")
+ default:
+ fmt.Println("Unknown command:", tokens[0])
+ }
+ }
+
+ return true
+}
+
+func (i *Console) Start() {
+ fmt.Printf("Eth Console. Type (help) for help\n")
+ reader := bufio.NewReader(os.Stdin)
+ for {
+ fmt.Printf("eth >>> ")
+ str, _, err := reader.ReadLine()
+ if err != nil {
+ fmt.Println("Error reading input", err)
+ } else {
+ if !i.ParseInput(string(str)) {
+ return
+ }
+ }
+ }
+}