|
@ -958,11 +958,89 @@ void MainWindow::viewTxid(QString txid) { |
|
|
property_value = props.toObject()[property_name].toBool() ? "true" : "false" ; |
|
|
property_value = props.toObject()[property_name].toBool() ? "true" : "false" ; |
|
|
} else if (props.toObject()[property_name].isArray()) { |
|
|
} else if (props.toObject()[property_name].isArray()) { |
|
|
DEBUG( property_name << " is an array"); |
|
|
DEBUG( property_name << " is an array"); |
|
|
|
|
|
// vin is the Vector of INputs of transparent spends
|
|
|
|
|
|
if( property_name == "vin" ) { |
|
|
|
|
|
int index = 0; |
|
|
|
|
|
auto vins = props.toObject()[property_name].toArray(); |
|
|
|
|
|
for (const auto& vin : vins) { |
|
|
|
|
|
QString this_vin = "vin " + QString::number(index); |
|
|
|
|
|
auto vinObj = vin.toObject(); |
|
|
|
|
|
|
|
|
|
|
|
// Is this a normal input or coinbase input?
|
|
|
|
|
|
bool is_coinbase = vinObj["coinbase"].toString().length() > 0; |
|
|
|
|
|
|
|
|
|
|
|
if (is_coinbase) { |
|
|
|
|
|
propsList.append( |
|
|
|
|
|
QPair<QString, QString>( this_vin + " coinbase", vinObj["coinbase"].toString() ) |
|
|
|
|
|
); |
|
|
|
|
|
} else { |
|
|
|
|
|
// the address of this spend
|
|
|
|
|
|
propsList.append( |
|
|
|
|
|
QPair<QString, QString>( this_vin + " address", vinObj["address"].toString() ) |
|
|
|
|
|
); |
|
|
|
|
|
// the value of this spend
|
|
|
|
|
|
propsList.append( |
|
|
|
|
|
QPair<QString, QString>( this_vin + " value", QString::number(vinObj["value"].toDouble()) ) |
|
|
|
|
|
); |
|
|
|
|
|
// the txid in which this UTXO was created
|
|
|
|
|
|
propsList.append( |
|
|
|
|
|
QPair<QString, QString>( this_vin + " txid", vinObj["txid"].toString() ) |
|
|
|
|
|
); |
|
|
|
|
|
// the index of vout in the txid it was created
|
|
|
|
|
|
propsList.append( |
|
|
|
|
|
QPair<QString, QString>( this_vin + " vout", QString::number(vinObj["vout"].toInt()) ) |
|
|
|
|
|
); |
|
|
|
|
|
} |
|
|
|
|
|
// sequence number is part of both coinbase and non-coinbase vins
|
|
|
|
|
|
propsList.append( |
|
|
|
|
|
QPair<QString, QString>( this_vin + " sequence", QString::number(vinObj["sequence"].toDouble()) ) |
|
|
|
|
|
); |
|
|
|
|
|
index++; |
|
|
|
|
|
} |
|
|
|
|
|
} else if (property_name == "vout") { |
|
|
|
|
|
// vout = Vector of OUTputs of transparent sends
|
|
|
|
|
|
auto vouts = props.toObject()[property_name].toArray(); |
|
|
|
|
|
if(vouts.size() == 0) { |
|
|
|
|
|
propsList.append( QPair<QString, QString>( "vout", "Empty") ); |
|
|
|
|
|
} else { |
|
|
|
|
|
//...
|
|
|
|
|
|
} |
|
|
|
|
|
} else if (property_name == "vShieldedOutput") { |
|
|
|
|
|
// the vector of shielded outputs
|
|
|
|
|
|
auto zouts = props.toObject()[property_name].toArray(); |
|
|
|
|
|
if(zouts.size() == 0) { |
|
|
|
|
|
propsList.append( QPair<QString, QString>( property_name, "Empty")); |
|
|
|
|
|
} else { |
|
|
|
|
|
int index = 0; |
|
|
|
|
|
QString property_value = ""; |
|
|
|
|
|
for (const auto& zout : zouts) { |
|
|
|
|
|
auto zoutObj = zout.toObject(); |
|
|
|
|
|
auto properties = {"proof", "cv", "cmu", "encCiphertext", "outCiphertext", "ephemeralKey" }; |
|
|
|
|
|
for(const auto& prop : properties ) { |
|
|
|
|
|
propsList.append( |
|
|
|
|
|
QPair<QString, QString>( "vShieldedOutput " + QString::number(index) + " " + prop, zoutObj[prop].toString() ) |
|
|
|
|
|
); |
|
|
|
|
|
} |
|
|
|
|
|
index++; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} else if (property_name == "vShieldedSpend") { |
|
|
|
|
|
// the vector of shielded spends
|
|
|
|
|
|
auto zins = props.toObject()[property_name].toArray(); |
|
|
|
|
|
if(zins.size() == 0) { |
|
|
|
|
|
propsList.append( QPair<QString, QString>( property_name, "Empty")); |
|
|
|
|
|
} else { |
|
|
|
|
|
// TODO
|
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
} else if (props.toObject()[property_name].isObject()) { |
|
|
} else if (props.toObject()[property_name].isObject()) { |
|
|
DEBUG( property_name << " is an object"); |
|
|
DEBUG( property_name << " is an object"); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
propsList.append( QPair<QString, QString>( property_name, property_value )); |
|
|
if (property_name != "vin" && property_name != "vout" && |
|
|
|
|
|
property_name != "vShieldedOutput" && property_name != "vShieldedSpend" ) { |
|
|
|
|
|
propsList.append( QPair<QString, QString>( property_name, property_value )); |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
ValidateAddressesModel model(vt.tblProps, propsList); |
|
|
ValidateAddressesModel model(vt.tblProps, propsList); |
|
@ -2141,6 +2219,11 @@ void MainWindow::setupTransactionsTab() { |
|
|
mb.exec(); |
|
|
mb.exec(); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
} else { |
|
|
|
|
|
// if no memo, show View Transaction
|
|
|
|
|
|
DEBUG("double clicked tx index=" << index); |
|
|
|
|
|
QString txid = txModel->getTxId(index.row()); |
|
|
|
|
|
viewTxid(txid); |
|
|
} |
|
|
} |
|
|
}); |
|
|
}); |
|
|
|
|
|
|
|
|