From 97834334bd98ec911d5ea74573b89344cb3affca Mon Sep 17 00:00:00 2001
From: beer-1 <147697694+beer-1@users.noreply.github.com>
Date: Tue, 9 Jul 2024 12:29:55 +0900
Subject: [PATCH] add sequence query

---
 api/opinit/opchild/v1/query.pulsar.go  | 1891 +++++++++++++++++++++++-
 api/opinit/opchild/v1/query_grpc.pb.go |   88 +-
 api/opinit/ophost/v1/query.pulsar.go   | 1223 +++++++++++++--
 api/opinit/ophost/v1/query_grpc.pb.go  |   40 +
 proto/opinit/opchild/v1/query.proto    |   30 +
 proto/opinit/ophost/v1/query.proto     |   16 +
 x/opchild/keeper/querier.go            |   18 +
 x/opchild/keeper/querier_test.go       |   24 +
 x/opchild/types/query.pb.go            |  717 ++++++++-
 x/opchild/types/query.pb.gw.go         |  130 ++
 x/ophost/keeper/querier.go             |   11 +
 x/ophost/keeper/querier_test.go        |   14 +
 x/ophost/types/query.pb.go             |  501 ++++++-
 x/ophost/types/query.pb.gw.go          |  101 ++
 14 files changed, 4460 insertions(+), 344 deletions(-)

diff --git a/api/opinit/opchild/v1/query.pulsar.go b/api/opinit/opchild/v1/query.pulsar.go
index fe6d7664..311e74ec 100644
--- a/api/opinit/opchild/v1/query.pulsar.go
+++ b/api/opinit/opchild/v1/query.pulsar.go
@@ -3463,6 +3463,1526 @@ func (x *fastReflection_QueryParamsResponse) ProtoMethods() *protoiface.Methods
 	}
 }
 
