account/RevokeTransaction.cpp¶
Transaction for main-initiated revocation of a registered child wallet — factory, serialization, deserialization. More...
Namespaces¶
| Name |
|---|
| sgns |
Detailed Description¶
Transaction for main-initiated revocation of a registered child wallet — factory, serialization, deserialization.
Date: 2026-07-21 (Phase 5)
Source code¶
#include "RevokeTransaction.hpp"
#include <iostream>
#include <utility>
namespace sgns
{
// ---------------------------------------------------------------------------
// Constructor
// ---------------------------------------------------------------------------
RevokeTransaction::RevokeTransaction( std::string child_address,
uint64_t registration_sequence,
SGTransaction::DAGStruct dag ) :
GeniusTransaction( "revoke", SetDAGWithType( std::move( dag ), "revoke" ) ),
child_address_( std::move( child_address ) ),
registration_sequence_( registration_sequence )
{
}
// ---------------------------------------------------------------------------
// Factory
// ---------------------------------------------------------------------------
RevokeTransaction RevokeTransaction::New( std::string child_address,
uint64_t registration_sequence,
SGTransaction::DAGStruct dag )
{
RevokeTransaction instance( std::move( child_address ), registration_sequence, std::move( dag ) );
instance.FillHash();
return instance;
}
// ---------------------------------------------------------------------------
// Serialize to byte vector
// ---------------------------------------------------------------------------
std::vector<uint8_t> RevokeTransaction::SerializeByteVector( const SGTransaction::DAGStruct &dag ) const
{
SGTransaction::RevokeTx tx_struct;
tx_struct.mutable_dag_struct()->CopyFrom( dag );
tx_struct.set_child_address( child_address_ );
tx_struct.set_registration_sequence( registration_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 RevokeTx\n";
}
return serialized_proto;
}
// ---------------------------------------------------------------------------
// Serialize to EmbeddedTransaction (sets the revoke = 9 oneof arm)
// ---------------------------------------------------------------------------
EmbeddedTransaction RevokeTransaction::SerializeToEmbeddedTransaction( const SGTransaction::DAGStruct &dag ) const
{
EmbeddedTransaction embedded;
SGTransaction::RevokeTx tx_struct;
tx_struct.mutable_dag_struct()->CopyFrom( dag );
tx_struct.set_child_address( child_address_ );
tx_struct.set_registration_sequence( registration_sequence_ );
*embedded.mutable_revoke() = tx_struct;
return embedded;
}
// ---------------------------------------------------------------------------
// Deserialize from byte vector
// ---------------------------------------------------------------------------
std::shared_ptr<RevokeTransaction> RevokeTransaction::DeSerializeByteVector( const std::vector<uint8_t> &data )
{
SGTransaction::RevokeTx tx_struct;
if ( !tx_struct.ParseFromArray( data.data(), data.size() ) )
{
std::cerr << "Failed to parse RevokeTx from array\n";
return nullptr;
}
return std::make_shared<RevokeTransaction>(
RevokeTransaction( tx_struct.child_address(),
tx_struct.registration_sequence(),
tx_struct.dag_struct() ) );
}
// ---------------------------------------------------------------------------
// Pubsub topics — includes child_address_ for target-child discovery
// ---------------------------------------------------------------------------
std::unordered_set<std::string> RevokeTransaction::GetTopics() const
{
auto topics = GeniusTransaction::GetTopics();
topics.emplace( child_address_ );
return topics;
}
}
Updated on 2026-09-17 at 06:29:15 +0000