-
Notifications
You must be signed in to change notification settings - Fork 1
/
kvpair.proto
177 lines (150 loc) · 4.17 KB
/
kvpair.proto
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
syntax = "proto3";
import "google/api/annotations.proto";
package kvpair;
message NodeChildren {
bytes left_child_hash = 5;
bytes right_child_hash = 6;
}
enum NodeType {
NodeUnspecified = 0;
NodeLeaf = 1;
NodeNonLeaf = 2;
NodeInvalid = 3;
}
message Node {
uint64 index = 1;
bytes hash = 2;
NodeType node_type = 3;
oneof node_data {
bytes data = 4;
NodeChildren children = 5;
}
}
enum ProofType {
ProofUnspecified = 0; // Default enum value, equivalent to ProofEmpty
ProofEmpty = 1; // No proof
ProofV0 = 2;
}
// A proof to validate whether some key value pair exists in the KVStore.
message Proof {
ProofType proof_type = 1;
bytes proof = 2;
}
message GetRootRequest { optional bytes contract_id = 1; }
message GetRootResponse { bytes root = 1; }
message SetRootRequest {
optional bytes contract_id = 1;
bytes hash = 2;
}
message SetRootResponse { bytes root = 1; }
message GetLeafRequest {
optional bytes contract_id = 1;
uint64 index = 2;
optional bytes hash = 3;
ProofType proof_type = 4;
}
message GetLeafResponse {
Node node = 1;
optional Proof proof = 2;
}
message GetNonLeafRequest {
optional bytes contract_id = 1;
uint64 index = 2;
bytes hash = 3;
}
message GetNonLeafResponse { Node node = 1; }
message SetLeafRequest {
optional bytes contract_id = 1;
uint64 index = 2;
optional bytes hash = 3;
optional bytes data = 4;
ProofType proof_type = 5;
}
message SetLeafResponse {
Node node = 1;
optional Proof proof = 2;
}
message SetNonLeafRequest {
optional bytes contract_id = 1;
uint64 index = 2;
optional bytes hash = 3;
bytes left_child_hash = 4;
bytes right_child_hash = 5;
}
message SetNonLeafResponse { Node node = 1; }
message PoseidonHashRequest {
optional bytes contract_id = 1;
// Because the original data we want to hash can be any binary data,
// it may not be a valid input to the poseidon hash function
// (which takes an array of field elements as input), we may need to
// pad or modify the original data to hash it. This parameter is the
// transformed data which can be feeded into poseidon hash function directly.
// As the way of transforming the of original data is non-standard,
// the caller MUST pass the transformed data here. It is guarenteed
// that the hash returned here is stable.
bytes data = 2;
}
message PoseidonHashResponse { bytes hash = 1; }
enum DataHashRecordMode {
ModeUnspecified = 0; // Default enum value, don't use this
ModeStore = 1;
ModeFetch = 2;
}
message DataHashRecordRequest {
optional bytes contract_id = 1;
// The hash of the data we want to save to the database.
// In ModeFetch, we will fetch data hash record with this hash.
// In ModeStore, we will save data hash record with this hash and data below.
optional bytes hash = 2;
// The binary data that we want save to the database.
optional bytes data = 3;
// The operation mode, may be ModeFetch or ModeStore to indicate
// whether we are storing or fetching the data.
optional DataHashRecordMode mode = 4;
}
message DataHashRecordResponse {
bytes hash = 1;
bytes data = 2;
}
service KVPair {
rpc GetRoot(GetRootRequest) returns (GetRootResponse) {
option (google.api.http) = {
get : "/v1/root"
};
}
rpc SetRoot(SetRootRequest) returns (SetRootResponse) {
option (google.api.http) = {
post : "/v1/root"
};
}
rpc GetLeaf(GetLeafRequest) returns (GetLeafResponse) {
option (google.api.http) = {
get : "/v1/leaves"
};
}
rpc SetLeaf(SetLeafRequest) returns (SetLeafResponse) {
option (google.api.http) = {
post : "/v1/leaves"
};
}
rpc GetNonLeaf(GetNonLeafRequest) returns (GetNonLeafResponse) {
option (google.api.http) = {
get : "/v1/nonleaves"
};
}
rpc SetNonLeaf(SetNonLeafRequest) returns (SetNonLeafResponse) {
option (google.api.http) = {
post : "/v1/nonleaves"
};
}
rpc PoseidonHash(PoseidonHashRequest) returns (PoseidonHashResponse) {
option (google.api.http) = {
post : "/v1/poseidon"
};
}
rpc DataHashRecord(DataHashRecordRequest) returns (DataHashRecordResponse) {
option (google.api.http) = {
post : "/v1/datahashrecord"
};
}
}