So, is it a normal behavior? Why don't those values update without manual restart?
It is a bug in representation layer. You need not to restart the wallet, as the stake searching function that is run in background persistently loops through all available inputs and recalculates their weights on every pass. Roughly, expected time is an estimation how long it would take to find a stake using that particular input provided the weight would not change and the PoS difficulty would be the same. As time goes the weight grows, so the probability to find a stake increases and the expected time to find a stake decreases. The behavior you observe is not a real picture, but a result of not updating the stats in the user interface. The figures you got restarting the wallet are showing how these parameters are changing with time. If there were no bug you would see the stats changing in the real time.
@Dev:
void BitcoinGUI::updateMintingWeights()
{
// Only update if we have the network's current number of blocks, or weight(s) are zero (fixes lagging GUI)
if ((clientModel && clientModel->getNumBlocks() == clientModel->getNumBlocksOfPeers()) || !nWeight || !nNetworkWeight)
{
nWeight = 0;
if (pwalletMain)
pwalletMain->GetStakeWeight(*pwalletMain, nMinMax, nMinMax, nWeight);
nNetworkWeight = GetPoSKernelPS();
}
}
::getNumBlocksOfPeers() may report a value different than its previous result only when a new node got connected between its successive calls. When the wallet could not accept inbound connections (e.g. it is behind a firewall and there is no port forwarding) and it reached the maximum number of outbound connections the code above would not trigger the UI update until the set of connected nodes is changed.
Edit: generally, the ::getNumBlocksOfPeers() value changes only when a new node connected.