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" ;
33import Principal "mo:base/Principal" ;
44import Text "mo:base/Text" ;
55import Blob "mo:base/Blob" ;
66import Result "mo:base/Result" ;
77import 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`
0 commit comments