Signed-off-by: HenrikJannsen <boilingfrog@gmx.com>
This commit is contained in:
HenrikJannsen 2022-12-18 12:57:15 -05:00 committed by Christoph Atteneder
parent bd85958c9e
commit 0b849800f9
No known key found for this signature in database
GPG key ID: CD5DC1C529CDFD3B
2 changed files with 30 additions and 27 deletions

View file

@ -50,7 +50,7 @@ import static com.google.common.base.Preconditions.checkArgument;
@Singleton @Singleton
public class DelayedPayoutTxReceiverService implements DaoStateListener { public class DelayedPayoutTxReceiverService implements DaoStateListener {
// We don't allow to get further back than 767950 (the block height from Dec. 18th 2022). // We don't allow to get further back than 767950 (the block height from Dec. 18th 2022).
static final int MIN_SNAPSHOT_HEIGHT = Config.baseCurrencyNetwork().isRegtest() ? 111 : 767950; static final int MIN_SNAPSHOT_HEIGHT = Config.baseCurrencyNetwork().isRegtest() ? 0 : 767950;
// One part of the limit for the min. amount to be included in the DPT outputs. // One part of the limit for the min. amount to be included in the DPT outputs.
// The miner fee rate multiplied by 2 times the output size is the other factor. // The miner fee rate multiplied by 2 times the output size is the other factor.
@ -185,15 +185,18 @@ public class DelayedPayoutTxReceiverService implements DaoStateListener {
return inputAmount - minerFee; return inputAmount - minerFee;
} }
private static int getSnapshotHeight(int genesisHeight, int height, int grid) {
return getSnapshotHeight(genesisHeight, height, grid, MIN_SNAPSHOT_HEIGHT);
}
// Borrowed from DaoStateSnapshotService. We prefer to not reuse to avoid dependency to an unrelated domain. // Borrowed from DaoStateSnapshotService. We prefer to not reuse to avoid dependency to an unrelated domain.
@VisibleForTesting @VisibleForTesting
static int getSnapshotHeight(int genesisHeight, int height, int grid) { static int getSnapshotHeight(int genesisHeight, int height, int grid, int minSnapshotHeight) {
int minSnapshotHeight = genesisHeight + 3 * grid; if (height > (genesisHeight + 3 * grid)) {
if (height > minSnapshotHeight) {
int ratio = (int) Math.round(height / (double) grid); int ratio = (int) Math.round(height / (double) grid);
return Math.max(MIN_SNAPSHOT_HEIGHT, ratio * grid - grid); return Math.max(minSnapshotHeight, ratio * grid - grid);
} else { } else {
return Math.max(MIN_SNAPSHOT_HEIGHT, genesisHeight); return Math.max(minSnapshotHeight, genesisHeight);
} }
} }
} }

View file

@ -30,31 +30,31 @@ public class DelayedPayoutTxReceiverServiceTest {
@Test @Test
public void testGetSnapshotHeight() { public void testGetSnapshotHeight() {
// up to genesis + 3* grid we use genesis // up to genesis + 3* grid we use genesis
assertEquals(102, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 0, 10)); assertEquals(102, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 0, 10, 0));
assertEquals(102, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 100, 10)); assertEquals(102, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 100, 10, 0));
assertEquals(102, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 102, 10)); assertEquals(102, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 102, 10, 0));
assertEquals(102, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 119, 10)); assertEquals(102, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 119, 10, 0));
assertEquals(102, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 120, 10)); assertEquals(102, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 120, 10, 0));
assertEquals(102, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 121, 10)); assertEquals(102, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 121, 10, 0));
assertEquals(102, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 130, 10)); assertEquals(102, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 130, 10, 0));
assertEquals(102, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 131, 10)); assertEquals(102, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 131, 10, 0));
assertEquals(102, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 132, 10)); assertEquals(102, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 132, 10, 0));
assertEquals(120, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 133, 10)); assertEquals(120, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 133, 10, 0));
assertEquals(120, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 134, 10)); assertEquals(120, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 134, 10, 0));
assertEquals(130, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 135, 10)); assertEquals(130, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 135, 10, 0));
assertEquals(130, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 136, 10)); assertEquals(130, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 136, 10, 0));
assertEquals(130, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 139, 10)); assertEquals(130, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 139, 10, 0));
assertEquals(130, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 140, 10)); assertEquals(130, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 140, 10, 0));
assertEquals(130, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 141, 10)); assertEquals(130, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 141, 10, 0));
assertEquals(140, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 149, 10)); assertEquals(140, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 149, 10, 0));
assertEquals(140, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 150, 10)); assertEquals(140, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 150, 10, 0));
assertEquals(140, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 151, 10)); assertEquals(140, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 151, 10, 0));
assertEquals(150, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 159, 10)); assertEquals(150, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 159, 10, 0));
assertEquals(990, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 1000, 10)); assertEquals(990, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 1000, 10, 0));
} }
} }