Improved (hopefully) the send transaction tab

This commit is contained in:
Maran 2014-04-11 13:26:14 -04:00
parent e2bf5d1270
commit cf1ae41bc0
2 changed files with 229 additions and 60 deletions

@ -179,70 +179,233 @@ ApplicationWindow {
visible: false visible: false
anchors.fill: parent anchors.fill: parent
color: "#00000000" color: "#00000000"
TabView{
ColumnLayout { anchors.fill: parent
width: 400 anchors.rightMargin: 5
anchors.left: parent.left
anchors.top: parent.top
anchors.leftMargin: 5 anchors.leftMargin: 5
anchors.topMargin: 5 anchors.topMargin: 5
TextField { anchors.bottomMargin: 5
id: txRecipient id: newTransactionTab
placeholderText: "Recipient address (or empty for contract)" Component.onCompleted:{
Layout.fillWidth: true addTab("Send ether", newTransaction)
addTab("Create contract", newContract)
} }
}
TextField { Component {
id: txValue id: newTransaction
width: 200 Column {
placeholderText: "Amount" spacing: 5
}
TextField {
id: txGas
width: 200
placeholderText: "Gas"
anchors.left: txValue
anchors.leftMargin: 5 anchors.leftMargin: 5
}
TextField {
id: txGasPrice
width: 200
placeholderText: "Gas price"
anchors.left: txGas
anchors.leftMargin: 5
}
Label {
text: "Transaction data"
}
TextArea {
id: codeView
anchors.topMargin: 5 anchors.topMargin: 5
Layout.fillWidth: true anchors.top: parent.top
width: parent.width /2 anchors.left: parent.left
} TextField {
id: txSimpleRecipient
Button { placeholderText: "Recipient address"
id: txButton Layout.fillWidth: true
text: "Send" validator: RegExpValidator { regExp: /[a-f0-9]{40}/ }
onClicked: { width: 530
//this.enabled = false }
var res = eth.createTx(txRecipient.text, txValue.text, txGas.text, txGasPrice.text, codeView.text) TextField {
if(res[1]) { id: txSimpleValue
txOutput.text = "Output:\n" + res[1].error() placeholderText: "Amount"
} else { anchors.rightMargin: 5
txOutput.text = "Output:\n" + res[0] validator: IntValidator { }
}
Button {
id: txSimpleButton
text: "Send"
onClicked: {
//this.enabled = false
var res = eth.createTx(txSimpleRecipient.text, txSimpleValue.text,"","","")
if(res[1]) {
txSimpleResult.text = "There has been an error broadcasting your transaction:" + res[1].error()
txSimpleResult.visible = true
} else {
txSimpleResult.text = "Your transaction has been broadcasted over the network.\nYour transaction id is:"
txSimpleOutput.text = res[0]
txSimpleOutput.visible = true
txSimpleResult.visible = true
txSimpleValue.visible = false
txSimpleRecipient.visible = false
txSimpleValue.text = ""
txSimpleRecipient.text = ""
txSimpleRecipient.focus = true
newSimpleTxButton.visible = true
this.visible = false
}
}
}
Text {
id: txSimpleResult
visible: false
}
TextField {
id: txSimpleOutput
visible: false
width: 530
}
Button {
id: newSimpleTxButton
visible: false
text: "Create an other transaction"
onClicked: {
this.visible = false
txSimpleResult.text = ""
txSimpleOutput.text = ""
txSimpleResult.visible = false
txSimpleOutput.visible = false
txSimpleValue.visible = true
txSimpleRecipient.visible = true
txSimpleButton.visible = true
} }
txOutput.visible = true
} }
} }
TextArea { }
id: txOutput Component {
visible: false id: newContract
Layout.fillWidth: true Column {
height: 40 id: mainContractColumn
anchors.bottom: parent.bottom 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: 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
TextField {
id: txValue
width: 200
placeholderText: "Amount"
validator: IntValidator { }
onTextChanged: {
contractFormReady()
}
}
TextField {
id: txGas
width: 200
validator: IntValidator { }
placeholderText: "Gas"
onTextChanged: {
contractFormReady()
}
}
TextField {
id: txGasPrice
width: 200
placeholderText: "Gas price"
validator: IntValidator { }
onTextChanged: {
contractFormReady()
}
}
Label {
id: txDataLabel
text: "Transaction data"
}
TextArea {
id: codeView
anchors.topMargin: 5
Layout.fillWidth: true
width: parent.width /2
onTextChanged: {
contractFormReady()
}
}
Button {
id: txButton
states: [
State {
name: "READY"
PropertyChanges { target: txButton; enabled: true}
},
State {
name: "NOTREADY"
PropertyChanges { target: txButton; enabled:false}
}
]
text: "Send"
enabled: false
onClicked: {
//this.enabled = false
var res = eth.createTx("", txValue.text, txGas.text, txGasPrice.text, codeView.text)
if(res[1]) {
txResult.text = "Your contract <b>could not</b> be send over the network:\n<b>"
txResult.text += res[1].error()
txResult.text += "</b>"
mainContractColumn.state = "ERROR"
} else {
txResult.text = "Your contract has been submitted:\n"
txOutput.text = res[0]
mainContractColumn.state = "DONE"
}
}
}
Text {
id: txResult
visible: false
}
TextField {
id: txOutput
visible: false
width: 530
}
Button {
id: newTxButton
visible: false
text: "Create an other contract"
onClicked: {
this.visible = false
txResult.text = ""
txOutput.text = ""
mainContractColumn.state = "SETUP"
}
}
} }
} }
} }

@ -63,15 +63,21 @@ func (lib *EthLib) CreateTx(recipient, valueStr, gasStr, gasPriceStr, data strin
var tx *ethchain.Transaction var tx *ethchain.Transaction
// Compile and assemble the given data // Compile and assemble the given data
if contractCreation { if contractCreation {
asm, err := mutan.Compile(strings.NewReader(data), false) asm, errors := mutan.Compile(strings.NewReader(data), false)
if err != nil { if len(errors) > 0 {
return "", err var errs string
for _, er := range errors {
if er != nil {
errs += er.Error()
}
}
return "", fmt.Errorf(errs)
} }
code := ethutil.Assemble(asm...) code := ethutil.Assemble(asm...)
tx = ethchain.NewContractCreationTx(value, gasPrice, code) tx = ethchain.NewContractCreationTx(value, gasPrice, code)
} else { } else {
tx = ethchain.NewTransactionMessage(hash, value, gasPrice, gas, []string{}) tx = ethchain.NewTransactionMessage(hash, value, gasPrice, gas, nil)
} }
acc := lib.stateManager.GetAddrState(keyPair.Address()) acc := lib.stateManager.GetAddrState(keyPair.Address())
tx.Nonce = acc.Nonce tx.Nonce = acc.Nonce