LCOV - code coverage report
Current view: top level - flamenco/runtime/program - fd_zk_elgamal_proof_program.c (source / functions) Hit Total Coverage
Test: cov.lcov Lines: 15 72 20.8 %
Date: 2025-12-04 04:56:06 Functions: 1 1 100.0 %

          Line data    Source code
       1             : #include "fd_zk_elgamal_proof_program.h"
       2             : #include "zksdk/fd_zksdk.h"
       3             : #include "../fd_executor.h"
       4             : #include "../fd_runtime.h"
       5             : #include "../fd_bank.h"
       6             : #include "../../log_collector/fd_log_collector.h"
       7             : 
       8             : /*
       9             :  * ZK ElGamal Proof Program
      10             :  */
      11             : 
      12             : int
      13           3 : fd_executor_zk_elgamal_proof_program_execute( fd_exec_instr_ctx_t * ctx ) {
      14             :   /* Feature-gate program activation */
      15           3 :   if( FD_UNLIKELY( !FD_FEATURE_ACTIVE_BANK( ctx->bank, zk_elgamal_proof_program_enabled ) ) ) {
      16           0 :     return FD_EXECUTOR_INSTR_ERR_UNSUPPORTED_PROGRAM_ID;
      17           0 :   }
      18             : 
      19             :   /* https://github.com/anza-xyz/agave/blob/v2.2.16/programs/zk-elgamal-proof/src/lib.rs#L175-L187 */
      20           3 :   if( FD_LIKELY(  FD_FEATURE_ACTIVE_BANK( ctx->bank, disable_zk_elgamal_proof_program )
      21           3 :               && !FD_FEATURE_ACTIVE_BANK( ctx->bank, reenable_zk_elgamal_proof_program ) ) ) {
      22           0 :     fd_log_collector_msg_literal( ctx, "zk-elgamal-proof program is temporarily disabled" );
      23           0 :     return FD_EXECUTOR_INSTR_ERR_INVALID_INSTR_DATA;
      24           0 :   }
      25             : 
      26           3 :   uchar const * instr_data    = ctx->instr->data;
      27           3 :   ulong         instr_data_sz = ctx->instr->data_sz;
      28             : 
      29             :   /* https://github.com/anza-xyz/agave/blob/v2.0.1/programs/zk-elgamal-proof/src/lib.rs#L172-L176 */
      30           3 :   if( FD_UNLIKELY( instr_data_sz==0UL ) ) {
      31           0 :     return FD_EXECUTOR_INSTR_ERR_INVALID_INSTR_DATA;
      32           0 :   }
      33             : 
      34           3 :   switch( instr_data[0] ) {
      35           0 :   case FD_ZKSDK_INSTR_CLOSE_CONTEXT_STATE:
      36             :     /* https://github.com/anza-xyz/agave/blob/v2.0.1/programs/zk-elgamal-proof/src/lib.rs#L179-L185 */
      37           0 :     FD_EXEC_CU_UPDATE( ctx, FD_ZKSDK_INSTR_CLOSE_CONTEXT_STATE_COMPUTE_UNITS );
      38           0 :     fd_log_collector_msg_literal( ctx, "CloseContextState" );
      39           0 :     return fd_zksdk_process_close_context_state( ctx );
      40             : 
      41           0 :   case FD_ZKSDK_INSTR_VERIFY_ZERO_CIPHERTEXT:
      42           0 :     FD_EXEC_CU_UPDATE( ctx, FD_ZKSDK_INSTR_VERIFY_ZERO_CIPHERTEXT_COMPUTE_UNITS );
      43           0 :     fd_log_collector_msg_literal( ctx, "VerifyZeroCiphertext" );
      44           0 :     break;
      45             : 
      46           0 :   case FD_ZKSDK_INSTR_VERIFY_CIPHERTEXT_CIPHERTEXT_EQUALITY:
      47           0 :     FD_EXEC_CU_UPDATE( ctx, FD_ZKSDK_INSTR_VERIFY_CIPHERTEXT_CIPHERTEXT_EQUALITY_COMPUTE_UNITS );
      48           0 :     fd_log_collector_msg_literal( ctx, "VerifyCiphertextCiphertextEquality" );
      49           0 :     break;
      50             : 
      51           0 :   case FD_ZKSDK_INSTR_VERIFY_CIPHERTEXT_COMMITMENT_EQUALITY:
      52           0 :     FD_EXEC_CU_UPDATE( ctx, FD_ZKSDK_INSTR_VERIFY_CIPHERTEXT_COMMITMENT_EQUALITY_COMPUTE_UNITS );
      53           0 :     fd_log_collector_msg_literal( ctx, "VerifyCiphertextCommitmentEquality" );
      54           0 :     break;
      55             : 
      56           3 :   case FD_ZKSDK_INSTR_VERIFY_PUBKEY_VALIDITY:
      57           3 :     FD_EXEC_CU_UPDATE( ctx, FD_ZKSDK_INSTR_VERIFY_PUBKEY_VALIDITY_COMPUTE_UNITS );
      58           3 :     fd_log_collector_msg_literal( ctx, "VerifyPubkeyValidity" );
      59           3 :     break;
      60             : 
      61           0 :   case FD_ZKSDK_INSTR_VERIFY_PERCENTAGE_WITH_CAP:
      62           0 :     FD_EXEC_CU_UPDATE( ctx, FD_ZKSDK_INSTR_VERIFY_PERCENTAGE_WITH_CAP_COMPUTE_UNITS );
      63           0 :     fd_log_collector_msg_literal( ctx, "VerifyPercentageWithCap" );
      64           0 :     break;
      65             : 
      66           0 :   case FD_ZKSDK_INSTR_VERIFY_BATCHED_RANGE_PROOF_U64:
      67           0 :     FD_EXEC_CU_UPDATE( ctx, FD_ZKSDK_INSTR_VERIFY_BATCHED_RANGE_PROOF_U64_COMPUTE_UNITS );
      68           0 :     fd_log_collector_msg_literal( ctx, "VerifyBatchedRangeProofU64" );
      69           0 :     break;
      70             : 
      71           0 :   case FD_ZKSDK_INSTR_VERIFY_BATCHED_RANGE_PROOF_U128:
      72           0 :     FD_EXEC_CU_UPDATE( ctx, FD_ZKSDK_INSTR_VERIFY_BATCHED_RANGE_PROOF_U128_COMPUTE_UNITS );
      73           0 :     fd_log_collector_msg_literal( ctx, "VerifyBatchedRangeProofU128" );
      74           0 :     break;
      75             : 
      76           0 :   case FD_ZKSDK_INSTR_VERIFY_BATCHED_RANGE_PROOF_U256:
      77           0 :     FD_EXEC_CU_UPDATE( ctx, FD_ZKSDK_INSTR_VERIFY_BATCHED_RANGE_PROOF_U256_COMPUTE_UNITS );
      78           0 :     fd_log_collector_msg_literal( ctx, "VerifyBatchedRangeProofU256" );
      79           0 :     break;
      80             : 
      81           0 :   case FD_ZKSDK_INSTR_VERIFY_GROUPED_CIPHERTEXT_2_HANDLES_VALIDITY:
      82           0 :     FD_EXEC_CU_UPDATE( ctx, FD_ZKSDK_INSTR_VERIFY_GROUPED_CIPHERTEXT_2_HANDLES_VALIDITY_COMPUTE_UNITS );
      83           0 :     fd_log_collector_msg_literal( ctx, "VerifyGroupedCiphertext2HandlesValidity" );
      84           0 :     break;
      85             : 
      86           0 :   case FD_ZKSDK_INSTR_VERIFY_BATCHED_GROUPED_CIPHERTEXT_2_HANDLES_VALIDITY:
      87           0 :     FD_EXEC_CU_UPDATE( ctx, FD_ZKSDK_INSTR_VERIFY_BATCHED_GROUPED_CIPHERTEXT_2_HANDLES_VALIDITY_COMPUTE_UNITS );
      88           0 :     fd_log_collector_msg_literal( ctx, "VerifyBatchedGroupedCiphertext2HandlesValidity" );
      89           0 :     break;
      90             : 
      91           0 :   case FD_ZKSDK_INSTR_VERIFY_GROUPED_CIPHERTEXT_3_HANDLES_VALIDITY:
      92           0 :     FD_EXEC_CU_UPDATE( ctx, FD_ZKSDK_INSTR_VERIFY_GROUPED_CIPHERTEXT_3_HANDLES_VALIDITY_COMPUTE_UNITS );
      93           0 :     fd_log_collector_msg_literal( ctx, "VerifyGroupedCiphertext3HandlesValidity" );
      94           0 :     break;
      95             : 
      96           0 :   case FD_ZKSDK_INSTR_VERIFY_BATCHED_GROUPED_CIPHERTEXT_3_HANDLES_VALIDITY:
      97           0 :     FD_EXEC_CU_UPDATE( ctx, FD_ZKSDK_INSTR_VERIFY_BATCHED_GROUPED_CIPHERTEXT_3_HANDLES_VALIDITY_COMPUTE_UNITS );
      98           0 :     fd_log_collector_msg_literal( ctx, "VerifyBatchedGroupedCiphertext3HandlesValidity" );
      99           0 :     break;
     100             : 
     101           0 :   default:
     102           0 :     return FD_EXECUTOR_INSTR_ERR_INVALID_INSTR_DATA;
     103           3 :   }
     104             : 
     105           3 :   return fd_zksdk_process_verify_proof( ctx );
     106           3 : }

Generated by: LCOV version 1.14