Skip to content

circuits/MPCVerifierCircuit.cpp

Functions

Name
bool MPCValidateTransaction(typename pallas::template g1_type< nil::crypto3::algebra::curves::coordinates::affine >::value_type total_random_sum, typename pallas::scalar_field_type::value_type balance, typename pallas::scalar_field_type::value_type amount, typename pallas::template g1_type< nil::crypto3::algebra::curves::coordinates::affine >::value_type balance_commitment, typename pallas::template g1_type< nil::crypto3::algebra::curves::coordinates::affine >::value_type amount_commitment, typename pallas::template g1_type< nil::crypto3::algebra::curves::coordinates::affine >::value_type expected_new_balance_commitment, const typename pallas::template g1_type< nil::crypto3::algebra::curves::coordinates::affine >::value_type & generator, typename pallas::template g1_type< nil::crypto3::algebra::curves::coordinates::affine >::value_type total_aggregate)

Functions Documentation

function MPCValidateTransaction

bool MPCValidateTransaction(
    typename pallas::template g1_type< nil::crypto3::algebra::curves::coordinates::affine >::value_type total_random_sum,
    typename pallas::scalar_field_type::value_type balance,
    typename pallas::scalar_field_type::value_type amount,
    typename pallas::template g1_type< nil::crypto3::algebra::curves::coordinates::affine >::value_type balance_commitment,
    typename pallas::template g1_type< nil::crypto3::algebra::curves::coordinates::affine >::value_type amount_commitment,
    typename pallas::template g1_type< nil::crypto3::algebra::curves::coordinates::affine >::value_type expected_new_balance_commitment,
    const typename pallas::template g1_type< nil::crypto3::algebra::curves::coordinates::affine >::value_type & generator,
    typename pallas::template g1_type< nil::crypto3::algebra::curves::coordinates::affine >::value_type total_aggregate
)

Source code

#include "MPCVerifierCircuit.hpp"

using namespace nil::crypto3::algebra::curves;

// Function to validate the total aggregate against the expected total value
[[circuit]] bool MPCValidateTransaction(
    [[private_input]] typename pallas::template g1_type<nil::crypto3::algebra::curves::coordinates::affine>::value_type
                                                                   total_random_sum, // Sum of all node random numbers
    [[private_input]] typename pallas::scalar_field_type::value_type balance, [[private_input]] typename pallas::scalar_field_type::value_type amount,
    typename pallas::template g1_type<nil::crypto3::algebra::curves::coordinates::affine>::value_type        balance_commitment,
    typename pallas::template g1_type<nil::crypto3::algebra::curves::coordinates::affine>::value_type        amount_commitment,
    typename pallas::template g1_type<nil::crypto3::algebra::curves::coordinates::affine>::value_type        expected_new_balance_commitment,
    const typename pallas::template g1_type<nil::crypto3::algebra::curves::coordinates::affine>::value_type &generator,
    typename pallas::template g1_type<nil::crypto3::algebra::curves::coordinates::affine>::value_type
        total_aggregate // Sum of the final values from all nodes
)
{
    // Check if the total aggregate equals the expected total
    bool aggregate_validity = ( total_aggregate == total_random_sum ); // Expecting the total_random_sum to be precomputed with * 2

    // Validate balance conditions
    bool balance_conditions = ( balance >= amount );

    // Validate commitments
    bool valid_balance_commitment     = ( balance_commitment == ( generator * balance ) );
    bool valid_amount_commitment      = ( amount_commitment == ( generator * amount ) );
    bool valid_new_balance_commitment = ( expected_new_balance_commitment == ( generator * ( balance - amount ) ) );

    // Ensure all conditions are met
    return aggregate_validity && balance_conditions && valid_balance_commitment && valid_amount_commitment && valid_new_balance_commitment;
}

Updated on 2026-04-13 at 23:22:46 -0700