Skip to content

src/account/MintTransaction.cpp

More...

Namespaces

Name
sgns

Detailed Description

Date: 2024-04-10 Henrique A. Klein ([email protected])

Source code

#include "account/MintTransaction.hpp"

#include "crypto/hasher/hasher_impl.hpp"

namespace sgns
{
    MintTransaction::MintTransaction( uint64_t                 new_amount,
                                      std::string              chain_id,
                                      TokenID                  token_id,
                                      SGTransaction::DAGStruct dag ) :
        IGeniusTransactions( "mint", SetDAGWithType( std::move( dag ), "mint" ) ),
        amount( new_amount ),
        chain_id( std::move( chain_id ) ),
        token_id( std::move( token_id ) )
    {
    }

    std::vector<uint8_t> MintTransaction::SerializeByteVector()
    {
        SGTransaction::MintTx tx_struct;
        tx_struct.mutable_dag_struct()->CopyFrom( this->dag_st );
        tx_struct.set_amount( amount );
        tx_struct.set_chain_id( chain_id );
        tx_struct.set_token_id( token_id.bytes().data(), token_id.size() );

        size_t               size = tx_struct.ByteSizeLong();
        std::vector<uint8_t> serialized_proto( size );
        tx_struct.SerializeToArray( serialized_proto.data(), serialized_proto.size() );

        return serialized_proto;
    }

    std::shared_ptr<MintTransaction> MintTransaction::DeSerializeByteVector( const std::vector<uint8_t> &data )
    {
        SGTransaction::MintTx tx_struct;
        if ( !tx_struct.ParseFromArray( data.data(), data.size() ) )
        {
            std::cerr << "Failed to parse TransferTx from array\n";
            return nullptr;
        }
        uint64_t    amount  = tx_struct.amount();
        std::string chainid = tx_struct.chain_id();
        TokenID     tokenid = TokenID::FromBytes( tx_struct.token_id().data(), tx_struct.token_id().size() );

        return std::make_shared<MintTransaction>(
            MintTransaction( amount, chainid, tokenid, tx_struct.dag_struct() ) ); // Return new instance
    }

    uint64_t MintTransaction::GetAmount() const
    {
        return amount;
    }

    TokenID MintTransaction::GetTokenID() const
    {
        return token_id;
    }

    MintTransaction MintTransaction::New( uint64_t                 new_amount,
                                          std::string              chain_id,
                                          TokenID                  token_id,
                                          SGTransaction::DAGStruct dag )
    {
        MintTransaction instance( new_amount, std::move( chain_id ), std::move( token_id ), std::move( dag ) );
        instance.FillHash();
        return instance;
    }
}

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