mirror of
https://codeberg.org/anoncontributorxmr/mysu.git
synced 2025-01-17 14:46:32 -07:00
use last block optimization
This commit is contained in:
parent
71afc659a8
commit
c2fa492480
@ -214,8 +214,9 @@ struct MyWalletListener : Monero::WalletListener {
|
|||||||
/**
|
/**
|
||||||
* @brief newBlock - called when new block received
|
* @brief newBlock - called when new block received
|
||||||
* @param height - block height
|
* @param height - block height
|
||||||
|
* @param last - true if the block is the last block in the batch
|
||||||
*/
|
*/
|
||||||
void newBlock(uint64_t height) {
|
void newBlock(uint64_t height, bool last) {
|
||||||
std::lock_guard<std::mutex> lock(_listenerMutex);
|
std::lock_guard<std::mutex> lock(_listenerMutex);
|
||||||
if (jlistener == nullptr) return;
|
if (jlistener == nullptr) return;
|
||||||
//LOGD("newBlock");
|
//LOGD("newBlock");
|
||||||
@ -224,9 +225,10 @@ struct MyWalletListener : Monero::WalletListener {
|
|||||||
if (envStat == JNI_ERR) return;
|
if (envStat == JNI_ERR) return;
|
||||||
|
|
||||||
jlong h = static_cast<jlong>(height);
|
jlong h = static_cast<jlong>(height);
|
||||||
|
jboolean l = static_cast<jboolean>(last);
|
||||||
jmethodID listenerClass_newBlock = jenv->GetMethodID(class_WalletListener, "newBlock",
|
jmethodID listenerClass_newBlock = jenv->GetMethodID(class_WalletListener, "newBlock",
|
||||||
"(J)V");
|
"(JZ)V");
|
||||||
jenv->CallVoidMethod(jlistener, listenerClass_newBlock, h);
|
jenv->CallVoidMethod(jlistener, listenerClass_newBlock, h, l);
|
||||||
|
|
||||||
detachJVM(jenv, envStat);
|
detachJVM(jenv, envStat);
|
||||||
}
|
}
|
||||||
|
@ -45,7 +45,7 @@ interface WalletListener {
|
|||||||
*
|
*
|
||||||
* @param height - block height
|
* @param height - block height
|
||||||
*/
|
*/
|
||||||
fun newBlock(height: Long)
|
fun newBlock(height: Long, last: Boolean)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* updated - generic callback, called when any event (sent/received/block reveived/etc) happened with the wallet;
|
* updated - generic callback, called when any event (sent/received/block reveived/etc) happened with the wallet;
|
||||||
|
@ -467,16 +467,16 @@ class WalletService : Service(), WalletListener, DefaultLifecycleObserver {
|
|||||||
Timber.d("Unconfirmed money received callback")
|
Timber.d("Unconfirmed money received callback")
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun newBlock(height: Long) {
|
override fun newBlock(height: Long, last: Boolean) {
|
||||||
Timber.d("New block callback at height $height")
|
Timber.d("New block callback at height $height, is last: $last")
|
||||||
// Monero heights are fucked up. Wallet and blockchain heights are always +1 to real height, but this callback receives real height
|
// Monero heights are fucked up. Wallet and blockchain heights are always +1 to real height, but this callback receives real height
|
||||||
daemonHeight.updateAndGet { if (it > 0 && it < (height + 1)) (height + 1) else it }
|
daemonHeight.updateAndGet { if (it > 0 && it < (height + 1)) (height + 1) else it }
|
||||||
val wallet = getWalletOrThrow()
|
val wallet = getWalletOrThrow()
|
||||||
if (wallet.isSynchronized) {
|
if (last || wallet.isSynchronized) {
|
||||||
|
Timber.d("Storing and updating wallet because it is either synchronized or the block is the last one of the batch")
|
||||||
wallet.store()
|
wallet.store()
|
||||||
|
updateWallet(wallet)
|
||||||
}
|
}
|
||||||
// TODO: optimize to call this only on the last block of the batch
|
|
||||||
updateWallet(wallet)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun updated() {
|
override fun updated() {
|
||||||
|
Loading…
Reference in New Issue
Block a user