diff --git a/ui-demo/src/main/java/de/cotto/lndmanagej/ui/demo/data/DemoDataService.java b/ui-demo/src/main/java/de/cotto/lndmanagej/ui/demo/data/DemoDataService.java
index d86fae04..9e8fbb7e 100644
--- a/ui-demo/src/main/java/de/cotto/lndmanagej/ui/demo/data/DemoDataService.java
+++ b/ui-demo/src/main/java/de/cotto/lndmanagej/ui/demo/data/DemoDataService.java
@@ -39,13 +39,13 @@ public class DemoDataService extends UiDataService {
"c-otto.de",
"027ce055380348d7812d2ae7745701c9f93e70c1adeb2657f053f91df4f2843c71",
1_500,
- 20_000_000);
+ 19_998_500);
public static final OpenChannelDto ACINQ = createOpenChannel(
"799999x456x2",
"ACINQ",
"03864ef025fde8fb587d989186ce6a4a186895ee44a926bfc370e2c366597a3f8f",
- 600_100,
- 2_500_000);
+ 500_100,
+ 2_499_900);
public static final OpenChannelDto TRY_BITCOIN = createOpenChannel(
"799999x456x3",
"try-bitcoin.com",
@@ -57,19 +57,19 @@ public class DemoDataService extends UiDataService {
"Kraken 🐙⚡",
"02f1a8c87607f415c8f22c00593002775941dea48869ce23096af27b0cfdcc0b69",
5_050_000,
- 8_000_000);
+ 8_450_000);
public static final OpenChannelDto POCKET = createOpenChannel(
"799999x456x5",
"PocketBitcoin.com",
"02765a281bd188e80a89e6ea5092dcb8ebaaa5c5da341e64327e3fadbadcbc686c",
10_500_900,
- 12_000_000);
+ 11_499_100);
public static final OpenChannelDto B_CASH_IS_TRASH = createOpenChannel(
"799999x456x6",
"BCash_Is_Trash",
"0298f6074a454a1f5345cb2a7c6f9fce206cd0bf675d177cdbf0ca7508dd28852f",
11_100_600,
- 9_800_400);
+ 8_899_400);
public static final OpenChannelDto WOS = createOpenChannel(
"799999x456x7",
"WalletOfSatoshi.com",
@@ -80,13 +80,13 @@ public class DemoDataService extends UiDataService {
"799999x456x8",
"ACINQ",
"03864ef025fde8fb587d989186ce6a4a186895ee44a926bfc370e2c366597a3f8f",
- 12_400_100,
- 1_500_900);
+ 11_899_100,
+ 1_600_900);
public static final OpenChannelDto B_CASH_IS_TRASH2 = createOpenChannel(
"799999x456x9",
"BCash_Is_Trash",
"0298f6074a454a1f5345cb2a7c6f9fce206cd0bf675d177cdbf0ca7508dd28852f",
- 19_000_100,
+ 18_099_100,
900_900);
public static final NodeWithWarningsDto ACINQ_WARNING = createNodeWithWarnings(
@@ -164,17 +164,18 @@ public class DemoDataService extends UiDataService {
long remote
) {
ChannelId channelId = ChannelId.fromCompactForm(compactChannelId);
- return new OpenChannelDto(
- channelId,
- alias,
- Pubkey.create(pubkey),
- PoliciesDto.createFromModel(derivePolicies(channelId)),
- BalanceInformationDto.createFromModel(new BalanceInformation(
- Coins.ofSatoshis(local),
- Coins.ofSatoshis(200),
- Coins.ofSatoshis(remote),
- Coins.ofSatoshis(500)
- )));
+ Pubkey remotePubkey = Pubkey.create(pubkey);
+ PoliciesDto policies = PoliciesDto.createFromModel(derivePolicies(channelId));
+ long localReserve = 200;
+ long remoteReserve = 500;
+ long capacity = local + remote;
+ BalanceInformationDto balance = BalanceInformationDto.createFromModel(new BalanceInformation(
+ Coins.ofSatoshis(local),
+ Coins.ofSatoshis(localReserve),
+ Coins.ofSatoshis(remote),
+ Coins.ofSatoshis(remoteReserve)
+ ));
+ return new OpenChannelDto(channelId, alias, remotePubkey, policies, balance, capacity);
}
private static ChannelDetailsDto createChannelDetails(OpenChannelDto channel) {
@@ -184,6 +185,7 @@ public class DemoDataService extends UiDataService {
channel.remoteAlias(),
deriveOpenInitiator(channel.channelId()),
channel.balanceInformation(),
+ channel.capacitySat(),
deriveOnChainCosts(channel.channelId()),
channel.policies(),
deriveFeeReport(channel.channelId()),
diff --git a/ui/src/integrationTest/java/de/cotto/lndmanagej/ui/SearchControllerIT.java b/ui/src/integrationTest/java/de/cotto/lndmanagej/ui/SearchControllerIT.java
index 8f4fd4e9..46854128 100644
--- a/ui/src/integrationTest/java/de/cotto/lndmanagej/ui/SearchControllerIT.java
+++ b/ui/src/integrationTest/java/de/cotto/lndmanagej/ui/SearchControllerIT.java
@@ -126,7 +126,9 @@ class SearchControllerIT extends BaseControllerIT {
channelDetails.remoteAlias(),
channelDetails.remotePubkey(),
channelDetails.policies(),
- channelDetails.balanceInformation());
+ channelDetails.balanceInformation(),
+ channelDetails.capacitySat()
+ );
}
public NodeDto nodeDto(OpenChannelDto channel) {
diff --git a/ui/src/main/java/de/cotto/lndmanagej/ui/UiDataServiceImpl.java b/ui/src/main/java/de/cotto/lndmanagej/ui/UiDataServiceImpl.java
index e9e78b79..e5749a34 100644
--- a/ui/src/main/java/de/cotto/lndmanagej/ui/UiDataServiceImpl.java
+++ b/ui/src/main/java/de/cotto/lndmanagej/ui/UiDataServiceImpl.java
@@ -65,11 +65,12 @@ public class UiDataServiceImpl extends UiDataService {
private OpenChannelDto toOpenChannelDto(ChannelId channelId) {
LocalChannel localChannel = channelService.getLocalChannel(channelId).orElseThrow();
- Pubkey remotePubkey = localChannel.getRemotePubkey();
- String alias = nodeController.getAlias(remotePubkey);
+ Pubkey pubkey = localChannel.getRemotePubkey();
+ long capacitySat = localChannel.getCapacity().satoshis();
+ String alias = nodeController.getAlias(pubkey);
PoliciesDto policies = channelController.getPolicies(channelId);
BalanceInformationDto balance = channelController.getBalance(channelId);
- return new OpenChannelDto(channelId, alias, remotePubkey, policies, balance);
+ return new OpenChannelDto(channelId, alias, pubkey, policies, balance, capacitySat);
}
@Override
@@ -81,6 +82,7 @@ public class UiDataServiceImpl extends UiDataService {
details.remoteAlias(),
details.openInitiator(),
details.balance(),
+ Long.parseLong(details.capacitySat()),
details.onChainCosts(),
details.policies(),
details.feeReport(),
diff --git a/ui/src/main/java/de/cotto/lndmanagej/ui/dto/ChannelDetailsDto.java b/ui/src/main/java/de/cotto/lndmanagej/ui/dto/ChannelDetailsDto.java
index b6ebae24..e64c6476 100644
--- a/ui/src/main/java/de/cotto/lndmanagej/ui/dto/ChannelDetailsDto.java
+++ b/ui/src/main/java/de/cotto/lndmanagej/ui/dto/ChannelDetailsDto.java
@@ -18,6 +18,7 @@ public record ChannelDetailsDto(
String remoteAlias,
OpenInitiator openInitiator,
BalanceInformationDto balanceInformation,
+ long capacitySat,
OnChainCostsDto onChainCosts,
PoliciesDto policies,
FeeReportDto feeReport,
diff --git a/ui/src/main/java/de/cotto/lndmanagej/ui/dto/OpenChannelDto.java b/ui/src/main/java/de/cotto/lndmanagej/ui/dto/OpenChannelDto.java
index 845a9bd2..beaaee2e 100644
--- a/ui/src/main/java/de/cotto/lndmanagej/ui/dto/OpenChannelDto.java
+++ b/ui/src/main/java/de/cotto/lndmanagej/ui/dto/OpenChannelDto.java
@@ -10,7 +10,8 @@ public record OpenChannelDto(
String remoteAlias,
Pubkey remotePubkey,
PoliciesDto policies,
- BalanceInformationDto balanceInformation
+ BalanceInformationDto balanceInformation,
+ long capacitySat
) {
public String getRatio() {
diff --git a/ui/src/main/resources/templates/fragments/channel-collections.html b/ui/src/main/resources/templates/fragments/channel-collections.html
index 14ec4416..6b7f9399 100644
--- a/ui/src/main/resources/templates/fragments/channel-collections.html
+++ b/ui/src/main/resources/templates/fragments/channel-collections.html
@@ -9,6 +9,7 @@
Inbound |
Ratio |
Outbound |
+ Capacity |
Base Fee (local) |
Fee Rate (local) |
Base Fee (remote) |
@@ -22,6 +23,7 @@
|
|
|
+ |
|
|
|
diff --git a/ui/src/test/java/de/cotto/lndmanagej/ui/UiDataServiceImplTest.java b/ui/src/test/java/de/cotto/lndmanagej/ui/UiDataServiceImplTest.java
index e4bd8eeb..a29d0661 100644
--- a/ui/src/test/java/de/cotto/lndmanagej/ui/UiDataServiceImplTest.java
+++ b/ui/src/test/java/de/cotto/lndmanagej/ui/UiDataServiceImplTest.java
@@ -29,6 +29,7 @@ import java.util.Optional;
import java.util.Set;
import static de.cotto.lndmanagej.controller.dto.NodeDetailsDtoFixture.NODE_DETAILS_DTO;
+import static de.cotto.lndmanagej.controller.dto.OpenChannelDtoFixture.CAPACITY_SAT;
import static de.cotto.lndmanagej.model.BalanceInformationFixtures.BALANCE_INFORMATION;
import static de.cotto.lndmanagej.model.ChannelDetailsFixtures.CHANNEL_DETAILS;
import static de.cotto.lndmanagej.model.ChannelIdFixtures.CHANNEL_ID;
@@ -90,7 +91,7 @@ class UiDataServiceImplTest {
when(statusController.getOpenChannels()).thenReturn(new ChannelsDto(List.of(CHANNEL_ID)));
assertThat(uiDataService.getOpenChannels()).containsExactly(
- new OpenChannelDto(CHANNEL_ID, alias, PUBKEY_2, policies, balance)
+ new OpenChannelDto(CHANNEL_ID, alias, PUBKEY_2, policies, balance, CAPACITY_SAT)
);
}
@@ -104,6 +105,7 @@ class UiDataServiceImplTest {
ALIAS,
LOCAL,
BalanceInformationDto.createFromModel(BALANCE_INFORMATION),
+ CAPACITY_SAT,
OnChainCostsDto.createFromModel(ON_CHAIN_COSTS),
PoliciesDto.createFromModel(POLICIES_FOR_LOCAL_CHANNEL),
FeeReportDto.createFromModel(FEE_REPORT),
diff --git a/ui/src/test/java/de/cotto/lndmanagej/ui/controller/DashboardControllerTest.java b/ui/src/test/java/de/cotto/lndmanagej/ui/controller/DashboardControllerTest.java
index 739c5b2a..54b99d3c 100644
--- a/ui/src/test/java/de/cotto/lndmanagej/ui/controller/DashboardControllerTest.java
+++ b/ui/src/test/java/de/cotto/lndmanagej/ui/controller/DashboardControllerTest.java
@@ -21,6 +21,7 @@ import org.springframework.ui.Model;
import java.util.List;
import java.util.Map;
+import static de.cotto.lndmanagej.controller.dto.OpenChannelDtoFixture.CAPACITY_SAT;
import static de.cotto.lndmanagej.controller.dto.OpenChannelDtoFixture.OPEN_CHANNEL_DTO;
import static de.cotto.lndmanagej.model.BalanceInformationFixtures.REMOTE_BALANCE;
import static de.cotto.lndmanagej.model.ChannelIdFixtures.CHANNEL_ID;
@@ -88,7 +89,8 @@ class DashboardControllerTest {
"Albert",
PUBKEY,
PoliciesDto.createFromModel(POLICIES_FOR_LOCAL_CHANNEL),
- BalanceInformationDto.createFromModel(balanceInformation)
+ BalanceInformationDto.createFromModel(balanceInformation),
+ CAPACITY_SAT
);
}
}
diff --git a/ui/src/test/java/de/cotto/lndmanagej/ui/dto/ChannelDetailsDtoTest.java b/ui/src/test/java/de/cotto/lndmanagej/ui/dto/ChannelDetailsDtoTest.java
index 0e049e29..69139f1c 100644
--- a/ui/src/test/java/de/cotto/lndmanagej/ui/dto/ChannelDetailsDtoTest.java
+++ b/ui/src/test/java/de/cotto/lndmanagej/ui/dto/ChannelDetailsDtoTest.java
@@ -49,6 +49,11 @@ class ChannelDetailsDtoTest {
.isEqualTo(BalanceInformationDto.createFromModel(BALANCE_INFORMATION));
}
+ @Test
+ void capacitySat() {
+ assertThat(CHANNEL_DETAILS_DTO.capacitySat()).isEqualTo(21_000_000);
+ }
+
@Test
void onChainCosts() {
assertThat(CHANNEL_DETAILS_DTO.onChainCosts()).isEqualTo(OnChainCostsDto.createFromModel(ON_CHAIN_COSTS));
diff --git a/ui/src/test/java/de/cotto/lndmanagej/ui/dto/OpenChannelDtoTest.java b/ui/src/test/java/de/cotto/lndmanagej/ui/dto/OpenChannelDtoTest.java
index 65403711..99fa817e 100644
--- a/ui/src/test/java/de/cotto/lndmanagej/ui/dto/OpenChannelDtoTest.java
+++ b/ui/src/test/java/de/cotto/lndmanagej/ui/dto/OpenChannelDtoTest.java
@@ -6,6 +6,7 @@ import de.cotto.lndmanagej.model.BalanceInformation;
import de.cotto.lndmanagej.model.Coins;
import org.junit.jupiter.api.Test;
+import static de.cotto.lndmanagej.controller.dto.OpenChannelDtoFixture.CAPACITY_SAT;
import static de.cotto.lndmanagej.controller.dto.OpenChannelDtoFixture.OPEN_CHANNEL_DTO;
import static de.cotto.lndmanagej.model.BalanceInformationFixtures.BALANCE_INFORMATION;
import static de.cotto.lndmanagej.model.ChannelIdFixtures.CHANNEL_ID;
@@ -34,6 +35,11 @@ class OpenChannelDtoTest {
assertThat(OPEN_CHANNEL_DTO.policies()).isEqualTo(PoliciesDto.createFromModel(POLICIES_FOR_LOCAL_CHANNEL));
}
+ @Test
+ void capacitySat() {
+ assertThat(OPEN_CHANNEL_DTO.capacitySat()).isEqualTo(21_000_000);
+ }
+
@Test
void balanceInformation() {
assertThat(OPEN_CHANNEL_DTO.balanceInformation())
@@ -62,7 +68,8 @@ class OpenChannelDtoTest {
"Albert",
PUBKEY,
PoliciesDto.createFromModel(POLICIES_FOR_LOCAL_CHANNEL),
- BalanceInformationDto.createFromModel(balanceInformation)
+ BalanceInformationDto.createFromModel(balanceInformation),
+ CAPACITY_SAT
);
}
}
diff --git a/ui/src/testFixtures/java/de/cotto/lndmanagej/controller/dto/ChannelDetailsDtoFixture.java b/ui/src/testFixtures/java/de/cotto/lndmanagej/controller/dto/ChannelDetailsDtoFixture.java
index 7c0e4ebc..1e8f7470 100644
--- a/ui/src/testFixtures/java/de/cotto/lndmanagej/controller/dto/ChannelDetailsDtoFixture.java
+++ b/ui/src/testFixtures/java/de/cotto/lndmanagej/controller/dto/ChannelDetailsDtoFixture.java
@@ -2,6 +2,7 @@ package de.cotto.lndmanagej.controller.dto;
import de.cotto.lndmanagej.ui.dto.ChannelDetailsDto;
+import static de.cotto.lndmanagej.controller.dto.OpenChannelDtoFixture.CAPACITY_SAT;
import static de.cotto.lndmanagej.model.BalanceInformationFixtures.BALANCE_INFORMATION;
import static de.cotto.lndmanagej.model.ChannelIdFixtures.CHANNEL_ID;
import static de.cotto.lndmanagej.model.FeeReportFixtures.FEE_REPORT;
@@ -21,6 +22,7 @@ public class ChannelDetailsDtoFixture {
"Albert",
LOCAL,
BalanceInformationDto.createFromModel(BALANCE_INFORMATION),
+ CAPACITY_SAT,
OnChainCostsDto.createFromModel(ON_CHAIN_COSTS),
PoliciesDto.createFromModel(POLICIES_FOR_LOCAL_CHANNEL),
FeeReportDto.createFromModel(FEE_REPORT),
diff --git a/ui/src/testFixtures/java/de/cotto/lndmanagej/controller/dto/OpenChannelDtoFixture.java b/ui/src/testFixtures/java/de/cotto/lndmanagej/controller/dto/OpenChannelDtoFixture.java
index 960ef997..c5aaa9a3 100644
--- a/ui/src/testFixtures/java/de/cotto/lndmanagej/controller/dto/OpenChannelDtoFixture.java
+++ b/ui/src/testFixtures/java/de/cotto/lndmanagej/controller/dto/OpenChannelDtoFixture.java
@@ -12,18 +12,22 @@ import static de.cotto.lndmanagej.model.PubkeyFixtures.PUBKEY_2;
public class OpenChannelDtoFixture {
+ public static final long CAPACITY_SAT = 21_000_000;
+
public static final OpenChannelDto OPEN_CHANNEL_DTO = new OpenChannelDto(
CHANNEL_ID,
"Albert",
PUBKEY,
PoliciesDto.createFromModel(POLICIES_FOR_LOCAL_CHANNEL),
- BalanceInformationDto.createFromModel(BALANCE_INFORMATION));
+ BalanceInformationDto.createFromModel(BALANCE_INFORMATION),
+ CAPACITY_SAT);
public static final OpenChannelDto OPEN_CHANNEL_DTO2 = new OpenChannelDto(
CHANNEL_ID_2,
"Albert II",
PUBKEY_2,
PoliciesDto.createFromModel(POLICIES_FOR_LOCAL_CHANNEL),
- BalanceInformationDto.createFromModel(BALANCE_INFORMATION_2));
+ BalanceInformationDto.createFromModel(BALANCE_INFORMATION_2),
+ CAPACITY_SAT);
}