-
Notifications
You must be signed in to change notification settings - Fork 0
/
mapping.proto
122 lines (102 loc) · 4.09 KB
/
mapping.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
syntax = "proto3";
import "types.proto"
import "ops.proto"
///////////////
// Mappings
///////////////
// Represents a new mapping. Entries can be added and updated in the
// mapping via the `Mapping Function Calls` specified below.
message Mapping {
string id = 1; // Client-supplied. Duplicates are rejected.
// Map of name to validator. The name must be unique within the mapping.
// The name of the operation is used to override mapping operations on updates if specified
// See `EntryUpdate` for more details on updating operations.
map<string, Validator> create_validator = 2; // All validators need to pass for create to be valid
map<string, Validator> update_validator = 3; // All validators need to pass for transition to be valid
types.MappingKeyType key_type = 4; // Key type of entries
types.MappingValueType value_type = 5; // Value type of entries
}
message Validator {
// Map of name to operation. the name must be unique within the validator.
// The name of the operation is used to override mapping operations on updates if specified
// See `EntryUpdate` for more details on updating operations.
//
// Validation passes if one of the operations return true.
map<string, ops.Operation> operation = 1;
}
///////////////
// Mapping Management Calls
///////////////
// Create a new mapping
message CreateMappingRequest {
Mapping mapping = 1;
}
message CreateMappingResponse {}
rpc CreateMapping (CreateMappingRequest) returns (CreateMappingResponse);
// Retrieve a mapping by its ID
message GetMappingRequest {
string id = 1;
}
message GetMappingResponse {
Mapping mapping = 1;
}
rpc GetMapping (GetMappingRequest) returns (GetMappingResponse);
///////////////
// Mapping Function Calls
///////////////
// Representation of a signature
message Signature {
oneof signature {
KeynetSignature keynet = 1;
CASignature ca = 2;
}
message KeynetSignature {
types.Alias alias = 1;
string signature = 2;
}
message CASignature {
string certificate = 1;
string signature = 2;
}
}
// An entry update can be creation or update or deletion of an entry in
// a given mapping. Signatures are computed over this payload.
message EntryUpdate {
string mapping_id = 1; // ID of the Mapping in which to create/update/delete an entry
types.MappingKey key = 2;
types.Mappingvalue value = 3;
// Validators that override the default Mapping validators on the next update. If update_validator
// is specified, then the following EntryUpdates must pass the specified validators to succeed. The default
// Mapping validators are not evaluated.
//
// If a new list of Validators is specified again in the next update, it will override previous specified
// update_validator.
//
// To ensure that the security of the mapping is not weakened, there is an additional restriction that
// only validators defined in the original `Mapping` can be overridden. New validators cannot be introduced.
// The name of the validator (key of the map) must match the key of the `update_validator` map in the
// `Mapping` definition. Wthin the Validator, new Operations cannot be introduced, only updated. The type
// of the updated Operation must match the original type.
//
// Not all operations need to be specified in the map. Keynet keeps track of the state of the validators.
//
map<string, Validator> update_validator = 4; // optional
}
// Create or update an existing entry. Validators on the Mapping and on the last entry must pass in order
// for the update to succeed.
message UpdateRequest {
EntryUpdate update = 1;
repeated Signature signature = 2;
}
message UpdateResponse {}
rpc Update (UpdateRequest) returns (UpdateResponse);
// Retrieve an existing entry from a mapping given a key.
message GetRequest {
string mapping_id = 1;
types.MappingKey key = 2;
}
message GetResponse {
string mapping_id = 1;
types.MappingValue value = 2;
}
rpc Get (GetRequest) returns (GetResponse);