Merge pull request 'mempool integration' (#126) from lucretius/SilentDragonLite:mempool-new into dev
Reviewed-on: https://git.hush.is/hush/SilentDragonLite/pulls/126
This commit is contained in:
2
lib/Cargo.lock
generated
2
lib/Cargo.lock
generated
@@ -1849,7 +1849,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "silentdragonlitelib"
|
name = "silentdragonlitelib"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://git.hush.is/hush/silentdragonlite-cli?rev=0181b16fd037f98c760e668bb6af8a41dd0d6267#0181b16fd037f98c760e668bb6af8a41dd0d6267"
|
source = "git+https://git.hush.is/lucretius/silentdragonlite-cli?rev=eff5dd7b6dbcfd7e4db6fdba423399337b590722#eff5dd7b6dbcfd7e4db6fdba423399337b590722"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"base58",
|
"base58",
|
||||||
"bellman",
|
"bellman",
|
||||||
|
|||||||
@@ -12,4 +12,4 @@ crate-type = ["staticlib"]
|
|||||||
libc = "0.2.58"
|
libc = "0.2.58"
|
||||||
lazy_static = "1.4.0"
|
lazy_static = "1.4.0"
|
||||||
blake3 = "0.3.4"
|
blake3 = "0.3.4"
|
||||||
silentdragonlitelib = { git = "https://git.hush.is/hush/silentdragonlite-cli", rev = "0181b16fd037f98c760e668bb6af8a41dd0d6267" }
|
silentdragonlitelib = { git = "https://git.hush.is/lucretius/silentdragonlite-cli", rev = "eff5dd7b6dbcfd7e4db6fdba423399337b590722" }
|
||||||
|
|||||||
@@ -92,7 +92,15 @@ pub extern fn litelib_initialize_new(dangerous: bool,server: *const c_char) -> *
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
LIGHTCLIENT.lock().unwrap().replace(Some(Arc::new(lightclient)));
|
let lc = Arc::new(lightclient);
|
||||||
|
match LightClient::start_mempool_monitor(lc.clone()) {
|
||||||
|
Ok(_) => {println!("Starting Mempool")},
|
||||||
|
Err(e) => {
|
||||||
|
println!("Couldnt start mempool {}", e)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
LIGHTCLIENT.lock().unwrap().replace(Some(lc));
|
||||||
|
|
||||||
// Return the wallet's seed
|
// Return the wallet's seed
|
||||||
let s_str = CString::new(seed).unwrap();
|
let s_str = CString::new(seed).unwrap();
|
||||||
@@ -135,7 +143,15 @@ pub extern fn litelib_initialize_new_from_phrase(dangerous: bool,server: *const
|
|||||||
// Initialize logging
|
// Initialize logging
|
||||||
let _ = lightclient.init_logging();
|
let _ = lightclient.init_logging();
|
||||||
|
|
||||||
LIGHTCLIENT.lock().unwrap().replace(Some(Arc::new(lightclient)));
|
let lc = Arc::new(lightclient);
|
||||||
|
match LightClient::start_mempool_monitor(lc.clone()) {
|
||||||
|
Ok(_) => {println!("Starting Mempool")},
|
||||||
|
Err(e) => {
|
||||||
|
println!("Couldnt start mempool {}",e)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
LIGHTCLIENT.lock().unwrap().replace(Some(lc));
|
||||||
|
|
||||||
let c_str = CString::new("OK").unwrap();
|
let c_str = CString::new("OK").unwrap();
|
||||||
return c_str.into_raw();
|
return c_str.into_raw();
|
||||||
@@ -170,7 +186,16 @@ pub extern fn litelib_initialize_existing(dangerous: bool, server: *const c_char
|
|||||||
// Initialize logging
|
// Initialize logging
|
||||||
let _ = lightclient.init_logging();
|
let _ = lightclient.init_logging();
|
||||||
|
|
||||||
LIGHTCLIENT.lock().unwrap().replace(Some(Arc::new(lightclient)));
|
|
||||||
|
let lc = Arc::new(lightclient);
|
||||||
|
match LightClient::start_mempool_monitor(lc.clone()) {
|
||||||
|
Ok(_) => {println!("Starting Mempool")},
|
||||||
|
Err(e) => {
|
||||||
|
println!("Couldnt start mempool {}",e)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
LIGHTCLIENT.lock().unwrap().replace(Some(lc));
|
||||||
|
|
||||||
let c_str = CString::new("OK").unwrap();
|
let c_str = CString::new("OK").unwrap();
|
||||||
return c_str.into_raw();
|
return c_str.into_raw();
|
||||||
|
|||||||
@@ -261,10 +261,12 @@ void Controller::noConnection()
|
|||||||
|
|
||||||
// Clear balances
|
// Clear balances
|
||||||
ui->balSheilded->setText("");
|
ui->balSheilded->setText("");
|
||||||
|
ui->balUnconfirmed->setText("");
|
||||||
ui->balTransparent->setText("");
|
ui->balTransparent->setText("");
|
||||||
ui->balTotal->setText("");
|
ui->balTotal->setText("");
|
||||||
|
|
||||||
ui->balSheilded->setToolTip("");
|
ui->balSheilded->setToolTip("");
|
||||||
|
ui->balUnconfirmed->setToolTip("");
|
||||||
ui->balTransparent->setToolTip("");
|
ui->balTransparent->setToolTip("");
|
||||||
ui->balTotal->setToolTip("");
|
ui->balTotal->setToolTip("");
|
||||||
}
|
}
|
||||||
@@ -738,6 +740,7 @@ void Controller::updateUIBalances()
|
|||||||
{
|
{
|
||||||
CAmount balT = getModel()->getBalT();
|
CAmount balT = getModel()->getBalT();
|
||||||
CAmount balZ = getModel()->getBalZ();
|
CAmount balZ = getModel()->getBalZ();
|
||||||
|
CAmount balU = getModel()->getBalU();
|
||||||
CAmount balVerified = getModel()->getBalVerified();
|
CAmount balVerified = getModel()->getBalVerified();
|
||||||
CAmount balSpendable = getModel()->getBalSpendable();
|
CAmount balSpendable = getModel()->getBalSpendable();
|
||||||
|
|
||||||
@@ -755,6 +758,7 @@ void Controller::updateUIBalances()
|
|||||||
// Balances table
|
// Balances table
|
||||||
ui->balSheilded->setText(balZ.toDecimalhushString());
|
ui->balSheilded->setText(balZ.toDecimalhushString());
|
||||||
ui->balVerified->setText(balVerified.toDecimalhushString());
|
ui->balVerified->setText(balVerified.toDecimalhushString());
|
||||||
|
ui->balUnconfirmed->setText(balU.toDecimalhushString());
|
||||||
ui->balTransparent->setText(balT.toDecimalhushString());
|
ui->balTransparent->setText(balT.toDecimalhushString());
|
||||||
ui->balSpendable->setText(balSpendable.toDecimalhushString());
|
ui->balSpendable->setText(balSpendable.toDecimalhushString());
|
||||||
ui->balTotal->setText(balTotal.toDecimalhushString());
|
ui->balTotal->setText(balTotal.toDecimalhushString());
|
||||||
@@ -894,11 +898,13 @@ void Controller::refreshBalances()
|
|||||||
zrpc->fetchBalance([=] (json reply) {
|
zrpc->fetchBalance([=] (json reply) {
|
||||||
CAmount balT = CAmount::fromqint64(reply["tbalance"].get<json::number_unsigned_t>());
|
CAmount balT = CAmount::fromqint64(reply["tbalance"].get<json::number_unsigned_t>());
|
||||||
CAmount balZ = CAmount::fromqint64(reply["zbalance"].get<json::number_unsigned_t>());
|
CAmount balZ = CAmount::fromqint64(reply["zbalance"].get<json::number_unsigned_t>());
|
||||||
|
CAmount balU = CAmount::fromqint64(reply["unconfirmed"].get<json::number_unsigned_t>());
|
||||||
CAmount balVerified = CAmount::fromqint64(reply["verified_zbalance"].get<json::number_unsigned_t>());
|
CAmount balVerified = CAmount::fromqint64(reply["verified_zbalance"].get<json::number_unsigned_t>());
|
||||||
CAmount balSpendable = CAmount::fromqint64(reply["spendable_zbalance"].get<json::number_unsigned_t>());
|
CAmount balSpendable = CAmount::fromqint64(reply["spendable_zbalance"].get<json::number_unsigned_t>());
|
||||||
|
|
||||||
model->setBalT(balT);
|
model->setBalT(balT);
|
||||||
model->setBalZ(balZ);
|
model->setBalZ(balZ);
|
||||||
|
model->setBalU(balU);
|
||||||
model->setBalVerified(balVerified);
|
model->setBalVerified(balVerified);
|
||||||
model->setBalSpendable(balSpendable);
|
model->setBalSpendable(balSpendable);
|
||||||
|
|
||||||
@@ -936,6 +942,26 @@ void Controller::refreshBalances()
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void printJsonValue(QTextStream& out, const nlohmann::json& j, int depth = 0) {
|
||||||
|
if (j.is_array()) {
|
||||||
|
for (auto& elem : j) {
|
||||||
|
printJsonValue(out, elem, depth + 1);
|
||||||
|
}
|
||||||
|
} else if (j.is_object()) {
|
||||||
|
for (auto it = j.begin(); it != j.end(); ++it) {
|
||||||
|
std::string key = it.key();
|
||||||
|
const nlohmann::json& value = it.value();
|
||||||
|
out << QString::fromStdString(std::string(depth * 4, ' '))
|
||||||
|
<< QString::fromStdString(key) << ": ";
|
||||||
|
printJsonValue(out, value, depth + 1);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
out << QString::fromStdString(j.dump(4)) << "\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void Controller::refreshTransactions() {
|
void Controller::refreshTransactions() {
|
||||||
qDebug()<< __func__;
|
qDebug()<< __func__;
|
||||||
if (!zrpc->haveConnection())
|
if (!zrpc->haveConnection())
|
||||||
@@ -1047,7 +1073,6 @@ void Controller::refreshTransactions() {
|
|||||||
|
|
||||||
#define MESSAGEAS1 ((const unsigned char *) hashEncryptionKeyraw) ///////////
|
#define MESSAGEAS1 ((const unsigned char *) hashEncryptionKeyraw) ///////////
|
||||||
#define MESSAGEAS1_LEN length
|
#define MESSAGEAS1_LEN length
|
||||||
|
|
||||||
unsigned char sk[crypto_kx_SECRETKEYBYTES];
|
unsigned char sk[crypto_kx_SECRETKEYBYTES];
|
||||||
unsigned char pk[crypto_kx_PUBLICKEYBYTES];
|
unsigned char pk[crypto_kx_PUBLICKEYBYTES];
|
||||||
|
|
||||||
@@ -1061,9 +1086,7 @@ void Controller::refreshTransactions() {
|
|||||||
unsigned char server_rx[crypto_kx_SESSIONKEYBYTES], server_tx[crypto_kx_SESSIONKEYBYTES];
|
unsigned char server_rx[crypto_kx_SESSIONKEYBYTES], server_tx[crypto_kx_SESSIONKEYBYTES];
|
||||||
|
|
||||||
////////////////Get the pubkey from Bob, so we can create the share key
|
////////////////Get the pubkey from Bob, so we can create the share key
|
||||||
|
|
||||||
/////Create the shared key for sending the message
|
/////Create the shared key for sending the message
|
||||||
|
|
||||||
if (crypto_kx_server_session_keys(server_rx, server_tx, pk, sk, pubkeyBob) != 0)
|
if (crypto_kx_server_session_keys(server_rx, server_tx, pk, sk, pubkeyBob) != 0)
|
||||||
{
|
{
|
||||||
main->logger->write("Suspicious client public outgoing key, bail out ");
|
main->logger->write("Suspicious client public outgoing key, bail out ");
|
||||||
@@ -1085,15 +1108,11 @@ void Controller::refreshTransactions() {
|
|||||||
{
|
{
|
||||||
//////unsigned char* as message from QString
|
//////unsigned char* as message from QString
|
||||||
#define MESSAGE2 (const unsigned char *) encryptedMemo
|
#define MESSAGE2 (const unsigned char *) encryptedMemo
|
||||||
|
|
||||||
///////// length of the encrypted message
|
///////// length of the encrypted message
|
||||||
#define CIPHERTEXT1_LEN encryptedMemoSize1
|
#define CIPHERTEXT1_LEN encryptedMemoSize1
|
||||||
|
|
||||||
///////Message length is smaller then the encrypted message
|
///////Message length is smaller then the encrypted message
|
||||||
#define MESSAGE1_LEN encryptedMemoSize1 - crypto_secretstream_xchacha20poly1305_ABYTES
|
#define MESSAGE1_LEN encryptedMemoSize1 - crypto_secretstream_xchacha20poly1305_ABYTES
|
||||||
|
|
||||||
//////Set the length of the decrypted message
|
//////Set the length of the decrypted message
|
||||||
|
|
||||||
unsigned char decrypted[MESSAGE1_LEN];
|
unsigned char decrypted[MESSAGE1_LEN];
|
||||||
unsigned char tag[crypto_secretstream_xchacha20poly1305_TAG_FINAL];
|
unsigned char tag[crypto_secretstream_xchacha20poly1305_TAG_FINAL];
|
||||||
crypto_secretstream_xchacha20poly1305_state state;
|
crypto_secretstream_xchacha20poly1305_state state;
|
||||||
@@ -1121,7 +1140,6 @@ void Controller::refreshTransactions() {
|
|||||||
|
|
||||||
/////Now we can convert it to QString
|
/////Now we can convert it to QString
|
||||||
//////////////Give us the output of the decrypted message as debug to see if it was successfully
|
//////////////Give us the output of the decrypted message as debug to see if it was successfully
|
||||||
|
|
||||||
ChatItem item = ChatItem(
|
ChatItem item = ChatItem(
|
||||||
datetime,
|
datetime,
|
||||||
address,
|
address,
|
||||||
@@ -1164,13 +1182,13 @@ void Controller::refreshTransactions() {
|
|||||||
} else {
|
} else {
|
||||||
|
|
||||||
{ // Incoming Transaction
|
{ // Incoming Transaction
|
||||||
address = (it["address"].is_null() ? "" : QString::fromStdString(it["address"]));
|
QString memo;
|
||||||
model->markAddressUsed(address);
|
address = (it["address"].is_null() ? "" : QString::fromStdString(it["address"]));
|
||||||
|
|
||||||
QString memo;
|
|
||||||
if (!it["memo"].is_null()) {
|
if (!it["memo"].is_null()) {
|
||||||
memo = QString::fromStdString(it["memo"]);
|
memo = QString::fromStdString(it["memo"]);
|
||||||
}
|
}
|
||||||
|
|
||||||
items.push_back(TransactionItemDetail{ address,
|
items.push_back(TransactionItemDetail{ address,
|
||||||
CAmount::fromqint64(it["amount"].get<json::number_integer_t>()),
|
CAmount::fromqint64(it["amount"].get<json::number_integer_t>()),
|
||||||
memo
|
memo
|
||||||
@@ -1190,7 +1208,7 @@ void Controller::refreshTransactions() {
|
|||||||
QString contactname = "";
|
QString contactname = "";
|
||||||
bool isContact = false;
|
bool isContact = false;
|
||||||
|
|
||||||
if (!it["memo"].is_null()) {
|
if (!memo.isNull()) {
|
||||||
|
|
||||||
if (memo.startsWith("{")) {
|
if (memo.startsWith("{")) {
|
||||||
try {
|
try {
|
||||||
@@ -1260,7 +1278,8 @@ void Controller::refreshTransactions() {
|
|||||||
if (position == 1)
|
if (position == 1)
|
||||||
{
|
{
|
||||||
chatModel->addMemo(txid, headerbytes);
|
chatModel->addMemo(txid, headerbytes);
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
//
|
//
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1276,7 +1295,6 @@ void Controller::refreshTransactions() {
|
|||||||
|
|
||||||
#define MESSAGEAS1 ((const unsigned char *) hashEncryptionKeyraw)///////////
|
#define MESSAGEAS1 ((const unsigned char *) hashEncryptionKeyraw)///////////
|
||||||
#define MESSAGEAS1_LEN length
|
#define MESSAGEAS1_LEN length
|
||||||
|
|
||||||
unsigned char sk[crypto_kx_SECRETKEYBYTES];
|
unsigned char sk[crypto_kx_SECRETKEYBYTES];
|
||||||
unsigned char pk[crypto_kx_PUBLICKEYBYTES];
|
unsigned char pk[crypto_kx_PUBLICKEYBYTES];
|
||||||
|
|
||||||
@@ -1290,7 +1308,6 @@ void Controller::refreshTransactions() {
|
|||||||
unsigned char client_rx[crypto_kx_SESSIONKEYBYTES], client_tx[crypto_kx_SESSIONKEYBYTES];
|
unsigned char client_rx[crypto_kx_SESSIONKEYBYTES], client_tx[crypto_kx_SESSIONKEYBYTES];
|
||||||
|
|
||||||
////////////////Get the pubkey from Bob, so we can create the share key
|
////////////////Get the pubkey from Bob, so we can create the share key
|
||||||
|
|
||||||
/////Create the shared key for sending the message
|
/////Create the shared key for sending the message
|
||||||
if (crypto_kx_client_session_keys(client_rx, client_tx, pk, sk, pubkeyBob) != 0)
|
if (crypto_kx_client_session_keys(client_rx, client_tx, pk, sk, pubkeyBob) != 0)
|
||||||
{
|
{
|
||||||
@@ -1307,18 +1324,13 @@ void Controller::refreshTransactions() {
|
|||||||
|
|
||||||
int encryptedMemoSize1 = ba.length();
|
int encryptedMemoSize1 = ba.length();
|
||||||
//int headersize = ba1.length();
|
//int headersize = ba1.length();
|
||||||
|
|
||||||
//////unsigned char* as message from QString
|
//////unsigned char* as message from QString
|
||||||
#define MESSAGE2 (const unsigned char *) encryptedMemo
|
#define MESSAGE2 (const unsigned char *) encryptedMemo
|
||||||
|
|
||||||
///////// length of the encrypted message
|
///////// length of the encrypted message
|
||||||
#define CIPHERTEXT1_LEN encryptedMemoSize1
|
#define CIPHERTEXT1_LEN encryptedMemoSize1
|
||||||
|
|
||||||
///////Message length is smaller then the encrypted message
|
///////Message length is smaller then the encrypted message
|
||||||
#define MESSAGE1_LEN encryptedMemoSize1 - crypto_secretstream_xchacha20poly1305_ABYTES
|
#define MESSAGE1_LEN encryptedMemoSize1 - crypto_secretstream_xchacha20poly1305_ABYTES
|
||||||
|
|
||||||
//////Set the length of the decrypted message
|
//////Set the length of the decrypted message
|
||||||
|
|
||||||
unsigned char decrypted[MESSAGE1_LEN+1];
|
unsigned char decrypted[MESSAGE1_LEN+1];
|
||||||
unsigned char tag[crypto_secretstream_xchacha20poly1305_TAG_FINAL];
|
unsigned char tag[crypto_secretstream_xchacha20poly1305_TAG_FINAL];
|
||||||
crypto_secretstream_xchacha20poly1305_state state;
|
crypto_secretstream_xchacha20poly1305_state state;
|
||||||
@@ -1346,7 +1358,6 @@ void Controller::refreshTransactions() {
|
|||||||
memodecrypt = QString::fromUtf8( decryptedMemo.data(), decryptedMemo.size());
|
memodecrypt = QString::fromUtf8( decryptedMemo.data(), decryptedMemo.size());
|
||||||
|
|
||||||
////Give us the output of the decrypted message as debug to see if it was successfully
|
////Give us the output of the decrypted message as debug to see if it was successfully
|
||||||
|
|
||||||
ChatItem item = ChatItem(
|
ChatItem item = ChatItem(
|
||||||
datetime,
|
datetime,
|
||||||
address,
|
address,
|
||||||
@@ -1370,8 +1381,6 @@ void Controller::refreshTransactions() {
|
|||||||
qDebug() << __func__ << ": ignoring txid="<< txid;
|
qDebug() << __func__ << ": ignoring txid="<< txid;
|
||||||
}
|
}
|
||||||
|
|
||||||
//} else if (memo.startsWith("{")) {
|
|
||||||
//qDebug() << __func__ << ": ignoring a header memo";
|
|
||||||
} else {
|
} else {
|
||||||
// Add a chatitem for the initial CR
|
// Add a chatitem for the initial CR
|
||||||
ChatItem item = ChatItem(
|
ChatItem item = ChatItem(
|
||||||
|
|||||||
@@ -48,6 +48,9 @@ public:
|
|||||||
CAmount getBalZ() { QReadLocker locker(lock); return balZ; }
|
CAmount getBalZ() { QReadLocker locker(lock); return balZ; }
|
||||||
void setBalZ(CAmount a) { QReadLocker locker(lock); this->balZ = a; }
|
void setBalZ(CAmount a) { QReadLocker locker(lock); this->balZ = a; }
|
||||||
|
|
||||||
|
CAmount getBalU() { QReadLocker locker(lock); return balU; }
|
||||||
|
void setBalU(CAmount a) { QReadLocker locker(lock); this->balU = a; }
|
||||||
|
|
||||||
CAmount getBalVerified() { QReadLocker locker(lock); return balVerified; }
|
CAmount getBalVerified() { QReadLocker locker(lock); return balVerified; }
|
||||||
void setBalVerified(CAmount a) { QReadLocker locker(lock); this->balVerified = a; }
|
void setBalVerified(CAmount a) { QReadLocker locker(lock); this->balVerified = a; }
|
||||||
|
|
||||||
@@ -76,6 +79,7 @@ private:
|
|||||||
|
|
||||||
CAmount balT;
|
CAmount balT;
|
||||||
CAmount balZ;
|
CAmount balZ;
|
||||||
|
CAmount balU;
|
||||||
CAmount balVerified;
|
CAmount balVerified;
|
||||||
CAmount balSpendable;
|
CAmount balSpendable;
|
||||||
|
|
||||||
|
|||||||
@@ -641,6 +641,33 @@
|
|||||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||||
<item>
|
<item>
|
||||||
<widget class="QLabel" name="label_2">
|
<widget class="QLabel" name="label_2">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Unconfirmed</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="balUnconfirmed">
|
||||||
|
<property name="text">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="0">
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_2_1">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label_2_1">
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
|
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
|
||||||
<horstretch>0</horstretch>
|
<horstretch>0</horstretch>
|
||||||
@@ -664,7 +691,7 @@
|
|||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
<item row="3" column="0">
|
<item row="4" column="0">
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout_20">
|
<layout class="QHBoxLayout" name="horizontalLayout_20">
|
||||||
<item>
|
<item>
|
||||||
<widget class="QLabel" name="label_40">
|
<widget class="QLabel" name="label_40">
|
||||||
@@ -691,14 +718,14 @@
|
|||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
<item row="4" column="0">
|
<item row="5" column="0">
|
||||||
<widget class="Line" name="line">
|
<widget class="Line" name="line">
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
<enum>Qt::Horizontal</enum>
|
<enum>Qt::Horizontal</enum>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="5" column="0">
|
<item row="6" column="0">
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
||||||
<item>
|
<item>
|
||||||
<widget class="QLabel" name="label_3">
|
<widget class="QLabel" name="label_3">
|
||||||
@@ -735,7 +762,7 @@
|
|||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
<item row="6" column="0">
|
<item row="7" column="0">
|
||||||
<widget class="QLabel" name="lblSyncWarning">
|
<widget class="QLabel" name="lblSyncWarning">
|
||||||
<property name="styleSheet">
|
<property name="styleSheet">
|
||||||
<string notr="true">color:red;</string>
|
<string notr="true">color:red;</string>
|
||||||
@@ -748,7 +775,7 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="7" column="0">
|
<item row="8" column="0">
|
||||||
<widget class="QLabel" name="unconfirmedWarning">
|
<widget class="QLabel" name="unconfirmedWarning">
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
|
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
|
||||||
@@ -767,14 +794,14 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="8" column="0">
|
<item row="9" column="0">
|
||||||
<widget class="QPushButton" name="depositHushButton">
|
<widget class="QPushButton" name="depositHushButton">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Deposit Hush</string>
|
<string>Deposit Hush</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="9" column="0">
|
<item row="10" column="0">
|
||||||
<spacer name="verticalSpacer">
|
<spacer name="verticalSpacer">
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
<enum>Qt::Vertical</enum>
|
<enum>Qt::Vertical</enum>
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
// Copyright 2019-2023 The Hush developers
|
// Copyright 2019-2023 The Hush developers
|
||||||
// Released under the GPLv3
|
// Released under the GPLv3
|
||||||
#define APP_VERSION "1.5.3"
|
#define APP_VERSION "1.5.4"
|
||||||
|
|||||||
Reference in New Issue
Block a user