fix fee computation

- compute fees per hop
- fees for first hop are not paid
- show fees for first hop
This commit is contained in:
Carsten Otto
2022-04-22 23:07:29 +02:00
parent 3ee45fdd38
commit e5949c9d5f
15 changed files with 350 additions and 93 deletions

View File

@@ -5,22 +5,48 @@ import org.junit.jupiter.api.Test;
import java.util.List;
import static de.cotto.lndmanagej.model.ChannelIdFixtures.CHANNEL_ID;
import static de.cotto.lndmanagej.model.ChannelIdFixtures.CHANNEL_ID_2;
import static de.cotto.lndmanagej.model.ChannelIdFixtures.CHANNEL_ID_3;
import static de.cotto.lndmanagej.model.ChannelIdFixtures.CHANNEL_ID_5;
import static de.cotto.lndmanagej.pickhardtpayments.model.MultiPathPaymentFixtures.MULTI_PATH_PAYMENT;
import static de.cotto.lndmanagej.pickhardtpayments.model.RouteFixtures.ROUTE;
import static de.cotto.lndmanagej.pickhardtpayments.model.RouteFixtures.ROUTE_2;
import static org.assertj.core.api.Assertions.assertThat;
class MultiPathPaymentDtoTest {
@Test
void fromModel() {
double probability = 0.999_995_238_095_464_9;
String amountSat = "100";
String feesMilliSat = "20";
double probability = 0.999_966_667_099_090_3;
String amountSat1 = "100";
String amountSat2 = "200";
String amountSatSum = "300";
String feesMilliSat = "40";
RouteDto route1 = new RouteDto(
amountSat1,
List.of(CHANNEL_ID, CHANNEL_ID_3, CHANNEL_ID_5),
0.999_985_714_354_421_7,
feesMilliSat,
"60",
ROUTE.getFeeRate(),
ROUTE.getFeeRateWithFirstHop()
);
RouteDto route2 = new RouteDto(
amountSat2,
List.of(CHANNEL_ID_2, CHANNEL_ID_3),
0.999_980_952_472_562_4,
feesMilliSat,
"80",
ROUTE_2.getFeeRate(),
ROUTE_2.getFeeRateWithFirstHop()
);
assertThat(MultiPathPaymentDto.fromModel(MULTI_PATH_PAYMENT)).isEqualTo(new MultiPathPaymentDto(
amountSat,
amountSatSum,
probability,
String.valueOf(MULTI_PATH_PAYMENT.fees().milliSatoshis()),
String.valueOf(MULTI_PATH_PAYMENT.feesWithFirstHop().milliSatoshis()),
MULTI_PATH_PAYMENT.getFeeRate(),
List.of(new RouteDto(amountSat, List.of(CHANNEL_ID), probability, feesMilliSat, ROUTE.getFeeRate())))
MULTI_PATH_PAYMENT.getFeeRateWithFirstHop(),
List.of(route1, route2))
);
}
}

View File

@@ -5,6 +5,8 @@ import org.junit.jupiter.api.Test;
import java.util.List;
import static de.cotto.lndmanagej.model.ChannelIdFixtures.CHANNEL_ID;
import static de.cotto.lndmanagej.model.ChannelIdFixtures.CHANNEL_ID_3;
import static de.cotto.lndmanagej.model.ChannelIdFixtures.CHANNEL_ID_5;
import static de.cotto.lndmanagej.pickhardtpayments.model.RouteFixtures.ROUTE;
import static org.assertj.core.api.Assertions.assertThat;
@@ -13,10 +15,12 @@ class RouteDtoTest {
void fromModel() {
RouteDto expected = new RouteDto(
"100",
List.of(CHANNEL_ID),
List.of(CHANNEL_ID, CHANNEL_ID_3, CHANNEL_ID_5),
ROUTE.getProbability(),
String.valueOf(ROUTE.fees().milliSatoshis()),
ROUTE.getFeeRate()
String.valueOf(ROUTE.feesWithFirstHop().milliSatoshis()),
ROUTE.getFeeRate(),
ROUTE.getFeeRateWithFirstHop()
);
assertThat(RouteDto.fromModel(ROUTE))
.isEqualTo(expected);