diff --git a/core/src/main/java/org/bitcoinj/core/Coin.java b/core/src/main/java/org/bitcoinj/core/Coin.java index 2d3a50b8..4d8728a9 100644 --- a/core/src/main/java/org/bitcoinj/core/Coin.java +++ b/core/src/main/java/org/bitcoinj/core/Coin.java @@ -82,9 +82,11 @@ public final class Coin implements Monetary, Comparable, Serializable { */ public final long value; + private final long MAX_SATOSHIS = COIN_VALUE * NetworkParameters.MAX_COINS; + private Coin(final long satoshis) { - checkArgument(Math.abs(satoshis) <= COIN_VALUE * NetworkParameters.MAX_COINS, - "%s satoshis exceeds maximum possible quantity of Bitcoin.", satoshis); + checkArgument(-MAX_SATOSHIS <= satoshis && satoshis <= MAX_SATOSHIS, + "%s satoshis exceeds maximum possible quantity of Bitcoin.", satoshis); this.value = satoshis; } diff --git a/core/src/test/java/org/bitcoinj/core/CoinTest.java b/core/src/test/java/org/bitcoinj/core/CoinTest.java index 80446477..362a8df0 100644 --- a/core/src/test/java/org/bitcoinj/core/CoinTest.java +++ b/core/src/test/java/org/bitcoinj/core/CoinTest.java @@ -62,6 +62,11 @@ public class CoinTest { } catch (IllegalArgumentException e) { } + try { + valueOf(Long.MIN_VALUE); + fail(); + } catch (IllegalArgumentException e) {} + try { valueOf(1, -1); fail();