account/RegistrationTransaction.cpp¶
Transaction for child-wallet registration — factory, serialization, deserialization. More...
Namespaces¶
| Name |
|---|
| sgns |
Detailed Description¶
Transaction for child-wallet registration — factory, serialization, deserialization.
Date: 2026-07-15 (Phase 4)
Source code¶
#include "RegistrationTransaction.hpp"
#include <iostream>
#include <utility>
namespace sgns
{
// ---------------------------------------------------------------------------
// Constructor
// ---------------------------------------------------------------------------
RegistrationTransaction::RegistrationTransaction( std::string main_address,
uint64_t sequence,
SGTransaction::RegistrationMetadata metadata,
SGTransaction::DAGStruct dag,
bool detach_flag,
uint64_t supersedes_sequence ) :
GeniusTransaction( "registration", SetDAGWithType( std::move( dag ), "registration" ) ),
main_address_( std::move( main_address ) ),
sequence_( sequence ),
metadata_( std::move( metadata ) ),
detach_flag_( detach_flag ),
supersedes_sequence_( supersedes_sequence )
{
}
// ---------------------------------------------------------------------------
// Factory
// ---------------------------------------------------------------------------
RegistrationTransaction RegistrationTransaction::New( std::string main_address,
uint64_t sequence,
SGTransaction::RegistrationMetadata metadata,
SGTransaction::DAGStruct dag,
bool detach_flag,
uint64_t supersedes_sequence )
{
RegistrationTransaction instance( std::move( main_address ), sequence, std::move( metadata ), std::move( dag ),
detach_flag, supersedes_sequence );
instance.FillHash();
return instance;
}
// ---------------------------------------------------------------------------
// Serialize to byte vector
// ---------------------------------------------------------------------------
std::vector<uint8_t> RegistrationTransaction::SerializeByteVector( const SGTransaction::DAGStruct &dag ) const
{
SGTransaction::RegistrationTx tx_struct;
tx_struct.mutable_dag_struct()->CopyFrom( dag );
tx_struct.set_main_address( main_address_ );
tx_struct.set_sequence( sequence_ );
tx_struct.mutable_metadata()->CopyFrom( metadata_ );
tx_struct.set_detach_flag( detach_flag_ );
tx_struct.set_supersedes_sequence( supersedes_sequence_ );
size_t size = tx_struct.ByteSizeLong();
std::vector<uint8_t> serialized_proto( size );
if ( !tx_struct.SerializeToArray( serialized_proto.data(), serialized_proto.size() ) )
{
std::cerr << "Failed to serialize RegistrationTx\n";
}
return serialized_proto;
}
// ---------------------------------------------------------------------------
// Serialize to EmbeddedTransaction (sets the registration = 8 oneof arm)
// ---------------------------------------------------------------------------
EmbeddedTransaction RegistrationTransaction::SerializeToEmbeddedTransaction( const SGTransaction::DAGStruct &dag ) const
{
EmbeddedTransaction embedded;
SGTransaction::RegistrationTx tx_struct;
tx_struct.mutable_dag_struct()->CopyFrom( dag );
tx_struct.set_main_address( main_address_ );
tx_struct.set_sequence( sequence_ );
tx_struct.mutable_metadata()->CopyFrom( metadata_ );
tx_struct.set_detach_flag( detach_flag_ );
tx_struct.set_supersedes_sequence( supersedes_sequence_ );
*embedded.mutable_registration() = tx_struct;
return embedded;
}
// ---------------------------------------------------------------------------
// Deserialize from byte vector
// ---------------------------------------------------------------------------
std::shared_ptr<RegistrationTransaction> RegistrationTransaction::DeSerializeByteVector(
const std::vector<uint8_t> &data )
{
SGTransaction::RegistrationTx tx_struct;
if ( !tx_struct.ParseFromArray( data.data(), data.size() ) )
{
std::cerr << "Failed to parse RegistrationTx from array\n";
return nullptr;
}
return std::make_shared<RegistrationTransaction>(
RegistrationTransaction( tx_struct.main_address(),
tx_struct.sequence(),
tx_struct.metadata(),
tx_struct.dag_struct(),
tx_struct.detach_flag(),
tx_struct.supersedes_sequence() ) );
}
// ---------------------------------------------------------------------------
// Pubsub topics — includes main_address_ for main-node discovery
// ---------------------------------------------------------------------------
std::unordered_set<std::string> RegistrationTransaction::GetTopics() const
{
auto topics = GeniusTransaction::GetTopics();
topics.emplace( main_address_ );
return topics;
}
}
Updated on 2026-09-17 at 06:29:15 +0000