Commit fbb4f355 authored by harrylee2015's avatar harrylee2015 Committed by vipwzw

fix a bug for storage

parent 99eaabec
......@@ -88,4 +88,7 @@ message BatchQueryStorage {
message BatchReplyStorage {
repeated Storage storages = 1;
}
\ No newline at end of file
}
message ReceiptStorage {
}
......@@ -2,6 +2,8 @@ package types
import (
"github.com/33cn/chain33/types"
"reflect"
)
/*
......@@ -52,9 +54,12 @@ var (
}
//定义log的id和具体log类型及名称,填入具体自定义log类型
logMap = map[int64]*types.LogInfo{
//LogID: {Ty: reflect.TypeOf(LogStruct), Name: LogName},
TyContentStorageLog: {Ty: reflect.TypeOf(ReceiptStorage{}),Name: "LogContentStorage"},
TyHashStorageLog: {Ty: reflect.TypeOf(ReceiptStorage{}),Name: "LogHashStorage"},
TyLinkStorageLog: {Ty: reflect.TypeOf(ReceiptStorage{}),Name: "LogLinkStorage"},
TyEncryptStorageLog: {Ty: reflect.TypeOf(ReceiptStorage{}),Name: "LogEncryptStorage"},
TyEncryptShareStorageLog: {Ty: reflect.TypeOf(ReceiptStorage{}),Name: "LogEncryptShareStorage"},
}
//tlog = log.New("module", "storage.types")
)
// init defines a register function
......
// Code generated by protoc-gen-go. DO NOT EDIT.
// source: storage.proto
/*
Package types is a generated protocol buffer package.
It is generated from these files:
storage.proto
It has these top-level messages:
Storage
StorageAction
ContentOnlyNotaryStorage
HashOnlyNotaryStorage
LinkNotaryStorage
EncryptNotaryStorage
EncryptContentOnlyNotaryStorage
EncryptShareNotaryStorage
QueryStorage
BatchQueryStorage
BatchReplyStorage
*/
package types
import (
fmt "fmt"
proto "github.com/golang/protobuf/proto"
math "math"
import proto "github.com/golang/protobuf/proto"
import fmt "fmt"
import math "math"
import (
context "golang.org/x/net/context"
grpc "google.golang.org/grpc"
)
......@@ -45,6 +23,7 @@ var _ = math.Inf
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
// 后面如果有其他数据模型可继续往上面添加
type Storage struct {
// Types that are valid to be assigned to Value:
// *Storage_ContentStorage
......@@ -52,32 +31,54 @@ type Storage struct {
// *Storage_LinkStorage
// *Storage_EncryptStorage
// *Storage_EncryptShareStorage
Value isStorage_Value `protobuf_oneof:"value"`
Value isStorage_Value `protobuf_oneof:"value"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *Storage) Reset() { *m = Storage{} }
func (m *Storage) String() string { return proto.CompactTextString(m) }
func (*Storage) ProtoMessage() {}
func (*Storage) Descriptor() ([]byte, []int) {
return fileDescriptor_storage_919e542fa62fc0e7, []int{0}
}
func (m *Storage) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Storage.Unmarshal(m, b)
}
func (m *Storage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_Storage.Marshal(b, m, deterministic)
}
func (dst *Storage) XXX_Merge(src proto.Message) {
xxx_messageInfo_Storage.Merge(dst, src)
}
func (m *Storage) XXX_Size() int {
return xxx_messageInfo_Storage.Size(m)
}
func (m *Storage) XXX_DiscardUnknown() {
xxx_messageInfo_Storage.DiscardUnknown(m)
}
func (m *Storage) Reset() { *m = Storage{} }
func (m *Storage) String() string { return proto.CompactTextString(m) }
func (*Storage) ProtoMessage() {}
func (*Storage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
var xxx_messageInfo_Storage proto.InternalMessageInfo
type isStorage_Value interface {
isStorage_Value()
}
type Storage_ContentStorage struct {
ContentStorage *ContentOnlyNotaryStorage `protobuf:"bytes,1,opt,name=contentStorage,oneof"`
ContentStorage *ContentOnlyNotaryStorage `protobuf:"bytes,1,opt,name=contentStorage,proto3,oneof"`
}
type Storage_HashStorage struct {
HashStorage *HashOnlyNotaryStorage `protobuf:"bytes,2,opt,name=hashStorage,oneof"`
HashStorage *HashOnlyNotaryStorage `protobuf:"bytes,2,opt,name=hashStorage,proto3,oneof"`
}
type Storage_LinkStorage struct {
LinkStorage *LinkNotaryStorage `protobuf:"bytes,3,opt,name=linkStorage,oneof"`
LinkStorage *LinkNotaryStorage `protobuf:"bytes,3,opt,name=linkStorage,proto3,oneof"`
}
type Storage_EncryptStorage struct {
EncryptStorage *EncryptNotaryStorage `protobuf:"bytes,4,opt,name=encryptStorage,oneof"`
EncryptStorage *EncryptNotaryStorage `protobuf:"bytes,4,opt,name=encryptStorage,proto3,oneof"`
}
type Storage_EncryptShareStorage struct {
EncryptShareStorage *EncryptShareNotaryStorage `protobuf:"bytes,5,opt,name=encryptShareStorage,oneof"`
EncryptShareStorage *EncryptShareNotaryStorage `protobuf:"bytes,5,opt,name=encryptShareStorage,proto3,oneof"`
}
func (*Storage_ContentStorage) isStorage_Value() {}
......@@ -229,27 +230,27 @@ func _Storage_OneofSizer(msg proto.Message) (n int) {
switch x := m.Value.(type) {
case *Storage_ContentStorage:
s := proto.Size(x.ContentStorage)
n += proto.SizeVarint(1<<3 | proto.WireBytes)
n += 1 // tag and wire
n += proto.SizeVarint(uint64(s))
n += s
case *Storage_HashStorage:
s := proto.Size(x.HashStorage)
n += proto.SizeVarint(2<<3 | proto.WireBytes)
n += 1 // tag and wire
n += proto.SizeVarint(uint64(s))
n += s
case *Storage_LinkStorage:
s := proto.Size(x.LinkStorage)
n += proto.SizeVarint(3<<3 | proto.WireBytes)
n += 1 // tag and wire
n += proto.SizeVarint(uint64(s))
n += s
case *Storage_EncryptStorage:
s := proto.Size(x.EncryptStorage)
n += proto.SizeVarint(4<<3 | proto.WireBytes)
n += 1 // tag and wire
n += proto.SizeVarint(uint64(s))
n += s
case *Storage_EncryptShareStorage:
s := proto.Size(x.EncryptShareStorage)
n += proto.SizeVarint(5<<3 | proto.WireBytes)
n += 1 // tag and wire
n += proto.SizeVarint(uint64(s))
n += s
case nil:
......@@ -266,33 +267,55 @@ type StorageAction struct {
// *StorageAction_LinkStorage
// *StorageAction_EncryptStorage
// *StorageAction_EncryptShareStorage
Value isStorageAction_Value `protobuf_oneof:"value"`
Ty int32 `protobuf:"varint,6,opt,name=ty" json:"ty,omitempty"`
Value isStorageAction_Value `protobuf_oneof:"value"`
Ty int32 `protobuf:"varint,6,opt,name=ty,proto3" json:"ty,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *StorageAction) Reset() { *m = StorageAction{} }
func (m *StorageAction) String() string { return proto.CompactTextString(m) }
func (*StorageAction) ProtoMessage() {}
func (*StorageAction) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} }
func (m *StorageAction) Reset() { *m = StorageAction{} }
func (m *StorageAction) String() string { return proto.CompactTextString(m) }
func (*StorageAction) ProtoMessage() {}
func (*StorageAction) Descriptor() ([]byte, []int) {
return fileDescriptor_storage_919e542fa62fc0e7, []int{1}
}
func (m *StorageAction) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_StorageAction.Unmarshal(m, b)
}
func (m *StorageAction) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_StorageAction.Marshal(b, m, deterministic)
}
func (dst *StorageAction) XXX_Merge(src proto.Message) {
xxx_messageInfo_StorageAction.Merge(dst, src)
}
func (m *StorageAction) XXX_Size() int {
return xxx_messageInfo_StorageAction.Size(m)
}
func (m *StorageAction) XXX_DiscardUnknown() {
xxx_messageInfo_StorageAction.DiscardUnknown(m)
}
var xxx_messageInfo_StorageAction proto.InternalMessageInfo
type isStorageAction_Value interface {
isStorageAction_Value()
}
type StorageAction_ContentStorage struct {
ContentStorage *ContentOnlyNotaryStorage `protobuf:"bytes,1,opt,name=contentStorage,oneof"`
ContentStorage *ContentOnlyNotaryStorage `protobuf:"bytes,1,opt,name=contentStorage,proto3,oneof"`
}
type StorageAction_HashStorage struct {
HashStorage *HashOnlyNotaryStorage `protobuf:"bytes,2,opt,name=hashStorage,oneof"`
HashStorage *HashOnlyNotaryStorage `protobuf:"bytes,2,opt,name=hashStorage,proto3,oneof"`
}
type StorageAction_LinkStorage struct {
LinkStorage *LinkNotaryStorage `protobuf:"bytes,3,opt,name=linkStorage,oneof"`
LinkStorage *LinkNotaryStorage `protobuf:"bytes,3,opt,name=linkStorage,proto3,oneof"`
}
type StorageAction_EncryptStorage struct {
EncryptStorage *EncryptNotaryStorage `protobuf:"bytes,4,opt,name=encryptStorage,oneof"`
EncryptStorage *EncryptNotaryStorage `protobuf:"bytes,4,opt,name=encryptStorage,proto3,oneof"`
}
type StorageAction_EncryptShareStorage struct {
EncryptShareStorage *EncryptShareNotaryStorage `protobuf:"bytes,5,opt,name=encryptShareStorage,oneof"`
EncryptShareStorage *EncryptShareNotaryStorage `protobuf:"bytes,5,opt,name=encryptShareStorage,proto3,oneof"`
}
func (*StorageAction_ContentStorage) isStorageAction_Value() {}
......@@ -451,27 +474,27 @@ func _StorageAction_OneofSizer(msg proto.Message) (n int) {
switch x := m.Value.(type) {
case *StorageAction_ContentStorage:
s := proto.Size(x.ContentStorage)
n += proto.SizeVarint(1<<3 | proto.WireBytes)
n += 1 // tag and wire
n += proto.SizeVarint(uint64(s))
n += s
case *StorageAction_HashStorage:
s := proto.Size(x.HashStorage)
n += proto.SizeVarint(2<<3 | proto.WireBytes)
n += 1 // tag and wire
n += proto.SizeVarint(uint64(s))
n += s
case *StorageAction_LinkStorage:
s := proto.Size(x.LinkStorage)
n += proto.SizeVarint(3<<3 | proto.WireBytes)
n += 1 // tag and wire
n += proto.SizeVarint(uint64(s))
n += s
case *StorageAction_EncryptStorage:
s := proto.Size(x.EncryptStorage)
n += proto.SizeVarint(4<<3 | proto.WireBytes)
n += 1 // tag and wire
n += proto.SizeVarint(uint64(s))
n += s
case *StorageAction_EncryptShareStorage:
s := proto.Size(x.EncryptShareStorage)
n += proto.SizeVarint(5<<3 | proto.WireBytes)
n += 1 // tag and wire
n += proto.SizeVarint(uint64(s))
n += s
case nil:
......@@ -484,13 +507,35 @@ func _StorageAction_OneofSizer(msg proto.Message) (n int) {
// 内容存证模型
type ContentOnlyNotaryStorage struct {
// 长度需要小于512k
Content []byte `protobuf:"bytes,1,opt,name=content,proto3" json:"content,omitempty"`
Content []byte `protobuf:"bytes,1,opt,name=content,proto3" json:"content,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *ContentOnlyNotaryStorage) Reset() { *m = ContentOnlyNotaryStorage{} }
func (m *ContentOnlyNotaryStorage) String() string { return proto.CompactTextString(m) }
func (*ContentOnlyNotaryStorage) ProtoMessage() {}
func (*ContentOnlyNotaryStorage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} }
func (m *ContentOnlyNotaryStorage) Reset() { *m = ContentOnlyNotaryStorage{} }
func (m *ContentOnlyNotaryStorage) String() string { return proto.CompactTextString(m) }
func (*ContentOnlyNotaryStorage) ProtoMessage() {}
func (*ContentOnlyNotaryStorage) Descriptor() ([]byte, []int) {
return fileDescriptor_storage_919e542fa62fc0e7, []int{2}
}
func (m *ContentOnlyNotaryStorage) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ContentOnlyNotaryStorage.Unmarshal(m, b)
}
func (m *ContentOnlyNotaryStorage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_ContentOnlyNotaryStorage.Marshal(b, m, deterministic)
}
func (dst *ContentOnlyNotaryStorage) XXX_Merge(src proto.Message) {
xxx_messageInfo_ContentOnlyNotaryStorage.Merge(dst, src)
}
func (m *ContentOnlyNotaryStorage) XXX_Size() int {
return xxx_messageInfo_ContentOnlyNotaryStorage.Size(m)
}
func (m *ContentOnlyNotaryStorage) XXX_DiscardUnknown() {
xxx_messageInfo_ContentOnlyNotaryStorage.DiscardUnknown(m)
}
var xxx_messageInfo_ContentOnlyNotaryStorage proto.InternalMessageInfo
func (m *ContentOnlyNotaryStorage) GetContent() []byte {
if m != nil {
......@@ -502,13 +547,35 @@ func (m *ContentOnlyNotaryStorage) GetContent() []byte {
// 哈希存证模型,推荐使用sha256哈希,限制256位得摘要值
type HashOnlyNotaryStorage struct {
// 长度固定为32字节
Hash []byte `protobuf:"bytes,1,opt,name=hash,proto3" json:"hash,omitempty"`
Hash []byte `protobuf:"bytes,1,opt,name=hash,proto3" json:"hash,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *HashOnlyNotaryStorage) Reset() { *m = HashOnlyNotaryStorage{} }
func (m *HashOnlyNotaryStorage) String() string { return proto.CompactTextString(m) }
func (*HashOnlyNotaryStorage) ProtoMessage() {}
func (*HashOnlyNotaryStorage) Descriptor() ([]byte, []int) {
return fileDescriptor_storage_919e542fa62fc0e7, []int{3}
}
func (m *HashOnlyNotaryStorage) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_HashOnlyNotaryStorage.Unmarshal(m, b)
}
func (m *HashOnlyNotaryStorage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_HashOnlyNotaryStorage.Marshal(b, m, deterministic)
}
func (dst *HashOnlyNotaryStorage) XXX_Merge(src proto.Message) {
xxx_messageInfo_HashOnlyNotaryStorage.Merge(dst, src)
}
func (m *HashOnlyNotaryStorage) XXX_Size() int {
return xxx_messageInfo_HashOnlyNotaryStorage.Size(m)
}
func (m *HashOnlyNotaryStorage) XXX_DiscardUnknown() {
xxx_messageInfo_HashOnlyNotaryStorage.DiscardUnknown(m)
}
func (m *HashOnlyNotaryStorage) Reset() { *m = HashOnlyNotaryStorage{} }
func (m *HashOnlyNotaryStorage) String() string { return proto.CompactTextString(m) }
func (*HashOnlyNotaryStorage) ProtoMessage() {}
func (*HashOnlyNotaryStorage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} }
var xxx_messageInfo_HashOnlyNotaryStorage proto.InternalMessageInfo
func (m *HashOnlyNotaryStorage) GetHash() []byte {
if m != nil {
......@@ -522,13 +589,35 @@ type LinkNotaryStorage struct {
// 存证内容的链接,可以写入URL,或者其他可用于定位源文件得线索.
Link []byte `protobuf:"bytes,1,opt,name=link,proto3" json:"link,omitempty"`
// 源文件得hash值,推荐使用sha256哈希,限制256位得摘要值
Hash []byte `protobuf:"bytes,2,opt,name=hash,proto3" json:"hash,omitempty"`
Hash []byte `protobuf:"bytes,2,opt,name=hash,proto3" json:"hash,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *LinkNotaryStorage) Reset() { *m = LinkNotaryStorage{} }
func (m *LinkNotaryStorage) String() string { return proto.CompactTextString(m) }
func (*LinkNotaryStorage) ProtoMessage() {}
func (*LinkNotaryStorage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} }
func (m *LinkNotaryStorage) Reset() { *m = LinkNotaryStorage{} }
func (m *LinkNotaryStorage) String() string { return proto.CompactTextString(m) }
func (*LinkNotaryStorage) ProtoMessage() {}
func (*LinkNotaryStorage) Descriptor() ([]byte, []int) {
return fileDescriptor_storage_919e542fa62fc0e7, []int{4}
}
func (m *LinkNotaryStorage) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_LinkNotaryStorage.Unmarshal(m, b)
}
func (m *LinkNotaryStorage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_LinkNotaryStorage.Marshal(b, m, deterministic)
}
func (dst *LinkNotaryStorage) XXX_Merge(src proto.Message) {
xxx_messageInfo_LinkNotaryStorage.Merge(dst, src)
}
func (m *LinkNotaryStorage) XXX_Size() int {
return xxx_messageInfo_LinkNotaryStorage.Size(m)
}
func (m *LinkNotaryStorage) XXX_DiscardUnknown() {
xxx_messageInfo_LinkNotaryStorage.DiscardUnknown(m)
}
var xxx_messageInfo_LinkNotaryStorage proto.InternalMessageInfo
func (m *LinkNotaryStorage) GetLink() []byte {
if m != nil {
......@@ -551,13 +640,35 @@ type EncryptNotaryStorage struct {
// 源文件得密文,由加密key及nonce对明文加密得到该值。
EncryptContent []byte `protobuf:"bytes,2,opt,name=encryptContent,proto3" json:"encryptContent,omitempty"`
// 加密iv,通过AES进行加密时制定随机生成的iv,解密时需要使用该值
Nonce []byte `protobuf:"bytes,3,opt,name=nonce,proto3" json:"nonce,omitempty"`
Nonce []byte `protobuf:"bytes,3,opt,name=nonce,proto3" json:"nonce,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *EncryptNotaryStorage) Reset() { *m = EncryptNotaryStorage{} }
func (m *EncryptNotaryStorage) String() string { return proto.CompactTextString(m) }
func (*EncryptNotaryStorage) ProtoMessage() {}
func (*EncryptNotaryStorage) Descriptor() ([]byte, []int) {
return fileDescriptor_storage_919e542fa62fc0e7, []int{5}
}
func (m *EncryptNotaryStorage) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_EncryptNotaryStorage.Unmarshal(m, b)
}
func (m *EncryptNotaryStorage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_EncryptNotaryStorage.Marshal(b, m, deterministic)
}
func (dst *EncryptNotaryStorage) XXX_Merge(src proto.Message) {
xxx_messageInfo_EncryptNotaryStorage.Merge(dst, src)
}
func (m *EncryptNotaryStorage) XXX_Size() int {
return xxx_messageInfo_EncryptNotaryStorage.Size(m)
}
func (m *EncryptNotaryStorage) XXX_DiscardUnknown() {
xxx_messageInfo_EncryptNotaryStorage.DiscardUnknown(m)
}
func (m *EncryptNotaryStorage) Reset() { *m = EncryptNotaryStorage{} }
func (m *EncryptNotaryStorage) String() string { return proto.CompactTextString(m) }
func (*EncryptNotaryStorage) ProtoMessage() {}
func (*EncryptNotaryStorage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} }
var xxx_messageInfo_EncryptNotaryStorage proto.InternalMessageInfo
func (m *EncryptNotaryStorage) GetContentHash() []byte {
if m != nil {
......@@ -587,13 +698,35 @@ type EncryptContentOnlyNotaryStorage struct {
// 源文件得密文。
EncryptContent []byte `protobuf:"bytes,1,opt,name=encryptContent,proto3" json:"encryptContent,omitempty"`
// 加密iv,通过AES进行加密时制定随机生成的iv,解密时需要使用该值
Nonce []byte `protobuf:"bytes,2,opt,name=nonce,proto3" json:"nonce,omitempty"`
Nonce []byte `protobuf:"bytes,2,opt,name=nonce,proto3" json:"nonce,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *EncryptContentOnlyNotaryStorage) Reset() { *m = EncryptContentOnlyNotaryStorage{} }
func (m *EncryptContentOnlyNotaryStorage) String() string { return proto.CompactTextString(m) }
func (*EncryptContentOnlyNotaryStorage) ProtoMessage() {}
func (*EncryptContentOnlyNotaryStorage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} }
func (m *EncryptContentOnlyNotaryStorage) Reset() { *m = EncryptContentOnlyNotaryStorage{} }
func (m *EncryptContentOnlyNotaryStorage) String() string { return proto.CompactTextString(m) }
func (*EncryptContentOnlyNotaryStorage) ProtoMessage() {}
func (*EncryptContentOnlyNotaryStorage) Descriptor() ([]byte, []int) {
return fileDescriptor_storage_919e542fa62fc0e7, []int{6}
}
func (m *EncryptContentOnlyNotaryStorage) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_EncryptContentOnlyNotaryStorage.Unmarshal(m, b)
}
func (m *EncryptContentOnlyNotaryStorage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_EncryptContentOnlyNotaryStorage.Marshal(b, m, deterministic)
}
func (dst *EncryptContentOnlyNotaryStorage) XXX_Merge(src proto.Message) {
xxx_messageInfo_EncryptContentOnlyNotaryStorage.Merge(dst, src)
}
func (m *EncryptContentOnlyNotaryStorage) XXX_Size() int {
return xxx_messageInfo_EncryptContentOnlyNotaryStorage.Size(m)
}
func (m *EncryptContentOnlyNotaryStorage) XXX_DiscardUnknown() {
xxx_messageInfo_EncryptContentOnlyNotaryStorage.DiscardUnknown(m)
}
var xxx_messageInfo_EncryptContentOnlyNotaryStorage proto.InternalMessageInfo
func (m *EncryptContentOnlyNotaryStorage) GetEncryptContent() []byte {
if m != nil {
......@@ -609,7 +742,7 @@ func (m *EncryptContentOnlyNotaryStorage) GetNonce() []byte {
return nil
}
// 分享隐私存证模型
// 分享隐私存证模型,需要完备的sdk或者相应的密钥库支持
type EncryptShareNotaryStorage struct {
// 存证明文内容的hash值,推荐使用sha256哈希,限制256位得摘要值
ContentHash []byte `protobuf:"bytes,1,opt,name=contentHash,proto3" json:"contentHash,omitempty"`
......@@ -621,13 +754,35 @@ type EncryptShareNotaryStorage struct {
// 使用时,通过私密key对wrap key解密得到加密key对密文进行解密。
KeyWrap []byte `protobuf:"bytes,4,opt,name=keyWrap,proto3" json:"keyWrap,omitempty"`
// 加密iv,通过AES进行加密时制定随机生成的iv,解密时需要使用该值
Nonce []byte `protobuf:"bytes,5,opt,name=nonce,proto3" json:"nonce,omitempty"`
Nonce []byte `protobuf:"bytes,5,opt,name=nonce,proto3" json:"nonce,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *EncryptShareNotaryStorage) Reset() { *m = EncryptShareNotaryStorage{} }
func (m *EncryptShareNotaryStorage) String() string { return proto.CompactTextString(m) }
func (*EncryptShareNotaryStorage) ProtoMessage() {}
func (*EncryptShareNotaryStorage) Descriptor() ([]byte, []int) {
return fileDescriptor_storage_919e542fa62fc0e7, []int{7}
}
func (m *EncryptShareNotaryStorage) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_EncryptShareNotaryStorage.Unmarshal(m, b)
}
func (m *EncryptShareNotaryStorage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_EncryptShareNotaryStorage.Marshal(b, m, deterministic)
}
func (dst *EncryptShareNotaryStorage) XXX_Merge(src proto.Message) {
xxx_messageInfo_EncryptShareNotaryStorage.Merge(dst, src)
}
func (m *EncryptShareNotaryStorage) XXX_Size() int {
return xxx_messageInfo_EncryptShareNotaryStorage.Size(m)
}
func (m *EncryptShareNotaryStorage) XXX_DiscardUnknown() {
xxx_messageInfo_EncryptShareNotaryStorage.DiscardUnknown(m)
}
func (m *EncryptShareNotaryStorage) Reset() { *m = EncryptShareNotaryStorage{} }
func (m *EncryptShareNotaryStorage) String() string { return proto.CompactTextString(m) }
func (*EncryptShareNotaryStorage) ProtoMessage() {}
func (*EncryptShareNotaryStorage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} }
var xxx_messageInfo_EncryptShareNotaryStorage proto.InternalMessageInfo
func (m *EncryptShareNotaryStorage) GetContentHash() []byte {
if m != nil {
......@@ -664,15 +819,37 @@ func (m *EncryptShareNotaryStorage) GetNonce() []byte {
return nil
}
// 根据txhash去状态数据中查询存储内容
// 根据txhash去状态数据中查询存储内容
type QueryStorage struct {
TxHash string `protobuf:"bytes,1,opt,name=txHash" json:"txHash,omitempty"`
TxHash string `protobuf:"bytes,1,opt,name=txHash,proto3" json:"txHash,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *QueryStorage) Reset() { *m = QueryStorage{} }
func (m *QueryStorage) String() string { return proto.CompactTextString(m) }
func (*QueryStorage) ProtoMessage() {}
func (*QueryStorage) Descriptor() ([]byte, []int) {
return fileDescriptor_storage_919e542fa62fc0e7, []int{8}
}
func (m *QueryStorage) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_QueryStorage.Unmarshal(m, b)
}
func (m *QueryStorage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_QueryStorage.Marshal(b, m, deterministic)
}
func (dst *QueryStorage) XXX_Merge(src proto.Message) {
xxx_messageInfo_QueryStorage.Merge(dst, src)
}
func (m *QueryStorage) XXX_Size() int {
return xxx_messageInfo_QueryStorage.Size(m)
}
func (m *QueryStorage) XXX_DiscardUnknown() {
xxx_messageInfo_QueryStorage.DiscardUnknown(m)
}
func (m *QueryStorage) Reset() { *m = QueryStorage{} }
func (m *QueryStorage) String() string { return proto.CompactTextString(m) }
func (*QueryStorage) ProtoMessage() {}
func (*QueryStorage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} }
var xxx_messageInfo_QueryStorage proto.InternalMessageInfo
func (m *QueryStorage) GetTxHash() string {
if m != nil {
......@@ -683,13 +860,35 @@ func (m *QueryStorage) GetTxHash() string {
// 批量查询有可能导致数据库崩溃
type BatchQueryStorage struct {
TxHashs []string `protobuf:"bytes,1,rep,name=txHashs" json:"txHashs,omitempty"`
TxHashs []string `protobuf:"bytes,1,rep,name=txHashs,proto3" json:"txHashs,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *BatchQueryStorage) Reset() { *m = BatchQueryStorage{} }
func (m *BatchQueryStorage) String() string { return proto.CompactTextString(m) }
func (*BatchQueryStorage) ProtoMessage() {}
func (*BatchQueryStorage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} }
func (m *BatchQueryStorage) Reset() { *m = BatchQueryStorage{} }
func (m *BatchQueryStorage) String() string { return proto.CompactTextString(m) }
func (*BatchQueryStorage) ProtoMessage() {}
func (*BatchQueryStorage) Descriptor() ([]byte, []int) {
return fileDescriptor_storage_919e542fa62fc0e7, []int{9}
}
func (m *BatchQueryStorage) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_BatchQueryStorage.Unmarshal(m, b)
}
func (m *BatchQueryStorage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_BatchQueryStorage.Marshal(b, m, deterministic)
}
func (dst *BatchQueryStorage) XXX_Merge(src proto.Message) {
xxx_messageInfo_BatchQueryStorage.Merge(dst, src)
}
func (m *BatchQueryStorage) XXX_Size() int {
return xxx_messageInfo_BatchQueryStorage.Size(m)
}
func (m *BatchQueryStorage) XXX_DiscardUnknown() {
xxx_messageInfo_BatchQueryStorage.DiscardUnknown(m)
}
var xxx_messageInfo_BatchQueryStorage proto.InternalMessageInfo
func (m *BatchQueryStorage) GetTxHashs() []string {
if m != nil {
......@@ -699,13 +898,35 @@ func (m *BatchQueryStorage) GetTxHashs() []string {
}
type BatchReplyStorage struct {
Storages []*Storage `protobuf:"bytes,1,rep,name=storages" json:"storages,omitempty"`
Storages []*Storage `protobuf:"bytes,1,rep,name=storages,proto3" json:"storages,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *BatchReplyStorage) Reset() { *m = BatchReplyStorage{} }
func (m *BatchReplyStorage) String() string { return proto.CompactTextString(m) }
func (*BatchReplyStorage) ProtoMessage() {}
func (*BatchReplyStorage) Descriptor() ([]byte, []int) {
return fileDescriptor_storage_919e542fa62fc0e7, []int{10}
}
func (m *BatchReplyStorage) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_BatchReplyStorage.Unmarshal(m, b)
}
func (m *BatchReplyStorage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_BatchReplyStorage.Marshal(b, m, deterministic)
}
func (dst *BatchReplyStorage) XXX_Merge(src proto.Message) {
xxx_messageInfo_BatchReplyStorage.Merge(dst, src)
}
func (m *BatchReplyStorage) XXX_Size() int {
return xxx_messageInfo_BatchReplyStorage.Size(m)
}
func (m *BatchReplyStorage) XXX_DiscardUnknown() {
xxx_messageInfo_BatchReplyStorage.DiscardUnknown(m)
}
func (m *BatchReplyStorage) Reset() { *m = BatchReplyStorage{} }
func (m *BatchReplyStorage) String() string { return proto.CompactTextString(m) }
func (*BatchReplyStorage) ProtoMessage() {}
func (*BatchReplyStorage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} }
var xxx_messageInfo_BatchReplyStorage proto.InternalMessageInfo
func (m *BatchReplyStorage) GetStorages() []*Storage {
if m != nil {
......@@ -714,6 +935,36 @@ func (m *BatchReplyStorage) GetStorages() []*Storage {
return nil
}
type ReceiptStorage struct {
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *ReceiptStorage) Reset() { *m = ReceiptStorage{} }
func (m *ReceiptStorage) String() string { return proto.CompactTextString(m) }
func (*ReceiptStorage) ProtoMessage() {}
func (*ReceiptStorage) Descriptor() ([]byte, []int) {
return fileDescriptor_storage_919e542fa62fc0e7, []int{11}
}
func (m *ReceiptStorage) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ReceiptStorage.Unmarshal(m, b)
}
func (m *ReceiptStorage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_ReceiptStorage.Marshal(b, m, deterministic)
}
func (dst *ReceiptStorage) XXX_Merge(src proto.Message) {
xxx_messageInfo_ReceiptStorage.Merge(dst, src)
}
func (m *ReceiptStorage) XXX_Size() int {
return xxx_messageInfo_ReceiptStorage.Size(m)
}
func (m *ReceiptStorage) XXX_DiscardUnknown() {
xxx_messageInfo_ReceiptStorage.DiscardUnknown(m)
}
var xxx_messageInfo_ReceiptStorage proto.InternalMessageInfo
func init() {
proto.RegisterType((*Storage)(nil), "types.Storage")
proto.RegisterType((*StorageAction)(nil), "types.StorageAction")
......@@ -726,6 +977,7 @@ func init() {
proto.RegisterType((*QueryStorage)(nil), "types.QueryStorage")
proto.RegisterType((*BatchQueryStorage)(nil), "types.BatchQueryStorage")
proto.RegisterType((*BatchReplyStorage)(nil), "types.BatchReplyStorage")
proto.RegisterType((*ReceiptStorage)(nil), "types.ReceiptStorage")
}
// Reference imports to suppress errors if they are not otherwise used.
......@@ -736,8 +988,9 @@ var _ grpc.ClientConn
// is compatible with the grpc package it is being compiled against.
const _ = grpc.SupportPackageIsVersion4
// Client API for Storage service
// StorageClient is the client API for Storage service.
//
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
type StorageClient interface {
}
......@@ -749,8 +1002,7 @@ func NewStorageClient(cc *grpc.ClientConn) StorageClient {
return &storageClient{cc}
}
// Server API for Storage service
// StorageServer is the server API for Storage service.
type StorageServer interface {
}
......@@ -766,37 +1018,38 @@ var _Storage_serviceDesc = grpc.ServiceDesc{
Metadata: "storage.proto",
}
func init() { proto.RegisterFile("storage.proto", fileDescriptor0) }
var fileDescriptor0 = []byte{
// 462 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x94, 0xcf, 0x8b, 0xd3, 0x40,
0x14, 0xc7, 0x4d, 0xba, 0x69, 0xec, 0x4b, 0xb7, 0xb0, 0xe3, 0x2a, 0x23, 0x0a, 0x1b, 0x72, 0x58,
0x8a, 0x62, 0x0f, 0xd5, 0x9b, 0x82, 0xba, 0x52, 0xa8, 0x20, 0x2b, 0x8e, 0x82, 0x47, 0x19, 0xc3,
0x60, 0x4a, 0xeb, 0x24, 0x24, 0xb3, 0x8b, 0xf9, 0x2f, 0xfc, 0x4f, 0xfc, 0xff, 0x3c, 0x49, 0x66,
0xde, 0xe4, 0x47, 0x93, 0x7a, 0x12, 0x4f, 0x7b, 0x9b, 0xf7, 0xde, 0xf7, 0x7d, 0xde, 0xaf, 0x10,
0x38, 0x2e, 0x54, 0x9a, 0xf3, 0x6f, 0x62, 0x91, 0xe5, 0xa9, 0x4a, 0x89, 0xa7, 0xca, 0x4c, 0x14,
0xd1, 0x6f, 0x17, 0xfc, 0x8f, 0x26, 0x40, 0xde, 0xc2, 0x2c, 0x4e, 0xa5, 0x12, 0x52, 0xa1, 0x87,
0x3a, 0xa1, 0x33, 0x0f, 0x96, 0x67, 0x0b, 0xad, 0x5d, 0xbc, 0x31, 0xc1, 0xf7, 0x72, 0x57, 0x5e,
0xa6, 0x8a, 0xe7, 0x25, 0xca, 0xd6, 0xb7, 0xd8, 0x5e, 0x22, 0x79, 0x05, 0x41, 0xc2, 0x8b, 0xc4,
0x72, 0x5c, 0xcd, 0x79, 0x88, 0x9c, 0x35, 0x2f, 0x92, 0x21, 0x48, 0x3b, 0x85, 0xbc, 0x80, 0x60,
0xb7, 0x91, 0x5b, 0x4b, 0x18, 0x69, 0x02, 0x45, 0xc2, 0xbb, 0x8d, 0xdc, 0xf6, 0xb2, 0x5b, 0x72,
0xb2, 0x82, 0x99, 0x90, 0x71, 0x5e, 0x66, 0xf5, 0x28, 0x47, 0x1a, 0xf0, 0x00, 0x01, 0x2b, 0x13,
0xec, 0x8d, 0xd1, 0x4d, 0x22, 0x9f, 0xe0, 0x8e, 0xf5, 0x24, 0x3c, 0x17, 0x96, 0xe5, 0x69, 0x56,
0xd8, 0x65, 0x69, 0xc5, 0x3e, 0x70, 0x28, 0xfd, 0xc2, 0x07, 0xef, 0x9a, 0xef, 0xae, 0x44, 0xf4,
0x73, 0x04, 0xc7, 0xe8, 0x7c, 0x1d, 0xab, 0x4d, 0x2a, 0x6f, 0x4e, 0xf0, 0x7f, 0x4e, 0x40, 0x66,
0xe0, 0xaa, 0x92, 0x8e, 0x43, 0x67, 0xee, 0x31, 0x57, 0x95, 0xcd, 0x49, 0x9e, 0x01, 0x3d, 0xb4,
0x63, 0x42, 0xc1, 0xc7, 0x1d, 0xeb, 0xab, 0x4c, 0x99, 0x35, 0xa3, 0xc7, 0x70, 0x77, 0x70, 0xa3,
0x84, 0xc0, 0x51, 0xb5, 0x51, 0xd4, 0xeb, 0x77, 0xf4, 0x1c, 0x4e, 0x7a, 0xcb, 0xab, 0x84, 0xd5,
0xf2, 0xac, 0xb0, 0x7a, 0xd7, 0xc9, 0x6e, 0x2b, 0xf9, 0x1a, 0x4e, 0x87, 0x16, 0x47, 0x42, 0x08,
0xb0, 0x99, 0x75, 0x53, 0xaf, 0xed, 0x22, 0xe7, 0xf5, 0x3d, 0x70, 0x40, 0xe4, 0xee, 0x79, 0xc9,
0x29, 0x78, 0x32, 0x95, 0xb1, 0xb9, 0xf7, 0x94, 0x19, 0x23, 0xfa, 0x02, 0x67, 0xab, 0x8e, 0xae,
0x3f, 0x6b, 0xbf, 0x80, 0xf3, 0xf7, 0x02, 0x6e, 0xbb, 0xc0, 0x2f, 0x07, 0xee, 0x1f, 0x3c, 0xe3,
0x3f, 0x1c, 0x8f, 0x82, 0xbf, 0x15, 0xe5, 0x25, 0xff, 0x6e, 0x07, 0xb4, 0x26, 0x46, 0x3e, 0xe7,
0x3c, 0xd3, 0x5f, 0xaa, 0x89, 0x54, 0x66, 0xd3, 0xb1, 0xd7, 0xee, 0xf8, 0x1c, 0xa6, 0x1f, 0xae,
0x44, 0xd3, 0xe3, 0x3d, 0x18, 0xab, 0x1f, 0x75, 0x7b, 0x13, 0x86, 0x56, 0xf4, 0x04, 0x4e, 0x2e,
0xb8, 0x8a, 0x93, 0x8e, 0x98, 0x82, 0x6f, 0xc2, 0x05, 0x75, 0xc2, 0xd1, 0x7c, 0xc2, 0xac, 0x19,
0xbd, 0x44, 0x39, 0x13, 0xd9, 0xae, 0x96, 0x3f, 0x82, 0xdb, 0xf8, 0xfb, 0x36, 0xfa, 0x60, 0x39,
0xc3, 0x4f, 0x1f, 0x15, 0xac, 0x8e, 0x2f, 0x27, 0xe0, 0xe3, 0xfb, 0xeb, 0x58, 0xff, 0xeb, 0x9f,
0xfe, 0x09, 0x00, 0x00, 0xff, 0xff, 0x93, 0x02, 0x76, 0xfb, 0xfc, 0x05, 0x00, 0x00,
func init() { proto.RegisterFile("storage.proto", fileDescriptor_storage_919e542fa62fc0e7) }
var fileDescriptor_storage_919e542fa62fc0e7 = []byte{
// 471 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x54, 0xcf, 0x8b, 0xd3, 0x40,
0x14, 0x36, 0xe9, 0xa6, 0xb1, 0x2f, 0xdd, 0xe0, 0x8e, 0xab, 0x8c, 0x28, 0x6c, 0x98, 0xc3, 0x52,
0x14, 0x7b, 0xa8, 0xde, 0x14, 0xd4, 0x95, 0x42, 0x05, 0x59, 0x71, 0x14, 0x3c, 0xca, 0x18, 0x06,
0x53, 0x5a, 0x27, 0x21, 0x99, 0x5d, 0xcc, 0x7f, 0xe1, 0x7f, 0xe2, 0xff, 0xe7, 0x49, 0x32, 0xf3,
0x26, 0x4d, 0x9b, 0xd6, 0x93, 0x78, 0xf2, 0x96, 0xf7, 0xbe, 0xef, 0x7d, 0xef, 0xc7, 0x97, 0x04,
0x8e, 0x2b, 0x9d, 0x97, 0xe2, 0xab, 0x9c, 0x16, 0x65, 0xae, 0x73, 0x12, 0xe8, 0xba, 0x90, 0x15,
0xfb, 0xe5, 0x43, 0xf8, 0xc1, 0x02, 0xe4, 0x0d, 0xc4, 0x69, 0xae, 0xb4, 0x54, 0x1a, 0x33, 0xd4,
0x4b, 0xbc, 0x49, 0x34, 0x3b, 0x9b, 0x1a, 0xee, 0xf4, 0xb5, 0x05, 0xdf, 0xa9, 0x75, 0x7d, 0x99,
0x6b, 0x51, 0xd6, 0x48, 0x5b, 0xdc, 0xe0, 0x3b, 0x85, 0xe4, 0x25, 0x44, 0x99, 0xa8, 0x32, 0xa7,
0xe3, 0x1b, 0x9d, 0x07, 0xa8, 0xb3, 0x10, 0x55, 0xb6, 0x4f, 0xa4, 0x5b, 0x42, 0x9e, 0x43, 0xb4,
0x5e, 0xaa, 0x95, 0x53, 0x18, 0x18, 0x05, 0x8a, 0x0a, 0x6f, 0x97, 0x6a, 0xd5, 0xab, 0xee, 0xd0,
0xc9, 0x1c, 0x62, 0xa9, 0xd2, 0xb2, 0x2e, 0xda, 0x55, 0x8e, 0x8c, 0xc0, 0x7d, 0x14, 0x98, 0x5b,
0xb0, 0xb7, 0xc6, 0x76, 0x11, 0xf9, 0x08, 0xb7, 0x5d, 0x26, 0x13, 0xa5, 0x74, 0x5a, 0x81, 0xd1,
0x4a, 0xb6, 0xb5, 0x0c, 0x63, 0x57, 0x70, 0x5f, 0xf9, 0x45, 0x08, 0xc1, 0xb5, 0x58, 0x5f, 0x49,
0xf6, 0x63, 0x00, 0xc7, 0x98, 0x7c, 0x95, 0xea, 0x65, 0xae, 0xfe, 0x5b, 0xf0, 0x6f, 0x2c, 0x20,
0x31, 0xf8, 0xba, 0xa6, 0xc3, 0xc4, 0x9b, 0x04, 0xdc, 0xd7, 0xf5, 0xc6, 0x92, 0xa7, 0x40, 0x0f,
0xdd, 0x98, 0x50, 0x08, 0xf1, 0xc6, 0xc6, 0x95, 0x31, 0x77, 0x21, 0x7b, 0x04, 0x77, 0xf6, 0x5e,
0x94, 0x10, 0x38, 0x6a, 0x2e, 0x8a, 0x7c, 0xf3, 0xcc, 0x9e, 0xc1, 0x49, 0xef, 0x78, 0x0d, 0xb1,
0x39, 0x9e, 0x23, 0x36, 0xcf, 0x6d, 0xb1, 0xdf, 0x29, 0xbe, 0x86, 0xd3, 0x7d, 0x87, 0x23, 0x09,
0x44, 0x38, 0xcc, 0x62, 0xd3, 0xaf, 0x9b, 0x22, 0xe7, 0xad, 0x1f, 0xb8, 0x20, 0xea, 0xee, 0x64,
0xc9, 0x29, 0x04, 0x2a, 0x57, 0xa9, 0xf5, 0x7b, 0xcc, 0x6d, 0xc0, 0x3e, 0xc3, 0xd9, 0x7c, 0x8b,
0xd7, 0xdf, 0xb5, 0xdf, 0xc0, 0xfb, 0x73, 0x03, 0xbf, 0xdb, 0xe0, 0xa7, 0x07, 0xf7, 0x0e, 0xda,
0xf8, 0x17, 0xd7, 0xa3, 0x10, 0xae, 0x64, 0x7d, 0x29, 0xbe, 0xb9, 0x05, 0x5d, 0x88, 0xc8, 0xa7,
0x52, 0x14, 0xe6, 0x4d, 0xb5, 0x48, 0x13, 0x6e, 0x26, 0x0e, 0xba, 0x13, 0x9f, 0xc3, 0xf8, 0xfd,
0x95, 0xdc, 0xcc, 0x78, 0x17, 0x86, 0xfa, 0x7b, 0x3b, 0xde, 0x88, 0x63, 0xc4, 0x1e, 0xc3, 0xc9,
0x85, 0xd0, 0x69, 0xb6, 0x45, 0xa6, 0x10, 0x5a, 0xb8, 0xa2, 0x5e, 0x32, 0x98, 0x8c, 0xb8, 0x0b,
0xd9, 0x0b, 0xa4, 0x73, 0x59, 0xac, 0x5b, 0xfa, 0x43, 0xb8, 0x89, 0xbf, 0x6f, 0xcb, 0x8f, 0x66,
0x31, 0xbe, 0xfa, 0xc8, 0xe0, 0x2d, 0xce, 0x6e, 0x41, 0xcc, 0x65, 0x2a, 0x97, 0xed, 0x37, 0x34,
0x1b, 0x41, 0x88, 0xe8, 0x97, 0xa1, 0xf9, 0xfb, 0x3f, 0xf9, 0x1d, 0x00, 0x00, 0xff, 0xff, 0x9e,
0x3b, 0x2b, 0xb0, 0x0e, 0x06, 0x00, 0x00,
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment