Skip to content

Commit f168869

Browse files
committed
extract state
1 parent c240ef0 commit f168869

File tree

5 files changed

+123
-82
lines changed

5 files changed

+123
-82
lines changed

backend/mo/canisters/ic_vetkeys_encrypted_maps_canister/mops.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,3 @@ license = "Apache-2.0"
1010

1111
[dependencies]
1212
base = "0.14.6"
13-
ic-vetkeys = "0.3.0"

backend/mo/canisters/ic_vetkeys_encrypted_maps_canister/src/Main.mo

Lines changed: 27 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,17 @@
1-
import IcVetkeys "mo:ic-vetkeys";
2-
import Types "mo:ic-vetkeys/Types";
1+
import IcVetkeys "../../../ic_vetkeys/src";
2+
import Types "../../../ic_vetkeys/src/Types";
33
import Principal "mo:base/Principal";
44
import Text "mo:base/Text";
55
import Blob "mo:base/Blob";
66
import Result "mo:base/Result";
77
import Array "mo:base/Array";
88

9-
actor class (keyName : Text) {
10-
var encryptedMaps = IcVetkeys.EncryptedMaps.EncryptedMaps<Types.AccessRights>({ curve = #bls12_381_g2; name = keyName }, "encrypted maps dapp", Types.accessRightsOperations());
9+
persistent actor class (keyName : Text) {
10+
let encryptedMapsState = IcVetkeys.EncryptedMaps.newEncryptedMapsState<Types.AccessRights>(
11+
{ curve = #bls12_381_g2; name = keyName },
12+
"encrypted maps dapp",
13+
);
14+
1115
/// In this canister, we use the `ByteBuf` type to represent blobs. The reason is that we want to be consistent with the Rust canister implementation.
1216
/// Unfortunately, the `Blob` type cannot be serialized/deserialized in the current Rust implementation efficiently without nesting it in another type.
1317
public type ByteBuf = { inner : Blob };
@@ -25,9 +29,13 @@ actor class (keyName : Text) {
2529
#Err : Err;
2630
};
2731

32+
func getEncryptedMaps() : IcVetkeys.EncryptedMaps.EncryptedMaps<Types.AccessRights> {
33+
IcVetkeys.EncryptedMaps.EncryptedMaps<Types.AccessRights>(encryptedMapsState, Types.accessRightsOperations());
34+
};
35+
2836
public query (msg) func get_accessible_shared_map_names() : async [(Principal, ByteBuf)] {
2937
Array.map<(Principal, Blob), (Principal, ByteBuf)>(
30-
encryptedMaps.getAccessibleSharedMapNames(msg.caller),
38+
getEncryptedMaps().getAccessibleSharedMapNames(msg.caller),
3139

3240
func((principal, blob) : (Principal, Blob)) {
3341
(principal, { inner = blob });
@@ -39,14 +47,14 @@ actor class (keyName : Text) {
3947
map_owner : Principal,
4048
map_name : ByteBuf,
4149
) : async Result<[(Principal, Types.AccessRights)], Text> {
42-
convertResult(encryptedMaps.getSharedUserAccessForMap(msg.caller, (map_owner, map_name.inner)));
50+
convertResult(getEncryptedMaps().getSharedUserAccessForMap(msg.caller, (map_owner, map_name.inner)));
4351
};
4452

4553
public query (msg) func get_encrypted_values_for_map(
4654
map_owner : Principal,
4755
map_name : ByteBuf,
4856
) : async Result<[(ByteBuf, ByteBuf)], Text> {
49-
let result = encryptedMaps.getEncryptedValuesForMap(msg.caller, (map_owner, map_name.inner));
57+
let result = getEncryptedMaps().getEncryptedValuesForMap(msg.caller, (map_owner, map_name.inner));
5058
switch (result) {
5159
case (#err(e)) { #Err(e) };
5260
case (#ok(values)) {
@@ -64,7 +72,7 @@ actor class (keyName : Text) {
6472

6573
public query (msg) func get_all_accessible_encrypted_values() : async [((Principal, ByteBuf), [(ByteBuf, ByteBuf)])] {
6674
Array.map<((Principal, Blob), [(Blob, Blob)]), ((Principal, ByteBuf), [(ByteBuf, ByteBuf)])>(
67-
encryptedMaps.getAllAccessibleEncryptedValues(msg.caller),
75+
getEncryptedMaps().getAllAccessibleEncryptedValues(msg.caller),
6876
func(((owner, map_name), values) : ((Principal, Blob), [(Blob, Blob)])) {
6977
(
7078
(owner, { inner = map_name }),
@@ -81,7 +89,7 @@ actor class (keyName : Text) {
8189

8290
public query (msg) func get_all_accessible_encrypted_maps() : async [EncryptedMapData] {
8391
Array.map<IcVetkeys.EncryptedMaps.EncryptedMapData<Types.AccessRights>, EncryptedMapData>(
84-
encryptedMaps.getAllAccessibleEncryptedMaps(msg.caller),
92+
getEncryptedMaps().getAllAccessibleEncryptedMaps(msg.caller),
8593
func(map : IcVetkeys.EncryptedMaps.EncryptedMapData<Types.AccessRights>) : EncryptedMapData {
8694
{
8795
map_owner = map.map_owner;
@@ -103,7 +111,7 @@ actor class (keyName : Text) {
103111
map_name : ByteBuf,
104112
map_key : ByteBuf,
105113
) : async Result<?ByteBuf, Text> {
106-
let result = encryptedMaps.getEncryptedValue(msg.caller, (map_owner, map_name.inner), map_key.inner);
114+
let result = getEncryptedMaps().getEncryptedValue(msg.caller, (map_owner, map_name.inner), map_key.inner);
107115
switch (result) {
108116
case (#err(e)) { #Err(e) };
109117
case (#ok(null)) { #Ok(null) };
@@ -115,7 +123,7 @@ actor class (keyName : Text) {
115123
map_owner : Principal,
116124
map_name : ByteBuf,
117125
) : async Result<[ByteBuf], Text> {
118-
let result = encryptedMaps.removeMapValues(msg.caller, (map_owner, map_name.inner));
126+
let result = getEncryptedMaps().removeMapValues(msg.caller, (map_owner, map_name.inner));
119127
switch (result) {
120128
case (#err(e)) { #Err(e) };
121129
case (#ok(values)) {
@@ -133,7 +141,7 @@ actor class (keyName : Text) {
133141

134142
public query (msg) func get_owned_non_empty_map_names() : async [ByteBuf] {
135143
Array.map<Blob, ByteBuf>(
136-
encryptedMaps.getOwnedNonEmptyMapNames(msg.caller),
144+
getEncryptedMaps().getOwnedNonEmptyMapNames(msg.caller),
137145
func(blob : Blob) : ByteBuf {
138146
{ inner = blob };
139147
},
@@ -146,7 +154,7 @@ actor class (keyName : Text) {
146154
map_key : ByteBuf,
147155
value : ByteBuf,
148156
) : async Result<?ByteBuf, Text> {
149-
let result = encryptedMaps.insertEncryptedValue(msg.caller, (map_owner, map_name.inner), map_key.inner, value.inner);
157+
let result = getEncryptedMaps().insertEncryptedValue(msg.caller, (map_owner, map_name.inner), map_key.inner, value.inner);
150158
switch (result) {
151159
case (#err(e)) { #Err(e) };
152160
case (#ok(null)) { #Ok(null) };
@@ -159,7 +167,7 @@ actor class (keyName : Text) {
159167
map_name : ByteBuf,
160168
map_key : ByteBuf,
161169
) : async Result<?ByteBuf, Text> {
162-
let result = encryptedMaps.removeEncryptedValue(msg.caller, (map_owner, map_name.inner), map_key.inner);
170+
let result = getEncryptedMaps().removeEncryptedValue(msg.caller, (map_owner, map_name.inner), map_key.inner);
163171
switch (result) {
164172
case (#err(e)) { #Err(e) };
165173
case (#ok(null)) { #Ok(null) };
@@ -168,7 +176,7 @@ actor class (keyName : Text) {
168176
};
169177

170178
public shared func get_vetkey_verification_key() : async ByteBuf {
171-
let inner = await encryptedMaps.getVetkeyVerificationKey();
179+
let inner = await getEncryptedMaps().getVetkeyVerificationKey();
172180
{ inner };
173181
};
174182

@@ -177,7 +185,7 @@ actor class (keyName : Text) {
177185
map_name : ByteBuf,
178186
transport_key : ByteBuf,
179187
) : async Result<ByteBuf, Text> {
180-
let result = await encryptedMaps.getEncryptedVetkey(msg.caller, (map_owner, map_name.inner), transport_key.inner);
188+
let result = await getEncryptedMaps().getEncryptedVetkey(msg.caller, (map_owner, map_name.inner), transport_key.inner);
181189
switch (result) {
182190
case (#err(e)) { #Err(e) };
183191
case (#ok(vetkey)) { #Ok({ inner = vetkey }) };
@@ -189,7 +197,7 @@ actor class (keyName : Text) {
189197
map_name : ByteBuf,
190198
user : Principal,
191199
) : async Result<?Types.AccessRights, Text> {
192-
convertResult(encryptedMaps.getUserRights(msg.caller, (map_owner, map_name.inner), user));
200+
convertResult(getEncryptedMaps().getUserRights(msg.caller, (map_owner, map_name.inner), user));
193201
};
194202

195203
public shared (msg) func set_user_rights(
@@ -198,15 +206,15 @@ actor class (keyName : Text) {
198206
user : Principal,
199207
access_rights : Types.AccessRights,
200208
) : async Result<?Types.AccessRights, Text> {
201-
convertResult(encryptedMaps.setUserRights(msg.caller, (map_owner, map_name.inner), user, access_rights));
209+
convertResult(getEncryptedMaps().setUserRights(msg.caller, (map_owner, map_name.inner), user, access_rights));
202210
};
203211

204212
public shared (msg) func remove_user(
205213
map_owner : Principal,
206214
map_name : ByteBuf,
207215
user : Principal,
208216
) : async Result<?Types.AccessRights, Text> {
209-
convertResult(encryptedMaps.removeUser(msg.caller, (map_owner, map_name.inner), user));
217+
convertResult(getEncryptedMaps().removeUser(msg.caller, (map_owner, map_name.inner), user));
210218
};
211219

212220
/// Convert to the result type compatible with Rust's `Result`

backend/mo/canisters/ic_vetkeys_manager_canister/src/Main.mo

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,13 @@ import Blob "mo:base/Blob";
66
import Result "mo:base/Result";
77
import Array "mo:base/Array";
88

9-
actor class (keyName : Text) {
10-
var keyManager = IcVetkeys.KeyManager.KeyManager<Types.AccessRights>({ curve = #bls12_381_g2; name = keyName }, "key manager", Types.accessRightsOperations());
9+
persistent actor class (keyName : Text) {
10+
let keyManagerState = IcVetkeys.KeyManager.newKeyManagerState<Types.AccessRights>({ curve = #bls12_381_g2; name = keyName }, "key manager");
11+
12+
func getKeyManager() : IcVetkeys.KeyManager.KeyManager<Types.AccessRights> {
13+
IcVetkeys.KeyManager.KeyManager<Types.AccessRights>(keyManagerState, Types.accessRightsOperations());
14+
};
15+
1116
/// In this canister, we use the `ByteBuf` type to represent blobs. The reason is that we want to be consistent with the Rust canister implementation.
1217
/// Unfortunately, the `Blob` type cannot be serialized/deserialized in the current Rust implementation efficiently without nesting it in another type.
1318
public type ByteBuf = { inner : Blob };
@@ -20,7 +25,7 @@ actor class (keyName : Text) {
2025

2126
public query (msg) func get_accessible_shared_key_ids() : async [(Principal, ByteBuf)] {
2227
Array.map<(Principal, Blob), (Principal, ByteBuf)>(
23-
keyManager.getAccessibleSharedKeyIds(msg.caller),
28+
getKeyManager().getAccessibleSharedKeyIds(msg.caller),
2429
func((principal, blob) : (Principal, Blob)) {
2530
(principal, { inner = blob });
2631
},
@@ -31,11 +36,11 @@ actor class (keyName : Text) {
3136
key_owner : Principal,
3237
key_name : ByteBuf,
3338
) : async Result<[(Principal, Types.AccessRights)], Text> {
34-
convertResult(keyManager.getSharedUserAccessForKey(msg.caller, (key_owner, key_name.inner)));
39+
convertResult(getKeyManager().getSharedUserAccessForKey(msg.caller, (key_owner, key_name.inner)));
3540
};
3641

3742
public shared func get_vetkey_verification_key() : async ByteBuf {
38-
let inner = await keyManager.getVetkeyVerificationKey();
43+
let inner = await getKeyManager().getVetkeyVerificationKey();
3944
{ inner };
4045
};
4146

@@ -44,7 +49,7 @@ actor class (keyName : Text) {
4449
key_name : ByteBuf,
4550
transport_key : ByteBuf,
4651
) : async Result<ByteBuf, Text> {
47-
let vetkeyBytebuf = await keyManager.getEncryptedVetkey(msg.caller, (key_owner, key_name.inner), transport_key.inner);
52+
let vetkeyBytebuf = await getKeyManager().getEncryptedVetkey(msg.caller, (key_owner, key_name.inner), transport_key.inner);
4853
switch (vetkeyBytebuf) {
4954
case (#err(e)) { #Err(e) };
5055
case (#ok(inner)) { #Ok({ inner }) };
@@ -56,7 +61,7 @@ actor class (keyName : Text) {
5661
key_name : ByteBuf,
5762
user : Principal,
5863
) : async Result<?Types.AccessRights, Text> {
59-
convertResult(keyManager.getUserRights(msg.caller, (key_owner, key_name.inner), user));
64+
convertResult(getKeyManager().getUserRights(msg.caller, (key_owner, key_name.inner), user));
6065
};
6166

6267
public shared (msg) func set_user_rights(
@@ -65,15 +70,15 @@ actor class (keyName : Text) {
6570
user : Principal,
6671
access_rights : Types.AccessRights,
6772
) : async Result<?Types.AccessRights, Text> {
68-
convertResult(keyManager.setUserRights(msg.caller, (key_owner, key_name.inner), user, access_rights));
73+
convertResult(getKeyManager().setUserRights(msg.caller, (key_owner, key_name.inner), user, access_rights));
6974
};
7075

7176
public shared (msg) func remove_user(
7277
key_owner : Principal,
7378
key_name : ByteBuf,
7479
user : Principal,
7580
) : async Result<?Types.AccessRights, Text> {
76-
convertResult(keyManager.removeUserRights(msg.caller, (key_owner, key_name.inner), user));
81+
convertResult(getKeyManager().removeUserRights(msg.caller, (key_owner, key_name.inner), user));
7782
};
7883

7984
/// Convert to the result type compatible with Rust's `Result`

0 commit comments

Comments
 (0)