class BeaconBlock implements Merkleizable, SimpleOffsetSerializable, SSZContainer {

  @Override
  public boolean equals(Object obj) {
    if (Objects.isNull(obj)) {
      return false;
    }

    if (this == obj) {
      return true;
    }

    if (!(obj instanceof BeaconBlock)) {
      return false;
    }

    BeaconBlock other = (BeaconBlock) obj;
    return Objects.equals(this.getSlot(), other.getSlot())
        && Objects.equals(this.getProposer_index(), other.getProposer_index())
        && Objects.equals(this.getParent_root(), other.getParent_root())
        && Objects.equals(this.getState_root(), other.getState_root())
        && Objects.equals(this.getBody(), other.getBody());
  }

  public  BeaconBlock(
      UInt64 slot,
      UInt64 proposer_index,
      Bytes32 parent_root,
      Bytes32 state_root,
      BeaconBlockBody body);
  public  BeaconBlock(BeaconBlock block, Bytes32 stateRoot);
  public  BeaconBlock();
  public  BeaconBlock(Bytes32 state_root);

}