My app shows the balance, the transactions, but the little icon on upper-left is red.
Yes I also get the red X. It means the WebDocket isn't connected (so you will need to press the refresh icon in the top right), i'm not sure why this is I need to have a closer look.
The encrypted backup don't ask for my yubikey, only relying on the passphrase? I just want to be sure of that.
Correct, two-factor authentication does not effect how the wallet is encrypted.
--- New Smarter Transaction Push Algorithm ----Although Eligius should process low fee transactions for My Wallet users there has been some issues getting low fee transaction to propagate properly through the network. Now transactions will be directly relayed to every known mining node. If network propagation is still poor they will be relayed again every 10 minutes.
If your transaction doesn't confirm within 24 hours you will now receive a notification:
A transaction made through My Wallet has been removed from our database because it was taking a long time to be included in a block. The transaction can be temporarily viewed at {link} however it will be removed shortly.
In addition the WebSocket server now runs on all 3 servers providing better fault tolerance and a
flash fallback has been added for older browsers without native WebSocket support.
Anyone who has been having problems with slow transactions or any errors pushing transactions things should be much improved now.
void NodeManager::pushTransaction(CTransaction& tx, int maxNodes) {
if (fDebug)
printf("pushTransaction() %s\n", tx.GetHash().ToString().c_str());
std::set<unsigned int> already_pushed;
ReadLock read(nodeManagerMutex);
//100ms lock timeout
boost::system_time const timeout = boost::get_system_time()+ boost::posix_time::milliseconds(100);
int nPushed = 0;
int retryTimes = 5;
bool done = false;
uint256 hash = tx.GetHash();
for (int retry = 0; retry < retryTimes; ++ retry) {
bool allZero = true;
//Node mangers handle groups of nodes 100 at a time
for (int ii = 0; ii < nodeManagers.size(); ++ii) {
NodeManager * manager = nodeManagers[ii];
if (manager->connectedNodes.size() == 0) {
if (fDebug) printf("Size %lu\n", manager->connectedNodes.size());
continue;
}
//If the recent inventory contains the transaction hash then we can finish because the network
// has already relayed us back the transaction
if (CNode::recentInventoryContains(hash)) {
if (fDebug) printf("Breaking because recent inventory contains transaction hash\n");
return;
}
allZero = false;
if (fShutdown)
return;
if (manager->connectedNodesMutex.timed_lock_shared(timeout)) {
if (fShutdown)
return;
//Push to mining pools first
BOOST_FOREACH(CNode* pnode, manager->connectedNodes) {
if (already_pushed.count(pnode->addr.ip) > 0) {
continue;
}
if (ConnectionManager::isMiningPool(pnode->addr.ip)) {
already_pushed.insert(pnode->addr.ip);
if (pnode->hSocket == INVALID_SOCKET || pnode->fDisconnect)
continue;
pnode->PushMessage("tx", tx);
++nPushed;
}
if (nPushed > maxNodes) {
if (fDebug) printf("Relayed to sufficient number of nodes (known) %d\n", nPushed);
done = true;
break;
}
}
manager->connectedNodesMutex.unlock_shared();
}
}
if (allZero) {
return;
}
if (done) {
return;
}
}
if (nPushed < maxNodes) {
printf("Didn't relay to enough nodes %d < %d\n", nPushed, maxNodes);
return;
}
}