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:
parent
09935ba4b0
commit
70983136bc
@ -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
57
js/TxUtils.js
Normal 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;
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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");
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user