FeeFilterMessage: disallow negative fee rate

Fee rates are signed "int64_t", according to BIP-133. The spec doesn't
mention, but it goes without saying that negative fee rates make no
sense.
This commit is contained in:
Andreas Schildbach 2023-03-24 00:50:32 +01:00
parent 31d98af8f6
commit 48f4d143f3

View file

@ -24,6 +24,8 @@ import java.io.OutputStream;
import java.math.BigInteger; import java.math.BigInteger;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
import static org.bitcoinj.base.internal.Preconditions.check;
/** /**
* <p>Represents an "feefilter" message on the P2P network, which instructs a peer to filter transaction invs for * <p>Represents an "feefilter" message on the P2P network, which instructs a peer to filter transaction invs for
* transactions that fall below the feerate provided.</p> * transactions that fall below the feerate provided.</p>
@ -42,12 +44,13 @@ public class FeeFilterMessage extends Message {
@Override @Override
protected void bitcoinSerializeToStream(OutputStream stream) throws IOException { protected void bitcoinSerializeToStream(OutputStream stream) throws IOException {
super.bitcoinSerializeToStream(stream); super.bitcoinSerializeToStream(stream);
ByteUtils.writeUint64LE(BigInteger.valueOf(feeRate.value), stream); ByteUtils.writeInt64LE(feeRate.value, stream);
} }
@Override @Override
protected void parse() throws ProtocolException { protected void parse() throws ProtocolException {
feeRate = Coin.ofSat(readUint64().longValue()); feeRate = Coin.ofSat(readInt64());
check(feeRate.signum() >= 0, () -> new ProtocolException("fee rate out of range: " + feeRate));
} }
public Coin getFeeRate() { public Coin getFeeRate() {