mirror of
https://github.com/haveno-dex/haveno.git
synced 2024-11-17 00:07:49 +00:00
avoid redundant wallet backups, max 10 backups (#505)
Co-authored-by: woodser <woodser@protonmail.com>
This commit is contained in:
parent
217e7e03a2
commit
1adf7bd73f
5 changed files with 22 additions and 18 deletions
|
@ -85,6 +85,7 @@ public class XmrWalletService {
|
|||
private static final String MONERO_MULTISIG_WALLET_PREFIX = "xmr_multisig_trade_";
|
||||
public static final double MINER_FEE_TOLERANCE = 0.25; // miner fee must be within percent of estimated fee
|
||||
private static final double SECURITY_DEPOSIT_TOLERANCE = Config.baseCurrencyNetwork() == BaseCurrencyNetwork.XMR_LOCAL ? 0.25 : 0.05; // security deposit absorbs miner fee up to percent
|
||||
private static final int NUM_MAX_BACKUP_WALLETS = 10;
|
||||
|
||||
private final CoreAccountService accountService;
|
||||
private final CoreMoneroConnectionsService connectionsService;
|
||||
|
@ -166,8 +167,12 @@ public class XmrWalletService {
|
|||
return wallet;
|
||||
}
|
||||
|
||||
public void saveWallet() {
|
||||
saveWallet(getWallet());
|
||||
public void saveMainWallet() {
|
||||
saveMainWallet(true);
|
||||
}
|
||||
|
||||
public void saveMainWallet(boolean backup) {
|
||||
saveWallet(getWallet(), backup);
|
||||
}
|
||||
|
||||
public boolean isWalletReady() {
|
||||
|
@ -241,13 +246,13 @@ public class XmrWalletService {
|
|||
return;
|
||||
}
|
||||
if (!multisigWallets.containsKey(tradeId)) throw new RuntimeException("Multisig wallet to save was not previously opened for trade " + tradeId);
|
||||
saveWallet(multisigWallets.get(tradeId));
|
||||
saveWallet(multisigWallets.get(tradeId), true);
|
||||
}
|
||||
}
|
||||
|
||||
private void saveWallet(MoneroWallet wallet) {
|
||||
private void saveWallet(MoneroWallet wallet, boolean backup) {
|
||||
wallet.save();
|
||||
backupWallet(wallet.getPath());
|
||||
if (backup) backupWallet(wallet.getPath());
|
||||
}
|
||||
|
||||
public void closeMultisigWallet(String tradeId) {
|
||||
|
@ -340,7 +345,7 @@ public class XmrWalletService {
|
|||
|
||||
// freeze inputs
|
||||
for (MoneroOutput input : tradeTx.getInputs()) wallet.freezeOutput(input.getKeyImage().getHex());
|
||||
wallet.save();
|
||||
saveMainWallet();
|
||||
return tradeTx;
|
||||
}
|
||||
}
|
||||
|
@ -412,7 +417,7 @@ public class XmrWalletService {
|
|||
|
||||
/**
|
||||
* Get the tx fee estimate based on its weight.
|
||||
*
|
||||
*
|
||||
* @param txWeight - the tx weight
|
||||
* @return the tx fee estimate
|
||||
*/
|
||||
|
@ -516,7 +521,7 @@ public class XmrWalletService {
|
|||
wallet.sync(); // blocking
|
||||
wallet.startSyncing(connectionsService.getDefaultRefreshPeriodMs()); // start syncing wallet in background
|
||||
connectionsService.doneDownload(); // TODO: using this to signify both daemon and wallet synced, refactor sync handling of both
|
||||
saveWallet(wallet);
|
||||
saveMainWallet(false); // skip backup on open
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
@ -653,7 +658,7 @@ public class XmrWalletService {
|
|||
tasks.add(() -> {
|
||||
try {
|
||||
wallet.changePassword(oldPassword, newPassword);
|
||||
saveWallet(wallet);
|
||||
saveMainWallet();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
throw e;
|
||||
|
@ -667,7 +672,7 @@ public class XmrWalletService {
|
|||
MoneroWallet multisigWallet = getMultisigWallet(tradeId); // TODO (woodser): this unnecessarily connects and syncs unopen wallets and leaves open
|
||||
if (multisigWallet == null) return;
|
||||
multisigWallet.changePassword(oldPassword, newPassword);
|
||||
saveWallet(multisigWallet);
|
||||
saveMultisigWallet(tradeId);
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -726,9 +731,9 @@ public class XmrWalletService {
|
|||
}
|
||||
|
||||
private void backupWallet(String walletName) {
|
||||
FileUtil.rollingBackup(walletDir, walletName, 20);
|
||||
FileUtil.rollingBackup(walletDir, walletName + ".keys", 20);
|
||||
FileUtil.rollingBackup(walletDir, walletName + ".address.txt", 20);
|
||||
FileUtil.rollingBackup(walletDir, walletName, NUM_MAX_BACKUP_WALLETS);
|
||||
FileUtil.rollingBackup(walletDir, walletName + ".keys", NUM_MAX_BACKUP_WALLETS);
|
||||
FileUtil.rollingBackup(walletDir, walletName + ".address.txt", NUM_MAX_BACKUP_WALLETS);
|
||||
}
|
||||
|
||||
private void deleteBackupWallets(String walletName) {
|
||||
|
|
|
@ -568,7 +568,7 @@ public class OpenOfferManager implements PeerManager.Listener, DecryptedDirectMe
|
|||
Offer offer = openOffer.getOffer();
|
||||
if (offer.getOfferPayload().getReserveTxKeyImages() != null) {
|
||||
for (String frozenKeyImage : offer.getOfferPayload().getReserveTxKeyImages()) xmrWalletService.getWallet().thawOutput(frozenKeyImage);
|
||||
xmrWalletService.getWallet().save();
|
||||
xmrWalletService.saveMainWallet();
|
||||
}
|
||||
offer.setState(Offer.State.REMOVED);
|
||||
openOffer.setState(OpenOffer.State.CANCELED);
|
||||
|
|
|
@ -317,7 +317,7 @@ public class TradeManager implements PersistedDataHost, DecryptedDirectMessageLi
|
|||
log.info("Thawing output which is not reserved for offer or trade: " + unreservedFrozenKeyImage);
|
||||
xmrWalletService.getWallet().thawOutput(unreservedFrozenKeyImage);
|
||||
}
|
||||
xmrWalletService.getWallet().save();
|
||||
if (!frozenKeyImages.isEmpty()) xmrWalletService.saveMainWallet();
|
||||
}
|
||||
|
||||
public TradeProtocol getTradeProtocol(Trade trade) {
|
||||
|
@ -1071,7 +1071,7 @@ public class TradeManager implements PersistedDataHost, DecryptedDirectMessageLi
|
|||
// unreserve key images
|
||||
if (trade instanceof TakerTrade && trade.getSelf().getReserveTxKeyImages() != null) {
|
||||
for (String keyImage : trade.getSelf().getReserveTxKeyImages()) xmrWalletService.getWallet().thawOutput(keyImage);
|
||||
xmrWalletService.getWallet().save();
|
||||
xmrWalletService.saveMainWallet();
|
||||
}
|
||||
|
||||
// remove trade
|
||||
|
|
|
@ -135,7 +135,6 @@ public class MaybeSendSignContractRequest extends TradeTask {
|
|||
private void completeAux() {
|
||||
trade.setState(State.CONTRACT_SIGNATURE_REQUESTED);
|
||||
processModel.getTradeManager().requestPersistence();
|
||||
processModel.getXmrWalletService().saveWallet();
|
||||
complete();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -122,7 +122,7 @@ public class ProcessInitMultisigRequest extends TradeTask {
|
|||
log.info("Importing exchanged multisig hex for trade {}", trade.getId());
|
||||
MoneroMultisigInitResult result = multisigWallet.exchangeMultisigKeys(Arrays.asList(peers[0].getExchangedMultisigHex(), peers[1].getExchangedMultisigHex()), xmrWalletService.getWalletPassword());
|
||||
processModel.setMultisigAddress(result.getAddress());
|
||||
processModel.getProvider().getXmrWalletService().saveMultisigWallet(trade.getId()); // save multisig wallet once it's created
|
||||
trade.saveWallet(); // save multisig wallet on completion
|
||||
trade.setStateIfValidTransitionTo(Trade.State.MULTISIG_COMPLETED);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue