d7b5a87b3b
This avoids having to query the coinbase when creating the miner, which in turn eliminates the dreaded startup error when no accounts are set up. Later, this will also allow us to simply restart the miner when the user picks a different coinbase. This causes a lot of changes in other packages. These are included in this commit because they're impossible to separate.
284 lines
6.2 KiB
QML
284 lines
6.2 KiB
QML
import QtQuick 2.0
|
|
import QtQuick.Controls 1.0;
|
|
import QtQuick.Layouts 1.0;
|
|
import QtQuick.Dialogs 1.0;
|
|
import QtQuick.Window 2.1;
|
|
import QtQuick.Controls.Styles 1.1
|
|
import Ethereum 1.0
|
|
|
|
Rectangle {
|
|
id: root
|
|
property var title: "Miner"
|
|
property var iconSource: "../mining-icon.png"
|
|
property var menuItem
|
|
|
|
color: "#00000000"
|
|
|
|
Label {
|
|
visible: false
|
|
id: lastBlockLabel
|
|
objectName: "lastBlockLabel"
|
|
text: "---"
|
|
onTextChanged: {
|
|
//menuItem.secondaryTitle = text
|
|
}
|
|
}
|
|
|
|
ColumnLayout {
|
|
spacing: 10
|
|
anchors.fill: parent
|
|
|
|
Rectangle {
|
|
id: mainPane
|
|
color: "#00000000"
|
|
anchors {
|
|
top: parent.top
|
|
bottom: localTxPane.top
|
|
left: parent.left
|
|
right: parent.right
|
|
}
|
|
|
|
Rectangle {
|
|
id: menu
|
|
height: 25
|
|
anchors {
|
|
left: parent.left
|
|
}
|
|
|
|
RowLayout {
|
|
id: tools
|
|
anchors {
|
|
left: parent.left
|
|
right: parent.right
|
|
}
|
|
|
|
Button {
|
|
text: "Start"
|
|
onClicked: {
|
|
// eth.setGasPrice(minGasPrice.text || "10000000000000");
|
|
// eth.setExtra(blockExtra.text)
|
|
if (eth.toggleMining()) {
|
|
this.text = "Stop";
|
|
} else {
|
|
this.text = "Start";
|
|
}
|
|
}
|
|
}
|
|
|
|
// Rectangle {
|
|
// id: minGasPriceRect
|
|
// anchors.top: parent.top
|
|
// anchors.topMargin: 2
|
|
// width: 200
|
|
// TextField {
|
|
// id: minGasPrice
|
|
// placeholderText: "Min Gas: 10000000000000"
|
|
// width: 200
|
|
// validator: RegExpValidator { regExp: /\d*/ }
|
|
// }
|
|
// }
|
|
|
|
// Rectangle {
|
|
// width: 300
|
|
// anchors {
|
|
// left: minGasPriceRect.right
|
|
// leftMargin: 5
|
|
// top: parent.top
|
|
// topMargin: 2
|
|
// }
|
|
|
|
// TextField {
|
|
// id: blockExtra
|
|
// placeholderText: "Extra"
|
|
// width: parent.width
|
|
// maximumLength: 1024
|
|
// }
|
|
// }
|
|
}
|
|
}
|
|
|
|
Column {
|
|
anchors {
|
|
left: parent.left
|
|
right: parent.right
|
|
top: menu.bottom
|
|
topMargin: 5
|
|
}
|
|
|
|
Text {
|
|
text: "<b>Merged mining options</b>"
|
|
}
|
|
|
|
TableView {
|
|
id: mergedMiningTable
|
|
height: 300
|
|
anchors {
|
|
left: parent.left
|
|
right: parent.right
|
|
}
|
|
Component {
|
|
id: checkBoxDelegate
|
|
|
|
Item {
|
|
id: test
|
|
CheckBox {
|
|
anchors.fill: parent
|
|
checked: styleData.value
|
|
|
|
onClicked: {
|
|
var model = mergedMiningModel.get(styleData.row)
|
|
|
|
if (this.checked) {
|
|
model.id = txModel.createLocalTx(model.address, "0", "5000", "0", "")
|
|
} else {
|
|
txModel.removeWithId(model.id);
|
|
model.id = 0;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
TableViewColumn{ role: "checked" ; title: "" ; width: 40 ; delegate: checkBoxDelegate }
|
|
TableViewColumn{ role: "name" ; title: "Name" ; width: 480 }
|
|
model: ListModel {
|
|
objectName: "mergedMiningModel"
|
|
id: mergedMiningModel
|
|
function addMergedMiningOption(model) {
|
|
this.append(model);
|
|
}
|
|
}
|
|
Component.onCompleted: {
|
|
/*
|
|
// XXX Temp. replace with above eventually
|
|
var tmpItems = ["JEVCoin", "Some coin", "Other coin", "Etc coin"];
|
|
var address = "e6716f9544a56c530d868e4bfbacb172315bdead";
|
|
for (var i = 0; i < tmpItems.length; i++) {
|
|
mergedMiningModel.append({checked: false, name: tmpItems[i], address: address, id: 0, itemId: i});
|
|
}
|
|
*/
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
Rectangle {
|
|
id: localTxPane
|
|
color: "#ececec"
|
|
border.color: "#cccccc"
|
|
border.width: 1
|
|
anchors {
|
|
left: parent.left
|
|
right: parent.right
|
|
bottom: parent.bottom
|
|
}
|
|
height: 300
|
|
|
|
ColumnLayout {
|
|
spacing: 10
|
|
anchors.fill: parent
|
|
RowLayout {
|
|
id: newLocalTx
|
|
anchors {
|
|
left: parent.left
|
|
leftMargin: 5
|
|
top: parent.top
|
|
topMargin: 5
|
|
bottomMargin: 5
|
|
}
|
|
|
|
Text {
|
|
text: "Local tx"
|
|
}
|
|
|
|
Rectangle {
|
|
width: 250
|
|
color: "#00000000"
|
|
anchors.top: parent.top
|
|
anchors.topMargin: 2
|
|
|
|
TextField {
|
|
id: to
|
|
placeholderText: "To"
|
|
width: 250
|
|
validator: RegExpValidator { regExp: /[abcdefABCDEF1234567890]*/ }
|
|
}
|
|
}
|
|
TextField {
|
|
property var defaultGas: "5000"
|
|
id: gas
|
|
placeholderText: "Gas"
|
|
text: defaultGas
|
|
validator: RegExpValidator { regExp: /\d*/ }
|
|
}
|
|
TextField {
|
|
id: gasPrice
|
|
placeholderText: "Price"
|
|
validator: RegExpValidator { regExp: /\d*/ }
|
|
}
|
|
TextField {
|
|
id: value
|
|
placeholderText: "Amount"
|
|
text: "0"
|
|
validator: RegExpValidator { regExp: /\d*/ }
|
|
}
|
|
TextField {
|
|
id: data
|
|
placeholderText: "Data"
|
|
validator: RegExpValidator { regExp: /[abcdefABCDEF1234567890]*/ }
|
|
}
|
|
Button {
|
|
text: "Create"
|
|
onClicked: {
|
|
if (to.text.length == 40 && gasPrice.text.length != 0 && value.text.length != 0 && gas.text.length != 0) {
|
|
txModel.createLocalTx(to.text, gasPrice.text, gas.text, value.text, data.text);
|
|
|
|
to.text = ""; gasPrice.text = "";
|
|
gas.text = gas.defaultGas;
|
|
value.text = "0"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
TableView {
|
|
id: txTableView
|
|
anchors {
|
|
top: newLocalTx.bottom
|
|
topMargin: 5
|
|
left: parent.left
|
|
right: parent.right
|
|
bottom: parent.bottom
|
|
}
|
|
TableViewColumn{ role: "to" ; title: "To" ; width: 480 }
|
|
TableViewColumn{ role: "gas" ; title: "Gas" ; width: 100 }
|
|
TableViewColumn{ role: "gasPrice" ; title: "Gas Price" ; width: 100 }
|
|
TableViewColumn{ role: "value" ; title: "Amount" ; width: 100 }
|
|
TableViewColumn{ role: "data" ; title: "Data" ; width: 100 }
|
|
|
|
model: ListModel {
|
|
id: txModel
|
|
Component.onCompleted: {
|
|
}
|
|
function removeWithId(id) {
|
|
for (var i = 0; i < this.count; i++) {
|
|
if (txModel.get(i).id == id) {
|
|
this.remove(i);
|
|
eth.removeLocalTransaction(id)
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
function createLocalTx(to, gasPrice, gas, value, data) {
|
|
var id = eth.addLocalTransaction(to, data, gas, gasPrice, value)
|
|
txModel.insert(0, {to: to, gas: gas, gasPrice: gasPrice, value: value, data: data, id: id});
|
|
|
|
return id
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|