mirror of
https://github.com/haveno-dex/haveno.git
synced 2025-07-30 10:18:44 -04:00
balances include unlocked, locked, reserved offers, reserved trades
This commit is contained in:
parent
58696fe633
commit
59f3fc6385
6 changed files with 73 additions and 70 deletions
|
@ -635,20 +635,23 @@ class CoreWalletsService {
|
|||
var availableBalance = balances.getAvailableBalance().get();
|
||||
if (availableBalance == null)
|
||||
throw new IllegalStateException("available balance is not yet available");
|
||||
|
||||
var reservedBalance = balances.getReservedBalance().get();
|
||||
if (reservedBalance == null)
|
||||
throw new IllegalStateException("reserved balance is not yet available");
|
||||
|
||||
|
||||
var lockedBalance = balances.getLockedBalance().get();
|
||||
if (lockedBalance == null)
|
||||
throw new IllegalStateException("locked balance is not yet available");
|
||||
|
||||
var reservedOfferBalance = balances.getReservedOfferBalance().get();
|
||||
if (reservedOfferBalance == null)
|
||||
throw new IllegalStateException("reserved offer balance is not yet available");
|
||||
|
||||
var reservedTradeBalance = balances.getReservedTradeBalance().get();
|
||||
if (reservedTradeBalance == null)
|
||||
throw new IllegalStateException("reserved trade balance is not yet available");
|
||||
|
||||
return new XmrBalanceInfo(availableBalance.add(lockedBalance).value,
|
||||
availableBalance.value,
|
||||
lockedBalance.value,
|
||||
reservedBalance.value,
|
||||
availableBalance.add(lockedBalance).add(reservedBalance).value);
|
||||
return new XmrBalanceInfo(availableBalance.longValue(),
|
||||
lockedBalance.longValue(),
|
||||
reservedOfferBalance.longValue(),
|
||||
reservedTradeBalance.longValue());
|
||||
}
|
||||
|
||||
// Returns a Coin for the transfer amount string, or a RuntimeException if invalid.
|
||||
|
|
|
@ -10,42 +10,35 @@ import lombok.Getter;
|
|||
public class XmrBalanceInfo implements Payload {
|
||||
|
||||
public static final XmrBalanceInfo EMPTY = new XmrBalanceInfo(-1,
|
||||
-1,
|
||||
-1,
|
||||
-1,
|
||||
-1);
|
||||
|
||||
// All balances are in XMR centineros: https://www.getmonero.org/resources/moneropedia/denominations.html
|
||||
private final long balance;
|
||||
private final long availableBalance;
|
||||
// all balances are in atomic units
|
||||
private final long unlockedBalance;
|
||||
private final long lockedBalance;
|
||||
private final long reservedBalance;
|
||||
private final long totalBalance; // balance + reserved
|
||||
private final long reservedOfferBalance;
|
||||
private final long reservedTradeBalance;
|
||||
|
||||
public XmrBalanceInfo(long balance,
|
||||
long availableBalance,
|
||||
public XmrBalanceInfo(long unlockedBalance,
|
||||
long lockedBalance,
|
||||
long reservedBalance,
|
||||
long totalBalance) {
|
||||
this.balance = balance;
|
||||
this.availableBalance = availableBalance;
|
||||
long reservedOfferBalance,
|
||||
long reservedTradeBalance) {
|
||||
this.unlockedBalance = unlockedBalance;
|
||||
this.lockedBalance = lockedBalance;
|
||||
this.reservedBalance = reservedBalance;
|
||||
this.totalBalance = totalBalance;
|
||||
this.reservedOfferBalance = reservedOfferBalance;
|
||||
this.reservedTradeBalance = reservedTradeBalance;
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
public static XmrBalanceInfo valueOf(long balance,
|
||||
long availableBalance,
|
||||
public static XmrBalanceInfo valueOf(long unlockedBalance,
|
||||
long lockedBalance,
|
||||
long reservedBalance,
|
||||
long totalBalance) {
|
||||
// Convenience for creating a model instance instead of a proto.
|
||||
return new XmrBalanceInfo(balance,
|
||||
availableBalance,
|
||||
long reservedOfferBalance,
|
||||
long reservedTradeBalance) {
|
||||
return new XmrBalanceInfo(unlockedBalance,
|
||||
lockedBalance,
|
||||
reservedBalance,
|
||||
totalBalance);
|
||||
reservedOfferBalance,
|
||||
reservedTradeBalance);
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
@ -55,30 +48,27 @@ public class XmrBalanceInfo implements Payload {
|
|||
@Override
|
||||
public bisq.proto.grpc.XmrBalanceInfo toProtoMessage() {
|
||||
return bisq.proto.grpc.XmrBalanceInfo.newBuilder()
|
||||
.setBalance(balance)
|
||||
.setAvailableBalance(availableBalance)
|
||||
.setUnlockedBalance(unlockedBalance)
|
||||
.setLockedBalance(lockedBalance)
|
||||
.setReservedBalance(reservedBalance)
|
||||
.setTotalBalance(totalBalance)
|
||||
.setReservedOfferBalance(reservedOfferBalance)
|
||||
.setReservedTradeBalance(reservedTradeBalance)
|
||||
.build();
|
||||
}
|
||||
|
||||
public static XmrBalanceInfo fromProto(bisq.proto.grpc.XmrBalanceInfo proto) {
|
||||
return new XmrBalanceInfo(proto.getBalance(),
|
||||
proto.getAvailableBalance(),
|
||||
return new XmrBalanceInfo(proto.getUnlockedBalance(),
|
||||
proto.getLockedBalance(),
|
||||
proto.getReservedBalance(),
|
||||
proto.getTotalBalance());
|
||||
proto.getReservedOfferBalance(),
|
||||
proto.getReservedTradeBalance());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "BtcBalanceInfo{" +
|
||||
"balance=" + balance +
|
||||
", availableBalance=" + availableBalance +
|
||||
"unlockedBalance=" + unlockedBalance +
|
||||
", lockedBalance=" + lockedBalance +
|
||||
", reservedBalance=" + reservedBalance +
|
||||
", totalBalance=" + totalBalance +
|
||||
", reservedOfferBalance=" + reservedOfferBalance +
|
||||
", reservedTradeBalance=" + reservedTradeBalance +
|
||||
'}';
|
||||
}
|
||||
}
|
||||
|
|
|
@ -56,9 +56,13 @@ public class Balances {
|
|||
@Getter
|
||||
private final ObjectProperty<Coin> availableBalance = new SimpleObjectProperty<>();
|
||||
@Getter
|
||||
private final ObjectProperty<Coin> reservedBalance = new SimpleObjectProperty<>();
|
||||
@Getter
|
||||
private final ObjectProperty<Coin> lockedBalance = new SimpleObjectProperty<>();
|
||||
@Getter
|
||||
private final ObjectProperty<Coin> reservedOfferBalance = new SimpleObjectProperty<>();
|
||||
@Getter
|
||||
private final ObjectProperty<Coin> reservedTradeBalance = new SimpleObjectProperty<>();
|
||||
@Getter
|
||||
private final ObjectProperty<Coin> reservedBalance = new SimpleObjectProperty<>(); // TODO (woodser): this balance is sum of reserved funds for offers and trade multisigs; remove?
|
||||
|
||||
@Inject
|
||||
public Balances(TradeManager tradeManager,
|
||||
|
@ -92,6 +96,8 @@ public class Balances {
|
|||
UserThread.execute(() -> {
|
||||
updateAvailableBalance();
|
||||
updateLockedBalance();
|
||||
updateReservedOfferBalance();
|
||||
updateReservedTradeBalance();
|
||||
updateReservedBalance();
|
||||
});
|
||||
}
|
||||
|
@ -107,15 +113,16 @@ public class Balances {
|
|||
BigInteger unlockedBalance = xmrWalletService.getWallet().getUnlockedBalance(0);
|
||||
lockedBalance.set(Coin.valueOf(balance.subtract(unlockedBalance).longValueExact()));
|
||||
}
|
||||
|
||||
private void updateReservedBalance() {
|
||||
|
||||
// add frozen input amounts
|
||||
|
||||
private void updateReservedOfferBalance() {
|
||||
Coin sum = Coin.valueOf(0);
|
||||
List<MoneroOutputWallet> frozenOutputs = xmrWalletService.getWallet().getOutputs(new MoneroOutputQuery().setIsFrozen(true).setIsSpent(false));
|
||||
for (MoneroOutputWallet frozenOutput : frozenOutputs) sum = sum.add(Coin.valueOf(frozenOutput.getAmount().longValueExact()));
|
||||
|
||||
// add multisig deposit amounts
|
||||
reservedOfferBalance.set(sum);
|
||||
}
|
||||
|
||||
private void updateReservedTradeBalance() {
|
||||
Coin sum = Coin.valueOf(0);
|
||||
List<Trade> openTrades = tradeManager.getTradesStreamWithFundsLockedIn().collect(Collectors.toList());
|
||||
for (Trade trade : openTrades) {
|
||||
if (trade.getContract() == null) continue;
|
||||
|
@ -128,8 +135,10 @@ public class Balances {
|
|||
}
|
||||
sum = sum.add(Coin.valueOf(ParsingUtils.centinerosToAtomicUnits(reservedAmt).longValueExact()));
|
||||
}
|
||||
|
||||
// set reserved balance
|
||||
reservedBalance.set(sum);
|
||||
reservedTradeBalance.set(sum);
|
||||
}
|
||||
|
||||
private void updateReservedBalance() {
|
||||
reservedBalance.set(reservedOfferBalance.get().add(reservedTradeBalance.get()));
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue