On Fri, Nov 07, 2014 at 11:30:22AM +0000, Clément Elbaz wrote: > Thinking out loud here : would it make sense to separate the consensus code > into some kind of "Bitcoin Kernel" (similar to the Linux Kernel) project > that could be used by anyone ? That's a pretty old idea, and we're working on it. First step is a stand-alone script verification library: https://github.com/theuni/bitcoin/blob/da18a0266c4de76c2a461cc2984aa2fa066c42f5/src/script/bitcoinconsensus.h #ifndef H_BITCOIN_BITCOINCONSENSUS #define H_BITCOIN_BITCOINCONSENSUS #if defined(BUILD_BITCOIN_INTERNAL) && defined(HAVE_CONFIG_H) #include "config/bitcoin-config.h" #if defined(_WIN32) #if defined(DLL_EXPORT) #if defined(HAVE_FUNC_ATTRIBUTE_DLLEXPORT) #define EXPORT_SYMBOL __declspec(dllexport) #else #define EXPORT_SYMBOL #endif #endif #elif defined(HAVE_FUNC_ATTRIBUTE_VISIBILITY) #define EXPORT_SYMBOL __attribute__ ((visibility ("default"))) #endif #elif defined(MSC_VER) && !defined(STATIC_LIBBITCOINCONSENSUS) #define EXPORT_SYMBOL __declspec(dllimport) #endif #ifndef EXPORT_SYMBOL #define EXPORT_SYMBOL #endif #ifdef __cplusplus extern "C" { #else #include #endif /** Script verification flags */ enum { bitcoinconsensus_SCRIPT_FLAGS_VERIFY_NONE = 0, bitcoinconsensus_SCRIPT_FLAGS_VERIFY_P2SH = (1U << 0), // evaluate P2SH (BIP16) subscripts }; /// Returns true if the input nIn of the serialized transaction pointed to by /// txTo correctly spends the scriptPubKey pointed to by scriptPubKey under /// the additional constraints specified by flags. EXPORT_SYMBOL bool bitcoinconsensus_verify_script(const unsigned char *scriptPubKey, const unsigned int scriptPubKeyLen, const unsigned char *txTo , const unsigned int txToLen, const unsigned int nIn, const unsigned int flags); EXPORT_SYMBOL unsigned int bitcoinconsensus_version(); #ifdef __cplusplus } // extern "C" #endif #undef EXPORT_SYMBOL #endif // H_BITCOIN_BITCOINCONSENSUS -- 'peter'[:-1]@petertodd.org 000000000000000001208038fd7130083ff118147890dbb37913ffa83c1f48cd