1 // Copyright (c) 2009-2010 Satoshi Nakamoto 2 // Copyright (c) 2009-2016 The Bitcoin Core developers 3 // Distributed under the MIT software license, see the accompanying 4 // file COPYING or http://www.opensource.org/licenses/mit-license.php. 5 6 #ifndef BITCOIN_BITCOINCONSENSUS_H 7 #define BITCOIN_BITCOINCONSENSUS_H 8 9 #include <stdint.h> 10 11 #if defined(BUILD_BITCOIN_INTERNAL) && defined(HAVE_CONFIG_H) 12 #include "config/bitcoin-config.h" 13 #if defined(_WIN32) 14 #if defined(DLL_EXPORT) 15 #if defined(HAVE_FUNC_ATTRIBUTE_DLLEXPORT) 16 #define EXPORT_SYMBOL __declspec(dllexport) 17 #else 18 #define EXPORT_SYMBOL 19 #endif 20 #endif 21 #elif defined(HAVE_FUNC_ATTRIBUTE_VISIBILITY) 22 #define EXPORT_SYMBOL __attribute__ ((visibility ("default"))) 23 #endif 24 #elif defined(MSC_VER) && !defined(STATIC_LIBBITCOINCONSENSUS) 25 #define EXPORT_SYMBOL __declspec(dllimport) 26 #endif 27 28 #ifndef EXPORT_SYMBOL 29 #define EXPORT_SYMBOL 30 #endif 31 32 #ifdef __cplusplus 33 extern "C" { 34 #endif 35 36 #define BITCOINCONSENSUS_API_VER 1 37 38 typedef enum bitcoinconsensus_error_t 39 { 40 bitcoinconsensus_ERR_OK = 0, 41 bitcoinconsensus_ERR_TX_INDEX, 42 bitcoinconsensus_ERR_TX_SIZE_MISMATCH, 43 bitcoinconsensus_ERR_TX_DESERIALIZE, 44 bitcoinconsensus_ERR_AMOUNT_REQUIRED, 45 } bitcoinconsensus_error; 46 47 /** Script verification flags */ 48 enum 49 { 50 bitcoinconsensus_SCRIPT_FLAGS_VERIFY_NONE = 0, 51 bitcoinconsensus_SCRIPT_FLAGS_VERIFY_P2SH = (1U << 0), // evaluate P2SH (BIP16) subscripts 52 bitcoinconsensus_SCRIPT_FLAGS_VERIFY_DERSIG = (1U << 2), // enforce strict DER (BIP66) compliance 53 bitcoinconsensus_SCRIPT_FLAGS_VERIFY_NULLDUMMY = (1U << 4), // enforce NULLDUMMY (BIP147) 54 bitcoinconsensus_SCRIPT_FLAGS_VERIFY_CHECKLOCKTIMEVERIFY = (1U << 9), // enable CHECKLOCKTIMEVERIFY (BIP65) 55 bitcoinconsensus_SCRIPT_FLAGS_VERIFY_CHECKSEQUENCEVERIFY = (1U << 10), // enable CHECKSEQUENCEVERIFY (BIP112) 56 bitcoinconsensus_SCRIPT_FLAGS_VERIFY_WITNESS = (1U << 11), // enable WITNESS (BIP141) 57 }; 58 59 /// Returns 1 if the input nIn of the serialized transaction pointed to by 60 /// txTo correctly spends the scriptPubKey pointed to by scriptPubKey under 61 /// the additional constraints specified by flags. 62 /// If not NULL, err will contain an error/success code for the operation 63 EXPORT_SYMBOL int bitcoinconsensus_verify_script(const unsigned char *scriptPubKey, unsigned int scriptPubKeyLen, 64 const unsigned char *txTo , unsigned int txToLen, 65 unsigned int nIn, unsigned int flags, bitcoinconsensus_error* err); 66 67 EXPORT_SYMBOL int bitcoinconsensus_verify_script_with_amount(const unsigned char *scriptPubKey, unsigned int scriptPubKeyLen, int64_t amount, 68 const unsigned char *txTo , unsigned int txToLen, 69 unsigned int nIn, unsigned int flags, bitcoinconsensus_error* err); 70 71 EXPORT_SYMBOL unsigned int bitcoinconsensus_version(); 72 73 #ifdef __cplusplus 74 } // extern "C" 75 #endif 76 77 #undef EXPORT_SYMBOL 78 79 #endif // BITCOIN_BITCOINCONSENSUS_H 80