261 const std::string &app_name = request->application_name();
262 std::cout <<
"[ACK] Aggregation tx request, app name: " << app_name
264 application_pool *
const app_pool = application_pools.at(app_name);
267 std::array<libzecale::nested_transaction<npp, nsnark>, batch_size>
269 const size_t num_entries = app_pool->get_next_batch(batch);
270 std::cout <<
"[DEBUG] Got batch of size "
271 << std::to_string(num_entries) <<
" from the pool\n";
272 if (num_entries == 0) {
273 throw std::runtime_error(
"insufficient entries in pool");
277 std::array<const libzeth::extended_proof<npp, nsnark> *, batch_size>
279 for (
size_t i = 0; i < batch_size; ++i) {
280 nested_proofs[i] = &batch[i].extended_proof();
282 std::cout <<
"[DEBUG] got tx " << std::to_string(i)
283 <<
" with ext proof:\n";
284 nested_proofs[i]->write_json(std::cout);
288 const nsnark::verification_key &nested_vk =
289 app_pool->verification_key();
291 std::cout <<
"[DEBUG] Generating the batched proof...\n";
292 libzeth::extended_proof<wpp, wsnark> wrapping_proof =
293 aggregator.
prove(nested_vk, nested_proofs, keypair.pk);
295 std::cout <<
"[DEBUG] Generated extended proof:\n";
296 wrapping_proof.write_json(std::cout);
300 response->set_application_name(app_name);
301 zeth_proto::ExtendedProof *wrapping_proof_proto =
302 new zeth_proto::ExtendedProof();
303 wapi_handler::extended_proof_to_proto(
304 wrapping_proof, wrapping_proof_proto);
305 response->set_allocated_extended_proof(wrapping_proof_proto);
306 for (
size_t i = 0; i < batch_size; ++i) {
307 const std::vector<uint8_t> ¶meters = batch[i].parameters();
308 response->add_nested_parameters(
309 (
const char *)parameters.data(), parameters.size());
311 std::cout <<
"[DEBUG] Written to response" << std::endl;
312 }
catch (
const std::exception &e) {
313 std::cout <<
"[ERROR] " << e.what() << std::endl;
315 grpc::StatusCode::INVALID_ARGUMENT, grpc::string(e.what()));
317 std::cout <<
"[ERROR] In catch all" << std::endl;
318 return grpc::Status(grpc::StatusCode::UNKNOWN,
"");
321 return grpc::Status::OK;