+var (
+	md_QueryNextL1SequenceRequest protoreflect.MessageDescriptor
+)
+
+func init() {
+	file_opinit_opchild_v1_query_proto_init()
+	md_QueryNextL1SequenceRequest = File_opinit_opchild_v1_query_proto.Messages().ByName("QueryNextL1SequenceRequest")
+}
+
+var _ protoreflect.Message = (*fastReflection_QueryNextL1SequenceRequest)(nil)
+
+type fastReflection_QueryNextL1SequenceRequest QueryNextL1SequenceRequest
+
+func (x *QueryNextL1SequenceRequest) ProtoReflect() protoreflect.Message {
+	return (*fastReflection_QueryNextL1SequenceRequest)(x)
+}
+
+func (x *QueryNextL1SequenceRequest) slowProtoReflect() protoreflect.Message {
+	mi := &file_opinit_opchild_v1_query_proto_msgTypes[8]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+var _fastReflection_QueryNextL1SequenceRequest_messageType fastReflection_QueryNextL1SequenceRequest_messageType
+var _ protoreflect.MessageType = fastReflection_QueryNextL1SequenceRequest_messageType{}
+
+type fastReflection_QueryNextL1SequenceRequest_messageType struct{}
+
+func (x fastReflection_QueryNextL1SequenceRequest_messageType) Zero() protoreflect.Message {
+	return (*fastReflection_QueryNextL1SequenceRequest)(nil)
+}
+func (x fastReflection_QueryNextL1SequenceRequest_messageType) New() protoreflect.Message {
+	return new(fastReflection_QueryNextL1SequenceRequest)
+}
+func (x fastReflection_QueryNextL1SequenceRequest_messageType) Descriptor() protoreflect.MessageDescriptor {
+	return md_QueryNextL1SequenceRequest
+}
+
+// Descriptor returns message descriptor, which contains only the protobuf
+// type information for the message.
+func (x *fastReflection_QueryNextL1SequenceRequest) Descriptor() protoreflect.MessageDescriptor {
+	return md_QueryNextL1SequenceRequest
+}
+
+// Type returns the message type, which encapsulates both Go and protobuf
+// type information. If the Go type information is not needed,
+// it is recommended that the message descriptor be used instead.
+func (x *fastReflection_QueryNextL1SequenceRequest) Type() protoreflect.MessageType {
+	return _fastReflection_QueryNextL1SequenceRequest_messageType
+}
+
+// New returns a newly allocated and mutable empty message.
+func (x *fastReflection_QueryNextL1SequenceRequest) New() protoreflect.Message {
+	return new(fastReflection_QueryNextL1SequenceRequest)
+}
+
+// Interface unwraps the message reflection interface and
+// returns the underlying ProtoMessage interface.
+func (x *fastReflection_QueryNextL1SequenceRequest) Interface() protoreflect.ProtoMessage {
+	return (*QueryNextL1SequenceRequest)(x)
+}
+
+// Range iterates over every populated field in an undefined order,
+// calling f for each field descriptor and value encountered.
+// Range returns immediately if f returns false.
+// While iterating, mutating operations may only be performed
+// on the current field descriptor.
+func (x *fastReflection_QueryNextL1SequenceRequest) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) {
+}
+
+// Has reports whether a field is populated.
+//
+// Some fields have the property of nullability where it is possible to
+// distinguish between the default value of a field and whether the field
+// was explicitly populated with the default value. Singular message fields,
+// member fields of a oneof, and proto2 scalar fields are nullable. Such
+// fields are populated only if explicitly set.
+//
+// In other cases (aside from the nullable cases above),
+// a proto3 scalar field is populated if it contains a non-zero value, and
+// a repeated field is populated if it is non-empty.
+func (x *fastReflection_QueryNextL1SequenceRequest) Has(fd protoreflect.FieldDescriptor) bool {
+	switch fd.FullName() {
+	default:
+		if fd.IsExtension() {
+			panic(fmt.Errorf("proto3 declared messages do not support extensions: opinit.opchild.v1.QueryNextL1SequenceRequest"))
+		}
+		panic(fmt.Errorf("message opinit.opchild.v1.QueryNextL1SequenceRequest does not contain field %s", fd.FullName()))
+	}
+}
+
+// Clear clears the field such that a subsequent Has call reports false.
+//
+// Clearing an extension field clears both the extension type and value
+// associated with the given field number.
+//
+// Clear is a mutating operation and unsafe for concurrent use.
+func (x *fastReflection_QueryNextL1SequenceRequest) Clear(fd protoreflect.FieldDescriptor) {
+	switch fd.FullName() {
+	default:
+		if fd.IsExtension() {
+			panic(fmt.Errorf("proto3 declared messages do not support extensions: opinit.opchild.v1.QueryNextL1SequenceRequest"))
+		}
+		panic(fmt.Errorf("message opinit.opchild.v1.QueryNextL1SequenceRequest does not contain field %s", fd.FullName()))
+	}
+}
+
+// Get retrieves the value for a field.
+//
+// For unpopulated scalars, it returns the default value, where
+// the default value of a bytes scalar is guaranteed to be a copy.
+// For unpopulated composite types, it returns an empty, read-only view
+// of the value; to obtain a mutable reference, use Mutable.
+func (x *fastReflection_QueryNextL1SequenceRequest) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value {
+	switch descriptor.FullName() {
+	default:
+		if descriptor.IsExtension() {
+			panic(fmt.Errorf("proto3 declared messages do not support extensions: opinit.opchild.v1.QueryNextL1SequenceRequest"))
+		}
+		panic(fmt.Errorf("message opinit.opchild.v1.QueryNextL1SequenceRequest does not contain field %s", descriptor.FullName()))
+	}
+}
+
+// Set stores the value for a field.
+//
+// For a field belonging to a oneof, it implicitly clears any other field
+// that may be currently set within the same oneof.
+// For extension fields, it implicitly stores the provided ExtensionType.
+// When setting a composite type, it is unspecified whether the stored value
+// aliases the source's memory in any way. If the composite value is an
+// empty, read-only value, then it panics.
+//
+// Set is a mutating operation and unsafe for concurrent use.
+func (x *fastReflection_QueryNextL1SequenceRequest) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) {
+	switch fd.FullName() {
+	default:
+		if fd.IsExtension() {
+			panic(fmt.Errorf("proto3 declared messages do not support extensions: opinit.opchild.v1.QueryNextL1SequenceRequest"))
+		}
+		panic(fmt.Errorf("message opinit.opchild.v1.QueryNextL1SequenceRequest does not contain field %s", fd.FullName()))
+	}
+}
+
+// Mutable returns a mutable reference to a composite type.
+//
+// If the field is unpopulated, it may allocate a composite value.
+// For a field belonging to a oneof, it implicitly clears any other field
+// that may be currently set within the same oneof.
+// For extension fields, it implicitly stores the provided ExtensionType
+// if not already stored.
+// It panics if the field does not contain a composite type.
+//
+// Mutable is a mutating operation and unsafe for concurrent use.
+func (x *fastReflection_QueryNextL1SequenceRequest) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value {
+	switch fd.FullName() {
+	default:
+		if fd.IsExtension() {
+			panic(fmt.Errorf("proto3 declared messages do not support extensions: opinit.opchild.v1.QueryNextL1SequenceRequest"))
+		}
+		panic(fmt.Errorf("message opinit.opchild.v1.QueryNextL1SequenceRequest does not contain field %s", fd.FullName()))
+	}
+}
+
+// NewField returns a new value that is assignable to the field
+// for the given descriptor. For scalars, this returns the default value.
+// For lists, maps, and messages, this returns a new, empty, mutable value.
+func (x *fastReflection_QueryNextL1SequenceRequest) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value {
+	switch fd.FullName() {
+	default:
+		if fd.IsExtension() {
+			panic(fmt.Errorf("proto3 declared messages do not support extensions: opinit.opchild.v1.QueryNextL1SequenceRequest"))
+		}
+		panic(fmt.Errorf("message opinit.opchild.v1.QueryNextL1SequenceRequest does not contain field %s", fd.FullName()))
+	}
+}
+
+// WhichOneof reports which field within the oneof is populated,
+// returning nil if none are populated.
+// It panics if the oneof descriptor does not belong to this message.
+func (x *fastReflection_QueryNextL1SequenceRequest) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor {
+	switch d.FullName() {
+	default:
+		panic(fmt.Errorf("%s is not a oneof field in opinit.opchild.v1.QueryNextL1SequenceRequest", d.FullName()))
+	}
+	panic("unreachable")
+}
+
+// GetUnknown retrieves the entire list of unknown fields.
+// The caller may only mutate the contents of the RawFields
+// if the mutated bytes are stored back into the message with SetUnknown.
+func (x *fastReflection_QueryNextL1SequenceRequest) GetUnknown() protoreflect.RawFields {
+	return x.unknownFields
+}
+
+// SetUnknown stores an entire list of unknown fields.
+// The raw fields must be syntactically valid according to the wire format.
+// An implementation may panic if this is not the case.
+// Once stored, the caller must not mutate the content of the RawFields.
+// An empty RawFields may be passed to clear the fields.
+//
+// SetUnknown is a mutating operation and unsafe for concurrent use.
+func (x *fastReflection_QueryNextL1SequenceRequest) SetUnknown(fields protoreflect.RawFields) {
+	x.unknownFields = fields
+}
+
+// IsValid reports whether the message is valid.
+//
+// An invalid message is an empty, read-only value.
+//
+// An invalid message often corresponds to a nil pointer of the concrete
+// message type, but the details are implementation dependent.
+// Validity is not part of the protobuf data model, and may not
+// be preserved in marshaling or other operations.
+func (x *fastReflection_QueryNextL1SequenceRequest) IsValid() bool {
+	return x != nil
+}
+
+// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations.
+// This method may return nil.
+//
+// The returned methods type is identical to
+// "google.golang.org/protobuf/runtime/protoiface".Methods.
+// Consult the protoiface package documentation for details.
+func (x *fastReflection_QueryNextL1SequenceRequest) ProtoMethods() *protoiface.Methods {
+	size := func(input protoiface.SizeInput) protoiface.SizeOutput {
+		x := input.Message.Interface().(*QueryNextL1SequenceRequest)
+		if x == nil {
+			return protoiface.SizeOutput{
+				NoUnkeyedLiterals: input.NoUnkeyedLiterals,
+				Size:              0,
+			}
+		}
+		options := runtime.SizeInputToOptions(input)
+		_ = options
+		var n int
+		var l int
+		_ = l
+		if x.unknownFields != nil {
+			n += len(x.unknownFields)
+		}
+		return protoiface.SizeOutput{
+			NoUnkeyedLiterals: input.NoUnkeyedLiterals,
+			Size:              n,
+		}
+	}
+
+	marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) {
+		x := input.Message.Interface().(*QueryNextL1SequenceRequest)
+		if x == nil {
+			return protoiface.MarshalOutput{
+				NoUnkeyedLiterals: input.NoUnkeyedLiterals,
+				Buf:               input.Buf,
+			}, nil
+		}
+		options := runtime.MarshalInputToOptions(input)
+		_ = options
+		size := options.Size(x)
+		dAtA := make([]byte, size)
+		i := len(dAtA)
+		_ = i
+		var l int
+		_ = l
+		if x.unknownFields != nil {
+			i -= len(x.unknownFields)
+			copy(dAtA[i:], x.unknownFields)
+		}
+		if input.Buf != nil {
+			input.Buf = append(input.Buf, dAtA...)
+		} else {
+			input.Buf = dAtA
+		}
+		return protoiface.MarshalOutput{
+			NoUnkeyedLiterals: input.NoUnkeyedLiterals,
+			Buf:               input.Buf,
+		}, nil
+	}
+	unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) {
+		x := input.Message.Interface().(*QueryNextL1SequenceRequest)
+		if x == nil {
+			return protoiface.UnmarshalOutput{
+				NoUnkeyedLiterals: input.NoUnkeyedLiterals,
+				Flags:             input.Flags,
+			}, nil
+		}
+		options := runtime.UnmarshalInputToOptions(input)
+		_ = options
+		dAtA := input.Buf
+		l := len(dAtA)
+		iNdEx := 0
+		for iNdEx < l {
+			preIndex := iNdEx
+			var wire uint64
+			for shift := uint(0); ; shift += 7 {
+				if shift >= 64 {
+					return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow
+				}
+				if iNdEx >= l {
+					return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF
+				}
+				b := dAtA[iNdEx]
+				iNdEx++
+				wire |= uint64(b&0x7F) << shift
+				if b < 0x80 {
+					break
+				}
+			}
+			fieldNum := int32(wire >> 3)
+			wireType := int(wire & 0x7)
+			if wireType == 4 {
+				return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryNextL1SequenceRequest: wiretype end group for non-group")
+			}
+			if fieldNum <= 0 {
+				return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryNextL1SequenceRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+			}
+			switch fieldNum {
+			default:
+				iNdEx = preIndex
+				skippy, err := runtime.Skip(dAtA[iNdEx:])
+				if err != nil {
+					return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err
+				}
+				if (skippy < 0) || (iNdEx+skippy) < 0 {
+					return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength
+				}
+				if (iNdEx + skippy) > l {
+					return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF
+				}
+				if !options.DiscardUnknown {
+					x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...)
+				}
+				iNdEx += skippy
+			}
+		}
+
+		if iNdEx > l {
+			return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF
+		}
+		return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil
+	}
+	return &protoiface.Methods{
+		NoUnkeyedLiterals: struct{}{},
+		Flags:             protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown,
+		Size:              size,
+		Marshal:           marshal,
+		Unmarshal:         unmarshal,
+		Merge:             nil,
+		CheckInitialized:  nil,
+	}
+}
+
+var (
+	md_QueryNextL1SequenceResponse                  protoreflect.MessageDescriptor
+	fd_QueryNextL1SequenceResponse_next_l1_sequence protoreflect.FieldDescriptor
+)
+
+func init() {
+	file_opinit_opchild_v1_query_proto_init()
+	md_QueryNextL1SequenceResponse = File_opinit_opchild_v1_query_proto.Messages().ByName("QueryNextL1SequenceResponse")
+	fd_QueryNextL1SequenceResponse_next_l1_sequence = md_QueryNextL1SequenceResponse.Fields().ByName("next_l1_sequence")
+}
+
+var _ protoreflect.Message = (*fastReflection_QueryNextL1SequenceResponse)(nil)
+
+type fastReflection_QueryNextL1SequenceResponse QueryNextL1SequenceResponse
+
+func (x *QueryNextL1SequenceResponse) ProtoReflect() protoreflect.Message {
+	return (*fastReflection_QueryNextL1SequenceResponse)(x)
+}
+
+func (x *QueryNextL1SequenceResponse) slowProtoReflect() protoreflect.Message {
+	mi := &file_opinit_opchild_v1_query_proto_msgTypes[9]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+var _fastReflection_QueryNextL1SequenceResponse_messageType fastReflection_QueryNextL1SequenceResponse_messageType
+var _ protoreflect.MessageType = fastReflection_QueryNextL1SequenceResponse_messageType{}
+
+type fastReflection_QueryNextL1SequenceResponse_messageType struct{}
+
+func (x fastReflection_QueryNextL1SequenceResponse_messageType) Zero() protoreflect.Message {
+	return (*fastReflection_QueryNextL1SequenceResponse)(nil)
+}
+func (x fastReflection_QueryNextL1SequenceResponse_messageType) New() protoreflect.Message {
+	return new(fastReflection_QueryNextL1SequenceResponse)
+}
+func (x fastReflection_QueryNextL1SequenceResponse_messageType) Descriptor() protoreflect.MessageDescriptor {
+	return md_QueryNextL1SequenceResponse
+}
+
+// Descriptor returns message descriptor, which contains only the protobuf
+// type information for the message.
+func (x *fastReflection_QueryNextL1SequenceResponse) Descriptor() protoreflect.MessageDescriptor {
+	return md_QueryNextL1SequenceResponse
+}
+
+// Type returns the message type, which encapsulates both Go and protobuf
+// type information. If the Go type information is not needed,
+// it is recommended that the message descriptor be used instead.
+func (x *fastReflection_QueryNextL1SequenceResponse) Type() protoreflect.MessageType {
+	return _fastReflection_QueryNextL1SequenceResponse_messageType
+}
+
+// New returns a newly allocated and mutable empty message.
+func (x *fastReflection_QueryNextL1SequenceResponse) New() protoreflect.Message {
+	return new(fastReflection_QueryNextL1SequenceResponse)
+}
+
+// Interface unwraps the message reflection interface and
+// returns the underlying ProtoMessage interface.
+func (x *fastReflection_QueryNextL1SequenceResponse) Interface() protoreflect.ProtoMessage {
+	return (*QueryNextL1SequenceResponse)(x)
+}
+
+// Range iterates over every populated field in an undefined order,
+// calling f for each field descriptor and value encountered.
+// Range returns immediately if f returns false.
+// While iterating, mutating operations may only be performed
+// on the current field descriptor.
+func (x *fastReflection_QueryNextL1SequenceResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) {
+	if x.NextL1Sequence != uint64(0) {
+		value := protoreflect.ValueOfUint64(x.NextL1Sequence)
+		if !f(fd_QueryNextL1SequenceResponse_next_l1_sequence, value) {
+			return
+		}
+	}
+}
+
+// Has reports whether a field is populated.
+//
+// Some fields have the property of nullability where it is possible to
+// distinguish between the default value of a field and whether the field
+// was explicitly populated with the default value. Singular message fields,
+// member fields of a oneof, and proto2 scalar fields are nullable. Such
+// fields are populated only if explicitly set.
+//
+// In other cases (aside from the nullable cases above),
+// a proto3 scalar field is populated if it contains a non-zero value, and
+// a repeated field is populated if it is non-empty.
+func (x *fastReflection_QueryNextL1SequenceResponse) Has(fd protoreflect.FieldDescriptor) bool {
+	switch fd.FullName() {
+	case "opinit.opchild.v1.QueryNextL1SequenceResponse.next_l1_sequence":
+		return x.NextL1Sequence != uint64(0)
+	default:
+		if fd.IsExtension() {
+			panic(fmt.Errorf("proto3 declared messages do not support extensions: opinit.opchild.v1.QueryNextL1SequenceResponse"))
+		}
+		panic(fmt.Errorf("message opinit.opchild.v1.QueryNextL1SequenceResponse does not contain field %s", fd.FullName()))
+	}
+}
+
+// Clear clears the field such that a subsequent Has call reports false.
+//
+// Clearing an extension field clears both the extension type and value
+// associated with the given field number.
+//
+// Clear is a mutating operation and unsafe for concurrent use.
+func (x *fastReflection_QueryNextL1SequenceResponse) Clear(fd protoreflect.FieldDescriptor) {
+	switch fd.FullName() {
+	case "opinit.opchild.v1.QueryNextL1SequenceResponse.next_l1_sequence":
+		x.NextL1Sequence = uint64(0)
+	default:
+		if fd.IsExtension() {
+			panic(fmt.Errorf("proto3 declared messages do not support extensions: opinit.opchild.v1.QueryNextL1SequenceResponse"))
+		}
+		panic(fmt.Errorf("message opinit.opchild.v1.QueryNextL1SequenceResponse does not contain field %s", fd.FullName()))
+	}
+}
+
+// Get retrieves the value for a field.
+//
+// For unpopulated scalars, it returns the default value, where
+// the default value of a bytes scalar is guaranteed to be a copy.
+// For unpopulated composite types, it returns an empty, read-only view
+// of the value; to obtain a mutable reference, use Mutable.
+func (x *fastReflection_QueryNextL1SequenceResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value {
+	switch descriptor.FullName() {
+	case "opinit.opchild.v1.QueryNextL1SequenceResponse.next_l1_sequence":
+		value := x.NextL1Sequence
+		return protoreflect.ValueOfUint64(value)
+	default:
+		if descriptor.IsExtension() {
+			panic(fmt.Errorf("proto3 declared messages do not support extensions: opinit.opchild.v1.QueryNextL1SequenceResponse"))
+		}
+		panic(fmt.Errorf("message opinit.opchild.v1.QueryNextL1SequenceResponse does not contain field %s", descriptor.FullName()))
+	}
+}
+
+// Set stores the value for a field.
+//
+// For a field belonging to a oneof, it implicitly clears any other field
+// that may be currently set within the same oneof.
+// For extension fields, it implicitly stores the provided ExtensionType.
+// When setting a composite type, it is unspecified whether the stored value
+// aliases the source's memory in any way. If the composite value is an
+// empty, read-only value, then it panics.
+//
+// Set is a mutating operation and unsafe for concurrent use.
+func (x *fastReflection_QueryNextL1SequenceResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) {
+	switch fd.FullName() {
+	case "opinit.opchild.v1.QueryNextL1SequenceResponse.next_l1_sequence":
+		x.NextL1Sequence = value.Uint()
+	default:
+		if fd.IsExtension() {
+			panic(fmt.Errorf("proto3 declared messages do not support extensions: opinit.opchild.v1.QueryNextL1SequenceResponse"))
+		}
+		panic(fmt.Errorf("message opinit.opchild.v1.QueryNextL1SequenceResponse does not contain field %s", fd.FullName()))
+	}
+}
+
+// Mutable returns a mutable reference to a composite type.
+//
+// If the field is unpopulated, it may allocate a composite value.
+// For a field belonging to a oneof, it implicitly clears any other field
+// that may be currently set within the same oneof.
+// For extension fields, it implicitly stores the provided ExtensionType
+// if not already stored.
+// It panics if the field does not contain a composite type.
+//
+// Mutable is a mutating operation and unsafe for concurrent use.
+func (x *fastReflection_QueryNextL1SequenceResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value {
+	switch fd.FullName() {
+	case "opinit.opchild.v1.QueryNextL1SequenceResponse.next_l1_sequence":
+		panic(fmt.Errorf("field next_l1_sequence of message opinit.opchild.v1.QueryNextL1SequenceResponse is not mutable"))
+	default:
+		if fd.IsExtension() {
+			panic(fmt.Errorf("proto3 declared messages do not support extensions: opinit.opchild.v1.QueryNextL1SequenceResponse"))
+		}
+		panic(fmt.Errorf("message opinit.opchild.v1.QueryNextL1SequenceResponse does not contain field %s", fd.FullName()))
+	}
+}
+
+// NewField returns a new value that is assignable to the field
+// for the given descriptor. For scalars, this returns the default value.
+// For lists, maps, and messages, this returns a new, empty, mutable value.
+func (x *fastReflection_QueryNextL1SequenceResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value {
+	switch fd.FullName() {
+	case "opinit.opchild.v1.QueryNextL1SequenceResponse.next_l1_sequence":
+		return protoreflect.ValueOfUint64(uint64(0))
+	default:
+		if fd.IsExtension() {
+			panic(fmt.Errorf("proto3 declared messages do not support extensions: opinit.opchild.v1.QueryNextL1SequenceResponse"))
+		}
+		panic(fmt.Errorf("message opinit.opchild.v1.QueryNextL1SequenceResponse does not contain field %s", fd.FullName()))
+	}
+}
+
+// WhichOneof reports which field within the oneof is populated,
+// returning nil if none are populated.
+// It panics if the oneof descriptor does not belong to this message.
+func (x *fastReflection_QueryNextL1SequenceResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor {
+	switch d.FullName() {
+	default:
+		panic(fmt.Errorf("%s is not a oneof field in opinit.opchild.v1.QueryNextL1SequenceResponse", d.FullName()))
+	}
+	panic("unreachable")
+}
+
+// GetUnknown retrieves the entire list of unknown fields.
+// The caller may only mutate the contents of the RawFields
+// if the mutated bytes are stored back into the message with SetUnknown.
+func (x *fastReflection_QueryNextL1SequenceResponse) GetUnknown() protoreflect.RawFields {
+	return x.unknownFields
+}
+
+// SetUnknown stores an entire list of unknown fields.
+// The raw fields must be syntactically valid according to the wire format.
+// An implementation may panic if this is not the case.
+// Once stored, the caller must not mutate the content of the RawFields.
+// An empty RawFields may be passed to clear the fields.
+//
+// SetUnknown is a mutating operation and unsafe for concurrent use.
+func (x *fastReflection_QueryNextL1SequenceResponse) SetUnknown(fields protoreflect.RawFields) {
+	x.unknownFields = fields
+}
+
+// IsValid reports whether the message is valid.
+//
+// An invalid message is an empty, read-only value.
+//
+// An invalid message often corresponds to a nil pointer of the concrete
+// message type, but the details are implementation dependent.
+// Validity is not part of the protobuf data model, and may not
+// be preserved in marshaling or other operations.
+func (x *fastReflection_QueryNextL1SequenceResponse) IsValid() bool {
+	return x != nil
+}
+
+// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations.
+// This method may return nil.
+//
+// The returned methods type is identical to
+// "google.golang.org/protobuf/runtime/protoiface".Methods.
+// Consult the protoiface package documentation for details.
+func (x *fastReflection_QueryNextL1SequenceResponse) ProtoMethods() *protoiface.Methods {
+	size := func(input protoiface.SizeInput) protoiface.SizeOutput {
+		x := input.Message.Interface().(*QueryNextL1SequenceResponse)
+		if x == nil {
+			return protoiface.SizeOutput{
+				NoUnkeyedLiterals: input.NoUnkeyedLiterals,
+				Size:              0,
+			}
+		}
+		options := runtime.SizeInputToOptions(input)
+		_ = options
+		var n int
+		var l int
+		_ = l
+		if x.NextL1Sequence != 0 {
+			n += 1 + runtime.Sov(uint64(x.NextL1Sequence))
+		}
+		if x.unknownFields != nil {
+			n += len(x.unknownFields)
+		}
+		return protoiface.SizeOutput{
+			NoUnkeyedLiterals: input.NoUnkeyedLiterals,
+			Size:              n,
+		}
+	}
+
+	marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) {
+		x := input.Message.Interface().(*QueryNextL1SequenceResponse)
+		if x == nil {
+			return protoiface.MarshalOutput{
+				NoUnkeyedLiterals: input.NoUnkeyedLiterals,
+				Buf:               input.Buf,
+			}, nil
+		}
+		options := runtime.MarshalInputToOptions(input)
+		_ = options
+		size := options.Size(x)
+		dAtA := make([]byte, size)
+		i := len(dAtA)
+		_ = i
+		var l int
+		_ = l
+		if x.unknownFields != nil {
+			i -= len(x.unknownFields)
+			copy(dAtA[i:], x.unknownFields)
+		}
+		if x.NextL1Sequence != 0 {
+			i = runtime.EncodeVarint(dAtA, i, uint64(x.NextL1Sequence))
+			i--
+			dAtA[i] = 0x8
+		}
+		if input.Buf != nil {
+			input.Buf = append(input.Buf, dAtA...)
+		} else {
+			input.Buf = dAtA
+		}
+		return protoiface.MarshalOutput{
+			NoUnkeyedLiterals: input.NoUnkeyedLiterals,
+			Buf:               input.Buf,
+		}, nil
+	}
+	unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) {
+		x := input.Message.Interface().(*QueryNextL1SequenceResponse)
+		if x == nil {
+			return protoiface.UnmarshalOutput{
+				NoUnkeyedLiterals: input.NoUnkeyedLiterals,
+				Flags:             input.Flags,
+			}, nil
+		}
+		options := runtime.UnmarshalInputToOptions(input)
+		_ = options
+		dAtA := input.Buf
+		l := len(dAtA)
+		iNdEx := 0
+		for iNdEx < l {
+			preIndex := iNdEx
+			var wire uint64
+			for shift := uint(0); ; shift += 7 {
+				if shift >= 64 {
+					return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow
+				}
+				if iNdEx >= l {
+					return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF
+				}
+				b := dAtA[iNdEx]
+				iNdEx++
+				wire |= uint64(b&0x7F) << shift
+				if b < 0x80 {
+					break
+				}
+			}
+			fieldNum := int32(wire >> 3)
+			wireType := int(wire & 0x7)
+			if wireType == 4 {
+				return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryNextL1SequenceResponse: wiretype end group for non-group")
+			}
+			if fieldNum <= 0 {
+				return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryNextL1SequenceResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+			}
+			switch fieldNum {
+			case 1:
+				if wireType != 0 {
+					return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field NextL1Sequence", wireType)
+				}
+				x.NextL1Sequence = 0
+				for shift := uint(0); ; shift += 7 {
+					if shift >= 64 {
+						return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow
+					}
+					if iNdEx >= l {
+						return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF
+					}
+					b := dAtA[iNdEx]
+					iNdEx++
+					x.NextL1Sequence |= uint64(b&0x7F) << shift
+					if b < 0x80 {
+						break
+					}
+				}
+			default:
+				iNdEx = preIndex
+				skippy, err := runtime.Skip(dAtA[iNdEx:])
+				if err != nil {
+					return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err
+				}
+				if (skippy < 0) || (iNdEx+skippy) < 0 {
+					return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength
+				}
+				if (iNdEx + skippy) > l {
+					return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF
+				}
+				if !options.DiscardUnknown {
+					x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...)
+				}
+				iNdEx += skippy
+			}
+		}
+
+		if iNdEx > l {
+			return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF
+		}
+		return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil
+	}
+	return &protoiface.Methods{
+		NoUnkeyedLiterals: struct{}{},
+		Flags:             protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown,
+		Size:              size,
+		Marshal:           marshal,
+		Unmarshal:         unmarshal,
+		Merge:             nil,
+		CheckInitialized:  nil,
+	}
+}
+
+var (
+	md_QueryNextL2SequenceRequest protoreflect.MessageDescriptor
+)
+
+func init() {
+	file_opinit_opchild_v1_query_proto_init()
+	md_QueryNextL2SequenceRequest = File_opinit_opchild_v1_query_proto.Messages().ByName("QueryNextL2SequenceRequest")
+}
+
+var _ protoreflect.Message = (*fastReflection_QueryNextL2SequenceRequest)(nil)
+
+type fastReflection_QueryNextL2SequenceRequest QueryNextL2SequenceRequest
+
+func (x *QueryNextL2SequenceRequest) ProtoReflect() protoreflect.Message {
+	return (*fastReflection_QueryNextL2SequenceRequest)(x)
+}
+
+func (x *QueryNextL2SequenceRequest) slowProtoReflect() protoreflect.Message {
+	mi := &file_opinit_opchild_v1_query_proto_msgTypes[10]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+var _fastReflection_QueryNextL2SequenceRequest_messageType fastReflection_QueryNextL2SequenceRequest_messageType
+var _ protoreflect.MessageType = fastReflection_QueryNextL2SequenceRequest_messageType{}
+
+type fastReflection_QueryNextL2SequenceRequest_messageType struct{}
+
+func (x fastReflection_QueryNextL2SequenceRequest_messageType) Zero() protoreflect.Message {
+	return (*fastReflection_QueryNextL2SequenceRequest)(nil)
+}
+func (x fastReflection_QueryNextL2SequenceRequest_messageType) New() protoreflect.Message {
+	return new(fastReflection_QueryNextL2SequenceRequest)
+}
+func (x fastReflection_QueryNextL2SequenceRequest_messageType) Descriptor() protoreflect.MessageDescriptor {
+	return md_QueryNextL2SequenceRequest
+}
+
+// Descriptor returns message descriptor, which contains only the protobuf
+// type information for the message.
+func (x *fastReflection_QueryNextL2SequenceRequest) Descriptor() protoreflect.MessageDescriptor {
+	return md_QueryNextL2SequenceRequest
+}
+
+// Type returns the message type, which encapsulates both Go and protobuf
+// type information. If the Go type information is not needed,
+// it is recommended that the message descriptor be used instead.
+func (x *fastReflection_QueryNextL2SequenceRequest) Type() protoreflect.MessageType {
+	return _fastReflection_QueryNextL2SequenceRequest_messageType
+}
+
+// New returns a newly allocated and mutable empty message.
+func (x *fastReflection_QueryNextL2SequenceRequest) New() protoreflect.Message {
+	return new(fastReflection_QueryNextL2SequenceRequest)
+}
+
+// Interface unwraps the message reflection interface and
+// returns the underlying ProtoMessage interface.
+func (x *fastReflection_QueryNextL2SequenceRequest) Interface() protoreflect.ProtoMessage {
+	return (*QueryNextL2SequenceRequest)(x)
+}
+
+// Range iterates over every populated field in an undefined order,
+// calling f for each field descriptor and value encountered.
+// Range returns immediately if f returns false.
+// While iterating, mutating operations may only be performed
+// on the current field descriptor.
+func (x *fastReflection_QueryNextL2SequenceRequest) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) {
+}
+
+// Has reports whether a field is populated.
+//
+// Some fields have the property of nullability where it is possible to
+// distinguish between the default value of a field and whether the field
+// was explicitly populated with the default value. Singular message fields,
+// member fields of a oneof, and proto2 scalar fields are nullable. Such
+// fields are populated only if explicitly set.
+//
+// In other cases (aside from the nullable cases above),
+// a proto3 scalar field is populated if it contains a non-zero value, and
+// a repeated field is populated if it is non-empty.
+func (x *fastReflection_QueryNextL2SequenceRequest) Has(fd protoreflect.FieldDescriptor) bool {
+	switch fd.FullName() {
+	default:
+		if fd.IsExtension() {
+			panic(fmt.Errorf("proto3 declared messages do not support extensions: opinit.opchild.v1.QueryNextL2SequenceRequest"))
+		}
+		panic(fmt.Errorf("message opinit.opchild.v1.QueryNextL2SequenceRequest does not contain field %s", fd.FullName()))
+	}
+}
+
+// Clear clears the field such that a subsequent Has call reports false.
+//
+// Clearing an extension field clears both the extension type and value
+// associated with the given field number.
+//
+// Clear is a mutating operation and unsafe for concurrent use.
+func (x *fastReflection_QueryNextL2SequenceRequest) Clear(fd protoreflect.FieldDescriptor) {
+	switch fd.FullName() {
+	default:
+		if fd.IsExtension() {
+			panic(fmt.Errorf("proto3 declared messages do not support extensions: opinit.opchild.v1.QueryNextL2SequenceRequest"))
+		}
+		panic(fmt.Errorf("message opinit.opchild.v1.QueryNextL2SequenceRequest does not contain field %s", fd.FullName()))
+	}
+}
+
+// Get retrieves the value for a field.
+//
+// For unpopulated scalars, it returns the default value, where
+// the default value of a bytes scalar is guaranteed to be a copy.
+// For unpopulated composite types, it returns an empty, read-only view
+// of the value; to obtain a mutable reference, use Mutable.
+func (x *fastReflection_QueryNextL2SequenceRequest) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value {
+	switch descriptor.FullName() {
+	default:
+		if descriptor.IsExtension() {
+			panic(fmt.Errorf("proto3 declared messages do not support extensions: opinit.opchild.v1.QueryNextL2SequenceRequest"))
+		}
+		panic(fmt.Errorf("message opinit.opchild.v1.QueryNextL2SequenceRequest does not contain field %s", descriptor.FullName()))
+	}
+}
+
+// Set stores the value for a field.
+//
+// For a field belonging to a oneof, it implicitly clears any other field
+// that may be currently set within the same oneof.
+// For extension fields, it implicitly stores the provided ExtensionType.
+// When setting a composite type, it is unspecified whether the stored value
+// aliases the source's memory in any way. If the composite value is an
+// empty, read-only value, then it panics.
+//
+// Set is a mutating operation and unsafe for concurrent use.
+func (x *fastReflection_QueryNextL2SequenceRequest) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) {
+	switch fd.FullName() {
+	default:
+		if fd.IsExtension() {
+			panic(fmt.Errorf("proto3 declared messages do not support extensions: opinit.opchild.v1.QueryNextL2SequenceRequest"))
+		}
+		panic(fmt.Errorf("message opinit.opchild.v1.QueryNextL2SequenceRequest does not contain field %s", fd.FullName()))
+	}
+}
+
+// Mutable returns a mutable reference to a composite type.
+//
+// If the field is unpopulated, it may allocate a composite value.
+// For a field belonging to a oneof, it implicitly clears any other field
+// that may be currently set within the same oneof.
+// For extension fields, it implicitly stores the provided ExtensionType
+// if not already stored.
+// It panics if the field does not contain a composite type.
+//
+// Mutable is a mutating operation and unsafe for concurrent use.
+func (x *fastReflection_QueryNextL2SequenceRequest) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value {
+	switch fd.FullName() {
+	default:
+		if fd.IsExtension() {
+			panic(fmt.Errorf("proto3 declared messages do not support extensions: opinit.opchild.v1.QueryNextL2SequenceRequest"))
+		}
+		panic(fmt.Errorf("message opinit.opchild.v1.QueryNextL2SequenceRequest does not contain field %s", fd.FullName()))
+	}
+}
+
+// NewField returns a new value that is assignable to the field
+// for the given descriptor. For scalars, this returns the default value.
+// For lists, maps, and messages, this returns a new, empty, mutable value.
+func (x *fastReflection_QueryNextL2SequenceRequest) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value {
+	switch fd.FullName() {
+	default:
+		if fd.IsExtension() {
+			panic(fmt.Errorf("proto3 declared messages do not support extensions: opinit.opchild.v1.QueryNextL2SequenceRequest"))
+		}
+		panic(fmt.Errorf("message opinit.opchild.v1.QueryNextL2SequenceRequest does not contain field %s", fd.FullName()))
+	}
+}
+
+// WhichOneof reports which field within the oneof is populated,
+// returning nil if none are populated.
+// It panics if the oneof descriptor does not belong to this message.
+func (x *fastReflection_QueryNextL2SequenceRequest) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor {
+	switch d.FullName() {
+	default:
+		panic(fmt.Errorf("%s is not a oneof field in opinit.opchild.v1.QueryNextL2SequenceRequest", d.FullName()))
+	}
+	panic("unreachable")
+}
+
+// GetUnknown retrieves the entire list of unknown fields.
+// The caller may only mutate the contents of the RawFields
+// if the mutated bytes are stored back into the message with SetUnknown.
+func (x *fastReflection_QueryNextL2SequenceRequest) GetUnknown() protoreflect.RawFields {
+	return x.unknownFields
+}
+
+// SetUnknown stores an entire list of unknown fields.
+// The raw fields must be syntactically valid according to the wire format.
+// An implementation may panic if this is not the case.
+// Once stored, the caller must not mutate the content of the RawFields.
+// An empty RawFields may be passed to clear the fields.
+//
+// SetUnknown is a mutating operation and unsafe for concurrent use.
+func (x *fastReflection_QueryNextL2SequenceRequest) SetUnknown(fields protoreflect.RawFields) {
+	x.unknownFields = fields
+}
+
+// IsValid reports whether the message is valid.
+//
+// An invalid message is an empty, read-only value.
+//
+// An invalid message often corresponds to a nil pointer of the concrete
+// message type, but the details are implementation dependent.
+// Validity is not part of the protobuf data model, and may not
+// be preserved in marshaling or other operations.
+func (x *fastReflection_QueryNextL2SequenceRequest) IsValid() bool {
+	return x != nil
+}
+
+// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations.
+// This method may return nil.
+//
+// The returned methods type is identical to
+// "google.golang.org/protobuf/runtime/protoiface".Methods.
+// Consult the protoiface package documentation for details.
+func (x *fastReflection_QueryNextL2SequenceRequest) ProtoMethods() *protoiface.Methods {
+	size := func(input protoiface.SizeInput) protoiface.SizeOutput {
+		x := input.Message.Interface().(*QueryNextL2SequenceRequest)
+		if x == nil {
+			return protoiface.SizeOutput{
+				NoUnkeyedLiterals: input.NoUnkeyedLiterals,
+				Size:              0,
+			}
+		}
+		options := runtime.SizeInputToOptions(input)
+		_ = options
+		var n int
+		var l int
+		_ = l
+		if x.unknownFields != nil {
+			n += len(x.unknownFields)
+		}
+		return protoiface.SizeOutput{
+			NoUnkeyedLiterals: input.NoUnkeyedLiterals,
+			Size:              n,
+		}
+	}
+
+	marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) {
+		x := input.Message.Interface().(*QueryNextL2SequenceRequest)
+		if x == nil {
+			return protoiface.MarshalOutput{
+				NoUnkeyedLiterals: input.NoUnkeyedLiterals,
+				Buf:               input.Buf,
+			}, nil
+		}
+		options := runtime.MarshalInputToOptions(input)
+		_ = options
+		size := options.Size(x)
+		dAtA := make([]byte, size)
+		i := len(dAtA)
+		_ = i
+		var l int
+		_ = l
+		if x.unknownFields != nil {
+			i -= len(x.unknownFields)
+			copy(dAtA[i:], x.unknownFields)
+		}
+		if input.Buf != nil {
+			input.Buf = append(input.Buf, dAtA...)
+		} else {
+			input.Buf = dAtA
+		}
+		return protoiface.MarshalOutput{
+			NoUnkeyedLiterals: input.NoUnkeyedLiterals,
+			Buf:               input.Buf,
+		}, nil
+	}
+	unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) {
+		x := input.Message.Interface().(*QueryNextL2SequenceRequest)
+		if x == nil {
+			return protoiface.UnmarshalOutput{
+				NoUnkeyedLiterals: input.NoUnkeyedLiterals,
+				Flags:             input.Flags,
+			}, nil
+		}
+		options := runtime.UnmarshalInputToOptions(input)
+		_ = options
+		dAtA := input.Buf
+		l := len(dAtA)
+		iNdEx := 0
+		for iNdEx < l {
+			preIndex := iNdEx
+			var wire uint64
+			for shift := uint(0); ; shift += 7 {
+				if shift >= 64 {
+					return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow
+				}
+				if iNdEx >= l {
+					return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF
+				}
+				b := dAtA[iNdEx]
+				iNdEx++
+				wire |= uint64(b&0x7F) << shift
+				if b < 0x80 {
+					break
+				}
+			}
+			fieldNum := int32(wire >> 3)
+			wireType := int(wire & 0x7)
+			if wireType == 4 {
+				return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryNextL2SequenceRequest: wiretype end group for non-group")
+			}
+			if fieldNum <= 0 {
+				return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryNextL2SequenceRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+			}
+			switch fieldNum {
+			default:
+				iNdEx = preIndex
+				skippy, err := runtime.Skip(dAtA[iNdEx:])
+				if err != nil {
+					return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err
+				}
+				if (skippy < 0) || (iNdEx+skippy) < 0 {
+					return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength
+				}
+				if (iNdEx + skippy) > l {
+					return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF
+				}
+				if !options.DiscardUnknown {
+					x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...)
+				}
+				iNdEx += skippy
+			}
+		}
+
+		if iNdEx > l {
+			return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF
+		}
+		return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil
+	}
+	return &protoiface.Methods{
+		NoUnkeyedLiterals: struct{}{},
+		Flags:             protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown,
+		Size:              size,
+		Marshal:           marshal,
+		Unmarshal:         unmarshal,
+		Merge:             nil,
+		CheckInitialized:  nil,
+	}
+}
+
+var (
+	md_QueryNextL2SequenceResponse                  protoreflect.MessageDescriptor
+	fd_QueryNextL2SequenceResponse_next_l2_sequence protoreflect.FieldDescriptor
+)
+
+func init() {
+	file_opinit_opchild_v1_query_proto_init()
+	md_QueryNextL2SequenceResponse = File_opinit_opchild_v1_query_proto.Messages().ByName("QueryNextL2SequenceResponse")
+	fd_QueryNextL2SequenceResponse_next_l2_sequence = md_QueryNextL2SequenceResponse.Fields().ByName("next_l2_sequence")
+}
+
+var _ protoreflect.Message = (*fastReflection_QueryNextL2SequenceResponse)(nil)
+
+type fastReflection_QueryNextL2SequenceResponse QueryNextL2SequenceResponse
+
+func (x *QueryNextL2SequenceResponse) ProtoReflect() protoreflect.Message {
+	return (*fastReflection_QueryNextL2SequenceResponse)(x)
+}
+
+func (x *QueryNextL2SequenceResponse) slowProtoReflect() protoreflect.Message {
+	mi := &file_opinit_opchild_v1_query_proto_msgTypes[11]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+var _fastReflection_QueryNextL2SequenceResponse_messageType fastReflection_QueryNextL2SequenceResponse_messageType
+var _ protoreflect.MessageType = fastReflection_QueryNextL2SequenceResponse_messageType{}
+
+type fastReflection_QueryNextL2SequenceResponse_messageType struct{}
+
+func (x fastReflection_QueryNextL2SequenceResponse_messageType) Zero() protoreflect.Message {
+	return (*fastReflection_QueryNextL2SequenceResponse)(nil)
+}
+func (x fastReflection_QueryNextL2SequenceResponse_messageType) New() protoreflect.Message {
+	return new(fastReflection_QueryNextL2SequenceResponse)
+}
+func (x fastReflection_QueryNextL2SequenceResponse_messageType) Descriptor() protoreflect.MessageDescriptor {
+	return md_QueryNextL2SequenceResponse
+}
+
+// Descriptor returns message descriptor, which contains only the protobuf
+// type information for the message.
+func (x *fastReflection_QueryNextL2SequenceResponse) Descriptor() protoreflect.MessageDescriptor {
+	return md_QueryNextL2SequenceResponse
+}
+
+// Type returns the message type, which encapsulates both Go and protobuf
+// type information. If the Go type information is not needed,
+// it is recommended that the message descriptor be used instead.
+func (x *fastReflection_QueryNextL2SequenceResponse) Type() protoreflect.MessageType {
+	return _fastReflection_QueryNextL2SequenceResponse_messageType
+}
+
+// New returns a newly allocated and mutable empty message.
+func (x *fastReflection_QueryNextL2SequenceResponse) New() protoreflect.Message {
+	return new(fastReflection_QueryNextL2SequenceResponse)
+}
+
+// Interface unwraps the message reflection interface and
+// returns the underlying ProtoMessage interface.
+func (x *fastReflection_QueryNextL2SequenceResponse) Interface() protoreflect.ProtoMessage {
+	return (*QueryNextL2SequenceResponse)(x)
+}
+
+// Range iterates over every populated field in an undefined order,
+// calling f for each field descriptor and value encountered.
+// Range returns immediately if f returns false.
+// While iterating, mutating operations may only be performed
+// on the current field descriptor.
+func (x *fastReflection_QueryNextL2SequenceResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) {
+	if x.NextL2Sequence != uint64(0) {
+		value := protoreflect.ValueOfUint64(x.NextL2Sequence)
+		if !f(fd_QueryNextL2SequenceResponse_next_l2_sequence, value) {
+			return
+		}
+	}
+}
+
+// Has reports whether a field is populated.
+//
+// Some fields have the property of nullability where it is possible to
+// distinguish between the default value of a field and whether the field
+// was explicitly populated with the default value. Singular message fields,
+// member fields of a oneof, and proto2 scalar fields are nullable. Such
+// fields are populated only if explicitly set.
+//
+// In other cases (aside from the nullable cases above),
+// a proto3 scalar field is populated if it contains a non-zero value, and
+// a repeated field is populated if it is non-empty.
+func (x *fastReflection_QueryNextL2SequenceResponse) Has(fd protoreflect.FieldDescriptor) bool {
+	switch fd.FullName() {
+	case "opinit.opchild.v1.QueryNextL2SequenceResponse.next_l2_sequence":
+		return x.NextL2Sequence != uint64(0)
+	default:
+		if fd.IsExtension() {
+			panic(fmt.Errorf("proto3 declared messages do not support extensions: opinit.opchild.v1.QueryNextL2SequenceResponse"))
+		}
+		panic(fmt.Errorf("message opinit.opchild.v1.QueryNextL2SequenceResponse does not contain field %s", fd.FullName()))
+	}
+}
+
+// Clear clears the field such that a subsequent Has call reports false.
+//
+// Clearing an extension field clears both the extension type and value
+// associated with the given field number.
+//
+// Clear is a mutating operation and unsafe for concurrent use.
+func (x *fastReflection_QueryNextL2SequenceResponse) Clear(fd protoreflect.FieldDescriptor) {
+	switch fd.FullName() {
+	case "opinit.opchild.v1.QueryNextL2SequenceResponse.next_l2_sequence":
+		x.NextL2Sequence = uint64(0)
+	default:
+		if fd.IsExtension() {
+			panic(fmt.Errorf("proto3 declared messages do not support extensions: opinit.opchild.v1.QueryNextL2SequenceResponse"))
+		}
+		panic(fmt.Errorf("message opinit.opchild.v1.QueryNextL2SequenceResponse does not contain field %s", fd.FullName()))
+	}
+}
+
+// Get retrieves the value for a field.
+//
+// For unpopulated scalars, it returns the default value, where
+// the default value of a bytes scalar is guaranteed to be a copy.
+// For unpopulated composite types, it returns an empty, read-only view
+// of the value; to obtain a mutable reference, use Mutable.
+func (x *fastReflection_QueryNextL2SequenceResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value {
+	switch descriptor.FullName() {
+	case "opinit.opchild.v1.QueryNextL2SequenceResponse.next_l2_sequence":
+		value := x.NextL2Sequence
+		return protoreflect.ValueOfUint64(value)
+	default:
+		if descriptor.IsExtension() {
+			panic(fmt.Errorf("proto3 declared messages do not support extensions: opinit.opchild.v1.QueryNextL2SequenceResponse"))
+		}
+		panic(fmt.Errorf("message opinit.opchild.v1.QueryNextL2SequenceResponse does not contain field %s", descriptor.FullName()))
+	}
+}
+
+// Set stores the value for a field.
+//
+// For a field belonging to a oneof, it implicitly clears any other field
+// that may be currently set within the same oneof.
+// For extension fields, it implicitly stores the provided ExtensionType.
+// When setting a composite type, it is unspecified whether the stored value
+// aliases the source's memory in any way. If the composite value is an
+// empty, read-only value, then it panics.
+//
+// Set is a mutating operation and unsafe for concurrent use.
+func (x *fastReflection_QueryNextL2SequenceResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) {
+	switch fd.FullName() {
+	case "opinit.opchild.v1.QueryNextL2SequenceResponse.next_l2_sequence":
+		x.NextL2Sequence = value.Uint()
+	default:
+		if fd.IsExtension() {
+			panic(fmt.Errorf("proto3 declared messages do not support extensions: opinit.opchild.v1.QueryNextL2SequenceResponse"))
+		}
+		panic(fmt.Errorf("message opinit.opchild.v1.QueryNextL2SequenceResponse does not contain field %s", fd.FullName()))
+	}
+}
+
+// Mutable returns a mutable reference to a composite type.
+//
+// If the field is unpopulated, it may allocate a composite value.
+// For a field belonging to a oneof, it implicitly clears any other field
+// that may be currently set within the same oneof.
+// For extension fields, it implicitly stores the provided ExtensionType
+// if not already stored.
+// It panics if the field does not contain a composite type.
+//
+// Mutable is a mutating operation and unsafe for concurrent use.
+func (x *fastReflection_QueryNextL2SequenceResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value {
+	switch fd.FullName() {
+	case "opinit.opchild.v1.QueryNextL2SequenceResponse.next_l2_sequence":
+		panic(fmt.Errorf("field next_l2_sequence of message opinit.opchild.v1.QueryNextL2SequenceResponse is not mutable"))
+	default:
+		if fd.IsExtension() {
+			panic(fmt.Errorf("proto3 declared messages do not support extensions: opinit.opchild.v1.QueryNextL2SequenceResponse"))
+		}
+		panic(fmt.Errorf("message opinit.opchild.v1.QueryNextL2SequenceResponse does not contain field %s", fd.FullName()))
+	}
+}
+
+// NewField returns a new value that is assignable to the field
+// for the given descriptor. For scalars, this returns the default value.
+// For lists, maps, and messages, this returns a new, empty, mutable value.
+func (x *fastReflection_QueryNextL2SequenceResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value {
+	switch fd.FullName() {
+	case "opinit.opchild.v1.QueryNextL2SequenceResponse.next_l2_sequence":
+		return protoreflect.ValueOfUint64(uint64(0))
+	default:
+		if fd.IsExtension() {
+			panic(fmt.Errorf("proto3 declared messages do not support extensions: opinit.opchild.v1.QueryNextL2SequenceResponse"))
+		}
+		panic(fmt.Errorf("message opinit.opchild.v1.QueryNextL2SequenceResponse does not contain field %s", fd.FullName()))
+	}
+}
+
+// WhichOneof reports which field within the oneof is populated,
+// returning nil if none are populated.
+// It panics if the oneof descriptor does not belong to this message.
+func (x *fastReflection_QueryNextL2SequenceResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor {
+	switch d.FullName() {
+	default:
+		panic(fmt.Errorf("%s is not a oneof field in opinit.opchild.v1.QueryNextL2SequenceResponse", d.FullName()))
+	}
+	panic("unreachable")
+}
+
+// GetUnknown retrieves the entire list of unknown fields.
+// The caller may only mutate the contents of the RawFields
+// if the mutated bytes are stored back into the message with SetUnknown.
+func (x *fastReflection_QueryNextL2SequenceResponse) GetUnknown() protoreflect.RawFields {
+	return x.unknownFields
+}
+
+// SetUnknown stores an entire list of unknown fields.
+// The raw fields must be syntactically valid according to the wire format.
+// An implementation may panic if this is not the case.
+// Once stored, the caller must not mutate the content of the RawFields.
+// An empty RawFields may be passed to clear the fields.
+//
+// SetUnknown is a mutating operation and unsafe for concurrent use.
+func (x *fastReflection_QueryNextL2SequenceResponse) SetUnknown(fields protoreflect.RawFields) {
+	x.unknownFields = fields
+}
+
+// IsValid reports whether the message is valid.
+//
+// An invalid message is an empty, read-only value.
+//
+// An invalid message often corresponds to a nil pointer of the concrete
+// message type, but the details are implementation dependent.
+// Validity is not part of the protobuf data model, and may not
+// be preserved in marshaling or other operations.
+func (x *fastReflection_QueryNextL2SequenceResponse) IsValid() bool {
+	return x != nil
+}
+
+// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations.
+// This method may return nil.
+//
+// The returned methods type is identical to
+// "google.golang.org/protobuf/runtime/protoiface".Methods.
+// Consult the protoiface package documentation for details.
+func (x *fastReflection_QueryNextL2SequenceResponse) ProtoMethods() *protoiface.Methods {
+	size := func(input protoiface.SizeInput) protoiface.SizeOutput {
+		x := input.Message.Interface().(*QueryNextL2SequenceResponse)
+		if x == nil {
+			return protoiface.SizeOutput{
+				NoUnkeyedLiterals: input.NoUnkeyedLiterals,
+				Size:              0,
+			}
+		}
+		options := runtime.SizeInputToOptions(input)
+		_ = options
+		var n int
+		var l int
+		_ = l
+		if x.NextL2Sequence != 0 {
+			n += 1 + runtime.Sov(uint64(x.NextL2Sequence))
+		}
+		if x.unknownFields != nil {
+			n += len(x.unknownFields)
+		}
+		return protoiface.SizeOutput{
+			NoUnkeyedLiterals: input.NoUnkeyedLiterals,
+			Size:              n,
+		}
+	}
+
+	marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) {
+		x := input.Message.Interface().(*QueryNextL2SequenceResponse)
+		if x == nil {
+			return protoiface.MarshalOutput{
+				NoUnkeyedLiterals: input.NoUnkeyedLiterals,
+				Buf:               input.Buf,
+			}, nil
+		}
+		options := runtime.MarshalInputToOptions(input)
+		_ = options
+		size := options.Size(x)
+		dAtA := make([]byte, size)
+		i := len(dAtA)
+		_ = i
+		var l int
+		_ = l
+		if x.unknownFields != nil {
+			i -= len(x.unknownFields)
+			copy(dAtA[i:], x.unknownFields)
+		}
+		if x.NextL2Sequence != 0 {
+			i = runtime.EncodeVarint(dAtA, i, uint64(x.NextL2Sequence))
+			i--
+			dAtA[i] = 0x8
+		}
+		if input.Buf != nil {
+			input.Buf = append(input.Buf, dAtA...)
+		} else {
+			input.Buf = dAtA
+		}
+		return protoiface.MarshalOutput{
+			NoUnkeyedLiterals: input.NoUnkeyedLiterals,
+			Buf:               input.Buf,
+		}, nil
+	}
+	unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) {
+		x := input.Message.Interface().(*QueryNextL2SequenceResponse)
+		if x == nil {
+			return protoiface.UnmarshalOutput{
+				NoUnkeyedLiterals: input.NoUnkeyedLiterals,
+				Flags:             input.Flags,
+			}, nil
+		}
+		options := runtime.UnmarshalInputToOptions(input)
+		_ = options
+		dAtA := input.Buf
+		l := len(dAtA)
+		iNdEx := 0
+		for iNdEx < l {
+			preIndex := iNdEx
+			var wire uint64
+			for shift := uint(0); ; shift += 7 {
+				if shift >= 64 {
+					return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow
+				}
+				if iNdEx >= l {
+					return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF
+				}
+				b := dAtA[iNdEx]
+				iNdEx++
+				wire |= uint64(b&0x7F) << shift
+				if b < 0x80 {
+					break
+				}
+			}
+			fieldNum := int32(wire >> 3)
+			wireType := int(wire & 0x7)
+			if wireType == 4 {
+				return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryNextL2SequenceResponse: wiretype end group for non-group")
+			}
+			if fieldNum <= 0 {
+				return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryNextL2SequenceResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+			}
+			switch fieldNum {
+			case 1:
+				if wireType != 0 {
+					return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field NextL2Sequence", wireType)
+				}
+				x.NextL2Sequence = 0
+				for shift := uint(0); ; shift += 7 {
+					if shift >= 64 {
+						return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow
+					}
+					if iNdEx >= l {
+						return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF
+					}
+					b := dAtA[iNdEx]
+					iNdEx++
+					x.NextL2Sequence |= uint64(b&0x7F) << shift
+					if b < 0x80 {
+						break
+					}
+				}
+			default:
+				iNdEx = preIndex
+				skippy, err := runtime.Skip(dAtA[iNdEx:])
+				if err != nil {
+					return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err
+				}
+				if (skippy < 0) || (iNdEx+skippy) < 0 {
+					return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength
+				}
+				if (iNdEx + skippy) > l {
+					return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF
+				}
+				if !options.DiscardUnknown {
+					x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...)
+				}
+				iNdEx += skippy
+			}
+		}
+
+		if iNdEx > l {
+			return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF
+		}
+		return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil
+	}
+	return &protoiface.Methods{
+		NoUnkeyedLiterals: struct{}{},
+		Flags:             protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown,
+		Size:              size,
+		Marshal:           marshal,
+		Unmarshal:         unmarshal,
+		Merge:             nil,
+		CheckInitialized:  nil,
+	}
+}
+
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // versions:
 // 	protoc-gen-go v1.27.0
@@ -3761,6 +5281,134 @@ func (x *QueryParamsResponse) GetParams() *Params {
 	return nil
 }
 
+// QueryNextL1SequenceRequest is request type for the Query/NextL1Sequence RPC method.
+type QueryNextL1SequenceRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+}
+
+func (x *QueryNextL1SequenceRequest) Reset() {
+	*x = QueryNextL1SequenceRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_opinit_opchild_v1_query_proto_msgTypes[8]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *QueryNextL1SequenceRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*QueryNextL1SequenceRequest) ProtoMessage() {}
+
+// Deprecated: Use QueryNextL1SequenceRequest.ProtoReflect.Descriptor instead.
+func (*QueryNextL1SequenceRequest) Descriptor() ([]byte, []int) {
+	return file_opinit_opchild_v1_query_proto_rawDescGZIP(), []int{8}
+}
+
+// QueryNextL1SequenceResponse is response type for the Query/NextL1Sequence RPC method.
+type QueryNextL1SequenceResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// next_l1_sequence holds the next l1 sequence number.
+	NextL1Sequence uint64 `protobuf:"varint,1,opt,name=next_l1_sequence,json=nextL1Sequence,proto3" json:"next_l1_sequence,omitempty"`
+}
+
+func (x *QueryNextL1SequenceResponse) Reset() {
+	*x = QueryNextL1SequenceResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_opinit_opchild_v1_query_proto_msgTypes[9]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *QueryNextL1SequenceResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*QueryNextL1SequenceResponse) ProtoMessage() {}
+
+// Deprecated: Use QueryNextL1SequenceResponse.ProtoReflect.Descriptor instead.
+func (*QueryNextL1SequenceResponse) Descriptor() ([]byte, []int) {
+	return file_opinit_opchild_v1_query_proto_rawDescGZIP(), []int{9}
+}
+
+func (x *QueryNextL1SequenceResponse) GetNextL1Sequence() uint64 {
+	if x != nil {
+		return x.NextL1Sequence
+	}
+	return 0
+}
+
+// QueryNextL2SequenceRequest is request type for the Query/NextL2Sequence RPC method.
+type QueryNextL2SequenceRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+}
+
+func (x *QueryNextL2SequenceRequest) Reset() {
+	*x = QueryNextL2SequenceRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_opinit_opchild_v1_query_proto_msgTypes[10]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *QueryNextL2SequenceRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*QueryNextL2SequenceRequest) ProtoMessage() {}
+
+// Deprecated: Use QueryNextL2SequenceRequest.ProtoReflect.Descriptor instead.
+func (*QueryNextL2SequenceRequest) Descriptor() ([]byte, []int) {
+	return file_opinit_opchild_v1_query_proto_rawDescGZIP(), []int{10}
+}
+
+// QueryNextL2SequenceResponse is response type for the Query/NextL2Sequence RPC method.
+type QueryNextL2SequenceResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// next_l2_sequence holds the next l2 sequence number.
+	NextL2Sequence uint64 `protobuf:"varint,1,opt,name=next_l2_sequence,json=nextL2Sequence,proto3" json:"next_l2_sequence,omitempty"`
+}
+
+func (x *QueryNextL2SequenceResponse) Reset() {
+	*x = QueryNextL2SequenceResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_opinit_opchild_v1_query_proto_msgTypes[11]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *QueryNextL2SequenceResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*QueryNextL2SequenceResponse) ProtoMessage() {}
+
+// Deprecated: Use QueryNextL2SequenceResponse.ProtoReflect.Descriptor instead.
+func (*QueryNextL2SequenceResponse) Descriptor() ([]byte, []int) {
+	return file_opinit_opchild_v1_query_proto_rawDescGZIP(), []int{11}
+}
+
+func (x *QueryNextL2SequenceResponse) GetNextL2Sequence() uint64 {
+	if x != nil {
+		return x.NextL2Sequence
+	}
+	return 0
+}
+
 var File_opinit_opchild_v1_query_proto protoreflect.FileDescriptor
 
 var file_opinit_opchild_v1_query_proto_rawDesc = []byte{
@@ -3823,57 +5471,90 @@ var file_opinit_opchild_v1_query_proto_rawDesc = []byte{
 	0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6f, 0x70, 0x69, 0x6e, 0x69, 0x74, 0x2e, 0x6f, 0x70,
 	0x63, 0x68, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x42,
 	0x09, 0xc8, 0xde, 0x1f, 0x00, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x06, 0x70, 0x61, 0x72, 0x61,
-	0x6d, 0x73, 0x32, 0xcc, 0x04, 0x0a, 0x05, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x8f, 0x01, 0x0a,
-	0x0a, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x12, 0x29, 0x2e, 0x6f, 0x70,
-	0x69, 0x6e, 0x69, 0x74, 0x2e, 0x6f, 0x70, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e,
-	0x51, 0x75, 0x65, 0x72, 0x79, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x52,
-	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x6f, 0x70, 0x69, 0x6e, 0x69, 0x74, 0x2e,
-	0x6f, 0x70, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79,
-	0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
-	0x73, 0x65, 0x22, 0x2a, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x12,
-	0x1d, 0x2f, 0x6f, 0x70, 0x69, 0x6e, 0x69, 0x74, 0x2f, 0x6f, 0x70, 0x63, 0x68, 0x69, 0x6c, 0x64,
-	0x2f, 0x76, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x12, 0x9c,
-	0x01, 0x0a, 0x09, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x28, 0x2e, 0x6f,
-	0x70, 0x69, 0x6e, 0x69, 0x74, 0x2e, 0x6f, 0x70, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31,
-	0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52,
-	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x6f, 0x70, 0x69, 0x6e, 0x69, 0x74, 0x2e,
-	0x6f, 0x70, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79,
-	0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
-	0x65, 0x22, 0x3a, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x12, 0x2d,
-	0x2f, 0x6f, 0x70, 0x69, 0x6e, 0x69, 0x74, 0x2f, 0x6f, 0x70, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x2f,
-	0x76, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x7b, 0x76, 0x61,
-	0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x7d, 0x12, 0x90, 0x01,
-	0x0a, 0x0a, 0x42, 0x72, 0x69, 0x64, 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x29, 0x2e, 0x6f,
-	0x70, 0x69, 0x6e, 0x69, 0x74, 0x2e, 0x6f, 0x70, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31,
-	0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x42, 0x72, 0x69, 0x64, 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f,
-	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x6f, 0x70, 0x69, 0x6e, 0x69, 0x74,
-	0x2e, 0x6f, 0x70, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72,
-	0x79, 0x42, 0x72, 0x69, 0x64, 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f,
-	0x6e, 0x73, 0x65, 0x22, 0x2b, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20,
-	0x12, 0x1e, 0x2f, 0x6f, 0x70, 0x69, 0x6e, 0x69, 0x74, 0x2f, 0x6f, 0x70, 0x63, 0x68, 0x69, 0x6c,
-	0x64, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f,
-	0x12, 0x7f, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x25, 0x2e, 0x6f, 0x70, 0x69,
+	0x6d, 0x73, 0x22, 0x1c, 0x0a, 0x1a, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4e, 0x65, 0x78, 0x74, 0x4c,
+	0x31, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+	0x22, 0x47, 0x0a, 0x1b, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4e, 0x65, 0x78, 0x74, 0x4c, 0x31, 0x53,
+	0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
+	0x28, 0x0a, 0x10, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x6c, 0x31, 0x5f, 0x73, 0x65, 0x71, 0x75, 0x65,
+	0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x6e, 0x65, 0x78, 0x74, 0x4c,
+	0x31, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x22, 0x1c, 0x0a, 0x1a, 0x51, 0x75, 0x65,
+	0x72, 0x79, 0x4e, 0x65, 0x78, 0x74, 0x4c, 0x32, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65,
+	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x47, 0x0a, 0x1b, 0x51, 0x75, 0x65, 0x72, 0x79,
+	0x4e, 0x65, 0x78, 0x74, 0x4c, 0x32, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x65,
+	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x6c,
+	0x32, 0x5f, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04,
+	0x52, 0x0e, 0x6e, 0x65, 0x78, 0x74, 0x4c, 0x32, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65,
+	0x32, 0x94, 0x07, 0x0a, 0x05, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x8f, 0x01, 0x0a, 0x0a, 0x56,
+	0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x12, 0x29, 0x2e, 0x6f, 0x70, 0x69, 0x6e,
+	0x69, 0x74, 0x2e, 0x6f, 0x70, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75,
+	0x65, 0x72, 0x79, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x52, 0x65, 0x71,
+	0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x6f, 0x70, 0x69, 0x6e, 0x69, 0x74, 0x2e, 0x6f, 0x70,
+	0x63, 0x68, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x56, 0x61,
+	0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+	0x22, 0x2a, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x12, 0x1d, 0x2f,
+	0x6f, 0x70, 0x69, 0x6e, 0x69, 0x74, 0x2f, 0x6f, 0x70, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x2f, 0x76,
+	0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x12, 0x9c, 0x01, 0x0a,
+	0x09, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x28, 0x2e, 0x6f, 0x70, 0x69,
+	0x6e, 0x69, 0x74, 0x2e, 0x6f, 0x70, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x51,
+	0x75, 0x65, 0x72, 0x79, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71,
+	0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x6f, 0x70, 0x69, 0x6e, 0x69, 0x74, 0x2e, 0x6f, 0x70,
+	0x63, 0x68, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x56, 0x61,
+	0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
+	0x3a, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x12, 0x2d, 0x2f, 0x6f,
+	0x70, 0x69, 0x6e, 0x69, 0x74, 0x2f, 0x6f, 0x70, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x2f, 0x76, 0x31,
+	0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x69,
+	0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x7d, 0x12, 0x90, 0x01, 0x0a, 0x0a,
+	0x42, 0x72, 0x69, 0x64, 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x29, 0x2e, 0x6f, 0x70, 0x69,
 	0x6e, 0x69, 0x74, 0x2e, 0x6f, 0x70, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x51,
-	0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
-	0x74, 0x1a, 0x26, 0x2e, 0x6f, 0x70, 0x69, 0x6e, 0x69, 0x74, 0x2e, 0x6f, 0x70, 0x63, 0x68, 0x69,
-	0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d,
-	0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x26, 0x88, 0xe7, 0xb0, 0x2a, 0x01,
-	0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x12, 0x19, 0x2f, 0x6f, 0x70, 0x69, 0x6e, 0x69, 0x74, 0x2f,
-	0x6f, 0x70, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d,
-	0x73, 0x42, 0xc8, 0x01, 0x0a, 0x15, 0x63, 0x6f, 0x6d, 0x2e, 0x6f, 0x70, 0x69, 0x6e, 0x69, 0x74,
-	0x2e, 0x6f, 0x70, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x42, 0x0a, 0x51, 0x75, 0x65,
-	0x72, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x3d, 0x67, 0x69, 0x74, 0x68, 0x75,
-	0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x2d, 0x6c, 0x61, 0x62,
-	0x73, 0x2f, 0x4f, 0x50, 0x69, 0x6e, 0x69, 0x74, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6f, 0x70, 0x69,
-	0x6e, 0x69, 0x74, 0x2f, 0x6f, 0x70, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x2f, 0x76, 0x31, 0x3b, 0x6f,
-	0x70, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4f, 0x4f, 0x58, 0xaa, 0x02,
-	0x11, 0x4f, 0x70, 0x69, 0x6e, 0x69, 0x74, 0x2e, 0x4f, 0x70, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x2e,
-	0x56, 0x31, 0xca, 0x02, 0x11, 0x4f, 0x70, 0x69, 0x6e, 0x69, 0x74, 0x5c, 0x4f, 0x70, 0x63, 0x68,
-	0x69, 0x6c, 0x64, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x1d, 0x4f, 0x70, 0x69, 0x6e, 0x69, 0x74, 0x5c,
-	0x4f, 0x70, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65,
-	0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x13, 0x4f, 0x70, 0x69, 0x6e, 0x69, 0x74, 0x3a,
-	0x3a, 0x4f, 0x70, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72,
-	0x6f, 0x74, 0x6f, 0x33,
+	0x75, 0x65, 0x72, 0x79, 0x42, 0x72, 0x69, 0x64, 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65,
+	0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x6f, 0x70, 0x69, 0x6e, 0x69, 0x74, 0x2e, 0x6f,
+	0x70, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x42,
+	0x72, 0x69, 0x64, 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+	0x65, 0x22, 0x2b, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x12, 0x1e,
+	0x2f, 0x6f, 0x70, 0x69, 0x6e, 0x69, 0x74, 0x2f, 0x6f, 0x70, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x2f,
+	0x76, 0x31, 0x2f, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x12, 0x7f,
+	0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x25, 0x2e, 0x6f, 0x70, 0x69, 0x6e, 0x69,
+	0x74, 0x2e, 0x6f, 0x70, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65,
+	0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
+	0x26, 0x2e, 0x6f, 0x70, 0x69, 0x6e, 0x69, 0x74, 0x2e, 0x6f, 0x70, 0x63, 0x68, 0x69, 0x6c, 0x64,
+	0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52,
+	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x26, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3,
+	0xe4, 0x93, 0x02, 0x1b, 0x12, 0x19, 0x2f, 0x6f, 0x70, 0x69, 0x6e, 0x69, 0x74, 0x2f, 0x6f, 0x70,
+	0x63, 0x68, 0x69, 0x6c, 0x64, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12,
+	0xa1, 0x01, 0x0a, 0x0e, 0x4e, 0x65, 0x78, 0x74, 0x4c, 0x31, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e,
+	0x63, 0x65, 0x12, 0x2d, 0x2e, 0x6f, 0x70, 0x69, 0x6e, 0x69, 0x74, 0x2e, 0x6f, 0x70, 0x63, 0x68,
+	0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4e, 0x65, 0x78, 0x74,
+	0x4c, 0x31, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+	0x74, 0x1a, 0x2e, 0x2e, 0x6f, 0x70, 0x69, 0x6e, 0x69, 0x74, 0x2e, 0x6f, 0x70, 0x63, 0x68, 0x69,
+	0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4e, 0x65, 0x78, 0x74, 0x4c,
+	0x31, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+	0x65, 0x22, 0x30, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x12, 0x23,
+	0x2f, 0x6f, 0x70, 0x69, 0x6e, 0x69, 0x74, 0x2f, 0x6f, 0x70, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x2f,
+	0x76, 0x31, 0x2f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x6c, 0x31, 0x5f, 0x73, 0x65, 0x71, 0x75, 0x65,
+	0x6e, 0x63, 0x65, 0x12, 0xa1, 0x01, 0x0a, 0x0e, 0x4e, 0x65, 0x78, 0x74, 0x4c, 0x32, 0x53, 0x65,
+	0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x2d, 0x2e, 0x6f, 0x70, 0x69, 0x6e, 0x69, 0x74, 0x2e,
+	0x6f, 0x70, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79,
+	0x4e, 0x65, 0x78, 0x74, 0x4c, 0x32, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x65,
+	0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x6f, 0x70, 0x69, 0x6e, 0x69, 0x74, 0x2e, 0x6f,
+	0x70, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4e,
+	0x65, 0x78, 0x74, 0x4c, 0x32, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x73,
+	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x30, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93,
+	0x02, 0x25, 0x12, 0x23, 0x2f, 0x6f, 0x70, 0x69, 0x6e, 0x69, 0x74, 0x2f, 0x6f, 0x70, 0x63, 0x68,
+	0x69, 0x6c, 0x64, 0x2f, 0x76, 0x31, 0x2f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x6c, 0x32, 0x5f, 0x73,
+	0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x42, 0xc8, 0x01, 0x0a, 0x15, 0x63, 0x6f, 0x6d, 0x2e,
+	0x6f, 0x70, 0x69, 0x6e, 0x69, 0x74, 0x2e, 0x6f, 0x70, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x2e, 0x76,
+	0x31, 0x42, 0x0a, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a,
+	0x3d, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x6e, 0x69, 0x74,
+	0x69, 0x61, 0x2d, 0x6c, 0x61, 0x62, 0x73, 0x2f, 0x4f, 0x50, 0x69, 0x6e, 0x69, 0x74, 0x2f, 0x61,
+	0x70, 0x69, 0x2f, 0x6f, 0x70, 0x69, 0x6e, 0x69, 0x74, 0x2f, 0x6f, 0x70, 0x63, 0x68, 0x69, 0x6c,
+	0x64, 0x2f, 0x76, 0x31, 0x3b, 0x6f, 0x70, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x76, 0x31, 0xa2, 0x02,
+	0x03, 0x4f, 0x4f, 0x58, 0xaa, 0x02, 0x11, 0x4f, 0x70, 0x69, 0x6e, 0x69, 0x74, 0x2e, 0x4f, 0x70,
+	0x63, 0x68, 0x69, 0x6c, 0x64, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x11, 0x4f, 0x70, 0x69, 0x6e, 0x69,
+	0x74, 0x5c, 0x4f, 0x70, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x1d, 0x4f,
+	0x70, 0x69, 0x6e, 0x69, 0x74, 0x5c, 0x4f, 0x70, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x5c, 0x56, 0x31,
+	0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x13, 0x4f,
+	0x70, 0x69, 0x6e, 0x69, 0x74, 0x3a, 0x3a, 0x4f, 0x70, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x3a, 0x3a,
+	0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
 var (
@@ -3888,39 +5569,47 @@ func file_opinit_opchild_v1_query_proto_rawDescGZIP() []byte {
 	return file_opinit_opchild_v1_query_proto_rawDescData
 }
 
-var file_opinit_opchild_v1_query_proto_msgTypes = make([]protoimpl.MessageInfo, 8)
+var file_opinit_opchild_v1_query_proto_msgTypes = make([]protoimpl.MessageInfo, 12)
 var file_opinit_opchild_v1_query_proto_goTypes = []interface{}{
-	(*QueryValidatorsRequest)(nil),  // 0: opinit.opchild.v1.QueryValidatorsRequest
-	(*QueryValidatorsResponse)(nil), // 1: opinit.opchild.v1.QueryValidatorsResponse
-	(*QueryValidatorRequest)(nil),   // 2: opinit.opchild.v1.QueryValidatorRequest
-	(*QueryValidatorResponse)(nil),  // 3: opinit.opchild.v1.QueryValidatorResponse
-	(*QueryBridgeInfoRequest)(nil),  // 4: opinit.opchild.v1.QueryBridgeInfoRequest
-	(*QueryBridgeInfoResponse)(nil), // 5: opinit.opchild.v1.QueryBridgeInfoResponse
-	(*QueryParamsRequest)(nil),      // 6: opinit.opchild.v1.QueryParamsRequest
-	(*QueryParamsResponse)(nil),     // 7: opinit.opchild.v1.QueryParamsResponse
-	(*v1beta1.PageRequest)(nil),     // 8: cosmos.base.query.v1beta1.PageRequest
-	(*Validator)(nil),               // 9: opinit.opchild.v1.Validator
-	(*v1beta1.PageResponse)(nil),    // 10: cosmos.base.query.v1beta1.PageResponse
-	(*BridgeInfo)(nil),              // 11: opinit.opchild.v1.BridgeInfo
-	(*Params)(nil),                  // 12: opinit.opchild.v1.Params
+	(*QueryValidatorsRequest)(nil),      // 0: opinit.opchild.v1.QueryValidatorsRequest
+	(*QueryValidatorsResponse)(nil),     // 1: opinit.opchild.v1.QueryValidatorsResponse
+	(*QueryValidatorRequest)(nil),       // 2: opinit.opchild.v1.QueryValidatorRequest
+	(*QueryValidatorResponse)(nil),      // 3: opinit.opchild.v1.QueryValidatorResponse
+	(*QueryBridgeInfoRequest)(nil),      // 4: opinit.opchild.v1.QueryBridgeInfoRequest
+	(*QueryBridgeInfoResponse)(nil),     // 5: opinit.opchild.v1.QueryBridgeInfoResponse
+	(*QueryParamsRequest)(nil),          // 6: opinit.opchild.v1.QueryParamsRequest
+	(*QueryParamsResponse)(nil),         // 7: opinit.opchild.v1.QueryParamsResponse
+	(*QueryNextL1SequenceRequest)(nil),  // 8: opinit.opchild.v1.QueryNextL1SequenceRequest
+	(*QueryNextL1SequenceResponse)(nil), // 9: opinit.opchild.v1.QueryNextL1SequenceResponse
+	(*QueryNextL2SequenceRequest)(nil),  // 10: opinit.opchild.v1.QueryNextL2SequenceRequest
+	(*QueryNextL2SequenceResponse)(nil), // 11: opinit.opchild.v1.QueryNextL2SequenceResponse
+	(*v1beta1.PageRequest)(nil),         // 12: cosmos.base.query.v1beta1.PageRequest
+	(*Validator)(nil),                   // 13: opinit.opchild.v1.Validator
+	(*v1beta1.PageResponse)(nil),        // 14: cosmos.base.query.v1beta1.PageResponse
+	(*BridgeInfo)(nil),                  // 15: opinit.opchild.v1.BridgeInfo
+	(*Params)(nil),                      // 16: opinit.opchild.v1.Params
 }
 var file_opinit_opchild_v1_query_proto_depIdxs = []int32{
-	8,  // 0: opinit.opchild.v1.QueryValidatorsRequest.pagination:type_name -> cosmos.base.query.v1beta1.PageRequest
-	9,  // 1: opinit.opchild.v1.QueryValidatorsResponse.validators:type_name -> opinit.opchild.v1.Validator
-	10, // 2: opinit.opchild.v1.QueryValidatorsResponse.pagination:type_name -> cosmos.base.query.v1beta1.PageResponse
-	9,  // 3: opinit.opchild.v1.QueryValidatorResponse.validator:type_name -> opinit.opchild.v1.Validator
-	11, // 4: opinit.opchild.v1.QueryBridgeInfoResponse.bridge_info:type_name -> opinit.opchild.v1.BridgeInfo
-	12, // 5: opinit.opchild.v1.QueryParamsResponse.params:type_name -> opinit.opchild.v1.Params
+	12, // 0: opinit.opchild.v1.QueryValidatorsRequest.pagination:type_name -> cosmos.base.query.v1beta1.PageRequest
+	13, // 1: opinit.opchild.v1.QueryValidatorsResponse.validators:type_name -> opinit.opchild.v1.Validator
+	14, // 2: opinit.opchild.v1.QueryValidatorsResponse.pagination:type_name -> cosmos.base.query.v1beta1.PageResponse
+	13, // 3: opinit.opchild.v1.QueryValidatorResponse.validator:type_name -> opinit.opchild.v1.Validator
+	15, // 4: opinit.opchild.v1.QueryBridgeInfoResponse.bridge_info:type_name -> opinit.opchild.v1.BridgeInfo
+	16, // 5: opinit.opchild.v1.QueryParamsResponse.params:type_name -> opinit.opchild.v1.Params
 	0,  // 6: opinit.opchild.v1.Query.Validators:input_type -> opinit.opchild.v1.QueryValidatorsRequest
 	2,  // 7: opinit.opchild.v1.Query.Validator:input_type -> opinit.opchild.v1.QueryValidatorRequest
 	4,  // 8: opinit.opchild.v1.Query.BridgeInfo:input_type -> opinit.opchild.v1.QueryBridgeInfoRequest
 	6,  // 9: opinit.opchild.v1.Query.Params:input_type -> opinit.opchild.v1.QueryParamsRequest
-	1,  // 10: opinit.opchild.v1.Query.Validators:output_type -> opinit.opchild.v1.QueryValidatorsResponse
-	3,  // 11: opinit.opchild.v1.Query.Validator:output_type -> opinit.opchild.v1.QueryValidatorResponse
-	5,  // 12: opinit.opchild.v1.Query.BridgeInfo:output_type -> opinit.opchild.v1.QueryBridgeInfoResponse
-	7,  // 13: opinit.opchild.v1.Query.Params:output_type -> opinit.opchild.v1.QueryParamsResponse
-	10, // [10:14] is the sub-list for method output_type
-	6,  // [6:10] is the sub-list for method input_type
+	8,  // 10: opinit.opchild.v1.Query.NextL1Sequence:input_type -> opinit.opchild.v1.QueryNextL1SequenceRequest
+	10, // 11: opinit.opchild.v1.Query.NextL2Sequence:input_type -> opinit.opchild.v1.QueryNextL2SequenceRequest
+	1,  // 12: opinit.opchild.v1.Query.Validators:output_type -> opinit.opchild.v1.QueryValidatorsResponse
+	3,  // 13: opinit.opchild.v1.Query.Validator:output_type -> opinit.opchild.v1.QueryValidatorResponse
+	5,  // 14: opinit.opchild.v1.Query.BridgeInfo:output_type -> opinit.opchild.v1.QueryBridgeInfoResponse
+	7,  // 15: opinit.opchild.v1.Query.Params:output_type -> opinit.opchild.v1.QueryParamsResponse
+	9,  // 16: opinit.opchild.v1.Query.NextL1Sequence:output_type -> opinit.opchild.v1.QueryNextL1SequenceResponse
+	11, // 17: opinit.opchild.v1.Query.NextL2Sequence:output_type -> opinit.opchild.v1.QueryNextL2SequenceResponse
+	12, // [12:18] is the sub-list for method output_type
+	6,  // [6:12] is the sub-list for method input_type
 	6,  // [6:6] is the sub-list for extension type_name
 	6,  // [6:6] is the sub-list for extension extendee
 	0,  // [0:6] is the sub-list for field type_name
@@ -4029,6 +5718,54 @@ func file_opinit_opchild_v1_query_proto_init() {
 				return nil
 			}
 		}
+		file_opinit_opchild_v1_query_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*QueryNextL1SequenceRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_opinit_opchild_v1_query_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*QueryNextL1SequenceResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_opinit_opchild_v1_query_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*QueryNextL2SequenceRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_opinit_opchild_v1_query_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*QueryNextL2SequenceResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
 	}
 	type x struct{}
 	out := protoimpl.TypeBuilder{
@@ -4036,7 +5773,7 @@ func file_opinit_opchild_v1_query_proto_init() {
 			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
 			RawDescriptor: file_opinit_opchild_v1_query_proto_rawDesc,
 			NumEnums:      0,
-			NumMessages:   8,
+			NumMessages:   12,
 			NumExtensions: 0,
 			NumServices:   1,
 		},
diff --git a/api/opinit/opchild/v1/query_grpc.pb.go b/api/opinit/opchild/v1/query_grpc.pb.go
index 023876f6..acedb869 100644
--- a/api/opinit/opchild/v1/query_grpc.pb.go
+++ b/api/opinit/opchild/v1/query_grpc.pb.go
@@ -19,10 +19,12 @@ import (
 const _ = grpc.SupportPackageIsVersion8
 
 const (
-	Query_Validators_FullMethodName = "/opinit.opchild.v1.Query/Validators"
-	Query_Validator_FullMethodName  = "/opinit.opchild.v1.Query/Validator"
-	Query_BridgeInfo_FullMethodName = "/opinit.opchild.v1.Query/BridgeInfo"
-	Query_Params_FullMethodName     = "/opinit.opchild.v1.Query/Params"
+	Query_Validators_FullMethodName     = "/opinit.opchild.v1.Query/Validators"
+	Query_Validator_FullMethodName      = "/opinit.opchild.v1.Query/Validator"
+	Query_BridgeInfo_FullMethodName     = "/opinit.opchild.v1.Query/BridgeInfo"
+	Query_Params_FullMethodName         = "/opinit.opchild.v1.Query/Params"
+	Query_NextL1Sequence_FullMethodName = "/opinit.opchild.v1.Query/NextL1Sequence"
+	Query_NextL2Sequence_FullMethodName = "/opinit.opchild.v1.Query/NextL2Sequence"
 )
 
 // QueryClient is the client API for Query service.
@@ -42,6 +44,10 @@ type QueryClient interface {
 	BridgeInfo(ctx context.Context, in *QueryBridgeInfoRequest, opts ...grpc.CallOption) (*QueryBridgeInfoResponse, error)
 	// Parameters queries the rollup parameters.
 	Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error)
+	// NextL1Sequence queries the next l1 sequence number.
+	NextL1Sequence(ctx context.Context, in *QueryNextL1SequenceRequest, opts ...grpc.CallOption) (*QueryNextL1SequenceResponse, error)
+	// NextL2Sequence queries the next l2 sequence number.
+	NextL2Sequence(ctx context.Context, in *QueryNextL2SequenceRequest, opts ...grpc.CallOption) (*QueryNextL2SequenceResponse, error)
 }
 
 type queryClient struct {
@@ -92,6 +98,26 @@ func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts .
 	return out, nil
 }
 
+func (c *queryClient) NextL1Sequence(ctx context.Context, in *QueryNextL1SequenceRequest, opts ...grpc.CallOption) (*QueryNextL1SequenceResponse, error) {
+	cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
+	out := new(QueryNextL1SequenceResponse)
+	err := c.cc.Invoke(ctx, Query_NextL1Sequence_FullMethodName, in, out, cOpts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *queryClient) NextL2Sequence(ctx context.Context, in *QueryNextL2SequenceRequest, opts ...grpc.CallOption) (*QueryNextL2SequenceResponse, error) {
+	cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
+	out := new(QueryNextL2SequenceResponse)
+	err := c.cc.Invoke(ctx, Query_NextL2Sequence_FullMethodName, in, out, cOpts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
 // QueryServer is the server API for Query service.
 // All implementations must embed UnimplementedQueryServer
 // for forward compatibility
@@ -109,6 +135,10 @@ type QueryServer interface {
 	BridgeInfo(context.Context, *QueryBridgeInfoRequest) (*QueryBridgeInfoResponse, error)
 	// Parameters queries the rollup parameters.
 	Params(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error)
+	// NextL1Sequence queries the next l1 sequence number.
+	NextL1Sequence(context.Context, *QueryNextL1SequenceRequest) (*QueryNextL1SequenceResponse, error)
+	// NextL2Sequence queries the next l2 sequence number.
+	NextL2Sequence(context.Context, *QueryNextL2SequenceRequest) (*QueryNextL2SequenceResponse, error)
 	mustEmbedUnimplementedQueryServer()
 }
 
@@ -128,6 +158,12 @@ func (UnimplementedQueryServer) BridgeInfo(context.Context, *QueryBridgeInfoRequ
 func (UnimplementedQueryServer) Params(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method Params not implemented")
 }
+func (UnimplementedQueryServer) NextL1Sequence(context.Context, *QueryNextL1SequenceRequest) (*QueryNextL1SequenceResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method NextL1Sequence not implemented")
+}
+func (UnimplementedQueryServer) NextL2Sequence(context.Context, *QueryNextL2SequenceRequest) (*QueryNextL2SequenceResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method NextL2Sequence not implemented")
+}
 func (UnimplementedQueryServer) mustEmbedUnimplementedQueryServer() {}
 
 // UnsafeQueryServer may be embedded to opt out of forward compatibility for this service.
@@ -213,6 +249,42 @@ func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interf
 	return interceptor(ctx, in, info, handler)
 }
 
+func _Query_NextL1Sequence_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(QueryNextL1SequenceRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(QueryServer).NextL1Sequence(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: Query_NextL1Sequence_FullMethodName,
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(QueryServer).NextL1Sequence(ctx, req.(*QueryNextL1SequenceRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Query_NextL2Sequence_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(QueryNextL2SequenceRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(QueryServer).NextL2Sequence(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: Query_NextL2Sequence_FullMethodName,
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(QueryServer).NextL2Sequence(ctx, req.(*QueryNextL2SequenceRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
 // Query_ServiceDesc is the grpc.ServiceDesc for Query service.
 // It's only intended for direct use with grpc.RegisterService,
 // and not to be introspected or modified (even as a copy)
@@ -236,6 +308,14 @@ var Query_ServiceDesc = grpc.ServiceDesc{
 			MethodName: "Params",
 			Handler:    _Query_Params_Handler,
 		},
+		{
+			MethodName: "NextL1Sequence",
+			Handler:    _Query_NextL1Sequence_Handler,
+		},
+		{
+			MethodName: "NextL2Sequence",
+			Handler:    _Query_NextL2Sequence_Handler,
+		},
 	},
 	Streams:  []grpc.StreamDesc{},
 	Metadata: "opinit/opchild/v1/query.proto",
diff --git a/api/opinit/ophost/v1/query.pulsar.go b/api/opinit/ophost/v1/query.pulsar.go
index 89b91a68..7ffba4bd 100644
--- a/api/opinit/ophost/v1/query.pulsar.go
+++ b/api/opinit/ophost/v1/query.pulsar.go
@@ -9484,6 +9484,814 @@ func (x *fastReflection_QueryClaimedResponse) ProtoMethods() *protoiface.Methods
 	}
 }
 
+var (
+	md_QueryNextL1SequenceRequest           protoreflect.MessageDescriptor
+	fd_QueryNextL1SequenceRequest_bridge_id protoreflect.FieldDescriptor
+)
+
+func init() {
+	file_opinit_ophost_v1_query_proto_init()
+	md_QueryNextL1SequenceRequest = File_opinit_ophost_v1_query_proto.Messages().ByName("QueryNextL1SequenceRequest")
+	fd_QueryNextL1SequenceRequest_bridge_id = md_QueryNextL1SequenceRequest.Fields().ByName("bridge_id")
+}
+
+var _ protoreflect.Message = (*fastReflection_QueryNextL1SequenceRequest)(nil)
+
+type fastReflection_QueryNextL1SequenceRequest QueryNextL1SequenceRequest
+
+func (x *QueryNextL1SequenceRequest) ProtoReflect() protoreflect.Message {
+	return (*fastReflection_QueryNextL1SequenceRequest)(x)
+}
+
+func (x *QueryNextL1SequenceRequest) slowProtoReflect() protoreflect.Message {
+	mi := &file_opinit_ophost_v1_query_proto_msgTypes[20]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+var _fastReflection_QueryNextL1SequenceRequest_messageType fastReflection_QueryNextL1SequenceRequest_messageType
+var _ protoreflect.MessageType = fastReflection_QueryNextL1SequenceRequest_messageType{}
+
+type fastReflection_QueryNextL1SequenceRequest_messageType struct{}
+
+func (x fastReflection_QueryNextL1SequenceRequest_messageType) Zero() protoreflect.Message {
+	return (*fastReflection_QueryNextL1SequenceRequest)(nil)
+}
+func (x fastReflection_QueryNextL1SequenceRequest_messageType) New() protoreflect.Message {
+	return new(fastReflection_QueryNextL1SequenceRequest)
+}
+func (x fastReflection_QueryNextL1SequenceRequest_messageType) Descriptor() protoreflect.MessageDescriptor {
+	return md_QueryNextL1SequenceRequest
+}
+
+// Descriptor returns message descriptor, which contains only the protobuf
+// type information for the message.
+func (x *fastReflection_QueryNextL1SequenceRequest) Descriptor() protoreflect.MessageDescriptor {
+	return md_QueryNextL1SequenceRequest
+}
+
+// Type returns the message type, which encapsulates both Go and protobuf
+// type information. If the Go type information is not needed,
+// it is recommended that the message descriptor be used instead.
+func (x *fastReflection_QueryNextL1SequenceRequest) Type() protoreflect.MessageType {
+	return _fastReflection_QueryNextL1SequenceRequest_messageType
+}
+
+// New returns a newly allocated and mutable empty message.
+func (x *fastReflection_QueryNextL1SequenceRequest) New() protoreflect.Message {
+	return new(fastReflection_QueryNextL1SequenceRequest)
+}
+
+// Interface unwraps the message reflection interface and
+// returns the underlying ProtoMessage interface.
+func (x *fastReflection_QueryNextL1SequenceRequest) Interface() protoreflect.ProtoMessage {
+	return (*QueryNextL1SequenceRequest)(x)
+}
+
+// Range iterates over every populated field in an undefined order,
+// calling f for each field descriptor and value encountered.
+// Range returns immediately if f returns false.
+// While iterating, mutating operations may only be performed
+// on the current field descriptor.
+func (x *fastReflection_QueryNextL1SequenceRequest) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) {
+	if x.BridgeId != uint64(0) {
+		value := protoreflect.ValueOfUint64(x.BridgeId)
+		if !f(fd_QueryNextL1SequenceRequest_bridge_id, value) {
+			return
+		}
+	}
+}
+
+// Has reports whether a field is populated.
+//
+// Some fields have the property of nullability where it is possible to
+// distinguish between the default value of a field and whether the field
+// was explicitly populated with the default value. Singular message fields,
+// member fields of a oneof, and proto2 scalar fields are nullable. Such
+// fields are populated only if explicitly set.
+//
+// In other cases (aside from the nullable cases above),
+// a proto3 scalar field is populated if it contains a non-zero value, and
+// a repeated field is populated if it is non-empty.
+func (x *fastReflection_QueryNextL1SequenceRequest) Has(fd protoreflect.FieldDescriptor) bool {
+	switch fd.FullName() {
+	case "opinit.ophost.v1.QueryNextL1SequenceRequest.bridge_id":
+		return x.BridgeId != uint64(0)
+	default:
+		if fd.IsExtension() {
+			panic(fmt.Errorf("proto3 declared messages do not support extensions: opinit.ophost.v1.QueryNextL1SequenceRequest"))
+		}
+		panic(fmt.Errorf("message opinit.ophost.v1.QueryNextL1SequenceRequest does not contain field %s", fd.FullName()))
+	}
+}
+
+// Clear clears the field such that a subsequent Has call reports false.
+//
+// Clearing an extension field clears both the extension type and value
+// associated with the given field number.
+//
+// Clear is a mutating operation and unsafe for concurrent use.
+func (x *fastReflection_QueryNextL1SequenceRequest) Clear(fd protoreflect.FieldDescriptor) {
+	switch fd.FullName() {
+	case "opinit.ophost.v1.QueryNextL1SequenceRequest.bridge_id":
+		x.BridgeId = uint64(0)
+	default:
+		if fd.IsExtension() {
+			panic(fmt.Errorf("proto3 declared messages do not support extensions: opinit.ophost.v1.QueryNextL1SequenceRequest"))
+		}
+		panic(fmt.Errorf("message opinit.ophost.v1.QueryNextL1SequenceRequest does not contain field %s", fd.FullName()))
+	}
+}
+
+// Get retrieves the value for a field.
+//
+// For unpopulated scalars, it returns the default value, where
+// the default value of a bytes scalar is guaranteed to be a copy.
+// For unpopulated composite types, it returns an empty, read-only view
+// of the value; to obtain a mutable reference, use Mutable.
+func (x *fastReflection_QueryNextL1SequenceRequest) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value {
+	switch descriptor.FullName() {
+	case "opinit.ophost.v1.QueryNextL1SequenceRequest.bridge_id":
+		value := x.BridgeId
+		return protoreflect.ValueOfUint64(value)
+	default:
+		if descriptor.IsExtension() {
+			panic(fmt.Errorf("proto3 declared messages do not support extensions: opinit.ophost.v1.QueryNextL1SequenceRequest"))
+		}
+		panic(fmt.Errorf("message opinit.ophost.v1.QueryNextL1SequenceRequest does not contain field %s", descriptor.FullName()))
+	}
+}
+
+// Set stores the value for a field.
+//
+// For a field belonging to a oneof, it implicitly clears any other field
+// that may be currently set within the same oneof.
+// For extension fields, it implicitly stores the provided ExtensionType.
+// When setting a composite type, it is unspecified whether the stored value
+// aliases the source's memory in any way. If the composite value is an
+// empty, read-only value, then it panics.
+//
+// Set is a mutating operation and unsafe for concurrent use.
+func (x *fastReflection_QueryNextL1SequenceRequest) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) {
+	switch fd.FullName() {
+	case "opinit.ophost.v1.QueryNextL1SequenceRequest.bridge_id":
+		x.BridgeId = value.Uint()
+	default:
+		if fd.IsExtension() {
+			panic(fmt.Errorf("proto3 declared messages do not support extensions: opinit.ophost.v1.QueryNextL1SequenceRequest"))
+		}
+		panic(fmt.Errorf("message opinit.ophost.v1.QueryNextL1SequenceRequest does not contain field %s", fd.FullName()))
+	}
+}
+
+// Mutable returns a mutable reference to a composite type.
+//
+// If the field is unpopulated, it may allocate a composite value.
+// For a field belonging to a oneof, it implicitly clears any other field
+// that may be currently set within the same oneof.
+// For extension fields, it implicitly stores the provided ExtensionType
+// if not already stored.
+// It panics if the field does not contain a composite type.
+//
+// Mutable is a mutating operation and unsafe for concurrent use.
+func (x *fastReflection_QueryNextL1SequenceRequest) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value {
+	switch fd.FullName() {
+	case "opinit.ophost.v1.QueryNextL1SequenceRequest.bridge_id":
+		panic(fmt.Errorf("field bridge_id of message opinit.ophost.v1.QueryNextL1SequenceRequest is not mutable"))
+	default:
+		if fd.IsExtension() {
+			panic(fmt.Errorf("proto3 declared messages do not support extensions: opinit.ophost.v1.QueryNextL1SequenceRequest"))
+		}
+		panic(fmt.Errorf("message opinit.ophost.v1.QueryNextL1SequenceRequest does not contain field %s", fd.FullName()))
+	}
+}
+
+// NewField returns a new value that is assignable to the field
+// for the given descriptor. For scalars, this returns the default value.
+// For lists, maps, and messages, this returns a new, empty, mutable value.
+func (x *fastReflection_QueryNextL1SequenceRequest) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value {
+	switch fd.FullName() {
+	case "opinit.ophost.v1.QueryNextL1SequenceRequest.bridge_id":
+		return protoreflect.ValueOfUint64(uint64(0))
+	default:
+		if fd.IsExtension() {
+			panic(fmt.Errorf("proto3 declared messages do not support extensions: opinit.ophost.v1.QueryNextL1SequenceRequest"))
+		}
+		panic(fmt.Errorf("message opinit.ophost.v1.QueryNextL1SequenceRequest does not contain field %s", fd.FullName()))
+	}
+}
+
+// WhichOneof reports which field within the oneof is populated,
+// returning nil if none are populated.
+// It panics if the oneof descriptor does not belong to this message.
+func (x *fastReflection_QueryNextL1SequenceRequest) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor {
+	switch d.FullName() {
+	default:
+		panic(fmt.Errorf("%s is not a oneof field in opinit.ophost.v1.QueryNextL1SequenceRequest", d.FullName()))
+	}
+	panic("unreachable")
+}
+
+// GetUnknown retrieves the entire list of unknown fields.
+// The caller may only mutate the contents of the RawFields
+// if the mutated bytes are stored back into the message with SetUnknown.
+func (x *fastReflection_QueryNextL1SequenceRequest) GetUnknown() protoreflect.RawFields {
+	return x.unknownFields
+}
+
+// SetUnknown stores an entire list of unknown fields.
+// The raw fields must be syntactically valid according to the wire format.
+// An implementation may panic if this is not the case.
+// Once stored, the caller must not mutate the content of the RawFields.
+// An empty RawFields may be passed to clear the fields.
+//
+// SetUnknown is a mutating operation and unsafe for concurrent use.
+func (x *fastReflection_QueryNextL1SequenceRequest) SetUnknown(fields protoreflect.RawFields) {
+	x.unknownFields = fields
+}
+
+// IsValid reports whether the message is valid.
+//
+// An invalid message is an empty, read-only value.
+//
+// An invalid message often corresponds to a nil pointer of the concrete
+// message type, but the details are implementation dependent.
+// Validity is not part of the protobuf data model, and may not
+// be preserved in marshaling or other operations.
+func (x *fastReflection_QueryNextL1SequenceRequest) IsValid() bool {
+	return x != nil
+}
+
+// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations.
+// This method may return nil.
+//
+// The returned methods type is identical to
+// "google.golang.org/protobuf/runtime/protoiface".Methods.
+// Consult the protoiface package documentation for details.
+func (x *fastReflection_QueryNextL1SequenceRequest) ProtoMethods() *protoiface.Methods {
+	size := func(input protoiface.SizeInput) protoiface.SizeOutput {
+		x := input.Message.Interface().(*QueryNextL1SequenceRequest)
+		if x == nil {
+			return protoiface.SizeOutput{
+				NoUnkeyedLiterals: input.NoUnkeyedLiterals,
+				Size:              0,
+			}
+		}
+		options := runtime.SizeInputToOptions(input)
+		_ = options
+		var n int
+		var l int
+		_ = l
+		if x.BridgeId != 0 {
+			n += 1 + runtime.Sov(uint64(x.BridgeId))
+		}
+		if x.unknownFields != nil {
+			n += len(x.unknownFields)
+		}
+		return protoiface.SizeOutput{
+			NoUnkeyedLiterals: input.NoUnkeyedLiterals,
+			Size:              n,
+		}
+	}
+
+	marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) {
+		x := input.Message.Interface().(*QueryNextL1SequenceRequest)
+		if x == nil {
+			return protoiface.MarshalOutput{
+				NoUnkeyedLiterals: input.NoUnkeyedLiterals,
+				Buf:               input.Buf,
+			}, nil
+		}
+		options := runtime.MarshalInputToOptions(input)
+		_ = options
+		size := options.Size(x)
+		dAtA := make([]byte, size)
+		i := len(dAtA)
+		_ = i
+		var l int
+		_ = l
+		if x.unknownFields != nil {
+			i -= len(x.unknownFields)
+			copy(dAtA[i:], x.unknownFields)
+		}
+		if x.BridgeId != 0 {
+			i = runtime.EncodeVarint(dAtA, i, uint64(x.BridgeId))
+			i--
+			dAtA[i] = 0x8
+		}
+		if input.Buf != nil {
+			input.Buf = append(input.Buf, dAtA...)
+		} else {
+			input.Buf = dAtA
+		}
+		return protoiface.MarshalOutput{
+			NoUnkeyedLiterals: input.NoUnkeyedLiterals,
+			Buf:               input.Buf,
+		}, nil
+	}
+	unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) {
+		x := input.Message.Interface().(*QueryNextL1SequenceRequest)
+		if x == nil {
+			return protoiface.UnmarshalOutput{
+				NoUnkeyedLiterals: input.NoUnkeyedLiterals,
+				Flags:             input.Flags,
+			}, nil
+		}
+		options := runtime.UnmarshalInputToOptions(input)
+		_ = options
+		dAtA := input.Buf
+		l := len(dAtA)
+		iNdEx := 0
+		for iNdEx < l {
+			preIndex := iNdEx
+			var wire uint64
+			for shift := uint(0); ; shift += 7 {
+				if shift >= 64 {
+					return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow
+				}
+				if iNdEx >= l {
+					return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF
+				}
+				b := dAtA[iNdEx]
+				iNdEx++
+				wire |= uint64(b&0x7F) << shift
+				if b < 0x80 {
+					break
+				}
+			}
+			fieldNum := int32(wire >> 3)
+			wireType := int(wire & 0x7)
+			if wireType == 4 {
+				return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryNextL1SequenceRequest: wiretype end group for non-group")
+			}
+			if fieldNum <= 0 {
+				return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryNextL1SequenceRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+			}
+			switch fieldNum {
+			case 1:
+				if wireType != 0 {
+					return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field BridgeId", wireType)
+				}
+				x.BridgeId = 0
+				for shift := uint(0); ; shift += 7 {
+					if shift >= 64 {
+						return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow
+					}
+					if iNdEx >= l {
+						return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF
+					}
+					b := dAtA[iNdEx]
+					iNdEx++
+					x.BridgeId |= uint64(b&0x7F) << shift
+					if b < 0x80 {
+						break
+					}
+				}
+			default:
+				iNdEx = preIndex
+				skippy, err := runtime.Skip(dAtA[iNdEx:])
+				if err != nil {
+					return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err
+				}
+				if (skippy < 0) || (iNdEx+skippy) < 0 {
+					return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength
+				}
+				if (iNdEx + skippy) > l {
+					return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF
+				}
+				if !options.DiscardUnknown {
+					x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...)
+				}
+				iNdEx += skippy
+			}
+		}
+
+		if iNdEx > l {
+			return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF
+		}
+		return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil
+	}
+	return &protoiface.Methods{
+		NoUnkeyedLiterals: struct{}{},
+		Flags:             protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown,
+		Size:              size,
+		Marshal:           marshal,
+		Unmarshal:         unmarshal,
+		Merge:             nil,
+		CheckInitialized:  nil,
+	}
+}
+
+var (
+	md_QueryNextL1SequenceResponse                  protoreflect.MessageDescriptor
+	fd_QueryNextL1SequenceResponse_next_l1_sequence protoreflect.FieldDescriptor
+)
+
+func init() {
+	file_opinit_ophost_v1_query_proto_init()
+	md_QueryNextL1SequenceResponse = File_opinit_ophost_v1_query_proto.Messages().ByName("QueryNextL1SequenceResponse")
+	fd_QueryNextL1SequenceResponse_next_l1_sequence = md_QueryNextL1SequenceResponse.Fields().ByName("next_l1_sequence")
+}
+
+var _ protoreflect.Message = (*fastReflection_QueryNextL1SequenceResponse)(nil)
+
+type fastReflection_QueryNextL1SequenceResponse QueryNextL1SequenceResponse
+
+func (x *QueryNextL1SequenceResponse) ProtoReflect() protoreflect.Message {
+	return (*fastReflection_QueryNextL1SequenceResponse)(x)
+}
+
+func (x *QueryNextL1SequenceResponse) slowProtoReflect() protoreflect.Message {
+	mi := &file_opinit_ophost_v1_query_proto_msgTypes[21]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+var _fastReflection_QueryNextL1SequenceResponse_messageType fastReflection_QueryNextL1SequenceResponse_messageType
+var _ protoreflect.MessageType = fastReflection_QueryNextL1SequenceResponse_messageType{}
+
+type fastReflection_QueryNextL1SequenceResponse_messageType struct{}
+
+func (x fastReflection_QueryNextL1SequenceResponse_messageType) Zero() protoreflect.Message {
+	return (*fastReflection_QueryNextL1SequenceResponse)(nil)
+}
+func (x fastReflection_QueryNextL1SequenceResponse_messageType) New() protoreflect.Message {
+	return new(fastReflection_QueryNextL1SequenceResponse)
+}
+func (x fastReflection_QueryNextL1SequenceResponse_messageType) Descriptor() protoreflect.MessageDescriptor {
+	return md_QueryNextL1SequenceResponse
+}
+
+// Descriptor returns message descriptor, which contains only the protobuf
+// type information for the message.
+func (x *fastReflection_QueryNextL1SequenceResponse) Descriptor() protoreflect.MessageDescriptor {
+	return md_QueryNextL1SequenceResponse
+}
+
+// Type returns the message type, which encapsulates both Go and protobuf
+// type information. If the Go type information is not needed,
+// it is recommended that the message descriptor be used instead.
+func (x *fastReflection_QueryNextL1SequenceResponse) Type() protoreflect.MessageType {
+	return _fastReflection_QueryNextL1SequenceResponse_messageType
+}
+
+// New returns a newly allocated and mutable empty message.
+func (x *fastReflection_QueryNextL1SequenceResponse) New() protoreflect.Message {
+	return new(fastReflection_QueryNextL1SequenceResponse)
+}
+
+// Interface unwraps the message reflection interface and
+// returns the underlying ProtoMessage interface.
+func (x *fastReflection_QueryNextL1SequenceResponse) Interface() protoreflect.ProtoMessage {
+	return (*QueryNextL1SequenceResponse)(x)
+}
+
+// Range iterates over every populated field in an undefined order,
+// calling f for each field descriptor and value encountered.
+// Range returns immediately if f returns false.
+// While iterating, mutating operations may only be performed
+// on the current field descriptor.
+func (x *fastReflection_QueryNextL1SequenceResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) {
+	if x.NextL1Sequence != uint64(0) {
+		value := protoreflect.ValueOfUint64(x.NextL1Sequence)
+		if !f(fd_QueryNextL1SequenceResponse_next_l1_sequence, value) {
+			return
+		}
+	}
+}
+
+// Has reports whether a field is populated.
+//
+// Some fields have the property of nullability where it is possible to
+// distinguish between the default value of a field and whether the field
+// was explicitly populated with the default value. Singular message fields,
+// member fields of a oneof, and proto2 scalar fields are nullable. Such
+// fields are populated only if explicitly set.
+//
+// In other cases (aside from the nullable cases above),
+// a proto3 scalar field is populated if it contains a non-zero value, and
+// a repeated field is populated if it is non-empty.
+func (x *fastReflection_QueryNextL1SequenceResponse) Has(fd protoreflect.FieldDescriptor) bool {
+	switch fd.FullName() {
+	case "opinit.ophost.v1.QueryNextL1SequenceResponse.next_l1_sequence":
+		return x.NextL1Sequence != uint64(0)
+	default:
+		if fd.IsExtension() {
+			panic(fmt.Errorf("proto3 declared messages do not support extensions: opinit.ophost.v1.QueryNextL1SequenceResponse"))
+		}
+		panic(fmt.Errorf("message opinit.ophost.v1.QueryNextL1SequenceResponse does not contain field %s", fd.FullName()))
+	}
+}
+
+// Clear clears the field such that a subsequent Has call reports false.
+//
+// Clearing an extension field clears both the extension type and value
+// associated with the given field number.
+//
+// Clear is a mutating operation and unsafe for concurrent use.
+func (x *fastReflection_QueryNextL1SequenceResponse) Clear(fd protoreflect.FieldDescriptor) {
+	switch fd.FullName() {
+	case "opinit.ophost.v1.QueryNextL1SequenceResponse.next_l1_sequence":
+		x.NextL1Sequence = uint64(0)
+	default:
+		if fd.IsExtension() {
+			panic(fmt.Errorf("proto3 declared messages do not support extensions: opinit.ophost.v1.QueryNextL1SequenceResponse"))
+		}
+		panic(fmt.Errorf("message opinit.ophost.v1.QueryNextL1SequenceResponse does not contain field %s", fd.FullName()))
+	}
+}
+
+// Get retrieves the value for a field.
+//
+// For unpopulated scalars, it returns the default value, where
+// the default value of a bytes scalar is guaranteed to be a copy.
+// For unpopulated composite types, it returns an empty, read-only view
+// of the value; to obtain a mutable reference, use Mutable.
+func (x *fastReflection_QueryNextL1SequenceResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value {
+	switch descriptor.FullName() {
+	case "opinit.ophost.v1.QueryNextL1SequenceResponse.next_l1_sequence":
+		value := x.NextL1Sequence
+		return protoreflect.ValueOfUint64(value)
+	default:
+		if descriptor.IsExtension() {
+			panic(fmt.Errorf("proto3 declared messages do not support extensions: opinit.ophost.v1.QueryNextL1SequenceResponse"))
+		}
+		panic(fmt.Errorf("message opinit.ophost.v1.QueryNextL1SequenceResponse does not contain field %s", descriptor.FullName()))
+	}
+}
+
+// Set stores the value for a field.
+//
+// For a field belonging to a oneof, it implicitly clears any other field
+// that may be currently set within the same oneof.
+// For extension fields, it implicitly stores the provided ExtensionType.
+// When setting a composite type, it is unspecified whether the stored value
+// aliases the source's memory in any way. If the composite value is an
+// empty, read-only value, then it panics.
+//
+// Set is a mutating operation and unsafe for concurrent use.
+func (x *fastReflection_QueryNextL1SequenceResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) {
+	switch fd.FullName() {
+	case "opinit.ophost.v1.QueryNextL1SequenceResponse.next_l1_sequence":
+		x.NextL1Sequence = value.Uint()
+	default:
+		if fd.IsExtension() {
+			panic(fmt.Errorf("proto3 declared messages do not support extensions: opinit.ophost.v1.QueryNextL1SequenceResponse"))
+		}
+		panic(fmt.Errorf("message opinit.ophost.v1.QueryNextL1SequenceResponse does not contain field %s", fd.FullName()))
+	}
+}
+
+// Mutable returns a mutable reference to a composite type.
+//
+// If the field is unpopulated, it may allocate a composite value.
+// For a field belonging to a oneof, it implicitly clears any other field
+// that may be currently set within the same oneof.
+// For extension fields, it implicitly stores the provided ExtensionType
+// if not already stored.
+// It panics if the field does not contain a composite type.
+//
+// Mutable is a mutating operation and unsafe for concurrent use.
+func (x *fastReflection_QueryNextL1SequenceResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value {
+	switch fd.FullName() {
+	case "opinit.ophost.v1.QueryNextL1SequenceResponse.next_l1_sequence":
+		panic(fmt.Errorf("field next_l1_sequence of message opinit.ophost.v1.QueryNextL1SequenceResponse is not mutable"))
+	default:
+		if fd.IsExtension() {
+			panic(fmt.Errorf("proto3 declared messages do not support extensions: opinit.ophost.v1.QueryNextL1SequenceResponse"))
+		}
+		panic(fmt.Errorf("message opinit.ophost.v1.QueryNextL1SequenceResponse does not contain field %s", fd.FullName()))
+	}
+}
+
+// NewField returns a new value that is assignable to the field
+// for the given descriptor. For scalars, this returns the default value.
+// For lists, maps, and messages, this returns a new, empty, mutable value.
+func (x *fastReflection_QueryNextL1SequenceResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value {
+	switch fd.FullName() {
+	case "opinit.ophost.v1.QueryNextL1SequenceResponse.next_l1_sequence":
+		return protoreflect.ValueOfUint64(uint64(0))
+	default:
+		if fd.IsExtension() {
+			panic(fmt.Errorf("proto3 declared messages do not support extensions: opinit.ophost.v1.QueryNextL1SequenceResponse"))
+		}
+		panic(fmt.Errorf("message opinit.ophost.v1.QueryNextL1SequenceResponse does not contain field %s", fd.FullName()))
+	}
+}
+
+// WhichOneof reports which field within the oneof is populated,
+// returning nil if none are populated.
+// It panics if the oneof descriptor does not belong to this message.
+func (x *fastReflection_QueryNextL1SequenceResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor {
+	switch d.FullName() {
+	default:
+		panic(fmt.Errorf("%s is not a oneof field in opinit.ophost.v1.QueryNextL1SequenceResponse", d.FullName()))
+	}
+	panic("unreachable")
+}
+
+// GetUnknown retrieves the entire list of unknown fields.
+// The caller may only mutate the contents of the RawFields
+// if the mutated bytes are stored back into the message with SetUnknown.
+func (x *fastReflection_QueryNextL1SequenceResponse) GetUnknown() protoreflect.RawFields {
+	return x.unknownFields
+}
+
+// SetUnknown stores an entire list of unknown fields.
+// The raw fields must be syntactically valid according to the wire format.
+// An implementation may panic if this is not the case.
+// Once stored, the caller must not mutate the content of the RawFields.
+// An empty RawFields may be passed to clear the fields.
+//
+// SetUnknown is a mutating operation and unsafe for concurrent use.
+func (x *fastReflection_QueryNextL1SequenceResponse) SetUnknown(fields protoreflect.RawFields) {
+	x.unknownFields = fields
+}
+
+// IsValid reports whether the message is valid.
+//
+// An invalid message is an empty, read-only value.
+//
+// An invalid message often corresponds to a nil pointer of the concrete
+// message type, but the details are implementation dependent.
+// Validity is not part of the protobuf data model, and may not
+// be preserved in marshaling or other operations.
+func (x *fastReflection_QueryNextL1SequenceResponse) IsValid() bool {
+	return x != nil
+}
+
+// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations.
+// This method may return nil.
+//
+// The returned methods type is identical to
+// "google.golang.org/protobuf/runtime/protoiface".Methods.
+// Consult the protoiface package documentation for details.
+func (x *fastReflection_QueryNextL1SequenceResponse) ProtoMethods() *protoiface.Methods {
+	size := func(input protoiface.SizeInput) protoiface.SizeOutput {
+		x := input.Message.Interface().(*QueryNextL1SequenceResponse)
+		if x == nil {
+			return protoiface.SizeOutput{
+				NoUnkeyedLiterals: input.NoUnkeyedLiterals,
+				Size:              0,
+			}
+		}
+		options := runtime.SizeInputToOptions(input)
+		_ = options
+		var n int
+		var l int
+		_ = l
+		if x.NextL1Sequence != 0 {
+			n += 1 + runtime.Sov(uint64(x.NextL1Sequence))
+		}
+		if x.unknownFields != nil {
+			n += len(x.unknownFields)
+		}
+		return protoiface.SizeOutput{
+			NoUnkeyedLiterals: input.NoUnkeyedLiterals,
+			Size:              n,
+		}
+	}
+
+	marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) {
+		x := input.Message.Interface().(*QueryNextL1SequenceResponse)
+		if x == nil {
+			return protoiface.MarshalOutput{
+				NoUnkeyedLiterals: input.NoUnkeyedLiterals,
+				Buf:               input.Buf,
+			}, nil
+		}
+		options := runtime.MarshalInputToOptions(input)
+		_ = options
+		size := options.Size(x)
+		dAtA := make([]byte, size)
+		i := len(dAtA)
+		_ = i
+		var l int
+		_ = l
+		if x.unknownFields != nil {
+			i -= len(x.unknownFields)
+			copy(dAtA[i:], x.unknownFields)
+		}
+		if x.NextL1Sequence != 0 {
+			i = runtime.EncodeVarint(dAtA, i, uint64(x.NextL1Sequence))
+			i--
+			dAtA[i] = 0x8
+		}
+		if input.Buf != nil {
+			input.Buf = append(input.Buf, dAtA...)
+		} else {
+			input.Buf = dAtA
+		}
+		return protoiface.MarshalOutput{
+			NoUnkeyedLiterals: input.NoUnkeyedLiterals,
+			Buf:               input.Buf,
+		}, nil
+	}
+	unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) {
+		x := input.Message.Interface().(*QueryNextL1SequenceResponse)
+		if x == nil {
+			return protoiface.UnmarshalOutput{
+				NoUnkeyedLiterals: input.NoUnkeyedLiterals,
+				Flags:             input.Flags,
+			}, nil
+		}
+		options := runtime.UnmarshalInputToOptions(input)
+		_ = options
+		dAtA := input.Buf
+		l := len(dAtA)
+		iNdEx := 0
+		for iNdEx < l {
+			preIndex := iNdEx
+			var wire uint64
+			for shift := uint(0); ; shift += 7 {
+				if shift >= 64 {
+					return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow
+				}
+				if iNdEx >= l {
+					return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF
+				}
+				b := dAtA[iNdEx]
+				iNdEx++
+				wire |= uint64(b&0x7F) << shift
+				if b < 0x80 {
+					break
+				}
+			}
+			fieldNum := int32(wire >> 3)
+			wireType := int(wire & 0x7)
+			if wireType == 4 {
+				return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryNextL1SequenceResponse: wiretype end group for non-group")
+			}
+			if fieldNum <= 0 {
+				return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryNextL1SequenceResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+			}
+			switch fieldNum {
+			case 1:
+				if wireType != 0 {
+					return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field NextL1Sequence", wireType)
+				}
+				x.NextL1Sequence = 0
+				for shift := uint(0); ; shift += 7 {
+					if shift >= 64 {
+						return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow
+					}
+					if iNdEx >= l {
+						return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF
+					}
+					b := dAtA[iNdEx]
+					iNdEx++
+					x.NextL1Sequence |= uint64(b&0x7F) << shift
+					if b < 0x80 {
+						break
+					}
+				}
+			default:
+				iNdEx = preIndex
+				skippy, err := runtime.Skip(dAtA[iNdEx:])
+				if err != nil {
+					return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err
+				}
+				if (skippy < 0) || (iNdEx+skippy) < 0 {
+					return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength
+				}
+				if (iNdEx + skippy) > l {
+					return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF
+				}
+				if !options.DiscardUnknown {
+					x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...)
+				}
+				iNdEx += skippy
+			}
+		}
+
+		if iNdEx > l {
+			return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF
+		}
+		return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil
+	}
+	return &protoiface.Methods{
+		NoUnkeyedLiterals: struct{}{},
+		Flags:             protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown,
+		Size:              size,
+		Marshal:           marshal,
+		Unmarshal:         unmarshal,
+		Merge:             nil,
+		CheckInitialized:  nil,
+	}
+}
+
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // versions:
 // 	protoc-gen-go v1.27.0
@@ -10333,6 +11141,78 @@ func (x *QueryClaimedResponse) GetClaimed() bool {
 	return false
 }
 
+// QueryNextL1SequenceRequest is request type for the Query/NextL1Sequence RPC method.
+type QueryNextL1SequenceRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	BridgeId uint64 `protobuf:"varint,1,opt,name=bridge_id,json=bridgeId,proto3" json:"bridge_id,omitempty"`
+}
+
+func (x *QueryNextL1SequenceRequest) Reset() {
+	*x = QueryNextL1SequenceRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_opinit_ophost_v1_query_proto_msgTypes[20]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *QueryNextL1SequenceRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*QueryNextL1SequenceRequest) ProtoMessage() {}
+
+// Deprecated: Use QueryNextL1SequenceRequest.ProtoReflect.Descriptor instead.
+func (*QueryNextL1SequenceRequest) Descriptor() ([]byte, []int) {
+	return file_opinit_ophost_v1_query_proto_rawDescGZIP(), []int{20}
+}
+
+func (x *QueryNextL1SequenceRequest) GetBridgeId() uint64 {
+	if x != nil {
+		return x.BridgeId
+	}
+	return 0
+}
+
+// QueryNextL1SequenceResponse is response type for the Query/NextL1Sequence RPC method.
+type QueryNextL1SequenceResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	NextL1Sequence uint64 `protobuf:"varint,1,opt,name=next_l1_sequence,json=nextL1Sequence,proto3" json:"next_l1_sequence,omitempty"`
+}
+
+func (x *QueryNextL1SequenceResponse) Reset() {
+	*x = QueryNextL1SequenceResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_opinit_ophost_v1_query_proto_msgTypes[21]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *QueryNextL1SequenceResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*QueryNextL1SequenceResponse) ProtoMessage() {}
+
+// Deprecated: Use QueryNextL1SequenceResponse.ProtoReflect.Descriptor instead.
+func (*QueryNextL1SequenceResponse) Descriptor() ([]byte, []int) {
+	return file_opinit_ophost_v1_query_proto_rawDescGZIP(), []int{21}
+}
+
+func (x *QueryNextL1SequenceResponse) GetNextL1Sequence() uint64 {
+	if x != nil {
+		return x.NextL1Sequence
+	}
+	return 0
+}
+
 var File_opinit_ophost_v1_query_proto protoreflect.FileDescriptor
 
 var file_opinit_ophost_v1_query_proto_rawDesc = []byte{
@@ -10497,127 +11377,146 @@ var file_opinit_ophost_v1_query_proto_rawDesc = []byte{
 	0x73, 0x68, 0x22, 0x30, 0x0a, 0x14, 0x51, 0x75, 0x65, 0x72, 0x79, 0x43, 0x6c, 0x61, 0x69, 0x6d,
 	0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6c,
 	0x61, 0x69, 0x6d, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x63, 0x6c, 0x61,
-	0x69, 0x6d, 0x65, 0x64, 0x32, 0xb0, 0x0d, 0x0a, 0x05, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x89,
-	0x01, 0x0a, 0x06, 0x42, 0x72, 0x69, 0x64, 0x67, 0x65, 0x12, 0x24, 0x2e, 0x6f, 0x70, 0x69, 0x6e,
-	0x69, 0x74, 0x2e, 0x6f, 0x70, 0x68, 0x6f, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65,
-	0x72, 0x79, 0x42, 0x72, 0x69, 0x64, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
-	0x25, 0x2e, 0x6f, 0x70, 0x69, 0x6e, 0x69, 0x74, 0x2e, 0x6f, 0x70, 0x68, 0x6f, 0x73, 0x74, 0x2e,
-	0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x42, 0x72, 0x69, 0x64, 0x67, 0x65, 0x52, 0x65,
-	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4,
-	0x93, 0x02, 0x27, 0x12, 0x25, 0x2f, 0x6f, 0x70, 0x69, 0x6e, 0x69, 0x74, 0x2f, 0x6f, 0x70, 0x68,
-	0x6f, 0x73, 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x73, 0x2f, 0x7b,
-	0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x80, 0x01, 0x0a, 0x07, 0x42,
-	0x72, 0x69, 0x64, 0x67, 0x65, 0x73, 0x12, 0x25, 0x2e, 0x6f, 0x70, 0x69, 0x6e, 0x69, 0x74, 0x2e,
-	0x6f, 0x70, 0x68, 0x6f, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x42,
-	0x72, 0x69, 0x64, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e,
-	0x6f, 0x70, 0x69, 0x6e, 0x69, 0x74, 0x2e, 0x6f, 0x70, 0x68, 0x6f, 0x73, 0x74, 0x2e, 0x76, 0x31,
-	0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x42, 0x72, 0x69, 0x64, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73,
-	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x26, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93,
-	0x02, 0x1b, 0x12, 0x19, 0x2f, 0x6f, 0x70, 0x69, 0x6e, 0x69, 0x74, 0x2f, 0x6f, 0x70, 0x68, 0x6f,
-	0x73, 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x73, 0x12, 0xc5, 0x01,
-	0x0a, 0x12, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x50, 0x61, 0x69, 0x72, 0x42, 0x79, 0x4c, 0x31, 0x44,
-	0x65, 0x6e, 0x6f, 0x6d, 0x12, 0x30, 0x2e, 0x6f, 0x70, 0x69, 0x6e, 0x69, 0x74, 0x2e, 0x6f, 0x70,
-	0x68, 0x6f, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x6f, 0x6b,
-	0x65, 0x6e, 0x50, 0x61, 0x69, 0x72, 0x42, 0x79, 0x4c, 0x31, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x52,
-	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x6f, 0x70, 0x69, 0x6e, 0x69, 0x74, 0x2e,
-	0x6f, 0x70, 0x68, 0x6f, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54,
-	0x6f, 0x6b, 0x65, 0x6e, 0x50, 0x61, 0x69, 0x72, 0x42, 0x79, 0x4c, 0x31, 0x44, 0x65, 0x6e, 0x6f,
-	0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4a, 0x88, 0xe7, 0xb0, 0x2a, 0x01,
-	0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3f, 0x12, 0x3d, 0x2f, 0x6f, 0x70, 0x69, 0x6e, 0x69, 0x74, 0x2f,
-	0x6f, 0x70, 0x68, 0x6f, 0x73, 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65,
-	0x73, 0x2f, 0x7b, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x6f,
-	0x6b, 0x65, 0x6e, 0x5f, 0x70, 0x61, 0x69, 0x72, 0x73, 0x2f, 0x62, 0x79, 0x5f, 0x6c, 0x31, 0x5f,
-	0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x12, 0xc5, 0x01, 0x0a, 0x12, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x50,
-	0x61, 0x69, 0x72, 0x42, 0x79, 0x4c, 0x32, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x12, 0x30, 0x2e, 0x6f,
-	0x70, 0x69, 0x6e, 0x69, 0x74, 0x2e, 0x6f, 0x70, 0x68, 0x6f, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e,
-	0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x50, 0x61, 0x69, 0x72, 0x42, 0x79,
-	0x4c, 0x32, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31,
-	0x2e, 0x6f, 0x70, 0x69, 0x6e, 0x69, 0x74, 0x2e, 0x6f, 0x70, 0x68, 0x6f, 0x73, 0x74, 0x2e, 0x76,
-	0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x50, 0x61, 0x69, 0x72,
-	0x42, 0x79, 0x4c, 0x32, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
-	0x65, 0x22, 0x4a, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3f, 0x12, 0x3d,
-	0x2f, 0x6f, 0x70, 0x69, 0x6e, 0x69, 0x74, 0x2f, 0x6f, 0x70, 0x68, 0x6f, 0x73, 0x74, 0x2f, 0x76,
-	0x31, 0x2f, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x73, 0x2f, 0x7b, 0x62, 0x72, 0x69, 0x64, 0x67,
-	0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x70, 0x61, 0x69, 0x72,
-	0x73, 0x2f, 0x62, 0x79, 0x5f, 0x6c, 0x32, 0x5f, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x12, 0xa1, 0x01,
-	0x0a, 0x0a, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x50, 0x61, 0x69, 0x72, 0x73, 0x12, 0x28, 0x2e, 0x6f,
-	0x70, 0x69, 0x6e, 0x69, 0x74, 0x2e, 0x6f, 0x70, 0x68, 0x6f, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e,
-	0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x50, 0x61, 0x69, 0x72, 0x73, 0x52,
-	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x6f, 0x70, 0x69, 0x6e, 0x69, 0x74, 0x2e,
-	0x6f, 0x70, 0x68, 0x6f, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54,
-	0x6f, 0x6b, 0x65, 0x6e, 0x50, 0x61, 0x69, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
-	0x65, 0x22, 0x3e, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x33, 0x12, 0x31,
-	0x2f, 0x6f, 0x70, 0x69, 0x6e, 0x69, 0x74, 0x2f, 0x6f, 0x70, 0x68, 0x6f, 0x73, 0x74, 0x2f, 0x76,
-	0x31, 0x2f, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x73, 0x2f, 0x7b, 0x62, 0x72, 0x69, 0x64, 0x67,
-	0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x70, 0x61, 0x69, 0x72,
-	0x73, 0x12, 0xc6, 0x01, 0x0a, 0x13, 0x4c, 0x61, 0x73, 0x74, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69,
-	0x7a, 0x65, 0x64, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x31, 0x2e, 0x6f, 0x70, 0x69, 0x6e,
-	0x69, 0x74, 0x2e, 0x6f, 0x70, 0x68, 0x6f, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65,
-	0x72, 0x79, 0x4c, 0x61, 0x73, 0x74, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x4f,
-	0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x6f,
-	0x70, 0x69, 0x6e, 0x69, 0x74, 0x2e, 0x6f, 0x70, 0x68, 0x6f, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e,
-	0x51, 0x75, 0x65, 0x72, 0x79, 0x4c, 0x61, 0x73, 0x74, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a,
-	0x65, 0x64, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
-	0x22, 0x48, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3d, 0x12, 0x3b, 0x2f,
-	0x6f, 0x70, 0x69, 0x6e, 0x69, 0x74, 0x2f, 0x6f, 0x70, 0x68, 0x6f, 0x73, 0x74, 0x2f, 0x76, 0x31,
-	0x2f, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x73, 0x2f, 0x7b, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65,
-	0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69,
-	0x7a, 0x65, 0x64, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0xb8, 0x01, 0x0a, 0x0e, 0x4f,
-	0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x12, 0x2c, 0x2e,
+	0x69, 0x6d, 0x65, 0x64, 0x22, 0x39, 0x0a, 0x1a, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4e, 0x65, 0x78,
+	0x74, 0x4c, 0x31, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65,
+	0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x49, 0x64, 0x22,
+	0x47, 0x0a, 0x1b, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4e, 0x65, 0x78, 0x74, 0x4c, 0x31, 0x53, 0x65,
+	0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x28,
+	0x0a, 0x10, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x6c, 0x31, 0x5f, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e,
+	0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x6e, 0x65, 0x78, 0x74, 0x4c, 0x31,
+	0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x32, 0xe5, 0x0e, 0x0a, 0x05, 0x51, 0x75, 0x65,
+	0x72, 0x79, 0x12, 0x89, 0x01, 0x0a, 0x06, 0x42, 0x72, 0x69, 0x64, 0x67, 0x65, 0x12, 0x24, 0x2e,
 	0x6f, 0x70, 0x69, 0x6e, 0x69, 0x74, 0x2e, 0x6f, 0x70, 0x68, 0x6f, 0x73, 0x74, 0x2e, 0x76, 0x31,
-	0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x72, 0x6f, 0x70,
-	0x6f, 0x73, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x6f, 0x70,
-	0x69, 0x6e, 0x69, 0x74, 0x2e, 0x6f, 0x70, 0x68, 0x6f, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x51,
-	0x75, 0x65, 0x72, 0x79, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73,
-	0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x49, 0x88, 0xe7, 0xb0, 0x2a,
-	0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3e, 0x12, 0x3c, 0x2f, 0x6f, 0x70, 0x69, 0x6e, 0x69, 0x74,
+	0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x42, 0x72, 0x69, 0x64, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75,
+	0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x6f, 0x70, 0x69, 0x6e, 0x69, 0x74, 0x2e, 0x6f, 0x70, 0x68,
+	0x6f, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x42, 0x72, 0x69, 0x64,
+	0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, 0x88, 0xe7, 0xb0, 0x2a,
+	0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x12, 0x25, 0x2f, 0x6f, 0x70, 0x69, 0x6e, 0x69, 0x74,
 	0x2f, 0x6f, 0x70, 0x68, 0x6f, 0x73, 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x72, 0x69, 0x64, 0x67,
-	0x65, 0x73, 0x2f, 0x7b, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6f,
-	0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x2f, 0x7b, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x69,
-	0x6e, 0x64, 0x65, 0x78, 0x7d, 0x12, 0xac, 0x01, 0x0a, 0x0f, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74,
-	0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x73, 0x12, 0x2d, 0x2e, 0x6f, 0x70, 0x69, 0x6e,
-	0x69, 0x74, 0x2e, 0x6f, 0x70, 0x68, 0x6f, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65,
-	0x72, 0x79, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c,
-	0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x6f, 0x70, 0x69, 0x6e, 0x69,
+	0x65, 0x73, 0x2f, 0x7b, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x80,
+	0x01, 0x0a, 0x07, 0x42, 0x72, 0x69, 0x64, 0x67, 0x65, 0x73, 0x12, 0x25, 0x2e, 0x6f, 0x70, 0x69,
+	0x6e, 0x69, 0x74, 0x2e, 0x6f, 0x70, 0x68, 0x6f, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75,
+	0x65, 0x72, 0x79, 0x42, 0x72, 0x69, 0x64, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+	0x74, 0x1a, 0x26, 0x2e, 0x6f, 0x70, 0x69, 0x6e, 0x69, 0x74, 0x2e, 0x6f, 0x70, 0x68, 0x6f, 0x73,
+	0x74, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x42, 0x72, 0x69, 0x64, 0x67, 0x65,
+	0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x26, 0x88, 0xe7, 0xb0, 0x2a, 0x01,
+	0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x12, 0x19, 0x2f, 0x6f, 0x70, 0x69, 0x6e, 0x69, 0x74, 0x2f,
+	0x6f, 0x70, 0x68, 0x6f, 0x73, 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65,
+	0x73, 0x12, 0xc5, 0x01, 0x0a, 0x12, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x50, 0x61, 0x69, 0x72, 0x42,
+	0x79, 0x4c, 0x31, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x12, 0x30, 0x2e, 0x6f, 0x70, 0x69, 0x6e, 0x69,
 	0x74, 0x2e, 0x6f, 0x70, 0x68, 0x6f, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72,
-	0x79, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x73,
-	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3a, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82,
-	0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x12, 0x2d, 0x2f, 0x6f, 0x70, 0x69, 0x6e, 0x69, 0x74, 0x2f, 0x6f,
-	0x70, 0x68, 0x6f, 0x73, 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x73,
-	0x2f, 0x7b, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6f, 0x75, 0x74,
-	0x70, 0x75, 0x74, 0x73, 0x12, 0x7c, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x24,
-	0x2e, 0x6f, 0x70, 0x69, 0x6e, 0x69, 0x74, 0x2e, 0x6f, 0x70, 0x68, 0x6f, 0x73, 0x74, 0x2e, 0x76,
-	0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x71,
-	0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x6f, 0x70, 0x69, 0x6e, 0x69, 0x74, 0x2e, 0x6f, 0x70,
-	0x68, 0x6f, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72,
-	0x61, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x25, 0x88, 0xe7, 0xb0,
-	0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x12, 0x18, 0x2f, 0x6f, 0x70, 0x69, 0x6e, 0x69,
-	0x74, 0x2f, 0x6f, 0x70, 0x68, 0x6f, 0x73, 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x72, 0x61,
-	0x6d, 0x73, 0x12, 0xb2, 0x01, 0x0a, 0x07, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x12, 0x25,
-	0x2e, 0x6f, 0x70, 0x69, 0x6e, 0x69, 0x74, 0x2e, 0x6f, 0x70, 0x68, 0x6f, 0x73, 0x74, 0x2e, 0x76,
-	0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x52, 0x65,
-	0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x6f, 0x70, 0x69, 0x6e, 0x69, 0x74, 0x2e, 0x6f,
-	0x70, 0x68, 0x6f, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x43, 0x6c,
-	0x61, 0x69, 0x6d, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x58, 0x88,
-	0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4d, 0x12, 0x4b, 0x2f, 0x6f, 0x70, 0x69,
+	0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x50, 0x61, 0x69, 0x72, 0x42, 0x79, 0x4c, 0x31, 0x44, 0x65,
+	0x6e, 0x6f, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x6f, 0x70, 0x69,
+	0x6e, 0x69, 0x74, 0x2e, 0x6f, 0x70, 0x68, 0x6f, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75,
+	0x65, 0x72, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x50, 0x61, 0x69, 0x72, 0x42, 0x79, 0x4c, 0x31,
+	0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4a, 0x88,
+	0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3f, 0x12, 0x3d, 0x2f, 0x6f, 0x70, 0x69,
 	0x6e, 0x69, 0x74, 0x2f, 0x6f, 0x70, 0x68, 0x6f, 0x73, 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x72,
 	0x69, 0x64, 0x67, 0x65, 0x73, 0x2f, 0x7b, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x5f, 0x69, 0x64,
-	0x7d, 0x2f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x73, 0x2f, 0x7b, 0x77,
-	0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x7d, 0x2f,
-	0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x42, 0xc1, 0x01, 0x0a, 0x14, 0x63, 0x6f, 0x6d, 0x2e,
+	0x7d, 0x2f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x70, 0x61, 0x69, 0x72, 0x73, 0x2f, 0x62, 0x79,
+	0x5f, 0x6c, 0x31, 0x5f, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x12, 0xc5, 0x01, 0x0a, 0x12, 0x54, 0x6f,
+	0x6b, 0x65, 0x6e, 0x50, 0x61, 0x69, 0x72, 0x42, 0x79, 0x4c, 0x32, 0x44, 0x65, 0x6e, 0x6f, 0x6d,
+	0x12, 0x30, 0x2e, 0x6f, 0x70, 0x69, 0x6e, 0x69, 0x74, 0x2e, 0x6f, 0x70, 0x68, 0x6f, 0x73, 0x74,
+	0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x50, 0x61,
+	0x69, 0x72, 0x42, 0x79, 0x4c, 0x32, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65,
+	0x73, 0x74, 0x1a, 0x31, 0x2e, 0x6f, 0x70, 0x69, 0x6e, 0x69, 0x74, 0x2e, 0x6f, 0x70, 0x68, 0x6f,
+	0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e,
+	0x50, 0x61, 0x69, 0x72, 0x42, 0x79, 0x4c, 0x32, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x52, 0x65, 0x73,
+	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4a, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93,
+	0x02, 0x3f, 0x12, 0x3d, 0x2f, 0x6f, 0x70, 0x69, 0x6e, 0x69, 0x74, 0x2f, 0x6f, 0x70, 0x68, 0x6f,
+	0x73, 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x73, 0x2f, 0x7b, 0x62,
+	0x72, 0x69, 0x64, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f,
+	0x70, 0x61, 0x69, 0x72, 0x73, 0x2f, 0x62, 0x79, 0x5f, 0x6c, 0x32, 0x5f, 0x64, 0x65, 0x6e, 0x6f,
+	0x6d, 0x12, 0xa1, 0x01, 0x0a, 0x0a, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x50, 0x61, 0x69, 0x72, 0x73,
+	0x12, 0x28, 0x2e, 0x6f, 0x70, 0x69, 0x6e, 0x69, 0x74, 0x2e, 0x6f, 0x70, 0x68, 0x6f, 0x73, 0x74,
+	0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x50, 0x61,
+	0x69, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x6f, 0x70, 0x69,
+	0x6e, 0x69, 0x74, 0x2e, 0x6f, 0x70, 0x68, 0x6f, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75,
+	0x65, 0x72, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x50, 0x61, 0x69, 0x72, 0x73, 0x52, 0x65, 0x73,
+	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3e, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93,
+	0x02, 0x33, 0x12, 0x31, 0x2f, 0x6f, 0x70, 0x69, 0x6e, 0x69, 0x74, 0x2f, 0x6f, 0x70, 0x68, 0x6f,
+	0x73, 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x73, 0x2f, 0x7b, 0x62,
+	0x72, 0x69, 0x64, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f,
+	0x70, 0x61, 0x69, 0x72, 0x73, 0x12, 0xc6, 0x01, 0x0a, 0x13, 0x4c, 0x61, 0x73, 0x74, 0x46, 0x69,
+	0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x31, 0x2e,
+	0x6f, 0x70, 0x69, 0x6e, 0x69, 0x74, 0x2e, 0x6f, 0x70, 0x68, 0x6f, 0x73, 0x74, 0x2e, 0x76, 0x31,
+	0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4c, 0x61, 0x73, 0x74, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69,
+	0x7a, 0x65, 0x64, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+	0x1a, 0x32, 0x2e, 0x6f, 0x70, 0x69, 0x6e, 0x69, 0x74, 0x2e, 0x6f, 0x70, 0x68, 0x6f, 0x73, 0x74,
+	0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4c, 0x61, 0x73, 0x74, 0x46, 0x69, 0x6e,
+	0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70,
+	0x6f, 0x6e, 0x73, 0x65, 0x22, 0x48, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02,
+	0x3d, 0x12, 0x3b, 0x2f, 0x6f, 0x70, 0x69, 0x6e, 0x69, 0x74, 0x2f, 0x6f, 0x70, 0x68, 0x6f, 0x73,
+	0x74, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x73, 0x2f, 0x7b, 0x62, 0x72,
+	0x69, 0x64, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x66, 0x69,
+	0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0xb8,
+	0x01, 0x0a, 0x0e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61,
+	0x6c, 0x12, 0x2c, 0x2e, 0x6f, 0x70, 0x69, 0x6e, 0x69, 0x74, 0x2e, 0x6f, 0x70, 0x68, 0x6f, 0x73,
+	0x74, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74,
+	0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
+	0x2d, 0x2e, 0x6f, 0x70, 0x69, 0x6e, 0x69, 0x74, 0x2e, 0x6f, 0x70, 0x68, 0x6f, 0x73, 0x74, 0x2e,
+	0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x72,
+	0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x49,
+	0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3e, 0x12, 0x3c, 0x2f, 0x6f, 0x70,
+	0x69, 0x6e, 0x69, 0x74, 0x2f, 0x6f, 0x70, 0x68, 0x6f, 0x73, 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x62,
+	0x72, 0x69, 0x64, 0x67, 0x65, 0x73, 0x2f, 0x7b, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x5f, 0x69,
+	0x64, 0x7d, 0x2f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x2f, 0x7b, 0x6f, 0x75, 0x74, 0x70,
+	0x75, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7d, 0x12, 0xac, 0x01, 0x0a, 0x0f, 0x4f, 0x75,
+	0x74, 0x70, 0x75, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x73, 0x12, 0x2d, 0x2e,
 	0x6f, 0x70, 0x69, 0x6e, 0x69, 0x74, 0x2e, 0x6f, 0x70, 0x68, 0x6f, 0x73, 0x74, 0x2e, 0x76, 0x31,
-	0x42, 0x0a, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x3b,
-	0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x6e, 0x69, 0x74, 0x69,
-	0x61, 0x2d, 0x6c, 0x61, 0x62, 0x73, 0x2f, 0x4f, 0x50, 0x69, 0x6e, 0x69, 0x74, 0x2f, 0x61, 0x70,
-	0x69, 0x2f, 0x6f, 0x70, 0x69, 0x6e, 0x69, 0x74, 0x2f, 0x6f, 0x70, 0x68, 0x6f, 0x73, 0x74, 0x2f,
-	0x76, 0x31, 0x3b, 0x6f, 0x70, 0x68, 0x6f, 0x73, 0x74, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4f, 0x4f,
-	0x58, 0xaa, 0x02, 0x10, 0x4f, 0x70, 0x69, 0x6e, 0x69, 0x74, 0x2e, 0x4f, 0x70, 0x68, 0x6f, 0x73,
-	0x74, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x10, 0x4f, 0x70, 0x69, 0x6e, 0x69, 0x74, 0x5c, 0x4f, 0x70,
-	0x68, 0x6f, 0x73, 0x74, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x1c, 0x4f, 0x70, 0x69, 0x6e, 0x69, 0x74,
-	0x5c, 0x4f, 0x70, 0x68, 0x6f, 0x73, 0x74, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65,
-	0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x12, 0x4f, 0x70, 0x69, 0x6e, 0x69, 0x74, 0x3a,
-	0x3a, 0x4f, 0x70, 0x68, 0x6f, 0x73, 0x74, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f,
-	0x74, 0x6f, 0x33,
+	0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x72, 0x6f, 0x70,
+	0x6f, 0x73, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x6f,
+	0x70, 0x69, 0x6e, 0x69, 0x74, 0x2e, 0x6f, 0x70, 0x68, 0x6f, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e,
+	0x51, 0x75, 0x65, 0x72, 0x79, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x6f,
+	0x73, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3a, 0x88, 0xe7,
+	0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x12, 0x2d, 0x2f, 0x6f, 0x70, 0x69, 0x6e,
+	0x69, 0x74, 0x2f, 0x6f, 0x70, 0x68, 0x6f, 0x73, 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x72, 0x69,
+	0x64, 0x67, 0x65, 0x73, 0x2f, 0x7b, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x7d,
+	0x2f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x12, 0x7c, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61,
+	0x6d, 0x73, 0x12, 0x24, 0x2e, 0x6f, 0x70, 0x69, 0x6e, 0x69, 0x74, 0x2e, 0x6f, 0x70, 0x68, 0x6f,
+	0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d,
+	0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x6f, 0x70, 0x69, 0x6e, 0x69,
+	0x74, 0x2e, 0x6f, 0x70, 0x68, 0x6f, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72,
+	0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
+	0x25, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x12, 0x18, 0x2f, 0x6f,
+	0x70, 0x69, 0x6e, 0x69, 0x74, 0x2f, 0x6f, 0x70, 0x68, 0x6f, 0x73, 0x74, 0x2f, 0x76, 0x31, 0x2f,
+	0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0xb2, 0x01, 0x0a, 0x07, 0x43, 0x6c, 0x61, 0x69, 0x6d,
+	0x65, 0x64, 0x12, 0x25, 0x2e, 0x6f, 0x70, 0x69, 0x6e, 0x69, 0x74, 0x2e, 0x6f, 0x70, 0x68, 0x6f,
+	0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x43, 0x6c, 0x61, 0x69, 0x6d,
+	0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x6f, 0x70, 0x69, 0x6e,
+	0x69, 0x74, 0x2e, 0x6f, 0x70, 0x68, 0x6f, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65,
+	0x72, 0x79, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+	0x65, 0x22, 0x58, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4d, 0x12, 0x4b,
+	0x2f, 0x6f, 0x70, 0x69, 0x6e, 0x69, 0x74, 0x2f, 0x6f, 0x70, 0x68, 0x6f, 0x73, 0x74, 0x2f, 0x76,
+	0x31, 0x2f, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x73, 0x2f, 0x7b, 0x62, 0x72, 0x69, 0x64, 0x67,
+	0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c,
+	0x73, 0x2f, 0x7b, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x61, 0x6c, 0x5f, 0x68, 0x61,
+	0x73, 0x68, 0x7d, 0x2f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x12, 0xb2, 0x01, 0x0a, 0x0e,
+	0x4e, 0x65, 0x78, 0x74, 0x4c, 0x31, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x2c,
+	0x2e, 0x6f, 0x70, 0x69, 0x6e, 0x69, 0x74, 0x2e, 0x6f, 0x70, 0x68, 0x6f, 0x73, 0x74, 0x2e, 0x76,
+	0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4e, 0x65, 0x78, 0x74, 0x4c, 0x31, 0x53, 0x65, 0x71,
+	0x75, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x6f,
+	0x70, 0x69, 0x6e, 0x69, 0x74, 0x2e, 0x6f, 0x70, 0x68, 0x6f, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e,
+	0x51, 0x75, 0x65, 0x72, 0x79, 0x4e, 0x65, 0x78, 0x74, 0x4c, 0x31, 0x53, 0x65, 0x71, 0x75, 0x65,
+	0x6e, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x43, 0x88, 0xe7, 0xb0,
+	0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x38, 0x12, 0x36, 0x2f, 0x6f, 0x70, 0x69, 0x6e, 0x69,
+	0x74, 0x2f, 0x6f, 0x70, 0x68, 0x6f, 0x73, 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x72, 0x69, 0x64,
+	0x67, 0x65, 0x73, 0x2f, 0x7b, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f,
+	0x6e, 0x65, 0x78, 0x74, 0x5f, 0x6c, 0x31, 0x5f, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65,
+	0x42, 0xc1, 0x01, 0x0a, 0x14, 0x63, 0x6f, 0x6d, 0x2e, 0x6f, 0x70, 0x69, 0x6e, 0x69, 0x74, 0x2e,
+	0x6f, 0x70, 0x68, 0x6f, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x42, 0x0a, 0x51, 0x75, 0x65, 0x72, 0x79,
+	0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x3b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e,
+	0x63, 0x6f, 0x6d, 0x2f, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x2d, 0x6c, 0x61, 0x62, 0x73, 0x2f,
+	0x4f, 0x50, 0x69, 0x6e, 0x69, 0x74, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6f, 0x70, 0x69, 0x6e, 0x69,
+	0x74, 0x2f, 0x6f, 0x70, 0x68, 0x6f, 0x73, 0x74, 0x2f, 0x76, 0x31, 0x3b, 0x6f, 0x70, 0x68, 0x6f,
+	0x73, 0x74, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x4f, 0x4f, 0x58, 0xaa, 0x02, 0x10, 0x4f, 0x70, 0x69,
+	0x6e, 0x69, 0x74, 0x2e, 0x4f, 0x70, 0x68, 0x6f, 0x73, 0x74, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x10,
+	0x4f, 0x70, 0x69, 0x6e, 0x69, 0x74, 0x5c, 0x4f, 0x70, 0x68, 0x6f, 0x73, 0x74, 0x5c, 0x56, 0x31,
+	0xe2, 0x02, 0x1c, 0x4f, 0x70, 0x69, 0x6e, 0x69, 0x74, 0x5c, 0x4f, 0x70, 0x68, 0x6f, 0x73, 0x74,
+	0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea,
+	0x02, 0x12, 0x4f, 0x70, 0x69, 0x6e, 0x69, 0x74, 0x3a, 0x3a, 0x4f, 0x70, 0x68, 0x6f, 0x73, 0x74,
+	0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
 var (
@@ -10632,7 +11531,7 @@ func file_opinit_ophost_v1_query_proto_rawDescGZIP() []byte {
 	return file_opinit_ophost_v1_query_proto_rawDescData
 }
 
-var file_opinit_ophost_v1_query_proto_msgTypes = make([]protoimpl.MessageInfo, 20)
+var file_opinit_ophost_v1_query_proto_msgTypes = make([]protoimpl.MessageInfo, 22)
 var file_opinit_ophost_v1_query_proto_goTypes = []interface{}{
 	(*QueryBridgeRequest)(nil),               // 0: opinit.ophost.v1.QueryBridgeRequest
 	(*QueryBridgeResponse)(nil),              // 1: opinit.ophost.v1.QueryBridgeResponse
@@ -10654,29 +11553,31 @@ var file_opinit_ophost_v1_query_proto_goTypes = []interface{}{
 	(*QueryParamsResponse)(nil),              // 17: opinit.ophost.v1.QueryParamsResponse
 	(*QueryClaimedRequest)(nil),              // 18: opinit.ophost.v1.QueryClaimedRequest
 	(*QueryClaimedResponse)(nil),             // 19: opinit.ophost.v1.QueryClaimedResponse
-	(*BridgeConfig)(nil),                     // 20: opinit.ophost.v1.BridgeConfig
-	(*v1beta1.PageRequest)(nil),              // 21: cosmos.base.query.v1beta1.PageRequest
-	(*v1beta1.PageResponse)(nil),             // 22: cosmos.base.query.v1beta1.PageResponse
-	(*TokenPair)(nil),                        // 23: opinit.ophost.v1.TokenPair
-	(*Output)(nil),                           // 24: opinit.ophost.v1.Output
-	(*Params)(nil),                           // 25: opinit.ophost.v1.Params
+	(*QueryNextL1SequenceRequest)(nil),       // 20: opinit.ophost.v1.QueryNextL1SequenceRequest
+	(*QueryNextL1SequenceResponse)(nil),      // 21: opinit.ophost.v1.QueryNextL1SequenceResponse
+	(*BridgeConfig)(nil),                     // 22: opinit.ophost.v1.BridgeConfig
+	(*v1beta1.PageRequest)(nil),              // 23: cosmos.base.query.v1beta1.PageRequest
+	(*v1beta1.PageResponse)(nil),             // 24: cosmos.base.query.v1beta1.PageResponse
+	(*TokenPair)(nil),                        // 25: opinit.ophost.v1.TokenPair
+	(*Output)(nil),                           // 26: opinit.ophost.v1.Output
+	(*Params)(nil),                           // 27: opinit.ophost.v1.Params
 }
 var file_opinit_ophost_v1_query_proto_depIdxs = []int32{
-	20, // 0: opinit.ophost.v1.QueryBridgeResponse.bridge_config:type_name -> opinit.ophost.v1.BridgeConfig
-	21, // 1: opinit.ophost.v1.QueryBridgesRequest.pagination:type_name -> cosmos.base.query.v1beta1.PageRequest
+	22, // 0: opinit.ophost.v1.QueryBridgeResponse.bridge_config:type_name -> opinit.ophost.v1.BridgeConfig
+	23, // 1: opinit.ophost.v1.QueryBridgesRequest.pagination:type_name -> cosmos.base.query.v1beta1.PageRequest
 	1,  // 2: opinit.ophost.v1.QueryBridgesResponse.bridges:type_name -> opinit.ophost.v1.QueryBridgeResponse
-	22, // 3: opinit.ophost.v1.QueryBridgesResponse.pagination:type_name -> cosmos.base.query.v1beta1.PageResponse
-	23, // 4: opinit.ophost.v1.QueryTokenPairByL1DenomResponse.token_pair:type_name -> opinit.ophost.v1.TokenPair
-	23, // 5: opinit.ophost.v1.QueryTokenPairByL2DenomResponse.token_pair:type_name -> opinit.ophost.v1.TokenPair
-	21, // 6: opinit.ophost.v1.QueryTokenPairsRequest.pagination:type_name -> cosmos.base.query.v1beta1.PageRequest
-	23, // 7: opinit.ophost.v1.QueryTokenPairsResponse.token_pairs:type_name -> opinit.ophost.v1.TokenPair
-	22, // 8: opinit.ophost.v1.QueryTokenPairsResponse.pagination:type_name -> cosmos.base.query.v1beta1.PageResponse
-	24, // 9: opinit.ophost.v1.QueryLastFinalizedOutputResponse.output_proposal:type_name -> opinit.ophost.v1.Output
-	24, // 10: opinit.ophost.v1.QueryOutputProposalResponse.output_proposal:type_name -> opinit.ophost.v1.Output
-	21, // 11: opinit.ophost.v1.QueryOutputProposalsRequest.pagination:type_name -> cosmos.base.query.v1beta1.PageRequest
+	24, // 3: opinit.ophost.v1.QueryBridgesResponse.pagination:type_name -> cosmos.base.query.v1beta1.PageResponse
+	25, // 4: opinit.ophost.v1.QueryTokenPairByL1DenomResponse.token_pair:type_name -> opinit.ophost.v1.TokenPair
+	25, // 5: opinit.ophost.v1.QueryTokenPairByL2DenomResponse.token_pair:type_name -> opinit.ophost.v1.TokenPair
+	23, // 6: opinit.ophost.v1.QueryTokenPairsRequest.pagination:type_name -> cosmos.base.query.v1beta1.PageRequest
+	25, // 7: opinit.ophost.v1.QueryTokenPairsResponse.token_pairs:type_name -> opinit.ophost.v1.TokenPair
+	24, // 8: opinit.ophost.v1.QueryTokenPairsResponse.pagination:type_name -> cosmos.base.query.v1beta1.PageResponse
+	26, // 9: opinit.ophost.v1.QueryLastFinalizedOutputResponse.output_proposal:type_name -> opinit.ophost.v1.Output
+	26, // 10: opinit.ophost.v1.QueryOutputProposalResponse.output_proposal:type_name -> opinit.ophost.v1.Output
+	23, // 11: opinit.ophost.v1.QueryOutputProposalsRequest.pagination:type_name -> cosmos.base.query.v1beta1.PageRequest
 	13, // 12: opinit.ophost.v1.QueryOutputProposalsResponse.output_proposals:type_name -> opinit.ophost.v1.QueryOutputProposalResponse
-	22, // 13: opinit.ophost.v1.QueryOutputProposalsResponse.pagination:type_name -> cosmos.base.query.v1beta1.PageResponse
-	25, // 14: opinit.ophost.v1.QueryParamsResponse.params:type_name -> opinit.ophost.v1.Params
+	24, // 13: opinit.ophost.v1.QueryOutputProposalsResponse.pagination:type_name -> cosmos.base.query.v1beta1.PageResponse
+	27, // 14: opinit.ophost.v1.QueryParamsResponse.params:type_name -> opinit.ophost.v1.Params
 	0,  // 15: opinit.ophost.v1.Query.Bridge:input_type -> opinit.ophost.v1.QueryBridgeRequest
 	2,  // 16: opinit.ophost.v1.Query.Bridges:input_type -> opinit.ophost.v1.QueryBridgesRequest
 	4,  // 17: opinit.ophost.v1.Query.TokenPairByL1Denom:input_type -> opinit.ophost.v1.QueryTokenPairByL1DenomRequest
@@ -10687,18 +11588,20 @@ var file_opinit_ophost_v1_query_proto_depIdxs = []int32{
 	14, // 22: opinit.ophost.v1.Query.OutputProposals:input_type -> opinit.ophost.v1.QueryOutputProposalsRequest
 	16, // 23: opinit.ophost.v1.Query.Params:input_type -> opinit.ophost.v1.QueryParamsRequest
 	18, // 24: opinit.ophost.v1.Query.Claimed:input_type -> opinit.ophost.v1.QueryClaimedRequest
-	1,  // 25: opinit.ophost.v1.Query.Bridge:output_type -> opinit.ophost.v1.QueryBridgeResponse
-	3,  // 26: opinit.ophost.v1.Query.Bridges:output_type -> opinit.ophost.v1.QueryBridgesResponse
-	5,  // 27: opinit.ophost.v1.Query.TokenPairByL1Denom:output_type -> opinit.ophost.v1.QueryTokenPairByL1DenomResponse
-	7,  // 28: opinit.ophost.v1.Query.TokenPairByL2Denom:output_type -> opinit.ophost.v1.QueryTokenPairByL2DenomResponse
-	9,  // 29: opinit.ophost.v1.Query.TokenPairs:output_type -> opinit.ophost.v1.QueryTokenPairsResponse
-	11, // 30: opinit.ophost.v1.Query.LastFinalizedOutput:output_type -> opinit.ophost.v1.QueryLastFinalizedOutputResponse
-	13, // 31: opinit.ophost.v1.Query.OutputProposal:output_type -> opinit.ophost.v1.QueryOutputProposalResponse
-	15, // 32: opinit.ophost.v1.Query.OutputProposals:output_type -> opinit.ophost.v1.QueryOutputProposalsResponse
-	17, // 33: opinit.ophost.v1.Query.Params:output_type -> opinit.ophost.v1.QueryParamsResponse
-	19, // 34: opinit.ophost.v1.Query.Claimed:output_type -> opinit.ophost.v1.QueryClaimedResponse
-	25, // [25:35] is the sub-list for method output_type
-	15, // [15:25] is the sub-list for method input_type
+	20, // 25: opinit.ophost.v1.Query.NextL1Sequence:input_type -> opinit.ophost.v1.QueryNextL1SequenceRequest
+	1,  // 26: opinit.ophost.v1.Query.Bridge:output_type -> opinit.ophost.v1.QueryBridgeResponse
+	3,  // 27: opinit.ophost.v1.Query.Bridges:output_type -> opinit.ophost.v1.QueryBridgesResponse
+	5,  // 28: opinit.ophost.v1.Query.TokenPairByL1Denom:output_type -> opinit.ophost.v1.QueryTokenPairByL1DenomResponse
+	7,  // 29: opinit.ophost.v1.Query.TokenPairByL2Denom:output_type -> opinit.ophost.v1.QueryTokenPairByL2DenomResponse
+	9,  // 30: opinit.ophost.v1.Query.TokenPairs:output_type -> opinit.ophost.v1.QueryTokenPairsResponse
+	11, // 31: opinit.ophost.v1.Query.LastFinalizedOutput:output_type -> opinit.ophost.v1.QueryLastFinalizedOutputResponse
+	13, // 32: opinit.ophost.v1.Query.OutputProposal:output_type -> opinit.ophost.v1.QueryOutputProposalResponse
+	15, // 33: opinit.ophost.v1.Query.OutputProposals:output_type -> opinit.ophost.v1.QueryOutputProposalsResponse
+	17, // 34: opinit.ophost.v1.Query.Params:output_type -> opinit.ophost.v1.QueryParamsResponse
+	19, // 35: opinit.ophost.v1.Query.Claimed:output_type -> opinit.ophost.v1.QueryClaimedResponse
+	21, // 36: opinit.ophost.v1.Query.NextL1Sequence:output_type -> opinit.ophost.v1.QueryNextL1SequenceResponse
+	26, // [26:37] is the sub-list for method output_type
+	15, // [15:26] is the sub-list for method input_type
 	15, // [15:15] is the sub-list for extension type_name
 	15, // [15:15] is the sub-list for extension extendee
 	0,  // [0:15] is the sub-list for field type_name
@@ -10951,6 +11854,30 @@ func file_opinit_ophost_v1_query_proto_init() {
 				return nil
 			}
 		}
+		file_opinit_ophost_v1_query_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*QueryNextL1SequenceRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_opinit_ophost_v1_query_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*QueryNextL1SequenceResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
 	}
 	type x struct{}
 	out := protoimpl.TypeBuilder{
@@ -10958,7 +11885,7 @@ func file_opinit_ophost_v1_query_proto_init() {
 			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
 			RawDescriptor: file_opinit_ophost_v1_query_proto_rawDesc,
 			NumEnums:      0,
-			NumMessages:   20,
+			NumMessages:   22,
 			NumExtensions: 0,
 			NumServices:   1,
 		},
diff --git a/api/opinit/ophost/v1/query_grpc.pb.go b/api/opinit/ophost/v1/query_grpc.pb.go
index be50ae51..1ee842e3 100644
--- a/api/opinit/ophost/v1/query_grpc.pb.go
+++ b/api/opinit/ophost/v1/query_grpc.pb.go
@@ -29,6 +29,7 @@ const (
 	Query_OutputProposals_FullMethodName     = "/opinit.ophost.v1.Query/OutputProposals"
 	Query_Params_FullMethodName              = "/opinit.ophost.v1.Query/Params"
 	Query_Claimed_FullMethodName             = "/opinit.ophost.v1.Query/Claimed"
+	Query_NextL1Sequence_FullMethodName      = "/opinit.ophost.v1.Query/NextL1Sequence"
 )
 
 // QueryClient is the client API for Query service.
@@ -56,6 +57,8 @@ type QueryClient interface {
 	Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error)
 	// Claimed queries whether the output is claimed.
 	Claimed(ctx context.Context, in *QueryClaimedRequest, opts ...grpc.CallOption) (*QueryClaimedResponse, error)
+	// NextL1Sequence queries the next l1 sequence.
+	NextL1Sequence(ctx context.Context, in *QueryNextL1SequenceRequest, opts ...grpc.CallOption) (*QueryNextL1SequenceResponse, error)
 }
 
 type queryClient struct {
@@ -166,6 +169,16 @@ func (c *queryClient) Claimed(ctx context.Context, in *QueryClaimedRequest, opts
 	return out, nil
 }
 
+func (c *queryClient) NextL1Sequence(ctx context.Context, in *QueryNextL1SequenceRequest, opts ...grpc.CallOption) (*QueryNextL1SequenceResponse, error) {
+	cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
+	out := new(QueryNextL1SequenceResponse)
+	err := c.cc.Invoke(ctx, Query_NextL1Sequence_FullMethodName, in, out, cOpts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
 // QueryServer is the server API for Query service.
 // All implementations must embed UnimplementedQueryServer
 // for forward compatibility
@@ -191,6 +204,8 @@ type QueryServer interface {
 	Params(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error)
 	// Claimed queries whether the output is claimed.
 	Claimed(context.Context, *QueryClaimedRequest) (*QueryClaimedResponse, error)
+	// NextL1Sequence queries the next l1 sequence.
+	NextL1Sequence(context.Context, *QueryNextL1SequenceRequest) (*QueryNextL1SequenceResponse, error)
 	mustEmbedUnimplementedQueryServer()
 }
 
@@ -228,6 +243,9 @@ func (UnimplementedQueryServer) Params(context.Context, *QueryParamsRequest) (*Q
 func (UnimplementedQueryServer) Claimed(context.Context, *QueryClaimedRequest) (*QueryClaimedResponse, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method Claimed not implemented")
 }
+func (UnimplementedQueryServer) NextL1Sequence(context.Context, *QueryNextL1SequenceRequest) (*QueryNextL1SequenceResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method NextL1Sequence not implemented")
+}
 func (UnimplementedQueryServer) mustEmbedUnimplementedQueryServer() {}
 
 // UnsafeQueryServer may be embedded to opt out of forward compatibility for this service.
@@ -421,6 +439,24 @@ func _Query_Claimed_Handler(srv interface{}, ctx context.Context, dec func(inter
 	return interceptor(ctx, in, info, handler)
 }
 
+func _Query_NextL1Sequence_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(QueryNextL1SequenceRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(QueryServer).NextL1Sequence(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: Query_NextL1Sequence_FullMethodName,
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(QueryServer).NextL1Sequence(ctx, req.(*QueryNextL1SequenceRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
 // Query_ServiceDesc is the grpc.ServiceDesc for Query service.
 // It's only intended for direct use with grpc.RegisterService,
 // and not to be introspected or modified (even as a copy)
@@ -468,6 +504,10 @@ var Query_ServiceDesc = grpc.ServiceDesc{
 			MethodName: "Claimed",
 			Handler:    _Query_Claimed_Handler,
 		},
+		{
+			MethodName: "NextL1Sequence",
+			Handler:    _Query_NextL1Sequence_Handler,
+		},
 	},
 	Streams:  []grpc.StreamDesc{},
 	Metadata: "opinit/ophost/v1/query.proto",
diff --git a/proto/opinit/opchild/v1/query.proto b/proto/opinit/opchild/v1/query.proto
index da342386..1da16e86 100644
--- a/proto/opinit/opchild/v1/query.proto
+++ b/proto/opinit/opchild/v1/query.proto
@@ -39,6 +39,18 @@ service Query {
     option (cosmos.query.v1.module_query_safe) = true;
     option (google.api.http).get               = "/opinit/opchild/v1/params";
   }
+
+  // NextL1Sequence queries the next l1 sequence number.
+  rpc NextL1Sequence(QueryNextL1SequenceRequest) returns (QueryNextL1SequenceResponse) {
+    option (cosmos.query.v1.module_query_safe) = true;
+    option (google.api.http).get               = "/opinit/opchild/v1/next_l1_sequence";
+  }
+
+  // NextL2Sequence queries the next l2 sequence number.
+  rpc NextL2Sequence(QueryNextL2SequenceRequest) returns (QueryNextL2SequenceResponse) {
+    option (cosmos.query.v1.module_query_safe) = true;
+    option (google.api.http).get               = "/opinit/opchild/v1/next_l2_sequence";
+  }
 }
 
 // QueryValidatorsRequest is request type for Query/Validators RPC method.
@@ -85,3 +97,21 @@ message QueryParamsResponse {
   // params holds all the parameters of this module.
   Params params = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true];
 }
+
+// QueryNextL1SequenceRequest is request type for the Query/NextL1Sequence RPC method.
+message QueryNextL1SequenceRequest {}
+
+// QueryNextL1SequenceResponse is response type for the Query/NextL1Sequence RPC method.
+message QueryNextL1SequenceResponse {
+  // next_l1_sequence holds the next l1 sequence number.
+  uint64 next_l1_sequence = 1;
+}
+
+// QueryNextL2SequenceRequest is request type for the Query/NextL2Sequence RPC method.
+message QueryNextL2SequenceRequest {}
+
+// QueryNextL2SequenceResponse is response type for the Query/NextL2Sequence RPC method.
+message QueryNextL2SequenceResponse {
+  // next_l2_sequence holds the next l2 sequence number.
+  uint64 next_l2_sequence = 1;
+}
diff --git a/proto/opinit/ophost/v1/query.proto b/proto/opinit/ophost/v1/query.proto
index 0c5c6042..23dd3e88 100644
--- a/proto/opinit/ophost/v1/query.proto
+++ b/proto/opinit/ophost/v1/query.proto
@@ -71,6 +71,12 @@ service Query {
     option (cosmos.query.v1.module_query_safe) = true;
     option (google.api.http).get = "/opinit/ophost/v1/bridges/{bridge_id}/withdrawals/{withdrawal_hash}/claimed";
   }
+
+  // NextL1Sequence queries the next l1 sequence.
+  rpc NextL1Sequence(QueryNextL1SequenceRequest) returns (QueryNextL1SequenceResponse) {
+    option (cosmos.query.v1.module_query_safe) = true;
+    option (google.api.http).get               = "/opinit/ophost/v1/bridges/{bridge_id}/next_l1_sequence";
+  }
 }
 
 // QueryBridgeRequest is request type for Query/Bridge RPC method.
@@ -200,3 +206,13 @@ message QueryClaimedRequest {
 message QueryClaimedResponse {
   bool claimed = 1;
 }
+
+// QueryNextL1SequenceRequest is request type for the Query/NextL1Sequence RPC method.
+message QueryNextL1SequenceRequest {
+  uint64 bridge_id = 1;
+}
+
+// QueryNextL1SequenceResponse is response type for the Query/NextL1Sequence RPC method.
+message QueryNextL1SequenceResponse {
+  uint64 next_l1_sequence = 1;
+}
diff --git a/x/opchild/keeper/querier.go b/x/opchild/keeper/querier.go
index f585719d..3741edc7 100644
--- a/x/opchild/keeper/querier.go
+++ b/x/opchild/keeper/querier.go
@@ -75,3 +75,21 @@ func (q Querier) Params(ctx context.Context, req *types.QueryParamsRequest) (*ty
 
 	return &types.QueryParamsResponse{Params: params}, nil
 }
+
+func (q Querier) NextL1Sequence(ctx context.Context, req *types.QueryNextL1SequenceRequest) (*types.QueryNextL1SequenceResponse, error) {
+	nextL1Sequence, err := q.GetNextL1Sequence(ctx)
+	if err != nil {
+		return nil, err
+	}
+
+	return &types.QueryNextL1SequenceResponse{NextL1Sequence: nextL1Sequence}, nil
+}
+
+func (q Querier) NextL2Sequence(ctx context.Context, req *types.QueryNextL2SequenceRequest) (*types.QueryNextL2SequenceResponse, error) {
+	nextL2Sequence, err := q.GetNextL2Sequence(ctx)
+	if err != nil {
+		return nil, err
+	}
+
+	return &types.QueryNextL2SequenceResponse{NextL2Sequence: nextL2Sequence}, nil
+}
diff --git a/x/opchild/keeper/querier_test.go b/x/opchild/keeper/querier_test.go
index 5c4ac4b1..4abbe232 100644
--- a/x/opchild/keeper/querier_test.go
+++ b/x/opchild/keeper/querier_test.go
@@ -88,3 +88,27 @@ func Test_QueryParams(t *testing.T) {
 	require.NoError(t, err)
 	require.Equal(t, params, res.Params)
 }
+
+func Test_QueryNextL1Sequence(t *testing.T) {
+	ctx, input := createDefaultTestInput(t)
+
+	// update the next L1 sequence
+	require.NoError(t, input.OPChildKeeper.NextL1Sequence.Set(ctx, 100))
+
+	q := keeper.NewQuerier(input.OPChildKeeper)
+	res, err := q.NextL1Sequence(ctx, &types.QueryNextL1SequenceRequest{})
+	require.NoError(t, err)
+	require.Equal(t, types.QueryNextL1SequenceResponse{NextL1Sequence: 100}, *res)
+}
+
+func Test_QueryNextL2Sequence(t *testing.T) {
+	ctx, input := createDefaultTestInput(t)
+
+	// update the next L2 sequence
+	require.NoError(t, input.OPChildKeeper.NextL2Sequence.Set(ctx, 100))
+
+	q := keeper.NewQuerier(input.OPChildKeeper)
+	res, err := q.NextL2Sequence(ctx, &types.QueryNextL2SequenceRequest{})
+	require.NoError(t, err)
+	require.Equal(t, types.QueryNextL2SequenceResponse{NextL2Sequence: 100}, *res)
+}
diff --git a/x/opchild/types/query.pb.go b/x/opchild/types/query.pb.go
index a9799c44..db46c702 100644
--- a/x/opchild/types/query.pb.go
+++ b/x/opchild/types/query.pb.go
@@ -391,6 +391,172 @@ func (m *QueryParamsResponse) GetParams() Params {
 	return Params{}
 }
 
+// QueryNextL1SequenceRequest is request type for the Query/NextL1Sequence RPC method.
+type QueryNextL1SequenceRequest struct {
+}
+
+func (m *QueryNextL1SequenceRequest) Reset()         { *m = QueryNextL1SequenceRequest{} }
+func (m *QueryNextL1SequenceRequest) String() string { return proto.CompactTextString(m) }
+func (*QueryNextL1SequenceRequest) ProtoMessage()    {}
+func (*QueryNextL1SequenceRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_15cfbb5d02a763ec, []int{8}
+}
+func (m *QueryNextL1SequenceRequest) XXX_Unmarshal(b []byte) error {
+	return m.Unmarshal(b)
+}
+func (m *QueryNextL1SequenceRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	if deterministic {
+		return xxx_messageInfo_QueryNextL1SequenceRequest.Marshal(b, m, deterministic)
+	} else {
+		b = b[:cap(b)]
+		n, err := m.MarshalToSizedBuffer(b)
+		if err != nil {
+			return nil, err
+		}
+		return b[:n], nil
+	}
+}
+func (m *QueryNextL1SequenceRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_QueryNextL1SequenceRequest.Merge(m, src)
+}
+func (m *QueryNextL1SequenceRequest) XXX_Size() int {
+	return m.Size()
+}
+func (m *QueryNextL1SequenceRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_QueryNextL1SequenceRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_QueryNextL1SequenceRequest proto.InternalMessageInfo
+
+// QueryNextL1SequenceResponse is response type for the Query/NextL1Sequence RPC method.
+type QueryNextL1SequenceResponse struct {
+	// next_l1_sequence holds the next l1 sequence number.
+	NextL1Sequence uint64 `protobuf:"varint,1,opt,name=next_l1_sequence,json=nextL1Sequence,proto3" json:"next_l1_sequence,omitempty"`
+}
+
+func (m *QueryNextL1SequenceResponse) Reset()         { *m = QueryNextL1SequenceResponse{} }
+func (m *QueryNextL1SequenceResponse) String() string { return proto.CompactTextString(m) }
+func (*QueryNextL1SequenceResponse) ProtoMessage()    {}
+func (*QueryNextL1SequenceResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_15cfbb5d02a763ec, []int{9}
+}
+func (m *QueryNextL1SequenceResponse) XXX_Unmarshal(b []byte) error {
+	return m.Unmarshal(b)
+}
+func (m *QueryNextL1SequenceResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	if deterministic {
+		return xxx_messageInfo_QueryNextL1SequenceResponse.Marshal(b, m, deterministic)
+	} else {
+		b = b[:cap(b)]
+		n, err := m.MarshalToSizedBuffer(b)
+		if err != nil {
+			return nil, err
+		}
+		return b[:n], nil
+	}
+}
+func (m *QueryNextL1SequenceResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_QueryNextL1SequenceResponse.Merge(m, src)
+}
+func (m *QueryNextL1SequenceResponse) XXX_Size() int {
+	return m.Size()
+}
+func (m *QueryNextL1SequenceResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_QueryNextL1SequenceResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_QueryNextL1SequenceResponse proto.InternalMessageInfo
+
+func (m *QueryNextL1SequenceResponse) GetNextL1Sequence() uint64 {
+	if m != nil {
+		return m.NextL1Sequence
+	}
+	return 0
+}
+
+// QueryNextL2SequenceRequest is request type for the Query/NextL2Sequence RPC method.
+type QueryNextL2SequenceRequest struct {
+}
+
+func (m *QueryNextL2SequenceRequest) Reset()         { *m = QueryNextL2SequenceRequest{} }
+func (m *QueryNextL2SequenceRequest) String() string { return proto.CompactTextString(m) }
+func (*QueryNextL2SequenceRequest) ProtoMessage()    {}
+func (*QueryNextL2SequenceRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_15cfbb5d02a763ec, []int{10}
+}
+func (m *QueryNextL2SequenceRequest) XXX_Unmarshal(b []byte) error {
+	return m.Unmarshal(b)
+}
+func (m *QueryNextL2SequenceRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	if deterministic {
+		return xxx_messageInfo_QueryNextL2SequenceRequest.Marshal(b, m, deterministic)
+	} else {
+		b = b[:cap(b)]
+		n, err := m.MarshalToSizedBuffer(b)
+		if err != nil {
+			return nil, err
+		}
+		return b[:n], nil
+	}
+}
+func (m *QueryNextL2SequenceRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_QueryNextL2SequenceRequest.Merge(m, src)
+}
+func (m *QueryNextL2SequenceRequest) XXX_Size() int {
+	return m.Size()
+}
+func (m *QueryNextL2SequenceRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_QueryNextL2SequenceRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_QueryNextL2SequenceRequest proto.InternalMessageInfo
+
+// QueryNextL2SequenceResponse is response type for the Query/NextL2Sequence RPC method.
+type QueryNextL2SequenceResponse struct {
+	// next_l2_sequence holds the next l2 sequence number.
+	NextL2Sequence uint64 `protobuf:"varint,1,opt,name=next_l2_sequence,json=nextL2Sequence,proto3" json:"next_l2_sequence,omitempty"`
+}
+
+func (m *QueryNextL2SequenceResponse) Reset()         { *m = QueryNextL2SequenceResponse{} }
+func (m *QueryNextL2SequenceResponse) String() string { return proto.CompactTextString(m) }
+func (*QueryNextL2SequenceResponse) ProtoMessage()    {}
+func (*QueryNextL2SequenceResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_15cfbb5d02a763ec, []int{11}
+}
+func (m *QueryNextL2SequenceResponse) XXX_Unmarshal(b []byte) error {
+	return m.Unmarshal(b)
+}
+func (m *QueryNextL2SequenceResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	if deterministic {
+		return xxx_messageInfo_QueryNextL2SequenceResponse.Marshal(b, m, deterministic)
+	} else {
+		b = b[:cap(b)]
+		n, err := m.MarshalToSizedBuffer(b)
+		if err != nil {
+			return nil, err
+		}
+		return b[:n], nil
+	}
+}
+func (m *QueryNextL2SequenceResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_QueryNextL2SequenceResponse.Merge(m, src)
+}
+func (m *QueryNextL2SequenceResponse) XXX_Size() int {
+	return m.Size()
+}
+func (m *QueryNextL2SequenceResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_QueryNextL2SequenceResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_QueryNextL2SequenceResponse proto.InternalMessageInfo
+
+func (m *QueryNextL2SequenceResponse) GetNextL2Sequence() uint64 {
+	if m != nil {
+		return m.NextL2Sequence
+	}
+	return 0
+}
+
 func init() {
 	proto.RegisterType((*QueryValidatorsRequest)(nil), "opinit.opchild.v1.QueryValidatorsRequest")
 	proto.RegisterType((*QueryValidatorsResponse)(nil), "opinit.opchild.v1.QueryValidatorsResponse")
@@ -400,52 +566,63 @@ func init() {
 	proto.RegisterType((*QueryBridgeInfoResponse)(nil), "opinit.opchild.v1.QueryBridgeInfoResponse")
 	proto.RegisterType((*QueryParamsRequest)(nil), "opinit.opchild.v1.QueryParamsRequest")
 	proto.RegisterType((*QueryParamsResponse)(nil), "opinit.opchild.v1.QueryParamsResponse")
+	proto.RegisterType((*QueryNextL1SequenceRequest)(nil), "opinit.opchild.v1.QueryNextL1SequenceRequest")
+	proto.RegisterType((*QueryNextL1SequenceResponse)(nil), "opinit.opchild.v1.QueryNextL1SequenceResponse")
+	proto.RegisterType((*QueryNextL2SequenceRequest)(nil), "opinit.opchild.v1.QueryNextL2SequenceRequest")
+	proto.RegisterType((*QueryNextL2SequenceResponse)(nil), "opinit.opchild.v1.QueryNextL2SequenceResponse")
 }
 
 func init() { proto.RegisterFile("opinit/opchild/v1/query.proto", fileDescriptor_15cfbb5d02a763ec) }
 
 var fileDescriptor_15cfbb5d02a763ec = []byte{
-	// 638 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x94, 0x4f, 0x8b, 0xd3, 0x4e,
-	0x18, 0xc7, 0x9b, 0xfd, 0xfd, 0x2c, 0x74, 0x8a, 0xc2, 0x8e, 0x55, 0xdb, 0xee, 0x36, 0x5b, 0x02,
-	0xd6, 0x6e, 0xa5, 0x19, 0x5a, 0x6f, 0x22, 0x88, 0x05, 0x5d, 0xf6, 0x64, 0xed, 0x82, 0x88, 0x97,
-	0x3a, 0x69, 0x66, 0xb3, 0x03, 0x6d, 0x26, 0x9b, 0xa4, 0xc5, 0x45, 0x44, 0xf0, 0xe4, 0xcd, 0x05,
-	0xaf, 0xbe, 0x00, 0xc1, 0x8b, 0x07, 0x5f, 0xc4, 0x1e, 0x3c, 0x2c, 0x7a, 0xf1, 0x24, 0xd2, 0x0a,
-	0xbe, 0x0d, 0xc9, 0xcc, 0x34, 0x7f, 0x6c, 0x6a, 0x7b, 0x29, 0xcd, 0xf3, 0x3c, 0xdf, 0xe7, 0xfb,
-	0x99, 0x67, 0x9e, 0x04, 0x54, 0x98, 0x43, 0x6d, 0xea, 0x23, 0xe6, 0x0c, 0x8e, 0xe8, 0xd0, 0x44,
-	0x93, 0x16, 0x3a, 0x1e, 0x13, 0xf7, 0x44, 0x77, 0x5c, 0xe6, 0x33, 0xb8, 0x29, 0xd2, 0xba, 0x4c,
-	0xeb, 0x93, 0x56, 0x79, 0x13, 0x8f, 0xa8, 0xcd, 0x10, 0xff, 0x15, 0x55, 0xe5, 0xc6, 0x80, 0x79,
-	0x23, 0xe6, 0x21, 0x03, 0x7b, 0x44, 0xc8, 0xd1, 0xa4, 0x65, 0x10, 0x1f, 0xb7, 0x90, 0x83, 0x2d,
-	0x6a, 0x63, 0x9f, 0x32, 0x5b, 0xd6, 0x6e, 0xc9, 0xda, 0x79, 0x59, 0xdc, 0xae, 0x5c, 0x12, 0xc9,
-	0x3e, 0x7f, 0x42, 0xe2, 0x41, 0xa6, 0x0a, 0x16, 0xb3, 0x98, 0x88, 0x07, 0xff, 0x64, 0x74, 0xdb,
-	0x62, 0xcc, 0x1a, 0x12, 0x84, 0x1d, 0x8a, 0xb0, 0x6d, 0x33, 0x9f, 0x5b, 0xcd, 0x35, 0x29, 0x87,
-	0xf3, 0x4f, 0x1c, 0x22, 0xd3, 0xda, 0x33, 0x70, 0xf5, 0x51, 0x60, 0xfe, 0x18, 0x0f, 0xa9, 0x89,
-	0x7d, 0xe6, 0x7a, 0x3d, 0x72, 0x3c, 0x26, 0x9e, 0x0f, 0x1f, 0x00, 0x10, 0x81, 0x17, 0x95, 0xaa,
-	0x52, 0xcf, 0xb7, 0x6b, 0xba, 0xe4, 0x09, 0x4e, 0xa9, 0x0b, 0x6a, 0x79, 0x4a, 0xbd, 0x8b, 0x2d,
-	0x22, 0xb5, 0xbd, 0x98, 0x52, 0xfb, 0xa8, 0x80, 0x6b, 0x0b, 0x16, 0x9e, 0xc3, 0x6c, 0x8f, 0xc0,
-	0x3d, 0x00, 0x26, 0x61, 0xb4, 0xa8, 0x54, 0xff, 0xab, 0xe7, 0xdb, 0xdb, 0xfa, 0xc2, 0xbc, 0xf5,
-	0x50, 0xda, 0xc9, 0x9d, 0xfd, 0xd8, 0xc9, 0x7c, 0xf8, 0xfd, 0xa9, 0xa1, 0xf4, 0x62, 0xd2, 0xa0,
-	0x51, 0x0c, 0x76, 0x83, 0xc3, 0xde, 0x58, 0x09, 0x2b, 0x28, 0x12, 0xb4, 0x4f, 0xc0, 0x95, 0x24,
-	0xec, 0x7c, 0x1c, 0x77, 0xc1, 0xa5, 0xd0, 0xaf, 0x8f, 0x4d, 0xd3, 0xe5, 0x23, 0xc9, 0x75, 0x8a,
-	0x5f, 0x3f, 0x37, 0x0b, 0xd2, 0xe8, 0x9e, 0x69, 0xba, 0xc4, 0xf3, 0x0e, 0x7c, 0x97, 0xda, 0x56,
-	0xef, 0x62, 0x58, 0x1f, 0xc4, 0xb5, 0xfe, 0xdf, 0x93, 0x0e, 0xa7, 0x70, 0x1f, 0xe4, 0xc2, 0x52,
-	0x39, 0xe8, 0xb5, 0x87, 0x10, 0x29, 0xb5, 0xa2, 0x34, 0xe8, 0xb8, 0xd4, 0xb4, 0xc8, 0xbe, 0x7d,
-	0xc8, 0x24, 0xbb, 0x66, 0xca, 0x1b, 0x88, 0x67, 0xa4, 0xf7, 0x3e, 0xc8, 0x1b, 0x3c, 0xda, 0xa7,
-	0xf6, 0x21, 0x93, 0xee, 0x95, 0x14, 0xf7, 0x48, 0x9b, 0xb8, 0x03, 0x23, 0x0c, 0x6b, 0x05, 0x00,
-	0xb9, 0x4b, 0x17, 0xbb, 0x78, 0x34, 0x5f, 0x23, 0xed, 0x00, 0x5c, 0x4e, 0x44, 0xa5, 0xef, 0x1d,
-	0x90, 0x75, 0x78, 0x44, 0x5a, 0x96, 0x52, 0x2c, 0x85, 0x24, 0x6e, 0x27, 0x35, 0xed, 0x2f, 0xff,
-	0x83, 0x0b, 0xbc, 0x2b, 0x7c, 0xab, 0x00, 0x10, 0x2d, 0x16, 0xdc, 0x4d, 0x69, 0x93, 0xbe, 0xdf,
-	0xe5, 0xc6, 0x3a, 0xa5, 0x82, 0x56, 0x6b, 0xbc, 0x09, 0xec, 0x5f, 0x7f, 0xfb, 0xf5, 0x6e, 0x63,
-	0x07, 0x56, 0xd0, 0xe2, 0x2b, 0x15, 0x5b, 0xc5, 0xf7, 0x0a, 0xc8, 0x85, 0x2d, 0x60, 0x7d, 0xa5,
-	0xcb, 0x9c, 0x67, 0x77, 0x8d, 0x4a, 0x89, 0x73, 0x3b, 0xc2, 0x41, 0xb0, 0xf9, 0x2f, 0x1c, 0xf4,
-	0x22, 0xb9, 0xb4, 0x2f, 0xe1, 0xa9, 0x02, 0x40, 0x74, 0x97, 0xcb, 0x07, 0xb6, 0xb0, 0x45, 0xcb,
-	0x07, 0xb6, 0xb8, 0x56, 0xda, 0xcd, 0x88, 0xb0, 0x0a, 0xd5, 0x14, 0xc2, 0xd8, 0xd2, 0xc1, 0x57,
-	0x20, 0x2b, 0xae, 0x1a, 0x5e, 0x5f, 0x66, 0x91, 0xd8, 0xa9, 0x72, 0x6d, 0x55, 0x99, 0xa4, 0xa8,
-	0x45, 0x14, 0x5b, 0xb0, 0x94, 0x42, 0x21, 0xd6, 0xa9, 0xb3, 0x77, 0x36, 0x55, 0x95, 0xf3, 0xa9,
-	0xaa, 0xfc, 0x9c, 0xaa, 0xca, 0xe9, 0x4c, 0xcd, 0x9c, 0xcf, 0xd4, 0xcc, 0xf7, 0x99, 0x9a, 0x79,
-	0xda, 0xb4, 0xa8, 0x7f, 0x34, 0x36, 0xf4, 0x01, 0x1b, 0xa1, 0x40, 0x4c, 0x71, 0x73, 0x88, 0x0d,
-	0x0f, 0x3d, 0xec, 0xf2, 0x56, 0xcf, 0xc3, 0x66, 0xfc, 0x9b, 0x6a, 0x64, 0xf9, 0x47, 0xf5, 0xd6,
-	0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x18, 0xcf, 0xbf, 0x6e, 0x52, 0x06, 0x00, 0x00,
+	// 739 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x95, 0x4d, 0x6b, 0x13, 0x4f,
+	0x1c, 0xc7, 0xb3, 0xfd, 0xff, 0xad, 0x64, 0x8a, 0xc5, 0x8e, 0x55, 0xd3, 0x6d, 0xbb, 0x2d, 0x2b,
+	0xad, 0x69, 0x24, 0x3b, 0x66, 0xbd, 0x89, 0x20, 0x06, 0xb4, 0x14, 0x44, 0x6b, 0x0a, 0x22, 0x5e,
+	0xe2, 0x6c, 0x76, 0xba, 0x1d, 0x48, 0x66, 0xb6, 0xbb, 0xdb, 0xd0, 0x22, 0x22, 0x78, 0xf2, 0x66,
+	0x41, 0x8f, 0x5e, 0xbc, 0x09, 0x5e, 0x3c, 0xf8, 0x22, 0x7a, 0x2c, 0x7a, 0xf1, 0x24, 0xd2, 0x0a,
+	0xbe, 0x0d, 0xd9, 0xd9, 0xc9, 0x3e, 0x34, 0x9b, 0x26, 0x7a, 0x29, 0xdd, 0xdf, 0xd3, 0xf7, 0x33,
+	0xbf, 0x9d, 0x6f, 0x16, 0xcc, 0x73, 0x97, 0x32, 0x1a, 0x20, 0xee, 0xb6, 0xb6, 0x68, 0xdb, 0x46,
+	0xdd, 0x1a, 0xda, 0xde, 0x21, 0xde, 0x9e, 0xe1, 0x7a, 0x3c, 0xe0, 0x70, 0x2a, 0x4a, 0x1b, 0x32,
+	0x6d, 0x74, 0x6b, 0xea, 0x14, 0xee, 0x50, 0xc6, 0x91, 0xf8, 0x1b, 0x55, 0xa9, 0x95, 0x16, 0xf7,
+	0x3b, 0xdc, 0x47, 0x16, 0xf6, 0x49, 0xd4, 0x8e, 0xba, 0x35, 0x8b, 0x04, 0xb8, 0x86, 0x5c, 0xec,
+	0x50, 0x86, 0x03, 0xca, 0x99, 0xac, 0x9d, 0x95, 0xb5, 0xbd, 0xb2, 0xb4, 0x9c, 0x3a, 0x13, 0x25,
+	0x9b, 0xe2, 0x09, 0x45, 0x0f, 0x32, 0x35, 0xed, 0x70, 0x87, 0x47, 0xf1, 0xf0, 0x3f, 0x19, 0x9d,
+	0x73, 0x38, 0x77, 0xda, 0x04, 0x61, 0x97, 0x22, 0xcc, 0x18, 0x0f, 0x84, 0x54, 0xaf, 0x27, 0xe7,
+	0x70, 0xc1, 0x9e, 0x4b, 0x64, 0x5a, 0x7f, 0x06, 0x2e, 0x3d, 0x0a, 0xc5, 0x1f, 0xe3, 0x36, 0xb5,
+	0x71, 0xc0, 0x3d, 0xbf, 0x41, 0xb6, 0x77, 0x88, 0x1f, 0xc0, 0x7b, 0x00, 0x24, 0xe0, 0x25, 0x65,
+	0x51, 0x29, 0x4f, 0x98, 0xcb, 0x86, 0xe4, 0x09, 0x4f, 0x69, 0x44, 0xd4, 0xf2, 0x94, 0xc6, 0x3a,
+	0x76, 0x88, 0xec, 0x6d, 0xa4, 0x3a, 0xf5, 0x4f, 0x0a, 0xb8, 0xdc, 0x27, 0xe1, 0xbb, 0x9c, 0xf9,
+	0x04, 0xae, 0x02, 0xd0, 0x8d, 0xa3, 0x25, 0x65, 0xf1, 0xbf, 0xf2, 0x84, 0x39, 0x67, 0xf4, 0xed,
+	0xdb, 0x88, 0x5b, 0xeb, 0xc5, 0x83, 0x1f, 0x0b, 0x85, 0x8f, 0xbf, 0x3f, 0x57, 0x94, 0x46, 0xaa,
+	0x35, 0x1c, 0x94, 0x82, 0x1d, 0x13, 0xb0, 0x57, 0x87, 0xc2, 0x46, 0x14, 0x19, 0xda, 0x27, 0xe0,
+	0x62, 0x16, 0xb6, 0xb7, 0x8e, 0xdb, 0x60, 0x32, 0xd6, 0x6b, 0x62, 0xdb, 0xf6, 0xc4, 0x4a, 0x8a,
+	0xf5, 0xd2, 0xd7, 0x2f, 0xd5, 0x69, 0x29, 0x74, 0xc7, 0xb6, 0x3d, 0xe2, 0xfb, 0x1b, 0x81, 0x47,
+	0x99, 0xd3, 0x38, 0x17, 0xd7, 0x87, 0x71, 0xbd, 0x79, 0x72, 0xd3, 0xf1, 0x16, 0xee, 0x82, 0x62,
+	0x5c, 0x2a, 0x17, 0x3d, 0xf2, 0x12, 0x92, 0x4e, 0xbd, 0x24, 0x05, 0xea, 0x1e, 0xb5, 0x1d, 0xb2,
+	0xc6, 0x36, 0xb9, 0x64, 0xd7, 0x6d, 0xf9, 0x06, 0xd2, 0x19, 0xa9, 0xbd, 0x06, 0x26, 0x2c, 0x11,
+	0x6d, 0x52, 0xb6, 0xc9, 0xa5, 0xfa, 0x7c, 0x8e, 0x7a, 0xd2, 0x9b, 0x79, 0x07, 0x56, 0x1c, 0xd6,
+	0xa7, 0x01, 0x14, 0x2a, 0xeb, 0xd8, 0xc3, 0x9d, 0xde, 0x35, 0xd2, 0x37, 0xc0, 0x85, 0x4c, 0x54,
+	0xea, 0xde, 0x02, 0xe3, 0xae, 0x88, 0x48, 0xc9, 0x99, 0x1c, 0xc9, 0xa8, 0x25, 0x2d, 0x27, 0x7b,
+	0xf4, 0x39, 0xa0, 0x8a, 0xa1, 0x0f, 0xc8, 0x6e, 0x70, 0xbf, 0xb6, 0x11, 0x4a, 0xb1, 0x56, 0xef,
+	0xf6, 0xe9, 0xab, 0x60, 0x36, 0x37, 0x2b, 0xa5, 0xcb, 0xe0, 0x3c, 0x23, 0xbb, 0x41, 0xb3, 0x5d,
+	0x6b, 0xfa, 0x32, 0x27, 0x20, 0xfe, 0x6f, 0x4c, 0xb2, 0x4c, 0x47, 0x56, 0xc6, 0x3c, 0x55, 0xc6,
+	0x1c, 0x2c, 0x63, 0xe6, 0xcb, 0xc4, 0x1d, 0xe6, 0xbb, 0xb3, 0xe0, 0x8c, 0x98, 0x04, 0xdf, 0x28,
+	0x00, 0x24, 0x36, 0x81, 0x2b, 0x39, 0x4b, 0xc9, 0x77, 0xab, 0x5a, 0x19, 0xa5, 0x34, 0x22, 0xd3,
+	0x2b, 0xaf, 0xc3, 0x65, 0xbe, 0xfa, 0xf6, 0xeb, 0xed, 0xd8, 0x02, 0x9c, 0x47, 0xfd, 0x3f, 0x10,
+	0x29, 0x63, 0xbd, 0x57, 0x40, 0x31, 0x1e, 0x01, 0xcb, 0x43, 0x55, 0x7a, 0x3c, 0x2b, 0x23, 0x54,
+	0x4a, 0x9c, 0x9b, 0x09, 0x0e, 0x82, 0xd5, 0xd3, 0x70, 0xd0, 0xf3, 0xac, 0x05, 0x5f, 0xc0, 0x7d,
+	0x05, 0x80, 0xe4, 0x66, 0x0e, 0x5e, 0x58, 0x9f, 0x27, 0x06, 0x2f, 0xac, 0xdf, 0x24, 0xfa, 0xb5,
+	0x84, 0x70, 0x11, 0x6a, 0x39, 0x84, 0x29, 0x0b, 0xc1, 0x97, 0x60, 0x3c, 0xba, 0xb8, 0x70, 0x69,
+	0x90, 0x44, 0xc6, 0x21, 0xea, 0xf2, 0xb0, 0x32, 0x49, 0xb1, 0x9c, 0x50, 0xcc, 0xc2, 0x99, 0x1c,
+	0x8a, 0xc8, 0x1c, 0xf0, 0x83, 0x02, 0x26, 0xb3, 0x57, 0x1f, 0x56, 0x07, 0x49, 0xe4, 0x1a, 0x48,
+	0x35, 0x46, 0x2d, 0x97, 0x64, 0xd7, 0x13, 0xb2, 0x25, 0x78, 0x25, 0x87, 0xec, 0xa4, 0xdf, 0x12,
+	0x46, 0x73, 0x44, 0x46, 0xf3, 0xef, 0x18, 0xcd, 0x7f, 0x65, 0x4c, 0xcc, 0x5a, 0x5f, 0x3d, 0x38,
+	0xd2, 0x94, 0xc3, 0x23, 0x4d, 0xf9, 0x79, 0xa4, 0x29, 0xfb, 0xc7, 0x5a, 0xe1, 0xf0, 0x58, 0x2b,
+	0x7c, 0x3f, 0xd6, 0x0a, 0x4f, 0xab, 0x0e, 0x0d, 0xb6, 0x76, 0x2c, 0xa3, 0xc5, 0x3b, 0x28, 0x1c,
+	0x43, 0x71, 0xb5, 0x8d, 0x2d, 0x1f, 0x3d, 0x5c, 0x17, 0x43, 0x77, 0xe3, 0xb1, 0xe2, 0x4b, 0x6b,
+	0x8d, 0x8b, 0x4f, 0xed, 0x8d, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x8e, 0x32, 0xcf, 0xc1, 0x68,
+	0x08, 0x00, 0x00,
 }
 
 // Reference imports to suppress errors if they are not otherwise used.
@@ -471,6 +648,10 @@ type QueryClient interface {
 	BridgeInfo(ctx context.Context, in *QueryBridgeInfoRequest, opts ...grpc.CallOption) (*QueryBridgeInfoResponse, error)
 	// Parameters queries the rollup parameters.
 	Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error)
+	// NextL1Sequence queries the next l1 sequence number.
+	NextL1Sequence(ctx context.Context, in *QueryNextL1SequenceRequest, opts ...grpc.CallOption) (*QueryNextL1SequenceResponse, error)
+	// NextL2Sequence queries the next l2 sequence number.
+	NextL2Sequence(ctx context.Context, in *QueryNextL2SequenceRequest, opts ...grpc.CallOption) (*QueryNextL2SequenceResponse, error)
 }
 
 type queryClient struct {
@@ -517,6 +698,24 @@ func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts .
 	return out, nil
 }
 
+func (c *queryClient) NextL1Sequence(ctx context.Context, in *QueryNextL1SequenceRequest, opts ...grpc.CallOption) (*QueryNextL1SequenceResponse, error) {
+	out := new(QueryNextL1SequenceResponse)
+	err := c.cc.Invoke(ctx, "/opinit.opchild.v1.Query/NextL1Sequence", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *queryClient) NextL2Sequence(ctx context.Context, in *QueryNextL2SequenceRequest, opts ...grpc.CallOption) (*QueryNextL2SequenceResponse, error) {
+	out := new(QueryNextL2SequenceResponse)
+	err := c.cc.Invoke(ctx, "/opinit.opchild.v1.Query/NextL2Sequence", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
 // QueryServer is the server API for Query service.
 type QueryServer interface {
 	// Validators queries all validators
@@ -530,6 +729,10 @@ type QueryServer interface {
 	BridgeInfo(context.Context, *QueryBridgeInfoRequest) (*QueryBridgeInfoResponse, error)
 	// Parameters queries the rollup parameters.
 	Params(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error)
+	// NextL1Sequence queries the next l1 sequence number.
+	NextL1Sequence(context.Context, *QueryNextL1SequenceRequest) (*QueryNextL1SequenceResponse, error)
+	// NextL2Sequence queries the next l2 sequence number.
+	NextL2Sequence(context.Context, *QueryNextL2SequenceRequest) (*QueryNextL2SequenceResponse, error)
 }
 
 // UnimplementedQueryServer can be embedded to have forward compatible implementations.
@@ -548,6 +751,12 @@ func (*UnimplementedQueryServer) BridgeInfo(ctx context.Context, req *QueryBridg
 func (*UnimplementedQueryServer) Params(ctx context.Context, req *QueryParamsRequest) (*QueryParamsResponse, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method Params not implemented")
 }
+func (*UnimplementedQueryServer) NextL1Sequence(ctx context.Context, req *QueryNextL1SequenceRequest) (*QueryNextL1SequenceResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method NextL1Sequence not implemented")
+}
+func (*UnimplementedQueryServer) NextL2Sequence(ctx context.Context, req *QueryNextL2SequenceRequest) (*QueryNextL2SequenceResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method NextL2Sequence not implemented")
+}
 
 func RegisterQueryServer(s grpc1.Server, srv QueryServer) {
 	s.RegisterService(&_Query_serviceDesc, srv)
@@ -625,6 +834,42 @@ func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interf
 	return interceptor(ctx, in, info, handler)
 }
 
+func _Query_NextL1Sequence_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(QueryNextL1SequenceRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(QueryServer).NextL1Sequence(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/opinit.opchild.v1.Query/NextL1Sequence",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(QueryServer).NextL1Sequence(ctx, req.(*QueryNextL1SequenceRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Query_NextL2Sequence_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(QueryNextL2SequenceRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(QueryServer).NextL2Sequence(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/opinit.opchild.v1.Query/NextL2Sequence",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(QueryServer).NextL2Sequence(ctx, req.(*QueryNextL2SequenceRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
 var _Query_serviceDesc = grpc.ServiceDesc{
 	ServiceName: "opinit.opchild.v1.Query",
 	HandlerType: (*QueryServer)(nil),
@@ -645,6 +890,14 @@ var _Query_serviceDesc = grpc.ServiceDesc{
 			MethodName: "Params",
 			Handler:    _Query_Params_Handler,
 		},
+		{
+			MethodName: "NextL1Sequence",
+			Handler:    _Query_NextL1Sequence_Handler,
+		},
+		{
+			MethodName: "NextL2Sequence",
+			Handler:    _Query_NextL2Sequence_Handler,
+		},
 	},
 	Streams:  []grpc.StreamDesc{},
 	Metadata: "opinit/opchild/v1/query.proto",
@@ -909,6 +1162,108 @@ func (m *QueryParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
 	return len(dAtA) - i, nil
 }
 
+func (m *QueryNextL1SequenceRequest) Marshal() (dAtA []byte, err error) {
+	size := m.Size()
+	dAtA = make([]byte, size)
+	n, err := m.MarshalToSizedBuffer(dAtA[:size])
+	if err != nil {
+		return nil, err
+	}
+	return dAtA[:n], nil
+}
+
+func (m *QueryNextL1SequenceRequest) MarshalTo(dAtA []byte) (int, error) {
+	size := m.Size()
+	return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *QueryNextL1SequenceRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+	i := len(dAtA)
+	_ = i
+	var l int
+	_ = l
+	return len(dAtA) - i, nil
+}
+
+func (m *QueryNextL1SequenceResponse) Marshal() (dAtA []byte, err error) {
+	size := m.Size()
+	dAtA = make([]byte, size)
+	n, err := m.MarshalToSizedBuffer(dAtA[:size])
+	if err != nil {
+		return nil, err
+	}
+	return dAtA[:n], nil
+}
+
+func (m *QueryNextL1SequenceResponse) MarshalTo(dAtA []byte) (int, error) {
+	size := m.Size()
+	return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *QueryNextL1SequenceResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+	i := len(dAtA)
+	_ = i
+	var l int
+	_ = l
+	if m.NextL1Sequence != 0 {
+		i = encodeVarintQuery(dAtA, i, uint64(m.NextL1Sequence))
+		i--
+		dAtA[i] = 0x8
+	}
+	return len(dAtA) - i, nil
+}
+
+func (m *QueryNextL2SequenceRequest) Marshal() (dAtA []byte, err error) {
+	size := m.Size()
+	dAtA = make([]byte, size)
+	n, err := m.MarshalToSizedBuffer(dAtA[:size])
+	if err != nil {
+		return nil, err
+	}
+	return dAtA[:n], nil
+}
+
+func (m *QueryNextL2SequenceRequest) MarshalTo(dAtA []byte) (int, error) {
+	size := m.Size()
+	return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *QueryNextL2SequenceRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+	i := len(dAtA)
+	_ = i
+	var l int
+	_ = l
+	return len(dAtA) - i, nil
+}
+
+func (m *QueryNextL2SequenceResponse) Marshal() (dAtA []byte, err error) {
+	size := m.Size()
+	dAtA = make([]byte, size)
+	n, err := m.MarshalToSizedBuffer(dAtA[:size])
+	if err != nil {
+		return nil, err
+	}
+	return dAtA[:n], nil
+}
+
+func (m *QueryNextL2SequenceResponse) MarshalTo(dAtA []byte) (int, error) {
+	size := m.Size()
+	return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *QueryNextL2SequenceResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+	i := len(dAtA)
+	_ = i
+	var l int
+	_ = l
+	if m.NextL2Sequence != 0 {
+		i = encodeVarintQuery(dAtA, i, uint64(m.NextL2Sequence))
+		i--
+		dAtA[i] = 0x8
+	}
+	return len(dAtA) - i, nil
+}
+
 func encodeVarintQuery(dAtA []byte, offset int, v uint64) int {
 	offset -= sovQuery(v)
 	base := offset
@@ -1016,6 +1371,48 @@ func (m *QueryParamsResponse) Size() (n int) {
 	return n
 }
 
+func (m *QueryNextL1SequenceRequest) Size() (n int) {
+	if m == nil {
+		return 0
+	}
+	var l int
+	_ = l
+	return n
+}
+
+func (m *QueryNextL1SequenceResponse) Size() (n int) {
+	if m == nil {
+		return 0
+	}
+	var l int
+	_ = l
+	if m.NextL1Sequence != 0 {
+		n += 1 + sovQuery(uint64(m.NextL1Sequence))
+	}
+	return n
+}
+
+func (m *QueryNextL2SequenceRequest) Size() (n int) {
+	if m == nil {
+		return 0
+	}
+	var l int
+	_ = l
+	return n
+}
+
+func (m *QueryNextL2SequenceResponse) Size() (n int) {
+	if m == nil {
+		return 0
+	}
+	var l int
+	_ = l
+	if m.NextL2Sequence != 0 {
+		n += 1 + sovQuery(uint64(m.NextL2Sequence))
+	}
+	return n
+}
+
 func sovQuery(x uint64) (n int) {
 	return (math_bits.Len64(x|1) + 6) / 7
 }
@@ -1659,6 +2056,244 @@ func (m *QueryParamsResponse) Unmarshal(dAtA []byte) error {
 	}
 	return nil
 }
+func (m *QueryNextL1SequenceRequest) Unmarshal(dAtA []byte) error {
+	l := len(dAtA)
+	iNdEx := 0
+	for iNdEx < l {
+		preIndex := iNdEx
+		var wire uint64
+		for shift := uint(0); ; shift += 7 {
+			if shift >= 64 {
+				return ErrIntOverflowQuery
+			}
+			if iNdEx >= l {
+				return io.ErrUnexpectedEOF
+			}
+			b := dAtA[iNdEx]
+			iNdEx++
+			wire |= uint64(b&0x7F) << shift
+			if b < 0x80 {
+				break
+			}
+		}
+		fieldNum := int32(wire >> 3)
+		wireType := int(wire & 0x7)
+		if wireType == 4 {
+			return fmt.Errorf("proto: QueryNextL1SequenceRequest: wiretype end group for non-group")
+		}
+		if fieldNum <= 0 {
+			return fmt.Errorf("proto: QueryNextL1SequenceRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+		}
+		switch fieldNum {
+		default:
+			iNdEx = preIndex
+			skippy, err := skipQuery(dAtA[iNdEx:])
+			if err != nil {
+				return err
+			}
+			if (skippy < 0) || (iNdEx+skippy) < 0 {
+				return ErrInvalidLengthQuery
+			}
+			if (iNdEx + skippy) > l {
+				return io.ErrUnexpectedEOF
+			}
+			iNdEx += skippy
+		}
+	}
+
+	if iNdEx > l {
+		return io.ErrUnexpectedEOF
+	}
+	return nil
+}
+func (m *QueryNextL1SequenceResponse) Unmarshal(dAtA []byte) error {
+	l := len(dAtA)
+	iNdEx := 0
+	for iNdEx < l {
+		preIndex := iNdEx
+		var wire uint64
+		for shift := uint(0); ; shift += 7 {
+			if shift >= 64 {
+				return ErrIntOverflowQuery
+			}
+			if iNdEx >= l {
+				return io.ErrUnexpectedEOF
+			}
+			b := dAtA[iNdEx]
+			iNdEx++
+			wire |= uint64(b&0x7F) << shift
+			if b < 0x80 {
+				break
+			}
+		}
+		fieldNum := int32(wire >> 3)
+		wireType := int(wire & 0x7)
+		if wireType == 4 {
+			return fmt.Errorf("proto: QueryNextL1SequenceResponse: wiretype end group for non-group")
+		}
+		if fieldNum <= 0 {
+			return fmt.Errorf("proto: QueryNextL1SequenceResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+		}
+		switch fieldNum {
+		case 1:
+			if wireType != 0 {
+				return fmt.Errorf("proto: wrong wireType = %d for field NextL1Sequence", wireType)
+			}
+			m.NextL1Sequence = 0
+			for shift := uint(0); ; shift += 7 {
+				if shift >= 64 {
+					return ErrIntOverflowQuery
+				}
+				if iNdEx >= l {
+					return io.ErrUnexpectedEOF
+				}
+				b := dAtA[iNdEx]
+				iNdEx++
+				m.NextL1Sequence |= uint64(b&0x7F) << shift
+				if b < 0x80 {
+					break
+				}
+			}
+		default:
+			iNdEx = preIndex
+			skippy, err := skipQuery(dAtA[iNdEx:])
+			if err != nil {
+				return err
+			}
+			if (skippy < 0) || (iNdEx+skippy) < 0 {
+				return ErrInvalidLengthQuery
+			}
+			if (iNdEx + skippy) > l {
+				return io.ErrUnexpectedEOF
+			}
+			iNdEx += skippy
+		}
+	}
+
+	if iNdEx > l {
+		return io.ErrUnexpectedEOF
+	}
+	return nil
+}
+func (m *QueryNextL2SequenceRequest) Unmarshal(dAtA []byte) error {
+	l := len(dAtA)
+	iNdEx := 0
+	for iNdEx < l {
+		preIndex := iNdEx
+		var wire uint64
+		for shift := uint(0); ; shift += 7 {
+			if shift >= 64 {
+				return ErrIntOverflowQuery
+			}
+			if iNdEx >= l {
+				return io.ErrUnexpectedEOF
+			}
+			b := dAtA[iNdEx]
+			iNdEx++
+			wire |= uint64(b&0x7F) << shift
+			if b < 0x80 {
+				break
+			}
+		}
+		fieldNum := int32(wire >> 3)
+		wireType := int(wire & 0x7)
+		if wireType == 4 {
+			return fmt.Errorf("proto: QueryNextL2SequenceRequest: wiretype end group for non-group")
+		}
+		if fieldNum <= 0 {
+			return fmt.Errorf("proto: QueryNextL2SequenceRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+		}
+		switch fieldNum {
+		default:
+			iNdEx = preIndex
+			skippy, err := skipQuery(dAtA[iNdEx:])
+			if err != nil {
+				return err
+			}
+			if (skippy < 0) || (iNdEx+skippy) < 0 {
+				return ErrInvalidLengthQuery
+			}
+			if (iNdEx + skippy) > l {
+				return io.ErrUnexpectedEOF
+			}
+			iNdEx += skippy
+		}
+	}
+
+	if iNdEx > l {
+		return io.ErrUnexpectedEOF
+	}
+	return nil
+}
+func (m *QueryNextL2SequenceResponse) Unmarshal(dAtA []byte) error {
+	l := len(dAtA)
+	iNdEx := 0
+	for iNdEx < l {
+		preIndex := iNdEx
+		var wire uint64
+		for shift := uint(0); ; shift += 7 {
+			if shift >= 64 {
+				return ErrIntOverflowQuery
+			}
+			if iNdEx >= l {
+				return io.ErrUnexpectedEOF
+			}
+			b := dAtA[iNdEx]
+			iNdEx++
+			wire |= uint64(b&0x7F) << shift
+			if b < 0x80 {
+				break
+			}
+		}
+		fieldNum := int32(wire >> 3)
+		wireType := int(wire & 0x7)
+		if wireType == 4 {
+			return fmt.Errorf("proto: QueryNextL2SequenceResponse: wiretype end group for non-group")
+		}
+		if fieldNum <= 0 {
+			return fmt.Errorf("proto: QueryNextL2SequenceResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+		}
+		switch fieldNum {
+		case 1:
+			if wireType != 0 {
+				return fmt.Errorf("proto: wrong wireType = %d for field NextL2Sequence", wireType)
+			}
+			m.NextL2Sequence = 0
+			for shift := uint(0); ; shift += 7 {
+				if shift >= 64 {
+					return ErrIntOverflowQuery
+				}
+				if iNdEx >= l {
+					return io.ErrUnexpectedEOF
+				}
+				b := dAtA[iNdEx]
+				iNdEx++
+				m.NextL2Sequence |= uint64(b&0x7F) << shift
+				if b < 0x80 {
+					break
+				}
+			}
+		default:
+			iNdEx = preIndex
+			skippy, err := skipQuery(dAtA[iNdEx:])
+			if err != nil {
+				return err
+			}
+			if (skippy < 0) || (iNdEx+skippy) < 0 {
+				return ErrInvalidLengthQuery
+			}
+			if (iNdEx + skippy) > l {
+				return io.ErrUnexpectedEOF
+			}
+			iNdEx += skippy
+		}
+	}
+
+	if iNdEx > l {
+		return io.ErrUnexpectedEOF
+	}
+	return nil
+}
 func skipQuery(dAtA []byte) (n int, err error) {
 	l := len(dAtA)
 	iNdEx := 0
diff --git a/x/opchild/types/query.pb.gw.go b/x/opchild/types/query.pb.gw.go
index 56e4186e..205708bc 100644
--- a/x/opchild/types/query.pb.gw.go
+++ b/x/opchild/types/query.pb.gw.go
@@ -159,6 +159,42 @@ func local_request_Query_Params_0(ctx context.Context, marshaler runtime.Marshal
 
 }
 
+func request_Query_NextL1Sequence_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
+	var protoReq QueryNextL1SequenceRequest
+	var metadata runtime.ServerMetadata
+
+	msg, err := client.NextL1Sequence(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
+	return msg, metadata, err
+
+}
+
+func local_request_Query_NextL1Sequence_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
+	var protoReq QueryNextL1SequenceRequest
+	var metadata runtime.ServerMetadata
+
+	msg, err := server.NextL1Sequence(ctx, &protoReq)
+	return msg, metadata, err
+
+}
+
+func request_Query_NextL2Sequence_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
+	var protoReq QueryNextL2SequenceRequest
+	var metadata runtime.ServerMetadata
+
+	msg, err := client.NextL2Sequence(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
+	return msg, metadata, err
+
+}
+
+func local_request_Query_NextL2Sequence_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
+	var protoReq QueryNextL2SequenceRequest
+	var metadata runtime.ServerMetadata
+
+	msg, err := server.NextL2Sequence(ctx, &protoReq)
+	return msg, metadata, err
+
+}
+
 // RegisterQueryHandlerServer registers the http handlers for service Query to "mux".
 // UnaryRPC     :call QueryServer directly.
 // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.
@@ -257,6 +293,52 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv
 
 	})
 
+	mux.Handle("GET", pattern_Query_NextL1Sequence_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
+		ctx, cancel := context.WithCancel(req.Context())
+		defer cancel()
+		var stream runtime.ServerTransportStream
+		ctx = grpc.NewContextWithServerTransportStream(ctx, &stream)
+		inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
+		rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
+		if err != nil {
+			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
+			return
+		}
+		resp, md, err := local_request_Query_NextL1Sequence_0(rctx, inboundMarshaler, server, req, pathParams)
+		md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())
+		ctx = runtime.NewServerMetadataContext(ctx, md)
+		if err != nil {
+			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
+			return
+		}
+
+		forward_Query_NextL1Sequence_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
+
+	})
+
+	mux.Handle("GET", pattern_Query_NextL2Sequence_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
+		ctx, cancel := context.WithCancel(req.Context())
+		defer cancel()
+		var stream runtime.ServerTransportStream
+		ctx = grpc.NewContextWithServerTransportStream(ctx, &stream)
+		inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
+		rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
+		if err != nil {
+			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
+			return
+		}
+		resp, md, err := local_request_Query_NextL2Sequence_0(rctx, inboundMarshaler, server, req, pathParams)
+		md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())
+		ctx = runtime.NewServerMetadataContext(ctx, md)
+		if err != nil {
+			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
+			return
+		}
+
+		forward_Query_NextL2Sequence_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
+
+	})
+
 	return nil
 }
 
@@ -378,6 +460,46 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie
 
 	})
 
+	mux.Handle("GET", pattern_Query_NextL1Sequence_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
+		ctx, cancel := context.WithCancel(req.Context())
+		defer cancel()
+		inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
+		rctx, err := runtime.AnnotateContext(ctx, mux, req)
+		if err != nil {
+			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
+			return
+		}
+		resp, md, err := request_Query_NextL1Sequence_0(rctx, inboundMarshaler, client, req, pathParams)
+		ctx = runtime.NewServerMetadataContext(ctx, md)
+		if err != nil {
+			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
+			return
+		}
+
+		forward_Query_NextL1Sequence_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
+
+	})
+
+	mux.Handle("GET", pattern_Query_NextL2Sequence_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
+		ctx, cancel := context.WithCancel(req.Context())
+		defer cancel()
+		inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
+		rctx, err := runtime.AnnotateContext(ctx, mux, req)
+		if err != nil {
+			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
+			return
+		}
+		resp, md, err := request_Query_NextL2Sequence_0(rctx, inboundMarshaler, client, req, pathParams)
+		ctx = runtime.NewServerMetadataContext(ctx, md)
+		if err != nil {
+			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
+			return
+		}
+
+		forward_Query_NextL2Sequence_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
+
+	})
+
 	return nil
 }
 
@@ -389,6 +511,10 @@ var (
 	pattern_Query_BridgeInfo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"opinit", "opchild", "v1", "bridge_info"}, "", runtime.AssumeColonVerbOpt(false)))
 
 	pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"opinit", "opchild", "v1", "params"}, "", runtime.AssumeColonVerbOpt(false)))
+
+	pattern_Query_NextL1Sequence_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"opinit", "opchild", "v1", "next_l1_sequence"}, "", runtime.AssumeColonVerbOpt(false)))
+
+	pattern_Query_NextL2Sequence_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"opinit", "opchild", "v1", "next_l2_sequence"}, "", runtime.AssumeColonVerbOpt(false)))
 )
 
 var (
@@ -399,4 +525,8 @@ var (
 	forward_Query_BridgeInfo_0 = runtime.ForwardResponseMessage
 
 	forward_Query_Params_0 = runtime.ForwardResponseMessage
+
+	forward_Query_NextL1Sequence_0 = runtime.ForwardResponseMessage
+
+	forward_Query_NextL2Sequence_0 = runtime.ForwardResponseMessage
 )
diff --git a/x/ophost/keeper/querier.go b/x/ophost/keeper/querier.go
index 154f987d..0c77bb19 100644
--- a/x/ophost/keeper/querier.go
+++ b/x/ophost/keeper/querier.go
@@ -156,3 +156,14 @@ func (q Querier) Claimed(ctx context.Context, req *types.QueryClaimedRequest) (*
 		Claimed: claimed,
 	}, nil
 }
+
+func (q Querier) NextL1Sequence(ctx context.Context, req *types.QueryNextL1SequenceRequest) (*types.QueryNextL1SequenceResponse, error) {
+	sequence, err := q.GetNextL1Sequence(ctx, req.BridgeId)
+	if err != nil {
+		return nil, err
+	}
+
+	return &types.QueryNextL1SequenceResponse{
+		NextL1Sequence: sequence,
+	}, nil
+}
diff --git a/x/ophost/keeper/querier_test.go b/x/ophost/keeper/querier_test.go
index 05576821..3b92e4ca 100644
--- a/x/ophost/keeper/querier_test.go
+++ b/x/ophost/keeper/querier_test.go
@@ -243,3 +243,17 @@ func Test_QueryClaimed(t *testing.T) {
 	require.NoError(t, err)
 	require.True(t, res.Claimed)
 }
+
+func Test_QueryNextL1Sequence(t *testing.T) {
+	ctx, input := createDefaultTestInput(t)
+
+	// update the next L1 sequence
+	require.NoError(t, input.OPHostKeeper.NextL1Sequences.Set(ctx, 100, 100))
+
+	q := keeper.NewQuerier(input.OPHostKeeper)
+	res, err := q.NextL1Sequence(ctx, &types.QueryNextL1SequenceRequest{
+		BridgeId: 100,
+	})
+	require.NoError(t, err)
+	require.Equal(t, types.QueryNextL1SequenceResponse{NextL1Sequence: 100}, *res)
+}
diff --git a/x/ophost/types/query.pb.go b/x/ophost/types/query.pb.go
index 1652c3bf..0cab9d23 100644
--- a/x/ophost/types/query.pb.go
+++ b/x/ophost/types/query.pb.go
@@ -1035,6 +1035,96 @@ func (m *QueryClaimedResponse) GetClaimed() bool {
 	return false
 }
 
+// QueryNextL1SequenceRequest is request type for the Query/NextL1Sequence RPC method.
+type QueryNextL1SequenceRequest struct {
+	BridgeId uint64 `protobuf:"varint,1,opt,name=bridge_id,json=bridgeId,proto3" json:"bridge_id,omitempty"`
+}
+
+func (m *QueryNextL1SequenceRequest) Reset()         { *m = QueryNextL1SequenceRequest{} }
+func (m *QueryNextL1SequenceRequest) String() string { return proto.CompactTextString(m) }
+func (*QueryNextL1SequenceRequest) ProtoMessage()    {}
+func (*QueryNextL1SequenceRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_7dd525d30e46de74, []int{20}
+}
+func (m *QueryNextL1SequenceRequest) XXX_Unmarshal(b []byte) error {
+	return m.Unmarshal(b)
+}
+func (m *QueryNextL1SequenceRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	if deterministic {
+		return xxx_messageInfo_QueryNextL1SequenceRequest.Marshal(b, m, deterministic)
+	} else {
+		b = b[:cap(b)]
+		n, err := m.MarshalToSizedBuffer(b)
+		if err != nil {
+			return nil, err
+		}
+		return b[:n], nil
+	}
+}
+func (m *QueryNextL1SequenceRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_QueryNextL1SequenceRequest.Merge(m, src)
+}
+func (m *QueryNextL1SequenceRequest) XXX_Size() int {
+	return m.Size()
+}
+func (m *QueryNextL1SequenceRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_QueryNextL1SequenceRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_QueryNextL1SequenceRequest proto.InternalMessageInfo
+
+func (m *QueryNextL1SequenceRequest) GetBridgeId() uint64 {
+	if m != nil {
+		return m.BridgeId
+	}
+	return 0
+}
+
+// QueryNextL1SequenceResponse is response type for the Query/NextL1Sequence RPC method.
+type QueryNextL1SequenceResponse struct {
+	NextL1Sequence uint64 `protobuf:"varint,1,opt,name=next_l1_sequence,json=nextL1Sequence,proto3" json:"next_l1_sequence,omitempty"`
+}
+
+func (m *QueryNextL1SequenceResponse) Reset()         { *m = QueryNextL1SequenceResponse{} }
+func (m *QueryNextL1SequenceResponse) String() string { return proto.CompactTextString(m) }
+func (*QueryNextL1SequenceResponse) ProtoMessage()    {}
+func (*QueryNextL1SequenceResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_7dd525d30e46de74, []int{21}
+}
+func (m *QueryNextL1SequenceResponse) XXX_Unmarshal(b []byte) error {
+	return m.Unmarshal(b)
+}
+func (m *QueryNextL1SequenceResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	if deterministic {
+		return xxx_messageInfo_QueryNextL1SequenceResponse.Marshal(b, m, deterministic)
+	} else {
+		b = b[:cap(b)]
+		n, err := m.MarshalToSizedBuffer(b)
+		if err != nil {
+			return nil, err
+		}
+		return b[:n], nil
+	}
+}
+func (m *QueryNextL1SequenceResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_QueryNextL1SequenceResponse.Merge(m, src)
+}
+func (m *QueryNextL1SequenceResponse) XXX_Size() int {
+	return m.Size()
+}
+func (m *QueryNextL1SequenceResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_QueryNextL1SequenceResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_QueryNextL1SequenceResponse proto.InternalMessageInfo
+
+func (m *QueryNextL1SequenceResponse) GetNextL1Sequence() uint64 {
+	if m != nil {
+		return m.NextL1Sequence
+	}
+	return 0
+}
+
 func init() {
 	proto.RegisterType((*QueryBridgeRequest)(nil), "opinit.ophost.v1.QueryBridgeRequest")
 	proto.RegisterType((*QueryBridgeResponse)(nil), "opinit.ophost.v1.QueryBridgeResponse")
@@ -1056,85 +1146,92 @@ func init() {
 	proto.RegisterType((*QueryParamsResponse)(nil), "opinit.ophost.v1.QueryParamsResponse")
 	proto.RegisterType((*QueryClaimedRequest)(nil), "opinit.ophost.v1.QueryClaimedRequest")
 	proto.RegisterType((*QueryClaimedResponse)(nil), "opinit.ophost.v1.QueryClaimedResponse")
+	proto.RegisterType((*QueryNextL1SequenceRequest)(nil), "opinit.ophost.v1.QueryNextL1SequenceRequest")
+	proto.RegisterType((*QueryNextL1SequenceResponse)(nil), "opinit.ophost.v1.QueryNextL1SequenceResponse")
 }
 
 func init() { proto.RegisterFile("opinit/ophost/v1/query.proto", fileDescriptor_7dd525d30e46de74) }
 
 var fileDescriptor_7dd525d30e46de74 = []byte{
-	// 1166 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x58, 0xcf, 0x6f, 0xdc, 0x44,
-	0x14, 0xde, 0x49, 0x20, 0x3f, 0x66, 0xdb, 0xa4, 0x4c, 0x23, 0xd8, 0x6c, 0xa2, 0x4d, 0xb0, 0x48,
-	0xb2, 0x54, 0x8d, 0xa7, 0xeb, 0x9e, 0x68, 0x68, 0x10, 0x5b, 0x48, 0x9b, 0x12, 0xc8, 0xb2, 0x70,
-	0xa8, 0x00, 0x69, 0x35, 0xbb, 0x76, 0xbd, 0x16, 0xbb, 0x1e, 0xd7, 0xe3, 0x4d, 0x1b, 0x42, 0x24,
-	0xc4, 0xa9, 0xdc, 0x90, 0xfa, 0x0f, 0x94, 0x03, 0x12, 0x12, 0x1c, 0x2a, 0xc4, 0x81, 0x0b, 0x47,
-	0x50, 0x0f, 0x1c, 0x2a, 0xb8, 0x70, 0x42, 0x28, 0x41, 0x82, 0x3f, 0x03, 0xd9, 0x33, 0x5e, 0xdb,
-	0x6b, 0xbb, 0xeb, 0x8d, 0xc2, 0x25, 0x8a, 0xdf, 0xcc, 0x7b, 0xef, 0xfb, 0xbe, 0x37, 0x9e, 0xcf,
-	0x5a, 0xb8, 0x48, 0x2d, 0xc3, 0x34, 0x1c, 0x4c, 0xad, 0x36, 0x65, 0x0e, 0xde, 0xab, 0xe0, 0x3b,
-	0x3d, 0xcd, 0xde, 0x97, 0x2d, 0x9b, 0x3a, 0x14, 0x9d, 0xe3, 0xab, 0x32, 0x5f, 0x95, 0xf7, 0x2a,
-	0xc5, 0xe7, 0x48, 0xd7, 0x30, 0x29, 0xf6, 0xfe, 0xf2, 0x4d, 0xc5, 0x0b, 0x2d, 0xca, 0xba, 0x94,
-	0xe1, 0x26, 0x61, 0x1a, 0xcf, 0xc6, 0x7b, 0x95, 0xa6, 0xe6, 0x90, 0x0a, 0xb6, 0x88, 0x6e, 0x98,
-	0xc4, 0x31, 0xa8, 0x29, 0xf6, 0x2e, 0x88, 0xbd, 0xfe, 0xb6, 0x70, 0xb7, 0xe2, 0x3c, 0x5f, 0x6c,
-	0x78, 0x4f, 0x98, 0x3f, 0x88, 0xa5, 0x39, 0x9d, 0xea, 0x94, 0xc7, 0xdd, 0xff, 0x44, 0x74, 0x51,
-	0xa7, 0x54, 0xef, 0x68, 0x98, 0x58, 0x06, 0x26, 0xa6, 0x49, 0x1d, 0xaf, 0x95, 0x9f, 0x13, 0xa7,
-	0xe6, 0xec, 0x5b, 0x9a, 0x58, 0x95, 0x36, 0x20, 0x7a, 0xd7, 0xed, 0x5d, 0xb5, 0x0d, 0x55, 0xd7,
-	0xea, 0xda, 0x9d, 0x9e, 0xc6, 0x1c, 0xb4, 0x00, 0xa7, 0x9b, 0x5e, 0xa0, 0x61, 0xa8, 0x05, 0xb0,
-	0x0c, 0xca, 0xcf, 0xd4, 0xa7, 0x78, 0x60, 0x5b, 0xbd, 0x32, 0x75, 0xff, 0xe1, 0x52, 0xee, 0xdf,
-	0x87, 0x4b, 0x39, 0xe9, 0x27, 0x00, 0xcf, 0x47, 0xb2, 0x99, 0x45, 0x4d, 0xa6, 0x3d, 0x35, 0x1d,
-	0xbd, 0x02, 0xf3, 0x62, 0x91, 0xa8, 0xaa, 0x5d, 0x18, 0x5b, 0x06, 0xe5, 0xe9, 0x6a, 0xe1, 0xb7,
-	0x1f, 0xd6, 0xe7, 0x04, 0xd5, 0xd7, 0x55, 0xd5, 0xd6, 0x18, 0x7b, 0xcf, 0xb1, 0x0d, 0x53, 0xaf,
-	0x43, 0xbe, 0xd9, 0x0d, 0xa2, 0x77, 0xe0, 0x59, 0x91, 0xda, 0xa2, 0xe6, 0x6d, 0x43, 0x2f, 0x8c,
-	0x2f, 0x83, 0x72, 0x5e, 0x29, 0xc9, 0x83, 0xf3, 0x91, 0x39, 0xa0, 0x6b, 0xde, 0xae, 0xea, 0xf4,
-	0xe3, 0x3f, 0x97, 0x72, 0xdf, 0xfc, 0xf3, 0xe8, 0x02, 0xa8, 0x9f, 0x69, 0x86, 0x16, 0x24, 0x3d,
-	0x02, 0x9f, 0xf9, 0xec, 0xb7, 0x20, 0x0c, 0x26, 0xe6, 0xe1, 0xcf, 0x2b, 0xab, 0xb2, 0x40, 0xe7,
-	0x8e, 0x57, 0xe6, 0xe3, 0x12, 0xe3, 0x95, 0x6b, 0xa4, 0xaf, 0x5c, 0x3d, 0x94, 0x19, 0x12, 0xea,
-	0x5b, 0x00, 0xe7, 0xa2, 0x9d, 0x84, 0x52, 0x37, 0xe1, 0x24, 0x47, 0xc4, 0x0a, 0x60, 0x79, 0xbc,
-	0x9c, 0x57, 0x56, 0xe2, 0x5c, 0x12, 0x14, 0x0e, 0x53, 0xf2, 0x0b, 0xa0, 0xeb, 0x11, 0xd8, 0x63,
-	0x1e, 0xec, 0xb5, 0xa1, 0xb0, 0x79, 0xc1, 0x30, 0x6e, 0xe9, 0x16, 0x2c, 0x79, 0x3d, 0xdf, 0xa7,
-	0x1f, 0x6b, 0x66, 0x8d, 0x18, 0x76, 0x75, 0x7f, 0xa7, 0xf2, 0x86, 0x66, 0xd2, 0x6e, 0x96, 0xf3,
-	0x81, 0xe6, 0xe1, 0x54, 0xa7, 0xd2, 0x50, 0xdd, 0xfd, 0x7c, 0xba, 0xf5, 0xc9, 0x0e, 0x4f, 0x97,
-	0xda, 0x70, 0x29, 0xb5, 0xb2, 0x50, 0xe4, 0x4d, 0x08, 0x1d, 0x77, 0xb5, 0x61, 0x11, 0xc3, 0x16,
-	0xe2, 0x2f, 0xc4, 0x45, 0x09, 0x2a, 0x84, 0xa4, 0x98, 0x76, 0xfc, 0x68, 0x22, 0x07, 0x65, 0x34,
-	0x0e, 0xca, 0x00, 0x07, 0x25, 0x9d, 0x83, 0xf2, 0xbf, 0x70, 0x38, 0x84, 0xcf, 0x47, 0x3b, 0xb1,
-	0x4c, 0xd8, 0xb7, 0x12, 0xce, 0xc1, 0x09, 0x8e, 0xaf, 0x7b, 0x68, 0x5f, 0x88, 0xf5, 0x17, 0x0c,
-	0xaf, 0xc3, 0x7c, 0xc0, 0xd0, 0x3f, 0xbb, 0x59, 0x29, 0xc2, 0x3e, 0xc5, 0x53, 0x3c, 0xb4, 0x9b,
-	0x62, 0x2c, 0x3b, 0x84, 0x39, 0x5b, 0x86, 0x49, 0x3a, 0xc6, 0x27, 0x9a, 0xba, 0xdb, 0x73, 0xac,
-	0x9e, 0x93, 0x45, 0x35, 0xe9, 0x01, 0x80, 0xcb, 0xe9, 0x05, 0x04, 0xed, 0x17, 0xe1, 0x19, 0xea,
-	0x45, 0x1a, 0x86, 0xa9, 0x6a, 0xf7, 0x44, 0x91, 0x3c, 0x8f, 0x6d, 0xbb, 0x21, 0xb4, 0x03, 0x67,
-	0xc5, 0x16, 0xcb, 0xa6, 0x16, 0x65, 0xa4, 0x23, 0x58, 0x15, 0xe2, 0xea, 0xf0, 0xea, 0x61, 0x69,
-	0x66, 0x78, 0x6e, 0x4d, 0xa4, 0x4a, 0x1f, 0xc1, 0xa2, 0x07, 0x6a, 0x37, 0x12, 0xce, 0x74, 0x0c,
-	0x06, 0xb1, 0x8e, 0xc5, 0xb0, 0xba, 0x13, 0x5e, 0x48, 0x2c, 0x9f, 0xe5, 0x1e, 0x1f, 0x5e, 0x3f,
-	0x49, 0x8b, 0xf1, 0x93, 0x6b, 0xf1, 0x75, 0x32, 0x5a, 0x76, 0x4a, 0x6a, 0x0c, 0xbc, 0x37, 0xe3,
-	0x27, 0x7e, 0x6f, 0x7e, 0x05, 0x70, 0x31, 0x19, 0xa7, 0x90, 0xb5, 0x05, 0xcf, 0x0d, 0xc8, 0xe2,
-	0xbf, 0x41, 0xeb, 0x29, 0xb7, 0x7f, 0xf2, 0x7c, 0xc2, 0x62, 0xcd, 0x46, 0xc5, 0x3a, 0xc5, 0x17,
-	0x6b, 0x4e, 0x7c, 0x21, 0xd4, 0x88, 0x4d, 0xba, 0xbe, 0xd8, 0x52, 0x5d, 0x58, 0xa7, 0x1f, 0x15,
-	0xd4, 0x36, 0xe0, 0x84, 0xe5, 0x45, 0xc4, 0xad, 0x97, 0x30, 0x68, 0x9e, 0x11, 0xc6, 0x2e, 0x52,
-	0xa4, 0x0f, 0x45, 0xcd, 0x6b, 0x1d, 0x62, 0x74, 0x35, 0x35, 0xd3, 0x5c, 0xd7, 0xe0, 0xec, 0x5d,
-	0xc3, 0x69, 0xab, 0x36, 0xb9, 0x4b, 0x3a, 0x8d, 0x36, 0x61, 0x6d, 0x8f, 0xeb, 0x99, 0xfa, 0x4c,
-	0x10, 0xbe, 0x41, 0x58, 0x5b, 0xba, 0x24, 0x1c, 0xb8, 0x5f, 0x5c, 0x20, 0x2e, 0xc0, 0xc9, 0x16,
-	0x0f, 0x79, 0xb5, 0xa7, 0xea, 0xfe, 0xa3, 0xf2, 0xe8, 0x2c, 0x7c, 0xd6, 0x4b, 0x41, 0x5f, 0x00,
-	0x38, 0xc1, 0x0d, 0x18, 0xbd, 0x34, 0xc4, 0x9f, 0x3d, 0xc8, 0xc5, 0x6c, 0x2e, 0x2e, 0x29, 0xf7,
-	0x5d, 0xfe, 0x9f, 0xff, 0xfe, 0xf7, 0x83, 0xb1, 0x35, 0xb4, 0x82, 0x63, 0x1f, 0x6a, 0xc2, 0xd9,
-	0xf1, 0x41, 0x9f, 0xff, 0x21, 0xfa, 0x0c, 0xc0, 0x49, 0xf1, 0x15, 0x81, 0x9e, 0xde, 0xc6, 0x9f,
-	0x55, 0x71, 0x75, 0xd8, 0x36, 0x01, 0x67, 0x35, 0x80, 0xb3, 0x80, 0xe6, 0x53, 0xe1, 0xa0, 0x9f,
-	0x01, 0x44, 0x71, 0x07, 0x47, 0x97, 0x52, 0xda, 0xa4, 0x7e, 0x46, 0x14, 0x2b, 0x23, 0x64, 0x08,
-	0x8c, 0x37, 0x03, 0x8c, 0xaf, 0xa1, 0xab, 0x99, 0x24, 0xc3, 0x21, 0xa7, 0xc2, 0xcd, 0xfd, 0x86,
-	0xff, 0x71, 0x12, 0xe3, 0xa1, 0x64, 0xe7, 0xa1, 0x8c, 0xcc, 0x43, 0x39, 0x7d, 0x1e, 0xe2, 0x03,
-	0x05, 0x7d, 0x05, 0x20, 0x0c, 0x3c, 0x1a, 0x95, 0x87, 0xa1, 0xe9, 0x1f, 0x8c, 0x97, 0x33, 0xec,
-	0x14, 0x78, 0x37, 0x03, 0xbc, 0x97, 0x51, 0x65, 0x64, 0xbc, 0xe8, 0x17, 0x00, 0xcf, 0x27, 0x38,
-	0x2b, 0x4a, 0x93, 0x2e, 0xdd, 0xc6, 0x8b, 0xca, 0x28, 0x29, 0x02, 0xfe, 0x8d, 0x00, 0xfe, 0x55,
-	0xb4, 0x91, 0x0d, 0x7e, 0x87, 0x30, 0xa7, 0x71, 0xdb, 0x2f, 0xd8, 0xe0, 0x17, 0x2c, 0xfa, 0x11,
-	0xc0, 0x99, 0xe8, 0x75, 0x8c, 0x2e, 0x66, 0xbc, 0xb5, 0x39, 0xfc, 0xd1, 0xee, 0x78, 0x69, 0x3b,
-	0x40, 0xbe, 0x89, 0x5e, 0xcd, 0x86, 0x9c, 0x43, 0x65, 0xf8, 0x20, 0x6c, 0x79, 0x87, 0xe8, 0x3b,
-	0x00, 0x67, 0x07, 0x3c, 0x09, 0x65, 0x43, 0xd3, 0x3f, 0x31, 0x72, 0xd6, 0xed, 0x02, 0xfd, 0x95,
-	0x00, 0x3d, 0x46, 0xeb, 0x23, 0xa1, 0x47, 0x9f, 0xc2, 0x09, 0xee, 0x15, 0xa9, 0x97, 0x6e, 0xc4,
-	0x92, 0x52, 0x2f, 0xdd, 0xa8, 0x45, 0x49, 0x2b, 0x01, 0xa4, 0x22, 0x2a, 0xc4, 0x21, 0x71, 0x33,
-	0x42, 0xdf, 0x03, 0x38, 0x29, 0xbc, 0x22, 0xf5, 0x9e, 0x8d, 0x1a, 0x55, 0xea, 0x3d, 0x3b, 0x60,
-	0x39, 0xd2, 0xad, 0x00, 0xc1, 0xdb, 0xe8, 0xad, 0x6c, 0xa2, 0x04, 0x6e, 0xc6, 0xf0, 0xc1, 0x80,
-	0xe3, 0x1d, 0x62, 0x61, 0x59, 0xd5, 0xad, 0xc7, 0x47, 0x25, 0xf0, 0xe4, 0xa8, 0x04, 0xfe, 0x3a,
-	0x2a, 0x81, 0x2f, 0x8f, 0x4b, 0xb9, 0x27, 0xc7, 0xa5, 0xdc, 0x1f, 0xc7, 0xa5, 0xdc, 0x07, 0x17,
-	0x75, 0xc3, 0x69, 0xf7, 0x9a, 0x72, 0x8b, 0x76, 0xb1, 0xdb, 0xce, 0x20, 0xeb, 0x1d, 0xd2, 0x64,
-	0x78, 0xb7, 0xe6, 0x35, 0xbf, 0xe7, 0xb7, 0xf7, 0x7e, 0x1b, 0x68, 0x4e, 0x78, 0x3f, 0x0e, 0x5c,
-	0xfe, 0x2f, 0x00, 0x00, 0xff, 0xff, 0x3d, 0xf1, 0xe0, 0x9d, 0x17, 0x11, 0x00, 0x00,
+	// 1238 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x58, 0xcf, 0x6f, 0x1b, 0x45,
+	0x14, 0xf6, 0x24, 0x90, 0x1f, 0xe3, 0xe2, 0x84, 0x69, 0x04, 0x8e, 0x13, 0x39, 0x61, 0x45, 0x12,
+	0x53, 0x35, 0xde, 0x7a, 0x2b, 0x21, 0xda, 0xd0, 0x20, 0x12, 0x48, 0x9a, 0x12, 0x9a, 0xe0, 0x72,
+	0xa8, 0x00, 0x69, 0x35, 0xf6, 0x6e, 0xed, 0x15, 0xf6, 0xce, 0x76, 0x67, 0x93, 0x26, 0x84, 0x48,
+	0x88, 0x53, 0xb9, 0x21, 0xf5, 0x1f, 0x28, 0x07, 0x24, 0x24, 0x38, 0x20, 0xc4, 0x81, 0x0b, 0x47,
+	0x50, 0x0f, 0x1c, 0x2a, 0xb8, 0x70, 0x42, 0x28, 0x01, 0xc1, 0x9f, 0x81, 0x76, 0xe7, 0xad, 0x77,
+	0xd7, 0xde, 0x6d, 0xd6, 0x51, 0xb8, 0x54, 0xf5, 0x9b, 0x79, 0xef, 0x7d, 0xdf, 0x7b, 0x6f, 0xe7,
+	0x7b, 0x0a, 0x9e, 0x66, 0x96, 0x61, 0x1a, 0x8e, 0xcc, 0xac, 0x26, 0xe3, 0x8e, 0xbc, 0x5b, 0x91,
+	0xef, 0xee, 0xe8, 0xf6, 0x7e, 0xd9, 0xb2, 0x99, 0xc3, 0xc8, 0xb8, 0x38, 0x2d, 0x8b, 0xd3, 0xf2,
+	0x6e, 0xa5, 0xf0, 0x2c, 0x6d, 0x1b, 0x26, 0x93, 0xbd, 0x7f, 0xc5, 0xa5, 0xc2, 0x85, 0x3a, 0xe3,
+	0x6d, 0xc6, 0xe5, 0x1a, 0xe5, 0xba, 0xf0, 0x96, 0x77, 0x2b, 0x35, 0xdd, 0xa1, 0x15, 0xd9, 0xa2,
+	0x0d, 0xc3, 0xa4, 0x8e, 0xc1, 0x4c, 0xb8, 0x3b, 0x05, 0x77, 0xfd, 0x6b, 0xe1, 0x6c, 0x85, 0x49,
+	0x71, 0xa8, 0x7a, 0xbf, 0x64, 0xf1, 0x03, 0x8e, 0x26, 0x1a, 0xac, 0xc1, 0x84, 0xdd, 0xfd, 0x1f,
+	0x58, 0xa7, 0x1b, 0x8c, 0x35, 0x5a, 0xba, 0x4c, 0x2d, 0x43, 0xa6, 0xa6, 0xc9, 0x1c, 0x2f, 0x95,
+	0xef, 0xd3, 0x4b, 0xcd, 0xd9, 0xb7, 0x74, 0x38, 0x95, 0x96, 0x30, 0x79, 0xc7, 0xcd, 0xbd, 0x62,
+	0x1b, 0x5a, 0x43, 0xaf, 0xea, 0x77, 0x77, 0x74, 0xee, 0x90, 0x29, 0x3c, 0x5a, 0xf3, 0x0c, 0xaa,
+	0xa1, 0xe5, 0xd1, 0x2c, 0x2a, 0x3d, 0x55, 0x1d, 0x11, 0x86, 0x0d, 0xed, 0xea, 0xc8, 0xfd, 0x87,
+	0x33, 0x99, 0x7f, 0x1f, 0xce, 0x64, 0xa4, 0x1f, 0x11, 0x3e, 0x1f, 0xf1, 0xe6, 0x16, 0x33, 0xb9,
+	0xfe, 0x44, 0x77, 0x72, 0x05, 0x67, 0xe1, 0x90, 0x6a, 0x9a, 0x9d, 0x1f, 0x98, 0x45, 0xa5, 0xd1,
+	0x95, 0xfc, 0xaf, 0xdf, 0x2f, 0x4e, 0x00, 0xd5, 0xd7, 0x35, 0xcd, 0xd6, 0x39, 0xbf, 0xe5, 0xd8,
+	0x86, 0xd9, 0xa8, 0x62, 0x71, 0xd9, 0x35, 0x92, 0x9b, 0xf8, 0x19, 0x70, 0xad, 0x33, 0xf3, 0x8e,
+	0xd1, 0xc8, 0x0f, 0xce, 0xa2, 0x52, 0x56, 0x29, 0x96, 0xbb, 0xfb, 0x53, 0x16, 0x80, 0x56, 0xbd,
+	0x5b, 0x2b, 0xa3, 0x8f, 0xfe, 0x98, 0xc9, 0x7c, 0xf5, 0xcf, 0xb7, 0x17, 0x50, 0xf5, 0x5c, 0x2d,
+	0x74, 0x20, 0x35, 0x22, 0xf0, 0xb9, 0xcf, 0x7e, 0x0d, 0xe3, 0xa0, 0x63, 0x1e, 0xfe, 0xac, 0x32,
+	0x5f, 0x06, 0x74, 0x6e, 0x7b, 0xcb, 0xa2, 0x5d, 0xd0, 0xde, 0xf2, 0x36, 0xed, 0x54, 0xae, 0x1a,
+	0xf2, 0x0c, 0x15, 0xea, 0x6b, 0x84, 0x27, 0xa2, 0x99, 0xa0, 0x52, 0x37, 0xf0, 0xb0, 0x40, 0xc4,
+	0xf3, 0x68, 0x76, 0xb0, 0x94, 0x55, 0xe6, 0x7a, 0xb9, 0xc4, 0x54, 0x38, 0x4c, 0xc9, 0x0f, 0x40,
+	0xd6, 0x23, 0xb0, 0x07, 0x3c, 0xd8, 0x0b, 0x27, 0xc2, 0x16, 0x01, 0xc3, 0xb8, 0xa5, 0xdb, 0xb8,
+	0xe8, 0xe5, 0x7c, 0x97, 0x7d, 0xa8, 0x9b, 0xdb, 0xd4, 0xb0, 0x57, 0xf6, 0x37, 0x2b, 0x6f, 0xe8,
+	0x26, 0x6b, 0xa7, 0x99, 0x0f, 0x32, 0x89, 0x47, 0x5a, 0x15, 0x55, 0x73, 0xef, 0x8b, 0xee, 0x56,
+	0x87, 0x5b, 0xc2, 0x5d, 0x6a, 0xe2, 0x99, 0xc4, 0xc8, 0x50, 0x91, 0x37, 0x31, 0x76, 0xdc, 0x53,
+	0xd5, 0xa2, 0x86, 0x0d, 0xc5, 0x9f, 0xea, 0x2d, 0x4a, 0x10, 0x21, 0x54, 0x8a, 0x51, 0xc7, 0xb7,
+	0xc6, 0x72, 0x50, 0xfa, 0xe3, 0xa0, 0x74, 0x71, 0x50, 0x92, 0x39, 0x28, 0xff, 0x0b, 0x87, 0x43,
+	0xfc, 0x5c, 0x34, 0x13, 0x4f, 0x85, 0x7d, 0x2d, 0x66, 0x0e, 0x4e, 0x31, 0xbe, 0xee, 0xd0, 0x3e,
+	0xdf, 0x93, 0x1f, 0x18, 0xae, 0xe3, 0x6c, 0xc0, 0xd0, 0x9f, 0xdd, 0xb4, 0x14, 0x71, 0x87, 0xe2,
+	0x19, 0x0e, 0xed, 0x32, 0xb4, 0x65, 0x93, 0x72, 0x67, 0xcd, 0x30, 0x69, 0xcb, 0xf8, 0x48, 0xd7,
+	0xb6, 0x76, 0x1c, 0x6b, 0xc7, 0x49, 0x53, 0x35, 0xe9, 0x01, 0xc2, 0xb3, 0xc9, 0x01, 0x80, 0xf6,
+	0x0b, 0xf8, 0x1c, 0xf3, 0x2c, 0xaa, 0x61, 0x6a, 0xfa, 0x1e, 0x04, 0xc9, 0x0a, 0xdb, 0x86, 0x6b,
+	0x22, 0x9b, 0x78, 0x0c, 0xae, 0x58, 0x36, 0xb3, 0x18, 0xa7, 0x2d, 0x60, 0x95, 0xef, 0xad, 0x8e,
+	0x88, 0x1e, 0x2e, 0x4d, 0x4e, 0xf8, 0x6e, 0x83, 0xab, 0xf4, 0x01, 0x2e, 0x78, 0xa0, 0xb6, 0x22,
+	0xe6, 0x54, 0x63, 0xd0, 0x8d, 0x75, 0xa0, 0x07, 0xab, 0xdb, 0xe1, 0xa9, 0xd8, 0xf0, 0x69, 0xde,
+	0xf1, 0x93, 0xe3, 0xc7, 0xd5, 0x62, 0xf0, 0xf4, 0xb5, 0xf8, 0x32, 0x1e, 0x2d, 0x3f, 0xa3, 0x6a,
+	0x74, 0x7d, 0x37, 0x83, 0xa7, 0xfe, 0x6e, 0x7e, 0x41, 0x78, 0x3a, 0x1e, 0x27, 0x94, 0xb5, 0x8e,
+	0xc7, 0xbb, 0xca, 0xe2, 0x7f, 0x41, 0x8b, 0x09, 0xaf, 0x7f, 0x7c, 0x7f, 0xc2, 0xc5, 0x1a, 0x8b,
+	0x16, 0xeb, 0x0c, 0x3f, 0xac, 0x09, 0xd8, 0x10, 0xb6, 0xa9, 0x4d, 0xdb, 0x7e, 0xb1, 0xa5, 0x2a,
+	0x48, 0xa7, 0x6f, 0x05, 0x6a, 0x4b, 0x78, 0xc8, 0xf2, 0x2c, 0xf0, 0xea, 0xc5, 0x34, 0x5a, 0x78,
+	0x84, 0xb1, 0x83, 0x8b, 0xf4, 0x3e, 0xc4, 0x5c, 0x6d, 0x51, 0xa3, 0xad, 0x6b, 0xa9, 0xfa, 0xba,
+	0x80, 0xc7, 0xee, 0x19, 0x4e, 0x53, 0xb3, 0xe9, 0x3d, 0xda, 0x52, 0x9b, 0x94, 0x37, 0x3d, 0xae,
+	0xe7, 0xaa, 0xb9, 0xc0, 0x7c, 0x9d, 0xf2, 0xa6, 0x74, 0x09, 0x14, 0xb8, 0x13, 0x1c, 0x10, 0xe7,
+	0xf1, 0x70, 0x5d, 0x98, 0xbc, 0xd8, 0x23, 0x55, 0xff, 0xa7, 0x74, 0x05, 0xbe, 0xbd, 0x9b, 0xfa,
+	0x9e, 0xb3, 0x59, 0xb9, 0xe5, 0xa2, 0x31, 0xeb, 0xa9, 0x56, 0x24, 0x69, 0x1d, 0x26, 0xb5, 0xdb,
+	0x15, 0x72, 0x96, 0xf0, 0xb8, 0xa9, 0xef, 0x39, 0x6a, 0xab, 0xa2, 0x72, 0x38, 0x83, 0x10, 0x39,
+	0x33, 0xe2, 0xa1, 0xfc, 0x9d, 0xc3, 0x4f, 0x7b, 0x91, 0xc8, 0x67, 0x08, 0x0f, 0x89, 0x25, 0x80,
+	0xbc, 0x78, 0xc2, 0x8e, 0xe0, 0x01, 0x2c, 0xa4, 0xdb, 0x24, 0x24, 0xe5, 0xbe, 0xdb, 0x83, 0x4f,
+	0x7f, 0xfb, 0xeb, 0xc1, 0xc0, 0x02, 0x99, 0x93, 0x7b, 0x96, 0x45, 0xd8, 0x2e, 0xe4, 0x83, 0x0e,
+	0xdb, 0x43, 0xf2, 0x09, 0xc2, 0xc3, 0xb0, 0xc9, 0x90, 0x27, 0xa7, 0xf1, 0xe7, 0xa5, 0x30, 0x7f,
+	0xd2, 0x35, 0x80, 0x33, 0x1f, 0xc0, 0x99, 0x22, 0x93, 0x89, 0x70, 0xc8, 0x4f, 0x08, 0x93, 0xde,
+	0x2d, 0x82, 0x5c, 0x4a, 0x48, 0x93, 0xb8, 0xca, 0x14, 0x2a, 0x7d, 0x78, 0x00, 0xc6, 0x1b, 0x01,
+	0xc6, 0xd7, 0xc8, 0xb5, 0x54, 0x25, 0x93, 0x43, 0x6a, 0x29, 0xd7, 0xf6, 0x55, 0x7f, 0x41, 0xea,
+	0xe1, 0xa1, 0xa4, 0xe7, 0xa1, 0xf4, 0xcd, 0x43, 0x39, 0x7b, 0x1e, 0xb0, 0x24, 0x91, 0x2f, 0x10,
+	0xc6, 0xc1, 0x9e, 0x40, 0x4a, 0x27, 0xa1, 0xe9, 0x0c, 0xc6, 0x4b, 0x29, 0x6e, 0x02, 0xde, 0xe5,
+	0x00, 0xef, 0x65, 0x52, 0xe9, 0x1b, 0x2f, 0xf9, 0x19, 0xe1, 0xf3, 0x31, 0xea, 0x4e, 0x92, 0x4a,
+	0x97, 0xbc, 0x4a, 0x14, 0x94, 0x7e, 0x5c, 0x00, 0xfe, 0xf5, 0x00, 0xfe, 0x35, 0xb2, 0x94, 0x0e,
+	0x7e, 0x8b, 0x72, 0x47, 0xbd, 0xe3, 0x07, 0x54, 0xc5, 0x23, 0x4f, 0x7e, 0x40, 0x38, 0x17, 0x95,
+	0x04, 0x72, 0x31, 0xa5, 0x72, 0x08, 0xf8, 0xfd, 0xe9, 0x8c, 0xb4, 0x11, 0x20, 0x5f, 0x26, 0xaf,
+	0xa6, 0x43, 0x2e, 0xa0, 0x72, 0xf9, 0x20, 0x2c, 0xbb, 0x87, 0xe4, 0x1b, 0x84, 0xc7, 0xba, 0x74,
+	0x91, 0xa4, 0x43, 0xd3, 0x99, 0x98, 0x72, 0xda, 0xeb, 0x80, 0xfe, 0x6a, 0x80, 0x5e, 0x26, 0x8b,
+	0x7d, 0xa1, 0x27, 0x1f, 0xe3, 0x21, 0xa1, 0x57, 0x89, 0x8f, 0x6e, 0x44, 0x16, 0x13, 0x1f, 0xdd,
+	0xa8, 0x4c, 0x4a, 0x73, 0x01, 0xa4, 0x02, 0xc9, 0xf7, 0x42, 0x12, 0x82, 0x48, 0xbe, 0x43, 0x78,
+	0x18, 0xf4, 0x2a, 0xf1, 0x9d, 0x8d, 0x8a, 0x65, 0xe2, 0x3b, 0xdb, 0x25, 0x7b, 0xd2, 0xed, 0x00,
+	0xc1, 0xdb, 0xe4, 0xad, 0x74, 0x45, 0x09, 0x14, 0x95, 0xcb, 0x07, 0x5d, 0xaa, 0x7b, 0x28, 0x83,
+	0x6c, 0xba, 0xa0, 0x73, 0x51, 0xdd, 0x4b, 0x1c, 0xce, 0x58, 0x65, 0x4d, 0x1c, 0xce, 0x78, 0x31,
+	0x95, 0x56, 0x03, 0x26, 0xaf, 0x90, 0x97, 0xd3, 0x31, 0xe9, 0x56, 0xdf, 0x95, 0xb5, 0x47, 0x47,
+	0x45, 0xf4, 0xf8, 0xa8, 0x88, 0xfe, 0x3c, 0x2a, 0xa2, 0xcf, 0x8f, 0x8b, 0x99, 0xc7, 0xc7, 0xc5,
+	0xcc, 0xef, 0xc7, 0xc5, 0xcc, 0x7b, 0x17, 0x1b, 0x86, 0xd3, 0xdc, 0xa9, 0x95, 0xeb, 0xac, 0x2d,
+	0xbb, 0x91, 0x0d, 0xba, 0xd8, 0xa2, 0x35, 0x2e, 0x6f, 0x6d, 0x7b, 0x79, 0xf6, 0xfc, 0x4c, 0xde,
+	0x1f, 0x55, 0x6a, 0x43, 0xde, 0x5f, 0x55, 0x2e, 0xff, 0x17, 0x00, 0x00, 0xff, 0xff, 0x39, 0x98,
+	0x0c, 0x4d, 0x50, 0x12, 0x00, 0x00,
 }
 
 // Reference imports to suppress errors if they are not otherwise used.
@@ -1168,6 +1265,8 @@ type QueryClient interface {
 	Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error)
 	// Claimed queries whether the output is claimed.
 	Claimed(ctx context.Context, in *QueryClaimedRequest, opts ...grpc.CallOption) (*QueryClaimedResponse, error)
+	// NextL1Sequence queries the next l1 sequence.
+	NextL1Sequence(ctx context.Context, in *QueryNextL1SequenceRequest, opts ...grpc.CallOption) (*QueryNextL1SequenceResponse, error)
 }
 
 type queryClient struct {
@@ -1268,6 +1367,15 @@ func (c *queryClient) Claimed(ctx context.Context, in *QueryClaimedRequest, opts
 	return out, nil
 }
 
+func (c *queryClient) NextL1Sequence(ctx context.Context, in *QueryNextL1SequenceRequest, opts ...grpc.CallOption) (*QueryNextL1SequenceResponse, error) {
+	out := new(QueryNextL1SequenceResponse)
+	err := c.cc.Invoke(ctx, "/opinit.ophost.v1.Query/NextL1Sequence", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
 // QueryServer is the server API for Query service.
 type QueryServer interface {
 	// Bridge queries bridge info.
@@ -1289,6 +1397,8 @@ type QueryServer interface {
 	Params(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error)
 	// Claimed queries whether the output is claimed.
 	Claimed(context.Context, *QueryClaimedRequest) (*QueryClaimedResponse, error)
+	// NextL1Sequence queries the next l1 sequence.
+	NextL1Sequence(context.Context, *QueryNextL1SequenceRequest) (*QueryNextL1SequenceResponse, error)
 }
 
 // UnimplementedQueryServer can be embedded to have forward compatible implementations.
@@ -1325,6 +1435,9 @@ func (*UnimplementedQueryServer) Params(ctx context.Context, req *QueryParamsReq
 func (*UnimplementedQueryServer) Claimed(ctx context.Context, req *QueryClaimedRequest) (*QueryClaimedResponse, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method Claimed not implemented")
 }
+func (*UnimplementedQueryServer) NextL1Sequence(ctx context.Context, req *QueryNextL1SequenceRequest) (*QueryNextL1SequenceResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method NextL1Sequence not implemented")
+}
 
 func RegisterQueryServer(s grpc1.Server, srv QueryServer) {
 	s.RegisterService(&_Query_serviceDesc, srv)
@@ -1510,6 +1623,24 @@ func _Query_Claimed_Handler(srv interface{}, ctx context.Context, dec func(inter
 	return interceptor(ctx, in, info, handler)
 }
 
+func _Query_NextL1Sequence_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(QueryNextL1SequenceRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(QueryServer).NextL1Sequence(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/opinit.ophost.v1.Query/NextL1Sequence",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(QueryServer).NextL1Sequence(ctx, req.(*QueryNextL1SequenceRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
 var _Query_serviceDesc = grpc.ServiceDesc{
 	ServiceName: "opinit.ophost.v1.Query",
 	HandlerType: (*QueryServer)(nil),
@@ -1554,6 +1685,10 @@ var _Query_serviceDesc = grpc.ServiceDesc{
 			MethodName: "Claimed",
 			Handler:    _Query_Claimed_Handler,
 		},
+		{
+			MethodName: "NextL1Sequence",
+			Handler:    _Query_NextL1Sequence_Handler,
+		},
 	},
 	Streams:  []grpc.StreamDesc{},
 	Metadata: "opinit/ophost/v1/query.proto",
@@ -2301,6 +2436,62 @@ func (m *QueryClaimedResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
 	return len(dAtA) - i, nil
 }
 
+func (m *QueryNextL1SequenceRequest) Marshal() (dAtA []byte, err error) {
+	size := m.Size()
+	dAtA = make([]byte, size)
+	n, err := m.MarshalToSizedBuffer(dAtA[:size])
+	if err != nil {
+		return nil, err
+	}
+	return dAtA[:n], nil
+}
+
+func (m *QueryNextL1SequenceRequest) MarshalTo(dAtA []byte) (int, error) {
+	size := m.Size()
+	return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *QueryNextL1SequenceRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+	i := len(dAtA)
+	_ = i
+	var l int
+	_ = l
+	if m.BridgeId != 0 {
+		i = encodeVarintQuery(dAtA, i, uint64(m.BridgeId))
+		i--
+		dAtA[i] = 0x8
+	}
+	return len(dAtA) - i, nil
+}
+
+func (m *QueryNextL1SequenceResponse) Marshal() (dAtA []byte, err error) {
+	size := m.Size()
+	dAtA = make([]byte, size)
+	n, err := m.MarshalToSizedBuffer(dAtA[:size])
+	if err != nil {
+		return nil, err
+	}
+	return dAtA[:n], nil
+}
+
+func (m *QueryNextL1SequenceResponse) MarshalTo(dAtA []byte) (int, error) {
+	size := m.Size()
+	return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *QueryNextL1SequenceResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+	i := len(dAtA)
+	_ = i
+	var l int
+	_ = l
+	if m.NextL1Sequence != 0 {
+		i = encodeVarintQuery(dAtA, i, uint64(m.NextL1Sequence))
+		i--
+		dAtA[i] = 0x8
+	}
+	return len(dAtA) - i, nil
+}
+
 func encodeVarintQuery(dAtA []byte, offset int, v uint64) int {
 	offset -= sovQuery(v)
 	base := offset
@@ -2607,6 +2798,30 @@ func (m *QueryClaimedResponse) Size() (n int) {
 	return n
 }
 
+func (m *QueryNextL1SequenceRequest) Size() (n int) {
+	if m == nil {
+		return 0
+	}
+	var l int
+	_ = l
+	if m.BridgeId != 0 {
+		n += 1 + sovQuery(uint64(m.BridgeId))
+	}
+	return n
+}
+
+func (m *QueryNextL1SequenceResponse) Size() (n int) {
+	if m == nil {
+		return 0
+	}
+	var l int
+	_ = l
+	if m.NextL1Sequence != 0 {
+		n += 1 + sovQuery(uint64(m.NextL1Sequence))
+	}
+	return n
+}
+
 func sovQuery(x uint64) (n int) {
 	return (math_bits.Len64(x|1) + 6) / 7
 }
@@ -4545,6 +4760,144 @@ func (m *QueryClaimedResponse) Unmarshal(dAtA []byte) error {
 	}
 	return nil
 }
+func (m *QueryNextL1SequenceRequest) Unmarshal(dAtA []byte) error {
+	l := len(dAtA)
+	iNdEx := 0
+	for iNdEx < l {
+		preIndex := iNdEx
+		var wire uint64
+		for shift := uint(0); ; shift += 7 {
+			if shift >= 64 {
+				return ErrIntOverflowQuery
+			}
+			if iNdEx >= l {
+				return io.ErrUnexpectedEOF
+			}
+			b := dAtA[iNdEx]
+			iNdEx++
+			wire |= uint64(b&0x7F) << shift
+			if b < 0x80 {
+				break
+			}
+		}
+		fieldNum := int32(wire >> 3)
+		wireType := int(wire & 0x7)
+		if wireType == 4 {
+			return fmt.Errorf("proto: QueryNextL1SequenceRequest: wiretype end group for non-group")
+		}
+		if fieldNum <= 0 {
+			return fmt.Errorf("proto: QueryNextL1SequenceRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+		}
+		switch fieldNum {
+		case 1:
+			if wireType != 0 {
+				return fmt.Errorf("proto: wrong wireType = %d for field BridgeId", wireType)
+			}
+			m.BridgeId = 0
+			for shift := uint(0); ; shift += 7 {
+				if shift >= 64 {
+					return ErrIntOverflowQuery
+				}
+				if iNdEx >= l {
+					return io.ErrUnexpectedEOF
+				}
+				b := dAtA[iNdEx]
+				iNdEx++
+				m.BridgeId |= uint64(b&0x7F) << shift
+				if b < 0x80 {
+					break
+				}
+			}
+		default:
+			iNdEx = preIndex
+			skippy, err := skipQuery(dAtA[iNdEx:])
+			if err != nil {
+				return err
+			}
+			if (skippy < 0) || (iNdEx+skippy) < 0 {
+				return ErrInvalidLengthQuery
+			}
+			if (iNdEx + skippy) > l {
+				return io.ErrUnexpectedEOF
+			}
+			iNdEx += skippy
+		}
+	}
+
+	if iNdEx > l {
+		return io.ErrUnexpectedEOF
+	}
+	return nil
+}
+func (m *QueryNextL1SequenceResponse) Unmarshal(dAtA []byte) error {
+	l := len(dAtA)
+	iNdEx := 0
+	for iNdEx < l {
+		preIndex := iNdEx
+		var wire uint64
+		for shift := uint(0); ; shift += 7 {
+			if shift >= 64 {
+				return ErrIntOverflowQuery
+			}
+			if iNdEx >= l {
+				return io.ErrUnexpectedEOF
+			}
+			b := dAtA[iNdEx]
+			iNdEx++
+			wire |= uint64(b&0x7F) << shift
+			if b < 0x80 {
+				break
+			}
+		}
+		fieldNum := int32(wire >> 3)
+		wireType := int(wire & 0x7)
+		if wireType == 4 {
+			return fmt.Errorf("proto: QueryNextL1SequenceResponse: wiretype end group for non-group")
+		}
+		if fieldNum <= 0 {
+			return fmt.Errorf("proto: QueryNextL1SequenceResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+		}
+		switch fieldNum {
+		case 1:
+			if wireType != 0 {
+				return fmt.Errorf("proto: wrong wireType = %d for field NextL1Sequence", wireType)
+			}
+			m.NextL1Sequence = 0
+			for shift := uint(0); ; shift += 7 {
+				if shift >= 64 {
+					return ErrIntOverflowQuery
+				}
+				if iNdEx >= l {
+					return io.ErrUnexpectedEOF
+				}
+				b := dAtA[iNdEx]
+				iNdEx++
+				m.NextL1Sequence |= uint64(b&0x7F) << shift
+				if b < 0x80 {
+					break
+				}
+			}
+		default:
+			iNdEx = preIndex
+			skippy, err := skipQuery(dAtA[iNdEx:])
+			if err != nil {
+				return err
+			}
+			if (skippy < 0) || (iNdEx+skippy) < 0 {
+				return ErrInvalidLengthQuery
+			}
+			if (iNdEx + skippy) > l {
+				return io.ErrUnexpectedEOF
+			}
+			iNdEx += skippy
+		}
+	}
+
+	if iNdEx > l {
+		return io.ErrUnexpectedEOF
+	}
+	return nil
+}
 func skipQuery(dAtA []byte) (n int, err error) {
 	l := len(dAtA)
 	iNdEx := 0
diff --git a/x/ophost/types/query.pb.gw.go b/x/ophost/types/query.pb.gw.go
index e9d8e0f5..6b8ee199 100644
--- a/x/ophost/types/query.pb.gw.go
+++ b/x/ophost/types/query.pb.gw.go
@@ -635,6 +635,60 @@ func local_request_Query_Claimed_0(ctx context.Context, marshaler runtime.Marsha
 
 }
 
+func request_Query_NextL1Sequence_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
+	var protoReq QueryNextL1SequenceRequest
+	var metadata runtime.ServerMetadata
+
+	var (
+		val string
+		ok  bool
+		err error
+		_   = err
+	)
+
+	val, ok = pathParams["bridge_id"]
+	if !ok {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "bridge_id")
+	}
+
+	protoReq.BridgeId, err = runtime.Uint64(val)
+
+	if err != nil {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "bridge_id", err)
+	}
+
+	msg, err := client.NextL1Sequence(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
+	return msg, metadata, err
+
+}
+
+func local_request_Query_NextL1Sequence_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
+	var protoReq QueryNextL1SequenceRequest
+	var metadata runtime.ServerMetadata
+
+	var (
+		val string
+		ok  bool
+		err error
+		_   = err
+	)
+
+	val, ok = pathParams["bridge_id"]
+	if !ok {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "bridge_id")
+	}
+
+	protoReq.BridgeId, err = runtime.Uint64(val)
+
+	if err != nil {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "bridge_id", err)
+	}
+
+	msg, err := server.NextL1Sequence(ctx, &protoReq)
+	return msg, metadata, err
+
+}
+
 // RegisterQueryHandlerServer registers the http handlers for service Query to "mux".
 // UnaryRPC     :call QueryServer directly.
 // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.
@@ -871,6 +925,29 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv
 
 	})
 
+	mux.Handle("GET", pattern_Query_NextL1Sequence_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
+		ctx, cancel := context.WithCancel(req.Context())
+		defer cancel()
+		var stream runtime.ServerTransportStream
+		ctx = grpc.NewContextWithServerTransportStream(ctx, &stream)
+		inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
+		rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
+		if err != nil {
+			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
+			return
+		}
+		resp, md, err := local_request_Query_NextL1Sequence_0(rctx, inboundMarshaler, server, req, pathParams)
+		md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())
+		ctx = runtime.NewServerMetadataContext(ctx, md)
+		if err != nil {
+			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
+			return
+		}
+
+		forward_Query_NextL1Sequence_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
+
+	})
+
 	return nil
 }
 
@@ -1112,6 +1189,26 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie
 
 	})
 
+	mux.Handle("GET", pattern_Query_NextL1Sequence_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
+		ctx, cancel := context.WithCancel(req.Context())
+		defer cancel()
+		inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
+		rctx, err := runtime.AnnotateContext(ctx, mux, req)
+		if err != nil {
+			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
+			return
+		}
+		resp, md, err := request_Query_NextL1Sequence_0(rctx, inboundMarshaler, client, req, pathParams)
+		ctx = runtime.NewServerMetadataContext(ctx, md)
+		if err != nil {
+			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
+			return
+		}
+
+		forward_Query_NextL1Sequence_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
+
+	})
+
 	return nil
 }
 
@@ -1135,6 +1232,8 @@ var (
 	pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"opinit", "ophost", "v1", "params"}, "", runtime.AssumeColonVerbOpt(false)))
 
 	pattern_Query_Claimed_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 2, 5, 1, 0, 4, 1, 5, 6, 2, 7}, []string{"opinit", "ophost", "v1", "bridges", "bridge_id", "withdrawals", "withdrawal_hash", "claimed"}, "", runtime.AssumeColonVerbOpt(false)))
+
+	pattern_Query_NextL1Sequence_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 2, 5}, []string{"opinit", "ophost", "v1", "bridges", "bridge_id", "next_l1_sequence"}, "", runtime.AssumeColonVerbOpt(false)))
 )
 
 var (
@@ -1157,4 +1256,6 @@ var (
 	forward_Query_Params_0 = runtime.ForwardResponseMessage
 
 	forward_Query_Claimed_0 = runtime.ForwardResponseMessage
+
+	forward_Query_NextL1Sequence_0 = runtime.ForwardResponseMessage
 )