Skip to content

src/proof/RecursiveTransferProof.hpp

Header file of the RecursiveTransferProof. More...

Namespaces

Name
sgns

Classes

Name
class sgns::RecursiveTransferProof
A class for generating a recursive Transfer Proof.

Detailed Description

Header file of the RecursiveTransferProof.

Date: 2025-01-29 Henrique A. Klein ([email protected])

Source code

#ifndef _RECURSIVE_TRANSFER_PROOF_HPP_
#define _RECURSIVE_TRANSFER_PROOF_HPP_

#include <string>
#include <cstdint>
#include <array>
#include <utility>
#include <boost/json.hpp>
#include <string_view>
#include "GeniusProver.hpp"
#include "IBasicProof.hpp"
#include "TransferProof.hpp"

#include "circuits/RecursiveTransactionCircuit.hpp"

namespace sgns
{
    class RecursiveTransferProof : public TransferProof
    {
    public:
        explicit RecursiveTransferProof( uint64_t balance, uint64_t amount, GeniusProver::ProofSnarkType snark );

        ~RecursiveTransferProof() = default;

        std::string GetProofType() const override
        {
            return std::string( RECURSIVE_TRANSFER_TYPE_NAME );
        }

    protected:
        outcome::result<std::vector<uint8_t>> SerializeFullProof(
            const SGProof::BaseProofData &base_proof_data ) override;

        std::pair<boost::json::array, boost::json::array> GenerateJsonParameters() override;

    private:

        static outcome::result<std::pair<boost::json::array, boost::json::array>> DeSerializePublicParams(
            const std::vector<uint8_t> &full_proof_data );

        static constexpr std::string_view RECURSIVE_TRANSFER_TYPE_NAME = "RecursiveTransfer";

        static inline bool Register()
        {
            RegisterDeserializer( std::string( RECURSIVE_TRANSFER_TYPE_NAME ), &RecursiveTransferProof::DeSerializePublicParams );
#ifdef RELEASE_BYTECODE_CIRCUITS
            RegisterBytecode( std::string( RECURSIVE_TRANSFER_TYPE_NAME ), std::string( RecursiveTransactionCircuit ) );
#else
            RegisterBytecode( std::string( RECURSIVE_TRANSFER_TYPE_NAME ), std::string( RecursiveTransactionCircuit ) );
#endif

            return true;
        }

        static inline bool registered = Register();
    };
}

#endif

Updated on 2026-03-04 at 13:10:45 -0800