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 0 : uchar const * instr_data = ctx->instr->data; 18 0 : ulong instr_data_sz = ctx->instr->data_sz; 19 : 20 : /* https://github.com/anza-xyz/agave/blob/v2.0.1/programs/zk-elgamal-proof/src/lib.rs#L172-L176 */ 21 0 : if( FD_UNLIKELY( instr_data_sz==0UL ) ) { 22 0 : return FD_EXECUTOR_INSTR_ERR_INVALID_INSTR_DATA; 23 0 : } 24 : 25 0 : switch( instr_data[0] ) { 26 0 : case FD_ZKSDK_INSTR_CLOSE_CONTEXT_STATE: 27 : /* https://github.com/anza-xyz/agave/blob/v2.0.1/programs/zk-elgamal-proof/src/lib.rs#L179-L185 */ 28 0 : FD_EXEC_CU_UPDATE( ctx, FD_ZKSDK_INSTR_CLOSE_CONTEXT_STATE_COMPUTE_UNITS ); 29 0 : fd_log_collector_msg_literal( ctx, "CloseContextState" ); 30 0 : return fd_zksdk_process_close_context_state( ctx ); 31 : 32 0 : case FD_ZKSDK_INSTR_VERIFY_ZERO_CIPHERTEXT: 33 0 : FD_EXEC_CU_UPDATE( ctx, FD_ZKSDK_INSTR_VERIFY_ZERO_CIPHERTEXT_COMPUTE_UNITS ); 34 0 : fd_log_collector_msg_literal( ctx, "VerifyZeroCiphertext" ); 35 0 : break; 36 : 37 0 : case FD_ZKSDK_INSTR_VERIFY_CIPHERTEXT_CIPHERTEXT_EQUALITY: 38 0 : FD_EXEC_CU_UPDATE( ctx, FD_ZKSDK_INSTR_VERIFY_CIPHERTEXT_CIPHERTEXT_EQUALITY_COMPUTE_UNITS ); 39 0 : fd_log_collector_msg_literal( ctx, "VerifyCiphertextCiphertextEquality" ); 40 0 : break; 41 : 42 0 : case FD_ZKSDK_INSTR_VERIFY_CIPHERTEXT_COMMITMENT_EQUALITY: 43 0 : FD_EXEC_CU_UPDATE( ctx, FD_ZKSDK_INSTR_VERIFY_CIPHERTEXT_COMMITMENT_EQUALITY_COMPUTE_UNITS ); 44 0 : fd_log_collector_msg_literal( ctx, "VerifyCiphertextCommitmentEquality" ); 45 0 : break; 46 : 47 0 : case FD_ZKSDK_INSTR_VERIFY_PUBKEY_VALIDITY: 48 0 : FD_EXEC_CU_UPDATE( ctx, FD_ZKSDK_INSTR_VERIFY_PUBKEY_VALIDITY_COMPUTE_UNITS ); 49 0 : fd_log_collector_msg_literal( ctx, "VerifyPubkeyValidity" ); 50 0 : break; 51 : 52 0 : case FD_ZKSDK_INSTR_VERIFY_PERCENTAGE_WITH_CAP: 53 0 : FD_EXEC_CU_UPDATE( ctx, FD_ZKSDK_INSTR_VERIFY_PERCENTAGE_WITH_CAP_COMPUTE_UNITS ); 54 0 : fd_log_collector_msg_literal( ctx, "VerifyPercentageWithCap" ); 55 0 : break; 56 : 57 0 : case FD_ZKSDK_INSTR_VERIFY_BATCHED_RANGE_PROOF_U64: 58 0 : FD_EXEC_CU_UPDATE( ctx, FD_ZKSDK_INSTR_VERIFY_BATCHED_RANGE_PROOF_U64_COMPUTE_UNITS ); 59 0 : fd_log_collector_msg_literal( ctx, "VerifyBatchedRangeProofU64" ); 60 0 : break; 61 : 62 0 : case FD_ZKSDK_INSTR_VERIFY_BATCHED_RANGE_PROOF_U128: 63 0 : FD_EXEC_CU_UPDATE( ctx, FD_ZKSDK_INSTR_VERIFY_BATCHED_RANGE_PROOF_U128_COMPUTE_UNITS ); 64 0 : fd_log_collector_msg_literal( ctx, "VerifyBatchedRangeProofU128" ); 65 0 : break; 66 : 67 0 : case FD_ZKSDK_INSTR_VERIFY_BATCHED_RANGE_PROOF_U256: 68 0 : FD_EXEC_CU_UPDATE( ctx, FD_ZKSDK_INSTR_VERIFY_BATCHED_RANGE_PROOF_U256_COMPUTE_UNITS ); 69 0 : fd_log_collector_msg_literal( ctx, "VerifyBatchedRangeProofU256" ); 70 0 : break; 71 : 72 0 : case FD_ZKSDK_INSTR_VERIFY_GROUPED_CIPHERTEXT_2_HANDLES_VALIDITY: 73 0 : FD_EXEC_CU_UPDATE( ctx, FD_ZKSDK_INSTR_VERIFY_GROUPED_CIPHERTEXT_2_HANDLES_VALIDITY_COMPUTE_UNITS ); 74 0 : fd_log_collector_msg_literal( ctx, "VerifyGroupedCiphertext2HandlesValidity" ); 75 0 : break; 76 : 77 0 : case FD_ZKSDK_INSTR_VERIFY_BATCHED_GROUPED_CIPHERTEXT_2_HANDLES_VALIDITY: 78 0 : FD_EXEC_CU_UPDATE( ctx, FD_ZKSDK_INSTR_VERIFY_BATCHED_GROUPED_CIPHERTEXT_2_HANDLES_VALIDITY_COMPUTE_UNITS ); 79 0 : fd_log_collector_msg_literal( ctx, "VerifyBatchedGroupedCiphertext2HandlesValidity" ); 80 0 : break; 81 : 82 0 : case FD_ZKSDK_INSTR_VERIFY_GROUPED_CIPHERTEXT_3_HANDLES_VALIDITY: 83 0 : FD_EXEC_CU_UPDATE( ctx, FD_ZKSDK_INSTR_VERIFY_GROUPED_CIPHERTEXT_3_HANDLES_VALIDITY_COMPUTE_UNITS ); 84 0 : fd_log_collector_msg_literal( ctx, "VerifyGroupedCiphertext3HandlesValidity" ); 85 0 : break; 86 : 87 0 : case FD_ZKSDK_INSTR_VERIFY_BATCHED_GROUPED_CIPHERTEXT_3_HANDLES_VALIDITY: 88 0 : FD_EXEC_CU_UPDATE( ctx, FD_ZKSDK_INSTR_VERIFY_BATCHED_GROUPED_CIPHERTEXT_3_HANDLES_VALIDITY_COMPUTE_UNITS ); 89 0 : fd_log_collector_msg_literal( ctx, "VerifyBatchedGroupedCiphertext3HandlesValidity" ); 90 0 : break; 91 : 92 0 : default: 93 0 : return FD_EXECUTOR_INSTR_ERR_INVALID_INSTR_DATA; 94 0 : } 95 : 96 0 : return fd_zksdk_process_verify_proof( ctx ); 97 0 : }