forked from mirror/go-ethereum
parent
c59d7a899b
commit
ac14f002e6
@ -0,0 +1,187 @@ |
|||||||
|
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 { |
||||||
|
property var title: "Network" |
||||||
|
property var iconFile: "../net.png" |
||||||
|
|
||||||
|
objectName: "chainView" |
||||||
|
visible: false |
||||||
|
anchors.fill: parent |
||||||
|
|
||||||
|
TableView { |
||||||
|
id: blockTable |
||||||
|
width: parent.width |
||||||
|
anchors.top: parent.top |
||||||
|
anchors.bottom: parent.bottom |
||||||
|
TableViewColumn{ role: "number" ; title: "#" ; width: 100 } |
||||||
|
TableViewColumn{ role: "hash" ; title: "Hash" ; width: 560 } |
||||||
|
TableViewColumn{ role: "txAmount" ; title: "Tx amount" ; width: 100 } |
||||||
|
|
||||||
|
model: blockModel |
||||||
|
|
||||||
|
onDoubleClicked: { |
||||||
|
popup.visible = true |
||||||
|
popup.setDetails(blockModel.get(row)) |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
function addBlock(block, initial) { |
||||||
|
var txs = JSON.parse(block.transactions); |
||||||
|
var amount = 0 |
||||||
|
if(initial == undefined){ |
||||||
|
initial = false |
||||||
|
} |
||||||
|
|
||||||
|
if(txs != null){ |
||||||
|
amount = txs.length |
||||||
|
} |
||||||
|
|
||||||
|
if(initial){ |
||||||
|
blockModel.append({number: block.number, name: block.name, gasLimit: block.gasLimit, gasUsed: block.gasUsed, coinbase: block.coinbase, hash: block.hash, txs: txs, txAmount: amount, time: block.time, prettyTime: convertToPretty(block.time)}) |
||||||
|
} else { |
||||||
|
blockModel.insert(0, {number: block.number, name: block.name, gasLimit: block.gasLimit, gasUsed: block.gasUsed, coinbase: block.coinbase, hash: block.hash, txs: txs, txAmount: amount, time: block.time, prettyTime: convertToPretty(block.time)}) |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
Window { |
||||||
|
id: popup |
||||||
|
visible: false |
||||||
|
//flags: Qt.CustomizeWindowHint | Qt.Tool | Qt.WindowCloseButtonHint |
||||||
|
property var block |
||||||
|
width: root.width |
||||||
|
height: 300 |
||||||
|
Component{ |
||||||
|
id: blockDetailsDelegate |
||||||
|
Rectangle { |
||||||
|
color: "#252525" |
||||||
|
width: popup.width |
||||||
|
height: 150 |
||||||
|
Column { |
||||||
|
anchors.leftMargin: 10 |
||||||
|
anchors.topMargin: 5 |
||||||
|
anchors.top: parent.top |
||||||
|
anchors.left: parent.left |
||||||
|
Text { text: '<h3>Block details</h3>'; color: "#F2F2F2"} |
||||||
|
Text { text: '<b>Block number:</b> ' + number; color: "#F2F2F2"} |
||||||
|
Text { text: '<b>Hash:</b> ' + hash; color: "#F2F2F2"} |
||||||
|
Text { text: '<b>Coinbase:</b> <' + name + '> ' + coinbase; color: "#F2F2F2"} |
||||||
|
Text { text: '<b>Block found at:</b> ' + prettyTime; color: "#F2F2F2"} |
||||||
|
Text { text: '<b>Gas used:</b> ' + gasUsed + " / " + gasLimit; color: "#F2F2F2"} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
ListView { |
||||||
|
model: singleBlock |
||||||
|
delegate: blockDetailsDelegate |
||||||
|
anchors.top: parent.top |
||||||
|
height: 100 |
||||||
|
anchors.leftMargin: 20 |
||||||
|
id: listViewThing |
||||||
|
Layout.maximumHeight: 40 |
||||||
|
} |
||||||
|
TableView { |
||||||
|
id: txView |
||||||
|
anchors.top: listViewThing.bottom |
||||||
|
anchors.topMargin: 50 |
||||||
|
width: parent.width |
||||||
|
|
||||||
|
TableViewColumn{width: 90; role: "value" ; title: "Value" } |
||||||
|
TableViewColumn{width: 200; role: "hash" ; title: "Hash" } |
||||||
|
TableViewColumn{width: 200; role: "sender" ; title: "Sender" } |
||||||
|
TableViewColumn{width: 200;role: "address" ; title: "Receiver" } |
||||||
|
TableViewColumn{width: 60; role: "gas" ; title: "Gas" } |
||||||
|
TableViewColumn{width: 60; role: "gasPrice" ; title: "Gas Price" } |
||||||
|
TableViewColumn{width: 60; role: "isContract" ; title: "Contract" } |
||||||
|
|
||||||
|
model: transactionModel |
||||||
|
onClicked: { |
||||||
|
var tx = transactionModel.get(row) |
||||||
|
if(tx.data) { |
||||||
|
popup.showContractData(tx) |
||||||
|
}else{ |
||||||
|
popup.height = 440 |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
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 = 540 |
||||||
|
} |
||||||
|
|
||||||
|
Rectangle { |
||||||
|
id: txDetails |
||||||
|
width: popup.width |
||||||
|
height: 300 |
||||||
|
anchors.left: listViewThing.left |
||||||
|
anchors.top: txView.bottom |
||||||
|
Label { |
||||||
|
text: "<h4>Contract data</h4>" |
||||||
|
anchors.top: parent.top |
||||||
|
anchors.left: parent.left |
||||||
|
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" |
||||||
|
anchors.top: contractLabel.bottom |
||||||
|
anchors.left: parent.left |
||||||
|
anchors.bottom: popup.bottom |
||||||
|
wrapMode: Text.Wrap |
||||||
|
width: parent.width - 30 |
||||||
|
height: 80 |
||||||
|
anchors.leftMargin: 10 |
||||||
|
} |
||||||
|
} |
||||||
|
property var transactionModel: ListModel { |
||||||
|
id: transactionModel |
||||||
|
} |
||||||
|
property var singleBlock: ListModel { |
||||||
|
id: singleBlock |
||||||
|
} |
||||||
|
function setDetails(block){ |
||||||
|
singleBlock.set(0,block) |
||||||
|
popup.height = 300 |
||||||
|
transactionModel.clear() |
||||||
|
if(block.txs != undefined){ |
||||||
|
for(var i = 0; i < block.txs.count; ++i) { |
||||||
|
transactionModel.insert(0, block.txs.get(i)) |
||||||
|
} |
||||||
|
if(block.txs.get(0).data){ |
||||||
|
popup.showContractData(block.txs.get(0)) |
||||||
|
} |
||||||
|
} |
||||||
|
txView.forceActiveFocus() |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,50 @@ |
|||||||
|
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 { |
||||||
|
property var iconFile: "../tx.png" |
||||||
|
property var title: "Transactions" |
||||||
|
|
||||||
|
property var txModel: ListModel { |
||||||
|
id: txModel |
||||||
|
} |
||||||
|
|
||||||
|
id: historyView |
||||||
|
anchors.fill: parent |
||||||
|
objectName: "transactionView" |
||||||
|
|
||||||
|
TableView { |
||||||
|
id: txTableView |
||||||
|
anchors.fill: parent |
||||||
|
TableViewColumn{ role: "inout" ; title: "" ; width: 40 } |
||||||
|
TableViewColumn{ role: "value" ; title: "Value" ; width: 100 } |
||||||
|
TableViewColumn{ role: "address" ; title: "Address" ; width: 430 } |
||||||
|
TableViewColumn{ role: "contract" ; title: "Contract" ; width: 100 } |
||||||
|
|
||||||
|
model: txModel |
||||||
|
} |
||||||
|
|
||||||
|
function addTx(type, tx, inout) { |
||||||
|
var isContract |
||||||
|
if (tx.contract == true){ |
||||||
|
isContract = "Yes" |
||||||
|
}else{ |
||||||
|
isContract = "No" |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
var address; |
||||||
|
if(inout == "recv") { |
||||||
|
address = tx.sender; |
||||||
|
} else { |
||||||
|
address = tx.address; |
||||||
|
} |
||||||
|
|
||||||
|
txModel.insert(0, {inout: inout, hash: tx.hash, address: address, value: tx.value, contract: isContract}) |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,160 @@ |
|||||||
|
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 { |
||||||
|
property var title: "Information" |
||||||
|
property var iconFile: "../heart.png" |
||||||
|
|
||||||
|
objectName: "infoView" |
||||||
|
visible: false |
||||||
|
anchors.fill: parent |
||||||
|
|
||||||
|
color: "#00000000" |
||||||
|
|
||||||
|
Column { |
||||||
|
spacing: 3 |
||||||
|
anchors.fill: parent |
||||||
|
anchors.topMargin: 5 |
||||||
|
anchors.leftMargin: 5 |
||||||
|
|
||||||
|
Label { |
||||||
|
id: addressLabel |
||||||
|
text: "Address" |
||||||
|
} |
||||||
|
TextField { |
||||||
|
text: pub.getKey().address |
||||||
|
width: 500 |
||||||
|
} |
||||||
|
|
||||||
|
Label { |
||||||
|
text: "Client ID" |
||||||
|
} |
||||||
|
TextField { |
||||||
|
text: eth.getCustomIdentifier() |
||||||
|
width: 500 |
||||||
|
placeholderText: "Anonymous" |
||||||
|
onTextChanged: { |
||||||
|
eth.setCustomIdentifier(text) |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
property var addressModel: ListModel { |
||||||
|
id: addressModel |
||||||
|
} |
||||||
|
TableView { |
||||||
|
id: addressView |
||||||
|
width: parent.width - 200 |
||||||
|
height: 200 |
||||||
|
anchors.bottom: logLayout.top |
||||||
|
TableViewColumn{ role: "name"; title: "name" } |
||||||
|
TableViewColumn{ role: "address"; title: "address"; width: 300} |
||||||
|
|
||||||
|
model: addressModel |
||||||
|
} |
||||||
|
|
||||||
|
Rectangle { |
||||||
|
anchors.top: addressView.top |
||||||
|
anchors.left: addressView.right |
||||||
|
anchors.leftMargin: 20 |
||||||
|
|
||||||
|
TextField { |
||||||
|
placeholderText: "Name to register" |
||||||
|
id: nameToReg |
||||||
|
width: 150 |
||||||
|
} |
||||||
|
|
||||||
|
Button { |
||||||
|
anchors.top: nameToReg.bottom |
||||||
|
text: "Register" |
||||||
|
MouseArea{ |
||||||
|
anchors.fill: parent |
||||||
|
onClicked: { |
||||||
|
eth.registerName(nameToReg.text) |
||||||
|
nameToReg.text = "" |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
property var logModel: ListModel { |
||||||
|
id: logModel |
||||||
|
} |
||||||
|
RowLayout { |
||||||
|
id: logLayout |
||||||
|
width: parent.width |
||||||
|
height: 200 |
||||||
|
anchors.bottom: parent.bottom |
||||||
|
TableView { |
||||||
|
id: logView |
||||||
|
headerVisible: false |
||||||
|
anchors { |
||||||
|
right: logLevelSlider.left |
||||||
|
left: parent.left |
||||||
|
bottom: parent.bottom |
||||||
|
top: parent.top |
||||||
|
} |
||||||
|
|
||||||
|
TableViewColumn{ role: "description" ; title: "log" } |
||||||
|
|
||||||
|
model: logModel |
||||||
|
} |
||||||
|
|
||||||
|
Slider { |
||||||
|
id: logLevelSlider |
||||||
|
value: eth.getLogLevelInt() |
||||||
|
anchors { |
||||||
|
right: parent.right |
||||||
|
top: parent.top |
||||||
|
bottom: parent.bottom |
||||||
|
|
||||||
|
rightMargin: 5 |
||||||
|
leftMargin: 5 |
||||||
|
topMargin: 5 |
||||||
|
bottomMargin: 5 |
||||||
|
} |
||||||
|
|
||||||
|
orientation: Qt.Vertical |
||||||
|
maximumValue: 5 |
||||||
|
stepSize: 1 |
||||||
|
|
||||||
|
onValueChanged: { |
||||||
|
eth.setLogLevel(value) |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
function addDebugMessage(message){ |
||||||
|
debuggerLog.append({value: message}) |
||||||
|
} |
||||||
|
|
||||||
|
function addAddress(address) { |
||||||
|
addressModel.append({name: address.name, address: address.address}) |
||||||
|
} |
||||||
|
|
||||||
|
function clearAddress() { |
||||||
|
addressModel.clear() |
||||||
|
} |
||||||
|
|
||||||
|
function addLog(str) { |
||||||
|
// Remove first item once we've reached max log items |
||||||
|
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}) |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
} |
@ -0,0 +1,44 @@ |
|||||||
|
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 { |
||||||
|
property var title: "Pending Transactions" |
||||||
|
property var iconFile: "../tx.png" |
||||||
|
|
||||||
|
objectName: "pendingTxView" |
||||||
|
anchors.fill: parent |
||||||
|
visible: false |
||||||
|
id: pendingTxView |
||||||
|
|
||||||
|
property var pendingTxModel: ListModel { |
||||||
|
id: pendingTxModel |
||||||
|
} |
||||||
|
|
||||||
|
TableView { |
||||||
|
id: pendingTxTableView |
||||||
|
anchors.fill: parent |
||||||
|
TableViewColumn{ role: "value" ; title: "Value" ; width: 100 } |
||||||
|
TableViewColumn{ role: "from" ; title: "sender" ; width: 230 } |
||||||
|
TableViewColumn{ role: "to" ; title: "Reciever" ; width: 230 } |
||||||
|
TableViewColumn{ role: "contract" ; title: "Contract" ; width: 100 } |
||||||
|
|
||||||
|
model: pendingTxModel |
||||||
|
} |
||||||
|
|
||||||
|
function addTx(type, tx, inout) { |
||||||
|
var isContract |
||||||
|
if (tx.contract == true){ |
||||||
|
isContract = "Yes" |
||||||
|
}else{ |
||||||
|
isContract = "No" |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
pendingTxModel.insert(0, {hash: tx.hash, to: tx.address, from: tx.sender, value: tx.value, contract: isContract}) |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,214 @@ |
|||||||
|
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 { |
||||||
|
property var iconFile: "../new.png" |
||||||
|
property var title: "New transaction" |
||||||
|
|
||||||
|
objectName: "newTxView" |
||||||
|
visible: false |
||||||
|
anchors.fill: parent |
||||||
|
color: "#00000000" |
||||||
|
|
||||||
|
Column { |
||||||
|
id: mainContractColumn |
||||||
|
anchors.fill: parent |
||||||
|
function contractFormReady(){ |
||||||
|
if(codeView.text.length > 0 && txValue.text.length > 0 && txGas.text.length > 0 && txGasPrice.length > 0) { |
||||||
|
txButton.state = "READY" |
||||||
|
}else{ |
||||||
|
txButton.state = "NOTREADY" |
||||||
|
} |
||||||
|
} |
||||||
|
states: [ |
||||||
|
State{ |
||||||
|
name: "ERROR" |
||||||
|
PropertyChanges { target: txResult; visible:true} |
||||||
|
PropertyChanges { target: codeView; visible:true} |
||||||
|
}, |
||||||
|
State { |
||||||
|
name: "DONE" |
||||||
|
PropertyChanges { target: txValue; visible:false} |
||||||
|
PropertyChanges { target: txGas; visible:false} |
||||||
|
PropertyChanges { target: txGasPrice; visible:false} |
||||||
|
PropertyChanges { target: codeView; visible:false} |
||||||
|
PropertyChanges { target: txButton; visible:false} |
||||||
|
PropertyChanges { target: txDataLabel; visible:false} |
||||||
|
PropertyChanges { target: atLabel; visible:false} |
||||||
|
PropertyChanges { target: txFuelRecipient; visible:false} |
||||||
|
|
||||||
|
PropertyChanges { target: txResult; visible:true} |
||||||
|
PropertyChanges { target: txOutput; visible:true} |
||||||
|
PropertyChanges { target: newTxButton; visible:true} |
||||||
|
}, |
||||||
|
State { |
||||||
|
name: "SETUP" |
||||||
|
PropertyChanges { target: txValue; visible:true; text: ""} |
||||||
|
PropertyChanges { target: txGas; visible:true; text: ""} |
||||||
|
PropertyChanges { target: txGasPrice; visible:true; text: ""} |
||||||
|
PropertyChanges { target: codeView; visible:true; text: ""} |
||||||
|
PropertyChanges { target: txButton; visible:true} |
||||||
|
PropertyChanges { target: txDataLabel; visible:true} |
||||||
|
|
||||||
|
PropertyChanges { target: txResult; visible:false} |
||||||
|
PropertyChanges { target: txOutput; visible:false} |
||||||
|
PropertyChanges { target: newTxButton; visible:false} |
||||||
|
} |
||||||
|
] |
||||||
|
width: 400 |
||||||
|
spacing: 5 |
||||||
|
anchors.left: parent.left |
||||||
|
anchors.top: parent.top |
||||||
|
anchors.leftMargin: 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 { |
||||||
|
id: txFuelRecipient |
||||||
|
placeholderText: "Address / Name or empty for contract" |
||||||
|
//validator: RegExpValidator { regExp: /[a-f0-9]{40}/ } |
||||||
|
width: 400 |
||||||
|
} |
||||||
|
|
||||||
|
RowLayout { |
||||||
|
TextField { |
||||||
|
id: txValue |
||||||
|
width: 222 |
||||||
|
placeholderText: "Amount" |
||||||
|
validator: RegExpValidator { regExp: /\d*/ } |
||||||
|
onTextChanged: { |
||||||
|
contractFormReady() |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
ComboBox { |
||||||
|
id: valueDenom |
||||||
|
currentIndex: 6 |
||||||
|
model: denomModel |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
RowLayout { |
||||||
|
TextField { |
||||||
|
id: txGas |
||||||
|
width: 50 |
||||||
|
validator: RegExpValidator { regExp: /\d*/ } |
||||||
|
placeholderText: "Gas" |
||||||
|
text: "500" |
||||||
|
/* |
||||||
|
onTextChanged: { |
||||||
|
contractFormReady() |
||||||
|
} |
||||||
|
*/ |
||||||
|
} |
||||||
|
Label { |
||||||
|
id: atLabel |
||||||
|
text: "@" |
||||||
|
} |
||||||
|
|
||||||
|
TextField { |
||||||
|
id: txGasPrice |
||||||
|
width: 200 |
||||||
|
placeholderText: "Gas price" |
||||||
|
text: "10" |
||||||
|
validator: RegExpValidator { regExp: /\d*/ } |
||||||
|
/* |
||||||
|
onTextChanged: { |
||||||
|
contractFormReady() |
||||||
|
} |
||||||
|
*/ |
||||||
|
} |
||||||
|
|
||||||
|
ComboBox { |
||||||
|
id: gasDenom |
||||||
|
currentIndex: 4 |
||||||
|
model: denomModel |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
Label { |
||||||
|
id: txDataLabel |
||||||
|
text: "Data" |
||||||
|
} |
||||||
|
|
||||||
|
TextArea { |
||||||
|
id: codeView |
||||||
|
height: 300 |
||||||
|
anchors.topMargin: 5 |
||||||
|
width: 400 |
||||||
|
onTextChanged: { |
||||||
|
contractFormReady() |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
Button { |
||||||
|
id: txButton |
||||||
|
/* enabled: false */ |
||||||
|
states: [ |
||||||
|
State { |
||||||
|
name: "READY" |
||||||
|
PropertyChanges { target: txButton; /*enabled: true*/} |
||||||
|
}, |
||||||
|
State { |
||||||
|
name: "NOTREADY" |
||||||
|
PropertyChanges { target: txButton; /*enabled:false*/} |
||||||
|
} |
||||||
|
] |
||||||
|
text: "Send" |
||||||
|
onClicked: { |
||||||
|
var value = txValue.text + denomModel.get(valueDenom.currentIndex).zeros; |
||||||
|
var gasPrice = txGasPrice.text + denomModel.get(gasDenom.currentIndex).zeros; |
||||||
|
var res = eth.create(txFuelRecipient.text, value, txGas.text, gasPrice, codeView.text) |
||||||
|
if(res[1]) { |
||||||
|
txResult.text = "Your contract <b>could not</b> be sent over the network:\n<b>" |
||||||
|
txResult.text += res[1].error() |
||||||
|
txResult.text += "</b>" |
||||||
|
mainContractColumn.state = "ERROR" |
||||||
|
} else { |
||||||
|
txResult.text = "Your transaction has been submitted:\n" |
||||||
|
txOutput.text = res[0].address |
||||||
|
mainContractColumn.state = "DONE" |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
Text { |
||||||
|
id: txResult |
||||||
|
visible: false |
||||||
|
} |
||||||
|
TextField { |
||||||
|
id: txOutput |
||||||
|
visible: false |
||||||
|
width: 530 |
||||||
|
} |
||||||
|
Button { |
||||||
|
id: newTxButton |
||||||
|
visible: false |
||||||
|
text: "Create a new transaction" |
||||||
|
onClicked: { |
||||||
|
this.visible = false |
||||||
|
txResult.text = "" |
||||||
|
txOutput.text = "" |
||||||
|
mainContractColumn.state = "SETUP" |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
File diff suppressed because it is too large
Load Diff
Loading…
Reference in new issue