aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorobscuren <geffobscura@gmail.com>2014-07-17 21:32:44 +0800
committerobscuren <geffobscura@gmail.com>2014-07-17 21:32:44 +0800
commitc9517024237de781cdc450bca89907217e5a8cef (patch)
tree9ed398ca6ddbc019917b96a6e14988d89fbef15a
parentfc8bd7229ee25e214130df98875ecc13e4650911 (diff)
parent7d64b589b4cf3f71125d5bd0f0a8f6a560e909db (diff)
downloadgo-tangerine-c9517024237de781cdc450bca89907217e5a8cef.tar.gz
go-tangerine-c9517024237de781cdc450bca89907217e5a8cef.tar.zst
go-tangerine-c9517024237de781cdc450bca89907217e5a8cef.zip
Merge branch 'develop'0.5.17
-rw-r--r--ethereal/assets/debugger/debugger.qml8
-rw-r--r--ethereal/assets/qml/webapp.qml3
-rw-r--r--ethereal/debugger.go13
-rw-r--r--ethereal/flags.go2
-rw-r--r--ethereal/html_container.go7
-rw-r--r--ethereum/cmd.go5
-rw-r--r--ethereum/flags.go4
-rw-r--r--ethereum/main.go9
-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.go83
-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
-rw-r--r--utils/cmd.go30
16 files changed, 167 insertions, 87 deletions
diff --git a/ethereal/assets/debugger/debugger.qml b/ethereal/assets/debugger/debugger.qml
index f204647c8..34fe01253 100644
--- a/ethereal/assets/debugger/debugger.qml
+++ b/ethereal/assets/debugger/debugger.qml
@@ -19,7 +19,7 @@ ApplicationWindow {
property alias dataText: rawDataField.text
onClosing: {
- compileTimer.stop()
+ //compileTimer.stop()
}
MenuBar {
@@ -86,7 +86,7 @@ ApplicationWindow {
TableView {
id: asmTableView
width: 200
- TableViewColumn{ role: "value" ; title: "" ; width: 200 }
+ TableViewColumn{ role: "value" ; title: "" ; width: asmTableView.width - 2 }
model: asmModel
}
@@ -112,13 +112,15 @@ ApplicationWindow {
anchors.right: settings.left
focus: true
+ /*
Timer {
id: compileTimer
interval: 500 ; running: true ; repeat: true
onTriggered: {
- dbg.compile(codeEditor.text)
+ dbg.autoComp(codeEditor.text)
}
}
+ */
}
Column {
diff --git a/ethereal/assets/qml/webapp.qml b/ethereal/assets/qml/webapp.qml
index 401267511..5e4c035d8 100644
--- a/ethereal/assets/qml/webapp.qml
+++ b/ethereal/assets/qml/webapp.qml
@@ -191,6 +191,7 @@ ApplicationWindow {
inspector.visible = false
}else{
inspector.visible = true
+ inspector.url = webview.experimental.remoteInspectorUrl
}
}
onDoubleClicked: {
@@ -224,7 +225,6 @@ ApplicationWindow {
WebView {
id: inspector
visible: false
- url: webview.experimental.remoteInspectorUrl
anchors {
left: root.left
right: root.right
@@ -238,7 +238,6 @@ ApplicationWindow {
name: "inspectorShown"
PropertyChanges {
target: inspector
- url: webview.experimental.remoteInspectorUrl
}
}
]
diff --git a/ethereal/debugger.go b/ethereal/debugger.go
index 64ca316f8..997c2e8dd 100644
--- a/ethereal/debugger.go
+++ b/ethereal/debugger.go
@@ -74,6 +74,13 @@ func (self *DebuggerWindow) Compile(code string) {
}
}
+// Used by QML
+func (self *DebuggerWindow) AutoComp(code string) {
+ if self.Db.done {
+ self.Compile(code)
+ }
+}
+
func (self *DebuggerWindow) ClearLog() {
self.win.Root().Call("clearLog")
}
@@ -110,8 +117,6 @@ func (self *DebuggerWindow) Debug(valueStr, gasStr, gasPriceStr, scriptStr, data
return
}
- self.SetAsm(script)
-
var (
gas = ethutil.Big(gasStr)
gasPrice = ethutil.Big(gasPriceStr)
@@ -257,6 +262,10 @@ func (self *Debugger) StepHook(pc int, op ethchain.OpCode, mem *ethchain.Memory,
return self.halting(pc, op, mem, stack, stateObject)
}
+func (self *Debugger) SetCode(byteCode []byte) {
+ self.main.SetAsm(byteCode)
+}
+
func (self *Debugger) BreakPoints() []int64 {
return self.breakPoints
}
diff --git a/ethereal/flags.go b/ethereal/flags.go
index d5ca9f336..c9327c3d3 100644
--- a/ethereal/flags.go
+++ b/ethereal/flags.go
@@ -36,6 +36,7 @@ var LogLevel int
// flags specific to gui client
var AssetPath string
+//TODO: If we re-use the one defined in cmd.go the binary osx image crashes. If somebody finds out why we can dry this up.
func defaultAssetPath() string {
var assetPath string
// If the current working directory is the go-ethereum dir
@@ -60,7 +61,6 @@ func defaultAssetPath() string {
}
return assetPath
}
-
func defaultDataDir() string {
usr, _ := user.Current()
return path.Join(usr.HomeDir, ".ethereal")
diff --git a/ethereal/html_container.go b/ethereal/html_container.go
index 1e835eebc..04136f801 100644
--- a/ethereal/html_container.go
+++ b/ethereal/html_container.go
@@ -8,7 +8,6 @@ import (
"github.com/go-qml/qml"
"github.com/howeyc/fsnotify"
"io/ioutil"
- "log"
"net/url"
"os"
"path"
@@ -59,7 +58,7 @@ func (app *HtmlApplication) RootFolder() string {
if err != nil {
return ""
}
- return path.Dir(folder.RequestURI())
+ return path.Dir(ethutil.WindonizePath(folder.RequestURI()))
}
func (app *HtmlApplication) RecursiveFolders() []os.FileInfo {
files, _ := ioutil.ReadDir(app.RootFolder())
@@ -77,11 +76,13 @@ func (app *HtmlApplication) NewWatcher(quitChan chan bool) {
app.watcher, err = fsnotify.NewWatcher()
if err != nil {
+ logger.Infoln("Could not create new auto-reload watcher:", err)
return
}
err = app.watcher.Watch(app.RootFolder())
if err != nil {
- log.Fatal(err)
+ logger.Infoln("Could not start auto-reload watcher:", err)
+ return
}
for _, folder := range app.RecursiveFolders() {
fullPath := app.RootFolder() + "/" + folder.Name()
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 {
diff --git a/utils/cmd.go b/utils/cmd.go
index 889726b04..1e1599582 100644
--- a/utils/cmd.go
+++ b/utils/cmd.go
@@ -1,6 +1,7 @@
package utils
import (
+ "bitbucket.org/kardianos/osext"
"fmt"
"github.com/ethereum/eth-go"
"github.com/ethereum/eth-go/ethcrypto"
@@ -16,6 +17,8 @@ import (
"os"
"os/signal"
"path"
+ "path/filepath"
+ "runtime"
"time"
)
@@ -164,7 +167,34 @@ func NewKeyManager(KeyStore string, Datadir string, db ethutil.Database) *ethcry
return keyManager
}
+func DefaultAssetPath() string {
+ var assetPath string
+ // If the current working directory is the go-ethereum dir
+ // assume a debug build and use the source directory as
+ // asset directory.
+ pwd, _ := os.Getwd()
+ if pwd == path.Join(os.Getenv("GOPATH"), "src", "github.com", "ethereum", "go-ethereum", "ethereal") {
+ assetPath = path.Join(pwd, "assets")
+ } else {
+ switch runtime.GOOS {
+ case "darwin":
+ // Get Binary Directory
+ exedir, _ := osext.ExecutableFolder()
+ assetPath = filepath.Join(exedir, "../Resources")
+ case "linux":
+ assetPath = "/usr/share/ethereal"
+ case "windows":
+ assetPath = "./assets"
+ default:
+ assetPath = "."
+ }
+ }
+ return assetPath
+}
+
func KeyTasks(keyManager *ethcrypto.KeyManager, KeyRing string, GenAddr bool, SecretFile string, ExportDir string, NonInteractive bool) {
+ ethcrypto.InitWords(DefaultAssetPath()) // Init mnemonic word list
+
var err error
switch {
case GenAddr: