// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: compact_formats.proto

package cash.z.wallet.sdk.rpc;

public final class CompactFormats {
  private CompactFormats() {}
  public static void registerAllExtensions(
      com.google.protobuf.ExtensionRegistryLite registry) {
  }

  public static void registerAllExtensions(
      com.google.protobuf.ExtensionRegistry registry) {
    registerAllExtensions(
        (com.google.protobuf.ExtensionRegistryLite) registry);
  }
  public interface CompactBlockOrBuilder extends
      // @@protoc_insertion_point(interface_extends:cash.z.wallet.sdk.rpc.CompactBlock)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * the version of this wire format, for storage
     * </pre>
     *
     * <code>uint32 protoVersion = 1;</code>
     * @return The protoVersion.
     */
    int getProtoVersion();

    /**
     * <pre>
     * the height of this block
     * </pre>
     *
     * <code>uint64 height = 2;</code>
     * @return The height.
     */
    long getHeight();

    /**
     * <pre>
     * the ID (hash) of this block, same as in block explorers
     * </pre>
     *
     * <code>bytes hash = 3;</code>
     * @return The hash.
     */
    com.google.protobuf.ByteString getHash();

    /**
     * <pre>
     * the ID (hash) of this block's predecessor
     * </pre>
     *
     * <code>bytes prevHash = 4;</code>
     * @return The prevHash.
     */
    com.google.protobuf.ByteString getPrevHash();

    /**
     * <pre>
     * Unix epoch time when the block was mined
     * </pre>
     *
     * <code>uint32 time = 5;</code>
     * @return The time.
     */
    int getTime();

    /**
     * <pre>
     * (hash, prevHash, and time) OR (full header)
     * </pre>
     *
     * <code>bytes header = 6;</code>
     * @return The header.
     */
    com.google.protobuf.ByteString getHeader();

    /**
     * <pre>
     * zero or more compact transactions from this block
     * </pre>
     *
     * <code>repeated .cash.z.wallet.sdk.rpc.CompactTx vtx = 7;</code>
     */
    java.util.List<cash.z.wallet.sdk.rpc.CompactFormats.CompactTx> 
        getVtxList();
    /**
     * <pre>
     * zero or more compact transactions from this block
     * </pre>
     *
     * <code>repeated .cash.z.wallet.sdk.rpc.CompactTx vtx = 7;</code>
     */
    cash.z.wallet.sdk.rpc.CompactFormats.CompactTx getVtx(int index);
    /**
     * <pre>
     * zero or more compact transactions from this block
     * </pre>
     *
     * <code>repeated .cash.z.wallet.sdk.rpc.CompactTx vtx = 7;</code>
     */
    int getVtxCount();
    /**
     * <pre>
     * zero or more compact transactions from this block
     * </pre>
     *
     * <code>repeated .cash.z.wallet.sdk.rpc.CompactTx vtx = 7;</code>
     */
    java.util.List<? extends cash.z.wallet.sdk.rpc.CompactFormats.CompactTxOrBuilder> 
        getVtxOrBuilderList();
    /**
     * <pre>
     * zero or more compact transactions from this block
     * </pre>
     *
     * <code>repeated .cash.z.wallet.sdk.rpc.CompactTx vtx = 7;</code>
     */
    cash.z.wallet.sdk.rpc.CompactFormats.CompactTxOrBuilder getVtxOrBuilder(
        int index);
  }
  /**
   * <pre>
   * CompactBlock is a packaging of ONLY the data from a block that's needed to:
   *   1. Detect a payment to your shielded Sapling address
   *   2. Detect a spend of your shielded Sapling notes
   *   3. Update your witnesses to generate new Sapling spend proofs.
   * </pre>
   *
   * Protobuf type {@code cash.z.wallet.sdk.rpc.CompactBlock}
   */
  public static final class CompactBlock extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:cash.z.wallet.sdk.rpc.CompactBlock)
      CompactBlockOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use CompactBlock.newBuilder() to construct.
    private CompactBlock(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private CompactBlock() {
      hash_ = com.google.protobuf.ByteString.EMPTY;
      prevHash_ = com.google.protobuf.ByteString.EMPTY;
      header_ = com.google.protobuf.ByteString.EMPTY;
      vtx_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new CompactBlock();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private CompactBlock(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 8: {

              protoVersion_ = input.readUInt32();
              break;
            }
            case 16: {

              height_ = input.readUInt64();
              break;
            }
            case 26: {

              hash_ = input.readBytes();
              break;
            }
            case 34: {

              prevHash_ = input.readBytes();
              break;
            }
            case 40: {

              time_ = input.readUInt32();
              break;
            }
            case 50: {

              header_ = input.readBytes();
              break;
            }
            case 58: {
              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
                vtx_ = new java.util.ArrayList<cash.z.wallet.sdk.rpc.CompactFormats.CompactTx>();
                mutable_bitField0_ |= 0x00000001;
              }
              vtx_.add(
                  input.readMessage(cash.z.wallet.sdk.rpc.CompactFormats.CompactTx.parser(), extensionRegistry));
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (com.google.protobuf.UninitializedMessageException e) {
        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000001) != 0)) {
          vtx_ = java.util.Collections.unmodifiableList(vtx_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return cash.z.wallet.sdk.rpc.CompactFormats.internal_static_cash_z_wallet_sdk_rpc_CompactBlock_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return cash.z.wallet.sdk.rpc.CompactFormats.internal_static_cash_z_wallet_sdk_rpc_CompactBlock_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              cash.z.wallet.sdk.rpc.CompactFormats.CompactBlock.class, cash.z.wallet.sdk.rpc.CompactFormats.CompactBlock.Builder.class);
    }

    public static final int PROTOVERSION_FIELD_NUMBER = 1;
    private int protoVersion_;
    /**
     * <pre>
     * the version of this wire format, for storage
     * </pre>
     *
     * <code>uint32 protoVersion = 1;</code>
     * @return The protoVersion.
     */
    @java.lang.Override
    public int getProtoVersion() {
      return protoVersion_;
    }

    public static final int HEIGHT_FIELD_NUMBER = 2;
    private long height_;
    /**
     * <pre>
     * the height of this block
     * </pre>
     *
     * <code>uint64 height = 2;</code>
     * @return The height.
     */
    @java.lang.Override
    public long getHeight() {
      return height_;
    }

    public static final int HASH_FIELD_NUMBER = 3;
    private com.google.protobuf.ByteString hash_;
    /**
     * <pre>
     * the ID (hash) of this block, same as in block explorers
     * </pre>
     *
     * <code>bytes hash = 3;</code>
     * @return The hash.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString getHash() {
      return hash_;
    }

    public static final int PREVHASH_FIELD_NUMBER = 4;
    private com.google.protobuf.ByteString prevHash_;
    /**
     * <pre>
     * the ID (hash) of this block's predecessor
     * </pre>
     *
     * <code>bytes prevHash = 4;</code>
     * @return The prevHash.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString getPrevHash() {
      return prevHash_;
    }

    public static final int TIME_FIELD_NUMBER = 5;
    private int time_;
    /**
     * <pre>
     * Unix epoch time when the block was mined
     * </pre>
     *
     * <code>uint32 time = 5;</code>
     * @return The time.
     */
    @java.lang.Override
    public int getTime() {
      return time_;
    }

    public static final int HEADER_FIELD_NUMBER = 6;
    private com.google.protobuf.ByteString header_;
    /**
     * <pre>
     * (hash, prevHash, and time) OR (full header)
     * </pre>
     *
     * <code>bytes header = 6;</code>
     * @return The header.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString getHeader() {
      return header_;
    }

    public static final int VTX_FIELD_NUMBER = 7;
    private java.util.List<cash.z.wallet.sdk.rpc.CompactFormats.CompactTx> vtx_;
    /**
     * <pre>
     * zero or more compact transactions from this block
     * </pre>
     *
     * <code>repeated .cash.z.wallet.sdk.rpc.CompactTx vtx = 7;</code>
     */
    @java.lang.Override
    public java.util.List<cash.z.wallet.sdk.rpc.CompactFormats.CompactTx> getVtxList() {
      return vtx_;
    }
    /**
     * <pre>
     * zero or more compact transactions from this block
     * </pre>
     *
     * <code>repeated .cash.z.wallet.sdk.rpc.CompactTx vtx = 7;</code>
     */
    @java.lang.Override
    public java.util.List<? extends cash.z.wallet.sdk.rpc.CompactFormats.CompactTxOrBuilder> 
        getVtxOrBuilderList() {
      return vtx_;
    }
    /**
     * <pre>
     * zero or more compact transactions from this block
     * </pre>
     *
     * <code>repeated .cash.z.wallet.sdk.rpc.CompactTx vtx = 7;</code>
     */
    @java.lang.Override
    public int getVtxCount() {
      return vtx_.size();
    }
    /**
     * <pre>
     * zero or more compact transactions from this block
     * </pre>
     *
     * <code>repeated .cash.z.wallet.sdk.rpc.CompactTx vtx = 7;</code>
     */
    @java.lang.Override
    public cash.z.wallet.sdk.rpc.CompactFormats.CompactTx getVtx(int index) {
      return vtx_.get(index);
    }
    /**
     * <pre>
     * zero or more compact transactions from this block
     * </pre>
     *
     * <code>repeated .cash.z.wallet.sdk.rpc.CompactTx vtx = 7;</code>
     */
    @java.lang.Override
    public cash.z.wallet.sdk.rpc.CompactFormats.CompactTxOrBuilder getVtxOrBuilder(
        int index) {
      return vtx_.get(index);
    }

    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (protoVersion_ != 0) {
        output.writeUInt32(1, protoVersion_);
      }
      if (height_ != 0L) {
        output.writeUInt64(2, height_);
      }
      if (!hash_.isEmpty()) {
        output.writeBytes(3, hash_);
      }
      if (!prevHash_.isEmpty()) {
        output.writeBytes(4, prevHash_);
      }
      if (time_ != 0) {
        output.writeUInt32(5, time_);
      }
      if (!header_.isEmpty()) {
        output.writeBytes(6, header_);
      }
      for (int i = 0; i < vtx_.size(); i++) {
        output.writeMessage(7, vtx_.get(i));
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (protoVersion_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(1, protoVersion_);
      }
      if (height_ != 0L) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(2, height_);
      }
      if (!hash_.isEmpty()) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(3, hash_);
      }
      if (!prevHash_.isEmpty()) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(4, prevHash_);
      }
      if (time_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(5, time_);
      }
      if (!header_.isEmpty()) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(6, header_);
      }
      for (int i = 0; i < vtx_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(7, vtx_.get(i));
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof cash.z.wallet.sdk.rpc.CompactFormats.CompactBlock)) {
        return super.equals(obj);
      }
      cash.z.wallet.sdk.rpc.CompactFormats.CompactBlock other = (cash.z.wallet.sdk.rpc.CompactFormats.CompactBlock) obj;

      if (getProtoVersion()
          != other.getProtoVersion()) return false;
      if (getHeight()
          != other.getHeight()) return false;
      if (!getHash()
          .equals(other.getHash())) return false;
      if (!getPrevHash()
          .equals(other.getPrevHash())) return false;
      if (getTime()
          != other.getTime()) return false;
      if (!getHeader()
          .equals(other.getHeader())) return false;
      if (!getVtxList()
          .equals(other.getVtxList())) return false;
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + PROTOVERSION_FIELD_NUMBER;
      hash = (53 * hash) + getProtoVersion();
      hash = (37 * hash) + HEIGHT_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getHeight());
      hash = (37 * hash) + HASH_FIELD_NUMBER;
      hash = (53 * hash) + getHash().hashCode();
      hash = (37 * hash) + PREVHASH_FIELD_NUMBER;
      hash = (53 * hash) + getPrevHash().hashCode();
      hash = (37 * hash) + TIME_FIELD_NUMBER;
      hash = (53 * hash) + getTime();
      hash = (37 * hash) + HEADER_FIELD_NUMBER;
      hash = (53 * hash) + getHeader().hashCode();
      if (getVtxCount() > 0) {
        hash = (37 * hash) + VTX_FIELD_NUMBER;
        hash = (53 * hash) + getVtxList().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static cash.z.wallet.sdk.rpc.CompactFormats.CompactBlock parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cash.z.wallet.sdk.rpc.CompactFormats.CompactBlock parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cash.z.wallet.sdk.rpc.CompactFormats.CompactBlock parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cash.z.wallet.sdk.rpc.CompactFormats.CompactBlock parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cash.z.wallet.sdk.rpc.CompactFormats.CompactBlock parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cash.z.wallet.sdk.rpc.CompactFormats.CompactBlock parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cash.z.wallet.sdk.rpc.CompactFormats.CompactBlock parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static cash.z.wallet.sdk.rpc.CompactFormats.CompactBlock parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static cash.z.wallet.sdk.rpc.CompactFormats.CompactBlock parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static cash.z.wallet.sdk.rpc.CompactFormats.CompactBlock parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static cash.z.wallet.sdk.rpc.CompactFormats.CompactBlock parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static cash.z.wallet.sdk.rpc.CompactFormats.CompactBlock parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(cash.z.wallet.sdk.rpc.CompactFormats.CompactBlock prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * <pre>
     * CompactBlock is a packaging of ONLY the data from a block that's needed to:
     *   1. Detect a payment to your shielded Sapling address
     *   2. Detect a spend of your shielded Sapling notes
     *   3. Update your witnesses to generate new Sapling spend proofs.
     * </pre>
     *
     * Protobuf type {@code cash.z.wallet.sdk.rpc.CompactBlock}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:cash.z.wallet.sdk.rpc.CompactBlock)
        cash.z.wallet.sdk.rpc.CompactFormats.CompactBlockOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return cash.z.wallet.sdk.rpc.CompactFormats.internal_static_cash_z_wallet_sdk_rpc_CompactBlock_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return cash.z.wallet.sdk.rpc.CompactFormats.internal_static_cash_z_wallet_sdk_rpc_CompactBlock_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                cash.z.wallet.sdk.rpc.CompactFormats.CompactBlock.class, cash.z.wallet.sdk.rpc.CompactFormats.CompactBlock.Builder.class);
      }

      // Construct using cash.z.wallet.sdk.rpc.CompactFormats.CompactBlock.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getVtxFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        protoVersion_ = 0;

        height_ = 0L;

        hash_ = com.google.protobuf.ByteString.EMPTY;

        prevHash_ = com.google.protobuf.ByteString.EMPTY;

        time_ = 0;

        header_ = com.google.protobuf.ByteString.EMPTY;

        if (vtxBuilder_ == null) {
          vtx_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
        } else {
          vtxBuilder_.clear();
        }
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return cash.z.wallet.sdk.rpc.CompactFormats.internal_static_cash_z_wallet_sdk_rpc_CompactBlock_descriptor;
      }

      @java.lang.Override
      public cash.z.wallet.sdk.rpc.CompactFormats.CompactBlock getDefaultInstanceForType() {
        return cash.z.wallet.sdk.rpc.CompactFormats.CompactBlock.getDefaultInstance();
      }

      @java.lang.Override
      public cash.z.wallet.sdk.rpc.CompactFormats.CompactBlock build() {
        cash.z.wallet.sdk.rpc.CompactFormats.CompactBlock result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public cash.z.wallet.sdk.rpc.CompactFormats.CompactBlock buildPartial() {
        cash.z.wallet.sdk.rpc.CompactFormats.CompactBlock result = new cash.z.wallet.sdk.rpc.CompactFormats.CompactBlock(this);
        int from_bitField0_ = bitField0_;
        result.protoVersion_ = protoVersion_;
        result.height_ = height_;
        result.hash_ = hash_;
        result.prevHash_ = prevHash_;
        result.time_ = time_;
        result.header_ = header_;
        if (vtxBuilder_ == null) {
          if (((bitField0_ & 0x00000001) != 0)) {
            vtx_ = java.util.Collections.unmodifiableList(vtx_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.vtx_ = vtx_;
        } else {
          result.vtx_ = vtxBuilder_.build();
        }
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof cash.z.wallet.sdk.rpc.CompactFormats.CompactBlock) {
          return mergeFrom((cash.z.wallet.sdk.rpc.CompactFormats.CompactBlock)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(cash.z.wallet.sdk.rpc.CompactFormats.CompactBlock other) {
        if (other == cash.z.wallet.sdk.rpc.CompactFormats.CompactBlock.getDefaultInstance()) return this;
        if (other.getProtoVersion() != 0) {
          setProtoVersion(other.getProtoVersion());
        }
        if (other.getHeight() != 0L) {
          setHeight(other.getHeight());
        }
        if (other.getHash() != com.google.protobuf.ByteString.EMPTY) {
          setHash(other.getHash());
        }
        if (other.getPrevHash() != com.google.protobuf.ByteString.EMPTY) {
          setPrevHash(other.getPrevHash());
        }
        if (other.getTime() != 0) {
          setTime(other.getTime());
        }
        if (other.getHeader() != com.google.protobuf.ByteString.EMPTY) {
          setHeader(other.getHeader());
        }
        if (vtxBuilder_ == null) {
          if (!other.vtx_.isEmpty()) {
            if (vtx_.isEmpty()) {
              vtx_ = other.vtx_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureVtxIsMutable();
              vtx_.addAll(other.vtx_);
            }
            onChanged();
          }
        } else {
          if (!other.vtx_.isEmpty()) {
            if (vtxBuilder_.isEmpty()) {
              vtxBuilder_.dispose();
              vtxBuilder_ = null;
              vtx_ = other.vtx_;
              bitField0_ = (bitField0_ & ~0x00000001);
              vtxBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getVtxFieldBuilder() : null;
            } else {
              vtxBuilder_.addAllMessages(other.vtx_);
            }
          }
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        cash.z.wallet.sdk.rpc.CompactFormats.CompactBlock parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (cash.z.wallet.sdk.rpc.CompactFormats.CompactBlock) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private int protoVersion_ ;
      /**
       * <pre>
       * the version of this wire format, for storage
       * </pre>
       *
       * <code>uint32 protoVersion = 1;</code>
       * @return The protoVersion.
       */
      @java.lang.Override
      public int getProtoVersion() {
        return protoVersion_;
      }
      /**
       * <pre>
       * the version of this wire format, for storage
       * </pre>
       *
       * <code>uint32 protoVersion = 1;</code>
       * @param value The protoVersion to set.
       * @return This builder for chaining.
       */
      public Builder setProtoVersion(int value) {
        
        protoVersion_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * the version of this wire format, for storage
       * </pre>
       *
       * <code>uint32 protoVersion = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearProtoVersion() {
        
        protoVersion_ = 0;
        onChanged();
        return this;
      }

      private long height_ ;
      /**
       * <pre>
       * the height of this block
       * </pre>
       *
       * <code>uint64 height = 2;</code>
       * @return The height.
       */
      @java.lang.Override
      public long getHeight() {
        return height_;
      }
      /**
       * <pre>
       * the height of this block
       * </pre>
       *
       * <code>uint64 height = 2;</code>
       * @param value The height to set.
       * @return This builder for chaining.
       */
      public Builder setHeight(long value) {
        
        height_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * the height of this block
       * </pre>
       *
       * <code>uint64 height = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearHeight() {
        
        height_ = 0L;
        onChanged();
        return this;
      }

      private com.google.protobuf.ByteString hash_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <pre>
       * the ID (hash) of this block, same as in block explorers
       * </pre>
       *
       * <code>bytes hash = 3;</code>
       * @return The hash.
       */
      @java.lang.Override
      public com.google.protobuf.ByteString getHash() {
        return hash_;
      }
      /**
       * <pre>
       * the ID (hash) of this block, same as in block explorers
       * </pre>
       *
       * <code>bytes hash = 3;</code>
       * @param value The hash to set.
       * @return This builder for chaining.
       */
      public Builder setHash(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        hash_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * the ID (hash) of this block, same as in block explorers
       * </pre>
       *
       * <code>bytes hash = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearHash() {
        
        hash_ = getDefaultInstance().getHash();
        onChanged();
        return this;
      }

      private com.google.protobuf.ByteString prevHash_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <pre>
       * the ID (hash) of this block's predecessor
       * </pre>
       *
       * <code>bytes prevHash = 4;</code>
       * @return The prevHash.
       */
      @java.lang.Override
      public com.google.protobuf.ByteString getPrevHash() {
        return prevHash_;
      }
      /**
       * <pre>
       * the ID (hash) of this block's predecessor
       * </pre>
       *
       * <code>bytes prevHash = 4;</code>
       * @param value The prevHash to set.
       * @return This builder for chaining.
       */
      public Builder setPrevHash(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        prevHash_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * the ID (hash) of this block's predecessor
       * </pre>
       *
       * <code>bytes prevHash = 4;</code>
       * @return This builder for chaining.
       */
      public Builder clearPrevHash() {
        
        prevHash_ = getDefaultInstance().getPrevHash();
        onChanged();
        return this;
      }

      private int time_ ;
      /**
       * <pre>
       * Unix epoch time when the block was mined
       * </pre>
       *
       * <code>uint32 time = 5;</code>
       * @return The time.
       */
      @java.lang.Override
      public int getTime() {
        return time_;
      }
      /**
       * <pre>
       * Unix epoch time when the block was mined
       * </pre>
       *
       * <code>uint32 time = 5;</code>
       * @param value The time to set.
       * @return This builder for chaining.
       */
      public Builder setTime(int value) {
        
        time_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Unix epoch time when the block was mined
       * </pre>
       *
       * <code>uint32 time = 5;</code>
       * @return This builder for chaining.
       */
      public Builder clearTime() {
        
        time_ = 0;
        onChanged();
        return this;
      }

      private com.google.protobuf.ByteString header_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <pre>
       * (hash, prevHash, and time) OR (full header)
       * </pre>
       *
       * <code>bytes header = 6;</code>
       * @return The header.
       */
      @java.lang.Override
      public com.google.protobuf.ByteString getHeader() {
        return header_;
      }
      /**
       * <pre>
       * (hash, prevHash, and time) OR (full header)
       * </pre>
       *
       * <code>bytes header = 6;</code>
       * @param value The header to set.
       * @return This builder for chaining.
       */
      public Builder setHeader(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        header_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * (hash, prevHash, and time) OR (full header)
       * </pre>
       *
       * <code>bytes header = 6;</code>
       * @return This builder for chaining.
       */
      public Builder clearHeader() {
        
        header_ = getDefaultInstance().getHeader();
        onChanged();
        return this;
      }

      private java.util.List<cash.z.wallet.sdk.rpc.CompactFormats.CompactTx> vtx_ =
        java.util.Collections.emptyList();
      private void ensureVtxIsMutable() {
        if (!((bitField0_ & 0x00000001) != 0)) {
          vtx_ = new java.util.ArrayList<cash.z.wallet.sdk.rpc.CompactFormats.CompactTx>(vtx_);
          bitField0_ |= 0x00000001;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          cash.z.wallet.sdk.rpc.CompactFormats.CompactTx, cash.z.wallet.sdk.rpc.CompactFormats.CompactTx.Builder, cash.z.wallet.sdk.rpc.CompactFormats.CompactTxOrBuilder> vtxBuilder_;

      /**
       * <pre>
       * zero or more compact transactions from this block
       * </pre>
       *
       * <code>repeated .cash.z.wallet.sdk.rpc.CompactTx vtx = 7;</code>
       */
      public java.util.List<cash.z.wallet.sdk.rpc.CompactFormats.CompactTx> getVtxList() {
        if (vtxBuilder_ == null) {
          return java.util.Collections.unmodifiableList(vtx_);
        } else {
          return vtxBuilder_.getMessageList();
        }
      }
      /**
       * <pre>
       * zero or more compact transactions from this block
       * </pre>
       *
       * <code>repeated .cash.z.wallet.sdk.rpc.CompactTx vtx = 7;</code>
       */
      public int getVtxCount() {
        if (vtxBuilder_ == null) {
          return vtx_.size();
        } else {
          return vtxBuilder_.getCount();
        }
      }
      /**
       * <pre>
       * zero or more compact transactions from this block
       * </pre>
       *
       * <code>repeated .cash.z.wallet.sdk.rpc.CompactTx vtx = 7;</code>
       */
      public cash.z.wallet.sdk.rpc.CompactFormats.CompactTx getVtx(int index) {
        if (vtxBuilder_ == null) {
          return vtx_.get(index);
        } else {
          return vtxBuilder_.getMessage(index);
        }
      }
      /**
       * <pre>
       * zero or more compact transactions from this block
       * </pre>
       *
       * <code>repeated .cash.z.wallet.sdk.rpc.CompactTx vtx = 7;</code>
       */
      public Builder setVtx(
          int index, cash.z.wallet.sdk.rpc.CompactFormats.CompactTx value) {
        if (vtxBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureVtxIsMutable();
          vtx_.set(index, value);
          onChanged();
        } else {
          vtxBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * zero or more compact transactions from this block
       * </pre>
       *
       * <code>repeated .cash.z.wallet.sdk.rpc.CompactTx vtx = 7;</code>
       */
      public Builder setVtx(
          int index, cash.z.wallet.sdk.rpc.CompactFormats.CompactTx.Builder builderForValue) {
        if (vtxBuilder_ == null) {
          ensureVtxIsMutable();
          vtx_.set(index, builderForValue.build());
          onChanged();
        } else {
          vtxBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * zero or more compact transactions from this block
       * </pre>
       *
       * <code>repeated .cash.z.wallet.sdk.rpc.CompactTx vtx = 7;</code>
       */
      public Builder addVtx(cash.z.wallet.sdk.rpc.CompactFormats.CompactTx value) {
        if (vtxBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureVtxIsMutable();
          vtx_.add(value);
          onChanged();
        } else {
          vtxBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <pre>
       * zero or more compact transactions from this block
       * </pre>
       *
       * <code>repeated .cash.z.wallet.sdk.rpc.CompactTx vtx = 7;</code>
       */
      public Builder addVtx(
          int index, cash.z.wallet.sdk.rpc.CompactFormats.CompactTx value) {
        if (vtxBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureVtxIsMutable();
          vtx_.add(index, value);
          onChanged();
        } else {
          vtxBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * zero or more compact transactions from this block
       * </pre>
       *
       * <code>repeated .cash.z.wallet.sdk.rpc.CompactTx vtx = 7;</code>
       */
      public Builder addVtx(
          cash.z.wallet.sdk.rpc.CompactFormats.CompactTx.Builder builderForValue) {
        if (vtxBuilder_ == null) {
          ensureVtxIsMutable();
          vtx_.add(builderForValue.build());
          onChanged();
        } else {
          vtxBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * zero or more compact transactions from this block
       * </pre>
       *
       * <code>repeated .cash.z.wallet.sdk.rpc.CompactTx vtx = 7;</code>
       */
      public Builder addVtx(
          int index, cash.z.wallet.sdk.rpc.CompactFormats.CompactTx.Builder builderForValue) {
        if (vtxBuilder_ == null) {
          ensureVtxIsMutable();
          vtx_.add(index, builderForValue.build());
          onChanged();
        } else {
          vtxBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * zero or more compact transactions from this block
       * </pre>
       *
       * <code>repeated .cash.z.wallet.sdk.rpc.CompactTx vtx = 7;</code>
       */
      public Builder addAllVtx(
          java.lang.Iterable<? extends cash.z.wallet.sdk.rpc.CompactFormats.CompactTx> values) {
        if (vtxBuilder_ == null) {
          ensureVtxIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, vtx_);
          onChanged();
        } else {
          vtxBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <pre>
       * zero or more compact transactions from this block
       * </pre>
       *
       * <code>repeated .cash.z.wallet.sdk.rpc.CompactTx vtx = 7;</code>
       */
      public Builder clearVtx() {
        if (vtxBuilder_ == null) {
          vtx_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          vtxBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * zero or more compact transactions from this block
       * </pre>
       *
       * <code>repeated .cash.z.wallet.sdk.rpc.CompactTx vtx = 7;</code>
       */
      public Builder removeVtx(int index) {
        if (vtxBuilder_ == null) {
          ensureVtxIsMutable();
          vtx_.remove(index);
          onChanged();
        } else {
          vtxBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <pre>
       * zero or more compact transactions from this block
       * </pre>
       *
       * <code>repeated .cash.z.wallet.sdk.rpc.CompactTx vtx = 7;</code>
       */
      public cash.z.wallet.sdk.rpc.CompactFormats.CompactTx.Builder getVtxBuilder(
          int index) {
        return getVtxFieldBuilder().getBuilder(index);
      }
      /**
       * <pre>
       * zero or more compact transactions from this block
       * </pre>
       *
       * <code>repeated .cash.z.wallet.sdk.rpc.CompactTx vtx = 7;</code>
       */
      public cash.z.wallet.sdk.rpc.CompactFormats.CompactTxOrBuilder getVtxOrBuilder(
          int index) {
        if (vtxBuilder_ == null) {
          return vtx_.get(index);  } else {
          return vtxBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <pre>
       * zero or more compact transactions from this block
       * </pre>
       *
       * <code>repeated .cash.z.wallet.sdk.rpc.CompactTx vtx = 7;</code>
       */
      public java.util.List<? extends cash.z.wallet.sdk.rpc.CompactFormats.CompactTxOrBuilder> 
           getVtxOrBuilderList() {
        if (vtxBuilder_ != null) {
          return vtxBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(vtx_);
        }
      }
      /**
       * <pre>
       * zero or more compact transactions from this block
       * </pre>
       *
       * <code>repeated .cash.z.wallet.sdk.rpc.CompactTx vtx = 7;</code>
       */
      public cash.z.wallet.sdk.rpc.CompactFormats.CompactTx.Builder addVtxBuilder() {
        return getVtxFieldBuilder().addBuilder(
            cash.z.wallet.sdk.rpc.CompactFormats.CompactTx.getDefaultInstance());
      }
      /**
       * <pre>
       * zero or more compact transactions from this block
       * </pre>
       *
       * <code>repeated .cash.z.wallet.sdk.rpc.CompactTx vtx = 7;</code>
       */
      public cash.z.wallet.sdk.rpc.CompactFormats.CompactTx.Builder addVtxBuilder(
          int index) {
        return getVtxFieldBuilder().addBuilder(
            index, cash.z.wallet.sdk.rpc.CompactFormats.CompactTx.getDefaultInstance());
      }
      /**
       * <pre>
       * zero or more compact transactions from this block
       * </pre>
       *
       * <code>repeated .cash.z.wallet.sdk.rpc.CompactTx vtx = 7;</code>
       */
      public java.util.List<cash.z.wallet.sdk.rpc.CompactFormats.CompactTx.Builder> 
           getVtxBuilderList() {
        return getVtxFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          cash.z.wallet.sdk.rpc.CompactFormats.CompactTx, cash.z.wallet.sdk.rpc.CompactFormats.CompactTx.Builder, cash.z.wallet.sdk.rpc.CompactFormats.CompactTxOrBuilder> 
          getVtxFieldBuilder() {
        if (vtxBuilder_ == null) {
          vtxBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              cash.z.wallet.sdk.rpc.CompactFormats.CompactTx, cash.z.wallet.sdk.rpc.CompactFormats.CompactTx.Builder, cash.z.wallet.sdk.rpc.CompactFormats.CompactTxOrBuilder>(
                  vtx_,
                  ((bitField0_ & 0x00000001) != 0),
                  getParentForChildren(),
                  isClean());
          vtx_ = null;
        }
        return vtxBuilder_;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:cash.z.wallet.sdk.rpc.CompactBlock)
    }

    // @@protoc_insertion_point(class_scope:cash.z.wallet.sdk.rpc.CompactBlock)
    private static final cash.z.wallet.sdk.rpc.CompactFormats.CompactBlock DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new cash.z.wallet.sdk.rpc.CompactFormats.CompactBlock();
    }

    public static cash.z.wallet.sdk.rpc.CompactFormats.CompactBlock getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<CompactBlock>
        PARSER = new com.google.protobuf.AbstractParser<CompactBlock>() {
      @java.lang.Override
      public CompactBlock parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new CompactBlock(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<CompactBlock> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<CompactBlock> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public cash.z.wallet.sdk.rpc.CompactFormats.CompactBlock getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface CompactTxOrBuilder extends
      // @@protoc_insertion_point(interface_extends:cash.z.wallet.sdk.rpc.CompactTx)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * the index within the full block
     * </pre>
     *
     * <code>uint64 index = 1;</code>
     * @return The index.
     */
    long getIndex();

    /**
     * <pre>
     * the ID (hash) of this transaction, same as in block explorers
     * </pre>
     *
     * <code>bytes hash = 2;</code>
     * @return The hash.
     */
    com.google.protobuf.ByteString getHash();

    /**
     * <pre>
     * The transaction fee: present if server can provide. In the case of a
     * stateless server and a transaction with transparent inputs, this will be
     * unset because the calculation requires reference to prior transactions.
     * in a pure-Sapling context, the fee will be calculable as:
     *    valueBalance + (sum(vPubNew) - sum(vPubOld) - sum(tOut))
     * </pre>
     *
     * <code>uint32 fee = 3;</code>
     * @return The fee.
     */
    int getFee();

    /**
     * <pre>
     * inputs
     * </pre>
     *
     * <code>repeated .cash.z.wallet.sdk.rpc.CompactSpend spends = 4;</code>
     */
    java.util.List<cash.z.wallet.sdk.rpc.CompactFormats.CompactSpend> 
        getSpendsList();
    /**
     * <pre>
     * inputs
     * </pre>
     *
     * <code>repeated .cash.z.wallet.sdk.rpc.CompactSpend spends = 4;</code>
     */
    cash.z.wallet.sdk.rpc.CompactFormats.CompactSpend getSpends(int index);
    /**
     * <pre>
     * inputs
     * </pre>
     *
     * <code>repeated .cash.z.wallet.sdk.rpc.CompactSpend spends = 4;</code>
     */
    int getSpendsCount();
    /**
     * <pre>
     * inputs
     * </pre>
     *
     * <code>repeated .cash.z.wallet.sdk.rpc.CompactSpend spends = 4;</code>
     */
    java.util.List<? extends cash.z.wallet.sdk.rpc.CompactFormats.CompactSpendOrBuilder> 
        getSpendsOrBuilderList();
    /**
     * <pre>
     * inputs
     * </pre>
     *
     * <code>repeated .cash.z.wallet.sdk.rpc.CompactSpend spends = 4;</code>
     */
    cash.z.wallet.sdk.rpc.CompactFormats.CompactSpendOrBuilder getSpendsOrBuilder(
        int index);

    /**
     * <pre>
     * outputs
     * </pre>
     *
     * <code>repeated .cash.z.wallet.sdk.rpc.CompactOutput outputs = 5;</code>
     */
    java.util.List<cash.z.wallet.sdk.rpc.CompactFormats.CompactOutput> 
        getOutputsList();
    /**
     * <pre>
     * outputs
     * </pre>
     *
     * <code>repeated .cash.z.wallet.sdk.rpc.CompactOutput outputs = 5;</code>
     */
    cash.z.wallet.sdk.rpc.CompactFormats.CompactOutput getOutputs(int index);
    /**
     * <pre>
     * outputs
     * </pre>
     *
     * <code>repeated .cash.z.wallet.sdk.rpc.CompactOutput outputs = 5;</code>
     */
    int getOutputsCount();
    /**
     * <pre>
     * outputs
     * </pre>
     *
     * <code>repeated .cash.z.wallet.sdk.rpc.CompactOutput outputs = 5;</code>
     */
    java.util.List<? extends cash.z.wallet.sdk.rpc.CompactFormats.CompactOutputOrBuilder> 
        getOutputsOrBuilderList();
    /**
     * <pre>
     * outputs
     * </pre>
     *
     * <code>repeated .cash.z.wallet.sdk.rpc.CompactOutput outputs = 5;</code>
     */
    cash.z.wallet.sdk.rpc.CompactFormats.CompactOutputOrBuilder getOutputsOrBuilder(
        int index);
  }
  /**
   * <pre>
   * CompactTx contains the minimum information for a wallet to know if this transaction
   * is relevant to it (either pays to it or spends from it) via shielded elements
   * only. This message will not encode a transparent-to-transparent transaction.
   * </pre>
   *
   * Protobuf type {@code cash.z.wallet.sdk.rpc.CompactTx}
   */
  public static final class CompactTx extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:cash.z.wallet.sdk.rpc.CompactTx)
      CompactTxOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use CompactTx.newBuilder() to construct.
    private CompactTx(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private CompactTx() {
      hash_ = com.google.protobuf.ByteString.EMPTY;
      spends_ = java.util.Collections.emptyList();
      outputs_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new CompactTx();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private CompactTx(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 8: {

              index_ = input.readUInt64();
              break;
            }
            case 18: {

              hash_ = input.readBytes();
              break;
            }
            case 24: {

              fee_ = input.readUInt32();
              break;
            }
            case 34: {
              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
                spends_ = new java.util.ArrayList<cash.z.wallet.sdk.rpc.CompactFormats.CompactSpend>();
                mutable_bitField0_ |= 0x00000001;
              }
              spends_.add(
                  input.readMessage(cash.z.wallet.sdk.rpc.CompactFormats.CompactSpend.parser(), extensionRegistry));
              break;
            }
            case 42: {
              if (!((mutable_bitField0_ & 0x00000002) != 0)) {
                outputs_ = new java.util.ArrayList<cash.z.wallet.sdk.rpc.CompactFormats.CompactOutput>();
                mutable_bitField0_ |= 0x00000002;
              }
              outputs_.add(
                  input.readMessage(cash.z.wallet.sdk.rpc.CompactFormats.CompactOutput.parser(), extensionRegistry));
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (com.google.protobuf.UninitializedMessageException e) {
        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000001) != 0)) {
          spends_ = java.util.Collections.unmodifiableList(spends_);
        }
        if (((mutable_bitField0_ & 0x00000002) != 0)) {
          outputs_ = java.util.Collections.unmodifiableList(outputs_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return cash.z.wallet.sdk.rpc.CompactFormats.internal_static_cash_z_wallet_sdk_rpc_CompactTx_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return cash.z.wallet.sdk.rpc.CompactFormats.internal_static_cash_z_wallet_sdk_rpc_CompactTx_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              cash.z.wallet.sdk.rpc.CompactFormats.CompactTx.class, cash.z.wallet.sdk.rpc.CompactFormats.CompactTx.Builder.class);
    }

    public static final int INDEX_FIELD_NUMBER = 1;
    private long index_;
    /**
     * <pre>
     * the index within the full block
     * </pre>
     *
     * <code>uint64 index = 1;</code>
     * @return The index.
     */
    @java.lang.Override
    public long getIndex() {
      return index_;
    }

    public static final int HASH_FIELD_NUMBER = 2;
    private com.google.protobuf.ByteString hash_;
    /**
     * <pre>
     * the ID (hash) of this transaction, same as in block explorers
     * </pre>
     *
     * <code>bytes hash = 2;</code>
     * @return The hash.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString getHash() {
      return hash_;
    }

    public static final int FEE_FIELD_NUMBER = 3;
    private int fee_;
    /**
     * <pre>
     * The transaction fee: present if server can provide. In the case of a
     * stateless server and a transaction with transparent inputs, this will be
     * unset because the calculation requires reference to prior transactions.
     * in a pure-Sapling context, the fee will be calculable as:
     *    valueBalance + (sum(vPubNew) - sum(vPubOld) - sum(tOut))
     * </pre>
     *
     * <code>uint32 fee = 3;</code>
     * @return The fee.
     */
    @java.lang.Override
    public int getFee() {
      return fee_;
    }

    public static final int SPENDS_FIELD_NUMBER = 4;
    private java.util.List<cash.z.wallet.sdk.rpc.CompactFormats.CompactSpend> spends_;
    /**
     * <pre>
     * inputs
     * </pre>
     *
     * <code>repeated .cash.z.wallet.sdk.rpc.CompactSpend spends = 4;</code>
     */
    @java.lang.Override
    public java.util.List<cash.z.wallet.sdk.rpc.CompactFormats.CompactSpend> getSpendsList() {
      return spends_;
    }
    /**
     * <pre>
     * inputs
     * </pre>
     *
     * <code>repeated .cash.z.wallet.sdk.rpc.CompactSpend spends = 4;</code>
     */
    @java.lang.Override
    public java.util.List<? extends cash.z.wallet.sdk.rpc.CompactFormats.CompactSpendOrBuilder> 
        getSpendsOrBuilderList() {
      return spends_;
    }
    /**
     * <pre>
     * inputs
     * </pre>
     *
     * <code>repeated .cash.z.wallet.sdk.rpc.CompactSpend spends = 4;</code>
     */
    @java.lang.Override
    public int getSpendsCount() {
      return spends_.size();
    }
    /**
     * <pre>
     * inputs
     * </pre>
     *
     * <code>repeated .cash.z.wallet.sdk.rpc.CompactSpend spends = 4;</code>
     */
    @java.lang.Override
    public cash.z.wallet.sdk.rpc.CompactFormats.CompactSpend getSpends(int index) {
      return spends_.get(index);
    }
    /**
     * <pre>
     * inputs
     * </pre>
     *
     * <code>repeated .cash.z.wallet.sdk.rpc.CompactSpend spends = 4;</code>
     */
    @java.lang.Override
    public cash.z.wallet.sdk.rpc.CompactFormats.CompactSpendOrBuilder getSpendsOrBuilder(
        int index) {
      return spends_.get(index);
    }

    public static final int OUTPUTS_FIELD_NUMBER = 5;
    private java.util.List<cash.z.wallet.sdk.rpc.CompactFormats.CompactOutput> outputs_;
    /**
     * <pre>
     * outputs
     * </pre>
     *
     * <code>repeated .cash.z.wallet.sdk.rpc.CompactOutput outputs = 5;</code>
     */
    @java.lang.Override
    public java.util.List<cash.z.wallet.sdk.rpc.CompactFormats.CompactOutput> getOutputsList() {
      return outputs_;
    }
    /**
     * <pre>
     * outputs
     * </pre>
     *
     * <code>repeated .cash.z.wallet.sdk.rpc.CompactOutput outputs = 5;</code>
     */
    @java.lang.Override
    public java.util.List<? extends cash.z.wallet.sdk.rpc.CompactFormats.CompactOutputOrBuilder> 
        getOutputsOrBuilderList() {
      return outputs_;
    }
    /**
     * <pre>
     * outputs
     * </pre>
     *
     * <code>repeated .cash.z.wallet.sdk.rpc.CompactOutput outputs = 5;</code>
     */
    @java.lang.Override
    public int getOutputsCount() {
      return outputs_.size();
    }
    /**
     * <pre>
     * outputs
     * </pre>
     *
     * <code>repeated .cash.z.wallet.sdk.rpc.CompactOutput outputs = 5;</code>
     */
    @java.lang.Override
    public cash.z.wallet.sdk.rpc.CompactFormats.CompactOutput getOutputs(int index) {
      return outputs_.get(index);
    }
    /**
     * <pre>
     * outputs
     * </pre>
     *
     * <code>repeated .cash.z.wallet.sdk.rpc.CompactOutput outputs = 5;</code>
     */
    @java.lang.Override
    public cash.z.wallet.sdk.rpc.CompactFormats.CompactOutputOrBuilder getOutputsOrBuilder(
        int index) {
      return outputs_.get(index);
    }

    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (index_ != 0L) {
        output.writeUInt64(1, index_);
      }
      if (!hash_.isEmpty()) {
        output.writeBytes(2, hash_);
      }
      if (fee_ != 0) {
        output.writeUInt32(3, fee_);
      }
      for (int i = 0; i < spends_.size(); i++) {
        output.writeMessage(4, spends_.get(i));
      }
      for (int i = 0; i < outputs_.size(); i++) {
        output.writeMessage(5, outputs_.get(i));
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (index_ != 0L) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(1, index_);
      }
      if (!hash_.isEmpty()) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, hash_);
      }
      if (fee_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(3, fee_);
      }
      for (int i = 0; i < spends_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, spends_.get(i));
      }
      for (int i = 0; i < outputs_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, outputs_.get(i));
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof cash.z.wallet.sdk.rpc.CompactFormats.CompactTx)) {
        return super.equals(obj);
      }
      cash.z.wallet.sdk.rpc.CompactFormats.CompactTx other = (cash.z.wallet.sdk.rpc.CompactFormats.CompactTx) obj;

      if (getIndex()
          != other.getIndex()) return false;
      if (!getHash()
          .equals(other.getHash())) return false;
      if (getFee()
          != other.getFee()) return false;
      if (!getSpendsList()
          .equals(other.getSpendsList())) return false;
      if (!getOutputsList()
          .equals(other.getOutputsList())) return false;
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + INDEX_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getIndex());
      hash = (37 * hash) + HASH_FIELD_NUMBER;
      hash = (53 * hash) + getHash().hashCode();
      hash = (37 * hash) + FEE_FIELD_NUMBER;
      hash = (53 * hash) + getFee();
      if (getSpendsCount() > 0) {
        hash = (37 * hash) + SPENDS_FIELD_NUMBER;
        hash = (53 * hash) + getSpendsList().hashCode();
      }
      if (getOutputsCount() > 0) {
        hash = (37 * hash) + OUTPUTS_FIELD_NUMBER;
        hash = (53 * hash) + getOutputsList().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static cash.z.wallet.sdk.rpc.CompactFormats.CompactTx parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cash.z.wallet.sdk.rpc.CompactFormats.CompactTx parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cash.z.wallet.sdk.rpc.CompactFormats.CompactTx parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cash.z.wallet.sdk.rpc.CompactFormats.CompactTx parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cash.z.wallet.sdk.rpc.CompactFormats.CompactTx parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cash.z.wallet.sdk.rpc.CompactFormats.CompactTx parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cash.z.wallet.sdk.rpc.CompactFormats.CompactTx parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static cash.z.wallet.sdk.rpc.CompactFormats.CompactTx parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static cash.z.wallet.sdk.rpc.CompactFormats.CompactTx parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static cash.z.wallet.sdk.rpc.CompactFormats.CompactTx parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static cash.z.wallet.sdk.rpc.CompactFormats.CompactTx parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static cash.z.wallet.sdk.rpc.CompactFormats.CompactTx parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(cash.z.wallet.sdk.rpc.CompactFormats.CompactTx prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * <pre>
     * CompactTx contains the minimum information for a wallet to know if this transaction
     * is relevant to it (either pays to it or spends from it) via shielded elements
     * only. This message will not encode a transparent-to-transparent transaction.
     * </pre>
     *
     * Protobuf type {@code cash.z.wallet.sdk.rpc.CompactTx}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:cash.z.wallet.sdk.rpc.CompactTx)
        cash.z.wallet.sdk.rpc.CompactFormats.CompactTxOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return cash.z.wallet.sdk.rpc.CompactFormats.internal_static_cash_z_wallet_sdk_rpc_CompactTx_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return cash.z.wallet.sdk.rpc.CompactFormats.internal_static_cash_z_wallet_sdk_rpc_CompactTx_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                cash.z.wallet.sdk.rpc.CompactFormats.CompactTx.class, cash.z.wallet.sdk.rpc.CompactFormats.CompactTx.Builder.class);
      }

      // Construct using cash.z.wallet.sdk.rpc.CompactFormats.CompactTx.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getSpendsFieldBuilder();
          getOutputsFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        index_ = 0L;

        hash_ = com.google.protobuf.ByteString.EMPTY;

        fee_ = 0;

        if (spendsBuilder_ == null) {
          spends_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
        } else {
          spendsBuilder_.clear();
        }
        if (outputsBuilder_ == null) {
          outputs_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
        } else {
          outputsBuilder_.clear();
        }
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return cash.z.wallet.sdk.rpc.CompactFormats.internal_static_cash_z_wallet_sdk_rpc_CompactTx_descriptor;
      }

      @java.lang.Override
      public cash.z.wallet.sdk.rpc.CompactFormats.CompactTx getDefaultInstanceForType() {
        return cash.z.wallet.sdk.rpc.CompactFormats.CompactTx.getDefaultInstance();
      }

      @java.lang.Override
      public cash.z.wallet.sdk.rpc.CompactFormats.CompactTx build() {
        cash.z.wallet.sdk.rpc.CompactFormats.CompactTx result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public cash.z.wallet.sdk.rpc.CompactFormats.CompactTx buildPartial() {
        cash.z.wallet.sdk.rpc.CompactFormats.CompactTx result = new cash.z.wallet.sdk.rpc.CompactFormats.CompactTx(this);
        int from_bitField0_ = bitField0_;
        result.index_ = index_;
        result.hash_ = hash_;
        result.fee_ = fee_;
        if (spendsBuilder_ == null) {
          if (((bitField0_ & 0x00000001) != 0)) {
            spends_ = java.util.Collections.unmodifiableList(spends_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.spends_ = spends_;
        } else {
          result.spends_ = spendsBuilder_.build();
        }
        if (outputsBuilder_ == null) {
          if (((bitField0_ & 0x00000002) != 0)) {
            outputs_ = java.util.Collections.unmodifiableList(outputs_);
            bitField0_ = (bitField0_ & ~0x00000002);
          }
          result.outputs_ = outputs_;
        } else {
          result.outputs_ = outputsBuilder_.build();
        }
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof cash.z.wallet.sdk.rpc.CompactFormats.CompactTx) {
          return mergeFrom((cash.z.wallet.sdk.rpc.CompactFormats.CompactTx)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(cash.z.wallet.sdk.rpc.CompactFormats.CompactTx other) {
        if (other == cash.z.wallet.sdk.rpc.CompactFormats.CompactTx.getDefaultInstance()) return this;
        if (other.getIndex() != 0L) {
          setIndex(other.getIndex());
        }
        if (other.getHash() != com.google.protobuf.ByteString.EMPTY) {
          setHash(other.getHash());
        }
        if (other.getFee() != 0) {
          setFee(other.getFee());
        }
        if (spendsBuilder_ == null) {
          if (!other.spends_.isEmpty()) {
            if (spends_.isEmpty()) {
              spends_ = other.spends_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureSpendsIsMutable();
              spends_.addAll(other.spends_);
            }
            onChanged();
          }
        } else {
          if (!other.spends_.isEmpty()) {
            if (spendsBuilder_.isEmpty()) {
              spendsBuilder_.dispose();
              spendsBuilder_ = null;
              spends_ = other.spends_;
              bitField0_ = (bitField0_ & ~0x00000001);
              spendsBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getSpendsFieldBuilder() : null;
            } else {
              spendsBuilder_.addAllMessages(other.spends_);
            }
          }
        }
        if (outputsBuilder_ == null) {
          if (!other.outputs_.isEmpty()) {
            if (outputs_.isEmpty()) {
              outputs_ = other.outputs_;
              bitField0_ = (bitField0_ & ~0x00000002);
            } else {
              ensureOutputsIsMutable();
              outputs_.addAll(other.outputs_);
            }
            onChanged();
          }
        } else {
          if (!other.outputs_.isEmpty()) {
            if (outputsBuilder_.isEmpty()) {
              outputsBuilder_.dispose();
              outputsBuilder_ = null;
              outputs_ = other.outputs_;
              bitField0_ = (bitField0_ & ~0x00000002);
              outputsBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getOutputsFieldBuilder() : null;
            } else {
              outputsBuilder_.addAllMessages(other.outputs_);
            }
          }
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        cash.z.wallet.sdk.rpc.CompactFormats.CompactTx parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (cash.z.wallet.sdk.rpc.CompactFormats.CompactTx) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private long index_ ;
      /**
       * <pre>
       * the index within the full block
       * </pre>
       *
       * <code>uint64 index = 1;</code>
       * @return The index.
       */
      @java.lang.Override
      public long getIndex() {
        return index_;
      }
      /**
       * <pre>
       * the index within the full block
       * </pre>
       *
       * <code>uint64 index = 1;</code>
       * @param value The index to set.
       * @return This builder for chaining.
       */
      public Builder setIndex(long value) {
        
        index_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * the index within the full block
       * </pre>
       *
       * <code>uint64 index = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearIndex() {
        
        index_ = 0L;
        onChanged();
        return this;
      }

      private com.google.protobuf.ByteString hash_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <pre>
       * the ID (hash) of this transaction, same as in block explorers
       * </pre>
       *
       * <code>bytes hash = 2;</code>
       * @return The hash.
       */
      @java.lang.Override
      public com.google.protobuf.ByteString getHash() {
        return hash_;
      }
      /**
       * <pre>
       * the ID (hash) of this transaction, same as in block explorers
       * </pre>
       *
       * <code>bytes hash = 2;</code>
       * @param value The hash to set.
       * @return This builder for chaining.
       */
      public Builder setHash(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        hash_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * the ID (hash) of this transaction, same as in block explorers
       * </pre>
       *
       * <code>bytes hash = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearHash() {
        
        hash_ = getDefaultInstance().getHash();
        onChanged();
        return this;
      }

      private int fee_ ;
      /**
       * <pre>
       * The transaction fee: present if server can provide. In the case of a
       * stateless server and a transaction with transparent inputs, this will be
       * unset because the calculation requires reference to prior transactions.
       * in a pure-Sapling context, the fee will be calculable as:
       *    valueBalance + (sum(vPubNew) - sum(vPubOld) - sum(tOut))
       * </pre>
       *
       * <code>uint32 fee = 3;</code>
       * @return The fee.
       */
      @java.lang.Override
      public int getFee() {
        return fee_;
      }
      /**
       * <pre>
       * The transaction fee: present if server can provide. In the case of a
       * stateless server and a transaction with transparent inputs, this will be
       * unset because the calculation requires reference to prior transactions.
       * in a pure-Sapling context, the fee will be calculable as:
       *    valueBalance + (sum(vPubNew) - sum(vPubOld) - sum(tOut))
       * </pre>
       *
       * <code>uint32 fee = 3;</code>
       * @param value The fee to set.
       * @return This builder for chaining.
       */
      public Builder setFee(int value) {
        
        fee_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The transaction fee: present if server can provide. In the case of a
       * stateless server and a transaction with transparent inputs, this will be
       * unset because the calculation requires reference to prior transactions.
       * in a pure-Sapling context, the fee will be calculable as:
       *    valueBalance + (sum(vPubNew) - sum(vPubOld) - sum(tOut))
       * </pre>
       *
       * <code>uint32 fee = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearFee() {
        
        fee_ = 0;
        onChanged();
        return this;
      }

      private java.util.List<cash.z.wallet.sdk.rpc.CompactFormats.CompactSpend> spends_ =
        java.util.Collections.emptyList();
      private void ensureSpendsIsMutable() {
        if (!((bitField0_ & 0x00000001) != 0)) {
          spends_ = new java.util.ArrayList<cash.z.wallet.sdk.rpc.CompactFormats.CompactSpend>(spends_);
          bitField0_ |= 0x00000001;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          cash.z.wallet.sdk.rpc.CompactFormats.CompactSpend, cash.z.wallet.sdk.rpc.CompactFormats.CompactSpend.Builder, cash.z.wallet.sdk.rpc.CompactFormats.CompactSpendOrBuilder> spendsBuilder_;

      /**
       * <pre>
       * inputs
       * </pre>
       *
       * <code>repeated .cash.z.wallet.sdk.rpc.CompactSpend spends = 4;</code>
       */
      public java.util.List<cash.z.wallet.sdk.rpc.CompactFormats.CompactSpend> getSpendsList() {
        if (spendsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(spends_);
        } else {
          return spendsBuilder_.getMessageList();
        }
      }
      /**
       * <pre>
       * inputs
       * </pre>
       *
       * <code>repeated .cash.z.wallet.sdk.rpc.CompactSpend spends = 4;</code>
       */
      public int getSpendsCount() {
        if (spendsBuilder_ == null) {
          return spends_.size();
        } else {
          return spendsBuilder_.getCount();
        }
      }
      /**
       * <pre>
       * inputs
       * </pre>
       *
       * <code>repeated .cash.z.wallet.sdk.rpc.CompactSpend spends = 4;</code>
       */
      public cash.z.wallet.sdk.rpc.CompactFormats.CompactSpend getSpends(int index) {
        if (spendsBuilder_ == null) {
          return spends_.get(index);
        } else {
          return spendsBuilder_.getMessage(index);
        }
      }
      /**
       * <pre>
       * inputs
       * </pre>
       *
       * <code>repeated .cash.z.wallet.sdk.rpc.CompactSpend spends = 4;</code>
       */
      public Builder setSpends(
          int index, cash.z.wallet.sdk.rpc.CompactFormats.CompactSpend value) {
        if (spendsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSpendsIsMutable();
          spends_.set(index, value);
          onChanged();
        } else {
          spendsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * inputs
       * </pre>
       *
       * <code>repeated .cash.z.wallet.sdk.rpc.CompactSpend spends = 4;</code>
       */
      public Builder setSpends(
          int index, cash.z.wallet.sdk.rpc.CompactFormats.CompactSpend.Builder builderForValue) {
        if (spendsBuilder_ == null) {
          ensureSpendsIsMutable();
          spends_.set(index, builderForValue.build());
          onChanged();
        } else {
          spendsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * inputs
       * </pre>
       *
       * <code>repeated .cash.z.wallet.sdk.rpc.CompactSpend spends = 4;</code>
       */
      public Builder addSpends(cash.z.wallet.sdk.rpc.CompactFormats.CompactSpend value) {
        if (spendsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSpendsIsMutable();
          spends_.add(value);
          onChanged();
        } else {
          spendsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <pre>
       * inputs
       * </pre>
       *
       * <code>repeated .cash.z.wallet.sdk.rpc.CompactSpend spends = 4;</code>
       */
      public Builder addSpends(
          int index, cash.z.wallet.sdk.rpc.CompactFormats.CompactSpend value) {
        if (spendsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSpendsIsMutable();
          spends_.add(index, value);
          onChanged();
        } else {
          spendsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * inputs
       * </pre>
       *
       * <code>repeated .cash.z.wallet.sdk.rpc.CompactSpend spends = 4;</code>
       */
      public Builder addSpends(
          cash.z.wallet.sdk.rpc.CompactFormats.CompactSpend.Builder builderForValue) {
        if (spendsBuilder_ == null) {
          ensureSpendsIsMutable();
          spends_.add(builderForValue.build());
          onChanged();
        } else {
          spendsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * inputs
       * </pre>
       *
       * <code>repeated .cash.z.wallet.sdk.rpc.CompactSpend spends = 4;</code>
       */
      public Builder addSpends(
          int index, cash.z.wallet.sdk.rpc.CompactFormats.CompactSpend.Builder builderForValue) {
        if (spendsBuilder_ == null) {
          ensureSpendsIsMutable();
          spends_.add(index, builderForValue.build());
          onChanged();
        } else {
          spendsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * inputs
       * </pre>
       *
       * <code>repeated .cash.z.wallet.sdk.rpc.CompactSpend spends = 4;</code>
       */
      public Builder addAllSpends(
          java.lang.Iterable<? extends cash.z.wallet.sdk.rpc.CompactFormats.CompactSpend> values) {
        if (spendsBuilder_ == null) {
          ensureSpendsIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, spends_);
          onChanged();
        } else {
          spendsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <pre>
       * inputs
       * </pre>
       *
       * <code>repeated .cash.z.wallet.sdk.rpc.CompactSpend spends = 4;</code>
       */
      public Builder clearSpends() {
        if (spendsBuilder_ == null) {
          spends_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          spendsBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * inputs
       * </pre>
       *
       * <code>repeated .cash.z.wallet.sdk.rpc.CompactSpend spends = 4;</code>
       */
      public Builder removeSpends(int index) {
        if (spendsBuilder_ == null) {
          ensureSpendsIsMutable();
          spends_.remove(index);
          onChanged();
        } else {
          spendsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <pre>
       * inputs
       * </pre>
       *
       * <code>repeated .cash.z.wallet.sdk.rpc.CompactSpend spends = 4;</code>
       */
      public cash.z.wallet.sdk.rpc.CompactFormats.CompactSpend.Builder getSpendsBuilder(
          int index) {
        return getSpendsFieldBuilder().getBuilder(index);
      }
      /**
       * <pre>
       * inputs
       * </pre>
       *
       * <code>repeated .cash.z.wallet.sdk.rpc.CompactSpend spends = 4;</code>
       */
      public cash.z.wallet.sdk.rpc.CompactFormats.CompactSpendOrBuilder getSpendsOrBuilder(
          int index) {
        if (spendsBuilder_ == null) {
          return spends_.get(index);  } else {
          return spendsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <pre>
       * inputs
       * </pre>
       *
       * <code>repeated .cash.z.wallet.sdk.rpc.CompactSpend spends = 4;</code>
       */
      public java.util.List<? extends cash.z.wallet.sdk.rpc.CompactFormats.CompactSpendOrBuilder> 
           getSpendsOrBuilderList() {
        if (spendsBuilder_ != null) {
          return spendsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(spends_);
        }
      }
      /**
       * <pre>
       * inputs
       * </pre>
       *
       * <code>repeated .cash.z.wallet.sdk.rpc.CompactSpend spends = 4;</code>
       */
      public cash.z.wallet.sdk.rpc.CompactFormats.CompactSpend.Builder addSpendsBuilder() {
        return getSpendsFieldBuilder().addBuilder(
            cash.z.wallet.sdk.rpc.CompactFormats.CompactSpend.getDefaultInstance());
      }
      /**
       * <pre>
       * inputs
       * </pre>
       *
       * <code>repeated .cash.z.wallet.sdk.rpc.CompactSpend spends = 4;</code>
       */
      public cash.z.wallet.sdk.rpc.CompactFormats.CompactSpend.Builder addSpendsBuilder(
          int index) {
        return getSpendsFieldBuilder().addBuilder(
            index, cash.z.wallet.sdk.rpc.CompactFormats.CompactSpend.getDefaultInstance());
      }
      /**
       * <pre>
       * inputs
       * </pre>
       *
       * <code>repeated .cash.z.wallet.sdk.rpc.CompactSpend spends = 4;</code>
       */
      public java.util.List<cash.z.wallet.sdk.rpc.CompactFormats.CompactSpend.Builder> 
           getSpendsBuilderList() {
        return getSpendsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          cash.z.wallet.sdk.rpc.CompactFormats.CompactSpend, cash.z.wallet.sdk.rpc.CompactFormats.CompactSpend.Builder, cash.z.wallet.sdk.rpc.CompactFormats.CompactSpendOrBuilder> 
          getSpendsFieldBuilder() {
        if (spendsBuilder_ == null) {
          spendsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              cash.z.wallet.sdk.rpc.CompactFormats.CompactSpend, cash.z.wallet.sdk.rpc.CompactFormats.CompactSpend.Builder, cash.z.wallet.sdk.rpc.CompactFormats.CompactSpendOrBuilder>(
                  spends_,
                  ((bitField0_ & 0x00000001) != 0),
                  getParentForChildren(),
                  isClean());
          spends_ = null;
        }
        return spendsBuilder_;
      }

      private java.util.List<cash.z.wallet.sdk.rpc.CompactFormats.CompactOutput> outputs_ =
        java.util.Collections.emptyList();
      private void ensureOutputsIsMutable() {
        if (!((bitField0_ & 0x00000002) != 0)) {
          outputs_ = new java.util.ArrayList<cash.z.wallet.sdk.rpc.CompactFormats.CompactOutput>(outputs_);
          bitField0_ |= 0x00000002;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          cash.z.wallet.sdk.rpc.CompactFormats.CompactOutput, cash.z.wallet.sdk.rpc.CompactFormats.CompactOutput.Builder, cash.z.wallet.sdk.rpc.CompactFormats.CompactOutputOrBuilder> outputsBuilder_;

      /**
       * <pre>
       * outputs
       * </pre>
       *
       * <code>repeated .cash.z.wallet.sdk.rpc.CompactOutput outputs = 5;</code>
       */
      public java.util.List<cash.z.wallet.sdk.rpc.CompactFormats.CompactOutput> getOutputsList() {
        if (outputsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(outputs_);
        } else {
          return outputsBuilder_.getMessageList();
        }
      }
      /**
       * <pre>
       * outputs
       * </pre>
       *
       * <code>repeated .cash.z.wallet.sdk.rpc.CompactOutput outputs = 5;</code>
       */
      public int getOutputsCount() {
        if (outputsBuilder_ == null) {
          return outputs_.size();
        } else {
          return outputsBuilder_.getCount();
        }
      }
      /**
       * <pre>
       * outputs
       * </pre>
       *
       * <code>repeated .cash.z.wallet.sdk.rpc.CompactOutput outputs = 5;</code>
       */
      public cash.z.wallet.sdk.rpc.CompactFormats.CompactOutput getOutputs(int index) {
        if (outputsBuilder_ == null) {
          return outputs_.get(index);
        } else {
          return outputsBuilder_.getMessage(index);
        }
      }
      /**
       * <pre>
       * outputs
       * </pre>
       *
       * <code>repeated .cash.z.wallet.sdk.rpc.CompactOutput outputs = 5;</code>
       */
      public Builder setOutputs(
          int index, cash.z.wallet.sdk.rpc.CompactFormats.CompactOutput value) {
        if (outputsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureOutputsIsMutable();
          outputs_.set(index, value);
          onChanged();
        } else {
          outputsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * outputs
       * </pre>
       *
       * <code>repeated .cash.z.wallet.sdk.rpc.CompactOutput outputs = 5;</code>
       */
      public Builder setOutputs(
          int index, cash.z.wallet.sdk.rpc.CompactFormats.CompactOutput.Builder builderForValue) {
        if (outputsBuilder_ == null) {
          ensureOutputsIsMutable();
          outputs_.set(index, builderForValue.build());
          onChanged();
        } else {
          outputsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * outputs
       * </pre>
       *
       * <code>repeated .cash.z.wallet.sdk.rpc.CompactOutput outputs = 5;</code>
       */
      public Builder addOutputs(cash.z.wallet.sdk.rpc.CompactFormats.CompactOutput value) {
        if (outputsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureOutputsIsMutable();
          outputs_.add(value);
          onChanged();
        } else {
          outputsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <pre>
       * outputs
       * </pre>
       *
       * <code>repeated .cash.z.wallet.sdk.rpc.CompactOutput outputs = 5;</code>
       */
      public Builder addOutputs(
          int index, cash.z.wallet.sdk.rpc.CompactFormats.CompactOutput value) {
        if (outputsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureOutputsIsMutable();
          outputs_.add(index, value);
          onChanged();
        } else {
          outputsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * outputs
       * </pre>
       *
       * <code>repeated .cash.z.wallet.sdk.rpc.CompactOutput outputs = 5;</code>
       */
      public Builder addOutputs(
          cash.z.wallet.sdk.rpc.CompactFormats.CompactOutput.Builder builderForValue) {
        if (outputsBuilder_ == null) {
          ensureOutputsIsMutable();
          outputs_.add(builderForValue.build());
          onChanged();
        } else {
          outputsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * outputs
       * </pre>
       *
       * <code>repeated .cash.z.wallet.sdk.rpc.CompactOutput outputs = 5;</code>
       */
      public Builder addOutputs(
          int index, cash.z.wallet.sdk.rpc.CompactFormats.CompactOutput.Builder builderForValue) {
        if (outputsBuilder_ == null) {
          ensureOutputsIsMutable();
          outputs_.add(index, builderForValue.build());
          onChanged();
        } else {
          outputsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * outputs
       * </pre>
       *
       * <code>repeated .cash.z.wallet.sdk.rpc.CompactOutput outputs = 5;</code>
       */
      public Builder addAllOutputs(
          java.lang.Iterable<? extends cash.z.wallet.sdk.rpc.CompactFormats.CompactOutput> values) {
        if (outputsBuilder_ == null) {
          ensureOutputsIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, outputs_);
          onChanged();
        } else {
          outputsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <pre>
       * outputs
       * </pre>
       *
       * <code>repeated .cash.z.wallet.sdk.rpc.CompactOutput outputs = 5;</code>
       */
      public Builder clearOutputs() {
        if (outputsBuilder_ == null) {
          outputs_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
          onChanged();
        } else {
          outputsBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * outputs
       * </pre>
       *
       * <code>repeated .cash.z.wallet.sdk.rpc.CompactOutput outputs = 5;</code>
       */
      public Builder removeOutputs(int index) {
        if (outputsBuilder_ == null) {
          ensureOutputsIsMutable();
          outputs_.remove(index);
          onChanged();
        } else {
          outputsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <pre>
       * outputs
       * </pre>
       *
       * <code>repeated .cash.z.wallet.sdk.rpc.CompactOutput outputs = 5;</code>
       */
      public cash.z.wallet.sdk.rpc.CompactFormats.CompactOutput.Builder getOutputsBuilder(
          int index) {
        return getOutputsFieldBuilder().getBuilder(index);
      }
      /**
       * <pre>
       * outputs
       * </pre>
       *
       * <code>repeated .cash.z.wallet.sdk.rpc.CompactOutput outputs = 5;</code>
       */
      public cash.z.wallet.sdk.rpc.CompactFormats.CompactOutputOrBuilder getOutputsOrBuilder(
          int index) {
        if (outputsBuilder_ == null) {
          return outputs_.get(index);  } else {
          return outputsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <pre>
       * outputs
       * </pre>
       *
       * <code>repeated .cash.z.wallet.sdk.rpc.CompactOutput outputs = 5;</code>
       */
      public java.util.List<? extends cash.z.wallet.sdk.rpc.CompactFormats.CompactOutputOrBuilder> 
           getOutputsOrBuilderList() {
        if (outputsBuilder_ != null) {
          return outputsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(outputs_);
        }
      }
      /**
       * <pre>
       * outputs
       * </pre>
       *
       * <code>repeated .cash.z.wallet.sdk.rpc.CompactOutput outputs = 5;</code>
       */
      public cash.z.wallet.sdk.rpc.CompactFormats.CompactOutput.Builder addOutputsBuilder() {
        return getOutputsFieldBuilder().addBuilder(
            cash.z.wallet.sdk.rpc.CompactFormats.CompactOutput.getDefaultInstance());
      }
      /**
       * <pre>
       * outputs
       * </pre>
       *
       * <code>repeated .cash.z.wallet.sdk.rpc.CompactOutput outputs = 5;</code>
       */
      public cash.z.wallet.sdk.rpc.CompactFormats.CompactOutput.Builder addOutputsBuilder(
          int index) {
        return getOutputsFieldBuilder().addBuilder(
            index, cash.z.wallet.sdk.rpc.CompactFormats.CompactOutput.getDefaultInstance());
      }
      /**
       * <pre>
       * outputs
       * </pre>
       *
       * <code>repeated .cash.z.wallet.sdk.rpc.CompactOutput outputs = 5;</code>
       */
      public java.util.List<cash.z.wallet.sdk.rpc.CompactFormats.CompactOutput.Builder> 
           getOutputsBuilderList() {
        return getOutputsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          cash.z.wallet.sdk.rpc.CompactFormats.CompactOutput, cash.z.wallet.sdk.rpc.CompactFormats.CompactOutput.Builder, cash.z.wallet.sdk.rpc.CompactFormats.CompactOutputOrBuilder> 
          getOutputsFieldBuilder() {
        if (outputsBuilder_ == null) {
          outputsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              cash.z.wallet.sdk.rpc.CompactFormats.CompactOutput, cash.z.wallet.sdk.rpc.CompactFormats.CompactOutput.Builder, cash.z.wallet.sdk.rpc.CompactFormats.CompactOutputOrBuilder>(
                  outputs_,
                  ((bitField0_ & 0x00000002) != 0),
                  getParentForChildren(),
                  isClean());
          outputs_ = null;
        }
        return outputsBuilder_;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:cash.z.wallet.sdk.rpc.CompactTx)
    }

    // @@protoc_insertion_point(class_scope:cash.z.wallet.sdk.rpc.CompactTx)
    private static final cash.z.wallet.sdk.rpc.CompactFormats.CompactTx DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new cash.z.wallet.sdk.rpc.CompactFormats.CompactTx();
    }

    public static cash.z.wallet.sdk.rpc.CompactFormats.CompactTx getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<CompactTx>
        PARSER = new com.google.protobuf.AbstractParser<CompactTx>() {
      @java.lang.Override
      public CompactTx parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new CompactTx(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<CompactTx> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<CompactTx> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public cash.z.wallet.sdk.rpc.CompactFormats.CompactTx getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface CompactSpendOrBuilder extends
      // @@protoc_insertion_point(interface_extends:cash.z.wallet.sdk.rpc.CompactSpend)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * nullifier (see the Zcash protocol specification)
     * </pre>
     *
     * <code>bytes nf = 1;</code>
     * @return The nf.
     */
    com.google.protobuf.ByteString getNf();
  }
  /**
   * <pre>
   * CompactSpend is a Sapling Spend Description as described in 7.3 of the Zcash
   * protocol specification.
   * </pre>
   *
   * Protobuf type {@code cash.z.wallet.sdk.rpc.CompactSpend}
   */
  public static final class CompactSpend extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:cash.z.wallet.sdk.rpc.CompactSpend)
      CompactSpendOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use CompactSpend.newBuilder() to construct.
    private CompactSpend(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private CompactSpend() {
      nf_ = com.google.protobuf.ByteString.EMPTY;
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new CompactSpend();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private CompactSpend(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {

              nf_ = input.readBytes();
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (com.google.protobuf.UninitializedMessageException e) {
        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return cash.z.wallet.sdk.rpc.CompactFormats.internal_static_cash_z_wallet_sdk_rpc_CompactSpend_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return cash.z.wallet.sdk.rpc.CompactFormats.internal_static_cash_z_wallet_sdk_rpc_CompactSpend_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              cash.z.wallet.sdk.rpc.CompactFormats.CompactSpend.class, cash.z.wallet.sdk.rpc.CompactFormats.CompactSpend.Builder.class);
    }

    public static final int NF_FIELD_NUMBER = 1;
    private com.google.protobuf.ByteString nf_;
    /**
     * <pre>
     * nullifier (see the Zcash protocol specification)
     * </pre>
     *
     * <code>bytes nf = 1;</code>
     * @return The nf.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString getNf() {
      return nf_;
    }

    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (!nf_.isEmpty()) {
        output.writeBytes(1, nf_);
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (!nf_.isEmpty()) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, nf_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof cash.z.wallet.sdk.rpc.CompactFormats.CompactSpend)) {
        return super.equals(obj);
      }
      cash.z.wallet.sdk.rpc.CompactFormats.CompactSpend other = (cash.z.wallet.sdk.rpc.CompactFormats.CompactSpend) obj;

      if (!getNf()
          .equals(other.getNf())) return false;
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + NF_FIELD_NUMBER;
      hash = (53 * hash) + getNf().hashCode();
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static cash.z.wallet.sdk.rpc.CompactFormats.CompactSpend parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cash.z.wallet.sdk.rpc.CompactFormats.CompactSpend parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cash.z.wallet.sdk.rpc.CompactFormats.CompactSpend parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cash.z.wallet.sdk.rpc.CompactFormats.CompactSpend parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cash.z.wallet.sdk.rpc.CompactFormats.CompactSpend parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cash.z.wallet.sdk.rpc.CompactFormats.CompactSpend parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cash.z.wallet.sdk.rpc.CompactFormats.CompactSpend parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static cash.z.wallet.sdk.rpc.CompactFormats.CompactSpend parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static cash.z.wallet.sdk.rpc.CompactFormats.CompactSpend parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static cash.z.wallet.sdk.rpc.CompactFormats.CompactSpend parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static cash.z.wallet.sdk.rpc.CompactFormats.CompactSpend parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static cash.z.wallet.sdk.rpc.CompactFormats.CompactSpend parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(cash.z.wallet.sdk.rpc.CompactFormats.CompactSpend prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * <pre>
     * CompactSpend is a Sapling Spend Description as described in 7.3 of the Zcash
     * protocol specification.
     * </pre>
     *
     * Protobuf type {@code cash.z.wallet.sdk.rpc.CompactSpend}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:cash.z.wallet.sdk.rpc.CompactSpend)
        cash.z.wallet.sdk.rpc.CompactFormats.CompactSpendOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return cash.z.wallet.sdk.rpc.CompactFormats.internal_static_cash_z_wallet_sdk_rpc_CompactSpend_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return cash.z.wallet.sdk.rpc.CompactFormats.internal_static_cash_z_wallet_sdk_rpc_CompactSpend_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                cash.z.wallet.sdk.rpc.CompactFormats.CompactSpend.class, cash.z.wallet.sdk.rpc.CompactFormats.CompactSpend.Builder.class);
      }

      // Construct using cash.z.wallet.sdk.rpc.CompactFormats.CompactSpend.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        nf_ = com.google.protobuf.ByteString.EMPTY;

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return cash.z.wallet.sdk.rpc.CompactFormats.internal_static_cash_z_wallet_sdk_rpc_CompactSpend_descriptor;
      }

      @java.lang.Override
      public cash.z.wallet.sdk.rpc.CompactFormats.CompactSpend getDefaultInstanceForType() {
        return cash.z.wallet.sdk.rpc.CompactFormats.CompactSpend.getDefaultInstance();
      }

      @java.lang.Override
      public cash.z.wallet.sdk.rpc.CompactFormats.CompactSpend build() {
        cash.z.wallet.sdk.rpc.CompactFormats.CompactSpend result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public cash.z.wallet.sdk.rpc.CompactFormats.CompactSpend buildPartial() {
        cash.z.wallet.sdk.rpc.CompactFormats.CompactSpend result = new cash.z.wallet.sdk.rpc.CompactFormats.CompactSpend(this);
        result.nf_ = nf_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof cash.z.wallet.sdk.rpc.CompactFormats.CompactSpend) {
          return mergeFrom((cash.z.wallet.sdk.rpc.CompactFormats.CompactSpend)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(cash.z.wallet.sdk.rpc.CompactFormats.CompactSpend other) {
        if (other == cash.z.wallet.sdk.rpc.CompactFormats.CompactSpend.getDefaultInstance()) return this;
        if (other.getNf() != com.google.protobuf.ByteString.EMPTY) {
          setNf(other.getNf());
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        cash.z.wallet.sdk.rpc.CompactFormats.CompactSpend parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (cash.z.wallet.sdk.rpc.CompactFormats.CompactSpend) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private com.google.protobuf.ByteString nf_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <pre>
       * nullifier (see the Zcash protocol specification)
       * </pre>
       *
       * <code>bytes nf = 1;</code>
       * @return The nf.
       */
      @java.lang.Override
      public com.google.protobuf.ByteString getNf() {
        return nf_;
      }
      /**
       * <pre>
       * nullifier (see the Zcash protocol specification)
       * </pre>
       *
       * <code>bytes nf = 1;</code>
       * @param value The nf to set.
       * @return This builder for chaining.
       */
      public Builder setNf(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        nf_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * nullifier (see the Zcash protocol specification)
       * </pre>
       *
       * <code>bytes nf = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearNf() {
        
        nf_ = getDefaultInstance().getNf();
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:cash.z.wallet.sdk.rpc.CompactSpend)
    }

    // @@protoc_insertion_point(class_scope:cash.z.wallet.sdk.rpc.CompactSpend)
    private static final cash.z.wallet.sdk.rpc.CompactFormats.CompactSpend DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new cash.z.wallet.sdk.rpc.CompactFormats.CompactSpend();
    }

    public static cash.z.wallet.sdk.rpc.CompactFormats.CompactSpend getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<CompactSpend>
        PARSER = new com.google.protobuf.AbstractParser<CompactSpend>() {
      @java.lang.Override
      public CompactSpend parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new CompactSpend(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<CompactSpend> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<CompactSpend> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public cash.z.wallet.sdk.rpc.CompactFormats.CompactSpend getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface CompactOutputOrBuilder extends
      // @@protoc_insertion_point(interface_extends:cash.z.wallet.sdk.rpc.CompactOutput)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * note commitment u-coordinate
     * </pre>
     *
     * <code>bytes cmu = 1;</code>
     * @return The cmu.
     */
    com.google.protobuf.ByteString getCmu();

    /**
     * <pre>
     * ephemeral public key
     * </pre>
     *
     * <code>bytes epk = 2;</code>
     * @return The epk.
     */
    com.google.protobuf.ByteString getEpk();

    /**
     * <pre>
     * ciphertext and zkproof
     * </pre>
     *
     * <code>bytes ciphertext = 3;</code>
     * @return The ciphertext.
     */
    com.google.protobuf.ByteString getCiphertext();
  }
  /**
   * <pre>
   * output is a Sapling Output Description as described in section 7.4 of the
   * Zcash protocol spec. Total size is 948.
   * </pre>
   *
   * Protobuf type {@code cash.z.wallet.sdk.rpc.CompactOutput}
   */
  public static final class CompactOutput extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:cash.z.wallet.sdk.rpc.CompactOutput)
      CompactOutputOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use CompactOutput.newBuilder() to construct.
    private CompactOutput(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private CompactOutput() {
      cmu_ = com.google.protobuf.ByteString.EMPTY;
      epk_ = com.google.protobuf.ByteString.EMPTY;
      ciphertext_ = com.google.protobuf.ByteString.EMPTY;
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new CompactOutput();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private CompactOutput(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {

              cmu_ = input.readBytes();
              break;
            }
            case 18: {

              epk_ = input.readBytes();
              break;
            }
            case 26: {

              ciphertext_ = input.readBytes();
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (com.google.protobuf.UninitializedMessageException e) {
        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return cash.z.wallet.sdk.rpc.CompactFormats.internal_static_cash_z_wallet_sdk_rpc_CompactOutput_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return cash.z.wallet.sdk.rpc.CompactFormats.internal_static_cash_z_wallet_sdk_rpc_CompactOutput_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              cash.z.wallet.sdk.rpc.CompactFormats.CompactOutput.class, cash.z.wallet.sdk.rpc.CompactFormats.CompactOutput.Builder.class);
    }

    public static final int CMU_FIELD_NUMBER = 1;
    private com.google.protobuf.ByteString cmu_;
    /**
     * <pre>
     * note commitment u-coordinate
     * </pre>
     *
     * <code>bytes cmu = 1;</code>
     * @return The cmu.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString getCmu() {
      return cmu_;
    }

    public static final int EPK_FIELD_NUMBER = 2;
    private com.google.protobuf.ByteString epk_;
    /**
     * <pre>
     * ephemeral public key
     * </pre>
     *
     * <code>bytes epk = 2;</code>
     * @return The epk.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString getEpk() {
      return epk_;
    }

    public static final int CIPHERTEXT_FIELD_NUMBER = 3;
    private com.google.protobuf.ByteString ciphertext_;
    /**
     * <pre>
     * ciphertext and zkproof
     * </pre>
     *
     * <code>bytes ciphertext = 3;</code>
     * @return The ciphertext.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString getCiphertext() {
      return ciphertext_;
    }

    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (!cmu_.isEmpty()) {
        output.writeBytes(1, cmu_);
      }
      if (!epk_.isEmpty()) {
        output.writeBytes(2, epk_);
      }
      if (!ciphertext_.isEmpty()) {
        output.writeBytes(3, ciphertext_);
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (!cmu_.isEmpty()) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, cmu_);
      }
      if (!epk_.isEmpty()) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, epk_);
      }
      if (!ciphertext_.isEmpty()) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(3, ciphertext_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof cash.z.wallet.sdk.rpc.CompactFormats.CompactOutput)) {
        return super.equals(obj);
      }
      cash.z.wallet.sdk.rpc.CompactFormats.CompactOutput other = (cash.z.wallet.sdk.rpc.CompactFormats.CompactOutput) obj;

      if (!getCmu()
          .equals(other.getCmu())) return false;
      if (!getEpk()
          .equals(other.getEpk())) return false;
      if (!getCiphertext()
          .equals(other.getCiphertext())) return false;
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + CMU_FIELD_NUMBER;
      hash = (53 * hash) + getCmu().hashCode();
      hash = (37 * hash) + EPK_FIELD_NUMBER;
      hash = (53 * hash) + getEpk().hashCode();
      hash = (37 * hash) + CIPHERTEXT_FIELD_NUMBER;
      hash = (53 * hash) + getCiphertext().hashCode();
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static cash.z.wallet.sdk.rpc.CompactFormats.CompactOutput parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cash.z.wallet.sdk.rpc.CompactFormats.CompactOutput parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cash.z.wallet.sdk.rpc.CompactFormats.CompactOutput parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cash.z.wallet.sdk.rpc.CompactFormats.CompactOutput parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cash.z.wallet.sdk.rpc.CompactFormats.CompactOutput parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static cash.z.wallet.sdk.rpc.CompactFormats.CompactOutput parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static cash.z.wallet.sdk.rpc.CompactFormats.CompactOutput parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static cash.z.wallet.sdk.rpc.CompactFormats.CompactOutput parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static cash.z.wallet.sdk.rpc.CompactFormats.CompactOutput parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static cash.z.wallet.sdk.rpc.CompactFormats.CompactOutput parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static cash.z.wallet.sdk.rpc.CompactFormats.CompactOutput parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static cash.z.wallet.sdk.rpc.CompactFormats.CompactOutput parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(cash.z.wallet.sdk.rpc.CompactFormats.CompactOutput prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * <pre>
     * output is a Sapling Output Description as described in section 7.4 of the
     * Zcash protocol spec. Total size is 948.
     * </pre>
     *
     * Protobuf type {@code cash.z.wallet.sdk.rpc.CompactOutput}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:cash.z.wallet.sdk.rpc.CompactOutput)
        cash.z.wallet.sdk.rpc.CompactFormats.CompactOutputOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return cash.z.wallet.sdk.rpc.CompactFormats.internal_static_cash_z_wallet_sdk_rpc_CompactOutput_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return cash.z.wallet.sdk.rpc.CompactFormats.internal_static_cash_z_wallet_sdk_rpc_CompactOutput_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                cash.z.wallet.sdk.rpc.CompactFormats.CompactOutput.class, cash.z.wallet.sdk.rpc.CompactFormats.CompactOutput.Builder.class);
      }

      // Construct using cash.z.wallet.sdk.rpc.CompactFormats.CompactOutput.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        cmu_ = com.google.protobuf.ByteString.EMPTY;

        epk_ = com.google.protobuf.ByteString.EMPTY;

        ciphertext_ = com.google.protobuf.ByteString.EMPTY;

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return cash.z.wallet.sdk.rpc.CompactFormats.internal_static_cash_z_wallet_sdk_rpc_CompactOutput_descriptor;
      }

      @java.lang.Override
      public cash.z.wallet.sdk.rpc.CompactFormats.CompactOutput getDefaultInstanceForType() {
        return cash.z.wallet.sdk.rpc.CompactFormats.CompactOutput.getDefaultInstance();
      }

      @java.lang.Override
      public cash.z.wallet.sdk.rpc.CompactFormats.CompactOutput build() {
        cash.z.wallet.sdk.rpc.CompactFormats.CompactOutput result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public cash.z.wallet.sdk.rpc.CompactFormats.CompactOutput buildPartial() {
        cash.z.wallet.sdk.rpc.CompactFormats.CompactOutput result = new cash.z.wallet.sdk.rpc.CompactFormats.CompactOutput(this);
        result.cmu_ = cmu_;
        result.epk_ = epk_;
        result.ciphertext_ = ciphertext_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof cash.z.wallet.sdk.rpc.CompactFormats.CompactOutput) {
          return mergeFrom((cash.z.wallet.sdk.rpc.CompactFormats.CompactOutput)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(cash.z.wallet.sdk.rpc.CompactFormats.CompactOutput other) {
        if (other == cash.z.wallet.sdk.rpc.CompactFormats.CompactOutput.getDefaultInstance()) return this;
        if (other.getCmu() != com.google.protobuf.ByteString.EMPTY) {
          setCmu(other.getCmu());
        }
        if (other.getEpk() != com.google.protobuf.ByteString.EMPTY) {
          setEpk(other.getEpk());
        }
        if (other.getCiphertext() != com.google.protobuf.ByteString.EMPTY) {
          setCiphertext(other.getCiphertext());
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        cash.z.wallet.sdk.rpc.CompactFormats.CompactOutput parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (cash.z.wallet.sdk.rpc.CompactFormats.CompactOutput) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private com.google.protobuf.ByteString cmu_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <pre>
       * note commitment u-coordinate
       * </pre>
       *
       * <code>bytes cmu = 1;</code>
       * @return The cmu.
       */
      @java.lang.Override
      public com.google.protobuf.ByteString getCmu() {
        return cmu_;
      }
      /**
       * <pre>
       * note commitment u-coordinate
       * </pre>
       *
       * <code>bytes cmu = 1;</code>
       * @param value The cmu to set.
       * @return This builder for chaining.
       */
      public Builder setCmu(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        cmu_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * note commitment u-coordinate
       * </pre>
       *
       * <code>bytes cmu = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearCmu() {
        
        cmu_ = getDefaultInstance().getCmu();
        onChanged();
        return this;
      }

      private com.google.protobuf.ByteString epk_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <pre>
       * ephemeral public key
       * </pre>
       *
       * <code>bytes epk = 2;</code>
       * @return The epk.
       */
      @java.lang.Override
      public com.google.protobuf.ByteString getEpk() {
        return epk_;
      }
      /**
       * <pre>
       * ephemeral public key
       * </pre>
       *
       * <code>bytes epk = 2;</code>
       * @param value The epk to set.
       * @return This builder for chaining.
       */
      public Builder setEpk(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        epk_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * ephemeral public key
       * </pre>
       *
       * <code>bytes epk = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearEpk() {
        
        epk_ = getDefaultInstance().getEpk();
        onChanged();
        return this;
      }

      private com.google.protobuf.ByteString ciphertext_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <pre>
       * ciphertext and zkproof
       * </pre>
       *
       * <code>bytes ciphertext = 3;</code>
       * @return The ciphertext.
       */
      @java.lang.Override
      public com.google.protobuf.ByteString getCiphertext() {
        return ciphertext_;
      }
      /**
       * <pre>
       * ciphertext and zkproof
       * </pre>
       *
       * <code>bytes ciphertext = 3;</code>
       * @param value The ciphertext to set.
       * @return This builder for chaining.
       */
      public Builder setCiphertext(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        ciphertext_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * ciphertext and zkproof
       * </pre>
       *
       * <code>bytes ciphertext = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearCiphertext() {
        
        ciphertext_ = getDefaultInstance().getCiphertext();
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:cash.z.wallet.sdk.rpc.CompactOutput)
    }

    // @@protoc_insertion_point(class_scope:cash.z.wallet.sdk.rpc.CompactOutput)
    private static final cash.z.wallet.sdk.rpc.CompactFormats.CompactOutput DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new cash.z.wallet.sdk.rpc.CompactFormats.CompactOutput();
    }

    public static cash.z.wallet.sdk.rpc.CompactFormats.CompactOutput getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<CompactOutput>
        PARSER = new com.google.protobuf.AbstractParser<CompactOutput>() {
      @java.lang.Override
      public CompactOutput parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new CompactOutput(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<CompactOutput> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<CompactOutput> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public cash.z.wallet.sdk.rpc.CompactFormats.CompactOutput getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_cash_z_wallet_sdk_rpc_CompactBlock_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_cash_z_wallet_sdk_rpc_CompactBlock_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_cash_z_wallet_sdk_rpc_CompactTx_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_cash_z_wallet_sdk_rpc_CompactTx_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_cash_z_wallet_sdk_rpc_CompactSpend_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_cash_z_wallet_sdk_rpc_CompactSpend_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_cash_z_wallet_sdk_rpc_CompactOutput_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_cash_z_wallet_sdk_rpc_CompactOutput_fieldAccessorTable;

  public static com.google.protobuf.Descriptors.FileDescriptor
      getDescriptor() {
    return descriptor;
  }
  private static  com.google.protobuf.Descriptors.FileDescriptor
      descriptor;
  static {
    java.lang.String[] descriptorData = {
      "\n\025compact_formats.proto\022\025cash.z.wallet.s" +
      "dk.rpc\"\241\001\n\014CompactBlock\022\024\n\014protoVersion\030" +
      "\001 \001(\r\022\016\n\006height\030\002 \001(\004\022\014\n\004hash\030\003 \001(\014\022\020\n\010p" +
      "revHash\030\004 \001(\014\022\014\n\004time\030\005 \001(\r\022\016\n\006header\030\006 " +
      "\001(\014\022-\n\003vtx\030\007 \003(\0132 .cash.z.wallet.sdk.rpc" +
      ".CompactTx\"\241\001\n\tCompactTx\022\r\n\005index\030\001 \001(\004\022" +
      "\014\n\004hash\030\002 \001(\014\022\013\n\003fee\030\003 \001(\r\0223\n\006spends\030\004 \003" +
      "(\0132#.cash.z.wallet.sdk.rpc.CompactSpend\022" +
      "5\n\007outputs\030\005 \003(\0132$.cash.z.wallet.sdk.rpc" +
      ".CompactOutput\"\032\n\014CompactSpend\022\n\n\002nf\030\001 \001" +
      "(\014\"=\n\rCompactOutput\022\013\n\003cmu\030\001 \001(\014\022\013\n\003epk\030" +
      "\002 \001(\014\022\022\n\nciphertext\030\003 \001(\014B\033Z\026lightwallet" +
      "d/walletrpc\272\002\000b\006proto3"
    };
    descriptor = com.google.protobuf.Descriptors.FileDescriptor
      .internalBuildGeneratedFileFrom(descriptorData,
        new com.google.protobuf.Descriptors.FileDescriptor[] {
        });
    internal_static_cash_z_wallet_sdk_rpc_CompactBlock_descriptor =
      getDescriptor().getMessageTypes().get(0);
    internal_static_cash_z_wallet_sdk_rpc_CompactBlock_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_cash_z_wallet_sdk_rpc_CompactBlock_descriptor,
        new java.lang.String[] { "ProtoVersion", "Height", "Hash", "PrevHash", "Time", "Header", "Vtx", });
    internal_static_cash_z_wallet_sdk_rpc_CompactTx_descriptor =
      getDescriptor().getMessageTypes().get(1);
    internal_static_cash_z_wallet_sdk_rpc_CompactTx_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_cash_z_wallet_sdk_rpc_CompactTx_descriptor,
        new java.lang.String[] { "Index", "Hash", "Fee", "Spends", "Outputs", });
    internal_static_cash_z_wallet_sdk_rpc_CompactSpend_descriptor =
      getDescriptor().getMessageTypes().get(2);
    internal_static_cash_z_wallet_sdk_rpc_CompactSpend_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_cash_z_wallet_sdk_rpc_CompactSpend_descriptor,
        new java.lang.String[] { "Nf", });
    internal_static_cash_z_wallet_sdk_rpc_CompactOutput_descriptor =
      getDescriptor().getMessageTypes().get(3);
    internal_static_cash_z_wallet_sdk_rpc_CompactOutput_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_cash_z_wallet_sdk_rpc_CompactOutput_descriptor,
        new java.lang.String[] { "Cmu", "Epk", "Ciphertext", });
  }

  // @@protoc_insertion_point(outer_class_scope)
}
