@@ -17,6 +17,7 @@ use crate::op;
1717
1818pub fn zu_kyc_sign_pod_builders (
1919 params : & Params ,
20+ sanction_set : & Set ,
2021) -> ( SignedPodBuilder , SignedPodBuilder , SignedPodBuilder ) {
2122 let mut gov_id = SignedPodBuilder :: new ( params) ;
2223 gov_id. insert ( "idNumber" , "4242424242" ) ;
@@ -28,11 +29,7 @@ pub fn zu_kyc_sign_pod_builders(
2829 pay_stub. insert ( "startDate" , 1706367566 ) ;
2930
3031 let mut sanction_list = SignedPodBuilder :: new ( params) ;
31- let sanctions_values = [ "A343434340" ] . map ( |s| crate :: middleware:: Value :: from ( hash_str ( s) ) ) ;
32- sanction_list. insert (
33- "sanctionList" ,
34- Value :: Set ( Set :: new ( & sanctions_values. to_vec ( ) ) . unwrap ( ) ) ,
35- ) ;
32+ sanction_list. insert ( "sanctionList" , Value :: Set ( sanction_set. clone ( ) ) ) ;
3633
3734 ( gov_id, pay_stub, sanction_list)
3835}
@@ -42,18 +39,23 @@ pub fn zu_kyc_pod_builder(
4239 gov_id : & SignedPod ,
4340 pay_stub : & SignedPod ,
4441 sanction_list : & SignedPod ,
42+ sanction_set : & Set ,
4543) -> Result < MainPodBuilder > {
4644 let now_minus_18y: i64 = 1169909388 ;
4745 let now_minus_1y: i64 = 1706367566 ;
4846
47+ let gov_id_kvs = gov_id. kvs ( ) ;
48+ let id_number_value = gov_id_kvs. get ( & "idNumber" . into ( ) ) . unwrap ( ) ;
49+
4950 let mut kyc = MainPodBuilder :: new ( params) ;
5051 kyc. add_signed_pod ( gov_id) ;
5152 kyc. add_signed_pod ( pay_stub) ;
5253 kyc. add_signed_pod ( sanction_list) ;
5354 kyc. pub_op ( op ! (
5455 not_contains,
5556 ( sanction_list, "sanctionList" ) ,
56- ( gov_id, "idNumber" )
57+ ( gov_id, "idNumber" ) ,
58+ sanction_set. prove_nonexistence( id_number_value) ?
5759 ) ) ?;
5860 kyc. pub_op ( op ! ( lt, ( gov_id, "dateOfBirth" ) , now_minus_18y) ) ?;
5961 kyc. pub_op ( op ! (
@@ -223,7 +225,7 @@ pub fn great_boy_pod_builder(
223225 params : & Params ,
224226 good_boy_pods : [ & SignedPod ; 4 ] ,
225227 friend_pods : [ & SignedPod ; 2 ] ,
226- good_boy_issuers : & Value ,
228+ good_boy_issuer_dict : & Dictionary ,
227229 receiver : & str ,
228230) -> Result < MainPodBuilder > {
229231 // Attestment chain (issuer -> good boy -> great boy):
@@ -250,6 +252,8 @@ pub fn great_boy_pod_builder(
250252 PodType :: MockSigned as i64
251253 ) ) ?;
252254 for issuer_idx in 0 ..2 {
255+ let pod_kvs = good_boy_pods[ good_boy_idx * 2 + issuer_idx] . kvs ( ) ;
256+
253257 // Type check
254258 great_boy. pub_op ( op ! (
255259 eq,
@@ -259,9 +263,12 @@ pub fn great_boy_pod_builder(
259263 // Each good boy POD comes from a valid issuer
260264 great_boy. pub_op ( op ! (
261265 contains,
262- good_boy_issuers ,
266+ Value :: Dictionary ( good_boy_issuer_dict . clone ( ) ) ,
263267 ( good_boy_pods[ good_boy_idx * 2 + issuer_idx] , KEY_SIGNER ) ,
264- 0
268+ 0 ,
269+ good_boy_issuer_dict
270+ . prove( pod_kvs. get( & KEY_SIGNER . into( ) ) . unwrap( ) ) ?
271+ . 1
265272 ) ) ?;
266273 // Each good boy has 2 good boy pods
267274 great_boy. pub_op ( op ! (
@@ -338,7 +345,13 @@ pub fn great_boy_pod_full_flow() -> Result<MainPodBuilder> {
338345 alice_friend_pods. push ( friend. sign ( & mut bob_signer) . unwrap ( ) ) ;
339346 alice_friend_pods. push ( friend. sign ( & mut charlie_signer) . unwrap ( ) ) ;
340347
341- let good_boy_issuers_dict = Value :: Dictionary ( Dictionary :: new ( & HashMap :: new ( ) ) ?) ; // empty
348+ let good_boy_issuer_dict = Dictionary :: new (
349+ & good_boy_issuers
350+ . into_iter ( )
351+ . map ( |issuer| ( crate :: middleware:: Hash :: from ( issuer) , 0 . into ( ) ) )
352+ . collect ( ) ,
353+ ) ?;
354+
342355 great_boy_pod_builder (
343356 & params,
344357 [
@@ -348,7 +361,7 @@ pub fn great_boy_pod_full_flow() -> Result<MainPodBuilder> {
348361 & charlie_good_boys[ 1 ] ,
349362 ] ,
350363 [ & alice_friend_pods[ 0 ] , & alice_friend_pods[ 1 ] ] ,
351- & good_boy_issuers_dict ,
364+ & good_boy_issuer_dict ,
352365 alice,
353366 )
354367}
@@ -374,7 +387,7 @@ pub fn tickets_pod_builder(
374387 expect_consumed : bool ,
375388 blacklisted_emails : & Dictionary ,
376389) -> Result < MainPodBuilder > {
377- let blacklisted_email_root = Value :: Dictionary ( blacklisted_emails. clone ( ) ) ;
390+ let blacklisted_email_dict_value = Value :: Dictionary ( blacklisted_emails. clone ( ) ) ;
378391 let attendee_email_statement: Statement = ( signed_pod, "attendeeEmail" ) . into ( ) ;
379392 let attendee_email_value = match attendee_email_statement. 1 . get ( 1 ) . cloned ( ) {
380393 Some ( crate :: frontend:: StatementArg :: Literal ( v) ) => Ok ( v) ,
@@ -390,7 +403,7 @@ pub fn tickets_pod_builder(
390403 builder. pub_op ( op ! ( eq, ( signed_pod, "isRevoked" ) , false ) ) ?;
391404 builder. pub_op ( op ! (
392405 not_contains,
393- blacklisted_email_root ,
406+ blacklisted_email_dict_value ,
394407 attendee_email_statement,
395408 blacklisted_emails. prove_nonexistence( & ( & attendee_email_value) . into( ) ) ?
396409 ) ) ?;
0 commit comments