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

Generated by: LCOV version 1.14