1
mirror of https://github.com/monero-project/monero-gui synced 2024-11-26 10:21:05 +01:00

Generate proof from history view and made javascript file with tx related functions

This commit is contained in:
Sander Ferdinand 2018-03-21 01:35:34 +01:00 committed by moneromooo-monero
parent 09935ba4b0
commit 70983136bc
5 changed files with 124 additions and 59 deletions

View File

@ -30,6 +30,7 @@ import QtQuick 2.0
import moneroComponents.Clipboard 1.0
import moneroComponents.AddressBookModel 1.0
import "../components" as MoneroComponents
import "../js/TxUtils.js" as TxUtils
import "." 1.0
ListView {
@ -196,19 +197,17 @@ ListView {
font.pixelSize: 18 * scaleRatio
font.bold: true
text: {
// hack, removes trailing zeros
var amount = (displayAmount * 1);
var amount = (displayAmount * 1); // * 1 removes trailing zeros
// sometimes, displayAmount is 0 - no idea why.
// in that case, we try to get the amount from
// the `destinations` string.
if(amount === 0){
amount = destinations.split(" ")[0].split(":")[0];
amount = TxUtils.destinationsToAmount(destinations);
amount = (amount *1);
}
// sometimes this destinations string also shows 0,
// at which point we run out of options.
// sometimes this destinations string also shows 0 at which point we run out of options.
return amount + " XMR";
}
color: isOut ? "white" : "#2eb358"
@ -251,18 +250,15 @@ ListView {
font.pixelSize: 16 * scaleRatio
text: {
if(isOut){
var _address = destinations.split(" ")[1];
if(_address === undefined) return ""
if(_address){
address = _address;
var address_truncated = address.substring(0, 6) + "..." + address.substring(address.length-6);
return "To " + address_truncated;
address = TxUtils.destinationsToAddress(destinations);
if(address){
var truncated = TxUtils.addressTruncate(address);
return "To " + truncated;
} else {
return "Unknown recipient";
}
}
return ""
return "";
}
MouseArea{
@ -414,6 +410,56 @@ ListView {
}
}
Rectangle {
id: proofButton
visible: isOut
color: "#404040"
height: 24 * scaleRatio
width: 24 * scaleRatio
anchors.right: parent.right
anchors.bottom: parent.bottom
anchors.bottomMargin: 36
radius: 20 * scaleRatio
MouseArea {
id: proofButtonMouseArea
anchors.fill: parent
hoverEnabled: true
cursorShape: Qt.PointingHandCursor
onClicked: {
var address = TxUtils.destinationsToAddress(destinations);
if(address === undefined){
console.log('getProof: Error fetching address')
return;
}
var checked = (TxUtils.checkTxID(hash) && TxUtils.checkAddress(address, appWindow.persistentSettings.testnet));
if(!checked){
console.log('getProof: Error checking TxId and/or address');
}
console.log("getProof: Generate clicked: txid " + hash + ", address " + address);
root.getProofClicked(hash, address, '');
}
onEntered: {
proofButton.color = "#656565";
}
onExited: {
proofButton.color = "#404040";
}
}
Text {
color: Style.defaultFontColor
text: "P"
anchors.horizontalCenter: parent.horizontalCenter
anchors.verticalCenter: parent.verticalCenter
font.pixelSize: 14 * scaleRatio
}
}
Rectangle {
id: detailsButton
color: "#404040"

57
js/TxUtils.js Normal file
View File

@ -0,0 +1,57 @@
function destinationsToAmount(destinations){
// Gets amount from destinations line
// input: "20.000000000000: 9tLGyK277MnYrDc7Vzi6TB1pJvstFoviziFwsqQNFbwA9rvg5RxYVYjEezFKDjvDHgAzTELJhJHVx6JAaWZKeVqSUZkXeKk"
// returns: 20.000000000000
return destinations.split(" ")[0].split(":")[0];
}
function destinationsToAddress(destinations){
var address = destinations.split(" ")[1];
if(address === undefined) return ""
return address;
}
function addressTruncate(address){
return address.substring(0, 6) + "..." + address.substring(address.length-6);
}
function check256(str, length) {
if (str.length != length)
return false;
for (var i = 0; i < length; ++i) {
if (str[i] >= '0' && str[i] <= '9')
continue;
if (str[i] >= 'a' && str[i] <= 'z')
continue;
if (str[i] >= 'A' && str[i] <= 'Z')
continue;
return false;
}
return true;
}
function checkAddress(address, testnet) {
return walletManager.addressValid(address, testnet)
}
function checkTxID(txid) {
return check256(txid, 64)
}
function checkSignature(signature) {
if (signature.indexOf("OutProofV") === 0) {
if ((signature.length - 10) % 132 != 0)
return false;
return check256(signature, signature.length);
} else if (signature.indexOf("InProofV") === 0) {
if ((signature.length - 9) % 132 != 0)
return false;
return check256(signature, signature.length);
} else if (signature.indexOf("SpendProofV") === 0) {
if ((signature.length - 12) % 88 != 0)
return false;
return check256(signature, signature.length);
}
return false;
}

View File

@ -38,7 +38,7 @@ import moneroComponents.TransactionHistoryModel 1.0
import "../components"
Rectangle {
id: root
id: mainLayout
property var model
property int tableHeight: !isMobile ? table.contentHeight : tableMobile.contentHeight
@ -321,7 +321,7 @@ Rectangle {
id: table
visible: !isMobile
onContentYChanged: flickableScroll.flickableContentYChanged()
model: !isMobile ? root.model : null
model: !isMobile ? mainLayout.model : null
addressBookModel: null
Layout.fillWidth: true
@ -332,7 +332,7 @@ Rectangle {
id: tableMobile
visible: isMobile
onContentYChanged: flickableScroll.flickableContentYChanged()
model: isMobile ? root.model : null
model: isMobile ? mainLayout.model : null
addressBookModel: null
Layout.fillWidth: true

View File

@ -34,52 +34,14 @@ import QtQuick.Layouts 1.1
import "../components"
import moneroComponents.Clipboard 1.0
import "../js/TxUtils.js" as TxUtils
Rectangle {
color: "transparent"
Clipboard { id: clipboard }
function checkAddress(address, nettype) {
return walletManager.addressValid(address, nettype)
}
function check256(str, length) {
if (str.length != length)
return false;
for (var i = 0; i < length; ++i) {
if (str[i] >= '0' && str[i] <= '9')
continue;
if (str[i] >= 'a' && str[i] <= 'z')
continue;
if (str[i] >= 'A' && str[i] <= 'Z')
continue;
return false;
}
return true;
}
function checkTxID(txid) {
return check256(txid, 64)
}
function checkSignature(signature) {
if (signature.indexOf("OutProofV") === 0) {
if ((signature.length - 10) % 132 != 0)
return false;
return check256(signature, signature.length);
} else if (signature.indexOf("InProofV") === 0) {
if ((signature.length - 9) % 132 != 0)
return false;
return check256(signature, signature.length);
} else if (signature.indexOf("SpendProofV") === 0) {
if ((signature.length - 12) % 88 != 0)
return false;
return check256(signature, signature.length);
}
return false;
}
/* main layout */
ColumnLayout {
id: mainLayout
@ -156,7 +118,7 @@ Rectangle {
anchors.topMargin: 17
width: 60
text: qsTr("Generate") + translationManager.emptyString
enabled: checkTxID(getProofTxIdLine.text) && (getProofAddressLine.text.length == 0 || checkAddress(getProofAddressLine.text, appWindow.persistentSettings.testnet))
enabled: TxUtils.checkTxID(getProofTxIdLine.text) && (getProofAddressLine.text.length == 0 || TxUtils.checkAddress(getProofAddressLine.text, appWindow.persistentSettings.testnet))
onClicked: {
console.log("getProof: Generate clicked: txid " + getProofTxIdLine.text + ", address " + getProofAddressLine.text + ", message: " + getProofMessageLine.text);
root.getProofClicked(getProofTxIdLine.text, getProofAddressLine.text, getProofMessageLine.text)
@ -246,7 +208,7 @@ Rectangle {
anchors.topMargin: 17
width: 60
text: qsTr("Check") + translationManager.emptyString
enabled: checkTxID(checkProofTxIdLine.text) && checkSignature(checkProofSignatureLine.text) && ((checkProofSignatureLine.text.indexOf("SpendProofV") === 0 && checkProofAddressLine.text.length == 0) || (checkProofSignatureLine.text.indexOf("SpendProofV") !== 0 && checkAddress(checkProofAddressLine.text, appWindow.persistentSettings.testnet)))
enabled: TxUtils.checkTxID(checkProofTxIdLine.text) && TxUtils.checkSignature(checkProofSignatureLine.text) && ((checkProofSignatureLine.text.indexOf("SpendProofV") === 0 && checkProofAddressLine.text.length == 0) || (checkProofSignatureLine.text.indexOf("SpendProofV") !== 0 && TxUtils.checkAddress(checkProofAddressLine.text, appWindow.persistentSettings.testnet)))
onClicked: {
console.log("checkProof: Check clicked: txid " + checkProofTxIdLine.text + ", address " + checkProofAddressLine.text + ", message " + checkProofMessageLine.text + ", signature " + checkProofSignatureLine.text);
root.checkProofClicked(checkProofTxIdLine.text, checkProofAddressLine.text, checkProofMessageLine.text, checkProofSignatureLine.text)
@ -278,5 +240,4 @@ Rectangle {
console.log("TxKey page loaded");
}
}

View File

@ -202,5 +202,6 @@
<file>images/historyBorderRadius.png</file>
<file>components/HistoryTableInnerColumn.qml</file>
<file>components/CheckBox2.qml</file>
<file>js/TxUtils.js</file>
</qresource>
</RCC>