diff --git a/ethereal/assets/debugger/debugger.qml b/ethereal/assets/debugger/debugger.qml index 84d9a0732..ca67e857d 100644 --- a/ethereal/assets/debugger/debugger.qml +++ b/ethereal/assets/debugger/debugger.qml @@ -8,7 +8,7 @@ import Ethereum 1.0 ApplicationWindow { visible: false - title: "IceCream" + title: "IceCREAM" minimumWidth: 1280 minimumHeight: 900 width: 1290 diff --git a/ethereal/assets/qml/wallet.qml b/ethereal/assets/qml/wallet.qml index cfe005507..2ab1f31de 100644 --- a/ethereal/assets/qml/wallet.qml +++ b/ethereal/assets/qml/wallet.qml @@ -245,10 +245,25 @@ ApplicationWindow { width: 500 } + + property var addressModel: ListModel { + id: addressModel + } + TableView { + id: addressView + width: parent.width + height: 200 + anchors.bottom: logView.top + TableViewColumn{ role: "name"; title: "name" } + TableViewColumn{ role: "address"; title: "address"; width: 300} + + model: addressModel + } + + property var logModel: ListModel { id: logModel } - TableView { id: logView width: parent.width @@ -342,13 +357,13 @@ ApplicationWindow { visible: false property var block width: root.width - height: 240 + height: 300 Component{ id: blockDetailsDelegate Rectangle { color: "#252525" width: popup.width - height: 200 + height: 150 Column { anchors.leftMargin: 10 anchors.topMargin: 5 @@ -357,6 +372,7 @@ ApplicationWindow { Text { text: '

Block details

'; color: "#F2F2F2"} Text { text: 'Block number: ' + number; color: "#F2F2F2"} Text { text: 'Hash: ' + hash; color: "#F2F2F2"} + Text { text: 'Coinbase: ' + coinbase; color: "#F2F2F2"} Text { text: 'Block found at: ' + prettyTime; color: "#F2F2F2"} } } @@ -365,7 +381,7 @@ ApplicationWindow { model: singleBlock delegate: blockDetailsDelegate anchors.top: parent.top - height: 70 + height: 100 anchors.leftMargin: 20 id: listViewThing Layout.maximumHeight: 40 @@ -390,7 +406,7 @@ ApplicationWindow { if(tx.data) { popup.showContractData(tx) }else{ - popup.height = 230 + popup.height = 440 } } } @@ -404,7 +420,7 @@ ApplicationWindow { contractLabel.text = "

Transaction ran contract " + tx.address + "

" contractData.text = tx.rawData } - popup.height = 400 + popup.height = 540 } Rectangle { @@ -456,7 +472,7 @@ ApplicationWindow { } function setDetails(block){ singleBlock.set(0,block) - popup.height = 230 + popup.height = 300 transactionModel.clear() if(block.txs != undefined){ for(var i = 0; i < block.txs.count; ++i) { @@ -620,36 +636,15 @@ ApplicationWindow { } } - function setAsm(asm) { - asmModel.append({asm: asm}) - } - - function setInstruction(num) { - asmTableView.selection.clear() - asmTableView.selection.select(num-1) - } - - function clearAsm() { - asmModel.clear() - } - - function setMem(mem) { - memModel.append({num: mem.num, value: mem.value}) - } - function clearMem(){ - memModel.clear() - } - - function setStack(stack) { - stackModel.append({value: stack}) - } function addDebugMessage(message){ - console.log("WOOP:") debuggerLog.append({value: message}) } - function clearStack() { - stackModel.clear() + function addAddress(address) { + addressModel.append({name: address.name, address: address.address}) + } + function clearAddress() { + addressModel.clear() } function loadPlugin(name) { @@ -683,9 +678,9 @@ ApplicationWindow { } if(initial){ - blockModel.append({number: block.number, hash: block.hash, txs: txs, txAmount: amount, time: block.time, prettyTime: convertToPretty(block.time)}) + blockModel.append({number: block.number, coinbase: block.coinbase, hash: block.hash, txs: txs, txAmount: amount, time: block.time, prettyTime: convertToPretty(block.time)}) }else{ - blockModel.insert(0, {number: block.number, hash: block.hash, txs: txs, txAmount: amount, time: block.time, prettyTime: convertToPretty(block.time)}) + blockModel.insert(0, {number: block.number, coinbase: block.coinbase, hash: block.hash, txs: txs, txAmount: amount, time: block.time, prettyTime: convertToPretty(block.time)}) } } diff --git a/ethereal/ui/gui.go b/ethereal/ui/gui.go index 9a8673a1c..d08c1b118 100644 --- a/ethereal/ui/gui.go +++ b/ethereal/ui/gui.go @@ -110,6 +110,7 @@ func (gui *Gui) showWallet(context *qml.Context) (*qml.Window, error) { win := gui.createWindow(component) go gui.setInitialBlockChain() + go gui.loadAddressBook() go gui.readPreviousTransactions() go gui.update() @@ -147,6 +148,19 @@ func (gui *Gui) setInitialBlockChain() { } } +type address struct { + Name, Address string +} + +var namereg = ethutil.FromHex("bb5f186604d057c1c5240ca2ae0f6430138ac010") + +func (gui *Gui) loadAddressBook() { + gui.win.Root().Call("clearAddress") + gui.eth.StateManager().CurrentState().GetStateObject(namereg).State().EachStorage(func(name string, value *ethutil.Value) { + gui.win.Root().Call("addAddress", struct{ Name, Address string }{name, ethutil.Hex(value.Bytes())}) + }) +} + func (gui *Gui) readPreviousTransactions() { it := gui.txDb.Db().NewIterator(nil, nil) for it.Next() { @@ -191,10 +205,12 @@ func (gui *Gui) update() { blockChan := make(chan ethutil.React, 1) txChan := make(chan ethutil.React, 1) + objectChan := make(chan ethutil.React, 1) reactor.Subscribe("newBlock", blockChan) reactor.Subscribe("newTx:pre", txChan) reactor.Subscribe("newTx:post", txChan) + reactor.Subscribe("object:"+string(namereg), objectChan) state := gui.eth.StateManager().TransState() @@ -241,6 +257,8 @@ func (gui *Gui) update() { state.UpdateStateObject(object) } + case <-objectChan: + gui.loadAddressBook() } } }