Skip to content

account/PublicChainInputValidator.hpp

Input validation strategy for public-chain source proofs. More...

Namespaces

Name
sgns

Classes

Name
struct sgns::WeightedRpcEndpoint
Weighted RPC endpoint used for multi-provider consensus verification.
class sgns::PublicChainInputValidator
Validator for transactions that reference external public-chain proofs.

Detailed Description

Input validation strategy for public-chain source proofs.

Date: 2026-06-02 Henrique A. Klein ([email protected])

Source code

#pragma once

#include <cstdint>
#include <memory>
#include <string>
#include <unordered_map>
#include <vector>

#include "account/InputValidators.hpp"

namespace sgns
{
    struct WeightedRpcEndpoint
    {
        std::string url;
        uint8_t     consensus_weight = 25;
        std::string bridge_contract_address;  
        std::string event_topic0;             
    };

    class PublicChainInputValidator final : public IInputValidator
    {
    public:
        void SetRpcEndpoints( const std::string &chain_id, std::vector<WeightedRpcEndpoint> endpoints );

        bool ValidateUTXOParameters( const UTXOTxParameters &params,
                                     const std::string      &address,
                                     const UTXOManager      &utxo_manager ) const override;

        bool ValidateWitness( const ConsensusSubject                     &subject,
                              const std::shared_ptr<GeniusTransaction> &tx,
                              const UTXOTxParameters                     &params,
                              const std::shared_ptr<Blockchain>          &blockchain ) const override;

        bool RequiresConsensusUTXOData() const override
        {
            return false;
        }

    private:
        bool VerifyPublicChainSmartContract( const std::shared_ptr<GeniusTransaction> &tx,
                                             const std::string                        &source_reference ) const;

        std::unordered_map<std::string, std::vector<WeightedRpcEndpoint>> rpc_endpoints_;
    };
} // namespace sgns

Updated on 2026-06-05 at 17:22:19 -0700