diff --git a/src/grpc/gen/executor.pb.cc b/src/grpc/gen/executor.pb.cc index cf7ef8377..92f014e0c 100644 --- a/src/grpc/gen/executor.pb.cc +++ b/src/grpc/gen/executor.pb.cc @@ -372,6 +372,7 @@ const ::PROTOBUF_NAMESPACE_ID::uint32 TableStruct_executor_2eproto::offsets[] PR PROTOBUF_FIELD_OFFSET(::executor::v1::ProcessBatchRequest, contracts_bytecode_), PROTOBUF_FIELD_OFFSET(::executor::v1::ProcessBatchRequest, trace_config_), PROTOBUF_FIELD_OFFSET(::executor::v1::ProcessBatchRequest, external_request_id_), + PROTOBUF_FIELD_OFFSET(::executor::v1::ProcessBatchRequest, get_keys_), PROTOBUF_FIELD_OFFSET(::executor::v1::ProcessBatchResponse_ReadWriteAddressesEntry_DoNotUse, _has_bits_), PROTOBUF_FIELD_OFFSET(::executor::v1::ProcessBatchResponse_ReadWriteAddressesEntry_DoNotUse, _internal_metadata_), ~0u, // no _extensions_ @@ -404,6 +405,8 @@ const ::PROTOBUF_NAMESPACE_ID::uint32 TableStruct_executor_2eproto::offsets[] PR PROTOBUF_FIELD_OFFSET(::executor::v1::ProcessBatchResponse, flush_id_), PROTOBUF_FIELD_OFFSET(::executor::v1::ProcessBatchResponse, stored_flush_id_), PROTOBUF_FIELD_OFFSET(::executor::v1::ProcessBatchResponse, prover_id_), + PROTOBUF_FIELD_OFFSET(::executor::v1::ProcessBatchResponse, nodes_keys_), + PROTOBUF_FIELD_OFFSET(::executor::v1::ProcessBatchResponse, program_keys_), ~0u, // no _has_bits_ PROTOBUF_FIELD_OFFSET(::executor::v1::GetFlushStatusResponse, _internal_metadata_), ~0u, // no _extensions_ @@ -554,19 +557,19 @@ static const ::PROTOBUF_NAMESPACE_ID::internal::MigrationSchema schemas[] PROTOB { 0, 7, sizeof(::executor::v1::ProcessBatchRequest_DbEntry_DoNotUse)}, { 9, 16, sizeof(::executor::v1::ProcessBatchRequest_ContractsBytecodeEntry_DoNotUse)}, { 18, -1, sizeof(::executor::v1::ProcessBatchRequest)}, - { 39, 46, sizeof(::executor::v1::ProcessBatchResponse_ReadWriteAddressesEntry_DoNotUse)}, - { 48, -1, sizeof(::executor::v1::ProcessBatchResponse)}, - { 71, -1, sizeof(::executor::v1::GetFlushStatusResponse)}, - { 84, -1, sizeof(::executor::v1::TraceConfig)}, - { 95, -1, sizeof(::executor::v1::InfoReadWrite)}, - { 102, -1, sizeof(::executor::v1::CallTrace)}, - { 109, -1, sizeof(::executor::v1::TransactionContext)}, - { 126, -1, sizeof(::executor::v1::TransactionStep)}, - { 145, -1, sizeof(::executor::v1::Contract)}, - { 156, -1, sizeof(::executor::v1::ProcessTransactionResponse)}, - { 176, -1, sizeof(::executor::v1::Log)}, - { 189, 196, sizeof(::executor::v1::ExecutionTraceStep_StorageEntry_DoNotUse)}, - { 198, -1, sizeof(::executor::v1::ExecutionTraceStep)}, + { 40, 47, sizeof(::executor::v1::ProcessBatchResponse_ReadWriteAddressesEntry_DoNotUse)}, + { 49, -1, sizeof(::executor::v1::ProcessBatchResponse)}, + { 74, -1, sizeof(::executor::v1::GetFlushStatusResponse)}, + { 87, -1, sizeof(::executor::v1::TraceConfig)}, + { 98, -1, sizeof(::executor::v1::InfoReadWrite)}, + { 105, -1, sizeof(::executor::v1::CallTrace)}, + { 112, -1, sizeof(::executor::v1::TransactionContext)}, + { 129, -1, sizeof(::executor::v1::TransactionStep)}, + { 148, -1, sizeof(::executor::v1::Contract)}, + { 159, -1, sizeof(::executor::v1::ProcessTransactionResponse)}, + { 179, -1, sizeof(::executor::v1::Log)}, + { 192, 199, sizeof(::executor::v1::ExecutionTraceStep_StorageEntry_DoNotUse)}, + { 201, -1, sizeof(::executor::v1::ExecutionTraceStep)}, }; static ::PROTOBUF_NAMESPACE_ID::Message const * const file_default_instances[] = { @@ -590,7 +593,7 @@ static ::PROTOBUF_NAMESPACE_ID::Message const * const file_default_instances[] = const char descriptor_table_protodef_executor_2eproto[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = "\n\016executor.proto\022\013executor.v1\032\033google/pr" - "otobuf/empty.proto\"\331\004\n\023ProcessBatchReque" + "otobuf/empty.proto\"\353\004\n\023ProcessBatchReque" "st\022\026\n\016old_state_root\030\001 \001(\014\022\032\n\022old_acc_in" "put_hash\030\002 \001(\014\022\025\n\rold_batch_num\030\003 \001(\004\022\020\n" "\010chain_id\030\004 \001(\004\022\017\n\007fork_id\030\005 \001(\004\022\025\n\rbatc" @@ -603,210 +606,212 @@ const char descriptor_table_protodef_executor_2eproto[] PROTOBUF_SECTION_VARIABL "1.ProcessBatchRequest.ContractsBytecodeE" "ntry\022.\n\014trace_config\030\017 \001(\0132\030.executor.v1" ".TraceConfig\022\033\n\023external_request_id\030\020 \001(" - "\t\032)\n\007DbEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t" - ":\0028\001\0328\n\026ContractsBytecodeEntry\022\013\n\003key\030\001 " - "\001(\t\022\r\n\005value\030\002 \001(\t:\0028\001\"\241\005\n\024ProcessBatchR" - "esponse\022\026\n\016new_state_root\030\001 \001(\014\022\032\n\022new_a" - "cc_input_hash\030\002 \001(\014\022\033\n\023new_local_exit_ro" - "ot\030\003 \001(\014\022\025\n\rnew_batch_num\030\004 \001(\004\022\031\n\021cnt_k" - "eccak_hashes\030\005 \001(\r\022\033\n\023cnt_poseidon_hashe" - "s\030\006 \001(\r\022\035\n\025cnt_poseidon_paddings\030\007 \001(\r\022\026" - "\n\016cnt_mem_aligns\030\010 \001(\r\022\027\n\017cnt_arithmetic" - "s\030\t \001(\r\022\024\n\014cnt_binaries\030\n \001(\r\022\021\n\tcnt_ste" - "ps\030\013 \001(\r\022\033\n\023cumulative_gas_used\030\014 \001(\004\022:\n" - "\tresponses\030\r \003(\0132\'.executor.v1.ProcessTr" - "ansactionResponse\022)\n\005error\030\016 \001(\0162\032.execu" - "tor.v1.ExecutorError\022W\n\024read_write_addre" - "sses\030\017 \003(\01329.executor.v1.ProcessBatchRes" - "ponse.ReadWriteAddressesEntry\022\020\n\010flush_i" - "d\030\020 \001(\004\022\027\n\017stored_flush_id\030\021 \001(\004\022\021\n\tprov" - "er_id\030\022 \001(\t\032U\n\027ReadWriteAddressesEntry\022\013" - "\n\003key\030\001 \001(\t\022)\n\005value\030\002 \001(\0132\032.executor.v1" - ".InfoReadWrite:\0028\001\"\347\001\n\026GetFlushStatusRes" - "ponse\022\027\n\017stored_flush_id\030\001 \001(\004\022\030\n\020storin" - "g_flush_id\030\002 \001(\004\022\025\n\rlast_flush_id\030\003 \001(\004\022" - "\036\n\026pending_to_flush_nodes\030\004 \001(\004\022 \n\030pendi" - "ng_to_flush_program\030\005 \001(\004\022\025\n\rstoring_nod" - "es\030\006 \001(\004\022\027\n\017storing_program\030\007 \001(\004\022\021\n\tpro" - "ver_id\030\010 \001(\t\"\303\001\n\013TraceConfig\022\027\n\017disable_" - "storage\030\001 \001(\r\022\025\n\rdisable_stack\030\002 \001(\r\022\025\n\r" - "enable_memory\030\003 \001(\r\022\032\n\022enable_return_dat" - "a\030\004 \001(\r\022)\n!tx_hash_to_generate_execute_t" - "race\030\005 \001(\014\022&\n\036tx_hash_to_generate_call_t" - "race\030\006 \001(\014\"/\n\rInfoReadWrite\022\r\n\005nonce\030\001 \001" - "(\t\022\017\n\007balance\030\002 \001(\t\"j\n\tCallTrace\0220\n\007cont" - "ext\030\001 \001(\0132\037.executor.v1.TransactionConte" - "xt\022+\n\005steps\030\002 \003(\0132\034.executor.v1.Transact" - "ionStep\"\332\001\n\022TransactionContext\022\014\n\004type\030\001" - " \001(\t\022\014\n\004from\030\002 \001(\t\022\n\n\002to\030\003 \001(\t\022\014\n\004data\030\004" - " \001(\014\022\013\n\003gas\030\005 \001(\004\022\r\n\005value\030\006 \001(\t\022\r\n\005batc" - "h\030\007 \001(\014\022\016\n\006output\030\010 \001(\014\022\020\n\010gas_used\030\t \001(" - "\004\022\021\n\tgas_price\030\n \001(\t\022\026\n\016execution_time\030\013" - " \001(\r\022\026\n\016old_state_root\030\014 \001(\014\"\256\002\n\017Transac" - "tionStep\022\022\n\nstate_root\030\001 \001(\014\022\r\n\005depth\030\002 " - "\001(\r\022\n\n\002pc\030\003 \001(\004\022\013\n\003gas\030\004 \001(\004\022\020\n\010gas_cost" - "\030\005 \001(\004\022\022\n\ngas_refund\030\006 \001(\004\022\n\n\002op\030\007 \001(\r\022\r" - "\n\005stack\030\010 \003(\t\022\016\n\006memory\030\t \001(\014\022\023\n\013memory_" - "size\030\n \001(\r\022\025\n\rmemory_offset\030\013 \001(\r\022\023\n\013ret" - "urn_data\030\014 \001(\014\022\'\n\010contract\030\r \001(\0132\025.execu" - "tor.v1.Contract\022$\n\005error\030\016 \001(\0162\025.executo" - "r.v1.RomError\"c\n\010Contract\022\017\n\007address\030\001 \001" - "(\t\022\016\n\006caller\030\002 \001(\t\022\r\n\005value\030\003 \001(\t\022\014\n\004dat" - "a\030\004 \001(\014\022\013\n\003gas\030\005 \001(\004\022\014\n\004type\030\006 \001(\t\"\256\003\n\032P" - "rocessTransactionResponse\022\017\n\007tx_hash\030\001 \001" - "(\014\022\016\n\006rlp_tx\030\002 \001(\014\022\014\n\004type\030\003 \001(\r\022\024\n\014retu" - "rn_value\030\004 \001(\014\022\020\n\010gas_left\030\005 \001(\004\022\020\n\010gas_" - "used\030\006 \001(\004\022\024\n\014gas_refunded\030\007 \001(\004\022$\n\005erro" - "r\030\010 \001(\0162\025.executor.v1.RomError\022\026\n\016create" - "_address\030\t \001(\t\022\022\n\nstate_root\030\n \001(\014\022\036\n\004lo" - "gs\030\013 \003(\0132\020.executor.v1.Log\0228\n\017execution_" - "trace\030\r \003(\0132\037.executor.v1.ExecutionTrace" - "Step\022*\n\ncall_trace\030\016 \001(\0132\026.executor.v1.C" - "allTrace\022\033\n\023effective_gas_price\030\017 \001(\t\022\034\n" - "\024effective_percentage\030\020 \001(\r\"\220\001\n\003Log\022\017\n\007a" - "ddress\030\001 \001(\t\022\016\n\006topics\030\002 \003(\014\022\014\n\004data\030\003 \001" - "(\014\022\024\n\014batch_number\030\004 \001(\004\022\017\n\007tx_hash\030\005 \001(" - "\014\022\020\n\010tx_index\030\006 \001(\r\022\022\n\nbatch_hash\030\007 \001(\014\022" - "\r\n\005index\030\010 \001(\r\"\355\002\n\022ExecutionTraceStep\022\n\n" - "\002pc\030\001 \001(\004\022\n\n\002op\030\002 \001(\t\022\025\n\rremaining_gas\030\003" - " \001(\004\022\020\n\010gas_cost\030\004 \001(\004\022\016\n\006memory\030\005 \001(\014\022\023" - "\n\013memory_size\030\006 \001(\r\022\025\n\rmemory_offset\030\007 \001" - "(\r\022\r\n\005stack\030\010 \003(\t\022\023\n\013return_data\030\t \001(\014\022=" - "\n\007storage\030\n \003(\0132,.executor.v1.ExecutionT" - "raceStep.StorageEntry\022\r\n\005depth\030\013 \001(\r\022\022\n\n" - "gas_refund\030\014 \001(\004\022$\n\005error\030\r \001(\0162\025.execut" - "or.v1.RomError\032.\n\014StorageEntry\022\013\n\003key\030\001 " - "\001(\t\022\r\n\005value\030\002 \001(\t:\0028\001*\306\010\n\010RomError\022\031\n\025R" - "OM_ERROR_UNSPECIFIED\020\000\022\026\n\022ROM_ERROR_NO_E" - "RROR\020\001\022\030\n\024ROM_ERROR_OUT_OF_GAS\020\002\022\034\n\030ROM_" - "ERROR_STACK_OVERFLOW\020\003\022\035\n\031ROM_ERROR_STAC" - "K_UNDERFLOW\020\004\022$\n ROM_ERROR_MAX_CODE_SIZE" - "_EXCEEDED\020\005\022(\n$ROM_ERROR_CONTRACT_ADDRES" - "S_COLLISION\020\006\022 \n\034ROM_ERROR_EXECUTION_REV" - "ERTED\020\007\022\"\n\036ROM_ERROR_OUT_OF_COUNTERS_STE" - "P\020\010\022$\n ROM_ERROR_OUT_OF_COUNTERS_KECCAK\020" - "\t\022$\n ROM_ERROR_OUT_OF_COUNTERS_BINARY\020\n\022" - "!\n\035ROM_ERROR_OUT_OF_COUNTERS_MEM\020\013\022#\n\037RO" - "M_ERROR_OUT_OF_COUNTERS_ARITH\020\014\022%\n!ROM_E" - "RROR_OUT_OF_COUNTERS_PADDING\020\r\022&\n\"ROM_ER" - "ROR_OUT_OF_COUNTERS_POSEIDON\020\016\022\032\n\026ROM_ER" - "ROR_INVALID_JUMP\020\017\022\034\n\030ROM_ERROR_INVALID_" - "OPCODE\020\020\022\034\n\030ROM_ERROR_INVALID_STATIC\020\021\022(" - "\n$ROM_ERROR_INVALID_BYTECODE_STARTS_EF\020\022" - "\022)\n%ROM_ERROR_INTRINSIC_INVALID_SIGNATUR" - "E\020\023\022(\n$ROM_ERROR_INTRINSIC_INVALID_CHAIN" - "_ID\020\024\022%\n!ROM_ERROR_INTRINSIC_INVALID_NON" - "CE\020\025\022)\n%ROM_ERROR_INTRINSIC_INVALID_GAS_" - "LIMIT\020\026\022\'\n#ROM_ERROR_INTRINSIC_INVALID_B" - "ALANCE\020\027\022/\n+ROM_ERROR_INTRINSIC_INVALID_" - "BATCH_GAS_LIMIT\020\030\022+\n\'ROM_ERROR_INTRINSIC" - "_INVALID_SENDER_CODE\020\031\022\'\n#ROM_ERROR_INTR" - "INSIC_TX_GAS_OVERFLOW\020\032\022 \n\034ROM_ERROR_BAT" - "CH_DATA_TOO_BIG\020\033\022!\n\035ROM_ERROR_UNSUPPORT" - "ED_FORK_ID\020\034\022\031\n\025ROM_ERROR_INVALID_RLP\020\035*" - "\356\035\n\rExecutorError\022\036\n\032EXECUTOR_ERROR_UNSP" - "ECIFIED\020\000\022\033\n\027EXECUTOR_ERROR_NO_ERROR\020\001\022\033" - "\n\027EXECUTOR_ERROR_DB_ERROR\020\002\0222\n.EXECUTOR_" - "ERROR_SM_MAIN_COUNTERS_OVERFLOW_STEPS\020\003\022" - "3\n/EXECUTOR_ERROR_SM_MAIN_COUNTERS_OVERF" - "LOW_KECCAK\020\004\0223\n/EXECUTOR_ERROR_SM_MAIN_C" - "OUNTERS_OVERFLOW_BINARY\020\005\0220\n,EXECUTOR_ER" - "ROR_SM_MAIN_COUNTERS_OVERFLOW_MEM\020\006\0222\n.E" - "XECUTOR_ERROR_SM_MAIN_COUNTERS_OVERFLOW_" - "ARITH\020\007\0224\n0EXECUTOR_ERROR_SM_MAIN_COUNTE" - "RS_OVERFLOW_PADDING\020\010\0225\n1EXECUTOR_ERROR_" - "SM_MAIN_COUNTERS_OVERFLOW_POSEIDON\020\t\022&\n\"" - "EXECUTOR_ERROR_UNSUPPORTED_FORK_ID\020\n\022#\n\037" - "EXECUTOR_ERROR_BALANCE_MISMATCH\020\013\022\035\n\031EXE" - "CUTOR_ERROR_FEA2SCALAR\020\014\022\030\n\024EXECUTOR_ERR" - "OR_TOS32\020\r\022.\n*EXECUTOR_ERROR_SM_MAIN_INV" - "ALID_UNSIGNED_TX\020\016\022.\n*EXECUTOR_ERROR_SM_" - "MAIN_INVALID_NO_COUNTERS\020\017\0229\n5EXECUTOR_E" - "RROR_SM_MAIN_ARITH_ECRECOVER_DIVIDE_BY_Z" - "ERO\020\020\022/\n+EXECUTOR_ERROR_SM_MAIN_ADDRESS_" - "OUT_OF_RANGE\020\021\022+\n\'EXECUTOR_ERROR_SM_MAIN" - "_ADDRESS_NEGATIVE\020\022\022.\n*EXECUTOR_ERROR_SM" - "_MAIN_STORAGE_INVALID_KEY\020\023\022 \n\034EXECUTOR_" - "ERROR_SM_MAIN_HASHK\020\024\0222\n.EXECUTOR_ERROR_" - "SM_MAIN_HASHK_SIZE_OUT_OF_RANGE\020\025\0222\n.EXE" - "CUTOR_ERROR_SM_MAIN_HASHK_POSITION_NEGAT" - "IVE\020\026\022@\n\0222\n.EXECUTOR_ERROR_SM_" - "MAIN_MEMALIGN_WRITE_MISMATCH\020\?\0223\n/EXECUT" - "OR_ERROR_SM_MAIN_MEMALIGN_WRITE8_MISMATC" - "H\020@\0221\n-EXECUTOR_ERROR_SM_MAIN_MEMALIGN_R" - "EAD_MISMATCH\020A\022,\n(EXECUTOR_ERROR_SM_MAIN" - "_JMPN_OUT_OF_RANGE\020B\0222\n.EXECUTOR_ERROR_S" - "M_MAIN_HASHK_READ_OUT_OF_RANGE\020C\0222\n.EXEC" - "UTOR_ERROR_SM_MAIN_HASHP_READ_OUT_OF_RAN" - "GE\020D\022)\n%EXECUTOR_ERROR_INVALID_OLD_STATE" - "_ROOT\020E\022-\n)EXECUTOR_ERROR_INVALID_OLD_AC" - "C_INPUT_HASH\020F\022#\n\037EXECUTOR_ERROR_INVALID" - "_CHAIN_ID\020G\022(\n$EXECUTOR_ERROR_INVALID_BA" - "TCH_L2_DATA\020H\022+\n\'EXECUTOR_ERROR_INVALID_" - "GLOBAL_EXIT_ROOT\020I\022#\n\037EXECUTOR_ERROR_INV" - "ALID_COINBASE\020J\022\037\n\033EXECUTOR_ERROR_INVALI" - "D_FROM\020K\022!\n\035EXECUTOR_ERROR_INVALID_DB_KE" - "Y\020L\022#\n\037EXECUTOR_ERROR_INVALID_DB_VALUE\020M" - "\0221\n-EXECUTOR_ERROR_INVALID_CONTRACTS_BYT" - "ECODE_KEY\020N\0223\n/EXECUTOR_ERROR_INVALID_CO" - "NTRACTS_BYTECODE_VALUE\020O2\271\001\n\017ExecutorSer" - "vice\022U\n\014ProcessBatch\022 .executor.v1.Proce" - "ssBatchRequest\032!.executor.v1.ProcessBatc" - "hResponse\"\000\022O\n\016GetFlushStatus\022\026.google.p" - "rotobuf.Empty\032#.executor.v1.GetFlushStat" - "usResponse\"\000B>Z\0222" + "\n.EXECUTOR_ERROR_SM_MAIN_MEMALIGN_WRITE_" + "MISMATCH\020\?\0223\n/EXECUTOR_ERROR_SM_MAIN_MEM" + "ALIGN_WRITE8_MISMATCH\020@\0221\n-EXECUTOR_ERRO" + "R_SM_MAIN_MEMALIGN_READ_MISMATCH\020A\022,\n(EX" + "ECUTOR_ERROR_SM_MAIN_JMPN_OUT_OF_RANGE\020B" + "\0222\n.EXECUTOR_ERROR_SM_MAIN_HASHK_READ_OU" + "T_OF_RANGE\020C\0222\n.EXECUTOR_ERROR_SM_MAIN_H" + "ASHP_READ_OUT_OF_RANGE\020D\022)\n%EXECUTOR_ERR" + "OR_INVALID_OLD_STATE_ROOT\020E\022-\n)EXECUTOR_" + "ERROR_INVALID_OLD_ACC_INPUT_HASH\020F\022#\n\037EX" + "ECUTOR_ERROR_INVALID_CHAIN_ID\020G\022(\n$EXECU" + "TOR_ERROR_INVALID_BATCH_L2_DATA\020H\022+\n\'EXE" + "CUTOR_ERROR_INVALID_GLOBAL_EXIT_ROOT\020I\022#" + "\n\037EXECUTOR_ERROR_INVALID_COINBASE\020J\022\037\n\033E" + "XECUTOR_ERROR_INVALID_FROM\020K\022!\n\035EXECUTOR" + "_ERROR_INVALID_DB_KEY\020L\022#\n\037EXECUTOR_ERRO" + "R_INVALID_DB_VALUE\020M\0221\n-EXECUTOR_ERROR_I" + "NVALID_CONTRACTS_BYTECODE_KEY\020N\0223\n/EXECU" + "TOR_ERROR_INVALID_CONTRACTS_BYTECODE_VAL" + "UE\020O\022\"\n\036EXECUTOR_ERROR_INVALID_GET_KEY\020P" + "2\271\001\n\017ExecutorService\022U\n\014ProcessBatch\022 .e" + "xecutor.v1.ProcessBatchRequest\032!.executo" + "r.v1.ProcessBatchResponse\"\000\022O\n\016GetFlushS" + "tatus\022\026.google.protobuf.Empty\032#.executor" + ".v1.GetFlushStatusResponse\"\000B>Z(reinterpret_cast(&update_merkle_tree_) - - reinterpret_cast(&old_batch_num_)) + sizeof(update_merkle_tree_)); + static_cast(reinterpret_cast(&get_keys_) - + reinterpret_cast(&old_batch_num_)) + sizeof(get_keys_)); // @@protoc_insertion_point(copy_constructor:executor.v1.ProcessBatchRequest) } @@ -1094,8 +1100,8 @@ void ProcessBatchRequest::SharedCtor() { from_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited()); external_request_id_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited()); ::memset(&trace_config_, 0, static_cast( - reinterpret_cast(&update_merkle_tree_) - - reinterpret_cast(&trace_config_)) + sizeof(update_merkle_tree_)); + reinterpret_cast(&get_keys_) - + reinterpret_cast(&trace_config_)) + sizeof(get_keys_)); } ProcessBatchRequest::~ProcessBatchRequest() { @@ -1151,8 +1157,8 @@ void ProcessBatchRequest::Clear() { } trace_config_ = nullptr; ::memset(&old_batch_num_, 0, static_cast( - reinterpret_cast(&update_merkle_tree_) - - reinterpret_cast(&old_batch_num_)) + sizeof(update_merkle_tree_)); + reinterpret_cast(&get_keys_) - + reinterpret_cast(&old_batch_num_)) + sizeof(get_keys_)); _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(); } @@ -1296,6 +1302,13 @@ const char* ProcessBatchRequest::_InternalParse(const char* ptr, ::PROTOBUF_NAME CHK_(ptr); } else goto handle_unusual; continue; + // uint32 get_keys = 17; + case 17: + if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 136)) { + get_keys_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint32(&ptr); + CHK_(ptr); + } else goto handle_unusual; + continue; default: { handle_unusual: if ((tag & 7) == 4 || tag == 0) { @@ -1512,6 +1525,12 @@ ::PROTOBUF_NAMESPACE_ID::uint8* ProcessBatchRequest::_InternalSerialize( 16, this->_internal_external_request_id(), target); } + // uint32 get_keys = 17; + if (this->get_keys() != 0) { + target = stream->EnsureSpace(target); + target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteUInt32ToArray(17, this->_internal_get_keys(), target); + } + if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) { target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::InternalSerializeUnknownFieldsToArray( _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream); @@ -1644,6 +1663,13 @@ size_t ProcessBatchRequest::ByteSizeLong() const { this->_internal_update_merkle_tree()); } + // uint32 get_keys = 17; + if (this->get_keys() != 0) { + total_size += 2 + + ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::UInt32Size( + this->_internal_get_keys()); + } + if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) { return ::PROTOBUF_NAMESPACE_ID::internal::ComputeUnknownFieldsSize( _internal_metadata_, total_size, &_cached_size_); @@ -1719,6 +1745,9 @@ void ProcessBatchRequest::MergeFrom(const ProcessBatchRequest& from) { if (from.update_merkle_tree() != 0) { _internal_set_update_merkle_tree(from._internal_update_merkle_tree()); } + if (from.get_keys() != 0) { + _internal_set_get_keys(from._internal_get_keys()); + } } void ProcessBatchRequest::CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) { @@ -1752,8 +1781,8 @@ void ProcessBatchRequest::InternalSwap(ProcessBatchRequest* other) { from_.Swap(&other->from_, &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena()); external_request_id_.Swap(&other->external_request_id_, &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena()); ::PROTOBUF_NAMESPACE_ID::internal::memswap< - PROTOBUF_FIELD_OFFSET(ProcessBatchRequest, update_merkle_tree_) - + sizeof(ProcessBatchRequest::update_merkle_tree_) + PROTOBUF_FIELD_OFFSET(ProcessBatchRequest, get_keys_) + + sizeof(ProcessBatchRequest::get_keys_) - PROTOBUF_FIELD_OFFSET(ProcessBatchRequest, trace_config_)>( reinterpret_cast(&trace_config_), reinterpret_cast(&other->trace_config_)); @@ -1792,14 +1821,18 @@ class ProcessBatchResponse::_Internal { ProcessBatchResponse::ProcessBatchResponse(::PROTOBUF_NAMESPACE_ID::Arena* arena) : ::PROTOBUF_NAMESPACE_ID::Message(arena), responses_(arena), - read_write_addresses_(arena) { + read_write_addresses_(arena), + nodes_keys_(arena), + program_keys_(arena) { SharedCtor(); RegisterArenaDtor(arena); // @@protoc_insertion_point(arena_constructor:executor.v1.ProcessBatchResponse) } ProcessBatchResponse::ProcessBatchResponse(const ProcessBatchResponse& from) : ::PROTOBUF_NAMESPACE_ID::Message(), - responses_(from.responses_) { + responses_(from.responses_), + nodes_keys_(from.nodes_keys_), + program_keys_(from.program_keys_) { _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_); read_write_addresses_.MergeFrom(from.read_write_addresses_); new_state_root_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited()); @@ -1876,6 +1909,8 @@ void ProcessBatchResponse::Clear() { responses_.Clear(); read_write_addresses_.Clear(); + nodes_keys_.Clear(); + program_keys_.Clear(); new_state_root_.ClearToEmpty(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena()); new_acc_input_hash_.ClearToEmpty(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena()); new_local_exit_root_.ClearToEmpty(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena()); @@ -2036,6 +2071,32 @@ const char* ProcessBatchResponse::_InternalParse(const char* ptr, ::PROTOBUF_NAM CHK_(ptr); } else goto handle_unusual; continue; + // repeated bytes nodes_keys = 19; + case 19: + if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 154)) { + ptr -= 2; + do { + ptr += 2; + auto str = _internal_add_nodes_keys(); + ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParser(str, ptr, ctx); + CHK_(ptr); + if (!ctx->DataAvailable(ptr)) break; + } while (::PROTOBUF_NAMESPACE_ID::internal::ExpectTag<154>(ptr)); + } else goto handle_unusual; + continue; + // repeated bytes program_keys = 20; + case 20: + if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 162)) { + ptr -= 2; + do { + ptr += 2; + auto str = _internal_add_program_keys(); + ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParser(str, ptr, ctx); + CHK_(ptr); + if (!ctx->DataAvailable(ptr)) break; + } while (::PROTOBUF_NAMESPACE_ID::internal::ExpectTag<162>(ptr)); + } else goto handle_unusual; + continue; default: { handle_unusual: if ((tag & 7) == 4 || tag == 0) { @@ -2214,6 +2275,18 @@ ::PROTOBUF_NAMESPACE_ID::uint8* ProcessBatchResponse::_InternalSerialize( 18, this->_internal_prover_id(), target); } + // repeated bytes nodes_keys = 19; + for (int i = 0, n = this->_internal_nodes_keys_size(); i < n; i++) { + const auto& s = this->_internal_nodes_keys(i); + target = stream->WriteBytes(19, s, target); + } + + // repeated bytes program_keys = 20; + for (int i = 0, n = this->_internal_program_keys_size(); i < n; i++) { + const auto& s = this->_internal_program_keys(i); + target = stream->WriteBytes(20, s, target); + } + if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) { target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::InternalSerializeUnknownFieldsToArray( _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream); @@ -2246,6 +2319,22 @@ size_t ProcessBatchResponse::ByteSizeLong() const { total_size += ProcessBatchResponse_ReadWriteAddressesEntry_DoNotUse::Funcs::ByteSizeLong(it->first, it->second); } + // repeated bytes nodes_keys = 19; + total_size += 2 * + ::PROTOBUF_NAMESPACE_ID::internal::FromIntSize(nodes_keys_.size()); + for (int i = 0, n = nodes_keys_.size(); i < n; i++) { + total_size += ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::BytesSize( + nodes_keys_.Get(i)); + } + + // repeated bytes program_keys = 20; + total_size += 2 * + ::PROTOBUF_NAMESPACE_ID::internal::FromIntSize(program_keys_.size()); + for (int i = 0, n = program_keys_.size(); i < n; i++) { + total_size += ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::BytesSize( + program_keys_.Get(i)); + } + // bytes new_state_root = 1; if (this->new_state_root().size() > 0) { total_size += 1 + @@ -2390,6 +2479,8 @@ void ProcessBatchResponse::MergeFrom(const ProcessBatchResponse& from) { responses_.MergeFrom(from.responses_); read_write_addresses_.MergeFrom(from.read_write_addresses_); + nodes_keys_.MergeFrom(from.nodes_keys_); + program_keys_.MergeFrom(from.program_keys_); if (from.new_state_root().size() > 0) { _internal_set_new_state_root(from._internal_new_state_root()); } @@ -2463,6 +2554,8 @@ void ProcessBatchResponse::InternalSwap(ProcessBatchResponse* other) { _internal_metadata_.Swap<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(&other->_internal_metadata_); responses_.InternalSwap(&other->responses_); read_write_addresses_.Swap(&other->read_write_addresses_); + nodes_keys_.InternalSwap(&other->nodes_keys_); + program_keys_.InternalSwap(&other->program_keys_); new_state_root_.Swap(&other->new_state_root_, &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena()); new_acc_input_hash_.Swap(&other->new_acc_input_hash_, &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena()); new_local_exit_root_.Swap(&other->new_local_exit_root_, &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena()); diff --git a/src/grpc/gen/executor.pb.h b/src/grpc/gen/executor.pb.h index 86a0d22ce..4fc91c060 100644 --- a/src/grpc/gen/executor.pb.h +++ b/src/grpc/gen/executor.pb.h @@ -266,12 +266,13 @@ enum ExecutorError : int { EXECUTOR_ERROR_INVALID_DB_VALUE = 77, EXECUTOR_ERROR_INVALID_CONTRACTS_BYTECODE_KEY = 78, EXECUTOR_ERROR_INVALID_CONTRACTS_BYTECODE_VALUE = 79, + EXECUTOR_ERROR_INVALID_GET_KEY = 80, ExecutorError_INT_MIN_SENTINEL_DO_NOT_USE_ = std::numeric_limits<::PROTOBUF_NAMESPACE_ID::int32>::min(), ExecutorError_INT_MAX_SENTINEL_DO_NOT_USE_ = std::numeric_limits<::PROTOBUF_NAMESPACE_ID::int32>::max() }; bool ExecutorError_IsValid(int value); constexpr ExecutorError ExecutorError_MIN = EXECUTOR_ERROR_UNSPECIFIED; -constexpr ExecutorError ExecutorError_MAX = EXECUTOR_ERROR_INVALID_CONTRACTS_BYTECODE_VALUE; +constexpr ExecutorError ExecutorError_MAX = EXECUTOR_ERROR_INVALID_GET_KEY; constexpr int ExecutorError_ARRAYSIZE = ExecutorError_MAX + 1; const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* ExecutorError_descriptor(); @@ -488,6 +489,7 @@ class ProcessBatchRequest PROTOBUF_FINAL : kEthTimestampFieldNumber = 8, kNoCountersFieldNumber = 11, kUpdateMerkleTreeFieldNumber = 10, + kGetKeysFieldNumber = 17, }; // map db = 13; int db_size() const; @@ -770,6 +772,15 @@ class ProcessBatchRequest PROTOBUF_FINAL : void _internal_set_update_merkle_tree(::PROTOBUF_NAMESPACE_ID::uint32 value); public: + // uint32 get_keys = 17; + void clear_get_keys(); + ::PROTOBUF_NAMESPACE_ID::uint32 get_keys() const; + void set_get_keys(::PROTOBUF_NAMESPACE_ID::uint32 value); + private: + ::PROTOBUF_NAMESPACE_ID::uint32 _internal_get_keys() const; + void _internal_set_get_keys(::PROTOBUF_NAMESPACE_ID::uint32 value); + public: + // @@protoc_insertion_point(class_scope:executor.v1.ProcessBatchRequest) private: class _Internal; @@ -803,6 +814,7 @@ class ProcessBatchRequest PROTOBUF_FINAL : ::PROTOBUF_NAMESPACE_ID::uint64 eth_timestamp_; ::PROTOBUF_NAMESPACE_ID::uint64 no_counters_; ::PROTOBUF_NAMESPACE_ID::uint32 update_merkle_tree_; + ::PROTOBUF_NAMESPACE_ID::uint32 get_keys_; mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_; friend struct ::TableStruct_executor_2eproto; }; @@ -956,6 +968,8 @@ class ProcessBatchResponse PROTOBUF_FINAL : enum : int { kResponsesFieldNumber = 13, kReadWriteAddressesFieldNumber = 15, + kNodesKeysFieldNumber = 19, + kProgramKeysFieldNumber = 20, kNewStateRootFieldNumber = 1, kNewAccInputHashFieldNumber = 2, kNewLocalExitRootFieldNumber = 3, @@ -1008,6 +1022,54 @@ class ProcessBatchResponse PROTOBUF_FINAL : ::PROTOBUF_NAMESPACE_ID::Map< std::string, ::executor::v1::InfoReadWrite >* mutable_read_write_addresses(); + // repeated bytes nodes_keys = 19; + int nodes_keys_size() const; + private: + int _internal_nodes_keys_size() const; + public: + void clear_nodes_keys(); + const std::string& nodes_keys(int index) const; + std::string* mutable_nodes_keys(int index); + void set_nodes_keys(int index, const std::string& value); + void set_nodes_keys(int index, std::string&& value); + void set_nodes_keys(int index, const char* value); + void set_nodes_keys(int index, const void* value, size_t size); + std::string* add_nodes_keys(); + void add_nodes_keys(const std::string& value); + void add_nodes_keys(std::string&& value); + void add_nodes_keys(const char* value); + void add_nodes_keys(const void* value, size_t size); + const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField& nodes_keys() const; + ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField* mutable_nodes_keys(); + private: + const std::string& _internal_nodes_keys(int index) const; + std::string* _internal_add_nodes_keys(); + public: + + // repeated bytes program_keys = 20; + int program_keys_size() const; + private: + int _internal_program_keys_size() const; + public: + void clear_program_keys(); + const std::string& program_keys(int index) const; + std::string* mutable_program_keys(int index); + void set_program_keys(int index, const std::string& value); + void set_program_keys(int index, std::string&& value); + void set_program_keys(int index, const char* value); + void set_program_keys(int index, const void* value, size_t size); + std::string* add_program_keys(); + void add_program_keys(const std::string& value); + void add_program_keys(std::string&& value); + void add_program_keys(const char* value); + void add_program_keys(const void* value, size_t size); + const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField& program_keys() const; + ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField* mutable_program_keys(); + private: + const std::string& _internal_program_keys(int index) const; + std::string* _internal_add_program_keys(); + public: + // bytes new_state_root = 1; void clear_new_state_root(); const std::string& new_state_root() const; @@ -1230,6 +1292,8 @@ class ProcessBatchResponse PROTOBUF_FINAL : ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::TYPE_STRING, ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::TYPE_MESSAGE, 0 > read_write_addresses_; + ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField nodes_keys_; + ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField program_keys_; ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr new_state_root_; ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr new_acc_input_hash_; ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr new_local_exit_root_; @@ -5003,6 +5067,26 @@ inline void ProcessBatchRequest::unsafe_arena_set_allocated_external_request_id( // @@protoc_insertion_point(field_unsafe_arena_set_allocated:executor.v1.ProcessBatchRequest.external_request_id) } +// uint32 get_keys = 17; +inline void ProcessBatchRequest::clear_get_keys() { + get_keys_ = 0u; +} +inline ::PROTOBUF_NAMESPACE_ID::uint32 ProcessBatchRequest::_internal_get_keys() const { + return get_keys_; +} +inline ::PROTOBUF_NAMESPACE_ID::uint32 ProcessBatchRequest::get_keys() const { + // @@protoc_insertion_point(field_get:executor.v1.ProcessBatchRequest.get_keys) + return _internal_get_keys(); +} +inline void ProcessBatchRequest::_internal_set_get_keys(::PROTOBUF_NAMESPACE_ID::uint32 value) { + + get_keys_ = value; +} +inline void ProcessBatchRequest::set_get_keys(::PROTOBUF_NAMESPACE_ID::uint32 value) { + _internal_set_get_keys(value); + // @@protoc_insertion_point(field_set:executor.v1.ProcessBatchRequest.get_keys) +} + // ------------------------------------------------------------------- // ------------------------------------------------------------------- @@ -5641,6 +5725,154 @@ inline void ProcessBatchResponse::unsafe_arena_set_allocated_prover_id( // @@protoc_insertion_point(field_unsafe_arena_set_allocated:executor.v1.ProcessBatchResponse.prover_id) } +// repeated bytes nodes_keys = 19; +inline int ProcessBatchResponse::_internal_nodes_keys_size() const { + return nodes_keys_.size(); +} +inline int ProcessBatchResponse::nodes_keys_size() const { + return _internal_nodes_keys_size(); +} +inline void ProcessBatchResponse::clear_nodes_keys() { + nodes_keys_.Clear(); +} +inline std::string* ProcessBatchResponse::add_nodes_keys() { + // @@protoc_insertion_point(field_add_mutable:executor.v1.ProcessBatchResponse.nodes_keys) + return _internal_add_nodes_keys(); +} +inline const std::string& ProcessBatchResponse::_internal_nodes_keys(int index) const { + return nodes_keys_.Get(index); +} +inline const std::string& ProcessBatchResponse::nodes_keys(int index) const { + // @@protoc_insertion_point(field_get:executor.v1.ProcessBatchResponse.nodes_keys) + return _internal_nodes_keys(index); +} +inline std::string* ProcessBatchResponse::mutable_nodes_keys(int index) { + // @@protoc_insertion_point(field_mutable:executor.v1.ProcessBatchResponse.nodes_keys) + return nodes_keys_.Mutable(index); +} +inline void ProcessBatchResponse::set_nodes_keys(int index, const std::string& value) { + // @@protoc_insertion_point(field_set:executor.v1.ProcessBatchResponse.nodes_keys) + nodes_keys_.Mutable(index)->assign(value); +} +inline void ProcessBatchResponse::set_nodes_keys(int index, std::string&& value) { + // @@protoc_insertion_point(field_set:executor.v1.ProcessBatchResponse.nodes_keys) + nodes_keys_.Mutable(index)->assign(std::move(value)); +} +inline void ProcessBatchResponse::set_nodes_keys(int index, const char* value) { + GOOGLE_DCHECK(value != nullptr); + nodes_keys_.Mutable(index)->assign(value); + // @@protoc_insertion_point(field_set_char:executor.v1.ProcessBatchResponse.nodes_keys) +} +inline void ProcessBatchResponse::set_nodes_keys(int index, const void* value, size_t size) { + nodes_keys_.Mutable(index)->assign( + reinterpret_cast(value), size); + // @@protoc_insertion_point(field_set_pointer:executor.v1.ProcessBatchResponse.nodes_keys) +} +inline std::string* ProcessBatchResponse::_internal_add_nodes_keys() { + return nodes_keys_.Add(); +} +inline void ProcessBatchResponse::add_nodes_keys(const std::string& value) { + nodes_keys_.Add()->assign(value); + // @@protoc_insertion_point(field_add:executor.v1.ProcessBatchResponse.nodes_keys) +} +inline void ProcessBatchResponse::add_nodes_keys(std::string&& value) { + nodes_keys_.Add(std::move(value)); + // @@protoc_insertion_point(field_add:executor.v1.ProcessBatchResponse.nodes_keys) +} +inline void ProcessBatchResponse::add_nodes_keys(const char* value) { + GOOGLE_DCHECK(value != nullptr); + nodes_keys_.Add()->assign(value); + // @@protoc_insertion_point(field_add_char:executor.v1.ProcessBatchResponse.nodes_keys) +} +inline void ProcessBatchResponse::add_nodes_keys(const void* value, size_t size) { + nodes_keys_.Add()->assign(reinterpret_cast(value), size); + // @@protoc_insertion_point(field_add_pointer:executor.v1.ProcessBatchResponse.nodes_keys) +} +inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField& +ProcessBatchResponse::nodes_keys() const { + // @@protoc_insertion_point(field_list:executor.v1.ProcessBatchResponse.nodes_keys) + return nodes_keys_; +} +inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField* +ProcessBatchResponse::mutable_nodes_keys() { + // @@protoc_insertion_point(field_mutable_list:executor.v1.ProcessBatchResponse.nodes_keys) + return &nodes_keys_; +} + +// repeated bytes program_keys = 20; +inline int ProcessBatchResponse::_internal_program_keys_size() const { + return program_keys_.size(); +} +inline int ProcessBatchResponse::program_keys_size() const { + return _internal_program_keys_size(); +} +inline void ProcessBatchResponse::clear_program_keys() { + program_keys_.Clear(); +} +inline std::string* ProcessBatchResponse::add_program_keys() { + // @@protoc_insertion_point(field_add_mutable:executor.v1.ProcessBatchResponse.program_keys) + return _internal_add_program_keys(); +} +inline const std::string& ProcessBatchResponse::_internal_program_keys(int index) const { + return program_keys_.Get(index); +} +inline const std::string& ProcessBatchResponse::program_keys(int index) const { + // @@protoc_insertion_point(field_get:executor.v1.ProcessBatchResponse.program_keys) + return _internal_program_keys(index); +} +inline std::string* ProcessBatchResponse::mutable_program_keys(int index) { + // @@protoc_insertion_point(field_mutable:executor.v1.ProcessBatchResponse.program_keys) + return program_keys_.Mutable(index); +} +inline void ProcessBatchResponse::set_program_keys(int index, const std::string& value) { + // @@protoc_insertion_point(field_set:executor.v1.ProcessBatchResponse.program_keys) + program_keys_.Mutable(index)->assign(value); +} +inline void ProcessBatchResponse::set_program_keys(int index, std::string&& value) { + // @@protoc_insertion_point(field_set:executor.v1.ProcessBatchResponse.program_keys) + program_keys_.Mutable(index)->assign(std::move(value)); +} +inline void ProcessBatchResponse::set_program_keys(int index, const char* value) { + GOOGLE_DCHECK(value != nullptr); + program_keys_.Mutable(index)->assign(value); + // @@protoc_insertion_point(field_set_char:executor.v1.ProcessBatchResponse.program_keys) +} +inline void ProcessBatchResponse::set_program_keys(int index, const void* value, size_t size) { + program_keys_.Mutable(index)->assign( + reinterpret_cast(value), size); + // @@protoc_insertion_point(field_set_pointer:executor.v1.ProcessBatchResponse.program_keys) +} +inline std::string* ProcessBatchResponse::_internal_add_program_keys() { + return program_keys_.Add(); +} +inline void ProcessBatchResponse::add_program_keys(const std::string& value) { + program_keys_.Add()->assign(value); + // @@protoc_insertion_point(field_add:executor.v1.ProcessBatchResponse.program_keys) +} +inline void ProcessBatchResponse::add_program_keys(std::string&& value) { + program_keys_.Add(std::move(value)); + // @@protoc_insertion_point(field_add:executor.v1.ProcessBatchResponse.program_keys) +} +inline void ProcessBatchResponse::add_program_keys(const char* value) { + GOOGLE_DCHECK(value != nullptr); + program_keys_.Add()->assign(value); + // @@protoc_insertion_point(field_add_char:executor.v1.ProcessBatchResponse.program_keys) +} +inline void ProcessBatchResponse::add_program_keys(const void* value, size_t size) { + program_keys_.Add()->assign(reinterpret_cast(value), size); + // @@protoc_insertion_point(field_add_pointer:executor.v1.ProcessBatchResponse.program_keys) +} +inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField& +ProcessBatchResponse::program_keys() const { + // @@protoc_insertion_point(field_list:executor.v1.ProcessBatchResponse.program_keys) + return program_keys_; +} +inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField* +ProcessBatchResponse::mutable_program_keys() { + // @@protoc_insertion_point(field_mutable_list:executor.v1.ProcessBatchResponse.program_keys) + return &program_keys_; +} + // ------------------------------------------------------------------- // GetFlushStatusResponse diff --git a/src/grpc/proto/executor.proto b/src/grpc/proto/executor.proto index 13038d246..fb0b452f3 100644 --- a/src/grpc/proto/executor.proto +++ b/src/grpc/proto/executor.proto @@ -32,6 +32,7 @@ message ProcessBatchRequest { map contracts_bytecode = 14; // For debug/testing purpposes only. Don't fill this on production TraceConfig trace_config = 15; string external_request_id = 16; + uint32 get_keys = 17; // if 1, the keys used to read or write storage values will be returned } message ProcessBatchResponse { @@ -53,6 +54,8 @@ message ProcessBatchResponse { uint64 flush_id = 16; uint64 stored_flush_id = 17; string prover_id = 18; + repeated bytes nodes_keys = 19; + repeated bytes program_keys = 20; } /** @@ -475,4 +478,6 @@ enum ExecutorError { EXECUTOR_ERROR_INVALID_CONTRACTS_BYTECODE_KEY = 78; // EXECUTOR_ERROR_INVALID_CONTRACTS_BYTECODE_VALUE indicates that the input parameter contracts_bytecode value is invalid EXECUTOR_ERROR_INVALID_CONTRACTS_BYTECODE_VALUE = 79; + // EXECUTOR_ERROR_INVALID_GET_KEY indicates that the input parameter get key is invalid, e.g. is true but fork_id<5 + EXECUTOR_ERROR_INVALID_GET_KEY = 80; } \ No newline at end of file diff --git a/src/main_generator/main_generator.cpp b/src/main_generator/main_generator.cpp index 8a75773df..8f0bd2d75 100644 --- a/src/main_generator/main_generator.cpp +++ b/src/main_generator/main_generator.cpp @@ -1033,6 +1033,9 @@ string generate(const json &rom, const string &functionName, const string &fileN code += " Kin1[5] = pols.A5[" + string(bFastMode?"0":"i") + "];\n"; code += " Kin1[6] = pols.B0[" + string(bFastMode?"0":"i") + "];\n"; code += " Kin1[7] = pols.B1[" + string(bFastMode?"0":"i") + "];\n"; + + code += " b0 = fr.toU64(pols.B0[" + string(bFastMode?"0":"i") + "]);\n"; + code += " bIsTouchedAddressTree = (b0 == 5) || (b0 == 6);\n"; code += " if ( !fr.isZero(pols.A5[" + string(bFastMode?"0":"i") + "]) || !fr.isZero(pols.A6[" + string(bFastMode?"0":"i") + "]) || !fr.isZero(pols.A7[" + string(bFastMode?"0":"i") + "]) || !fr.isZero(pols.B2[" + string(bFastMode?"0":"i") + "]) || !fr.isZero(pols.B3[" + string(bFastMode?"0":"i") + "]) || !fr.isZero(pols.B4[" + string(bFastMode?"0":"i") + "]) || !fr.isZero(pols.B5[" + string(bFastMode?"0":"i") + "])|| !fr.isZero(pols.B6[" + string(bFastMode?"0":"i") + "])|| !fr.isZero(pols.B7[" + string(bFastMode?"0":"i") + "]) )\n"; code += " {\n"; @@ -1071,6 +1074,13 @@ string generate(const json &rom, const string &functionName, const string &fileN code += " zklog.info(\"Storage read sRD got poseidon key: \" + ctx.fr.toString(ctx.lastSWrite.key, 16));\n"; code += "#endif\n"; code += " sr8to4(fr, pols.SR0[" + string(bFastMode?"0":"i") + "], pols.SR1[" + string(bFastMode?"0":"i") + "], pols.SR2[" + string(bFastMode?"0":"i") + "], pols.SR3[" + string(bFastMode?"0":"i") + "], pols.SR4[" + string(bFastMode?"0":"i") + "], pols.SR5[" + string(bFastMode?"0":"i") + "], pols.SR6[" + string(bFastMode?"0":"i") + "], pols.SR7[" + string(bFastMode?"0":"i") + "], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]);\n"; + + code += " // Collect the keys used to read or write store data\n"; + code += " if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree)\n"; + code += " {\n"; + code += " proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64));\n"; + code += " }\n"; + code += "#ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR\n"; code += " gettimeofday(&t, NULL);\n"; code += "#endif\n"; @@ -1208,6 +1218,12 @@ string generate(const json &rom, const string &functionName, const string &fileN code += "#endif\n"; code += " sr8to4(fr, pols.SR0[" + string(bFastMode?"0":"i") + "], pols.SR1[" + string(bFastMode?"0":"i") + "], pols.SR2[" + string(bFastMode?"0":"i") + "], pols.SR3[" + string(bFastMode?"0":"i") + "], pols.SR4[" + string(bFastMode?"0":"i") + "], pols.SR5[" + string(bFastMode?"0":"i") + "], pols.SR6[" + string(bFastMode?"0":"i") + "], pols.SR7[" + string(bFastMode?"0":"i") + "], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]);\n"; + code += " // Collect the keys used to read or write store data\n"; + code += " if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree)\n"; + code += " {\n"; + code += " proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64));\n"; + code += " }\n"; + code += " zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog);\n"; code += " if (zkResult != ZKR_SUCCESS)\n"; code += " {\n"; @@ -2118,6 +2134,9 @@ string generate(const json &rom, const string &functionName, const string &fileN code += " Kin1[6] = pols.B0[" + string(bFastMode?"0":"i") + "];\n"; code += " Kin1[7] = pols.B1[" + string(bFastMode?"0":"i") + "];\n"; + code += " b0 = fr.toU64(pols.B0[" + string(bFastMode?"0":"i") + "]);\n"; + code += " bIsTouchedAddressTree = (b0 == 5) || (b0 == 6);\n"; + code += " if ( !fr.isZero(pols.A5[" + string(bFastMode?"0":"i") + "]) || !fr.isZero(pols.A6[" + string(bFastMode?"0":"i") + "]) || !fr.isZero(pols.A7[" + string(bFastMode?"0":"i") + "]) || !fr.isZero(pols.B2[" + string(bFastMode?"0":"i") + "]) || !fr.isZero(pols.B3[" + string(bFastMode?"0":"i") + "]) || !fr.isZero(pols.B4[" + string(bFastMode?"0":"i") + "]) || !fr.isZero(pols.B5[" + string(bFastMode?"0":"i") + "])|| !fr.isZero(pols.B6[" + string(bFastMode?"0":"i") + "])|| !fr.isZero(pols.B7[" + string(bFastMode?"0":"i") + "]) )\n"; code += " {\n"; code += " proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY;\n"; @@ -2181,6 +2200,12 @@ string generate(const json &rom, const string &functionName, const string &fileN code += " sr8to4(fr, pols.SR0[" + string(bFastMode?"0":"i") + "], pols.SR1[" + string(bFastMode?"0":"i") + "], pols.SR2[" + string(bFastMode?"0":"i") + "], pols.SR3[" + string(bFastMode?"0":"i") + "], pols.SR4[" + string(bFastMode?"0":"i") + "], pols.SR5[" + string(bFastMode?"0":"i") + "], pols.SR6[" + string(bFastMode?"0":"i") + "], pols.SR7[" + string(bFastMode?"0":"i") + "], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]);\n"; + code += " // Collect the keys used to read or write store data\n"; + code += " if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree)\n"; + code += " {\n"; + code += " proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64));\n"; + code += " }\n"; + code += "#ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR\n"; code += " gettimeofday(&t, NULL);\n"; code += "#endif\n"; @@ -2355,6 +2380,12 @@ string generate(const json &rom, const string &functionName, const string &fileN code += " sr8to4(fr, pols.SR0[" + string(bFastMode?"0":"i") + "], pols.SR1[" + string(bFastMode?"0":"i") + "], pols.SR2[" + string(bFastMode?"0":"i") + "], pols.SR3[" + string(bFastMode?"0":"i") + "], pols.SR4[" + string(bFastMode?"0":"i") + "], pols.SR5[" + string(bFastMode?"0":"i") + "], pols.SR6[" + string(bFastMode?"0":"i") + "], pols.SR7[" + string(bFastMode?"0":"i") + "], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]);\n"; + code += " // Collect the keys used to read or write store data\n"; + code += " if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree)\n"; + code += " {\n"; + code += " proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64));\n"; + code += " }\n"; + code += " zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog);\n"; code += " if (zkResult != ZKR_SUCCESS)\n"; code += " {\n"; @@ -2945,6 +2976,13 @@ string generate(const json &rom, const string &functionName, const string &fileN code += "#endif\n"; code += " fea2scalar(fr, hashIterator->second.digest, result);\n"; code += " delete[] pBuffer;\n"; + + code += " // Collect the keys used to read or write store data\n"; + code += " if (proverRequest.input.bGetKeys)\n"; + code += " {\n"; + code += " proverRequest.programKeys.insert(NormalizeToNFormat(fea2string(fr, result), 64));\n"; + code += " }\n"; + code += "#ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR\n"; code += " gettimeofday(&t, NULL);\n"; code += "#endif\n"; @@ -2995,6 +3033,13 @@ string generate(const json &rom, const string &functionName, const string &fileN code += " hashValue.digest = dg;\n"; code += " Goldilocks::Element aux[4];\n"; code += " scalar2fea(fr, dg, aux);\n"; + + code += " // Collect the keys used to read or write store data\n"; + code += " if (proverRequest.input.bGetKeys)\n"; + code += " {\n"; + code += " proverRequest.programKeys.insert(NormalizeToNFormat(fea2string(fr, aux), 64));\n"; + code += " }\n"; + code += "#ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR\n"; code += " gettimeofday(&t, NULL);\n"; code += "#endif\n"; diff --git a/src/main_sm/fork_5/main/main_executor.cpp b/src/main_sm/fork_5/main/main_executor.cpp index 7de838257..5722eddb7 100644 --- a/src/main_sm/fork_5/main/main_executor.cpp +++ b/src/main_sm/fork_5/main/main_executor.cpp @@ -816,6 +816,9 @@ void MainExecutor::execute (ProverRequest &proverRequest, MainCommitPols &pols, Kin1[6] = pols.B0[i]; Kin1[7] = pols.B1[i]; + uint64_t b0 = fr.toU64(pols.B0[i]); + bool bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); + if ( !fr.isZero(pols.A5[i]) || !fr.isZero(pols.A6[i]) || !fr.isZero(pols.A7[i]) || !fr.isZero(pols.B2[i]) || !fr.isZero(pols.B3[i]) || !fr.isZero(pols.B4[i]) || !fr.isZero(pols.B5[i])|| !fr.isZero(pols.B6[i])|| !fr.isZero(pols.B7[i]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -859,6 +862,13 @@ void MainExecutor::execute (ProverRequest &proverRequest, MainCommitPols &pols, #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif + + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } + SmtGetResult smtGetResult; mpz_class value; zkresult zkResult = pHashDB->get(proverRequest.uuid, oldRoot, key, value, &smtGetResult, proverRequest.dbReadLog); @@ -1005,6 +1015,12 @@ void MainExecutor::execute (ProverRequest &proverRequest, MainCommitPols &pols, Goldilocks::Element oldRoot[4]; sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } + zkresult zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -1759,6 +1775,9 @@ void MainExecutor::execute (ProverRequest &proverRequest, MainCommitPols &pols, Kin1[6] = pols.B0[i]; Kin1[7] = pols.B1[i]; + uint64_t b0 = fr.toU64(pols.B0[i]); + bool bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); + if ( !fr.isZero(pols.A5[i]) || !fr.isZero(pols.A6[i]) || !fr.isZero(pols.A7[i]) || !fr.isZero(pols.B2[i]) || !fr.isZero(pols.B3[i]) || !fr.isZero(pols.B4[i]) || !fr.isZero(pols.B5[i])|| !fr.isZero(pols.B6[i])|| !fr.isZero(pols.B7[i]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -1838,6 +1857,13 @@ void MainExecutor::execute (ProverRequest &proverRequest, MainCommitPols &pols, #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif + + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } + SmtGetResult smtGetResult; mpz_class value; zkresult zkResult = pHashDB->get(proverRequest.uuid, oldRoot, key, value, &smtGetResult, proverRequest.dbReadLog); @@ -2000,6 +2026,12 @@ void MainExecutor::execute (ProverRequest &proverRequest, MainCommitPols &pols, Goldilocks::Element oldRoot[4]; sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } + zkresult zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : (proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -2584,6 +2616,12 @@ void MainExecutor::execute (ProverRequest &proverRequest, MainCommitPols &pols, #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif + // Collect the keys used to read or write program data + if (proverRequest.input.bGetKeys) + { + proverRequest.programKeys.insert(NormalizeToNFormat(fea2string(fr, result), 64)); + } + zkresult zkResult = pHashDB->setProgram(result, hashPIterator->second.data, proverRequest.input.bUpdateMerkleTree); if (zkResult != ZKR_SUCCESS) { @@ -2633,6 +2671,12 @@ void MainExecutor::execute (ProverRequest &proverRequest, MainCommitPols &pols, #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys) + { + proverRequest.programKeys.insert(NormalizeToNFormat(fea2string(fr, aux), 64)); + } + zkresult zkResult = pHashDB->getProgram(aux, hashValue.data, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { diff --git a/src/main_sm/fork_5/main_exec_generated/main_exec_generated.cpp b/src/main_sm/fork_5/main_exec_generated/main_exec_generated.cpp index 42c149534..5377aaaee 100644 --- a/src/main_sm/fork_5/main_exec_generated/main_exec_generated.cpp +++ b/src/main_sm/fork_5/main_exec_generated/main_exec_generated.cpp @@ -10353,6 +10353,8 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro Kin1[5] = pols.A5[i]; Kin1[6] = pols.B0[i]; Kin1[7] = pols.B1[i]; + b0 = fr.toU64(pols.B0[i]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[i]) || !fr.isZero(pols.A6[i]) || !fr.isZero(pols.A7[i]) || !fr.isZero(pols.B2[i]) || !fr.isZero(pols.B3[i]) || !fr.isZero(pols.B4[i]) || !fr.isZero(pols.B5[i])|| !fr.isZero(pols.B6[i])|| !fr.isZero(pols.B7[i]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -10385,6 +10387,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -10454,6 +10461,8 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro Kin1[5] = pols.A5[i]; Kin1[6] = pols.B0[i]; Kin1[7] = pols.B1[i]; + b0 = fr.toU64(pols.B0[i]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[i]) || !fr.isZero(pols.A6[i]) || !fr.isZero(pols.A7[i]) || !fr.isZero(pols.B2[i]) || !fr.isZero(pols.B3[i]) || !fr.isZero(pols.B4[i]) || !fr.isZero(pols.B5[i])|| !fr.isZero(pols.B6[i])|| !fr.isZero(pols.B7[i]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -10502,6 +10511,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -10989,6 +11003,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -11118,6 +11137,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -11906,6 +11930,8 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro Kin1[5] = pols.A5[i]; Kin1[6] = pols.B0[i]; Kin1[7] = pols.B1[i]; + b0 = fr.toU64(pols.B0[i]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[i]) || !fr.isZero(pols.A6[i]) || !fr.isZero(pols.A7[i]) || !fr.isZero(pols.B2[i]) || !fr.isZero(pols.B3[i]) || !fr.isZero(pols.B4[i]) || !fr.isZero(pols.B5[i])|| !fr.isZero(pols.B6[i])|| !fr.isZero(pols.B7[i]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -11938,6 +11964,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -12007,6 +12038,8 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro Kin1[5] = pols.A5[i]; Kin1[6] = pols.B0[i]; Kin1[7] = pols.B1[i]; + b0 = fr.toU64(pols.B0[i]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[i]) || !fr.isZero(pols.A6[i]) || !fr.isZero(pols.A7[i]) || !fr.isZero(pols.B2[i]) || !fr.isZero(pols.B3[i]) || !fr.isZero(pols.B4[i]) || !fr.isZero(pols.B5[i])|| !fr.isZero(pols.B6[i])|| !fr.isZero(pols.B7[i]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -12055,6 +12088,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -17525,6 +17563,8 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro Kin1[5] = pols.A5[i]; Kin1[6] = pols.B0[i]; Kin1[7] = pols.B1[i]; + b0 = fr.toU64(pols.B0[i]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[i]) || !fr.isZero(pols.A6[i]) || !fr.isZero(pols.A7[i]) || !fr.isZero(pols.B2[i]) || !fr.isZero(pols.B3[i]) || !fr.isZero(pols.B4[i]) || !fr.isZero(pols.B5[i])|| !fr.isZero(pols.B6[i])|| !fr.isZero(pols.B7[i]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -17557,6 +17597,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -17626,6 +17671,8 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro Kin1[5] = pols.A5[i]; Kin1[6] = pols.B0[i]; Kin1[7] = pols.B1[i]; + b0 = fr.toU64(pols.B0[i]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[i]) || !fr.isZero(pols.A6[i]) || !fr.isZero(pols.A7[i]) || !fr.isZero(pols.B2[i]) || !fr.isZero(pols.B3[i]) || !fr.isZero(pols.B4[i]) || !fr.isZero(pols.B5[i])|| !fr.isZero(pols.B6[i])|| !fr.isZero(pols.B7[i]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -17674,6 +17721,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -93168,6 +93220,8 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro Kin1[5] = pols.A5[i]; Kin1[6] = pols.B0[i]; Kin1[7] = pols.B1[i]; + b0 = fr.toU64(pols.B0[i]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[i]) || !fr.isZero(pols.A6[i]) || !fr.isZero(pols.A7[i]) || !fr.isZero(pols.B2[i]) || !fr.isZero(pols.B3[i]) || !fr.isZero(pols.B4[i]) || !fr.isZero(pols.B5[i])|| !fr.isZero(pols.B6[i])|| !fr.isZero(pols.B7[i]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -93200,6 +93254,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -93269,6 +93328,8 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro Kin1[5] = pols.A5[i]; Kin1[6] = pols.B0[i]; Kin1[7] = pols.B1[i]; + b0 = fr.toU64(pols.B0[i]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[i]) || !fr.isZero(pols.A6[i]) || !fr.isZero(pols.A7[i]) || !fr.isZero(pols.B2[i]) || !fr.isZero(pols.B3[i]) || !fr.isZero(pols.B4[i]) || !fr.isZero(pols.B5[i])|| !fr.isZero(pols.B6[i])|| !fr.isZero(pols.B7[i]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -93317,6 +93378,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -127403,6 +127469,8 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro Kin1[5] = pols.A5[i]; Kin1[6] = pols.B0[i]; Kin1[7] = pols.B1[i]; + b0 = fr.toU64(pols.B0[i]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[i]) || !fr.isZero(pols.A6[i]) || !fr.isZero(pols.A7[i]) || !fr.isZero(pols.B2[i]) || !fr.isZero(pols.B3[i]) || !fr.isZero(pols.B4[i]) || !fr.isZero(pols.B5[i])|| !fr.isZero(pols.B6[i])|| !fr.isZero(pols.B7[i]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -127435,6 +127503,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -127504,6 +127577,8 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro Kin1[5] = pols.A5[i]; Kin1[6] = pols.B0[i]; Kin1[7] = pols.B1[i]; + b0 = fr.toU64(pols.B0[i]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[i]) || !fr.isZero(pols.A6[i]) || !fr.isZero(pols.A7[i]) || !fr.isZero(pols.B2[i]) || !fr.isZero(pols.B3[i]) || !fr.isZero(pols.B4[i]) || !fr.isZero(pols.B5[i])|| !fr.isZero(pols.B6[i])|| !fr.isZero(pols.B7[i]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -127552,6 +127627,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -128995,6 +129075,8 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro Kin1[5] = pols.A5[i]; Kin1[6] = pols.B0[i]; Kin1[7] = pols.B1[i]; + b0 = fr.toU64(pols.B0[i]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[i]) || !fr.isZero(pols.A6[i]) || !fr.isZero(pols.A7[i]) || !fr.isZero(pols.B2[i]) || !fr.isZero(pols.B3[i]) || !fr.isZero(pols.B4[i]) || !fr.isZero(pols.B5[i])|| !fr.isZero(pols.B6[i])|| !fr.isZero(pols.B7[i]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -129027,6 +129109,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -129096,6 +129183,8 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro Kin1[5] = pols.A5[i]; Kin1[6] = pols.B0[i]; Kin1[7] = pols.B1[i]; + b0 = fr.toU64(pols.B0[i]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[i]) || !fr.isZero(pols.A6[i]) || !fr.isZero(pols.A7[i]) || !fr.isZero(pols.B2[i]) || !fr.isZero(pols.B3[i]) || !fr.isZero(pols.B4[i]) || !fr.isZero(pols.B5[i])|| !fr.isZero(pols.B6[i])|| !fr.isZero(pols.B7[i]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -129144,6 +129233,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -141479,6 +141573,8 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro Kin1[5] = pols.A5[i]; Kin1[6] = pols.B0[i]; Kin1[7] = pols.B1[i]; + b0 = fr.toU64(pols.B0[i]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[i]) || !fr.isZero(pols.A6[i]) || !fr.isZero(pols.A7[i]) || !fr.isZero(pols.B2[i]) || !fr.isZero(pols.B3[i]) || !fr.isZero(pols.B4[i]) || !fr.isZero(pols.B5[i])|| !fr.isZero(pols.B6[i])|| !fr.isZero(pols.B7[i]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -141511,6 +141607,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -141580,6 +141681,8 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro Kin1[5] = pols.A5[i]; Kin1[6] = pols.B0[i]; Kin1[7] = pols.B1[i]; + b0 = fr.toU64(pols.B0[i]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[i]) || !fr.isZero(pols.A6[i]) || !fr.isZero(pols.A7[i]) || !fr.isZero(pols.B2[i]) || !fr.isZero(pols.B3[i]) || !fr.isZero(pols.B4[i]) || !fr.isZero(pols.B5[i])|| !fr.isZero(pols.B6[i])|| !fr.isZero(pols.B7[i]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -141628,6 +141731,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -142532,6 +142640,8 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro Kin1[5] = pols.A5[i]; Kin1[6] = pols.B0[i]; Kin1[7] = pols.B1[i]; + b0 = fr.toU64(pols.B0[i]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[i]) || !fr.isZero(pols.A6[i]) || !fr.isZero(pols.A7[i]) || !fr.isZero(pols.B2[i]) || !fr.isZero(pols.B3[i]) || !fr.isZero(pols.B4[i]) || !fr.isZero(pols.B5[i])|| !fr.isZero(pols.B6[i])|| !fr.isZero(pols.B7[i]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -142564,6 +142674,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -142633,6 +142748,8 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro Kin1[5] = pols.A5[i]; Kin1[6] = pols.B0[i]; Kin1[7] = pols.B1[i]; + b0 = fr.toU64(pols.B0[i]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[i]) || !fr.isZero(pols.A6[i]) || !fr.isZero(pols.A7[i]) || !fr.isZero(pols.B2[i]) || !fr.isZero(pols.B3[i]) || !fr.isZero(pols.B4[i]) || !fr.isZero(pols.B5[i])|| !fr.isZero(pols.B6[i])|| !fr.isZero(pols.B7[i]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -142681,6 +142798,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -146229,6 +146351,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -146358,6 +146485,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -185923,6 +186055,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -186052,6 +186189,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -186485,6 +186627,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -186614,6 +186761,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -204997,6 +205149,8 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro Kin1[5] = pols.A5[i]; Kin1[6] = pols.B0[i]; Kin1[7] = pols.B1[i]; + b0 = fr.toU64(pols.B0[i]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[i]) || !fr.isZero(pols.A6[i]) || !fr.isZero(pols.A7[i]) || !fr.isZero(pols.B2[i]) || !fr.isZero(pols.B3[i]) || !fr.isZero(pols.B4[i]) || !fr.isZero(pols.B5[i])|| !fr.isZero(pols.B6[i])|| !fr.isZero(pols.B7[i]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -205029,6 +205183,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -205098,6 +205257,8 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro Kin1[5] = pols.A5[i]; Kin1[6] = pols.B0[i]; Kin1[7] = pols.B1[i]; + b0 = fr.toU64(pols.B0[i]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[i]) || !fr.isZero(pols.A6[i]) || !fr.isZero(pols.A7[i]) || !fr.isZero(pols.B2[i]) || !fr.isZero(pols.B3[i]) || !fr.isZero(pols.B4[i]) || !fr.isZero(pols.B5[i])|| !fr.isZero(pols.B6[i])|| !fr.isZero(pols.B7[i]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -205146,6 +205307,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -206139,6 +206305,8 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro Kin1[5] = pols.A5[i]; Kin1[6] = pols.B0[i]; Kin1[7] = pols.B1[i]; + b0 = fr.toU64(pols.B0[i]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[i]) || !fr.isZero(pols.A6[i]) || !fr.isZero(pols.A7[i]) || !fr.isZero(pols.B2[i]) || !fr.isZero(pols.B3[i]) || !fr.isZero(pols.B4[i]) || !fr.isZero(pols.B5[i])|| !fr.isZero(pols.B6[i])|| !fr.isZero(pols.B7[i]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -206171,6 +206339,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -206240,6 +206413,8 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro Kin1[5] = pols.A5[i]; Kin1[6] = pols.B0[i]; Kin1[7] = pols.B1[i]; + b0 = fr.toU64(pols.B0[i]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[i]) || !fr.isZero(pols.A6[i]) || !fr.isZero(pols.A7[i]) || !fr.isZero(pols.B2[i]) || !fr.isZero(pols.B3[i]) || !fr.isZero(pols.B4[i]) || !fr.isZero(pols.B5[i])|| !fr.isZero(pols.B6[i])|| !fr.isZero(pols.B7[i]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -206288,6 +206463,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -210057,6 +210237,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -210186,6 +210371,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -231939,6 +232129,8 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro Kin1[5] = pols.A5[i]; Kin1[6] = pols.B0[i]; Kin1[7] = pols.B1[i]; + b0 = fr.toU64(pols.B0[i]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[i]) || !fr.isZero(pols.A6[i]) || !fr.isZero(pols.A7[i]) || !fr.isZero(pols.B2[i]) || !fr.isZero(pols.B3[i]) || !fr.isZero(pols.B4[i]) || !fr.isZero(pols.B5[i])|| !fr.isZero(pols.B6[i])|| !fr.isZero(pols.B7[i]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -231971,6 +232163,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -232040,6 +232237,8 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro Kin1[5] = pols.A5[i]; Kin1[6] = pols.B0[i]; Kin1[7] = pols.B1[i]; + b0 = fr.toU64(pols.B0[i]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[i]) || !fr.isZero(pols.A6[i]) || !fr.isZero(pols.A7[i]) || !fr.isZero(pols.B2[i]) || !fr.isZero(pols.B3[i]) || !fr.isZero(pols.B4[i]) || !fr.isZero(pols.B5[i])|| !fr.isZero(pols.B6[i])|| !fr.isZero(pols.B7[i]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -232088,6 +232287,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -234889,6 +235093,8 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro Kin1[5] = pols.A5[i]; Kin1[6] = pols.B0[i]; Kin1[7] = pols.B1[i]; + b0 = fr.toU64(pols.B0[i]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[i]) || !fr.isZero(pols.A6[i]) || !fr.isZero(pols.A7[i]) || !fr.isZero(pols.B2[i]) || !fr.isZero(pols.B3[i]) || !fr.isZero(pols.B4[i]) || !fr.isZero(pols.B5[i])|| !fr.isZero(pols.B6[i])|| !fr.isZero(pols.B7[i]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -234921,6 +235127,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -234990,6 +235201,8 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro Kin1[5] = pols.A5[i]; Kin1[6] = pols.B0[i]; Kin1[7] = pols.B1[i]; + b0 = fr.toU64(pols.B0[i]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[i]) || !fr.isZero(pols.A6[i]) || !fr.isZero(pols.A7[i]) || !fr.isZero(pols.B2[i]) || !fr.isZero(pols.B3[i]) || !fr.isZero(pols.B4[i]) || !fr.isZero(pols.B5[i])|| !fr.isZero(pols.B6[i])|| !fr.isZero(pols.B7[i]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -235038,6 +235251,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -236129,6 +236347,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -236258,6 +236481,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -236898,6 +237126,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -237027,6 +237260,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -349136,6 +349374,8 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro Kin1[5] = pols.A5[i]; Kin1[6] = pols.B0[i]; Kin1[7] = pols.B1[i]; + b0 = fr.toU64(pols.B0[i]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[i]) || !fr.isZero(pols.A6[i]) || !fr.isZero(pols.A7[i]) || !fr.isZero(pols.B2[i]) || !fr.isZero(pols.B3[i]) || !fr.isZero(pols.B4[i]) || !fr.isZero(pols.B5[i])|| !fr.isZero(pols.B6[i])|| !fr.isZero(pols.B7[i]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -349168,6 +349408,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -349237,6 +349482,8 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro Kin1[5] = pols.A5[i]; Kin1[6] = pols.B0[i]; Kin1[7] = pols.B1[i]; + b0 = fr.toU64(pols.B0[i]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[i]) || !fr.isZero(pols.A6[i]) || !fr.isZero(pols.A7[i]) || !fr.isZero(pols.B2[i]) || !fr.isZero(pols.B3[i]) || !fr.isZero(pols.B4[i]) || !fr.isZero(pols.B5[i])|| !fr.isZero(pols.B6[i])|| !fr.isZero(pols.B7[i]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -349285,6 +349532,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -352486,6 +352738,8 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro Kin1[5] = pols.A5[i]; Kin1[6] = pols.B0[i]; Kin1[7] = pols.B1[i]; + b0 = fr.toU64(pols.B0[i]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[i]) || !fr.isZero(pols.A6[i]) || !fr.isZero(pols.A7[i]) || !fr.isZero(pols.B2[i]) || !fr.isZero(pols.B3[i]) || !fr.isZero(pols.B4[i]) || !fr.isZero(pols.B5[i])|| !fr.isZero(pols.B6[i])|| !fr.isZero(pols.B7[i]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -352518,6 +352772,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -352587,6 +352846,8 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro Kin1[5] = pols.A5[i]; Kin1[6] = pols.B0[i]; Kin1[7] = pols.B1[i]; + b0 = fr.toU64(pols.B0[i]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[i]) || !fr.isZero(pols.A6[i]) || !fr.isZero(pols.A7[i]) || !fr.isZero(pols.B2[i]) || !fr.isZero(pols.B3[i]) || !fr.isZero(pols.B4[i]) || !fr.isZero(pols.B5[i])|| !fr.isZero(pols.B6[i])|| !fr.isZero(pols.B7[i]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -352635,6 +352896,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -353207,6 +353473,8 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro Kin1[5] = pols.A5[i]; Kin1[6] = pols.B0[i]; Kin1[7] = pols.B1[i]; + b0 = fr.toU64(pols.B0[i]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[i]) || !fr.isZero(pols.A6[i]) || !fr.isZero(pols.A7[i]) || !fr.isZero(pols.B2[i]) || !fr.isZero(pols.B3[i]) || !fr.isZero(pols.B4[i]) || !fr.isZero(pols.B5[i])|| !fr.isZero(pols.B6[i])|| !fr.isZero(pols.B7[i]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -353239,6 +353507,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -353308,6 +353581,8 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro Kin1[5] = pols.A5[i]; Kin1[6] = pols.B0[i]; Kin1[7] = pols.B1[i]; + b0 = fr.toU64(pols.B0[i]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[i]) || !fr.isZero(pols.A6[i]) || !fr.isZero(pols.A7[i]) || !fr.isZero(pols.B2[i]) || !fr.isZero(pols.B3[i]) || !fr.isZero(pols.B4[i]) || !fr.isZero(pols.B5[i])|| !fr.isZero(pols.B6[i])|| !fr.isZero(pols.B7[i]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -353356,6 +353631,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -362215,6 +362495,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -362344,6 +362629,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -381804,6 +382094,8 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro Kin1[5] = pols.A5[i]; Kin1[6] = pols.B0[i]; Kin1[7] = pols.B1[i]; + b0 = fr.toU64(pols.B0[i]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[i]) || !fr.isZero(pols.A6[i]) || !fr.isZero(pols.A7[i]) || !fr.isZero(pols.B2[i]) || !fr.isZero(pols.B3[i]) || !fr.isZero(pols.B4[i]) || !fr.isZero(pols.B5[i])|| !fr.isZero(pols.B6[i])|| !fr.isZero(pols.B7[i]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -381836,6 +382128,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -381905,6 +382202,8 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro Kin1[5] = pols.A5[i]; Kin1[6] = pols.B0[i]; Kin1[7] = pols.B1[i]; + b0 = fr.toU64(pols.B0[i]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[i]) || !fr.isZero(pols.A6[i]) || !fr.isZero(pols.A7[i]) || !fr.isZero(pols.B2[i]) || !fr.isZero(pols.B3[i]) || !fr.isZero(pols.B4[i]) || !fr.isZero(pols.B5[i])|| !fr.isZero(pols.B6[i])|| !fr.isZero(pols.B7[i]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -381953,6 +382252,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -394783,6 +395087,8 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro Kin1[5] = pols.A5[i]; Kin1[6] = pols.B0[i]; Kin1[7] = pols.B1[i]; + b0 = fr.toU64(pols.B0[i]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[i]) || !fr.isZero(pols.A6[i]) || !fr.isZero(pols.A7[i]) || !fr.isZero(pols.B2[i]) || !fr.isZero(pols.B3[i]) || !fr.isZero(pols.B4[i]) || !fr.isZero(pols.B5[i])|| !fr.isZero(pols.B6[i])|| !fr.isZero(pols.B7[i]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -394815,6 +395121,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -394884,6 +395195,8 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro Kin1[5] = pols.A5[i]; Kin1[6] = pols.B0[i]; Kin1[7] = pols.B1[i]; + b0 = fr.toU64(pols.B0[i]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[i]) || !fr.isZero(pols.A6[i]) || !fr.isZero(pols.A7[i]) || !fr.isZero(pols.B2[i]) || !fr.isZero(pols.B3[i]) || !fr.isZero(pols.B4[i]) || !fr.isZero(pols.B5[i])|| !fr.isZero(pols.B6[i])|| !fr.isZero(pols.B7[i]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -394932,6 +395245,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -401263,6 +401581,8 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro Kin1[5] = pols.A5[i]; Kin1[6] = pols.B0[i]; Kin1[7] = pols.B1[i]; + b0 = fr.toU64(pols.B0[i]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[i]) || !fr.isZero(pols.A6[i]) || !fr.isZero(pols.A7[i]) || !fr.isZero(pols.B2[i]) || !fr.isZero(pols.B3[i]) || !fr.isZero(pols.B4[i]) || !fr.isZero(pols.B5[i])|| !fr.isZero(pols.B6[i])|| !fr.isZero(pols.B7[i]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -401295,6 +401615,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -401364,6 +401689,8 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro Kin1[5] = pols.A5[i]; Kin1[6] = pols.B0[i]; Kin1[7] = pols.B1[i]; + b0 = fr.toU64(pols.B0[i]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[i]) || !fr.isZero(pols.A6[i]) || !fr.isZero(pols.A7[i]) || !fr.isZero(pols.B2[i]) || !fr.isZero(pols.B3[i]) || !fr.isZero(pols.B4[i]) || !fr.isZero(pols.B5[i])|| !fr.isZero(pols.B6[i])|| !fr.isZero(pols.B7[i]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -401412,6 +401739,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -404041,6 +404373,8 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro Kin1[5] = pols.A5[i]; Kin1[6] = pols.B0[i]; Kin1[7] = pols.B1[i]; + b0 = fr.toU64(pols.B0[i]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[i]) || !fr.isZero(pols.A6[i]) || !fr.isZero(pols.A7[i]) || !fr.isZero(pols.B2[i]) || !fr.isZero(pols.B3[i]) || !fr.isZero(pols.B4[i]) || !fr.isZero(pols.B5[i])|| !fr.isZero(pols.B6[i])|| !fr.isZero(pols.B7[i]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -404073,6 +404407,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -404142,6 +404481,8 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro Kin1[5] = pols.A5[i]; Kin1[6] = pols.B0[i]; Kin1[7] = pols.B1[i]; + b0 = fr.toU64(pols.B0[i]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[i]) || !fr.isZero(pols.A6[i]) || !fr.isZero(pols.A7[i]) || !fr.isZero(pols.B2[i]) || !fr.isZero(pols.B3[i]) || !fr.isZero(pols.B4[i]) || !fr.isZero(pols.B5[i])|| !fr.isZero(pols.B6[i])|| !fr.isZero(pols.B7[i]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -404190,6 +404531,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -404971,6 +405317,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro hashValue.digest = dg; Goldilocks::Element aux[4]; scalar2fea(fr, dg, aux); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys) + { + proverRequest.programKeys.insert(NormalizeToNFormat(fea2string(fr, aux), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -417708,6 +418059,8 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro Kin1[5] = pols.A5[i]; Kin1[6] = pols.B0[i]; Kin1[7] = pols.B1[i]; + b0 = fr.toU64(pols.B0[i]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[i]) || !fr.isZero(pols.A6[i]) || !fr.isZero(pols.A7[i]) || !fr.isZero(pols.B2[i]) || !fr.isZero(pols.B3[i]) || !fr.isZero(pols.B4[i]) || !fr.isZero(pols.B5[i])|| !fr.isZero(pols.B6[i])|| !fr.isZero(pols.B7[i]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -417740,6 +418093,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -417809,6 +418167,8 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro Kin1[5] = pols.A5[i]; Kin1[6] = pols.B0[i]; Kin1[7] = pols.B1[i]; + b0 = fr.toU64(pols.B0[i]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[i]) || !fr.isZero(pols.A6[i]) || !fr.isZero(pols.A7[i]) || !fr.isZero(pols.B2[i]) || !fr.isZero(pols.B3[i]) || !fr.isZero(pols.B4[i]) || !fr.isZero(pols.B5[i])|| !fr.isZero(pols.B6[i])|| !fr.isZero(pols.B7[i]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -417857,6 +418217,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -637851,6 +638216,8 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro Kin1[5] = pols.A5[i]; Kin1[6] = pols.B0[i]; Kin1[7] = pols.B1[i]; + b0 = fr.toU64(pols.B0[i]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[i]) || !fr.isZero(pols.A6[i]) || !fr.isZero(pols.A7[i]) || !fr.isZero(pols.B2[i]) || !fr.isZero(pols.B3[i]) || !fr.isZero(pols.B4[i]) || !fr.isZero(pols.B5[i])|| !fr.isZero(pols.B6[i])|| !fr.isZero(pols.B7[i]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -637883,6 +638250,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -637952,6 +638324,8 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro Kin1[5] = pols.A5[i]; Kin1[6] = pols.B0[i]; Kin1[7] = pols.B1[i]; + b0 = fr.toU64(pols.B0[i]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[i]) || !fr.isZero(pols.A6[i]) || !fr.isZero(pols.A7[i]) || !fr.isZero(pols.B2[i]) || !fr.isZero(pols.B3[i]) || !fr.isZero(pols.B4[i]) || !fr.isZero(pols.B5[i])|| !fr.isZero(pols.B6[i])|| !fr.isZero(pols.B7[i]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -638000,6 +638374,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -638522,6 +638901,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -638651,6 +639035,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -642044,6 +642433,8 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro Kin1[5] = pols.A5[i]; Kin1[6] = pols.B0[i]; Kin1[7] = pols.B1[i]; + b0 = fr.toU64(pols.B0[i]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[i]) || !fr.isZero(pols.A6[i]) || !fr.isZero(pols.A7[i]) || !fr.isZero(pols.B2[i]) || !fr.isZero(pols.B3[i]) || !fr.isZero(pols.B4[i]) || !fr.isZero(pols.B5[i])|| !fr.isZero(pols.B6[i])|| !fr.isZero(pols.B7[i]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -642076,6 +642467,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -642145,6 +642541,8 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro Kin1[5] = pols.A5[i]; Kin1[6] = pols.B0[i]; Kin1[7] = pols.B1[i]; + b0 = fr.toU64(pols.B0[i]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[i]) || !fr.isZero(pols.A6[i]) || !fr.isZero(pols.A7[i]) || !fr.isZero(pols.B2[i]) || !fr.isZero(pols.B3[i]) || !fr.isZero(pols.B4[i]) || !fr.isZero(pols.B5[i])|| !fr.isZero(pols.B6[i])|| !fr.isZero(pols.B7[i]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -642193,6 +642591,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -642715,6 +643118,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -642844,6 +643252,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -682187,6 +682600,8 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro Kin1[5] = pols.A5[i]; Kin1[6] = pols.B0[i]; Kin1[7] = pols.B1[i]; + b0 = fr.toU64(pols.B0[i]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[i]) || !fr.isZero(pols.A6[i]) || !fr.isZero(pols.A7[i]) || !fr.isZero(pols.B2[i]) || !fr.isZero(pols.B3[i]) || !fr.isZero(pols.B4[i]) || !fr.isZero(pols.B5[i])|| !fr.isZero(pols.B6[i])|| !fr.isZero(pols.B7[i]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -682219,6 +682634,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -682288,6 +682708,8 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro Kin1[5] = pols.A5[i]; Kin1[6] = pols.B0[i]; Kin1[7] = pols.B1[i]; + b0 = fr.toU64(pols.B0[i]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[i]) || !fr.isZero(pols.A6[i]) || !fr.isZero(pols.A7[i]) || !fr.isZero(pols.B2[i]) || !fr.isZero(pols.B3[i]) || !fr.isZero(pols.B4[i]) || !fr.isZero(pols.B5[i])|| !fr.isZero(pols.B6[i])|| !fr.isZero(pols.B7[i]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -682336,6 +682758,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -686806,6 +687233,8 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro Kin1[5] = pols.A5[i]; Kin1[6] = pols.B0[i]; Kin1[7] = pols.B1[i]; + b0 = fr.toU64(pols.B0[i]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[i]) || !fr.isZero(pols.A6[i]) || !fr.isZero(pols.A7[i]) || !fr.isZero(pols.B2[i]) || !fr.isZero(pols.B3[i]) || !fr.isZero(pols.B4[i]) || !fr.isZero(pols.B5[i])|| !fr.isZero(pols.B6[i])|| !fr.isZero(pols.B7[i]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -686838,6 +687267,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -686907,6 +687341,8 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro Kin1[5] = pols.A5[i]; Kin1[6] = pols.B0[i]; Kin1[7] = pols.B1[i]; + b0 = fr.toU64(pols.B0[i]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[i]) || !fr.isZero(pols.A6[i]) || !fr.isZero(pols.A7[i]) || !fr.isZero(pols.B2[i]) || !fr.isZero(pols.B3[i]) || !fr.isZero(pols.B4[i]) || !fr.isZero(pols.B5[i])|| !fr.isZero(pols.B6[i])|| !fr.isZero(pols.B7[i]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -686955,6 +687391,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -688385,6 +688826,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -688514,6 +688960,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -694558,6 +695009,8 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro Kin1[5] = pols.A5[i]; Kin1[6] = pols.B0[i]; Kin1[7] = pols.B1[i]; + b0 = fr.toU64(pols.B0[i]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[i]) || !fr.isZero(pols.A6[i]) || !fr.isZero(pols.A7[i]) || !fr.isZero(pols.B2[i]) || !fr.isZero(pols.B3[i]) || !fr.isZero(pols.B4[i]) || !fr.isZero(pols.B5[i])|| !fr.isZero(pols.B6[i])|| !fr.isZero(pols.B7[i]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -694590,6 +695043,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -694659,6 +695117,8 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro Kin1[5] = pols.A5[i]; Kin1[6] = pols.B0[i]; Kin1[7] = pols.B1[i]; + b0 = fr.toU64(pols.B0[i]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[i]) || !fr.isZero(pols.A6[i]) || !fr.isZero(pols.A7[i]) || !fr.isZero(pols.B2[i]) || !fr.isZero(pols.B3[i]) || !fr.isZero(pols.B4[i]) || !fr.isZero(pols.B5[i])|| !fr.isZero(pols.B6[i])|| !fr.isZero(pols.B7[i]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -694707,6 +695167,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -697217,6 +697682,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -697346,6 +697816,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -714457,6 +714932,8 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro Kin1[5] = pols.A5[i]; Kin1[6] = pols.B0[i]; Kin1[7] = pols.B1[i]; + b0 = fr.toU64(pols.B0[i]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[i]) || !fr.isZero(pols.A6[i]) || !fr.isZero(pols.A7[i]) || !fr.isZero(pols.B2[i]) || !fr.isZero(pols.B3[i]) || !fr.isZero(pols.B4[i]) || !fr.isZero(pols.B5[i])|| !fr.isZero(pols.B6[i])|| !fr.isZero(pols.B7[i]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -714489,6 +714966,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -714558,6 +715040,8 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro Kin1[5] = pols.A5[i]; Kin1[6] = pols.B0[i]; Kin1[7] = pols.B1[i]; + b0 = fr.toU64(pols.B0[i]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[i]) || !fr.isZero(pols.A6[i]) || !fr.isZero(pols.A7[i]) || !fr.isZero(pols.B2[i]) || !fr.isZero(pols.B3[i]) || !fr.isZero(pols.B4[i]) || !fr.isZero(pols.B5[i])|| !fr.isZero(pols.B6[i])|| !fr.isZero(pols.B7[i]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -714606,6 +715090,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -715408,6 +715897,8 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro Kin1[5] = pols.A5[i]; Kin1[6] = pols.B0[i]; Kin1[7] = pols.B1[i]; + b0 = fr.toU64(pols.B0[i]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[i]) || !fr.isZero(pols.A6[i]) || !fr.isZero(pols.A7[i]) || !fr.isZero(pols.B2[i]) || !fr.isZero(pols.B3[i]) || !fr.isZero(pols.B4[i]) || !fr.isZero(pols.B5[i])|| !fr.isZero(pols.B6[i])|| !fr.isZero(pols.B7[i]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -715440,6 +715931,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -715509,6 +716005,8 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro Kin1[5] = pols.A5[i]; Kin1[6] = pols.B0[i]; Kin1[7] = pols.B1[i]; + b0 = fr.toU64(pols.B0[i]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[i]) || !fr.isZero(pols.A6[i]) || !fr.isZero(pols.A7[i]) || !fr.isZero(pols.B2[i]) || !fr.isZero(pols.B3[i]) || !fr.isZero(pols.B4[i]) || !fr.isZero(pols.B5[i])|| !fr.isZero(pols.B6[i])|| !fr.isZero(pols.B7[i]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -715557,6 +716055,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -716548,6 +717051,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -716677,6 +717185,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -722991,6 +723504,8 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro Kin1[5] = pols.A5[i]; Kin1[6] = pols.B0[i]; Kin1[7] = pols.B1[i]; + b0 = fr.toU64(pols.B0[i]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[i]) || !fr.isZero(pols.A6[i]) || !fr.isZero(pols.A7[i]) || !fr.isZero(pols.B2[i]) || !fr.isZero(pols.B3[i]) || !fr.isZero(pols.B4[i]) || !fr.isZero(pols.B5[i])|| !fr.isZero(pols.B6[i])|| !fr.isZero(pols.B7[i]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -723023,6 +723538,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -723092,6 +723612,8 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro Kin1[5] = pols.A5[i]; Kin1[6] = pols.B0[i]; Kin1[7] = pols.B1[i]; + b0 = fr.toU64(pols.B0[i]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[i]) || !fr.isZero(pols.A6[i]) || !fr.isZero(pols.A7[i]) || !fr.isZero(pols.B2[i]) || !fr.isZero(pols.B3[i]) || !fr.isZero(pols.B4[i]) || !fr.isZero(pols.B5[i])|| !fr.isZero(pols.B6[i])|| !fr.isZero(pols.B7[i]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -723140,6 +723662,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -725104,6 +725631,8 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro Kin1[5] = pols.A5[i]; Kin1[6] = pols.B0[i]; Kin1[7] = pols.B1[i]; + b0 = fr.toU64(pols.B0[i]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[i]) || !fr.isZero(pols.A6[i]) || !fr.isZero(pols.A7[i]) || !fr.isZero(pols.B2[i]) || !fr.isZero(pols.B3[i]) || !fr.isZero(pols.B4[i]) || !fr.isZero(pols.B5[i])|| !fr.isZero(pols.B6[i])|| !fr.isZero(pols.B7[i]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -725136,6 +725665,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -725205,6 +725739,8 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro Kin1[5] = pols.A5[i]; Kin1[6] = pols.B0[i]; Kin1[7] = pols.B1[i]; + b0 = fr.toU64(pols.B0[i]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[i]) || !fr.isZero(pols.A6[i]) || !fr.isZero(pols.A7[i]) || !fr.isZero(pols.B2[i]) || !fr.isZero(pols.B3[i]) || !fr.isZero(pols.B4[i]) || !fr.isZero(pols.B5[i])|| !fr.isZero(pols.B6[i])|| !fr.isZero(pols.B7[i]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -725253,6 +725789,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -726038,6 +726579,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro hashValue.digest = dg; Goldilocks::Element aux[4]; scalar2fea(fr, dg, aux); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys) + { + proverRequest.programKeys.insert(NormalizeToNFormat(fea2string(fr, aux), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -729849,6 +730395,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -729978,6 +730529,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -730920,6 +731476,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -731049,6 +731610,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -734560,6 +735126,8 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro Kin1[5] = pols.A5[i]; Kin1[6] = pols.B0[i]; Kin1[7] = pols.B1[i]; + b0 = fr.toU64(pols.B0[i]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[i]) || !fr.isZero(pols.A6[i]) || !fr.isZero(pols.A7[i]) || !fr.isZero(pols.B2[i]) || !fr.isZero(pols.B3[i]) || !fr.isZero(pols.B4[i]) || !fr.isZero(pols.B5[i])|| !fr.isZero(pols.B6[i])|| !fr.isZero(pols.B7[i]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -734592,6 +735160,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -734661,6 +735234,8 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro Kin1[5] = pols.A5[i]; Kin1[6] = pols.B0[i]; Kin1[7] = pols.B1[i]; + b0 = fr.toU64(pols.B0[i]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[i]) || !fr.isZero(pols.A6[i]) || !fr.isZero(pols.A7[i]) || !fr.isZero(pols.B2[i]) || !fr.isZero(pols.B3[i]) || !fr.isZero(pols.B4[i]) || !fr.isZero(pols.B5[i])|| !fr.isZero(pols.B6[i])|| !fr.isZero(pols.B7[i]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -734709,6 +735284,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -735847,6 +736427,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -735976,6 +736561,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -737671,6 +738261,8 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro Kin1[5] = pols.A5[i]; Kin1[6] = pols.B0[i]; Kin1[7] = pols.B1[i]; + b0 = fr.toU64(pols.B0[i]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[i]) || !fr.isZero(pols.A6[i]) || !fr.isZero(pols.A7[i]) || !fr.isZero(pols.B2[i]) || !fr.isZero(pols.B3[i]) || !fr.isZero(pols.B4[i]) || !fr.isZero(pols.B5[i])|| !fr.isZero(pols.B6[i])|| !fr.isZero(pols.B7[i]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -737703,6 +738295,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -737772,6 +738369,8 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro Kin1[5] = pols.A5[i]; Kin1[6] = pols.B0[i]; Kin1[7] = pols.B1[i]; + b0 = fr.toU64(pols.B0[i]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[i]) || !fr.isZero(pols.A6[i]) || !fr.isZero(pols.A7[i]) || !fr.isZero(pols.B2[i]) || !fr.isZero(pols.B3[i]) || !fr.isZero(pols.B4[i]) || !fr.isZero(pols.B5[i])|| !fr.isZero(pols.B6[i])|| !fr.isZero(pols.B7[i]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -737820,6 +738419,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -738958,6 +739562,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -739087,6 +739696,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -773790,6 +774404,8 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro Kin1[5] = pols.A5[i]; Kin1[6] = pols.B0[i]; Kin1[7] = pols.B1[i]; + b0 = fr.toU64(pols.B0[i]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[i]) || !fr.isZero(pols.A6[i]) || !fr.isZero(pols.A7[i]) || !fr.isZero(pols.B2[i]) || !fr.isZero(pols.B3[i]) || !fr.isZero(pols.B4[i]) || !fr.isZero(pols.B5[i])|| !fr.isZero(pols.B6[i])|| !fr.isZero(pols.B7[i]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -773822,6 +774438,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -773891,6 +774512,8 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro Kin1[5] = pols.A5[i]; Kin1[6] = pols.B0[i]; Kin1[7] = pols.B1[i]; + b0 = fr.toU64(pols.B0[i]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[i]) || !fr.isZero(pols.A6[i]) || !fr.isZero(pols.A7[i]) || !fr.isZero(pols.B2[i]) || !fr.isZero(pols.B3[i]) || !fr.isZero(pols.B4[i]) || !fr.isZero(pols.B5[i])|| !fr.isZero(pols.B6[i])|| !fr.isZero(pols.B7[i]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -773939,6 +774562,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -774741,6 +775369,8 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro Kin1[5] = pols.A5[i]; Kin1[6] = pols.B0[i]; Kin1[7] = pols.B1[i]; + b0 = fr.toU64(pols.B0[i]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[i]) || !fr.isZero(pols.A6[i]) || !fr.isZero(pols.A7[i]) || !fr.isZero(pols.B2[i]) || !fr.isZero(pols.B3[i]) || !fr.isZero(pols.B4[i]) || !fr.isZero(pols.B5[i])|| !fr.isZero(pols.B6[i])|| !fr.isZero(pols.B7[i]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -774773,6 +775403,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -774842,6 +775477,8 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro Kin1[5] = pols.A5[i]; Kin1[6] = pols.B0[i]; Kin1[7] = pols.B1[i]; + b0 = fr.toU64(pols.B0[i]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[i]) || !fr.isZero(pols.A6[i]) || !fr.isZero(pols.A7[i]) || !fr.isZero(pols.B2[i]) || !fr.isZero(pols.B3[i]) || !fr.isZero(pols.B4[i]) || !fr.isZero(pols.B5[i])|| !fr.isZero(pols.B6[i])|| !fr.isZero(pols.B7[i]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -774890,6 +775527,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -775692,6 +776334,8 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro Kin1[5] = pols.A5[i]; Kin1[6] = pols.B0[i]; Kin1[7] = pols.B1[i]; + b0 = fr.toU64(pols.B0[i]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[i]) || !fr.isZero(pols.A6[i]) || !fr.isZero(pols.A7[i]) || !fr.isZero(pols.B2[i]) || !fr.isZero(pols.B3[i]) || !fr.isZero(pols.B4[i]) || !fr.isZero(pols.B5[i])|| !fr.isZero(pols.B6[i])|| !fr.isZero(pols.B7[i]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -775724,6 +776368,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -775793,6 +776442,8 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro Kin1[5] = pols.A5[i]; Kin1[6] = pols.B0[i]; Kin1[7] = pols.B1[i]; + b0 = fr.toU64(pols.B0[i]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[i]) || !fr.isZero(pols.A6[i]) || !fr.isZero(pols.A7[i]) || !fr.isZero(pols.B2[i]) || !fr.isZero(pols.B3[i]) || !fr.isZero(pols.B4[i]) || !fr.isZero(pols.B5[i])|| !fr.isZero(pols.B6[i])|| !fr.isZero(pols.B7[i]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -775841,6 +776492,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -826623,6 +827279,8 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro Kin1[5] = pols.A5[i]; Kin1[6] = pols.B0[i]; Kin1[7] = pols.B1[i]; + b0 = fr.toU64(pols.B0[i]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[i]) || !fr.isZero(pols.A6[i]) || !fr.isZero(pols.A7[i]) || !fr.isZero(pols.B2[i]) || !fr.isZero(pols.B3[i]) || !fr.isZero(pols.B4[i]) || !fr.isZero(pols.B5[i])|| !fr.isZero(pols.B6[i])|| !fr.isZero(pols.B7[i]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -826655,6 +827313,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -826724,6 +827387,8 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro Kin1[5] = pols.A5[i]; Kin1[6] = pols.B0[i]; Kin1[7] = pols.B1[i]; + b0 = fr.toU64(pols.B0[i]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[i]) || !fr.isZero(pols.A6[i]) || !fr.isZero(pols.A7[i]) || !fr.isZero(pols.B2[i]) || !fr.isZero(pols.B3[i]) || !fr.isZero(pols.B4[i]) || !fr.isZero(pols.B5[i])|| !fr.isZero(pols.B6[i])|| !fr.isZero(pols.B7[i]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -826772,6 +827437,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -828036,6 +828706,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -828165,6 +828840,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -828745,6 +829425,8 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro Kin1[5] = pols.A5[i]; Kin1[6] = pols.B0[i]; Kin1[7] = pols.B1[i]; + b0 = fr.toU64(pols.B0[i]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[i]) || !fr.isZero(pols.A6[i]) || !fr.isZero(pols.A7[i]) || !fr.isZero(pols.B2[i]) || !fr.isZero(pols.B3[i]) || !fr.isZero(pols.B4[i]) || !fr.isZero(pols.B5[i])|| !fr.isZero(pols.B6[i])|| !fr.isZero(pols.B7[i]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -828777,6 +829459,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -828846,6 +829533,8 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro Kin1[5] = pols.A5[i]; Kin1[6] = pols.B0[i]; Kin1[7] = pols.B1[i]; + b0 = fr.toU64(pols.B0[i]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[i]) || !fr.isZero(pols.A6[i]) || !fr.isZero(pols.A7[i]) || !fr.isZero(pols.B2[i]) || !fr.isZero(pols.B3[i]) || !fr.isZero(pols.B4[i]) || !fr.isZero(pols.B5[i])|| !fr.isZero(pols.B6[i])|| !fr.isZero(pols.B7[i]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -828894,6 +829583,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -830041,6 +830735,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -830170,6 +830869,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -858210,6 +858914,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro #endif fea2scalar(fr, hashIterator->second.digest, result); delete[] pBuffer; + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys) + { + proverRequest.programKeys.insert(NormalizeToNFormat(fea2string(fr, result), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -858439,6 +859148,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro hashValue.digest = dg; Goldilocks::Element aux[4]; scalar2fea(fr, dg, aux); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys) + { + proverRequest.programKeys.insert(NormalizeToNFormat(fea2string(fr, aux), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -862773,6 +863487,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -862902,6 +863621,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -865230,6 +865954,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -865359,6 +866088,11 @@ void main_exec_generated (fork_5::MainExecutor &mainExecutor, ProverRequest &pro gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[i], pols.SR1[i], pols.SR2[i], pols.SR3[i], pols.SR4[i], pols.SR5[i], pols.SR6[i], pols.SR7[i], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { diff --git a/src/main_sm/fork_5/main_exec_generated/main_exec_generated_fast.cpp b/src/main_sm/fork_5/main_exec_generated/main_exec_generated_fast.cpp index 79675246b..b76971e37 100644 --- a/src/main_sm/fork_5/main_exec_generated/main_exec_generated_fast.cpp +++ b/src/main_sm/fork_5/main_exec_generated/main_exec_generated_fast.cpp @@ -7819,6 +7819,8 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest Kin1[5] = pols.A5[0]; Kin1[6] = pols.B0[0]; Kin1[7] = pols.B1[0]; + b0 = fr.toU64(pols.B0[0]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[0]) || !fr.isZero(pols.A6[0]) || !fr.isZero(pols.A7[0]) || !fr.isZero(pols.B2[0]) || !fr.isZero(pols.B3[0]) || !fr.isZero(pols.B4[0]) || !fr.isZero(pols.B5[0])|| !fr.isZero(pols.B6[0])|| !fr.isZero(pols.B7[0]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -7851,6 +7853,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -7911,6 +7918,8 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest Kin1[5] = pols.A5[0]; Kin1[6] = pols.B0[0]; Kin1[7] = pols.B1[0]; + b0 = fr.toU64(pols.B0[0]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[0]) || !fr.isZero(pols.A6[0]) || !fr.isZero(pols.A7[0]) || !fr.isZero(pols.B2[0]) || !fr.isZero(pols.B3[0]) || !fr.isZero(pols.B4[0]) || !fr.isZero(pols.B5[0])|| !fr.isZero(pols.B6[0])|| !fr.isZero(pols.B7[0]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -7945,6 +7954,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -8253,6 +8267,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -8368,6 +8387,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -8732,6 +8756,8 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest Kin1[5] = pols.A5[0]; Kin1[6] = pols.B0[0]; Kin1[7] = pols.B1[0]; + b0 = fr.toU64(pols.B0[0]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[0]) || !fr.isZero(pols.A6[0]) || !fr.isZero(pols.A7[0]) || !fr.isZero(pols.B2[0]) || !fr.isZero(pols.B3[0]) || !fr.isZero(pols.B4[0]) || !fr.isZero(pols.B5[0])|| !fr.isZero(pols.B6[0])|| !fr.isZero(pols.B7[0]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -8764,6 +8790,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -8824,6 +8855,8 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest Kin1[5] = pols.A5[0]; Kin1[6] = pols.B0[0]; Kin1[7] = pols.B1[0]; + b0 = fr.toU64(pols.B0[0]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[0]) || !fr.isZero(pols.A6[0]) || !fr.isZero(pols.A7[0]) || !fr.isZero(pols.B2[0]) || !fr.isZero(pols.B3[0]) || !fr.isZero(pols.B4[0]) || !fr.isZero(pols.B5[0])|| !fr.isZero(pols.B6[0])|| !fr.isZero(pols.B7[0]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -8858,6 +8891,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -11311,6 +11349,8 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest Kin1[5] = pols.A5[0]; Kin1[6] = pols.B0[0]; Kin1[7] = pols.B1[0]; + b0 = fr.toU64(pols.B0[0]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[0]) || !fr.isZero(pols.A6[0]) || !fr.isZero(pols.A7[0]) || !fr.isZero(pols.B2[0]) || !fr.isZero(pols.B3[0]) || !fr.isZero(pols.B4[0]) || !fr.isZero(pols.B5[0])|| !fr.isZero(pols.B6[0])|| !fr.isZero(pols.B7[0]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -11343,6 +11383,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -11403,6 +11448,8 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest Kin1[5] = pols.A5[0]; Kin1[6] = pols.B0[0]; Kin1[7] = pols.B1[0]; + b0 = fr.toU64(pols.B0[0]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[0]) || !fr.isZero(pols.A6[0]) || !fr.isZero(pols.A7[0]) || !fr.isZero(pols.B2[0]) || !fr.isZero(pols.B3[0]) || !fr.isZero(pols.B4[0]) || !fr.isZero(pols.B5[0])|| !fr.isZero(pols.B6[0])|| !fr.isZero(pols.B7[0]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -11437,6 +11484,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -46542,6 +46594,8 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest Kin1[5] = pols.A5[0]; Kin1[6] = pols.B0[0]; Kin1[7] = pols.B1[0]; + b0 = fr.toU64(pols.B0[0]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[0]) || !fr.isZero(pols.A6[0]) || !fr.isZero(pols.A7[0]) || !fr.isZero(pols.B2[0]) || !fr.isZero(pols.B3[0]) || !fr.isZero(pols.B4[0]) || !fr.isZero(pols.B5[0])|| !fr.isZero(pols.B6[0])|| !fr.isZero(pols.B7[0]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -46574,6 +46628,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -46634,6 +46693,8 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest Kin1[5] = pols.A5[0]; Kin1[6] = pols.B0[0]; Kin1[7] = pols.B1[0]; + b0 = fr.toU64(pols.B0[0]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[0]) || !fr.isZero(pols.A6[0]) || !fr.isZero(pols.A7[0]) || !fr.isZero(pols.B2[0]) || !fr.isZero(pols.B3[0]) || !fr.isZero(pols.B4[0]) || !fr.isZero(pols.B5[0])|| !fr.isZero(pols.B6[0])|| !fr.isZero(pols.B7[0]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -46668,6 +46729,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -62867,6 +62933,8 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest Kin1[5] = pols.A5[0]; Kin1[6] = pols.B0[0]; Kin1[7] = pols.B1[0]; + b0 = fr.toU64(pols.B0[0]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[0]) || !fr.isZero(pols.A6[0]) || !fr.isZero(pols.A7[0]) || !fr.isZero(pols.B2[0]) || !fr.isZero(pols.B3[0]) || !fr.isZero(pols.B4[0]) || !fr.isZero(pols.B5[0])|| !fr.isZero(pols.B6[0])|| !fr.isZero(pols.B7[0]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -62899,6 +62967,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -62959,6 +63032,8 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest Kin1[5] = pols.A5[0]; Kin1[6] = pols.B0[0]; Kin1[7] = pols.B1[0]; + b0 = fr.toU64(pols.B0[0]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[0]) || !fr.isZero(pols.A6[0]) || !fr.isZero(pols.A7[0]) || !fr.isZero(pols.B2[0]) || !fr.isZero(pols.B3[0]) || !fr.isZero(pols.B4[0]) || !fr.isZero(pols.B5[0])|| !fr.isZero(pols.B6[0])|| !fr.isZero(pols.B7[0]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -62993,6 +63068,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -63694,6 +63774,8 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest Kin1[5] = pols.A5[0]; Kin1[6] = pols.B0[0]; Kin1[7] = pols.B1[0]; + b0 = fr.toU64(pols.B0[0]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[0]) || !fr.isZero(pols.A6[0]) || !fr.isZero(pols.A7[0]) || !fr.isZero(pols.B2[0]) || !fr.isZero(pols.B3[0]) || !fr.isZero(pols.B4[0]) || !fr.isZero(pols.B5[0])|| !fr.isZero(pols.B6[0])|| !fr.isZero(pols.B7[0]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -63726,6 +63808,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -63786,6 +63873,8 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest Kin1[5] = pols.A5[0]; Kin1[6] = pols.B0[0]; Kin1[7] = pols.B1[0]; + b0 = fr.toU64(pols.B0[0]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[0]) || !fr.isZero(pols.A6[0]) || !fr.isZero(pols.A7[0]) || !fr.isZero(pols.B2[0]) || !fr.isZero(pols.B3[0]) || !fr.isZero(pols.B4[0]) || !fr.isZero(pols.B5[0])|| !fr.isZero(pols.B6[0])|| !fr.isZero(pols.B7[0]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -63820,6 +63909,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -69455,6 +69549,8 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest Kin1[5] = pols.A5[0]; Kin1[6] = pols.B0[0]; Kin1[7] = pols.B1[0]; + b0 = fr.toU64(pols.B0[0]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[0]) || !fr.isZero(pols.A6[0]) || !fr.isZero(pols.A7[0]) || !fr.isZero(pols.B2[0]) || !fr.isZero(pols.B3[0]) || !fr.isZero(pols.B4[0]) || !fr.isZero(pols.B5[0])|| !fr.isZero(pols.B6[0])|| !fr.isZero(pols.B7[0]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -69487,6 +69583,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -69547,6 +69648,8 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest Kin1[5] = pols.A5[0]; Kin1[6] = pols.B0[0]; Kin1[7] = pols.B1[0]; + b0 = fr.toU64(pols.B0[0]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[0]) || !fr.isZero(pols.A6[0]) || !fr.isZero(pols.A7[0]) || !fr.isZero(pols.B2[0]) || !fr.isZero(pols.B3[0]) || !fr.isZero(pols.B4[0]) || !fr.isZero(pols.B5[0])|| !fr.isZero(pols.B6[0])|| !fr.isZero(pols.B7[0]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -69581,6 +69684,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -70056,6 +70164,8 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest Kin1[5] = pols.A5[0]; Kin1[6] = pols.B0[0]; Kin1[7] = pols.B1[0]; + b0 = fr.toU64(pols.B0[0]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[0]) || !fr.isZero(pols.A6[0]) || !fr.isZero(pols.A7[0]) || !fr.isZero(pols.B2[0]) || !fr.isZero(pols.B3[0]) || !fr.isZero(pols.B4[0]) || !fr.isZero(pols.B5[0])|| !fr.isZero(pols.B6[0])|| !fr.isZero(pols.B7[0]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -70088,6 +70198,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -70148,6 +70263,8 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest Kin1[5] = pols.A5[0]; Kin1[6] = pols.B0[0]; Kin1[7] = pols.B1[0]; + b0 = fr.toU64(pols.B0[0]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[0]) || !fr.isZero(pols.A6[0]) || !fr.isZero(pols.A7[0]) || !fr.isZero(pols.B2[0]) || !fr.isZero(pols.B3[0]) || !fr.isZero(pols.B4[0]) || !fr.isZero(pols.B5[0])|| !fr.isZero(pols.B6[0])|| !fr.isZero(pols.B7[0]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -70182,6 +70299,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -71786,6 +71908,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -71901,6 +72028,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -90146,6 +90278,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -90261,6 +90398,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -90520,6 +90662,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -90635,6 +90782,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -99049,6 +99201,8 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest Kin1[5] = pols.A5[0]; Kin1[6] = pols.B0[0]; Kin1[7] = pols.B1[0]; + b0 = fr.toU64(pols.B0[0]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[0]) || !fr.isZero(pols.A6[0]) || !fr.isZero(pols.A7[0]) || !fr.isZero(pols.B2[0]) || !fr.isZero(pols.B3[0]) || !fr.isZero(pols.B4[0]) || !fr.isZero(pols.B5[0])|| !fr.isZero(pols.B6[0])|| !fr.isZero(pols.B7[0]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -99081,6 +99235,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -99141,6 +99300,8 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest Kin1[5] = pols.A5[0]; Kin1[6] = pols.B0[0]; Kin1[7] = pols.B1[0]; + b0 = fr.toU64(pols.B0[0]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[0]) || !fr.isZero(pols.A6[0]) || !fr.isZero(pols.A7[0]) || !fr.isZero(pols.B2[0]) || !fr.isZero(pols.B3[0]) || !fr.isZero(pols.B4[0]) || !fr.isZero(pols.B5[0])|| !fr.isZero(pols.B6[0])|| !fr.isZero(pols.B7[0]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -99175,6 +99336,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -99710,6 +99876,8 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest Kin1[5] = pols.A5[0]; Kin1[6] = pols.B0[0]; Kin1[7] = pols.B1[0]; + b0 = fr.toU64(pols.B0[0]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[0]) || !fr.isZero(pols.A6[0]) || !fr.isZero(pols.A7[0]) || !fr.isZero(pols.B2[0]) || !fr.isZero(pols.B3[0]) || !fr.isZero(pols.B4[0]) || !fr.isZero(pols.B5[0])|| !fr.isZero(pols.B6[0])|| !fr.isZero(pols.B7[0]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -99742,6 +99910,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -99802,6 +99975,8 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest Kin1[5] = pols.A5[0]; Kin1[6] = pols.B0[0]; Kin1[7] = pols.B1[0]; + b0 = fr.toU64(pols.B0[0]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[0]) || !fr.isZero(pols.A6[0]) || !fr.isZero(pols.A7[0]) || !fr.isZero(pols.B2[0]) || !fr.isZero(pols.B3[0]) || !fr.isZero(pols.B4[0]) || !fr.isZero(pols.B5[0])|| !fr.isZero(pols.B6[0])|| !fr.isZero(pols.B7[0]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -99836,6 +100011,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -101537,6 +101717,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -101652,6 +101837,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -111472,6 +111662,8 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest Kin1[5] = pols.A5[0]; Kin1[6] = pols.B0[0]; Kin1[7] = pols.B1[0]; + b0 = fr.toU64(pols.B0[0]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[0]) || !fr.isZero(pols.A6[0]) || !fr.isZero(pols.A7[0]) || !fr.isZero(pols.B2[0]) || !fr.isZero(pols.B3[0]) || !fr.isZero(pols.B4[0]) || !fr.isZero(pols.B5[0])|| !fr.isZero(pols.B6[0])|| !fr.isZero(pols.B7[0]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -111504,6 +111696,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -111564,6 +111761,8 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest Kin1[5] = pols.A5[0]; Kin1[6] = pols.B0[0]; Kin1[7] = pols.B1[0]; + b0 = fr.toU64(pols.B0[0]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[0]) || !fr.isZero(pols.A6[0]) || !fr.isZero(pols.A7[0]) || !fr.isZero(pols.B2[0]) || !fr.isZero(pols.B3[0]) || !fr.isZero(pols.B4[0]) || !fr.isZero(pols.B5[0])|| !fr.isZero(pols.B6[0])|| !fr.isZero(pols.B7[0]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -111598,6 +111797,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -112907,6 +113111,8 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest Kin1[5] = pols.A5[0]; Kin1[6] = pols.B0[0]; Kin1[7] = pols.B1[0]; + b0 = fr.toU64(pols.B0[0]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[0]) || !fr.isZero(pols.A6[0]) || !fr.isZero(pols.A7[0]) || !fr.isZero(pols.B2[0]) || !fr.isZero(pols.B3[0]) || !fr.isZero(pols.B4[0]) || !fr.isZero(pols.B5[0])|| !fr.isZero(pols.B6[0])|| !fr.isZero(pols.B7[0]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -112939,6 +113145,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -112999,6 +113210,8 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest Kin1[5] = pols.A5[0]; Kin1[6] = pols.B0[0]; Kin1[7] = pols.B1[0]; + b0 = fr.toU64(pols.B0[0]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[0]) || !fr.isZero(pols.A6[0]) || !fr.isZero(pols.A7[0]) || !fr.isZero(pols.B2[0]) || !fr.isZero(pols.B3[0]) || !fr.isZero(pols.B4[0]) || !fr.isZero(pols.B5[0])|| !fr.isZero(pols.B6[0])|| !fr.isZero(pols.B7[0]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -113033,6 +113246,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -113598,6 +113816,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -113713,6 +113936,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -114079,6 +114307,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -114194,6 +114427,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -167306,6 +167544,8 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest Kin1[5] = pols.A5[0]; Kin1[6] = pols.B0[0]; Kin1[7] = pols.B1[0]; + b0 = fr.toU64(pols.B0[0]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[0]) || !fr.isZero(pols.A6[0]) || !fr.isZero(pols.A7[0]) || !fr.isZero(pols.B2[0]) || !fr.isZero(pols.B3[0]) || !fr.isZero(pols.B4[0]) || !fr.isZero(pols.B5[0])|| !fr.isZero(pols.B6[0])|| !fr.isZero(pols.B7[0]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -167338,6 +167578,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -167398,6 +167643,8 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest Kin1[5] = pols.A5[0]; Kin1[6] = pols.B0[0]; Kin1[7] = pols.B1[0]; + b0 = fr.toU64(pols.B0[0]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[0]) || !fr.isZero(pols.A6[0]) || !fr.isZero(pols.A7[0]) || !fr.isZero(pols.B2[0]) || !fr.isZero(pols.B3[0]) || !fr.isZero(pols.B4[0]) || !fr.isZero(pols.B5[0])|| !fr.isZero(pols.B6[0])|| !fr.isZero(pols.B7[0]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -167432,6 +167679,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -169038,6 +169290,8 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest Kin1[5] = pols.A5[0]; Kin1[6] = pols.B0[0]; Kin1[7] = pols.B1[0]; + b0 = fr.toU64(pols.B0[0]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[0]) || !fr.isZero(pols.A6[0]) || !fr.isZero(pols.A7[0]) || !fr.isZero(pols.B2[0]) || !fr.isZero(pols.B3[0]) || !fr.isZero(pols.B4[0]) || !fr.isZero(pols.B5[0])|| !fr.isZero(pols.B6[0])|| !fr.isZero(pols.B7[0]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -169070,6 +169324,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -169130,6 +169389,8 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest Kin1[5] = pols.A5[0]; Kin1[6] = pols.B0[0]; Kin1[7] = pols.B1[0]; + b0 = fr.toU64(pols.B0[0]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[0]) || !fr.isZero(pols.A6[0]) || !fr.isZero(pols.A7[0]) || !fr.isZero(pols.B2[0]) || !fr.isZero(pols.B3[0]) || !fr.isZero(pols.B4[0]) || !fr.isZero(pols.B5[0])|| !fr.isZero(pols.B6[0])|| !fr.isZero(pols.B7[0]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -169164,6 +169425,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -169465,6 +169731,8 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest Kin1[5] = pols.A5[0]; Kin1[6] = pols.B0[0]; Kin1[7] = pols.B1[0]; + b0 = fr.toU64(pols.B0[0]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[0]) || !fr.isZero(pols.A6[0]) || !fr.isZero(pols.A7[0]) || !fr.isZero(pols.B2[0]) || !fr.isZero(pols.B3[0]) || !fr.isZero(pols.B4[0]) || !fr.isZero(pols.B5[0])|| !fr.isZero(pols.B6[0])|| !fr.isZero(pols.B7[0]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -169497,6 +169765,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -169557,6 +169830,8 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest Kin1[5] = pols.A5[0]; Kin1[6] = pols.B0[0]; Kin1[7] = pols.B1[0]; + b0 = fr.toU64(pols.B0[0]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[0]) || !fr.isZero(pols.A6[0]) || !fr.isZero(pols.A7[0]) || !fr.isZero(pols.B2[0]) || !fr.isZero(pols.B3[0]) || !fr.isZero(pols.B4[0]) || !fr.isZero(pols.B5[0])|| !fr.isZero(pols.B6[0])|| !fr.isZero(pols.B7[0]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -169591,6 +169866,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -173938,6 +174218,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -174053,6 +174338,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -183226,6 +183516,8 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest Kin1[5] = pols.A5[0]; Kin1[6] = pols.B0[0]; Kin1[7] = pols.B1[0]; + b0 = fr.toU64(pols.B0[0]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[0]) || !fr.isZero(pols.A6[0]) || !fr.isZero(pols.A7[0]) || !fr.isZero(pols.B2[0]) || !fr.isZero(pols.B3[0]) || !fr.isZero(pols.B4[0]) || !fr.isZero(pols.B5[0])|| !fr.isZero(pols.B6[0])|| !fr.isZero(pols.B7[0]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -183258,6 +183550,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -183318,6 +183615,8 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest Kin1[5] = pols.A5[0]; Kin1[6] = pols.B0[0]; Kin1[7] = pols.B1[0]; + b0 = fr.toU64(pols.B0[0]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[0]) || !fr.isZero(pols.A6[0]) || !fr.isZero(pols.A7[0]) || !fr.isZero(pols.B2[0]) || !fr.isZero(pols.B3[0]) || !fr.isZero(pols.B4[0]) || !fr.isZero(pols.B5[0])|| !fr.isZero(pols.B6[0])|| !fr.isZero(pols.B7[0]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -183352,6 +183651,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -189459,6 +189763,8 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest Kin1[5] = pols.A5[0]; Kin1[6] = pols.B0[0]; Kin1[7] = pols.B1[0]; + b0 = fr.toU64(pols.B0[0]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[0]) || !fr.isZero(pols.A6[0]) || !fr.isZero(pols.A7[0]) || !fr.isZero(pols.B2[0]) || !fr.isZero(pols.B3[0]) || !fr.isZero(pols.B4[0]) || !fr.isZero(pols.B5[0])|| !fr.isZero(pols.B6[0])|| !fr.isZero(pols.B7[0]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -189491,6 +189797,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -189551,6 +189862,8 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest Kin1[5] = pols.A5[0]; Kin1[6] = pols.B0[0]; Kin1[7] = pols.B1[0]; + b0 = fr.toU64(pols.B0[0]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[0]) || !fr.isZero(pols.A6[0]) || !fr.isZero(pols.A7[0]) || !fr.isZero(pols.B2[0]) || !fr.isZero(pols.B3[0]) || !fr.isZero(pols.B4[0]) || !fr.isZero(pols.B5[0])|| !fr.isZero(pols.B6[0])|| !fr.isZero(pols.B7[0]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -189585,6 +189898,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -192460,6 +192778,8 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest Kin1[5] = pols.A5[0]; Kin1[6] = pols.B0[0]; Kin1[7] = pols.B1[0]; + b0 = fr.toU64(pols.B0[0]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[0]) || !fr.isZero(pols.A6[0]) || !fr.isZero(pols.A7[0]) || !fr.isZero(pols.B2[0]) || !fr.isZero(pols.B3[0]) || !fr.isZero(pols.B4[0]) || !fr.isZero(pols.B5[0])|| !fr.isZero(pols.B6[0])|| !fr.isZero(pols.B7[0]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -192492,6 +192812,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -192552,6 +192877,8 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest Kin1[5] = pols.A5[0]; Kin1[6] = pols.B0[0]; Kin1[7] = pols.B1[0]; + b0 = fr.toU64(pols.B0[0]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[0]) || !fr.isZero(pols.A6[0]) || !fr.isZero(pols.A7[0]) || !fr.isZero(pols.B2[0]) || !fr.isZero(pols.B3[0]) || !fr.isZero(pols.B4[0]) || !fr.isZero(pols.B5[0])|| !fr.isZero(pols.B6[0])|| !fr.isZero(pols.B7[0]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -192586,6 +192913,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -193764,6 +194096,8 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest Kin1[5] = pols.A5[0]; Kin1[6] = pols.B0[0]; Kin1[7] = pols.B1[0]; + b0 = fr.toU64(pols.B0[0]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[0]) || !fr.isZero(pols.A6[0]) || !fr.isZero(pols.A7[0]) || !fr.isZero(pols.B2[0]) || !fr.isZero(pols.B3[0]) || !fr.isZero(pols.B4[0]) || !fr.isZero(pols.B5[0])|| !fr.isZero(pols.B6[0])|| !fr.isZero(pols.B7[0]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -193796,6 +194130,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -193856,6 +194195,8 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest Kin1[5] = pols.A5[0]; Kin1[6] = pols.B0[0]; Kin1[7] = pols.B1[0]; + b0 = fr.toU64(pols.B0[0]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[0]) || !fr.isZero(pols.A6[0]) || !fr.isZero(pols.A7[0]) || !fr.isZero(pols.B2[0]) || !fr.isZero(pols.B3[0]) || !fr.isZero(pols.B4[0]) || !fr.isZero(pols.B5[0])|| !fr.isZero(pols.B6[0])|| !fr.isZero(pols.B7[0]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -193890,6 +194231,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -194288,6 +194634,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest hashValue.digest = dg; Goldilocks::Element aux[4]; scalar2fea(fr, dg, aux); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys) + { + proverRequest.programKeys.insert(NormalizeToNFormat(fea2string(fr, aux), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -200101,6 +200452,8 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest Kin1[5] = pols.A5[0]; Kin1[6] = pols.B0[0]; Kin1[7] = pols.B1[0]; + b0 = fr.toU64(pols.B0[0]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[0]) || !fr.isZero(pols.A6[0]) || !fr.isZero(pols.A7[0]) || !fr.isZero(pols.B2[0]) || !fr.isZero(pols.B3[0]) || !fr.isZero(pols.B4[0]) || !fr.isZero(pols.B5[0])|| !fr.isZero(pols.B6[0])|| !fr.isZero(pols.B7[0]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -200133,6 +200486,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -200193,6 +200551,8 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest Kin1[5] = pols.A5[0]; Kin1[6] = pols.B0[0]; Kin1[7] = pols.B1[0]; + b0 = fr.toU64(pols.B0[0]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[0]) || !fr.isZero(pols.A6[0]) || !fr.isZero(pols.A7[0]) || !fr.isZero(pols.B2[0]) || !fr.isZero(pols.B3[0]) || !fr.isZero(pols.B4[0]) || !fr.isZero(pols.B5[0])|| !fr.isZero(pols.B6[0])|| !fr.isZero(pols.B7[0]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -200227,6 +200587,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -295680,6 +296045,8 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest Kin1[5] = pols.A5[0]; Kin1[6] = pols.B0[0]; Kin1[7] = pols.B1[0]; + b0 = fr.toU64(pols.B0[0]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[0]) || !fr.isZero(pols.A6[0]) || !fr.isZero(pols.A7[0]) || !fr.isZero(pols.B2[0]) || !fr.isZero(pols.B3[0]) || !fr.isZero(pols.B4[0]) || !fr.isZero(pols.B5[0])|| !fr.isZero(pols.B6[0])|| !fr.isZero(pols.B7[0]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -295712,6 +296079,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -295772,6 +296144,8 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest Kin1[5] = pols.A5[0]; Kin1[6] = pols.B0[0]; Kin1[7] = pols.B1[0]; + b0 = fr.toU64(pols.B0[0]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[0]) || !fr.isZero(pols.A6[0]) || !fr.isZero(pols.A7[0]) || !fr.isZero(pols.B2[0]) || !fr.isZero(pols.B3[0]) || !fr.isZero(pols.B4[0]) || !fr.isZero(pols.B5[0])|| !fr.isZero(pols.B6[0])|| !fr.isZero(pols.B7[0]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -295806,6 +296180,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -296100,6 +296479,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -296215,6 +296599,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -297828,6 +298217,8 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest Kin1[5] = pols.A5[0]; Kin1[6] = pols.B0[0]; Kin1[7] = pols.B1[0]; + b0 = fr.toU64(pols.B0[0]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[0]) || !fr.isZero(pols.A6[0]) || !fr.isZero(pols.A7[0]) || !fr.isZero(pols.B2[0]) || !fr.isZero(pols.B3[0]) || !fr.isZero(pols.B4[0]) || !fr.isZero(pols.B5[0])|| !fr.isZero(pols.B6[0])|| !fr.isZero(pols.B7[0]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -297860,6 +298251,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -297920,6 +298316,8 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest Kin1[5] = pols.A5[0]; Kin1[6] = pols.B0[0]; Kin1[7] = pols.B1[0]; + b0 = fr.toU64(pols.B0[0]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[0]) || !fr.isZero(pols.A6[0]) || !fr.isZero(pols.A7[0]) || !fr.isZero(pols.B2[0]) || !fr.isZero(pols.B3[0]) || !fr.isZero(pols.B4[0]) || !fr.isZero(pols.B5[0])|| !fr.isZero(pols.B6[0])|| !fr.isZero(pols.B7[0]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -297954,6 +298352,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -298248,6 +298651,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -298363,6 +298771,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -314463,6 +314876,8 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest Kin1[5] = pols.A5[0]; Kin1[6] = pols.B0[0]; Kin1[7] = pols.B1[0]; + b0 = fr.toU64(pols.B0[0]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[0]) || !fr.isZero(pols.A6[0]) || !fr.isZero(pols.A7[0]) || !fr.isZero(pols.B2[0]) || !fr.isZero(pols.B3[0]) || !fr.isZero(pols.B4[0]) || !fr.isZero(pols.B5[0])|| !fr.isZero(pols.B6[0])|| !fr.isZero(pols.B7[0]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -314495,6 +314910,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -314555,6 +314975,8 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest Kin1[5] = pols.A5[0]; Kin1[6] = pols.B0[0]; Kin1[7] = pols.B1[0]; + b0 = fr.toU64(pols.B0[0]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[0]) || !fr.isZero(pols.A6[0]) || !fr.isZero(pols.A7[0]) || !fr.isZero(pols.B2[0]) || !fr.isZero(pols.B3[0]) || !fr.isZero(pols.B4[0]) || !fr.isZero(pols.B5[0])|| !fr.isZero(pols.B6[0])|| !fr.isZero(pols.B7[0]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -314589,6 +315011,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -316961,6 +317388,8 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest Kin1[5] = pols.A5[0]; Kin1[6] = pols.B0[0]; Kin1[7] = pols.B1[0]; + b0 = fr.toU64(pols.B0[0]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[0]) || !fr.isZero(pols.A6[0]) || !fr.isZero(pols.A7[0]) || !fr.isZero(pols.B2[0]) || !fr.isZero(pols.B3[0]) || !fr.isZero(pols.B4[0]) || !fr.isZero(pols.B5[0])|| !fr.isZero(pols.B6[0])|| !fr.isZero(pols.B7[0]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -316993,6 +317422,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -317053,6 +317487,8 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest Kin1[5] = pols.A5[0]; Kin1[6] = pols.B0[0]; Kin1[7] = pols.B1[0]; + b0 = fr.toU64(pols.B0[0]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[0]) || !fr.isZero(pols.A6[0]) || !fr.isZero(pols.A7[0]) || !fr.isZero(pols.B2[0]) || !fr.isZero(pols.B3[0]) || !fr.isZero(pols.B4[0]) || !fr.isZero(pols.B5[0])|| !fr.isZero(pols.B6[0])|| !fr.isZero(pols.B7[0]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -317087,6 +317523,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -317853,6 +318294,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -317968,6 +318414,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -320930,6 +321381,8 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest Kin1[5] = pols.A5[0]; Kin1[6] = pols.B0[0]; Kin1[7] = pols.B1[0]; + b0 = fr.toU64(pols.B0[0]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[0]) || !fr.isZero(pols.A6[0]) || !fr.isZero(pols.A7[0]) || !fr.isZero(pols.B2[0]) || !fr.isZero(pols.B3[0]) || !fr.isZero(pols.B4[0]) || !fr.isZero(pols.B5[0])|| !fr.isZero(pols.B6[0])|| !fr.isZero(pols.B7[0]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -320962,6 +321415,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -321022,6 +321480,8 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest Kin1[5] = pols.A5[0]; Kin1[6] = pols.B0[0]; Kin1[7] = pols.B1[0]; + b0 = fr.toU64(pols.B0[0]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[0]) || !fr.isZero(pols.A6[0]) || !fr.isZero(pols.A7[0]) || !fr.isZero(pols.B2[0]) || !fr.isZero(pols.B3[0]) || !fr.isZero(pols.B4[0]) || !fr.isZero(pols.B5[0])|| !fr.isZero(pols.B6[0])|| !fr.isZero(pols.B7[0]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -321056,6 +321516,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -322305,6 +322770,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -322420,6 +322890,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -331397,6 +331872,8 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest Kin1[5] = pols.A5[0]; Kin1[6] = pols.B0[0]; Kin1[7] = pols.B1[0]; + b0 = fr.toU64(pols.B0[0]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[0]) || !fr.isZero(pols.A6[0]) || !fr.isZero(pols.A7[0]) || !fr.isZero(pols.B2[0]) || !fr.isZero(pols.B3[0]) || !fr.isZero(pols.B4[0]) || !fr.isZero(pols.B5[0])|| !fr.isZero(pols.B6[0])|| !fr.isZero(pols.B7[0]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -331429,6 +331906,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -331489,6 +331971,8 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest Kin1[5] = pols.A5[0]; Kin1[6] = pols.B0[0]; Kin1[7] = pols.B1[0]; + b0 = fr.toU64(pols.B0[0]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[0]) || !fr.isZero(pols.A6[0]) || !fr.isZero(pols.A7[0]) || !fr.isZero(pols.B2[0]) || !fr.isZero(pols.B3[0]) || !fr.isZero(pols.B4[0]) || !fr.isZero(pols.B5[0])|| !fr.isZero(pols.B6[0])|| !fr.isZero(pols.B7[0]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -331523,6 +332007,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -331927,6 +332416,8 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest Kin1[5] = pols.A5[0]; Kin1[6] = pols.B0[0]; Kin1[7] = pols.B1[0]; + b0 = fr.toU64(pols.B0[0]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[0]) || !fr.isZero(pols.A6[0]) || !fr.isZero(pols.A7[0]) || !fr.isZero(pols.B2[0]) || !fr.isZero(pols.B3[0]) || !fr.isZero(pols.B4[0]) || !fr.isZero(pols.B5[0])|| !fr.isZero(pols.B6[0])|| !fr.isZero(pols.B7[0]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -331959,6 +332450,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -332019,6 +332515,8 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest Kin1[5] = pols.A5[0]; Kin1[6] = pols.B0[0]; Kin1[7] = pols.B1[0]; + b0 = fr.toU64(pols.B0[0]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[0]) || !fr.isZero(pols.A6[0]) || !fr.isZero(pols.A7[0]) || !fr.isZero(pols.B2[0]) || !fr.isZero(pols.B3[0]) || !fr.isZero(pols.B4[0]) || !fr.isZero(pols.B5[0])|| !fr.isZero(pols.B6[0])|| !fr.isZero(pols.B7[0]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -332053,6 +332551,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -332567,6 +333070,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -332682,6 +333190,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -335715,6 +336228,8 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest Kin1[5] = pols.A5[0]; Kin1[6] = pols.B0[0]; Kin1[7] = pols.B1[0]; + b0 = fr.toU64(pols.B0[0]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[0]) || !fr.isZero(pols.A6[0]) || !fr.isZero(pols.A7[0]) || !fr.isZero(pols.B2[0]) || !fr.isZero(pols.B3[0]) || !fr.isZero(pols.B4[0]) || !fr.isZero(pols.B5[0])|| !fr.isZero(pols.B6[0])|| !fr.isZero(pols.B7[0]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -335747,6 +336262,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -335807,6 +336327,8 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest Kin1[5] = pols.A5[0]; Kin1[6] = pols.B0[0]; Kin1[7] = pols.B1[0]; + b0 = fr.toU64(pols.B0[0]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[0]) || !fr.isZero(pols.A6[0]) || !fr.isZero(pols.A7[0]) || !fr.isZero(pols.B2[0]) || !fr.isZero(pols.B3[0]) || !fr.isZero(pols.B4[0]) || !fr.isZero(pols.B5[0])|| !fr.isZero(pols.B6[0])|| !fr.isZero(pols.B7[0]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -335841,6 +336363,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -336760,6 +337287,8 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest Kin1[5] = pols.A5[0]; Kin1[6] = pols.B0[0]; Kin1[7] = pols.B1[0]; + b0 = fr.toU64(pols.B0[0]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[0]) || !fr.isZero(pols.A6[0]) || !fr.isZero(pols.A7[0]) || !fr.isZero(pols.B2[0]) || !fr.isZero(pols.B3[0]) || !fr.isZero(pols.B4[0]) || !fr.isZero(pols.B5[0])|| !fr.isZero(pols.B6[0])|| !fr.isZero(pols.B7[0]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -336792,6 +337321,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -336852,6 +337386,8 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest Kin1[5] = pols.A5[0]; Kin1[6] = pols.B0[0]; Kin1[7] = pols.B1[0]; + b0 = fr.toU64(pols.B0[0]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[0]) || !fr.isZero(pols.A6[0]) || !fr.isZero(pols.A7[0]) || !fr.isZero(pols.B2[0]) || !fr.isZero(pols.B3[0]) || !fr.isZero(pols.B4[0]) || !fr.isZero(pols.B5[0])|| !fr.isZero(pols.B6[0])|| !fr.isZero(pols.B7[0]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -336886,6 +337422,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -337287,6 +337828,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest hashValue.digest = dg; Goldilocks::Element aux[4]; scalar2fea(fr, dg, aux); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys) + { + proverRequest.programKeys.insert(NormalizeToNFormat(fea2string(fr, aux), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -339169,6 +339715,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -339284,6 +339835,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -339772,6 +340328,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -339887,6 +340448,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -341522,6 +342088,8 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest Kin1[5] = pols.A5[0]; Kin1[6] = pols.B0[0]; Kin1[7] = pols.B1[0]; + b0 = fr.toU64(pols.B0[0]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[0]) || !fr.isZero(pols.A6[0]) || !fr.isZero(pols.A7[0]) || !fr.isZero(pols.B2[0]) || !fr.isZero(pols.B3[0]) || !fr.isZero(pols.B4[0]) || !fr.isZero(pols.B5[0])|| !fr.isZero(pols.B6[0])|| !fr.isZero(pols.B7[0]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -341554,6 +342122,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -341614,6 +342187,8 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest Kin1[5] = pols.A5[0]; Kin1[6] = pols.B0[0]; Kin1[7] = pols.B1[0]; + b0 = fr.toU64(pols.B0[0]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[0]) || !fr.isZero(pols.A6[0]) || !fr.isZero(pols.A7[0]) || !fr.isZero(pols.B2[0]) || !fr.isZero(pols.B3[0]) || !fr.isZero(pols.B4[0]) || !fr.isZero(pols.B5[0])|| !fr.isZero(pols.B6[0])|| !fr.isZero(pols.B7[0]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -341648,6 +342223,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -342240,6 +342820,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -342355,6 +342940,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -343201,6 +343791,8 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest Kin1[5] = pols.A5[0]; Kin1[6] = pols.B0[0]; Kin1[7] = pols.B1[0]; + b0 = fr.toU64(pols.B0[0]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[0]) || !fr.isZero(pols.A6[0]) || !fr.isZero(pols.A7[0]) || !fr.isZero(pols.B2[0]) || !fr.isZero(pols.B3[0]) || !fr.isZero(pols.B4[0]) || !fr.isZero(pols.B5[0])|| !fr.isZero(pols.B6[0])|| !fr.isZero(pols.B7[0]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -343233,6 +343825,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -343293,6 +343890,8 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest Kin1[5] = pols.A5[0]; Kin1[6] = pols.B0[0]; Kin1[7] = pols.B1[0]; + b0 = fr.toU64(pols.B0[0]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[0]) || !fr.isZero(pols.A6[0]) || !fr.isZero(pols.A7[0]) || !fr.isZero(pols.B2[0]) || !fr.isZero(pols.B3[0]) || !fr.isZero(pols.B4[0]) || !fr.isZero(pols.B5[0])|| !fr.isZero(pols.B6[0])|| !fr.isZero(pols.B7[0]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -343327,6 +343926,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -343918,6 +344522,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -344033,6 +344642,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -359736,6 +360350,8 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest Kin1[5] = pols.A5[0]; Kin1[6] = pols.B0[0]; Kin1[7] = pols.B1[0]; + b0 = fr.toU64(pols.B0[0]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[0]) || !fr.isZero(pols.A6[0]) || !fr.isZero(pols.A7[0]) || !fr.isZero(pols.B2[0]) || !fr.isZero(pols.B3[0]) || !fr.isZero(pols.B4[0]) || !fr.isZero(pols.B5[0])|| !fr.isZero(pols.B6[0])|| !fr.isZero(pols.B7[0]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -359768,6 +360384,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -359828,6 +360449,8 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest Kin1[5] = pols.A5[0]; Kin1[6] = pols.B0[0]; Kin1[7] = pols.B1[0]; + b0 = fr.toU64(pols.B0[0]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[0]) || !fr.isZero(pols.A6[0]) || !fr.isZero(pols.A7[0]) || !fr.isZero(pols.B2[0]) || !fr.isZero(pols.B3[0]) || !fr.isZero(pols.B4[0]) || !fr.isZero(pols.B5[0])|| !fr.isZero(pols.B6[0])|| !fr.isZero(pols.B7[0]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -359862,6 +360485,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -360266,6 +360894,8 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest Kin1[5] = pols.A5[0]; Kin1[6] = pols.B0[0]; Kin1[7] = pols.B1[0]; + b0 = fr.toU64(pols.B0[0]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[0]) || !fr.isZero(pols.A6[0]) || !fr.isZero(pols.A7[0]) || !fr.isZero(pols.B2[0]) || !fr.isZero(pols.B3[0]) || !fr.isZero(pols.B4[0]) || !fr.isZero(pols.B5[0])|| !fr.isZero(pols.B6[0])|| !fr.isZero(pols.B7[0]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -360298,6 +360928,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -360358,6 +360993,8 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest Kin1[5] = pols.A5[0]; Kin1[6] = pols.B0[0]; Kin1[7] = pols.B1[0]; + b0 = fr.toU64(pols.B0[0]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[0]) || !fr.isZero(pols.A6[0]) || !fr.isZero(pols.A7[0]) || !fr.isZero(pols.B2[0]) || !fr.isZero(pols.B3[0]) || !fr.isZero(pols.B4[0]) || !fr.isZero(pols.B5[0])|| !fr.isZero(pols.B6[0])|| !fr.isZero(pols.B7[0]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -360392,6 +361029,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -360796,6 +361438,8 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest Kin1[5] = pols.A5[0]; Kin1[6] = pols.B0[0]; Kin1[7] = pols.B1[0]; + b0 = fr.toU64(pols.B0[0]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[0]) || !fr.isZero(pols.A6[0]) || !fr.isZero(pols.A7[0]) || !fr.isZero(pols.B2[0]) || !fr.isZero(pols.B3[0]) || !fr.isZero(pols.B4[0]) || !fr.isZero(pols.B5[0])|| !fr.isZero(pols.B6[0])|| !fr.isZero(pols.B7[0]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -360828,6 +361472,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -360888,6 +361537,8 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest Kin1[5] = pols.A5[0]; Kin1[6] = pols.B0[0]; Kin1[7] = pols.B1[0]; + b0 = fr.toU64(pols.B0[0]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[0]) || !fr.isZero(pols.A6[0]) || !fr.isZero(pols.A7[0]) || !fr.isZero(pols.B2[0]) || !fr.isZero(pols.B3[0]) || !fr.isZero(pols.B4[0]) || !fr.isZero(pols.B5[0])|| !fr.isZero(pols.B6[0])|| !fr.isZero(pols.B7[0]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -360922,6 +361573,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -384402,6 +385058,8 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest Kin1[5] = pols.A5[0]; Kin1[6] = pols.B0[0]; Kin1[7] = pols.B1[0]; + b0 = fr.toU64(pols.B0[0]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[0]) || !fr.isZero(pols.A6[0]) || !fr.isZero(pols.A7[0]) || !fr.isZero(pols.B2[0]) || !fr.isZero(pols.B3[0]) || !fr.isZero(pols.B4[0]) || !fr.isZero(pols.B5[0])|| !fr.isZero(pols.B6[0])|| !fr.isZero(pols.B7[0]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -384434,6 +385092,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -384494,6 +385157,8 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest Kin1[5] = pols.A5[0]; Kin1[6] = pols.B0[0]; Kin1[7] = pols.B1[0]; + b0 = fr.toU64(pols.B0[0]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[0]) || !fr.isZero(pols.A6[0]) || !fr.isZero(pols.A7[0]) || !fr.isZero(pols.B2[0]) || !fr.isZero(pols.B3[0]) || !fr.isZero(pols.B4[0]) || !fr.isZero(pols.B5[0])|| !fr.isZero(pols.B6[0])|| !fr.isZero(pols.B7[0]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -384528,6 +385193,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -385239,6 +385909,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -385354,6 +386029,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -385664,6 +386344,8 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest Kin1[5] = pols.A5[0]; Kin1[6] = pols.B0[0]; Kin1[7] = pols.B1[0]; + b0 = fr.toU64(pols.B0[0]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[0]) || !fr.isZero(pols.A6[0]) || !fr.isZero(pols.A7[0]) || !fr.isZero(pols.B2[0]) || !fr.isZero(pols.B3[0]) || !fr.isZero(pols.B4[0]) || !fr.isZero(pols.B5[0])|| !fr.isZero(pols.B6[0])|| !fr.isZero(pols.B7[0]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -385696,6 +386378,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -385756,6 +386443,8 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest Kin1[5] = pols.A5[0]; Kin1[6] = pols.B0[0]; Kin1[7] = pols.B1[0]; + b0 = fr.toU64(pols.B0[0]); + bIsTouchedAddressTree = (b0 == 5) || (b0 == 6); if ( !fr.isZero(pols.A5[0]) || !fr.isZero(pols.A6[0]) || !fr.isZero(pols.A7[0]) || !fr.isZero(pols.B2[0]) || !fr.isZero(pols.B3[0]) || !fr.isZero(pols.B4[0]) || !fr.isZero(pols.B5[0])|| !fr.isZero(pols.B6[0])|| !fr.isZero(pols.B7[0]) ) { proverRequest.result = ZKR_SM_MAIN_STORAGE_INVALID_KEY; @@ -385790,6 +386479,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest zklog.info("Storage read sRD got poseidon key: " + ctx.fr.toString(ctx.lastSWrite.key, 16)); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, key), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -386421,6 +387115,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -386536,6 +387235,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -399581,6 +400285,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest #endif fea2scalar(fr, hashIterator->second.digest, result); delete[] pBuffer; + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys) + { + proverRequest.programKeys.insert(NormalizeToNFormat(fea2string(fr, result), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -399712,6 +400421,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest hashValue.digest = dg; Goldilocks::Element aux[4]; scalar2fea(fr, dg, aux); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys) + { + proverRequest.programKeys.insert(NormalizeToNFormat(fea2string(fr, aux), 64)); + } #ifdef LOG_TIME_STATISTICS_MAIN_EXECUTOR gettimeofday(&t, NULL); #endif @@ -401833,6 +402547,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -401948,6 +402667,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -403249,6 +403973,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { @@ -403364,6 +404093,11 @@ void main_exec_generated_fast (fork_5::MainExecutor &mainExecutor, ProverRequest gettimeofday(&t, NULL); #endif sr8to4(fr, pols.SR0[0], pols.SR1[0], pols.SR2[0], pols.SR3[0], pols.SR4[0], pols.SR5[0], pols.SR6[0], pols.SR7[0], oldRoot[0], oldRoot[1], oldRoot[2], oldRoot[3]); + // Collect the keys used to read or write store data + if (proverRequest.input.bGetKeys && !bIsTouchedAddressTree) + { + proverRequest.nodesKeys.insert(NormalizeToNFormat(fea2string(fr, ctx.lastSWrite.key), 64)); + } zkResult = pHashDB->set(proverRequest.uuid, proverRequest.pFullTracer->get_tx_number(), oldRoot, ctx.lastSWrite.key, scalarD, bIsTouchedAddressTree ? PERSISTENCE_TEMPORARY : ( proverRequest.input.bUpdateMerkleTree ? PERSISTENCE_DATABASE : PERSISTENCE_CACHE ), ctx.lastSWrite.newRoot, &ctx.lastSWrite.res, proverRequest.dbReadLog); if (zkResult != ZKR_SUCCESS) { diff --git a/src/prover/input.hpp b/src/prover/input.hpp index a9b816a55..b24472228 100644 --- a/src/prover/input.hpp +++ b/src/prover/input.hpp @@ -31,13 +31,15 @@ class Input // These fields are only used if this is an executor process batch bool bUpdateMerkleTree; // if true, save DB writes to SQL database bool bNoCounters; // if true, do not increase counters nor limit evaluations + bool bGetKeys; // if true, return the keys used to read or write storage data TraceConfig traceConfig; // FullTracer configuration // Constructor Input (Goldilocks &fr) : fr(fr), bUpdateMerkleTree(false), - bNoCounters(false) {}; + bNoCounters(false), + bGetKeys(false) {}; // Loads the input object data from a JSON object zkresult load (json &input); diff --git a/src/prover/prover_request.hpp b/src/prover/prover_request.hpp index ca52e7c28..e747fe0cd 100644 --- a/src/prover/prover_request.hpp +++ b/src/prover/prover_request.hpp @@ -2,6 +2,7 @@ #define PROVER_REQUEST_HPP #include +#include #include "input.hpp" #include "proof_fflonk.hpp" #include "counters.hpp" @@ -71,6 +72,10 @@ class ProverRequest vector receipts; vector logs; + /* Keys */ + unordered_set nodesKeys; + unordered_set programKeys; + /* Constructor */ ProverRequest (Goldilocks &fr, const Config &config, tProverRequestType type); ~ProverRequest(); diff --git a/src/service/executor/executor_service.cpp b/src/service/executor/executor_service.cpp index 37211f38e..e653927a3 100644 --- a/src/service/executor/executor_service.cpp +++ b/src/service/executor/executor_service.cpp @@ -157,6 +157,16 @@ ::grpc::Status ExecutorServiceImpl::ProcessBatch(::grpc::ServerContext* context, // Flags proverRequest.input.bUpdateMerkleTree = request->update_merkle_tree(); + proverRequest.input.bGetKeys = request->get_keys(); + if (proverRequest.input.bGetKeys && (proverRequest.input.publicInputsExtended.publicInputs.forkID < 5)) + { + zklog.error("ExecutorServiceImpl::ProcessBatch() got get_keys=true but fork_id=" + to_string(proverRequest.input.publicInputsExtended.publicInputs.forkID) + "<5"); + response->set_error(executor::v1::EXECUTOR_ERROR_INVALID_GET_KEY); + TimerStopAndLog(EXECUTOR_PROCESS_BATCH); + return Status::OK; + + } + // Trace config if (request->has_trace_config()) @@ -486,6 +496,20 @@ ::grpc::Status ExecutorServiceImpl::ProcessBatch(::grpc::ServerContext* context, } } + // Return accessed keys, if requested + if (proverRequest.input.bGetKeys) + { + unordered_set::const_iterator it; + for (it = proverRequest.nodesKeys.begin(); it != proverRequest.nodesKeys.end(); it++) + { + response->add_nodes_keys(string2ba(it->c_str())); + } + for (it = proverRequest.programKeys.begin(); it != proverRequest.programKeys.end(); it++) + { + response->add_program_keys(string2ba(it->c_str())); + } + } + #ifdef LOG_SERVICE_EXECUTOR_OUTPUT { string s = "ExecutorServiceImpl::ProcessBatch() returns result=" + to_string(response->error()) + diff --git a/src/service/hashdb/hashdb_service.cpp b/src/service/hashdb/hashdb_service.cpp index 937ad4570..2af32e10e 100644 --- a/src/service/hashdb/hashdb_service.cpp +++ b/src/service/hashdb/hashdb_service.cpp @@ -670,7 +670,7 @@ ::grpc::Status HashDBServiceImpl::ReadTree(::grpc::ServerContext* context, const response->set_allocated_result(result); // Return the key-value pairs in the response - for (int64_t i=0; i