diff --git a/src/common/boost_serialization_helper.h b/src/common/boost_serialization_helper.h index 81708f39..873a7d76 100644 --- a/src/common/boost_serialization_helper.h +++ b/src/common/boost_serialization_helper.h @@ -104,28 +104,4 @@ namespace tools return !stream.fail(); CATCH_ENTRY_L0("portable_unserialize_obj_from_stream", false); } - - template - bool portable_unserialize_obj_from_stream2(t_object& obj, t_stream& stream) - { - TRY_ENTRY(); - - portable_binary_iarchive a(stream); - - a >> obj; - return !stream.fail(); - CATCH_ENTRY_L0("portable_unserialize_obj_from_stream", false); - } - - template - bool portble_serialize_obj_to_stream2(t_object& obj, t_stream& stream) - { - TRY_ENTRY(); - - portable_binary_oarchive a(stream); - a << obj; - - return !stream.fail(); - CATCH_ENTRY_L0("portble_serialize_obj_to_stream", false); - } } diff --git a/src/common/portable_binary_archive.hpp b/src/common/portable_binary_archive.hpp deleted file mode 100644 index eecd9508..00000000 --- a/src/common/portable_binary_archive.hpp +++ /dev/null @@ -1,46 +0,0 @@ -#ifndef PORTABLE_BINARY_ARCHIVE_HPP -#define PORTABLE_BINARY_ARCHIVE_HPP - -// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . -// Use, modification and distribution is subject to the Boost Software -// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -// MS compatible compilers support #pragma once -#if defined(_MSC_VER) -# pragma once -#endif - -#include -#include -#include - -#include -#if CHAR_BIT != 8 -#error This code assumes an eight-bit byte. -#endif - -#include -#include - -enum portable_binary_archive_flags { - endian_big = 0x4000, - endian_little = 0x8000 -}; - -//#if ( endian_big <= boost::archive::flags_last ) -//#error archive flags conflict -//#endif - -inline void -reverse_bytes(char size, char *address){ - char * first = address; - char * last = first + size - 1; - for(;first < last;++first, --last){ - char x = *last; - *last = *first; - *first = x; - } -} - -#endif // PORTABLE_BINARY_ARCHIVE_HPP diff --git a/src/common/portable_binary_iarchive.cpp b/src/common/portable_binary_iarchive.cpp deleted file mode 100644 index a0b61d52..00000000 --- a/src/common/portable_binary_iarchive.cpp +++ /dev/null @@ -1,131 +0,0 @@ -/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 -// portable_binary_iarchive.cpp - -// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . -// Use, modification and distribution is subject to the Boost Software -// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -// See http://www.boost.org for updates, documentation, and revision history. - -#include -#include - -#include -#include -#include - -#include "portable_binary_iarchive.hpp" - -void -portable_binary_iarchive::load_impl(boost::intmax_t & l, char maxsize){ - char size; - l = 0; - this->primitive_base_t::load(size); - - if(0 == size){ - return; - } - - bool negative = (size < 0); - if(negative) - size = -size; - - if(size > maxsize) - boost::serialization::throw_exception( - portable_binary_iarchive_exception() - ); - - char * cptr = reinterpret_cast(& l); - #ifdef BOOST_BIG_ENDIAN - cptr += (sizeof(boost::intmax_t) - size); - #endif - this->primitive_base_t::load_binary(cptr, size); - - #ifdef BOOST_BIG_ENDIAN - if(m_flags & endian_little) - #else - if(m_flags & endian_big) - #endif - reverse_bytes(size, cptr); - - if(negative) - l = -l; -} - -void -portable_binary_iarchive::load_override( - boost::archive::class_name_type & t -){ - std::string cn; - cn.reserve(BOOST_SERIALIZATION_MAX_KEY_SIZE); - load_override(cn); - if(cn.size() > (BOOST_SERIALIZATION_MAX_KEY_SIZE - 1)) - boost::serialization::throw_exception( - boost::archive::archive_exception( - boost::archive::archive_exception::invalid_class_name) - ); - std::memcpy(t, cn.data(), cn.size()); - // borland tweak - t.t[cn.size()] = '\0'; -} - -void -portable_binary_iarchive::init(unsigned int flags){ - if(0 == (flags & boost::archive::no_header)){ - // read signature in an archive version independent manner - std::string file_signature; - * this >> file_signature; - if(file_signature != boost::archive::BOOST_ARCHIVE_SIGNATURE()) - boost::serialization::throw_exception( - boost::archive::archive_exception( - boost::archive::archive_exception::invalid_signature - ) - ); - // make sure the version of the reading archive library can - // support the format of the archive being read - boost::archive::library_version_type input_library_version; - * this >> input_library_version; - - // extra little .t is to get around borland quirk - if(boost::archive::BOOST_ARCHIVE_VERSION() < input_library_version) - boost::serialization::throw_exception( - boost::archive::archive_exception( - boost::archive::archive_exception::unsupported_version - ) - ); - - #if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3205)) - this->set_library_version(input_library_version); - //#else - //#if ! BOOST_WORKAROUND(BOOST_MSVC, <= 1200) - //detail:: - //#endif - boost::archive::detail::basic_iarchive::set_library_version( - input_library_version - ); - #endif - } - unsigned char x; - load(x); - m_flags = x << CHAR_BIT; -} - -#include -#include - -namespace boost { -namespace archive { - -namespace detail { - template class archive_serializer_map; -} - -template class basic_binary_iprimitive< - portable_binary_iarchive, - std::istream::char_type, - std::istream::traits_type -> ; - -} // namespace archive -} // namespace boost diff --git a/src/common/portable_binary_iarchive.hpp b/src/common/portable_binary_iarchive.hpp deleted file mode 100644 index 3730660c..00000000 --- a/src/common/portable_binary_iarchive.hpp +++ /dev/null @@ -1,204 +0,0 @@ -#ifndef PORTABLE_BINARY_IARCHIVE_HPP -#define PORTABLE_BINARY_IARCHIVE_HPP - -// MS compatible compilers support #pragma once -#if defined(_MSC_VER) -# pragma once -#endif - -#if defined(_MSC_VER) -#pragma warning( push ) -#pragma warning( disable : 4244 ) -#endif - -/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 -// portable_binary_iarchive.hpp - -// (C) Copyright 2002-7 Robert Ramey - http://www.rrsd.com . -// Use, modification and distribution is subject to the Boost Software -// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -// See http://www.boost.org for updates, documentation, and revision history. - -#include -#include -#include -#include -#include -#include -#include - -#include "portable_binary_archive.hpp" - -/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 -// exception to be thrown if integer read from archive doesn't fit -// variable being loaded -class portable_binary_iarchive_exception : - public boost::archive::archive_exception -{ -public: - enum exception_code { - incompatible_integer_size - } m_exception_code ; - portable_binary_iarchive_exception(exception_code c = incompatible_integer_size ) : - boost::archive::archive_exception(boost::archive::archive_exception::other_exception), - m_exception_code(c) - {} - virtual const char *what( ) const throw( ) - { - const char *msg = "programmer error"; - switch(m_exception_code){ - case incompatible_integer_size: - msg = "integer cannot be represented"; - break; - default: - msg = boost::archive::archive_exception::what(); - assert(false); - break; - } - return msg; - } -}; - -/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 -// "Portable" input binary archive. It addresses integer size and endienness so -// that binary archives can be passed across systems. Note:floating point types -// not addressed here -class portable_binary_iarchive : - public boost::archive::basic_binary_iprimitive< - portable_binary_iarchive, - std::istream::char_type, - std::istream::traits_type - >, - public boost::archive::detail::common_iarchive< - portable_binary_iarchive - > - { - typedef boost::archive::basic_binary_iprimitive< - portable_binary_iarchive, - std::istream::char_type, - std::istream::traits_type - > primitive_base_t; - typedef boost::archive::detail::common_iarchive< - portable_binary_iarchive - > archive_base_t; -#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS -public: -#else - friend archive_base_t; - friend primitive_base_t; // since with override load below - friend class boost::archive::detail::interface_iarchive< - portable_binary_iarchive - >; - friend class boost::archive::load_access; -protected: -#endif - unsigned int m_flags; - void load_impl(boost::intmax_t & l, char maxsize); - - // default fall through for any types not specified here - template - void load(T & t){ - boost::intmax_t l; - load_impl(l, sizeof(T)); - // use cast to avoid compile time warning - //t = static_cast< T >(l); - t = T(l); - } - void load(boost::serialization::item_version_type & t){ - boost::intmax_t l; - load_impl(l, sizeof(boost::serialization::item_version_type)); - // use cast to avoid compile time warning - t = boost::serialization::item_version_type(l); - } - void load(boost::archive::version_type & t){ - boost::intmax_t l; - load_impl(l, sizeof(boost::archive::version_type)); - // use cast to avoid compile time warning - t = boost::archive::version_type(l); - } - void load(boost::archive::class_id_type & t){ - boost::intmax_t l; - load_impl(l, sizeof(boost::archive::class_id_type)); - // use cast to avoid compile time warning - t = boost::archive::class_id_type(static_cast(l)); - } - void load(std::string & t){ - this->primitive_base_t::load(t); - } - #ifndef BOOST_NO_STD_WSTRING - void load(std::wstring & t){ - this->primitive_base_t::load(t); - } - #endif - void load(float & t){ - this->primitive_base_t::load(t); - // floats not supported - //BOOST_STATIC_ASSERT(false); - } - void load(double & t){ - this->primitive_base_t::load(t); - // doubles not supported - //BOOST_STATIC_ASSERT(false); - } - void load(char & t){ - this->primitive_base_t::load(t); - } - void load(unsigned char & t){ - this->primitive_base_t::load(t); - } - typedef boost::archive::detail::common_iarchive - detail_common_iarchive; - template - void load_override(T & t){ - this->detail_common_iarchive::load_override(t); - } - void load_override(boost::archive::class_name_type & t); - // binary files don't include the optional information - void load_override(boost::archive::class_id_optional_type &){} - - void init(unsigned int flags); -public: - portable_binary_iarchive(std::istream & is, unsigned flags = 0) : - primitive_base_t( - * is.rdbuf(), - 0 != (flags & boost::archive::no_codecvt) - ), - archive_base_t(flags), - m_flags(0) - { - init(flags); - } - - portable_binary_iarchive( - std::basic_streambuf< - std::istream::char_type, - std::istream::traits_type - > & bsb, - unsigned int flags - ) : - primitive_base_t( - bsb, - 0 != (flags & boost::archive::no_codecvt) - ), - archive_base_t(flags), - m_flags(0) - { - init(flags); - } -}; - -// required by export in boost version > 1.34 -#ifdef BOOST_SERIALIZATION_REGISTER_ARCHIVE - BOOST_SERIALIZATION_REGISTER_ARCHIVE(portable_binary_iarchive) -#endif - -// required by export in boost <= 1.34 -#define BOOST_ARCHIVE_CUSTOM_IARCHIVE_TYPES portable_binary_iarchive - -#if defined(_MSC_VER) -#pragma warning( pop ) -#endif - -#endif // PORTABLE_BINARY_IARCHIVE_HPP diff --git a/src/common/portable_binary_oarchive.cpp b/src/common/portable_binary_oarchive.cpp deleted file mode 100644 index 6f94eeb5..00000000 --- a/src/common/portable_binary_oarchive.cpp +++ /dev/null @@ -1,98 +0,0 @@ -/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 -// portable_binary_oarchive.cpp - -// (C) Copyright 2002-7 Robert Ramey - http://www.rrsd.com . -// Use, modification and distribution is subject to the Boost Software -// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -// See http://www.boost.org for updates, documentation, and revision history. - -#include -#include -#include "portable_binary_oarchive.hpp" - -void -portable_binary_oarchive::save_impl( - const boost::intmax_t l, - const char maxsize -){ - char size = 0; - - if(l == 0){ - this->primitive_base_t::save(size); - return; - } - - boost::intmax_t ll; - bool negative = (l < 0); - if(negative) - ll = -l; - else - ll = l; - - do{ - ll >>= CHAR_BIT; - ++size; - }while(ll != 0); - - this->primitive_base_t::save( - static_cast(negative ? -size : size) - ); - - if(negative) - ll = -l; - else - ll = l; - char * cptr = reinterpret_cast(& ll); - #ifdef BOOST_BIG_ENDIAN - cptr += (sizeof(boost::intmax_t) - size); - if(m_flags & endian_little) - reverse_bytes(size, cptr); - #else - if(m_flags & endian_big) - reverse_bytes(size, cptr); - #endif - this->primitive_base_t::save_binary(cptr, size); -} - -void -portable_binary_oarchive::init(unsigned int flags) { - if(m_flags == (endian_big | endian_little)){ - boost::serialization::throw_exception( - portable_binary_oarchive_exception() - ); - } - if(0 == (flags & boost::archive::no_header)){ - // write signature in an archive version independent manner - const std::string file_signature( - boost::archive::BOOST_ARCHIVE_SIGNATURE() - ); - * this << file_signature; - // write library version - const boost::archive::library_version_type v( - boost::archive::BOOST_ARCHIVE_VERSION() - ); - * this << v; - } - save(static_cast(m_flags >> CHAR_BIT)); -} - -#include -#include - -namespace boost { -namespace archive { - -namespace detail { - template class archive_serializer_map; -} - -template class basic_binary_oprimitive< - portable_binary_oarchive, - std::ostream::char_type, - std::ostream::traits_type -> ; - -} // namespace archive -} // namespace boost diff --git a/src/common/portable_binary_oarchive.hpp b/src/common/portable_binary_oarchive.hpp deleted file mode 100644 index 317aa1d7..00000000 --- a/src/common/portable_binary_oarchive.hpp +++ /dev/null @@ -1,191 +0,0 @@ -#ifndef PORTABLE_BINARY_OARCHIVE_HPP -#define PORTABLE_BINARY_OARCHIVE_HPP - -// MS compatible compilers support #pragma once -#if defined(_MSC_VER) -# pragma once -#endif - -#if defined(_MSC_VER) -#pragma warning( push ) -#pragma warning( disable : 4244 ) -#endif - -/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 -// portable_binary_oarchive.hpp - -// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . -// Use, modification and distribution is subject to the Boost Software -// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -// See http://www.boost.org for updates, documentation, and revision history. - -#include -#include -#include -#include -#include -#include - -#include "portable_binary_archive.hpp" - -/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 -// exception to be thrown if integer read from archive doesn't fit -// variable being loaded -class portable_binary_oarchive_exception : - public boost::archive::archive_exception -{ -public: - typedef enum { - invalid_flags - } exception_code; - portable_binary_oarchive_exception(exception_code c = invalid_flags ) - {} - virtual const char *what( ) const throw( ) - { - const char *msg = "programmer error"; - switch(code){ - case invalid_flags: - msg = "cannot be both big and little endian"; - default: - boost::archive::archive_exception::what(); - } - return msg; - } -}; - -/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 -// "Portable" output binary archive. This is a variation of the native binary -// archive. it addresses integer size and endienness so that binary archives can -// be passed across systems. Note:floating point types not addressed here - -class portable_binary_oarchive : - public boost::archive::basic_binary_oprimitive< - portable_binary_oarchive, - std::ostream::char_type, - std::ostream::traits_type - >, - public boost::archive::detail::common_oarchive< - portable_binary_oarchive - > -{ - typedef boost::archive::basic_binary_oprimitive< - portable_binary_oarchive, - std::ostream::char_type, - std::ostream::traits_type - > primitive_base_t; - typedef boost::archive::detail::common_oarchive< - portable_binary_oarchive - > archive_base_t; -#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS -public: -#else - friend archive_base_t; - friend primitive_base_t; // since with override save below - friend class boost::archive::detail::interface_oarchive< - portable_binary_oarchive - >; - friend class boost::archive::save_access; -protected: -#endif - unsigned int m_flags; - void save_impl(const boost::intmax_t l, const char maxsize); - // add base class to the places considered when matching - // save function to a specific set of arguments. Note, this didn't - // work on my MSVC 7.0 system so we use the sure-fire method below - // using archive_base_t::save; - - // default fall through for any types not specified here - template - void save(const T & t){ - save_impl(t, sizeof(T)); - } - void save(const std::string & t){ - this->primitive_base_t::save(t); - } - #ifndef BOOST_NO_STD_WSTRING - void save(const std::wstring & t){ - this->primitive_base_t::save(t); - } - #endif - void save(const float & t){ - this->primitive_base_t::save(t); - // floats not supported - //BOOST_STATIC_ASSERT(false); - } - void save(const double & t){ - this->primitive_base_t::save(t); - // doubles not supported - //BOOST_STATIC_ASSERT(false); - } - void save(const char & t){ - this->primitive_base_t::save(t); - } - void save(const unsigned char & t){ - this->primitive_base_t::save(t); - } - - // default processing - kick back to base class. Note the - // extra stuff to get it passed borland compilers - typedef boost::archive::detail::common_oarchive - detail_common_oarchive; - template - void save_override(T & t){ - this->detail_common_oarchive::save_override(t); - } - // explicitly convert to char * to avoid compile ambiguities - void save_override(const boost::archive::class_name_type & t){ - const std::string s(t); - * this << s; - } - // binary files don't include the optional information - void save_override( - const boost::archive::class_id_optional_type & /* t */ - ){} - - void init(unsigned int flags); -public: - portable_binary_oarchive(std::ostream & os, unsigned flags = 0) : - primitive_base_t( - * os.rdbuf(), - 0 != (flags & boost::archive::no_codecvt) - ), - archive_base_t(flags), - m_flags(flags & (endian_big | endian_little)) - { - init(flags); - } - - portable_binary_oarchive( - std::basic_streambuf< - std::ostream::char_type, - std::ostream::traits_type - > & bsb, - unsigned int flags - ) : - primitive_base_t( - bsb, - 0 != (flags & boost::archive::no_codecvt) - ), - archive_base_t(flags), - m_flags(0) - { - init(flags); - } -}; - - -// required by export in boost version > 1.34 -#ifdef BOOST_SERIALIZATION_REGISTER_ARCHIVE - BOOST_SERIALIZATION_REGISTER_ARCHIVE(portable_binary_oarchive) -#endif - -// required by export in boost <= 1.34 -#define BOOST_ARCHIVE_CUSTOM_OARCHIVE_TYPES portable_binary_oarchive - -#if defined(_MSC_VER) -#pragma warning( pop ) -#endif - -#endif // PORTABLE_BINARY_OARCHIVE_HPP diff --git a/src/currency_core/currency_config.h b/src/currency_core/currency_config.h index 164170be..5378cff0 100644 --- a/src/currency_core/currency_config.h +++ b/src/currency_core/currency_config.h @@ -150,7 +150,7 @@ #define WALLET_FILE_SIGNATURE_V2 0x1111011201101011LL // another Bender's nightmare #define WALLET_FILE_BINARY_HEADER_VERSION_INITAL 1000 #define WALLET_FILE_BINARY_HEADER_VERSION_2 1001 -#define WALLET_FILE_BINARY_HEADER_VERSION_3 1002 +//#define WALLET_FILE_BINARY_HEADER_VERSION_3 1002 #define WALLET_FILE_MAX_KEYS_SIZE 10000 // #define WALLET_BRAIN_DATE_OFFSET 1543622400 @@ -225,9 +225,11 @@ #define BC_OFFERS_CURRENT_OFFERS_SERVICE_ARCHIVE_VER CURRENCY_FORMATION_VERSION + BLOCKCHAIN_STORAGE_MAJOR_COMPATIBILITY_VERSION + 9 #define BC_OFFERS_CURRENCY_MARKET_FILENAME "market.bin" - +#ifndef TESTNET +#define WALLET_FILE_SERIALIZATION_VERSION 154 +#else #define WALLET_FILE_SERIALIZATION_VERSION (CURRENCY_FORMATION_VERSION+69) - +#endif #define CURRENT_MEMPOOL_ARCHIVE_VER (CURRENCY_FORMATION_VERSION+31) diff --git a/src/wallet/wallet2.cpp b/src/wallet/wallet2.cpp index bf93de6a..556769cc 100644 --- a/src/wallet/wallet2.cpp +++ b/src/wallet/wallet2.cpp @@ -2678,15 +2678,6 @@ void wallet2::load(const std::wstring& wallet_, const std::string& password) need_to_resync = !tools::portable_unserialize_obj_from_stream(*this, in); WLT_LOG_L0("Detected format: WALLET_FILE_BINARY_HEADER_VERSION_2(need_to_resync=" << need_to_resync << ")"); } - else if(wbh.m_ver == WALLET_FILE_BINARY_HEADER_VERSION_3) - { - tools::encrypt_chacha_in_filter decrypt_filter(password, kf_data.iv); - boost::iostreams::filtering_istream in; - in.push(decrypt_filter); - in.push(data_file); - need_to_resync = !tools::portable_unserialize_obj_from_stream2(*this, in); - WLT_LOG_L0("Detected format: WALLET_FILE_BINARY_HEADER_VERSION_3(need_to_resync="<< need_to_resync <<")"); - } else { WLT_LOG_L0("Unknown wallet body version(" << wbh.m_ver << "), resync initiated."); @@ -2747,7 +2738,7 @@ void wallet2::store(const std::wstring& path_to_save, const std::string& passwor wbh.m_signature = WALLET_FILE_SIGNATURE_V2; wbh.m_cb_keys = keys_buff.size(); //@#@ change it to proper - wbh.m_ver = WALLET_FILE_BINARY_HEADER_VERSION_3; + wbh.m_ver = WALLET_FILE_BINARY_HEADER_VERSION_2; std::string header_buff((const char*)&wbh, sizeof(wbh)); uint64_t ts = m_core_runtime_config.get_core_time(); @@ -2768,7 +2759,7 @@ void wallet2::store(const std::wstring& path_to_save, const std::string& passwor out.push(decrypt_filter); out.push(data_file); - r = tools::portble_serialize_obj_to_stream2(*this, out); + r = tools::portble_serialize_obj_to_stream(*this, out); if (!r) { data_file.close(); diff --git a/src/wallet/wallet2.h b/src/wallet/wallet2.h index 1a6ce4f0..23d34df2 100644 --- a/src/wallet/wallet2.h +++ b/src/wallet/wallet2.h @@ -696,7 +696,7 @@ namespace tools uint64_t get_top_block_height() const { return m_chain.get_top_block_height(); } template - inline void serialize(t_archive &a, const unsigned int ver) + inline void serialize(t_archive &a, const unsigned int ver_) { if (t_archive::is_saving::value) {