diff options
author | obscuren <geffobscura@gmail.com> | 2014-07-17 21:32:44 +0800 |
---|---|---|
committer | obscuren <geffobscura@gmail.com> | 2014-07-17 21:32:44 +0800 |
commit | c9517024237de781cdc450bca89907217e5a8cef (patch) | |
tree | 9ed398ca6ddbc019917b96a6e14988d89fbef15a /ethereum | |
parent | fc8bd7229ee25e214130df98875ecc13e4650911 (diff) | |
parent | 7d64b589b4cf3f71125d5bd0f0a8f6a560e909db (diff) | |
download | dexon-c9517024237de781cdc450bca89907217e5a8cef.tar.gz dexon-c9517024237de781cdc450bca89907217e5a8cef.tar.zst dexon-c9517024237de781cdc450bca89907217e5a8cef.zip |
Merge branch 'develop'
Diffstat (limited to 'ethereum')
-rw-r--r-- | ethereum/cmd.go | 5 | ||||
-rw-r--r-- | ethereum/flags.go | 4 | ||||
-rw-r--r-- | ethereum/main.go | 9 | ||||
-rw-r--r-- | ethereum/repl/javascript_runtime.go (renamed from ethereum/javascript_runtime.go) | 2 | ||||
-rw-r--r-- | ethereum/repl/js_lib.go (renamed from ethereum/js_lib.go) | 2 | ||||
-rw-r--r-- | ethereum/repl/repl.go | 83 | ||||
-rw-r--r-- | ethereum/repl/repl_darwin.go (renamed from ethereum/repl_darwin.go) | 2 | ||||
l--------- | ethereum/repl/repl_linux.go (renamed from ethereum/repl_linux.go) | 0 | ||||
-rw-r--r-- | ethereum/repl/repl_windows.go (renamed from ethereum/repl_windows.go) | 2 | ||||
-rw-r--r-- | ethereum/repl/types.go (renamed from ethereum/repl.go) | 82 |
10 files changed, 115 insertions, 76 deletions
diff --git a/ethereum/cmd.go b/ethereum/cmd.go index 08147824d..ff2b8409c 100644 --- a/ethereum/cmd.go +++ b/ethereum/cmd.go @@ -2,13 +2,14 @@ package main import ( "github.com/ethereum/eth-go" + "github.com/ethereum/go-ethereum/ethereum/repl" "github.com/ethereum/go-ethereum/utils" "io/ioutil" "os" ) func InitJsConsole(ethereum *eth.Ethereum) { - repl := NewJSRepl(ethereum) + repl := ethrepl.NewJSRepl(ethereum) go repl.Start() utils.RegisterInterrupt(func(os.Signal) { repl.Stop() @@ -24,7 +25,7 @@ func ExecJsFile(ethereum *eth.Ethereum, InputFile string) { if err != nil { logger.Fatalln(err) } - re := NewJSRE(ethereum) + re := ethrepl.NewJSRE(ethereum) utils.RegisterInterrupt(func(os.Signal) { re.Stop() }) diff --git a/ethereum/flags.go b/ethereum/flags.go index d5a9c3a8a..4f59ddf06 100644 --- a/ethereum/flags.go +++ b/ethereum/flags.go @@ -11,6 +11,8 @@ import ( var Identifier string var KeyRing string +var DiffTool bool +var DiffType string var KeyStore string var StartRpc bool var RpcPort int @@ -66,6 +68,8 @@ func Init() { flag.StringVar(&ConfigFile, "conf", defaultConfigFile, "config file") flag.StringVar(&DebugFile, "debug", "", "debug file (no debugging if not set)") flag.IntVar(&LogLevel, "loglevel", int(ethlog.InfoLevel), "loglevel: 0-5: silent,error,warn,info,debug,debug detail)") + flag.BoolVar(&DiffTool, "difftool", false, "creates output for diff'ing. Sets LogLevel=0") + flag.StringVar(&DiffType, "diff", "all", "sets the level of diff output [vm, all]. Has no effect if difftool=false") flag.BoolVar(&StartMining, "mine", false, "start dagger mining") flag.BoolVar(&StartJsConsole, "js", false, "launches javascript console") diff --git a/ethereum/main.go b/ethereum/main.go index e4d73d494..fd4a89aa9 100644 --- a/ethereum/main.go +++ b/ethereum/main.go @@ -2,6 +2,7 @@ package main import ( "github.com/ethereum/eth-go/ethlog" + "github.com/ethereum/eth-go/ethutil" "github.com/ethereum/go-ethereum/utils" "runtime" ) @@ -20,7 +21,15 @@ func main() { // precedence: code-internal flag default < config file < environment variables < command line Init() // parsing command line + + // If the difftool option is selected ignore all other log output + if DiffTool { + LogLevel = 0 + } + utils.InitConfig(ConfigFile, Datadir, "ETH") + ethutil.Config.Diff = DiffTool + ethutil.Config.DiffType = DiffType utils.InitDataDir(Datadir) diff --git a/ethereum/javascript_runtime.go b/ethereum/repl/javascript_runtime.go index 852a50487..cd87f9868 100644 --- a/ethereum/javascript_runtime.go +++ b/ethereum/repl/javascript_runtime.go @@ -1,4 +1,4 @@ -package main +package ethrepl import ( "fmt" diff --git a/ethereum/js_lib.go b/ethereum/repl/js_lib.go index 189dcc3a0..c781c43d0 100644 --- a/ethereum/js_lib.go +++ b/ethereum/repl/js_lib.go @@ -1,4 +1,4 @@ -package main +package ethrepl const jsLib = ` function pp(object) { diff --git a/ethereum/repl/repl.go b/ethereum/repl/repl.go new file mode 100644 index 000000000..92d4ad86a --- /dev/null +++ b/ethereum/repl/repl.go @@ -0,0 +1,83 @@ +package ethrepl + +import ( + "bufio" + "fmt" + "github.com/ethereum/eth-go" + "github.com/ethereum/eth-go/ethlog" + "github.com/ethereum/eth-go/ethutil" + "io" + "os" + "path" +) + +var logger = ethlog.NewLogger("REPL") + +type Repl interface { + Start() + Stop() +} + +type JSRepl struct { + re *JSRE + + prompt string + + history *os.File + + running bool +} + +func NewJSRepl(ethereum *eth.Ethereum) *JSRepl { + hist, err := os.OpenFile(path.Join(ethutil.Config.ExecPath, "history"), os.O_RDWR|os.O_CREATE, os.ModePerm) + if err != nil { + panic(err) + } + + return &JSRepl{re: NewJSRE(ethereum), prompt: "> ", history: hist} +} + +func (self *JSRepl) Start() { + if !self.running { + self.running = true + logger.Infoln("init JS Console") + reader := bufio.NewReader(self.history) + for { + line, err := reader.ReadString('\n') + if err != nil && err == io.EOF { + break + } else if err != nil { + fmt.Println("error reading history", err) + break + } + + addHistory(line[:len(line)-1]) + } + self.read() + } +} + +func (self *JSRepl) Stop() { + if self.running { + self.running = false + self.re.Stop() + logger.Infoln("exit JS Console") + self.history.Close() + } +} + +func (self *JSRepl) parseInput(code string) { + defer func() { + if r := recover(); r != nil { + fmt.Println("[native] error", r) + } + }() + + value, err := self.re.Run(code) + if err != nil { + fmt.Println(err) + return + } + + self.PrintValue(value) +} diff --git a/ethereum/repl_darwin.go b/ethereum/repl/repl_darwin.go index 62b40059a..3a91b0d44 100644 --- a/ethereum/repl_darwin.go +++ b/ethereum/repl/repl_darwin.go @@ -1,4 +1,4 @@ -package main +package ethrepl // #cgo darwin CFLAGS: -I/usr/local/opt/readline/include // #cgo darwin LDFLAGS: -L/usr/local/opt/readline/lib diff --git a/ethereum/repl_linux.go b/ethereum/repl/repl_linux.go index 276f135d7..276f135d7 120000 --- a/ethereum/repl_linux.go +++ b/ethereum/repl/repl_linux.go diff --git a/ethereum/repl_windows.go b/ethereum/repl/repl_windows.go index 9d4787772..4106c89bc 100644 --- a/ethereum/repl_windows.go +++ b/ethereum/repl/repl_windows.go @@ -1,4 +1,4 @@ -package main +package ethrepl import ( "bufio" diff --git a/ethereum/repl.go b/ethereum/repl/types.go index 34380a06f..16a18e6e5 100644 --- a/ethereum/repl.go +++ b/ethereum/repl/types.go @@ -1,84 +1,26 @@ -package main +package ethrepl import ( - "bufio" "fmt" - "github.com/ethereum/eth-go" "github.com/ethereum/eth-go/ethpub" "github.com/ethereum/eth-go/ethutil" "github.com/obscuren/otto" - "io" - "os" - "path" ) -type Repl interface { - Start() - Stop() -} - -type JSRepl struct { - re *JSRE - - prompt string - - history *os.File - - running bool -} - -func NewJSRepl(ethereum *eth.Ethereum) *JSRepl { - hist, err := os.OpenFile(path.Join(ethutil.Config.ExecPath, "history"), os.O_RDWR|os.O_CREATE, os.ModePerm) - if err != nil { - panic(err) - } - - return &JSRepl{re: NewJSRE(ethereum), prompt: "> ", history: hist} -} - -func (self *JSRepl) Start() { - if !self.running { - self.running = true - logger.Infoln("init JS Console") - reader := bufio.NewReader(self.history) - for { - line, err := reader.ReadString('\n') - if err != nil && err == io.EOF { - break - } else if err != nil { - fmt.Println("error reading history", err) - break - } - - addHistory(line[:len(line)-1]) - } - self.read() - } -} - -func (self *JSRepl) Stop() { - if self.running { - self.running = false - self.re.Stop() - logger.Infoln("exit JS Console") - self.history.Close() - } +type JSStateObject struct { + *ethpub.PStateObject + eth *JSEthereum } -func (self *JSRepl) parseInput(code string) { - defer func() { - if r := recover(); r != nil { - fmt.Println("[native] error", r) - } - }() +func (self *JSStateObject) EachStorage(call otto.FunctionCall) otto.Value { + cb := call.Argument(0) + self.PStateObject.EachStorage(func(key string, value *ethutil.Value) { + value.Decode() - value, err := self.re.Run(code) - if err != nil { - fmt.Println(err) - return - } + cb.Call(self.eth.toVal(self), self.eth.toVal(key), self.eth.toVal(ethutil.Bytes2Hex(value.Bytes()))) + }) - self.PrintValue(value) + return otto.UndefinedValue() } // The JSEthereum object attempts to wrap the PEthereum object and returns @@ -110,7 +52,7 @@ func (self *JSEthereum) GetKey() otto.Value { } func (self *JSEthereum) GetStateObject(addr string) otto.Value { - return self.toVal(self.PEthereum.GetStateObject(addr)) + return self.toVal(&JSStateObject{self.PEthereum.GetStateObject(addr), self}) } func (self *JSEthereum) GetStateKeyVals(addr string) otto.Value { |