diff --git a/proto/tendermint/rpc/grpc/types.pb.go b/proto/tendermint/rpc/grpc/types.pb.go
index 9f50d2cd15..78e8a40022 100644
--- a/proto/tendermint/rpc/grpc/types.pb.go
+++ b/proto/tendermint/rpc/grpc/types.pb.go
@@ -389,6 +389,69 @@ func (m *StatusRequest) XXX_DiscardUnknown() {
 
 var xxx_messageInfo_StatusRequest proto.InternalMessageInfo
 
+type DataRootInclusionProofRequest struct {
+	// Height the height of block we want to prove.
+	Height int64 `protobuf:"varint,1,opt,name=height,proto3" json:"height,omitempty"`
+	// Start the start of the data commitment range containing the block.
+	Start uint64 `protobuf:"varint,2,opt,name=start,proto3" json:"start,omitempty"`
+	// End the end exclusive of the data commitment range containing the block.
+	End uint64 `protobuf:"varint,3,opt,name=end,proto3" json:"end,omitempty"`
+}
+
+func (m *DataRootInclusionProofRequest) Reset()         { *m = DataRootInclusionProofRequest{} }
+func (m *DataRootInclusionProofRequest) String() string { return proto.CompactTextString(m) }
+func (*DataRootInclusionProofRequest) ProtoMessage()    {}
+func (*DataRootInclusionProofRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_0ffff5682c662b95, []int{8}
+}
+func (m *DataRootInclusionProofRequest) XXX_Unmarshal(b []byte) error {
+	return m.Unmarshal(b)
+}
+func (m *DataRootInclusionProofRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	if deterministic {
+		return xxx_messageInfo_DataRootInclusionProofRequest.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 *DataRootInclusionProofRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DataRootInclusionProofRequest.Merge(m, src)
+}
+func (m *DataRootInclusionProofRequest) XXX_Size() int {
+	return m.Size()
+}
+func (m *DataRootInclusionProofRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_DataRootInclusionProofRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DataRootInclusionProofRequest proto.InternalMessageInfo
+
+func (m *DataRootInclusionProofRequest) GetHeight() int64 {
+	if m != nil {
+		return m.Height
+	}
+	return 0
+}
+
+func (m *DataRootInclusionProofRequest) GetStart() uint64 {
+	if m != nil {
+		return m.Start
+	}
+	return 0
+}
+
+func (m *DataRootInclusionProofRequest) GetEnd() uint64 {
+	if m != nil {
+		return m.End
+	}
+	return 0
+}
+
 type ResponsePing struct {
 }
 
@@ -396,7 +459,7 @@ func (m *ResponsePing) Reset()         { *m = ResponsePing{} }
 func (m *ResponsePing) String() string { return proto.CompactTextString(m) }
 func (*ResponsePing) ProtoMessage()    {}
 func (*ResponsePing) Descriptor() ([]byte, []int) {
-	return fileDescriptor_0ffff5682c662b95, []int{8}
+	return fileDescriptor_0ffff5682c662b95, []int{9}
 }
 func (m *ResponsePing) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -434,7 +497,7 @@ func (m *ResponseBroadcastTx) Reset()         { *m = ResponseBroadcastTx{} }
 func (m *ResponseBroadcastTx) String() string { return proto.CompactTextString(m) }
 func (*ResponseBroadcastTx) ProtoMessage()    {}
 func (*ResponseBroadcastTx) Descriptor() ([]byte, []int) {
-	return fileDescriptor_0ffff5682c662b95, []int{9}
+	return fileDescriptor_0ffff5682c662b95, []int{10}
 }
 func (m *ResponseBroadcastTx) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -492,7 +555,7 @@ func (m *StreamedBlockByHashResponse) Reset()         { *m = StreamedBlockByHash
 func (m *StreamedBlockByHashResponse) String() string { return proto.CompactTextString(m) }
 func (*StreamedBlockByHashResponse) ProtoMessage()    {}
 func (*StreamedBlockByHashResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_0ffff5682c662b95, []int{10}
+	return fileDescriptor_0ffff5682c662b95, []int{11}
 }
 func (m *StreamedBlockByHashResponse) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -564,7 +627,7 @@ func (m *StreamedBlockByHeightResponse) Reset()         { *m = StreamedBlockByHe
 func (m *StreamedBlockByHeightResponse) String() string { return proto.CompactTextString(m) }
 func (*StreamedBlockByHeightResponse) ProtoMessage()    {}
 func (*StreamedBlockByHeightResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_0ffff5682c662b95, []int{11}
+	return fileDescriptor_0ffff5682c662b95, []int{12}
 }
 func (m *StreamedBlockByHeightResponse) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -629,7 +692,7 @@ func (m *CommitResponse) Reset()         { *m = CommitResponse{} }
 func (m *CommitResponse) String() string { return proto.CompactTextString(m) }
 func (*CommitResponse) ProtoMessage()    {}
 func (*CommitResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_0ffff5682c662b95, []int{12}
+	return fileDescriptor_0ffff5682c662b95, []int{13}
 }
 func (m *CommitResponse) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -677,7 +740,7 @@ func (m *ValidatorSetResponse) Reset()         { *m = ValidatorSetResponse{} }
 func (m *ValidatorSetResponse) String() string { return proto.CompactTextString(m) }
 func (*ValidatorSetResponse) ProtoMessage()    {}
 func (*ValidatorSetResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_0ffff5682c662b95, []int{13}
+	return fileDescriptor_0ffff5682c662b95, []int{14}
 }
 func (m *ValidatorSetResponse) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -729,7 +792,7 @@ func (m *NewHeightEvent) Reset()         { *m = NewHeightEvent{} }
 func (m *NewHeightEvent) String() string { return proto.CompactTextString(m) }
 func (*NewHeightEvent) ProtoMessage()    {}
 func (*NewHeightEvent) Descriptor() ([]byte, []int) {
-	return fileDescriptor_0ffff5682c662b95, []int{14}
+	return fileDescriptor_0ffff5682c662b95, []int{15}
 }
 func (m *NewHeightEvent) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -782,7 +845,7 @@ func (m *StatusResponse) Reset()         { *m = StatusResponse{} }
 func (m *StatusResponse) String() string { return proto.CompactTextString(m) }
 func (*StatusResponse) ProtoMessage()    {}
 func (*StatusResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_0ffff5682c662b95, []int{15}
+	return fileDescriptor_0ffff5682c662b95, []int{16}
 }
 func (m *StatusResponse) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -848,7 +911,7 @@ func (m *SyncInfo) Reset()         { *m = SyncInfo{} }
 func (m *SyncInfo) String() string { return proto.CompactTextString(m) }
 func (*SyncInfo) ProtoMessage()    {}
 func (*SyncInfo) Descriptor() ([]byte, []int) {
-	return fileDescriptor_0ffff5682c662b95, []int{16}
+	return fileDescriptor_0ffff5682c662b95, []int{17}
 }
 func (m *SyncInfo) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -950,7 +1013,7 @@ func (m *ValidatorInfo) Reset()         { *m = ValidatorInfo{} }
 func (m *ValidatorInfo) String() string { return proto.CompactTextString(m) }
 func (*ValidatorInfo) ProtoMessage()    {}
 func (*ValidatorInfo) Descriptor() ([]byte, []int) {
-	return fileDescriptor_0ffff5682c662b95, []int{17}
+	return fileDescriptor_0ffff5682c662b95, []int{18}
 }
 func (m *ValidatorInfo) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -1000,6 +1063,50 @@ func (m *ValidatorInfo) GetVotingPower() int64 {
 	return 0
 }
 
+type DataRootInclusionProofResponse struct {
+	Proof crypto.Proof `protobuf:"bytes,1,opt,name=proof,proto3" json:"proof"`
+}
+
+func (m *DataRootInclusionProofResponse) Reset()         { *m = DataRootInclusionProofResponse{} }
+func (m *DataRootInclusionProofResponse) String() string { return proto.CompactTextString(m) }
+func (*DataRootInclusionProofResponse) ProtoMessage()    {}
+func (*DataRootInclusionProofResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_0ffff5682c662b95, []int{19}
+}
+func (m *DataRootInclusionProofResponse) XXX_Unmarshal(b []byte) error {
+	return m.Unmarshal(b)
+}
+func (m *DataRootInclusionProofResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	if deterministic {
+		return xxx_messageInfo_DataRootInclusionProofResponse.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 *DataRootInclusionProofResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DataRootInclusionProofResponse.Merge(m, src)
+}
+func (m *DataRootInclusionProofResponse) XXX_Size() int {
+	return m.Size()
+}
+func (m *DataRootInclusionProofResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_DataRootInclusionProofResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DataRootInclusionProofResponse proto.InternalMessageInfo
+
+func (m *DataRootInclusionProofResponse) GetProof() crypto.Proof {
+	if m != nil {
+		return m.Proof
+	}
+	return crypto.Proof{}
+}
+
 func init() {
 	proto.RegisterType((*RequestPing)(nil), "tendermint.rpc.grpc.RequestPing")
 	proto.RegisterType((*RequestBroadcastTx)(nil), "tendermint.rpc.grpc.RequestBroadcastTx")
@@ -1009,6 +1116,7 @@ func init() {
 	proto.RegisterType((*ValidatorSetRequest)(nil), "tendermint.rpc.grpc.ValidatorSetRequest")
 	proto.RegisterType((*SubscribeNewHeightsRequest)(nil), "tendermint.rpc.grpc.SubscribeNewHeightsRequest")
 	proto.RegisterType((*StatusRequest)(nil), "tendermint.rpc.grpc.StatusRequest")
+	proto.RegisterType((*DataRootInclusionProofRequest)(nil), "tendermint.rpc.grpc.DataRootInclusionProofRequest")
 	proto.RegisterType((*ResponsePing)(nil), "tendermint.rpc.grpc.ResponsePing")
 	proto.RegisterType((*ResponseBroadcastTx)(nil), "tendermint.rpc.grpc.ResponseBroadcastTx")
 	proto.RegisterType((*StreamedBlockByHashResponse)(nil), "tendermint.rpc.grpc.StreamedBlockByHashResponse")
@@ -1019,81 +1127,89 @@ func init() {
 	proto.RegisterType((*StatusResponse)(nil), "tendermint.rpc.grpc.StatusResponse")
 	proto.RegisterType((*SyncInfo)(nil), "tendermint.rpc.grpc.SyncInfo")
 	proto.RegisterType((*ValidatorInfo)(nil), "tendermint.rpc.grpc.ValidatorInfo")
+	proto.RegisterType((*DataRootInclusionProofResponse)(nil), "tendermint.rpc.grpc.DataRootInclusionProofResponse")
 }
 
 func init() { proto.RegisterFile("tendermint/rpc/grpc/types.proto", fileDescriptor_0ffff5682c662b95) }
 
 var fileDescriptor_0ffff5682c662b95 = []byte{
-	// 1102 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x57, 0x4f, 0x6f, 0x1b, 0x45,
-	0x14, 0xcf, 0x3a, 0xa9, 0xe3, 0x3c, 0xff, 0xa9, 0x32, 0x0e, 0xc5, 0xda, 0xa6, 0x76, 0xba, 0x20,
-	0x9a, 0x56, 0x62, 0x1d, 0x19, 0xf5, 0x42, 0x2b, 0xa4, 0x38, 0x41, 0x22, 0x4a, 0x55, 0x19, 0x27,
-	0x70, 0xe0, 0x62, 0xc6, 0xeb, 0x89, 0xbd, 0xc4, 0xde, 0x19, 0x76, 0xc6, 0x6e, 0x7c, 0xe6, 0x0b,
-	0xf4, 0xc2, 0xc7, 0xe1, 0xde, 0x63, 0x2f, 0x48, 0x9c, 0x00, 0x25, 0x08, 0xbe, 0x06, 0xda, 0x99,
-	0x59, 0x7b, 0x36, 0xf6, 0xa6, 0x81, 0x63, 0x2f, 0xd6, 0x9b, 0x37, 0xef, 0xbd, 0xfd, 0xbd, 0x37,
-	0xef, 0x9f, 0xa1, 0x26, 0x48, 0xd0, 0x23, 0xe1, 0xc8, 0x0f, 0x44, 0x3d, 0x64, 0x5e, 0xbd, 0x1f,
-	0xfd, 0x88, 0x29, 0x23, 0xdc, 0x65, 0x21, 0x15, 0x14, 0x95, 0xe7, 0x02, 0x6e, 0xc8, 0x3c, 0x37,
-	0x12, 0xb0, 0xef, 0x1b, 0x5a, 0xb8, 0xeb, 0xf9, 0xa6, 0x86, 0xbd, 0x6d, 0x5c, 0x4a, 0x7e, 0xe2,
-	0xd6, 0x36, 0x6e, 0x59, 0x83, 0xa5, 0x6a, 0x7a, 0xe1, 0x94, 0x09, 0x5a, 0x3f, 0x27, 0xd3, 0xf8,
-	0x76, 0x67, 0xc1, 0xee, 0x04, 0x0f, 0xfd, 0x1e, 0x16, 0x34, 0xd4, 0x12, 0xb5, 0x3e, 0xa5, 0xfd,
-	0x21, 0xa9, 0xcb, 0x53, 0x77, 0x7c, 0x56, 0x17, 0xfe, 0x88, 0x70, 0x81, 0x47, 0x4c, 0x0b, 0x6c,
-	0xf5, 0x69, 0x9f, 0x4a, 0xb2, 0x1e, 0x51, 0x8a, 0xeb, 0x14, 0x21, 0xdf, 0x26, 0x3f, 0x8e, 0x09,
-	0x17, 0x2d, 0x3f, 0xe8, 0x3b, 0x1f, 0x03, 0xd2, 0xc7, 0x66, 0x48, 0x71, 0xcf, 0xc3, 0x5c, 0x9c,
-	0x5e, 0xa0, 0x12, 0x64, 0xc4, 0x45, 0xc5, 0xda, 0xb1, 0x76, 0x0b, 0xed, 0x8c, 0xb8, 0x70, 0xbe,
-	0x00, 0xd4, 0x1c, 0x52, 0xef, 0xbc, 0x39, 0xfd, 0x0a, 0xf3, 0x81, 0x56, 0x40, 0x08, 0xd6, 0x06,
-	0x98, 0x0f, 0xb4, 0x9c, 0xa4, 0xd1, 0x16, 0xdc, 0x61, 0x21, 0x9d, 0x90, 0x4a, 0x66, 0xc7, 0xda,
-	0xcd, 0xb5, 0xd5, 0xc1, 0x39, 0x84, 0xad, 0x58, 0x9f, 0xf8, 0xfd, 0x81, 0x88, 0x2d, 0xdc, 0x83,
-	0xec, 0x40, 0x32, 0xa4, 0x8d, 0xd5, 0xb6, 0x3e, 0xa5, 0x58, 0x79, 0x04, 0xc5, 0x03, 0x3a, 0x1a,
-	0xf9, 0xef, 0x52, 0x77, 0x3e, 0x85, 0xf2, 0xb7, 0x71, 0xb4, 0x4e, 0xc8, 0x3b, 0xc5, 0xb7, 0xc1,
-	0x3e, 0x19, 0x77, 0xb9, 0x17, 0xfa, 0x5d, 0xf2, 0x92, 0xbc, 0x52, 0x10, 0xb9, 0xd6, 0x72, 0xee,
-	0x42, 0xf1, 0x44, 0x60, 0x31, 0x9e, 0x31, 0x4a, 0x50, 0x68, 0x13, 0xce, 0x68, 0xc0, 0x89, 0x0c,
-	0xe1, 0xcf, 0x16, 0x94, 0x63, 0x86, 0x19, 0xc4, 0x67, 0x90, 0xf3, 0x06, 0xc4, 0x3b, 0xef, 0xe8,
-	0x50, 0xe6, 0x1b, 0x3b, 0xae, 0x91, 0x5f, 0x51, 0x2a, 0xb9, 0xb1, 0xde, 0x41, 0x24, 0x78, 0x7a,
-	0xd1, 0x5e, 0xf7, 0x14, 0x81, 0xf6, 0x01, 0x7a, 0x64, 0xe8, 0x4f, 0x48, 0x18, 0xa9, 0x67, 0xa4,
-	0xba, 0x93, 0xaa, 0x7e, 0xa8, 0x44, 0x4f, 0x2f, 0xda, 0x1b, 0xbd, 0x98, 0x74, 0xfe, 0xb2, 0xe0,
-	0xfe, 0x89, 0x08, 0x09, 0x1e, 0x91, 0x5e, 0xe2, 0xf5, 0x94, 0x0e, 0x7a, 0x0a, 0xd0, 0x8d, 0xd8,
-	0x1d, 0x86, 0x43, 0xa1, 0x11, 0xde, 0x33, 0x3f, 0xa1, 0xb2, 0xb5, 0x85, 0x43, 0xd1, 0xde, 0x90,
-	0x92, 0x11, 0x89, 0xf6, 0x20, 0xeb, 0xc9, 0x57, 0xd0, 0xa8, 0x2a, 0x8b, 0x2a, 0xfa, 0x95, 0xb4,
-	0x1c, 0x3a, 0x80, 0xe2, 0x2c, 0x79, 0x3b, 0x9c, 0x88, 0xca, 0xaa, 0x54, 0xac, 0x2e, 0x2a, 0x26,
-	0x5e, 0xad, 0x30, 0x31, 0x4e, 0xe8, 0x43, 0x58, 0xf7, 0x79, 0x67, 0x88, 0xb9, 0xa8, 0xac, 0xc9,
-	0xa4, 0xc8, 0xfa, 0xfc, 0x05, 0xe6, 0xc2, 0xf9, 0xdb, 0x82, 0x07, 0xd7, 0xdd, 0xd4, 0x49, 0xf6,
-	0x7e, 0x39, 0xda, 0x84, 0x52, 0x9c, 0xfe, 0xda, 0xb1, 0x39, 0x42, 0xeb, 0x76, 0x08, 0x1d, 0x0e,
-	0x5b, 0xc9, 0xca, 0xd0, 0x96, 0x16, 0x90, 0x5b, 0xff, 0x03, 0xf9, 0xbc, 0xbe, 0x32, 0x89, 0xfa,
-	0x7a, 0x0e, 0xa5, 0x59, 0x59, 0x7d, 0x39, 0x21, 0x41, 0x7a, 0xdd, 0xc7, 0x1d, 0x25, 0x33, 0xef,
-	0x28, 0xce, 0xaf, 0x16, 0x94, 0xe2, 0x02, 0xd4, 0x68, 0x9f, 0xc3, 0x46, 0x40, 0x7b, 0xa4, 0xe3,
-	0x07, 0x67, 0x54, 0x23, 0xad, 0x99, 0x48, 0x59, 0x83, 0xb9, 0x87, 0xe4, 0x0c, 0x8f, 0x87, 0xe2,
-	0x25, 0xed, 0x91, 0xa3, 0xe0, 0x8c, 0xb6, 0x73, 0x81, 0xa6, 0xd0, 0xe7, 0xb0, 0xc1, 0xa7, 0x81,
-	0xa7, 0xb4, 0xd5, 0xd3, 0x3e, 0x70, 0x97, 0x34, 0x7e, 0xf7, 0x64, 0x1a, 0x78, 0x4a, 0x97, 0x6b,
-	0x0a, 0x1d, 0x41, 0x69, 0x1e, 0x27, 0x69, 0x60, 0x75, 0xb1, 0x34, 0x67, 0x06, 0x66, 0xb1, 0x92,
-	0x56, 0xe6, 0x11, 0x8e, 0x8e, 0xce, 0x3f, 0xab, 0x90, 0x8b, 0xbf, 0x80, 0x9e, 0xc0, 0xe6, 0x10,
-	0x0b, 0xc2, 0x45, 0x47, 0x65, 0xaa, 0xd1, 0x57, 0xef, 0xaa, 0x0b, 0x99, 0xda, 0x51, 0xfd, 0xa2,
-	0x4f, 0x40, 0xb3, 0x3a, 0x98, 0xb1, 0x8e, 0x11, 0xaf, 0xa2, 0x62, 0xef, 0x33, 0x26, 0xe5, 0x5c,
-	0x28, 0x27, 0x6d, 0xaa, 0x88, 0xaf, 0xca, 0x88, 0x6f, 0x9a, 0x56, 0x55, 0xf0, 0x5b, 0xd7, 0x30,
-	0x44, 0xf3, 0x44, 0xa6, 0x60, 0xbe, 0x61, 0xbb, 0x6a, 0xd8, 0xb8, 0xf1, 0xb0, 0x71, 0x4f, 0xe3,
-	0x61, 0xd3, 0xcc, 0xbd, 0xf9, 0xbd, 0xb6, 0xf2, 0xfa, 0x8f, 0x9a, 0x95, 0x40, 0x1a, 0xdd, 0x47,
-	0x08, 0x08, 0x0e, 0x87, 0xfe, 0x35, 0xbf, 0xee, 0x48, 0xb4, 0x9b, 0xf1, 0xd5, 0xdc, 0xb3, 0x27,
-	0x30, 0x63, 0xce, 0x7d, 0xcb, 0xaa, 0x28, 0xc4, 0x17, 0xb1, 0x77, 0x0d, 0xf8, 0xe0, 0xba, 0x6d,
-	0xe5, 0xdf, 0xba, 0xf4, 0xaf, 0x9c, 0xb4, 0xae, 0x3c, 0x3c, 0x5d, 0xc0, 0x23, 0x7d, 0xcc, 0xfd,
-	0x07, 0x1f, 0x93, 0xa8, 0xa5, 0x97, 0x35, 0xc8, 0x7b, 0x58, 0x78, 0x03, 0x3f, 0xe8, 0x77, 0xc6,
-	0xac, 0xb2, 0x21, 0x8b, 0x16, 0x62, 0xd6, 0x37, 0xcc, 0xf9, 0xc9, 0x82, 0x62, 0x22, 0x15, 0x50,
-	0x05, 0xd6, 0x71, 0xaf, 0x17, 0x12, 0xce, 0xf5, 0x23, 0xc7, 0x47, 0xf4, 0x14, 0xd6, 0xd9, 0xb8,
-	0xdb, 0x39, 0x27, 0x53, 0x9d, 0x9a, 0xdb, 0x66, 0x66, 0xa9, 0x3d, 0xc1, 0x6d, 0x8d, 0xbb, 0x43,
-	0xdf, 0x3b, 0x26, 0xd3, 0x76, 0x96, 0x8d, 0xbb, 0xc7, 0x64, 0x8a, 0x1e, 0x42, 0x61, 0x42, 0x45,
-	0x84, 0x80, 0xd1, 0x57, 0x24, 0xd4, 0x8f, 0x9c, 0x57, 0xbc, 0x56, 0xc4, 0x6a, 0xfc, 0x62, 0x41,
-	0x61, 0x36, 0x9e, 0xf6, 0x5b, 0x47, 0xe8, 0x18, 0xd6, 0xa2, 0xf9, 0x85, 0x76, 0x96, 0xe6, 0xae,
-	0xb1, 0x24, 0xd8, 0x0f, 0x53, 0x24, 0xe6, 0x43, 0x10, 0x7d, 0x0f, 0x79, 0x73, 0xf6, 0x3d, 0xba,
-	0xc9, 0xa6, 0x21, 0x68, 0xef, 0xde, 0x68, 0xda, 0x90, 0x6c, 0x5c, 0xae, 0x41, 0x4e, 0x06, 0x3d,
-	0xc2, 0xfe, 0x03, 0xe4, 0x8d, 0x91, 0x96, 0xf2, 0xb9, 0xc5, 0x95, 0xc5, 0xde, 0x5b, 0x5e, 0xe8,
-	0xe9, 0x53, 0x72, 0xcf, 0x42, 0x0c, 0x8a, 0x89, 0xb9, 0x82, 0x1e, 0xdf, 0xf8, 0x35, 0x73, 0xc1,
-	0xb1, 0x1b, 0xb7, 0xfa, 0x5e, 0x62, 0x5c, 0xed, 0x59, 0xe8, 0x6b, 0xc8, 0xaa, 0xbe, 0x8d, 0x96,
-	0xf7, 0x95, 0xc4, 0x16, 0x64, 0x7f, 0x74, 0xa3, 0x8c, 0x6e, 0x99, 0x1e, 0x14, 0xcc, 0xce, 0x8d,
-	0x76, 0x6f, 0x6e, 0x58, 0xf3, 0xad, 0xc9, 0x7e, 0x7c, 0x0b, 0x49, 0xfd, 0x91, 0x11, 0x94, 0x97,
-	0x2c, 0x52, 0xa8, 0xbe, 0x3c, 0x08, 0xa9, 0x2b, 0x57, 0x8a, 0x47, 0xc9, 0x19, 0xa2, 0xc2, 0xa4,
-	0x06, 0x43, 0x4a, 0x98, 0x12, 0x6b, 0x5b, 0x8a, 0xd1, 0xe4, 0x64, 0x69, 0xbe, 0x78, 0x73, 0x59,
-	0xb5, 0xde, 0x5e, 0x56, 0xad, 0x3f, 0x2f, 0xab, 0xd6, 0xeb, 0xab, 0xea, 0xca, 0xdb, 0xab, 0xea,
-	0xca, 0x6f, 0x57, 0xd5, 0x95, 0xef, 0x1a, 0x7d, 0x5f, 0x0c, 0xc6, 0x5d, 0xd7, 0xa3, 0xa3, 0xba,
-	0xb9, 0x9b, 0x2f, 0xfe, 0xa3, 0x78, 0xe6, 0xd1, 0x90, 0x44, 0x44, 0x37, 0x2b, 0x5b, 0xc9, 0x67,
-	0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0xe7, 0x4a, 0xdc, 0x8a, 0x78, 0x0c, 0x00, 0x00,
+	// 1205 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x57, 0x4b, 0x6f, 0x1b, 0x45,
+	0x1c, 0xcf, 0xc6, 0xae, 0xe3, 0xfc, 0xfd, 0x28, 0x1d, 0x87, 0x62, 0x6d, 0x1b, 0x3b, 0x5d, 0x10,
+	0x4d, 0x2b, 0xb1, 0x8e, 0x5c, 0x7a, 0xa1, 0x15, 0x52, 0xdd, 0x20, 0x11, 0xb5, 0xaa, 0xcc, 0x26,
+	0xf4, 0xc0, 0xc5, 0xac, 0xd7, 0x63, 0x7b, 0x89, 0xbd, 0x33, 0xec, 0x8c, 0xdd, 0xf8, 0x88, 0xf8,
+	0x02, 0x95, 0x10, 0x1f, 0x87, 0x7b, 0x8f, 0xbd, 0x20, 0x71, 0x02, 0x94, 0x22, 0xf8, 0x1a, 0x68,
+	0x1e, 0x6b, 0xef, 0xc6, 0x5e, 0x37, 0xe5, 0xc8, 0x65, 0x35, 0xf3, 0x7f, 0xcd, 0xff, 0x39, 0xbf,
+	0x59, 0xa8, 0x73, 0x1c, 0xf4, 0x70, 0x38, 0xf6, 0x03, 0xde, 0x08, 0xa9, 0xd7, 0x18, 0x88, 0x0f,
+	0x9f, 0x51, 0xcc, 0x6c, 0x1a, 0x12, 0x4e, 0x50, 0x65, 0x21, 0x60, 0x87, 0xd4, 0xb3, 0x85, 0x80,
+	0x79, 0x23, 0xa6, 0xe5, 0x76, 0x3d, 0x3f, 0xae, 0x61, 0xde, 0x8c, 0x31, 0x25, 0x3d, 0xc1, 0x35,
+	0x63, 0x5c, 0xda, 0xa4, 0xa9, 0x9a, 0x5e, 0x38, 0xa3, 0x9c, 0x34, 0x4e, 0xf1, 0x2c, 0xe2, 0xee,
+	0x2e, 0x73, 0x69, 0x48, 0x48, 0x5f, 0xb3, 0xf7, 0x96, 0x8e, 0x9d, 0xba, 0x23, 0xbf, 0xe7, 0x72,
+	0x12, 0x6a, 0x89, 0xfa, 0x80, 0x90, 0xc1, 0x08, 0x37, 0xe4, 0xae, 0x3b, 0xe9, 0x37, 0xb8, 0x3f,
+	0xc6, 0x8c, 0xbb, 0x63, 0xaa, 0x05, 0x76, 0x06, 0x64, 0x40, 0xe4, 0xb2, 0x21, 0x56, 0x8a, 0x6a,
+	0x95, 0xa0, 0xe0, 0xe0, 0xef, 0x27, 0x98, 0xf1, 0xb6, 0x1f, 0x0c, 0xac, 0x8f, 0x00, 0xe9, 0x6d,
+	0x2b, 0x24, 0x6e, 0xcf, 0x73, 0x19, 0x3f, 0x39, 0x43, 0x65, 0xd8, 0xe4, 0x67, 0x55, 0x63, 0xcf,
+	0xd8, 0x2f, 0x3a, 0x9b, 0xfc, 0xcc, 0xfa, 0x1c, 0x50, 0x6b, 0x44, 0xbc, 0xd3, 0xd6, 0xec, 0x4b,
+	0x97, 0x0d, 0xb5, 0x02, 0x42, 0x90, 0x1d, 0xba, 0x6c, 0xa8, 0xe5, 0xe4, 0x1a, 0xed, 0xc0, 0x15,
+	0x1a, 0x92, 0x29, 0xae, 0x6e, 0xee, 0x19, 0xfb, 0x79, 0x47, 0x6d, 0xac, 0x43, 0xd8, 0x89, 0xf4,
+	0xb1, 0x3f, 0x18, 0xf2, 0xc8, 0xc2, 0x75, 0xc8, 0x0d, 0x25, 0x41, 0xda, 0xc8, 0x38, 0x7a, 0x97,
+	0x62, 0xe5, 0x36, 0x94, 0x1e, 0x93, 0xf1, 0xd8, 0x7f, 0x9b, 0xba, 0xf5, 0x09, 0x54, 0x9e, 0x47,
+	0xd9, 0x3a, 0xc6, 0x6f, 0x15, 0xbf, 0x09, 0xe6, 0xf1, 0xa4, 0xcb, 0xbc, 0xd0, 0xef, 0xe2, 0x67,
+	0xf8, 0x85, 0x72, 0x91, 0x69, 0x2d, 0xeb, 0x2a, 0x94, 0x8e, 0xb9, 0xcb, 0x27, 0x73, 0x42, 0x07,
+	0x76, 0x0f, 0x5d, 0xee, 0x3a, 0x84, 0xf0, 0xa3, 0xc0, 0x1b, 0x4d, 0x98, 0x4f, 0x82, 0xb6, 0x28,
+	0xdd, 0x25, 0xa2, 0x62, 0xdc, 0x0d, 0xb9, 0x8c, 0x2a, 0xeb, 0xa8, 0x0d, 0x7a, 0x0f, 0x32, 0x38,
+	0xe8, 0x55, 0x33, 0x92, 0x26, 0x96, 0x56, 0x19, 0x8a, 0x0e, 0x66, 0x94, 0x04, 0x0c, 0xcb, 0x1a,
+	0xfd, 0x6c, 0x40, 0x25, 0x22, 0xc4, 0xab, 0xf4, 0x00, 0xf2, 0xde, 0x10, 0x7b, 0xa7, 0x1d, 0x5d,
+	0xab, 0x42, 0x73, 0xcf, 0x8e, 0xf5, 0xb7, 0x68, 0x65, 0x3b, 0xd2, 0x7b, 0x2c, 0x04, 0x4f, 0xce,
+	0x9c, 0x2d, 0x4f, 0x2d, 0xd0, 0x23, 0x80, 0x1e, 0x1e, 0xf9, 0x53, 0x1c, 0x0a, 0xf5, 0x4d, 0xa9,
+	0x6e, 0xa5, 0xaa, 0x1f, 0x2a, 0xd1, 0x93, 0x33, 0x67, 0xbb, 0x17, 0x2d, 0xad, 0xbf, 0x0c, 0xb8,
+	0x71, 0xcc, 0x43, 0xec, 0x8e, 0x71, 0x2f, 0xd1, 0x1e, 0x4a, 0x07, 0xdd, 0x07, 0xe8, 0x0a, 0x72,
+	0x87, 0x8a, 0xa0, 0x95, 0x87, 0xd7, 0xe3, 0x47, 0xa8, 0x69, 0x69, 0xbb, 0x21, 0x77, 0xb6, 0xa5,
+	0xa4, 0x58, 0xa2, 0x03, 0xc8, 0x79, 0xb2, 0xcc, 0xda, 0xab, 0xea, 0xb2, 0x8a, 0x6e, 0x03, 0x2d,
+	0x87, 0x1e, 0x43, 0x69, 0x3e, 0x1d, 0x1d, 0x86, 0xb9, 0x4c, 0x66, 0xa1, 0x59, 0x5b, 0x56, 0x4c,
+	0xb4, 0x45, 0x71, 0x1a, 0xdb, 0xa1, 0x0f, 0x60, 0xcb, 0x67, 0x9d, 0x91, 0xcb, 0x78, 0x35, 0x2b,
+	0xbb, 0x2e, 0xe7, 0xb3, 0xa7, 0x2e, 0xe3, 0xd6, 0xdf, 0x06, 0xec, 0x5e, 0x0c, 0x53, 0x77, 0xf1,
+	0xff, 0x2b, 0xd0, 0x16, 0x94, 0xa3, 0xf9, 0xd2, 0x81, 0x2d, 0x3c, 0x34, 0x2e, 0xe7, 0xa1, 0xc5,
+	0x60, 0x27, 0x39, 0x7a, 0xda, 0xd2, 0x92, 0xe7, 0xc6, 0x7f, 0xf0, 0x7c, 0x31, 0x58, 0x9b, 0x89,
+	0x01, 0x7e, 0x08, 0xe5, 0xf9, 0xdc, 0x7e, 0x31, 0xc5, 0x41, 0xfa, 0x08, 0x46, 0x57, 0xd6, 0xe6,
+	0xe2, 0xca, 0xb2, 0x7e, 0x35, 0xa0, 0x1c, 0x4d, 0xb8, 0xf6, 0xf6, 0x21, 0x6c, 0x07, 0xa4, 0x87,
+	0x3b, 0x7e, 0xd0, 0x27, 0xda, 0xd3, 0x7a, 0xdc, 0x53, 0xda, 0xa4, 0xf6, 0x21, 0xee, 0xbb, 0x93,
+	0x11, 0x7f, 0x46, 0x7a, 0xf8, 0x28, 0xe8, 0x13, 0x27, 0x1f, 0xe8, 0x15, 0xfa, 0x0c, 0xb6, 0xd9,
+	0x2c, 0xf0, 0x94, 0xb6, 0x2a, 0xed, 0xae, 0xbd, 0x02, 0x78, 0xec, 0xe3, 0x59, 0xe0, 0x29, 0x5d,
+	0xa6, 0x57, 0xe8, 0x08, 0xca, 0x8b, 0x3c, 0x49, 0x03, 0x99, 0xe5, 0xd1, 0x9c, 0x1b, 0x98, 0xe7,
+	0x4a, 0x5a, 0x59, 0x64, 0x58, 0x6c, 0xad, 0x7f, 0x32, 0x90, 0x8f, 0x4e, 0x40, 0x77, 0xe1, 0xda,
+	0xc8, 0xe5, 0x98, 0xf1, 0x8e, 0xea, 0xd4, 0xd8, 0xc5, 0x7d, 0x55, 0x31, 0x64, 0x6b, 0x8b, 0xf9,
+	0x45, 0x1f, 0x83, 0x26, 0x75, 0x5c, 0x4a, 0x3b, 0xb1, 0x7c, 0x95, 0x14, 0xf9, 0x11, 0xa5, 0x52,
+	0xce, 0x86, 0x4a, 0xd2, 0xa6, 0xca, 0x78, 0x46, 0x66, 0xfc, 0x5a, 0xdc, 0xaa, 0x4a, 0x7e, 0xfb,
+	0x82, 0x0f, 0x02, 0xb0, 0x64, 0x0b, 0x16, 0x9a, 0xa6, 0xad, 0xd0, 0xcc, 0x8e, 0xd0, 0xcc, 0x3e,
+	0x89, 0xd0, 0xac, 0x95, 0x7f, 0xf5, 0x7b, 0x7d, 0xe3, 0xe5, 0x1f, 0x75, 0x23, 0xe1, 0xa9, 0xe0,
+	0x0b, 0x0f, 0xb0, 0x1b, 0x8e, 0xfc, 0x0b, 0x71, 0x5d, 0x91, 0xde, 0x5e, 0x8b, 0x58, 0x8b, 0xc8,
+	0xee, 0xc2, 0x9c, 0xb8, 0x88, 0x2d, 0xa7, 0xb2, 0x10, 0x31, 0xa2, 0xe8, 0x9a, 0xf0, 0xfe, 0x45,
+	0xdb, 0x2a, 0xbe, 0x2d, 0x19, 0x5f, 0x25, 0x69, 0x5d, 0x45, 0x78, 0xb2, 0xe4, 0x8f, 0x8c, 0x31,
+	0xff, 0x0e, 0x31, 0x26, 0xbd, 0x96, 0x51, 0xd6, 0xa1, 0xe0, 0xb9, 0xdc, 0x1b, 0xfa, 0xc1, 0xa0,
+	0x33, 0xa1, 0xd5, 0x6d, 0x39, 0xb4, 0x10, 0x91, 0xbe, 0xa6, 0xd6, 0x8f, 0x06, 0x94, 0x12, 0xad,
+	0x80, 0xaa, 0xb0, 0xe5, 0xf6, 0x7a, 0x21, 0x66, 0x4c, 0x17, 0x39, 0xda, 0xa2, 0xfb, 0xb0, 0x45,
+	0x27, 0xdd, 0xce, 0x29, 0x9e, 0xe9, 0xd6, 0xbc, 0x19, 0xef, 0x2c, 0xf5, 0x12, 0xb1, 0xdb, 0x93,
+	0xee, 0xc8, 0xf7, 0x9e, 0xe0, 0x99, 0x93, 0xa3, 0x93, 0xee, 0x13, 0x3c, 0x43, 0xb7, 0xa0, 0x38,
+	0x25, 0x5c, 0x78, 0x40, 0xc9, 0x0b, 0x1c, 0xea, 0x22, 0x17, 0x14, 0xad, 0x2d, 0x48, 0xd6, 0x73,
+	0xa8, 0xa5, 0xe1, 0xa2, 0x1e, 0xab, 0x4f, 0x25, 0xac, 0x93, 0xfe, 0xaa, 0xdb, 0x24, 0x3a, 0x59,
+	0xf0, 0x5b, 0x59, 0x91, 0x0e, 0x47, 0x09, 0x37, 0x7f, 0x31, 0xa0, 0x38, 0x87, 0xbd, 0x47, 0xed,
+	0x23, 0xf4, 0x04, 0xb2, 0x02, 0x17, 0xd1, 0xde, 0xca, 0x99, 0x88, 0xbd, 0x6e, 0xcc, 0x5b, 0x29,
+	0x12, 0x0b, 0x70, 0x45, 0xdf, 0x42, 0x21, 0x8e, 0xa9, 0xb7, 0xd7, 0xd9, 0x8c, 0x09, 0x9a, 0xfb,
+	0x6b, 0x4d, 0xc7, 0x24, 0x9b, 0xe7, 0x59, 0xc8, 0xcb, 0x62, 0x0a, 0xdf, 0xbf, 0x83, 0x42, 0x0c,
+	0x2a, 0x53, 0x8e, 0x5b, 0x7e, 0x6b, 0x99, 0x07, 0xab, 0x2f, 0x90, 0x74, 0xf4, 0x3d, 0x30, 0x10,
+	0x85, 0x52, 0x02, 0xaf, 0xd0, 0x9d, 0xb5, 0xa7, 0xc5, 0x5f, 0x66, 0x66, 0xf3, 0x52, 0xe7, 0x25,
+	0x60, 0xf0, 0xc0, 0x40, 0x5f, 0x41, 0x4e, 0xe1, 0x01, 0x5a, 0x7d, 0x5f, 0x25, 0x9e, 0x6f, 0xe6,
+	0x87, 0x6b, 0x65, 0x74, 0xcf, 0x78, 0x50, 0x8c, 0x23, 0x02, 0xda, 0x5f, 0x7f, 0x11, 0x2e, 0x9e,
+	0x7b, 0xe6, 0x9d, 0x4b, 0x48, 0xea, 0x43, 0xc6, 0x50, 0x59, 0xf1, 0x02, 0x44, 0x8d, 0xd5, 0x49,
+	0x48, 0x7d, 0x2b, 0xa6, 0x44, 0x94, 0xc4, 0x26, 0x95, 0x26, 0x05, 0x38, 0x29, 0x69, 0x4a, 0xbc,
+	0x37, 0x53, 0x8c, 0x26, 0x11, 0xab, 0xf9, 0x93, 0x21, 0x8b, 0xdd, 0x65, 0xb2, 0x42, 0xa2, 0xd3,
+	0x7e, 0x30, 0xe0, 0xfa, 0xea, 0x79, 0x44, 0xab, 0x8b, 0xbb, 0xf6, 0x51, 0x6b, 0xde, 0x7b, 0x27,
+	0x1d, 0x3d, 0x05, 0x4f, 0x5f, 0x9d, 0xd7, 0x8c, 0xd7, 0xe7, 0x35, 0xe3, 0xcf, 0xf3, 0x9a, 0xf1,
+	0xf2, 0x4d, 0x6d, 0xe3, 0xf5, 0x9b, 0xda, 0xc6, 0x6f, 0x6f, 0x6a, 0x1b, 0xdf, 0x34, 0x07, 0x3e,
+	0x1f, 0x4e, 0xba, 0xb6, 0x47, 0xc6, 0x8d, 0xf8, 0xaf, 0xce, 0xf2, 0xff, 0xdb, 0x03, 0x8f, 0x84,
+	0x58, 0x2c, 0xba, 0x39, 0x79, 0x71, 0xde, 0xfb, 0x37, 0x00, 0x00, 0xff, 0xff, 0x48, 0xde, 0xac,
+	0x0d, 0xe6, 0x0d, 0x00, 0x00,
 }
 
 // Reference imports to suppress errors if they are not otherwise used.
@@ -1546,6 +1662,84 @@ var _BlockAPI_serviceDesc = grpc.ServiceDesc{
 	Metadata: "tendermint/rpc/grpc/types.proto",
 }
 
+// BlobstreamAPIClient is the client API for BlobstreamAPI service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type BlobstreamAPIClient interface {
+	// DataRootInclusionProof creates an inclusion proof for the data root of block
+	// height `height` in the set of blocks defined by `start` and `end`. The range
+	// is end exclusive.
+	DataRootInclusionProof(ctx context.Context, in *DataRootInclusionProofRequest, opts ...grpc.CallOption) (*DataRootInclusionProofResponse, error)
+}
+
+type blobstreamAPIClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewBlobstreamAPIClient(cc *grpc.ClientConn) BlobstreamAPIClient {
+	return &blobstreamAPIClient{cc}
+}
+
+func (c *blobstreamAPIClient) DataRootInclusionProof(ctx context.Context, in *DataRootInclusionProofRequest, opts ...grpc.CallOption) (*DataRootInclusionProofResponse, error) {
+	out := new(DataRootInclusionProofResponse)
+	err := c.cc.Invoke(ctx, "/tendermint.rpc.grpc.BlobstreamAPI/DataRootInclusionProof", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// BlobstreamAPIServer is the server API for BlobstreamAPI service.
+type BlobstreamAPIServer interface {
+	// DataRootInclusionProof creates an inclusion proof for the data root of block
+	// height `height` in the set of blocks defined by `start` and `end`. The range
+	// is end exclusive.
+	DataRootInclusionProof(context.Context, *DataRootInclusionProofRequest) (*DataRootInclusionProofResponse, error)
+}
+
+// UnimplementedBlobstreamAPIServer can be embedded to have forward compatible implementations.
+type UnimplementedBlobstreamAPIServer struct {
+}
+
+func (*UnimplementedBlobstreamAPIServer) DataRootInclusionProof(ctx context.Context, req *DataRootInclusionProofRequest) (*DataRootInclusionProofResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method DataRootInclusionProof not implemented")
+}
+
+func RegisterBlobstreamAPIServer(s *grpc.Server, srv BlobstreamAPIServer) {
+	s.RegisterService(&_BlobstreamAPI_serviceDesc, srv)
+}
+
+func _BlobstreamAPI_DataRootInclusionProof_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(DataRootInclusionProofRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(BlobstreamAPIServer).DataRootInclusionProof(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/tendermint.rpc.grpc.BlobstreamAPI/DataRootInclusionProof",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(BlobstreamAPIServer).DataRootInclusionProof(ctx, req.(*DataRootInclusionProofRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _BlobstreamAPI_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "tendermint.rpc.grpc.BlobstreamAPI",
+	HandlerType: (*BlobstreamAPIServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "DataRootInclusionProof",
+			Handler:    _BlobstreamAPI_DataRootInclusionProof_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "tendermint/rpc/grpc/types.proto",
+}
+
 func (m *RequestPing) Marshal() (dAtA []byte, err error) {
 	size := m.Size()
 	dAtA = make([]byte, size)
@@ -1779,6 +1973,44 @@ func (m *StatusRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
 	return len(dAtA) - i, nil
 }
 
+func (m *DataRootInclusionProofRequest) 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 *DataRootInclusionProofRequest) MarshalTo(dAtA []byte) (int, error) {
+	size := m.Size()
+	return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *DataRootInclusionProofRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+	i := len(dAtA)
+	_ = i
+	var l int
+	_ = l
+	if m.End != 0 {
+		i = encodeVarintTypes(dAtA, i, uint64(m.End))
+		i--
+		dAtA[i] = 0x18
+	}
+	if m.Start != 0 {
+		i = encodeVarintTypes(dAtA, i, uint64(m.Start))
+		i--
+		dAtA[i] = 0x10
+	}
+	if m.Height != 0 {
+		i = encodeVarintTypes(dAtA, i, uint64(m.Height))
+		i--
+		dAtA[i] = 0x8
+	}
+	return len(dAtA) - i, nil
+}
+
 func (m *ResponsePing) Marshal() (dAtA []byte, err error) {
 	size := m.Size()
 	dAtA = make([]byte, size)
@@ -2290,6 +2522,39 @@ func (m *ValidatorInfo) MarshalToSizedBuffer(dAtA []byte) (int, error) {
 	return len(dAtA) - i, nil
 }
 
+func (m *DataRootInclusionProofResponse) 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 *DataRootInclusionProofResponse) MarshalTo(dAtA []byte) (int, error) {
+	size := m.Size()
+	return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *DataRootInclusionProofResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+	i := len(dAtA)
+	_ = i
+	var l int
+	_ = l
+	{
+		size, err := m.Proof.MarshalToSizedBuffer(dAtA[:i])
+		if err != nil {
+			return 0, err
+		}
+		i -= size
+		i = encodeVarintTypes(dAtA, i, uint64(size))
+	}
+	i--
+	dAtA[i] = 0xa
+	return len(dAtA) - i, nil
+}
+
 func encodeVarintTypes(dAtA []byte, offset int, v uint64) int {
 	offset -= sovTypes(v)
 	base := offset
@@ -2396,6 +2661,24 @@ func (m *StatusRequest) Size() (n int) {
 	return n
 }
 
+func (m *DataRootInclusionProofRequest) Size() (n int) {
+	if m == nil {
+		return 0
+	}
+	var l int
+	_ = l
+	if m.Height != 0 {
+		n += 1 + sovTypes(uint64(m.Height))
+	}
+	if m.Start != 0 {
+		n += 1 + sovTypes(uint64(m.Start))
+	}
+	if m.End != 0 {
+		n += 1 + sovTypes(uint64(m.End))
+	}
+	return n
+}
+
 func (m *ResponsePing) Size() (n int) {
 	if m == nil {
 		return 0
@@ -2594,6 +2877,17 @@ func (m *ValidatorInfo) Size() (n int) {
 	return n
 }
 
+func (m *DataRootInclusionProofResponse) Size() (n int) {
+	if m == nil {
+		return 0
+	}
+	var l int
+	_ = l
+	l = m.Proof.Size()
+	n += 1 + l + sovTypes(uint64(l))
+	return n
+}
+
 func sovTypes(x uint64) (n int) {
 	return (math_bits.Len64(x|1) + 6) / 7
 }
@@ -3165,6 +3459,113 @@ func (m *StatusRequest) Unmarshal(dAtA []byte) error {
 	}
 	return nil
 }
+func (m *DataRootInclusionProofRequest) 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 ErrIntOverflowTypes
+			}
+			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: DataRootInclusionProofRequest: wiretype end group for non-group")
+		}
+		if fieldNum <= 0 {
+			return fmt.Errorf("proto: DataRootInclusionProofRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+		}
+		switch fieldNum {
+		case 1:
+			if wireType != 0 {
+				return fmt.Errorf("proto: wrong wireType = %d for field Height", wireType)
+			}
+			m.Height = 0
+			for shift := uint(0); ; shift += 7 {
+				if shift >= 64 {
+					return ErrIntOverflowTypes
+				}
+				if iNdEx >= l {
+					return io.ErrUnexpectedEOF
+				}
+				b := dAtA[iNdEx]
+				iNdEx++
+				m.Height |= int64(b&0x7F) << shift
+				if b < 0x80 {
+					break
+				}
+			}
+		case 2:
+			if wireType != 0 {
+				return fmt.Errorf("proto: wrong wireType = %d for field Start", wireType)
+			}
+			m.Start = 0
+			for shift := uint(0); ; shift += 7 {
+				if shift >= 64 {
+					return ErrIntOverflowTypes
+				}
+				if iNdEx >= l {
+					return io.ErrUnexpectedEOF
+				}
+				b := dAtA[iNdEx]
+				iNdEx++
+				m.Start |= uint64(b&0x7F) << shift
+				if b < 0x80 {
+					break
+				}
+			}
+		case 3:
+			if wireType != 0 {
+				return fmt.Errorf("proto: wrong wireType = %d for field End", wireType)
+			}
+			m.End = 0
+			for shift := uint(0); ; shift += 7 {
+				if shift >= 64 {
+					return ErrIntOverflowTypes
+				}
+				if iNdEx >= l {
+					return io.ErrUnexpectedEOF
+				}
+				b := dAtA[iNdEx]
+				iNdEx++
+				m.End |= uint64(b&0x7F) << shift
+				if b < 0x80 {
+					break
+				}
+			}
+		default:
+			iNdEx = preIndex
+			skippy, err := skipTypes(dAtA[iNdEx:])
+			if err != nil {
+				return err
+			}
+			if (skippy < 0) || (iNdEx+skippy) < 0 {
+				return ErrInvalidLengthTypes
+			}
+			if (iNdEx + skippy) > l {
+				return io.ErrUnexpectedEOF
+			}
+			iNdEx += skippy
+		}
+	}
+
+	if iNdEx > l {
+		return io.ErrUnexpectedEOF
+	}
+	return nil
+}
 func (m *ResponsePing) Unmarshal(dAtA []byte) error {
 	l := len(dAtA)
 	iNdEx := 0
@@ -4594,6 +4995,89 @@ func (m *ValidatorInfo) Unmarshal(dAtA []byte) error {
 	}
 	return nil
 }
+func (m *DataRootInclusionProofResponse) 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 ErrIntOverflowTypes
+			}
+			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: DataRootInclusionProofResponse: wiretype end group for non-group")
+		}
+		if fieldNum <= 0 {
+			return fmt.Errorf("proto: DataRootInclusionProofResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+		}
+		switch fieldNum {
+		case 1:
+			if wireType != 2 {
+				return fmt.Errorf("proto: wrong wireType = %d for field Proof", wireType)
+			}
+			var msglen int
+			for shift := uint(0); ; shift += 7 {
+				if shift >= 64 {
+					return ErrIntOverflowTypes
+				}
+				if iNdEx >= l {
+					return io.ErrUnexpectedEOF
+				}
+				b := dAtA[iNdEx]
+				iNdEx++
+				msglen |= int(b&0x7F) << shift
+				if b < 0x80 {
+					break
+				}
+			}
+			if msglen < 0 {
+				return ErrInvalidLengthTypes
+			}
+			postIndex := iNdEx + msglen
+			if postIndex < 0 {
+				return ErrInvalidLengthTypes
+			}
+			if postIndex > l {
+				return io.ErrUnexpectedEOF
+			}
+			if err := m.Proof.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+				return err
+			}
+			iNdEx = postIndex
+		default:
+			iNdEx = preIndex
+			skippy, err := skipTypes(dAtA[iNdEx:])
+			if err != nil {
+				return err
+			}
+			if (skippy < 0) || (iNdEx+skippy) < 0 {
+				return ErrInvalidLengthTypes
+			}
+			if (iNdEx + skippy) > l {
+				return io.ErrUnexpectedEOF
+			}
+			iNdEx += skippy
+		}
+	}
+
+	if iNdEx > l {
+		return io.ErrUnexpectedEOF
+	}
+	return nil
+}
 func skipTypes(dAtA []byte) (n int, err error) {
 	l := len(dAtA)
 	iNdEx := 0
diff --git a/proto/tendermint/rpc/grpc/types.proto b/proto/tendermint/rpc/grpc/types.proto
index f6886a6586..4df6809298 100644
--- a/proto/tendermint/rpc/grpc/types.proto
+++ b/proto/tendermint/rpc/grpc/types.proto
@@ -6,6 +6,7 @@ import "tendermint/abci/types.proto";
 import "tendermint/types/types.proto";
 import "tendermint/p2p/types.proto";
 import "tendermint/crypto/keys.proto";
+import "tendermint/crypto/proof.proto";
 import "tendermint/types/validator.proto";
 import "google/protobuf/timestamp.proto";
 import "gogoproto/gogo.proto";
@@ -51,6 +52,15 @@ message SubscribeNewHeightsRequest {}
 
 message StatusRequest {}
 
+message DataRootInclusionProofRequest {
+  // Height the height of block we want to prove.
+  int64 height = 1;
+  // Start the start of the data commitment range containing the block.
+  uint64 start = 2;
+  // End the end exclusive of the data commitment range containing the block.
+  uint64 end = 3;
+}
+
 //----------------------------------------
 // Response types
 
@@ -128,6 +138,10 @@ message ValidatorInfo {
   int64                       voting_power = 3;
 }
 
+message DataRootInclusionProofResponse {
+  tendermint.crypto.Proof proof = 1 [(gogoproto.nullable) = false];
+}
+
 //----------------------------------------
 // Service Definition
 
@@ -144,3 +158,10 @@ service BlockAPI {
   rpc SubscribeNewHeights(SubscribeNewHeightsRequest) returns (stream NewHeightEvent);
   rpc Status(StatusRequest) returns (StatusResponse);
 }
+
+service BlobstreamAPI {
+  // DataRootInclusionProof creates an inclusion proof for the data root of block
+  // height `height` in the set of blocks defined by `start` and `end`. The range
+  // is end exclusive.
+  rpc DataRootInclusionProof(DataRootInclusionProofRequest) returns (DataRootInclusionProofResponse);
+}
diff --git a/rpc/core/blocks.go b/rpc/core/blocks.go
index cef2d9330b..e6e3fdec34 100644
--- a/rpc/core/blocks.go
+++ b/rpc/core/blocks.go
@@ -235,6 +235,17 @@ func DataRootInclusionProof(
 	end uint64,
 ) (*ctypes.ResultDataRootInclusionProof, error) {
 	//nolint:gosec
+	proof, err := GenerateDataRootInclusionProof(height, start, end)
+	if err != nil {
+		return nil, err
+	}
+	return &ctypes.ResultDataRootInclusionProof{Proof: *proof}, nil
+}
+
+func GenerateDataRootInclusionProof(height int64, start, end uint64) (*merkle.Proof, error) {
+	if globalEnv == nil {
+		return nil, errors.New("global env is nil. this can only be called inside celestia-core")
+	}
 	err := validateDataRootInclusionProofRequest(uint64(height), start, end)
 	if err != nil {
 		return nil, err
@@ -247,7 +258,7 @@ func DataRootInclusionProof(
 	if err != nil {
 		return nil, err
 	}
-	return &ctypes.ResultDataRootInclusionProof{Proof: *proof}, nil
+	return proof, nil
 }
 
 // padBytes Pad bytes to given length
diff --git a/rpc/grpc/api.go b/rpc/grpc/api.go
index b985ef4983..2465b31c3d 100644
--- a/rpc/grpc/api.go
+++ b/rpc/grpc/api.go
@@ -416,3 +416,20 @@ func (blockAPI *BlockAPI) SubscribeNewHeights(_ *SubscribeNewHeightsRequest, str
 		}
 	}
 }
+
+type BlobstreamAPI struct{}
+
+func NewBlobstreamAPI() *BlobstreamAPI {
+	return &BlobstreamAPI{}
+}
+
+func (blockAPI *BlobstreamAPI) DataRootInclusionProof(_ context.Context, req *DataRootInclusionProofRequest) (*DataRootInclusionProofResponse, error) {
+	proof, err := core.GenerateDataRootInclusionProof(req.Height, req.Start, req.End)
+	if err != nil {
+		return nil, err
+	}
+
+	return &DataRootInclusionProofResponse{
+		Proof: *proof.ToProto(),
+	}, nil
+}
diff --git a/rpc/grpc/client_server.go b/rpc/grpc/client_server.go
index f63537fb7b..af227864e7 100644
--- a/rpc/grpc/client_server.go
+++ b/rpc/grpc/client_server.go
@@ -23,13 +23,15 @@ type Config struct {
 func StartGRPCServer(ln net.Listener) error {
 	grpcServer := grpc.NewServer()
 	RegisterBroadcastAPIServer(grpcServer, &broadcastAPI{})
-	api := NewBlockAPI()
-	RegisterBlockAPIServer(grpcServer, api)
+	blockAPI := NewBlockAPI()
+	RegisterBlockAPIServer(grpcServer, blockAPI)
+	blobstreamAPI := NewBlobstreamAPI()
+	RegisterBlobstreamAPIServer(grpcServer, blobstreamAPI)
 	errCh := make(chan error, 2)
 	ctx, cancel := context.WithCancel(context.Background())
 	defer cancel()
 	go func() {
-		errCh <- api.StartNewBlockEventListener(ctx)
+		errCh <- blockAPI.StartNewBlockEventListener(ctx)
 	}()
 	go func() {
 		errCh <- grpcServer.Serve(ln)
@@ -40,7 +42,7 @@ func StartGRPCServer(ln net.Listener) error {
 		if err != nil {
 			core.GetEnvironment().Logger.Error("error stopping block api", "err", err)
 		}
-	}(api, ctx)
+	}(blockAPI, ctx)
 	// blocks until one errors or returns nil
 	return <-errCh
 }
@@ -75,3 +77,20 @@ func StartBlockAPIGRPCClient(protoAddr string, opts ...grpc.DialOption) (BlockAP
 func dialerFunc(ctx context.Context, addr string) (net.Conn, error) {
 	return cmtnet.Connect(addr)
 }
+
+// StartBlobstreamAPIGRPCClient dials the gRPC server using protoAddr and returns a new
+// BlobstreamAPIClient.
+func StartBlobstreamAPIGRPCClient(protoAddr string, opts ...grpc.DialOption) (BlobstreamAPIClient, error) {
+	if len(opts) == 0 {
+		opts = append(opts, grpc.WithTransportCredentials(insecure.NewCredentials()))
+	}
+	opts = append(opts, grpc.WithContextDialer(dialerFunc))
+	conn, err := grpc.Dial( //nolint:staticcheck
+		protoAddr,
+		opts...,
+	)
+	if err != nil {
+		return nil, err
+	}
+	return NewBlobstreamAPIClient(conn), nil
+}
diff --git a/rpc/grpc/grpc_test.go b/rpc/grpc/grpc_test.go
index b76d935fb9..13ba0f90de 100644
--- a/rpc/grpc/grpc_test.go
+++ b/rpc/grpc/grpc_test.go
@@ -392,6 +392,26 @@ func TestBlockQuery_Streaming(t *testing.T) {
 	assert.NotEqual(t, part2.BlockPart.Proof, crypto.Proof{})
 }
 
+func TestBlobstreamAPI(t *testing.T) {
+	client, err := rpctest.GetBlobstreamAPIClient()
+	require.NoError(t, err)
+	waitForHeight(t, 10)
+
+	resp, err := client.DataRootInclusionProof(
+		context.Background(),
+		&core_grpc.DataRootInclusionProofRequest{
+			Height: 6,
+			Start:  1,
+			End:    10,
+		},
+	)
+	assert.NoError(t, err)
+	assert.NotNil(t, resp)
+	assert.Equal(t, int64(9), resp.Proof.Total)
+	assert.Equal(t, int64(5), resp.Proof.Index)
+	assert.Equal(t, 4, len(resp.Proof.Aunts))
+}
+
 func waitForHeight(t *testing.T, height int64) {
 	rpcAddr := rpctest.GetConfig().RPC.ListenAddress
 	c, err := rpchttp.New(rpcAddr, "/websocket")
diff --git a/rpc/grpc/types.pb.go b/rpc/grpc/types.pb.go
index 9f50d2cd15..78e8a40022 100644
--- a/rpc/grpc/types.pb.go
+++ b/rpc/grpc/types.pb.go
@@ -389,6 +389,69 @@ func (m *StatusRequest) XXX_DiscardUnknown() {
 
 var xxx_messageInfo_StatusRequest proto.InternalMessageInfo
 
+type DataRootInclusionProofRequest struct {
+	// Height the height of block we want to prove.
+	Height int64 `protobuf:"varint,1,opt,name=height,proto3" json:"height,omitempty"`
+	// Start the start of the data commitment range containing the block.
+	Start uint64 `protobuf:"varint,2,opt,name=start,proto3" json:"start,omitempty"`
+	// End the end exclusive of the data commitment range containing the block.
+	End uint64 `protobuf:"varint,3,opt,name=end,proto3" json:"end,omitempty"`
+}
+
+func (m *DataRootInclusionProofRequest) Reset()         { *m = DataRootInclusionProofRequest{} }
+func (m *DataRootInclusionProofRequest) String() string { return proto.CompactTextString(m) }
+func (*DataRootInclusionProofRequest) ProtoMessage()    {}
+func (*DataRootInclusionProofRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_0ffff5682c662b95, []int{8}
+}
+func (m *DataRootInclusionProofRequest) XXX_Unmarshal(b []byte) error {
+	return m.Unmarshal(b)
+}
+func (m *DataRootInclusionProofRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	if deterministic {
+		return xxx_messageInfo_DataRootInclusionProofRequest.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 *DataRootInclusionProofRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DataRootInclusionProofRequest.Merge(m, src)
+}
+func (m *DataRootInclusionProofRequest) XXX_Size() int {
+	return m.Size()
+}
+func (m *DataRootInclusionProofRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_DataRootInclusionProofRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DataRootInclusionProofRequest proto.InternalMessageInfo
+
+func (m *DataRootInclusionProofRequest) GetHeight() int64 {
+	if m != nil {
+		return m.Height
+	}
+	return 0
+}
+
+func (m *DataRootInclusionProofRequest) GetStart() uint64 {
+	if m != nil {
+		return m.Start
+	}
+	return 0
+}
+
+func (m *DataRootInclusionProofRequest) GetEnd() uint64 {
+	if m != nil {
+		return m.End
+	}
+	return 0
+}
+
 type ResponsePing struct {
 }
 
@@ -396,7 +459,7 @@ func (m *ResponsePing) Reset()         { *m = ResponsePing{} }
 func (m *ResponsePing) String() string { return proto.CompactTextString(m) }
 func (*ResponsePing) ProtoMessage()    {}
 func (*ResponsePing) Descriptor() ([]byte, []int) {
-	return fileDescriptor_0ffff5682c662b95, []int{8}
+	return fileDescriptor_0ffff5682c662b95, []int{9}
 }
 func (m *ResponsePing) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -434,7 +497,7 @@ func (m *ResponseBroadcastTx) Reset()         { *m = ResponseBroadcastTx{} }
 func (m *ResponseBroadcastTx) String() string { return proto.CompactTextString(m) }
 func (*ResponseBroadcastTx) ProtoMessage()    {}
 func (*ResponseBroadcastTx) Descriptor() ([]byte, []int) {
-	return fileDescriptor_0ffff5682c662b95, []int{9}
+	return fileDescriptor_0ffff5682c662b95, []int{10}
 }
 func (m *ResponseBroadcastTx) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -492,7 +555,7 @@ func (m *StreamedBlockByHashResponse) Reset()         { *m = StreamedBlockByHash
 func (m *StreamedBlockByHashResponse) String() string { return proto.CompactTextString(m) }
 func (*StreamedBlockByHashResponse) ProtoMessage()    {}
 func (*StreamedBlockByHashResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_0ffff5682c662b95, []int{10}
+	return fileDescriptor_0ffff5682c662b95, []int{11}
 }
 func (m *StreamedBlockByHashResponse) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -564,7 +627,7 @@ func (m *StreamedBlockByHeightResponse) Reset()         { *m = StreamedBlockByHe
 func (m *StreamedBlockByHeightResponse) String() string { return proto.CompactTextString(m) }
 func (*StreamedBlockByHeightResponse) ProtoMessage()    {}
 func (*StreamedBlockByHeightResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_0ffff5682c662b95, []int{11}
+	return fileDescriptor_0ffff5682c662b95, []int{12}
 }
 func (m *StreamedBlockByHeightResponse) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -629,7 +692,7 @@ func (m *CommitResponse) Reset()         { *m = CommitResponse{} }
 func (m *CommitResponse) String() string { return proto.CompactTextString(m) }
 func (*CommitResponse) ProtoMessage()    {}
 func (*CommitResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_0ffff5682c662b95, []int{12}
+	return fileDescriptor_0ffff5682c662b95, []int{13}
 }
 func (m *CommitResponse) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -677,7 +740,7 @@ func (m *ValidatorSetResponse) Reset()         { *m = ValidatorSetResponse{} }
 func (m *ValidatorSetResponse) String() string { return proto.CompactTextString(m) }
 func (*ValidatorSetResponse) ProtoMessage()    {}
 func (*ValidatorSetResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_0ffff5682c662b95, []int{13}
+	return fileDescriptor_0ffff5682c662b95, []int{14}
 }
 func (m *ValidatorSetResponse) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -729,7 +792,7 @@ func (m *NewHeightEvent) Reset()         { *m = NewHeightEvent{} }
 func (m *NewHeightEvent) String() string { return proto.CompactTextString(m) }
 func (*NewHeightEvent) ProtoMessage()    {}
 func (*NewHeightEvent) Descriptor() ([]byte, []int) {
-	return fileDescriptor_0ffff5682c662b95, []int{14}
+	return fileDescriptor_0ffff5682c662b95, []int{15}
 }
 func (m *NewHeightEvent) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -782,7 +845,7 @@ func (m *StatusResponse) Reset()         { *m = StatusResponse{} }
 func (m *StatusResponse) String() string { return proto.CompactTextString(m) }
 func (*StatusResponse) ProtoMessage()    {}
 func (*StatusResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_0ffff5682c662b95, []int{15}
+	return fileDescriptor_0ffff5682c662b95, []int{16}
 }
 func (m *StatusResponse) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -848,7 +911,7 @@ func (m *SyncInfo) Reset()         { *m = SyncInfo{} }
 func (m *SyncInfo) String() string { return proto.CompactTextString(m) }
 func (*SyncInfo) ProtoMessage()    {}
 func (*SyncInfo) Descriptor() ([]byte, []int) {
-	return fileDescriptor_0ffff5682c662b95, []int{16}
+	return fileDescriptor_0ffff5682c662b95, []int{17}
 }
 func (m *SyncInfo) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -950,7 +1013,7 @@ func (m *ValidatorInfo) Reset()         { *m = ValidatorInfo{} }
 func (m *ValidatorInfo) String() string { return proto.CompactTextString(m) }
 func (*ValidatorInfo) ProtoMessage()    {}
 func (*ValidatorInfo) Descriptor() ([]byte, []int) {
-	return fileDescriptor_0ffff5682c662b95, []int{17}
+	return fileDescriptor_0ffff5682c662b95, []int{18}
 }
 func (m *ValidatorInfo) XXX_Unmarshal(b []byte) error {
 	return m.Unmarshal(b)
@@ -1000,6 +1063,50 @@ func (m *ValidatorInfo) GetVotingPower() int64 {
 	return 0
 }
 
+type DataRootInclusionProofResponse struct {
+	Proof crypto.Proof `protobuf:"bytes,1,opt,name=proof,proto3" json:"proof"`
+}
+
+func (m *DataRootInclusionProofResponse) Reset()         { *m = DataRootInclusionProofResponse{} }
+func (m *DataRootInclusionProofResponse) String() string { return proto.CompactTextString(m) }
+func (*DataRootInclusionProofResponse) ProtoMessage()    {}
+func (*DataRootInclusionProofResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_0ffff5682c662b95, []int{19}
+}
+func (m *DataRootInclusionProofResponse) XXX_Unmarshal(b []byte) error {
+	return m.Unmarshal(b)
+}
+func (m *DataRootInclusionProofResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	if deterministic {
+		return xxx_messageInfo_DataRootInclusionProofResponse.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 *DataRootInclusionProofResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DataRootInclusionProofResponse.Merge(m, src)
+}
+func (m *DataRootInclusionProofResponse) XXX_Size() int {
+	return m.Size()
+}
+func (m *DataRootInclusionProofResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_DataRootInclusionProofResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DataRootInclusionProofResponse proto.InternalMessageInfo
+
+func (m *DataRootInclusionProofResponse) GetProof() crypto.Proof {
+	if m != nil {
+		return m.Proof
+	}
+	return crypto.Proof{}
+}
+
 func init() {
 	proto.RegisterType((*RequestPing)(nil), "tendermint.rpc.grpc.RequestPing")
 	proto.RegisterType((*RequestBroadcastTx)(nil), "tendermint.rpc.grpc.RequestBroadcastTx")
@@ -1009,6 +1116,7 @@ func init() {
 	proto.RegisterType((*ValidatorSetRequest)(nil), "tendermint.rpc.grpc.ValidatorSetRequest")
 	proto.RegisterType((*SubscribeNewHeightsRequest)(nil), "tendermint.rpc.grpc.SubscribeNewHeightsRequest")
 	proto.RegisterType((*StatusRequest)(nil), "tendermint.rpc.grpc.StatusRequest")
+	proto.RegisterType((*DataRootInclusionProofRequest)(nil), "tendermint.rpc.grpc.DataRootInclusionProofRequest")
 	proto.RegisterType((*ResponsePing)(nil), "tendermint.rpc.grpc.ResponsePing")
 	proto.RegisterType((*ResponseBroadcastTx)(nil), "tendermint.rpc.grpc.ResponseBroadcastTx")
 	proto.RegisterType((*StreamedBlockByHashResponse)(nil), "tendermint.rpc.grpc.StreamedBlockByHashResponse")
@@ -1019,81 +1127,89 @@ func init() {
 	proto.RegisterType((*StatusResponse)(nil), "tendermint.rpc.grpc.StatusResponse")
 	proto.RegisterType((*SyncInfo)(nil), "tendermint.rpc.grpc.SyncInfo")
 	proto.RegisterType((*ValidatorInfo)(nil), "tendermint.rpc.grpc.ValidatorInfo")
+	proto.RegisterType((*DataRootInclusionProofResponse)(nil), "tendermint.rpc.grpc.DataRootInclusionProofResponse")
 }
 
 func init() { proto.RegisterFile("tendermint/rpc/grpc/types.proto", fileDescriptor_0ffff5682c662b95) }
 
 var fileDescriptor_0ffff5682c662b95 = []byte{
-	// 1102 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x57, 0x4f, 0x6f, 0x1b, 0x45,
-	0x14, 0xcf, 0x3a, 0xa9, 0xe3, 0x3c, 0xff, 0xa9, 0x32, 0x0e, 0xc5, 0xda, 0xa6, 0x76, 0xba, 0x20,
-	0x9a, 0x56, 0x62, 0x1d, 0x19, 0xf5, 0x42, 0x2b, 0xa4, 0x38, 0x41, 0x22, 0x4a, 0x55, 0x19, 0x27,
-	0x70, 0xe0, 0x62, 0xc6, 0xeb, 0x89, 0xbd, 0xc4, 0xde, 0x19, 0x76, 0xc6, 0x6e, 0x7c, 0xe6, 0x0b,
-	0xf4, 0xc2, 0xc7, 0xe1, 0xde, 0x63, 0x2f, 0x48, 0x9c, 0x00, 0x25, 0x08, 0xbe, 0x06, 0xda, 0x99,
-	0x59, 0x7b, 0x36, 0xf6, 0xa6, 0x81, 0x63, 0x2f, 0xd6, 0x9b, 0x37, 0xef, 0xbd, 0xfd, 0xbd, 0x37,
-	0xef, 0x9f, 0xa1, 0x26, 0x48, 0xd0, 0x23, 0xe1, 0xc8, 0x0f, 0x44, 0x3d, 0x64, 0x5e, 0xbd, 0x1f,
-	0xfd, 0x88, 0x29, 0x23, 0xdc, 0x65, 0x21, 0x15, 0x14, 0x95, 0xe7, 0x02, 0x6e, 0xc8, 0x3c, 0x37,
-	0x12, 0xb0, 0xef, 0x1b, 0x5a, 0xb8, 0xeb, 0xf9, 0xa6, 0x86, 0xbd, 0x6d, 0x5c, 0x4a, 0x7e, 0xe2,
-	0xd6, 0x36, 0x6e, 0x59, 0x83, 0xa5, 0x6a, 0x7a, 0xe1, 0x94, 0x09, 0x5a, 0x3f, 0x27, 0xd3, 0xf8,
-	0x76, 0x67, 0xc1, 0xee, 0x04, 0x0f, 0xfd, 0x1e, 0x16, 0x34, 0xd4, 0x12, 0xb5, 0x3e, 0xa5, 0xfd,
-	0x21, 0xa9, 0xcb, 0x53, 0x77, 0x7c, 0x56, 0x17, 0xfe, 0x88, 0x70, 0x81, 0x47, 0x4c, 0x0b, 0x6c,
-	0xf5, 0x69, 0x9f, 0x4a, 0xb2, 0x1e, 0x51, 0x8a, 0xeb, 0x14, 0x21, 0xdf, 0x26, 0x3f, 0x8e, 0x09,
-	0x17, 0x2d, 0x3f, 0xe8, 0x3b, 0x1f, 0x03, 0xd2, 0xc7, 0x66, 0x48, 0x71, 0xcf, 0xc3, 0x5c, 0x9c,
-	0x5e, 0xa0, 0x12, 0x64, 0xc4, 0x45, 0xc5, 0xda, 0xb1, 0x76, 0x0b, 0xed, 0x8c, 0xb8, 0x70, 0xbe,
-	0x00, 0xd4, 0x1c, 0x52, 0xef, 0xbc, 0x39, 0xfd, 0x0a, 0xf3, 0x81, 0x56, 0x40, 0x08, 0xd6, 0x06,
-	0x98, 0x0f, 0xb4, 0x9c, 0xa4, 0xd1, 0x16, 0xdc, 0x61, 0x21, 0x9d, 0x90, 0x4a, 0x66, 0xc7, 0xda,
-	0xcd, 0xb5, 0xd5, 0xc1, 0x39, 0x84, 0xad, 0x58, 0x9f, 0xf8, 0xfd, 0x81, 0x88, 0x2d, 0xdc, 0x83,
-	0xec, 0x40, 0x32, 0xa4, 0x8d, 0xd5, 0xb6, 0x3e, 0xa5, 0x58, 0x79, 0x04, 0xc5, 0x03, 0x3a, 0x1a,
-	0xf9, 0xef, 0x52, 0x77, 0x3e, 0x85, 0xf2, 0xb7, 0x71, 0xb4, 0x4e, 0xc8, 0x3b, 0xc5, 0xb7, 0xc1,
-	0x3e, 0x19, 0x77, 0xb9, 0x17, 0xfa, 0x5d, 0xf2, 0x92, 0xbc, 0x52, 0x10, 0xb9, 0xd6, 0x72, 0xee,
-	0x42, 0xf1, 0x44, 0x60, 0x31, 0x9e, 0x31, 0x4a, 0x50, 0x68, 0x13, 0xce, 0x68, 0xc0, 0x89, 0x0c,
-	0xe1, 0xcf, 0x16, 0x94, 0x63, 0x86, 0x19, 0xc4, 0x67, 0x90, 0xf3, 0x06, 0xc4, 0x3b, 0xef, 0xe8,
-	0x50, 0xe6, 0x1b, 0x3b, 0xae, 0x91, 0x5f, 0x51, 0x2a, 0xb9, 0xb1, 0xde, 0x41, 0x24, 0x78, 0x7a,
-	0xd1, 0x5e, 0xf7, 0x14, 0x81, 0xf6, 0x01, 0x7a, 0x64, 0xe8, 0x4f, 0x48, 0x18, 0xa9, 0x67, 0xa4,
-	0xba, 0x93, 0xaa, 0x7e, 0xa8, 0x44, 0x4f, 0x2f, 0xda, 0x1b, 0xbd, 0x98, 0x74, 0xfe, 0xb2, 0xe0,
-	0xfe, 0x89, 0x08, 0x09, 0x1e, 0x91, 0x5e, 0xe2, 0xf5, 0x94, 0x0e, 0x7a, 0x0a, 0xd0, 0x8d, 0xd8,
-	0x1d, 0x86, 0x43, 0xa1, 0x11, 0xde, 0x33, 0x3f, 0xa1, 0xb2, 0xb5, 0x85, 0x43, 0xd1, 0xde, 0x90,
-	0x92, 0x11, 0x89, 0xf6, 0x20, 0xeb, 0xc9, 0x57, 0xd0, 0xa8, 0x2a, 0x8b, 0x2a, 0xfa, 0x95, 0xb4,
-	0x1c, 0x3a, 0x80, 0xe2, 0x2c, 0x79, 0x3b, 0x9c, 0x88, 0xca, 0xaa, 0x54, 0xac, 0x2e, 0x2a, 0x26,
-	0x5e, 0xad, 0x30, 0x31, 0x4e, 0xe8, 0x43, 0x58, 0xf7, 0x79, 0x67, 0x88, 0xb9, 0xa8, 0xac, 0xc9,
-	0xa4, 0xc8, 0xfa, 0xfc, 0x05, 0xe6, 0xc2, 0xf9, 0xdb, 0x82, 0x07, 0xd7, 0xdd, 0xd4, 0x49, 0xf6,
-	0x7e, 0x39, 0xda, 0x84, 0x52, 0x9c, 0xfe, 0xda, 0xb1, 0x39, 0x42, 0xeb, 0x76, 0x08, 0x1d, 0x0e,
-	0x5b, 0xc9, 0xca, 0xd0, 0x96, 0x16, 0x90, 0x5b, 0xff, 0x03, 0xf9, 0xbc, 0xbe, 0x32, 0x89, 0xfa,
-	0x7a, 0x0e, 0xa5, 0x59, 0x59, 0x7d, 0x39, 0x21, 0x41, 0x7a, 0xdd, 0xc7, 0x1d, 0x25, 0x33, 0xef,
-	0x28, 0xce, 0xaf, 0x16, 0x94, 0xe2, 0x02, 0xd4, 0x68, 0x9f, 0xc3, 0x46, 0x40, 0x7b, 0xa4, 0xe3,
-	0x07, 0x67, 0x54, 0x23, 0xad, 0x99, 0x48, 0x59, 0x83, 0xb9, 0x87, 0xe4, 0x0c, 0x8f, 0x87, 0xe2,
-	0x25, 0xed, 0x91, 0xa3, 0xe0, 0x8c, 0xb6, 0x73, 0x81, 0xa6, 0xd0, 0xe7, 0xb0, 0xc1, 0xa7, 0x81,
-	0xa7, 0xb4, 0xd5, 0xd3, 0x3e, 0x70, 0x97, 0x34, 0x7e, 0xf7, 0x64, 0x1a, 0x78, 0x4a, 0x97, 0x6b,
-	0x0a, 0x1d, 0x41, 0x69, 0x1e, 0x27, 0x69, 0x60, 0x75, 0xb1, 0x34, 0x67, 0x06, 0x66, 0xb1, 0x92,
-	0x56, 0xe6, 0x11, 0x8e, 0x8e, 0xce, 0x3f, 0xab, 0x90, 0x8b, 0xbf, 0x80, 0x9e, 0xc0, 0xe6, 0x10,
-	0x0b, 0xc2, 0x45, 0x47, 0x65, 0xaa, 0xd1, 0x57, 0xef, 0xaa, 0x0b, 0x99, 0xda, 0x51, 0xfd, 0xa2,
-	0x4f, 0x40, 0xb3, 0x3a, 0x98, 0xb1, 0x8e, 0x11, 0xaf, 0xa2, 0x62, 0xef, 0x33, 0x26, 0xe5, 0x5c,
-	0x28, 0x27, 0x6d, 0xaa, 0x88, 0xaf, 0xca, 0x88, 0x6f, 0x9a, 0x56, 0x55, 0xf0, 0x5b, 0xd7, 0x30,
-	0x44, 0xf3, 0x44, 0xa6, 0x60, 0xbe, 0x61, 0xbb, 0x6a, 0xd8, 0xb8, 0xf1, 0xb0, 0x71, 0x4f, 0xe3,
-	0x61, 0xd3, 0xcc, 0xbd, 0xf9, 0xbd, 0xb6, 0xf2, 0xfa, 0x8f, 0x9a, 0x95, 0x40, 0x1a, 0xdd, 0x47,
-	0x08, 0x08, 0x0e, 0x87, 0xfe, 0x35, 0xbf, 0xee, 0x48, 0xb4, 0x9b, 0xf1, 0xd5, 0xdc, 0xb3, 0x27,
-	0x30, 0x63, 0xce, 0x7d, 0xcb, 0xaa, 0x28, 0xc4, 0x17, 0xb1, 0x77, 0x0d, 0xf8, 0xe0, 0xba, 0x6d,
-	0xe5, 0xdf, 0xba, 0xf4, 0xaf, 0x9c, 0xb4, 0xae, 0x3c, 0x3c, 0x5d, 0xc0, 0x23, 0x7d, 0xcc, 0xfd,
-	0x07, 0x1f, 0x93, 0xa8, 0xa5, 0x97, 0x35, 0xc8, 0x7b, 0x58, 0x78, 0x03, 0x3f, 0xe8, 0x77, 0xc6,
-	0xac, 0xb2, 0x21, 0x8b, 0x16, 0x62, 0xd6, 0x37, 0xcc, 0xf9, 0xc9, 0x82, 0x62, 0x22, 0x15, 0x50,
-	0x05, 0xd6, 0x71, 0xaf, 0x17, 0x12, 0xce, 0xf5, 0x23, 0xc7, 0x47, 0xf4, 0x14, 0xd6, 0xd9, 0xb8,
-	0xdb, 0x39, 0x27, 0x53, 0x9d, 0x9a, 0xdb, 0x66, 0x66, 0xa9, 0x3d, 0xc1, 0x6d, 0x8d, 0xbb, 0x43,
-	0xdf, 0x3b, 0x26, 0xd3, 0x76, 0x96, 0x8d, 0xbb, 0xc7, 0x64, 0x8a, 0x1e, 0x42, 0x61, 0x42, 0x45,
-	0x84, 0x80, 0xd1, 0x57, 0x24, 0xd4, 0x8f, 0x9c, 0x57, 0xbc, 0x56, 0xc4, 0x6a, 0xfc, 0x62, 0x41,
-	0x61, 0x36, 0x9e, 0xf6, 0x5b, 0x47, 0xe8, 0x18, 0xd6, 0xa2, 0xf9, 0x85, 0x76, 0x96, 0xe6, 0xae,
-	0xb1, 0x24, 0xd8, 0x0f, 0x53, 0x24, 0xe6, 0x43, 0x10, 0x7d, 0x0f, 0x79, 0x73, 0xf6, 0x3d, 0xba,
-	0xc9, 0xa6, 0x21, 0x68, 0xef, 0xde, 0x68, 0xda, 0x90, 0x6c, 0x5c, 0xae, 0x41, 0x4e, 0x06, 0x3d,
-	0xc2, 0xfe, 0x03, 0xe4, 0x8d, 0x91, 0x96, 0xf2, 0xb9, 0xc5, 0x95, 0xc5, 0xde, 0x5b, 0x5e, 0xe8,
-	0xe9, 0x53, 0x72, 0xcf, 0x42, 0x0c, 0x8a, 0x89, 0xb9, 0x82, 0x1e, 0xdf, 0xf8, 0x35, 0x73, 0xc1,
-	0xb1, 0x1b, 0xb7, 0xfa, 0x5e, 0x62, 0x5c, 0xed, 0x59, 0xe8, 0x6b, 0xc8, 0xaa, 0xbe, 0x8d, 0x96,
-	0xf7, 0x95, 0xc4, 0x16, 0x64, 0x7f, 0x74, 0xa3, 0x8c, 0x6e, 0x99, 0x1e, 0x14, 0xcc, 0xce, 0x8d,
-	0x76, 0x6f, 0x6e, 0x58, 0xf3, 0xad, 0xc9, 0x7e, 0x7c, 0x0b, 0x49, 0xfd, 0x91, 0x11, 0x94, 0x97,
-	0x2c, 0x52, 0xa8, 0xbe, 0x3c, 0x08, 0xa9, 0x2b, 0x57, 0x8a, 0x47, 0xc9, 0x19, 0xa2, 0xc2, 0xa4,
-	0x06, 0x43, 0x4a, 0x98, 0x12, 0x6b, 0x5b, 0x8a, 0xd1, 0xe4, 0x64, 0x69, 0xbe, 0x78, 0x73, 0x59,
-	0xb5, 0xde, 0x5e, 0x56, 0xad, 0x3f, 0x2f, 0xab, 0xd6, 0xeb, 0xab, 0xea, 0xca, 0xdb, 0xab, 0xea,
-	0xca, 0x6f, 0x57, 0xd5, 0x95, 0xef, 0x1a, 0x7d, 0x5f, 0x0c, 0xc6, 0x5d, 0xd7, 0xa3, 0xa3, 0xba,
-	0xb9, 0x9b, 0x2f, 0xfe, 0xa3, 0x78, 0xe6, 0xd1, 0x90, 0x44, 0x44, 0x37, 0x2b, 0x5b, 0xc9, 0x67,
-	0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0xe7, 0x4a, 0xdc, 0x8a, 0x78, 0x0c, 0x00, 0x00,
+	// 1205 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x57, 0x4b, 0x6f, 0x1b, 0x45,
+	0x1c, 0xcf, 0xc6, 0xae, 0xe3, 0xfc, 0xfd, 0x28, 0x1d, 0x87, 0x62, 0x6d, 0x1b, 0x3b, 0x5d, 0x10,
+	0x4d, 0x2b, 0xb1, 0x8e, 0x5c, 0x7a, 0xa1, 0x15, 0x52, 0xdd, 0x20, 0x11, 0xb5, 0xaa, 0xcc, 0x26,
+	0xf4, 0xc0, 0xc5, 0xac, 0xd7, 0x63, 0x7b, 0x89, 0xbd, 0x33, 0xec, 0x8c, 0xdd, 0xf8, 0x88, 0xf8,
+	0x02, 0x95, 0x10, 0x1f, 0x87, 0x7b, 0x8f, 0xbd, 0x20, 0x71, 0x02, 0x94, 0x22, 0xf8, 0x1a, 0x68,
+	0x1e, 0x6b, 0xef, 0xc6, 0x5e, 0x37, 0xe5, 0xc8, 0x65, 0x35, 0xf3, 0x7f, 0xcd, 0xff, 0x39, 0xbf,
+	0x59, 0xa8, 0x73, 0x1c, 0xf4, 0x70, 0x38, 0xf6, 0x03, 0xde, 0x08, 0xa9, 0xd7, 0x18, 0x88, 0x0f,
+	0x9f, 0x51, 0xcc, 0x6c, 0x1a, 0x12, 0x4e, 0x50, 0x65, 0x21, 0x60, 0x87, 0xd4, 0xb3, 0x85, 0x80,
+	0x79, 0x23, 0xa6, 0xe5, 0x76, 0x3d, 0x3f, 0xae, 0x61, 0xde, 0x8c, 0x31, 0x25, 0x3d, 0xc1, 0x35,
+	0x63, 0x5c, 0xda, 0xa4, 0xa9, 0x9a, 0x5e, 0x38, 0xa3, 0x9c, 0x34, 0x4e, 0xf1, 0x2c, 0xe2, 0xee,
+	0x2e, 0x73, 0x69, 0x48, 0x48, 0x5f, 0xb3, 0xf7, 0x96, 0x8e, 0x9d, 0xba, 0x23, 0xbf, 0xe7, 0x72,
+	0x12, 0x6a, 0x89, 0xfa, 0x80, 0x90, 0xc1, 0x08, 0x37, 0xe4, 0xae, 0x3b, 0xe9, 0x37, 0xb8, 0x3f,
+	0xc6, 0x8c, 0xbb, 0x63, 0xaa, 0x05, 0x76, 0x06, 0x64, 0x40, 0xe4, 0xb2, 0x21, 0x56, 0x8a, 0x6a,
+	0x95, 0xa0, 0xe0, 0xe0, 0xef, 0x27, 0x98, 0xf1, 0xb6, 0x1f, 0x0c, 0xac, 0x8f, 0x00, 0xe9, 0x6d,
+	0x2b, 0x24, 0x6e, 0xcf, 0x73, 0x19, 0x3f, 0x39, 0x43, 0x65, 0xd8, 0xe4, 0x67, 0x55, 0x63, 0xcf,
+	0xd8, 0x2f, 0x3a, 0x9b, 0xfc, 0xcc, 0xfa, 0x1c, 0x50, 0x6b, 0x44, 0xbc, 0xd3, 0xd6, 0xec, 0x4b,
+	0x97, 0x0d, 0xb5, 0x02, 0x42, 0x90, 0x1d, 0xba, 0x6c, 0xa8, 0xe5, 0xe4, 0x1a, 0xed, 0xc0, 0x15,
+	0x1a, 0x92, 0x29, 0xae, 0x6e, 0xee, 0x19, 0xfb, 0x79, 0x47, 0x6d, 0xac, 0x43, 0xd8, 0x89, 0xf4,
+	0xb1, 0x3f, 0x18, 0xf2, 0xc8, 0xc2, 0x75, 0xc8, 0x0d, 0x25, 0x41, 0xda, 0xc8, 0x38, 0x7a, 0x97,
+	0x62, 0xe5, 0x36, 0x94, 0x1e, 0x93, 0xf1, 0xd8, 0x7f, 0x9b, 0xba, 0xf5, 0x09, 0x54, 0x9e, 0x47,
+	0xd9, 0x3a, 0xc6, 0x6f, 0x15, 0xbf, 0x09, 0xe6, 0xf1, 0xa4, 0xcb, 0xbc, 0xd0, 0xef, 0xe2, 0x67,
+	0xf8, 0x85, 0x72, 0x91, 0x69, 0x2d, 0xeb, 0x2a, 0x94, 0x8e, 0xb9, 0xcb, 0x27, 0x73, 0x42, 0x07,
+	0x76, 0x0f, 0x5d, 0xee, 0x3a, 0x84, 0xf0, 0xa3, 0xc0, 0x1b, 0x4d, 0x98, 0x4f, 0x82, 0xb6, 0x28,
+	0xdd, 0x25, 0xa2, 0x62, 0xdc, 0x0d, 0xb9, 0x8c, 0x2a, 0xeb, 0xa8, 0x0d, 0x7a, 0x0f, 0x32, 0x38,
+	0xe8, 0x55, 0x33, 0x92, 0x26, 0x96, 0x56, 0x19, 0x8a, 0x0e, 0x66, 0x94, 0x04, 0x0c, 0xcb, 0x1a,
+	0xfd, 0x6c, 0x40, 0x25, 0x22, 0xc4, 0xab, 0xf4, 0x00, 0xf2, 0xde, 0x10, 0x7b, 0xa7, 0x1d, 0x5d,
+	0xab, 0x42, 0x73, 0xcf, 0x8e, 0xf5, 0xb7, 0x68, 0x65, 0x3b, 0xd2, 0x7b, 0x2c, 0x04, 0x4f, 0xce,
+	0x9c, 0x2d, 0x4f, 0x2d, 0xd0, 0x23, 0x80, 0x1e, 0x1e, 0xf9, 0x53, 0x1c, 0x0a, 0xf5, 0x4d, 0xa9,
+	0x6e, 0xa5, 0xaa, 0x1f, 0x2a, 0xd1, 0x93, 0x33, 0x67, 0xbb, 0x17, 0x2d, 0xad, 0xbf, 0x0c, 0xb8,
+	0x71, 0xcc, 0x43, 0xec, 0x8e, 0x71, 0x2f, 0xd1, 0x1e, 0x4a, 0x07, 0xdd, 0x07, 0xe8, 0x0a, 0x72,
+	0x87, 0x8a, 0xa0, 0x95, 0x87, 0xd7, 0xe3, 0x47, 0xa8, 0x69, 0x69, 0xbb, 0x21, 0x77, 0xb6, 0xa5,
+	0xa4, 0x58, 0xa2, 0x03, 0xc8, 0x79, 0xb2, 0xcc, 0xda, 0xab, 0xea, 0xb2, 0x8a, 0x6e, 0x03, 0x2d,
+	0x87, 0x1e, 0x43, 0x69, 0x3e, 0x1d, 0x1d, 0x86, 0xb9, 0x4c, 0x66, 0xa1, 0x59, 0x5b, 0x56, 0x4c,
+	0xb4, 0x45, 0x71, 0x1a, 0xdb, 0xa1, 0x0f, 0x60, 0xcb, 0x67, 0x9d, 0x91, 0xcb, 0x78, 0x35, 0x2b,
+	0xbb, 0x2e, 0xe7, 0xb3, 0xa7, 0x2e, 0xe3, 0xd6, 0xdf, 0x06, 0xec, 0x5e, 0x0c, 0x53, 0x77, 0xf1,
+	0xff, 0x2b, 0xd0, 0x16, 0x94, 0xa3, 0xf9, 0xd2, 0x81, 0x2d, 0x3c, 0x34, 0x2e, 0xe7, 0xa1, 0xc5,
+	0x60, 0x27, 0x39, 0x7a, 0xda, 0xd2, 0x92, 0xe7, 0xc6, 0x7f, 0xf0, 0x7c, 0x31, 0x58, 0x9b, 0x89,
+	0x01, 0x7e, 0x08, 0xe5, 0xf9, 0xdc, 0x7e, 0x31, 0xc5, 0x41, 0xfa, 0x08, 0x46, 0x57, 0xd6, 0xe6,
+	0xe2, 0xca, 0xb2, 0x7e, 0x35, 0xa0, 0x1c, 0x4d, 0xb8, 0xf6, 0xf6, 0x21, 0x6c, 0x07, 0xa4, 0x87,
+	0x3b, 0x7e, 0xd0, 0x27, 0xda, 0xd3, 0x7a, 0xdc, 0x53, 0xda, 0xa4, 0xf6, 0x21, 0xee, 0xbb, 0x93,
+	0x11, 0x7f, 0x46, 0x7a, 0xf8, 0x28, 0xe8, 0x13, 0x27, 0x1f, 0xe8, 0x15, 0xfa, 0x0c, 0xb6, 0xd9,
+	0x2c, 0xf0, 0x94, 0xb6, 0x2a, 0xed, 0xae, 0xbd, 0x02, 0x78, 0xec, 0xe3, 0x59, 0xe0, 0x29, 0x5d,
+	0xa6, 0x57, 0xe8, 0x08, 0xca, 0x8b, 0x3c, 0x49, 0x03, 0x99, 0xe5, 0xd1, 0x9c, 0x1b, 0x98, 0xe7,
+	0x4a, 0x5a, 0x59, 0x64, 0x58, 0x6c, 0xad, 0x7f, 0x32, 0x90, 0x8f, 0x4e, 0x40, 0x77, 0xe1, 0xda,
+	0xc8, 0xe5, 0x98, 0xf1, 0x8e, 0xea, 0xd4, 0xd8, 0xc5, 0x7d, 0x55, 0x31, 0x64, 0x6b, 0x8b, 0xf9,
+	0x45, 0x1f, 0x83, 0x26, 0x75, 0x5c, 0x4a, 0x3b, 0xb1, 0x7c, 0x95, 0x14, 0xf9, 0x11, 0xa5, 0x52,
+	0xce, 0x86, 0x4a, 0xd2, 0xa6, 0xca, 0x78, 0x46, 0x66, 0xfc, 0x5a, 0xdc, 0xaa, 0x4a, 0x7e, 0xfb,
+	0x82, 0x0f, 0x02, 0xb0, 0x64, 0x0b, 0x16, 0x9a, 0xa6, 0xad, 0xd0, 0xcc, 0x8e, 0xd0, 0xcc, 0x3e,
+	0x89, 0xd0, 0xac, 0x95, 0x7f, 0xf5, 0x7b, 0x7d, 0xe3, 0xe5, 0x1f, 0x75, 0x23, 0xe1, 0xa9, 0xe0,
+	0x0b, 0x0f, 0xb0, 0x1b, 0x8e, 0xfc, 0x0b, 0x71, 0x5d, 0x91, 0xde, 0x5e, 0x8b, 0x58, 0x8b, 0xc8,
+	0xee, 0xc2, 0x9c, 0xb8, 0x88, 0x2d, 0xa7, 0xb2, 0x10, 0x31, 0xa2, 0xe8, 0x9a, 0xf0, 0xfe, 0x45,
+	0xdb, 0x2a, 0xbe, 0x2d, 0x19, 0x5f, 0x25, 0x69, 0x5d, 0x45, 0x78, 0xb2, 0xe4, 0x8f, 0x8c, 0x31,
+	0xff, 0x0e, 0x31, 0x26, 0xbd, 0x96, 0x51, 0xd6, 0xa1, 0xe0, 0xb9, 0xdc, 0x1b, 0xfa, 0xc1, 0xa0,
+	0x33, 0xa1, 0xd5, 0x6d, 0x39, 0xb4, 0x10, 0x91, 0xbe, 0xa6, 0xd6, 0x8f, 0x06, 0x94, 0x12, 0xad,
+	0x80, 0xaa, 0xb0, 0xe5, 0xf6, 0x7a, 0x21, 0x66, 0x4c, 0x17, 0x39, 0xda, 0xa2, 0xfb, 0xb0, 0x45,
+	0x27, 0xdd, 0xce, 0x29, 0x9e, 0xe9, 0xd6, 0xbc, 0x19, 0xef, 0x2c, 0xf5, 0x12, 0xb1, 0xdb, 0x93,
+	0xee, 0xc8, 0xf7, 0x9e, 0xe0, 0x99, 0x93, 0xa3, 0x93, 0xee, 0x13, 0x3c, 0x43, 0xb7, 0xa0, 0x38,
+	0x25, 0x5c, 0x78, 0x40, 0xc9, 0x0b, 0x1c, 0xea, 0x22, 0x17, 0x14, 0xad, 0x2d, 0x48, 0xd6, 0x73,
+	0xa8, 0xa5, 0xe1, 0xa2, 0x1e, 0xab, 0x4f, 0x25, 0xac, 0x93, 0xfe, 0xaa, 0xdb, 0x24, 0x3a, 0x59,
+	0xf0, 0x5b, 0x59, 0x91, 0x0e, 0x47, 0x09, 0x37, 0x7f, 0x31, 0xa0, 0x38, 0x87, 0xbd, 0x47, 0xed,
+	0x23, 0xf4, 0x04, 0xb2, 0x02, 0x17, 0xd1, 0xde, 0xca, 0x99, 0x88, 0xbd, 0x6e, 0xcc, 0x5b, 0x29,
+	0x12, 0x0b, 0x70, 0x45, 0xdf, 0x42, 0x21, 0x8e, 0xa9, 0xb7, 0xd7, 0xd9, 0x8c, 0x09, 0x9a, 0xfb,
+	0x6b, 0x4d, 0xc7, 0x24, 0x9b, 0xe7, 0x59, 0xc8, 0xcb, 0x62, 0x0a, 0xdf, 0xbf, 0x83, 0x42, 0x0c,
+	0x2a, 0x53, 0x8e, 0x5b, 0x7e, 0x6b, 0x99, 0x07, 0xab, 0x2f, 0x90, 0x74, 0xf4, 0x3d, 0x30, 0x10,
+	0x85, 0x52, 0x02, 0xaf, 0xd0, 0x9d, 0xb5, 0xa7, 0xc5, 0x5f, 0x66, 0x66, 0xf3, 0x52, 0xe7, 0x25,
+	0x60, 0xf0, 0xc0, 0x40, 0x5f, 0x41, 0x4e, 0xe1, 0x01, 0x5a, 0x7d, 0x5f, 0x25, 0x9e, 0x6f, 0xe6,
+	0x87, 0x6b, 0x65, 0x74, 0xcf, 0x78, 0x50, 0x8c, 0x23, 0x02, 0xda, 0x5f, 0x7f, 0x11, 0x2e, 0x9e,
+	0x7b, 0xe6, 0x9d, 0x4b, 0x48, 0xea, 0x43, 0xc6, 0x50, 0x59, 0xf1, 0x02, 0x44, 0x8d, 0xd5, 0x49,
+	0x48, 0x7d, 0x2b, 0xa6, 0x44, 0x94, 0xc4, 0x26, 0x95, 0x26, 0x05, 0x38, 0x29, 0x69, 0x4a, 0xbc,
+	0x37, 0x53, 0x8c, 0x26, 0x11, 0xab, 0xf9, 0x93, 0x21, 0x8b, 0xdd, 0x65, 0xb2, 0x42, 0xa2, 0xd3,
+	0x7e, 0x30, 0xe0, 0xfa, 0xea, 0x79, 0x44, 0xab, 0x8b, 0xbb, 0xf6, 0x51, 0x6b, 0xde, 0x7b, 0x27,
+	0x1d, 0x3d, 0x05, 0x4f, 0x5f, 0x9d, 0xd7, 0x8c, 0xd7, 0xe7, 0x35, 0xe3, 0xcf, 0xf3, 0x9a, 0xf1,
+	0xf2, 0x4d, 0x6d, 0xe3, 0xf5, 0x9b, 0xda, 0xc6, 0x6f, 0x6f, 0x6a, 0x1b, 0xdf, 0x34, 0x07, 0x3e,
+	0x1f, 0x4e, 0xba, 0xb6, 0x47, 0xc6, 0x8d, 0xf8, 0xaf, 0xce, 0xf2, 0xff, 0xdb, 0x03, 0x8f, 0x84,
+	0x58, 0x2c, 0xba, 0x39, 0x79, 0x71, 0xde, 0xfb, 0x37, 0x00, 0x00, 0xff, 0xff, 0x48, 0xde, 0xac,
+	0x0d, 0xe6, 0x0d, 0x00, 0x00,
 }
 
 // Reference imports to suppress errors if they are not otherwise used.
@@ -1546,6 +1662,84 @@ var _BlockAPI_serviceDesc = grpc.ServiceDesc{
 	Metadata: "tendermint/rpc/grpc/types.proto",
 }
 
+// BlobstreamAPIClient is the client API for BlobstreamAPI service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type BlobstreamAPIClient interface {
+	// DataRootInclusionProof creates an inclusion proof for the data root of block
+	// height `height` in the set of blocks defined by `start` and `end`. The range
+	// is end exclusive.
+	DataRootInclusionProof(ctx context.Context, in *DataRootInclusionProofRequest, opts ...grpc.CallOption) (*DataRootInclusionProofResponse, error)
+}
+
+type blobstreamAPIClient struct {
+	cc *grpc.ClientConn
+}
+
+func NewBlobstreamAPIClient(cc *grpc.ClientConn) BlobstreamAPIClient {
+	return &blobstreamAPIClient{cc}
+}
+
+func (c *blobstreamAPIClient) DataRootInclusionProof(ctx context.Context, in *DataRootInclusionProofRequest, opts ...grpc.CallOption) (*DataRootInclusionProofResponse, error) {
+	out := new(DataRootInclusionProofResponse)
+	err := c.cc.Invoke(ctx, "/tendermint.rpc.grpc.BlobstreamAPI/DataRootInclusionProof", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// BlobstreamAPIServer is the server API for BlobstreamAPI service.
+type BlobstreamAPIServer interface {
+	// DataRootInclusionProof creates an inclusion proof for the data root of block
+	// height `height` in the set of blocks defined by `start` and `end`. The range
+	// is end exclusive.
+	DataRootInclusionProof(context.Context, *DataRootInclusionProofRequest) (*DataRootInclusionProofResponse, error)
+}
+
+// UnimplementedBlobstreamAPIServer can be embedded to have forward compatible implementations.
+type UnimplementedBlobstreamAPIServer struct {
+}
+
+func (*UnimplementedBlobstreamAPIServer) DataRootInclusionProof(ctx context.Context, req *DataRootInclusionProofRequest) (*DataRootInclusionProofResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method DataRootInclusionProof not implemented")
+}
+
+func RegisterBlobstreamAPIServer(s *grpc.Server, srv BlobstreamAPIServer) {
+	s.RegisterService(&_BlobstreamAPI_serviceDesc, srv)
+}
+
+func _BlobstreamAPI_DataRootInclusionProof_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(DataRootInclusionProofRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(BlobstreamAPIServer).DataRootInclusionProof(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/tendermint.rpc.grpc.BlobstreamAPI/DataRootInclusionProof",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(BlobstreamAPIServer).DataRootInclusionProof(ctx, req.(*DataRootInclusionProofRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+var _BlobstreamAPI_serviceDesc = grpc.ServiceDesc{
+	ServiceName: "tendermint.rpc.grpc.BlobstreamAPI",
+	HandlerType: (*BlobstreamAPIServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "DataRootInclusionProof",
+			Handler:    _BlobstreamAPI_DataRootInclusionProof_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "tendermint/rpc/grpc/types.proto",
+}
+
 func (m *RequestPing) Marshal() (dAtA []byte, err error) {
 	size := m.Size()
 	dAtA = make([]byte, size)
@@ -1779,6 +1973,44 @@ func (m *StatusRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
 	return len(dAtA) - i, nil
 }
 
+func (m *DataRootInclusionProofRequest) 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 *DataRootInclusionProofRequest) MarshalTo(dAtA []byte) (int, error) {
+	size := m.Size()
+	return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *DataRootInclusionProofRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+	i := len(dAtA)
+	_ = i
+	var l int
+	_ = l
+	if m.End != 0 {
+		i = encodeVarintTypes(dAtA, i, uint64(m.End))
+		i--
+		dAtA[i] = 0x18
+	}
+	if m.Start != 0 {
+		i = encodeVarintTypes(dAtA, i, uint64(m.Start))
+		i--
+		dAtA[i] = 0x10
+	}
+	if m.Height != 0 {
+		i = encodeVarintTypes(dAtA, i, uint64(m.Height))
+		i--
+		dAtA[i] = 0x8
+	}
+	return len(dAtA) - i, nil
+}
+
 func (m *ResponsePing) Marshal() (dAtA []byte, err error) {
 	size := m.Size()
 	dAtA = make([]byte, size)
@@ -2290,6 +2522,39 @@ func (m *ValidatorInfo) MarshalToSizedBuffer(dAtA []byte) (int, error) {
 	return len(dAtA) - i, nil
 }
 
+func (m *DataRootInclusionProofResponse) 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 *DataRootInclusionProofResponse) MarshalTo(dAtA []byte) (int, error) {
+	size := m.Size()
+	return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *DataRootInclusionProofResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+	i := len(dAtA)
+	_ = i
+	var l int
+	_ = l
+	{
+		size, err := m.Proof.MarshalToSizedBuffer(dAtA[:i])
+		if err != nil {
+			return 0, err
+		}
+		i -= size
+		i = encodeVarintTypes(dAtA, i, uint64(size))
+	}
+	i--
+	dAtA[i] = 0xa
+	return len(dAtA) - i, nil
+}
+
 func encodeVarintTypes(dAtA []byte, offset int, v uint64) int {
 	offset -= sovTypes(v)
 	base := offset
@@ -2396,6 +2661,24 @@ func (m *StatusRequest) Size() (n int) {
 	return n
 }
 
+func (m *DataRootInclusionProofRequest) Size() (n int) {
+	if m == nil {
+		return 0
+	}
+	var l int
+	_ = l
+	if m.Height != 0 {
+		n += 1 + sovTypes(uint64(m.Height))
+	}
+	if m.Start != 0 {
+		n += 1 + sovTypes(uint64(m.Start))
+	}
+	if m.End != 0 {
+		n += 1 + sovTypes(uint64(m.End))
+	}
+	return n
+}
+
 func (m *ResponsePing) Size() (n int) {
 	if m == nil {
 		return 0
@@ -2594,6 +2877,17 @@ func (m *ValidatorInfo) Size() (n int) {
 	return n
 }
 
+func (m *DataRootInclusionProofResponse) Size() (n int) {
+	if m == nil {
+		return 0
+	}
+	var l int
+	_ = l
+	l = m.Proof.Size()
+	n += 1 + l + sovTypes(uint64(l))
+	return n
+}
+
 func sovTypes(x uint64) (n int) {
 	return (math_bits.Len64(x|1) + 6) / 7
 }
@@ -3165,6 +3459,113 @@ func (m *StatusRequest) Unmarshal(dAtA []byte) error {
 	}
 	return nil
 }
+func (m *DataRootInclusionProofRequest) 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 ErrIntOverflowTypes
+			}
+			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: DataRootInclusionProofRequest: wiretype end group for non-group")
+		}
+		if fieldNum <= 0 {
+			return fmt.Errorf("proto: DataRootInclusionProofRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+		}
+		switch fieldNum {
+		case 1:
+			if wireType != 0 {
+				return fmt.Errorf("proto: wrong wireType = %d for field Height", wireType)
+			}
+			m.Height = 0
+			for shift := uint(0); ; shift += 7 {
+				if shift >= 64 {
+					return ErrIntOverflowTypes
+				}
+				if iNdEx >= l {
+					return io.ErrUnexpectedEOF
+				}
+				b := dAtA[iNdEx]
+				iNdEx++
+				m.Height |= int64(b&0x7F) << shift
+				if b < 0x80 {
+					break
+				}
+			}
+		case 2:
+			if wireType != 0 {
+				return fmt.Errorf("proto: wrong wireType = %d for field Start", wireType)
+			}
+			m.Start = 0
+			for shift := uint(0); ; shift += 7 {
+				if shift >= 64 {
+					return ErrIntOverflowTypes
+				}
+				if iNdEx >= l {
+					return io.ErrUnexpectedEOF
+				}
+				b := dAtA[iNdEx]
+				iNdEx++
+				m.Start |= uint64(b&0x7F) << shift
+				if b < 0x80 {
+					break
+				}
+			}
+		case 3:
+			if wireType != 0 {
+				return fmt.Errorf("proto: wrong wireType = %d for field End", wireType)
+			}
+			m.End = 0
+			for shift := uint(0); ; shift += 7 {
+				if shift >= 64 {
+					return ErrIntOverflowTypes
+				}
+				if iNdEx >= l {
+					return io.ErrUnexpectedEOF
+				}
+				b := dAtA[iNdEx]
+				iNdEx++
+				m.End |= uint64(b&0x7F) << shift
+				if b < 0x80 {
+					break
+				}
+			}
+		default:
+			iNdEx = preIndex
+			skippy, err := skipTypes(dAtA[iNdEx:])
+			if err != nil {
+				return err
+			}
+			if (skippy < 0) || (iNdEx+skippy) < 0 {
+				return ErrInvalidLengthTypes
+			}
+			if (iNdEx + skippy) > l {
+				return io.ErrUnexpectedEOF
+			}
+			iNdEx += skippy
+		}
+	}
+
+	if iNdEx > l {
+		return io.ErrUnexpectedEOF
+	}
+	return nil
+}
 func (m *ResponsePing) Unmarshal(dAtA []byte) error {
 	l := len(dAtA)
 	iNdEx := 0
@@ -4594,6 +4995,89 @@ func (m *ValidatorInfo) Unmarshal(dAtA []byte) error {
 	}
 	return nil
 }
+func (m *DataRootInclusionProofResponse) 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 ErrIntOverflowTypes
+			}
+			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: DataRootInclusionProofResponse: wiretype end group for non-group")
+		}
+		if fieldNum <= 0 {
+			return fmt.Errorf("proto: DataRootInclusionProofResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+		}
+		switch fieldNum {
+		case 1:
+			if wireType != 2 {
+				return fmt.Errorf("proto: wrong wireType = %d for field Proof", wireType)
+			}
+			var msglen int
+			for shift := uint(0); ; shift += 7 {
+				if shift >= 64 {
+					return ErrIntOverflowTypes
+				}
+				if iNdEx >= l {
+					return io.ErrUnexpectedEOF
+				}
+				b := dAtA[iNdEx]
+				iNdEx++
+				msglen |= int(b&0x7F) << shift
+				if b < 0x80 {
+					break
+				}
+			}
+			if msglen < 0 {
+				return ErrInvalidLengthTypes
+			}
+			postIndex := iNdEx + msglen
+			if postIndex < 0 {
+				return ErrInvalidLengthTypes
+			}
+			if postIndex > l {
+				return io.ErrUnexpectedEOF
+			}
+			if err := m.Proof.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+				return err
+			}
+			iNdEx = postIndex
+		default:
+			iNdEx = preIndex
+			skippy, err := skipTypes(dAtA[iNdEx:])
+			if err != nil {
+				return err
+			}
+			if (skippy < 0) || (iNdEx+skippy) < 0 {
+				return ErrInvalidLengthTypes
+			}
+			if (iNdEx + skippy) > l {
+				return io.ErrUnexpectedEOF
+			}
+			iNdEx += skippy
+		}
+	}
+
+	if iNdEx > l {
+		return io.ErrUnexpectedEOF
+	}
+	return nil
+}
 func skipTypes(dAtA []byte) (n int, err error) {
 	l := len(dAtA)
 	iNdEx := 0
diff --git a/rpc/test/helpers.go b/rpc/test/helpers.go
index 8cc9a1d342..d1e580f5db 100644
--- a/rpc/test/helpers.go
+++ b/rpc/test/helpers.go
@@ -126,6 +126,15 @@ func GetBlockAPIClient() (core_grpc.BlockAPIClient, error) {
 	return client, nil
 }
 
+func GetBlobstreamAPIClient() (core_grpc.BlobstreamAPIClient, error) {
+	grpcAddr := globalConfig.RPC.GRPCListenAddress
+	client, err := core_grpc.StartBlobstreamAPIGRPCClient(grpcAddr)
+	if err != nil {
+		return nil, err
+	}
+	return client, nil
+}
+
 // StartTendermint starts a test CometBFT server in a go routine and returns when it is initialized
 func StartTendermint(app abci.Application, opts ...func(*Options)) *nm.Node {
 	nodeOpts := defaultOptions