Merge branch 'release/0.5.13'

This commit is contained in:
obscuren 2014-06-16 18:24:57 +02:00
commit 98335d2040
9 changed files with 142 additions and 36 deletions

@ -5,7 +5,7 @@ Ethereum
Ethereum Go Client © 2014 Jeffrey Wilcke. Ethereum Go Client © 2014 Jeffrey Wilcke.
Current state: Proof of Concept 5.0 RC12. Current state: Proof of Concept 5.0 RC13.
For the development package please see the [eth-go package](https://github.com/ethereum/eth-go). For the development package please see the [eth-go package](https://github.com/ethereum/eth-go).

@ -135,7 +135,7 @@ ApplicationWindow {
} }
height: parent.height height: parent.height
width: 300 width: 300
TableViewColumn{ role: "value" ; title: "Stack" ; width: 200 } TableViewColumn{ role: "value" ; title: "Temp" ; width: 200 }
model: stackModel model: stackModel
} }
@ -224,8 +224,8 @@ ApplicationWindow {
} }
function setInstruction(num) { function setInstruction(num) {
//asmTableView.selection.clear() asmTableView.selection.clear()
//asmTableView.selection.select(num) asmTableView.selection.select(num)
} }
function setMem(mem) { function setMem(mem) {

@ -29,6 +29,7 @@ ApplicationWindow {
} }
Menu { Menu {
title: "Developer"
MenuItem { MenuItem {
text: "Debugger" text: "Debugger"
shortcut: "Ctrl+d" shortcut: "Ctrl+d"
@ -261,7 +262,7 @@ ApplicationWindow {
id: addressView id: addressView
width: parent.width - 200 width: parent.width - 200
height: 200 height: 200
anchors.bottom: logView.top anchors.bottom: logLayout.top
TableViewColumn{ role: "name"; title: "name" } TableViewColumn{ role: "name"; title: "name" }
TableViewColumn{ role: "address"; title: "address"; width: 300} TableViewColumn{ role: "address"; title: "address"; width: 300}
@ -296,14 +297,48 @@ ApplicationWindow {
property var logModel: ListModel { property var logModel: ListModel {
id: logModel id: logModel
} }
TableView { RowLayout {
id: logView id: logLayout
width: parent.width width: parent.width
height: 200 height: 200
anchors.bottom: parent.bottom anchors.bottom: parent.bottom
TableViewColumn{ role: "description" ; title: "log" } TableView {
id: logView
headerVisible: false
anchors {
right: logLevelSlider.left
left: parent.left
bottom: parent.bottom
top: parent.top
}
model: logModel TableViewColumn{ role: "description" ; title: "log" }
model: logModel
}
Slider {
id: logLevelSlider
value: 1
anchors {
right: parent.right
top: parent.top
bottom: parent.bottom
rightMargin: 5
leftMargin: 5
topMargin: 5
bottomMargin: 5
}
orientation: Qt.Vertical
maximumValue: 3
stepSize: 1
onValueChanged: {
eth.setLogLevel(value)
}
}
} }
} }
@ -419,6 +454,7 @@ ApplicationWindow {
Text { text: '<b>Hash:</b> ' + hash; color: "#F2F2F2"} Text { text: '<b>Hash:</b> ' + hash; color: "#F2F2F2"}
Text { text: '<b>Coinbase:</b> ' + coinbase; color: "#F2F2F2"} Text { text: '<b>Coinbase:</b> ' + coinbase; color: "#F2F2F2"}
Text { text: '<b>Block found at:</b> ' + prettyTime; color: "#F2F2F2"} Text { text: '<b>Block found at:</b> ' + prettyTime; color: "#F2F2F2"}
Text { text: '<b>Gas used:</b> ' + gasUsed + " / " + gasLimit; color: "#F2F2F2"}
} }
} }
} }
@ -642,16 +678,27 @@ ApplicationWindow {
} }
if(initial){ if(initial){
blockModel.append({number: block.number, coinbase: block.coinbase, hash: block.hash, txs: txs, txAmount: amount, time: block.time, prettyTime: convertToPretty(block.time)}) blockModel.append({number: block.number, gasLimit: block.gasLimit, gasUsed: block.gasUsed, coinbase: block.coinbase, hash: block.hash, txs: txs, txAmount: amount, time: block.time, prettyTime: convertToPretty(block.time)})
}else{ }else{
blockModel.insert(0, {number: block.number, coinbase: block.coinbase, hash: block.hash, txs: txs, txAmount: amount, time: block.time, prettyTime: convertToPretty(block.time)}) blockModel.insert(0, {number: block.number, gasLimit: block.gasLimit, gasUsed: block.gasUsed, coinbase: block.coinbase, hash: block.hash, txs: txs, txAmount: amount, time: block.time, prettyTime: convertToPretty(block.time)})
} }
} }
function addLog(str) { function addLog(str) {
if(str.len != 0) { // Remove first item once we've reached max log items
logModel.insert(0, {description: str}) if(logModel.count > 250) {
logModel.remove(0)
} }
if(str.len != 0) {
if(logView.flickableItem.atYEnd) {
logModel.append({description: str})
logView.positionViewAtRow(logView.rowCount - 1, ListView.Contain)
} else {
logModel.append({description: str})
}
}
} }
function setPeers(text) { function setPeers(text) {
@ -767,6 +814,20 @@ ApplicationWindow {
anchors.leftMargin: 5 anchors.leftMargin: 5
anchors.topMargin: 5 anchors.topMargin: 5
ListModel {
id: denomModel
ListElement { text: "Wei" ; zeros: "" }
ListElement { text: "Ada" ; zeros: "000" }
ListElement { text: "Babbage" ; zeros: "000000" }
ListElement { text: "Shannon" ; zeros: "000000000" }
ListElement { text: "Szabo" ; zeros: "000000000000" }
ListElement { text: "Finney" ; zeros: "000000000000000" }
ListElement { text: "Ether" ; zeros: "000000000000000000" }
ListElement { text: "Einstein" ;zeros: "000000000000000000000" }
ListElement { text: "Douglas" ; zeros: "000000000000000000000000000000000000000000" }
}
TextField { TextField {
id: txFuelRecipient id: txFuelRecipient
placeholderText: "Address / Name or empty for contract" placeholderText: "Address / Name or empty for contract"
@ -774,13 +835,21 @@ ApplicationWindow {
width: 400 width: 400
} }
TextField { RowLayout {
id: txValue TextField {
width: 222 id: txValue
placeholderText: "Amount" width: 222
validator: RegExpValidator { regExp: /\d*/ } placeholderText: "Amount"
onTextChanged: { validator: RegExpValidator { regExp: /\d*/ }
contractFormReady() onTextChanged: {
contractFormReady()
}
}
ComboBox {
id: valueDenom
currentIndex: 6
model: denomModel
} }
} }
@ -806,7 +875,7 @@ ApplicationWindow {
id: txGasPrice id: txGasPrice
width: 200 width: 200
placeholderText: "Gas price" placeholderText: "Gas price"
text: "1000000" text: "10"
validator: RegExpValidator { regExp: /\d*/ } validator: RegExpValidator { regExp: /\d*/ }
/* /*
onTextChanged: { onTextChanged: {
@ -814,6 +883,12 @@ ApplicationWindow {
} }
*/ */
} }
ComboBox {
id: gasDenom
currentIndex: 4
model: denomModel
}
} }
Label { Label {
@ -847,8 +922,9 @@ ApplicationWindow {
] ]
text: "Send" text: "Send"
onClicked: { onClicked: {
//this.enabled = false var value = txValue.text + denomModel.get(valueDenom.currentIndex).zeros;
var res = eth.create(txFuelRecipient.text, txValue.text, txGas.text, txGasPrice.text, codeView.text) var gasPrice = txGasPrice.text + denomModel.get(gasDenom.currentIndex).zeros;
var res = eth.create(txFuelRecipient.text, value, txGas.text, gasPrice, codeView.text)
if(res[1]) { if(res[1]) {
txResult.text = "Your contract <b>could not</b> be send over the network:\n<b>" txResult.text = "Your contract <b>could not</b> be send over the network:\n<b>"
txResult.text += res[1].error() txResult.text += res[1].error()

@ -170,6 +170,30 @@ ApplicationWindow {
postEvent(ev, [storageObject.address, storageObject.value]) postEvent(ev, [storageObject.address, storageObject.value])
} }
} }
Rectangle {
id: toggleInspector
color: "#bcbcbc"
visible: true
height: 12
width: 12
anchors {
right: root.right
}
MouseArea {
onClicked: {
if(inspector.visible == true){
inspector.visible = false
}else{
inspector.visible = true
}
}
onDoubleClicked: {
console.log('refreshing')
webView.reload()
}
anchors.fill: parent
}
}
Rectangle { Rectangle {
id: sizeGrip id: sizeGrip
@ -193,7 +217,7 @@ ApplicationWindow {
WebView { WebView {
id: inspector id: inspector
visible: true visible: false
url: webview.experimental.remoteInspectorUrl url: webview.experimental.remoteInspectorUrl
anchors { anchors {
left: root.left left: root.left

@ -20,6 +20,8 @@ var ImportKey string
var ExportKey bool var ExportKey bool
var AssetPath string var AssetPath string
var Datadir string
func Init() { func Init() {
flag.StringVar(&Identifier, "id", "", "Custom client identifier") flag.StringVar(&Identifier, "id", "", "Custom client identifier")
flag.StringVar(&OutboundPort, "port", "30303", "listening port") flag.StringVar(&OutboundPort, "port", "30303", "listening port")
@ -35,5 +37,7 @@ func Init() {
flag.BoolVar(&ExportKey, "export", false, "export private key") flag.BoolVar(&ExportKey, "export", false, "export private key")
flag.StringVar(&ImportKey, "import", "", "imports the given private key (hex)") flag.StringVar(&ImportKey, "import", "", "imports the given private key (hex)")
flag.StringVar(&Datadir, "datadir", ".ethereal", "specifies the datadir to use. Takes precedence over config file.")
flag.Parse() flag.Parse()
} }

@ -3,7 +3,6 @@ package main
import ( import (
"fmt" "fmt"
"github.com/ethereum/eth-go" "github.com/ethereum/eth-go"
"github.com/ethereum/eth-go/ethchain"
"github.com/ethereum/eth-go/ethutil" "github.com/ethereum/eth-go/ethutil"
"github.com/ethereum/go-ethereum/ethereal/ui" "github.com/ethereum/go-ethereum/ethereal/ui"
"github.com/ethereum/go-ethereum/utils" "github.com/ethereum/go-ethereum/utils"
@ -40,17 +39,15 @@ func main() {
runtime.GOMAXPROCS(runtime.NumCPU()) runtime.GOMAXPROCS(runtime.NumCPU())
ethchain.InitFees()
g, err := globalconf.NewWithOptions(&globalconf.Options{ g, err := globalconf.NewWithOptions(&globalconf.Options{
Filename: path.Join(ethutil.ApplicationFolder(".ethereal"), "conf.ini"), Filename: path.Join(ethutil.ApplicationFolder(Datadir), "conf.ini"),
}) })
if err != nil { if err != nil {
fmt.Println(err) fmt.Println(err)
} else { } else {
g.ParseAll() g.ParseAll()
} }
ethutil.ReadConfig(".ethereal", ethutil.LogFile|ethutil.LogStd, g, Identifier) ethutil.ReadConfig(Datadir, ethutil.LogFile|ethutil.LogStd, g, Identifier)
// Instantiated a eth stack // Instantiated a eth stack
ethereum, err := eth.New(eth.CapDefault, UseUPnP) ethereum, err := eth.New(eth.CapDefault, UseUPnP)

@ -56,7 +56,7 @@ func New(ethereum *eth.Ethereum) *Gui {
} }
func (gui *Gui) Start(assetPath string) { func (gui *Gui) Start(assetPath string) {
const version = "0.5.0 RC12" const version = "0.5.0 RC13"
defer gui.txDb.Close() defer gui.txDb.Close()
@ -69,7 +69,7 @@ func (gui *Gui) Start(assetPath string) {
Init: func(p *ethpub.KeyVal, obj qml.Object) { p.Key = ""; p.Value = "" }, Init: func(p *ethpub.KeyVal, obj qml.Object) { p.Key = ""; p.Value = "" },
}}) }})
ethutil.Config.SetClientString(fmt.Sprintf("/Ethereal v%s", version)) ethutil.Config.SetClientString("Ethereal")
// Create a new QML engine // Create a new QML engine
gui.engine = qml.NewEngine() gui.engine = qml.NewEngine()
@ -356,3 +356,7 @@ func (gui *Gui) ChangeClientId(id string) {
func (gui *Gui) ClientId() string { func (gui *Gui) ClientId() string {
return ethutil.Config.Identifier return ethutil.Config.Identifier
} }
func (gui *Gui) SetLogLevel(level int) {
ethutil.Config.Log.SetLevel(level)
}

@ -24,6 +24,8 @@ var NonInteractive bool
var StartJsConsole bool var StartJsConsole bool
var InputFile string var InputFile string
var Datadir string
func Init() { func Init() {
flag.Usage = func() { flag.Usage = func() {
fmt.Fprintf(os.Stderr, "%s [options] [filename]:\n", os.Args[0]) fmt.Fprintf(os.Stderr, "%s [options] [filename]:\n", os.Args[0])
@ -46,6 +48,8 @@ func Init() {
flag.StringVar(&LogFile, "logfile", "", "log file (defaults to standard output)") flag.StringVar(&LogFile, "logfile", "", "log file (defaults to standard output)")
flag.StringVar(&ImportKey, "import", "", "imports the given private key (hex)") flag.StringVar(&ImportKey, "import", "", "imports the given private key (hex)")
flag.StringVar(&Datadir, "datadir", ".ethereum", "specifies the datadir to use. Takes precedence over config file.")
flag.Parse() flag.Parse()
InputFile = flag.Arg(0) InputFile = flag.Arg(0)

@ -3,7 +3,6 @@ package main
import ( import (
"fmt" "fmt"
"github.com/ethereum/eth-go" "github.com/ethereum/eth-go"
"github.com/ethereum/eth-go/ethchain"
"github.com/ethereum/eth-go/ethutil" "github.com/ethereum/eth-go/ethutil"
"github.com/ethereum/go-ethereum/utils" "github.com/ethereum/go-ethereum/utils"
"github.com/rakyll/globalconf" "github.com/rakyll/globalconf"
@ -62,14 +61,14 @@ func main() {
} }
g, err := globalconf.NewWithOptions(&globalconf.Options{ g, err := globalconf.NewWithOptions(&globalconf.Options{
Filename: path.Join(ethutil.ApplicationFolder(".ethereum"), "conf.ini"), Filename: path.Join(ethutil.ApplicationFolder(Datadir), "conf.ini"),
}) })
if err != nil { if err != nil {
fmt.Println(err) fmt.Println(err)
} else { } else {
g.ParseAll() g.ParseAll()
} }
ethutil.ReadConfig(".ethereum", lt, g, Identifier) ethutil.ReadConfig(Datadir, lt, g, Identifier)
logger := ethutil.Config.Log logger := ethutil.Config.Log
@ -86,8 +85,6 @@ func main() {
logSys = log.New(os.Stdout, "", flags) logSys = log.New(os.Stdout, "", flags)
} }
ethchain.InitFees()
// Instantiated a eth stack // Instantiated a eth stack
ethereum, err := eth.New(eth.CapDefault, UseUPnP) ethereum, err := eth.New(eth.CapDefault, UseUPnP)
if err != nil { if err != nil {