From 09728bf43ce5eaed3060d0ce8aae323055aa6cba Mon Sep 17 00:00:00 2001
From: obscuren <geffobscura@gmail.com>
Date: Wed, 28 May 2014 13:00:45 +0200
Subject: Debugger script&data now accept "0x" values

---
 ethereal/assets/debugger/debugger.qml |  6 +++-
 ethereal/ui/debugger.go               | 64 ++++++++++++++++++++++-------------
 2 files changed, 45 insertions(+), 25 deletions(-)

(limited to 'ethereal')

diff --git a/ethereal/assets/debugger/debugger.qml b/ethereal/assets/debugger/debugger.qml
index 7c3ffbceb..40b0b68b1 100644
--- a/ethereal/assets/debugger/debugger.qml
+++ b/ethereal/assets/debugger/debugger.qml
@@ -14,6 +14,9 @@ ApplicationWindow {
     width: 1290
     height: 900
 
+	property alias codeText: codeEditor.text
+	property alias dataText: rawDataField.text
+
 	MenuBar {
 		Menu {
 			title: "Debugger"
@@ -167,6 +170,7 @@ ApplicationWindow {
             }
         }
     }
+
     toolBar: ToolBar {
         RowLayout {
             spacing: 5
@@ -205,7 +209,7 @@ ApplicationWindow {
 
     function setInstruction(num) {
         asmTableView.selection.clear()
-        asmTableView.selection.select(num-1)
+        asmTableView.selection.select(num)
     }
 
     function setMem(mem) {
diff --git a/ethereal/ui/debugger.go b/ethereal/ui/debugger.go
index 8b27c2fe5..5b1fb50a2 100644
--- a/ethereal/ui/debugger.go
+++ b/ethereal/ui/debugger.go
@@ -9,6 +9,23 @@ import (
 	"strings"
 )
 
+func formatData(data string) []byte {
+	if len(data) == 0 {
+		return nil
+	}
+	// Simple stupid
+	d := new(big.Int)
+	if data[0:1] == "\"" && data[len(data)-1:] == "\"" {
+		d.SetBytes([]byte(data[1 : len(data)-1]))
+	} else if data[:2] == "0x" {
+		d.SetBytes(ethutil.FromHex(data[2:]))
+	} else {
+		d.SetString(data, 0)
+	}
+
+	return ethutil.BigToBytes(d, 256)
+}
+
 type DebuggerWindow struct {
 	win    *qml.Window
 	engine *qml.Engine
@@ -41,21 +58,12 @@ func (self *DebuggerWindow) Show() {
 	}()
 }
 
-func formatData(data string) []byte {
-	if len(data) == 0 {
-		return nil
-	}
-	// Simple stupid
-	d := new(big.Int)
-	if data[0:1] == "\"" && data[len(data)-1:] == "\"" {
-		d.SetBytes([]byte(data[1 : len(data)-1]))
-	} else if data[:2] == "0x" {
-		d.SetBytes(ethutil.FromHex(data[2:]))
-	} else {
-		d.SetString(data, 0)
-	}
+func (self *DebuggerWindow) SetCode(code string) {
+	self.win.Set("codeText", code)
+}
 
-	return ethutil.BigToBytes(d, 256)
+func (self *DebuggerWindow) SetData(data string) {
+	self.win.Set("dataText", data)
 }
 
 func (self *DebuggerWindow) Debug(valueStr, gasStr, gasPriceStr, scriptStr, dataStr string) {
@@ -63,22 +71,28 @@ func (self *DebuggerWindow) Debug(valueStr, gasStr, gasPriceStr, scriptStr, data
 		self.Db.Q <- true
 	}
 
-	dataSlice := strings.Split(dataStr, "\n")
-	var data []byte
-	for _, dataItem := range dataSlice {
-		d := formatData(dataItem)
-		data = append(data, d...)
-	}
-
-	state := self.lib.eth.BlockChain().CurrentBlock.State()
-
 	defer func() {
 		if r := recover(); r != nil {
 			fmt.Println(r)
+			self.Db.done = true
 		}
 	}()
 
-	script, err := ethutil.Compile(scriptStr)
+	data := ethutil.StringToByteFunc(dataStr, func(s string) (ret []byte) {
+		slice := strings.Split(dataStr, "\n")
+		for _, dataItem := range slice {
+			d := formatData(dataItem)
+			ret = append(ret, d...)
+		}
+		return
+	})
+
+	var err error
+	script := ethutil.StringToByteFunc(scriptStr, func(s string) (ret []byte) {
+		ret, err = ethutil.Compile(s)
+		return
+	})
+
 	if err != nil {
 		ethutil.Config.Log.Debugln(err)
 
@@ -91,11 +105,13 @@ func (self *DebuggerWindow) Debug(valueStr, gasStr, gasPriceStr, scriptStr, data
 	for _, str := range dis {
 		self.win.Root().Call("setAsm", str)
 	}
+
 	// Contract addr as test address
 	keyPair := ethutil.GetKeyRing().Get(0)
 	callerTx := ethchain.NewContractCreationTx(ethutil.Big(valueStr), ethutil.Big(gasStr), ethutil.Big(gasPriceStr), script)
 	callerTx.Sign(keyPair.PrivateKey)
 
+	state := self.lib.eth.BlockChain().CurrentBlock.State()
 	account := self.lib.eth.StateManager().TransState().GetAccount(keyPair.Address())
 	contract := ethchain.MakeContract(callerTx, state)
 	callerClosure := ethchain.NewClosure(account, contract, script, state, ethutil.Big(gasStr), ethutil.Big(gasPriceStr))
-- 
cgit v1.2.3


From 1eda1d25b0d27fe57287698fb883c9153ddda292 Mon Sep 17 00:00:00 2001
From: Maran <maran.hidskes@gmail.com>
Date: Wed, 28 May 2014 15:48:17 +0200
Subject: Hooked up the Block Explorer to the Debugger so we can instantly
 debug made transactions

---
 ethereal/assets/qml/wallet.qml | 38 ++++++++++++++++++++++++++++++++------
 ethereal/ui/debugger.go        |  6 ++++++
 ethereal/ui/ui_lib.go          | 23 +++++++++++++++++++++--
 3 files changed, 59 insertions(+), 8 deletions(-)

(limited to 'ethereal')

diff --git a/ethereal/assets/qml/wallet.qml b/ethereal/assets/qml/wallet.qml
index bba9c1d3b..82b680913 100644
--- a/ethereal/assets/qml/wallet.qml
+++ b/ethereal/assets/qml/wallet.qml
@@ -340,8 +340,8 @@ ApplicationWindow {
     id: popup
     visible: false
     property var block
-    width: 800
-    height: 280
+    width: root.width
+    height: 240
     x: root.x
     y: root.y + root.height
     Component{
@@ -389,17 +389,27 @@ ApplicationWindow {
       onClicked: {
         var tx = transactionModel.get(row)
         if(tx.data) {
-          popup.showContractData(tx.data)
+          popup.showContractData(tx)
         }else{
           popup.height = 230
         }
       }
     }
-    function showContractData(data) {
-      contractData.text = data
+
+    function showContractData(tx) {
+       txDetailsDebugButton.tx = tx
+      if(tx.createsContract) {
+	      contractData.text = tx.data
+	      contractLabel.text = "<h4> Transaction created contract " + tx.address + "</h4>"
+      }else{
+	      contractLabel.text = "<h4> Transaction ran contract " + tx.address + "</h4>"
+	      contractData.text = tx.rawData
+      }
       popup.height = 400
     }
+
     Rectangle {
+      id: txDetails
       width: popup.width
       height: 300
       anchors.left: listViewThing.left
@@ -411,6 +421,22 @@ ApplicationWindow {
         id: contractLabel
         anchors.leftMargin: 10
       }
+      Button {
+	      property var tx
+	      id: txDetailsDebugButton
+	      anchors.right: parent.right
+	      anchors.rightMargin: 10
+	      anchors.top: parent.top
+	      anchors.topMargin: 10
+	      text: "Debug contract"
+	      onClicked: {
+		      if(tx.createsContract){
+			      ui.startDbWithCode(tx.rawData)
+		      }else {
+			      ui.startDbWithContractAndData(tx.address, tx.rawData)
+		      }
+	      }
+      }
       TextArea {
         id: contractData
         text: "Contract"
@@ -437,7 +463,7 @@ ApplicationWindow {
           transactionModel.insert(0, block.txs.get(i))
         }
         if(block.txs.get(0).data){
-          popup.showContractData(block.txs.get(0).data)
+          popup.showContractData(block.txs.get(0))
         }
       }
       txView.forceActiveFocus()
diff --git a/ethereal/ui/debugger.go b/ethereal/ui/debugger.go
index 5b1fb50a2..342e3a7d0 100644
--- a/ethereal/ui/debugger.go
+++ b/ethereal/ui/debugger.go
@@ -65,6 +65,12 @@ func (self *DebuggerWindow) SetCode(code string) {
 func (self *DebuggerWindow) SetData(data string) {
 	self.win.Set("dataText", data)
 }
+func (self *DebuggerWindow) SetAsm(data string) {
+	dis := ethchain.Disassemble(ethutil.FromHex(data))
+	for _, str := range dis {
+		self.win.Root().Call("setAsm", str)
+	}
+}
 
 func (self *DebuggerWindow) Debug(valueStr, gasStr, gasPriceStr, scriptStr, dataStr string) {
 	if !self.Db.done {
diff --git a/ethereal/ui/ui_lib.go b/ethereal/ui/ui_lib.go
index 998392525..73ec67c86 100644
--- a/ethereal/ui/ui_lib.go
+++ b/ethereal/ui/ui_lib.go
@@ -2,6 +2,7 @@ package ethui
 
 import (
 	"bitbucket.org/kardianos/osext"
+	"encoding/hex"
 	"github.com/ethereum/eth-go"
 	"github.com/ethereum/eth-go/ethchain"
 	"github.com/ethereum/eth-go/ethutil"
@@ -24,8 +25,9 @@ type UiLib struct {
 	connected bool
 	assetPath string
 	// The main application window
-	win *qml.Window
-	Db  *Debugger
+	win      *qml.Window
+	Db       *Debugger
+	DbWindow *DebuggerWindow
 }
 
 func NewUiLib(engine *qml.Engine, eth *eth.Ethereum, assetPath string) *UiLib {
@@ -88,9 +90,26 @@ func (ui *UiLib) ConnectToPeer(addr string) {
 func (ui *UiLib) AssetPath(p string) string {
 	return path.Join(ui.assetPath, p)
 }
+func (self *UiLib) StartDbWithContractAndData(contractHash, data string) {
+	dbWindow := NewDebuggerWindow(self)
+	object := self.eth.StateManager().CurrentState().GetStateObject(ethutil.FromHex(contractHash))
+	if len(object.Script()) > 0 {
+		dbWindow.SetCode("0x" + hex.EncodeToString(object.Script()))
+	}
+	dbWindow.SetData(data)
+
+	dbWindow.Show()
+}
+
+func (self *UiLib) StartDbWithCode(code string) {
+	dbWindow := NewDebuggerWindow(self)
+	dbWindow.SetCode("0x" + code)
+	dbWindow.Show()
+}
 
 func (self *UiLib) StartDebugger() {
 	dbWindow := NewDebuggerWindow(self)
+	//self.DbWindow = dbWindow
 
 	dbWindow.Show()
 }
-- 
cgit v1.2.3


From d4f9daa631fa832d556c16f3a29eaf73bd849f32 Mon Sep 17 00:00:00 2001
From: Maran <maran.hidskes@gmail.com>
Date: Wed, 28 May 2014 16:14:24 +0200
Subject: Refactor hex encode and remove coupling of popup to main window

---
 ethereal/assets/qml/wallet.qml | 3 +--
 ethereal/ui/ui_lib.go          | 3 +--
 2 files changed, 2 insertions(+), 4 deletions(-)

(limited to 'ethereal')

diff --git a/ethereal/assets/qml/wallet.qml b/ethereal/assets/qml/wallet.qml
index 82b680913..0e0e3d78d 100644
--- a/ethereal/assets/qml/wallet.qml
+++ b/ethereal/assets/qml/wallet.qml
@@ -342,8 +342,6 @@ ApplicationWindow {
     property var block
     width: root.width
     height: 240
-    x: root.x
-    y: root.y + root.height
     Component{
       id: blockDetailsDelegate
       Rectangle {
@@ -442,6 +440,7 @@ ApplicationWindow {
         text: "Contract"
         anchors.top: contractLabel.bottom
         anchors.left: parent.left
+	anchors.bottom: popup.bottom
         wrapMode: Text.Wrap
         width: parent.width - 30
         height: 80
diff --git a/ethereal/ui/ui_lib.go b/ethereal/ui/ui_lib.go
index 73ec67c86..9c4301ffe 100644
--- a/ethereal/ui/ui_lib.go
+++ b/ethereal/ui/ui_lib.go
@@ -2,7 +2,6 @@ package ethui
 
 import (
 	"bitbucket.org/kardianos/osext"
-	"encoding/hex"
 	"github.com/ethereum/eth-go"
 	"github.com/ethereum/eth-go/ethchain"
 	"github.com/ethereum/eth-go/ethutil"
@@ -94,7 +93,7 @@ func (self *UiLib) StartDbWithContractAndData(contractHash, data string) {
 	dbWindow := NewDebuggerWindow(self)
 	object := self.eth.StateManager().CurrentState().GetStateObject(ethutil.FromHex(contractHash))
 	if len(object.Script()) > 0 {
-		dbWindow.SetCode("0x" + hex.EncodeToString(object.Script()))
+		dbWindow.SetCode("0x" + ethutil.Hex(object.Script()))
 	}
 	dbWindow.SetData(data)
 
-- 
cgit v1.2.3


From 58032d60e748611b0610cf764743c6b8e5681a87 Mon Sep 17 00:00:00 2001
From: Maran <maran.hidskes@gmail.com>
Date: Wed, 28 May 2014 16:17:57 +0200
Subject: Bump to RC11

---
 ethereal/ui/gui.go | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'ethereal')

diff --git a/ethereal/ui/gui.go b/ethereal/ui/gui.go
index 63ab028ab..32ff76b1a 100644
--- a/ethereal/ui/gui.go
+++ b/ethereal/ui/gui.go
@@ -54,7 +54,7 @@ func New(ethereum *eth.Ethereum) *Gui {
 }
 
 func (gui *Gui) Start(assetPath string) {
-	const version = "0.5.0 RC10"
+	const version = "0.5.0 RC11"
 
 	defer gui.txDb.Close()
 
-- 
cgit v1.2.3