package org.ethereum.validator;
import org.ethereum.core.BlockHeader;
import org.ethereum.util.ByteUtil;
import org.ethereum.util.FastByteComparisons;
import org.spongycastle.util.encoders.Hex;
/**
* Created by Stan Reshetnyk on 26.12.16.
*/
public class ExtraDataPresenceRule extends BlockHeaderRule {
public final byte[] data;
public final boolean required;
public ExtraDataPresenceRule(byte[] data, boolean required) {
this.data = data;
this.required = required;
}
@Override
public ValidationResult validate(BlockHeader header) {
final byte[] extraData = header.getExtraData() != null ? header.getExtraData() : ByteUtil.EMPTY_BYTE_ARRAY;
final boolean extraDataMatches = FastByteComparisons.equal(extraData, data);
if (required && !extraDataMatches) {
return fault("Block " + header.getNumber() + " is no-fork. Expected presence of: " +
Hex.toHexString(data) + ", in extra data: " + Hex.toHexString(extraData));
} else if (!required && extraDataMatches) {
return fault("Block " + header.getNumber() + " is pro-fork. Expected no: " +
Hex.toHexString(data) + ", in extra data: " + Hex.toHexString(extraData));
}
return Success;
}
}