1 // Copyright (c) 2009-2010 Satoshi Nakamoto 2 // Copyright (c) 2009-2018 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_SCRIPT_BITCOINCONSENSUS_H 7 #define BITCOIN_SCRIPT_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(HAVE_DLLEXPORT_ATTRIBUTE) 15 #define EXPORT_SYMBOL __declspec(dllexport) 16 #else 17 #define EXPORT_SYMBOL 18 #endif 19 #elif defined(HAVE_DEFAULT_VISIBILITY_ATTRIBUTE) 20 #define EXPORT_SYMBOL __attribute__ ((visibility ("default"))) 21 #endif 22 #elif defined(MSC_VER) && !defined(STATIC_LIBBITCOINCONSENSUS) 23 #define EXPORT_SYMBOL __declspec(dllimport) 24 #endif 25 26 #ifndef EXPORT_SYMBOL 27 #define EXPORT_SYMBOL 28 #endif 29 30 #ifdef __cplusplus 31 extern "C" { 32 #endif 33 34 #define BITCOINCONSENSUS_API_VER 1 35 36 typedef enum bitcoinconsensus_error_t 37 { 38 bitcoinconsensus_ERR_OK = 0, 39 bitcoinconsensus_ERR_TX_INDEX, 40 bitcoinconsensus_ERR_TX_SIZE_MISMATCH, 41 bitcoinconsensus_ERR_TX_DESERIALIZE, 42 bitcoinconsensus_ERR_AMOUNT_REQUIRED, 43 bitcoinconsensus_ERR_INVALID_FLAGS, 44 } bitcoinconsensus_error; 45 46 /** Script verification flags */ 47 enum 48 { 49 bitcoinconsensus_SCRIPT_FLAGS_VERIFY_NONE = 0, 50 bitcoinconsensus_SCRIPT_FLAGS_VERIFY_P2SH = (1U << 0), // evaluate P2SH (BIP16) subscripts 51 bitcoinconsensus_SCRIPT_FLAGS_VERIFY_DERSIG = (1U << 2), // enforce strict DER (BIP66) compliance 52 bitcoinconsensus_SCRIPT_FLAGS_VERIFY_NULLDUMMY = (1U << 4), // enforce NULLDUMMY (BIP147) 53 bitcoinconsensus_SCRIPT_FLAGS_VERIFY_CHECKLOCKTIMEVERIFY = (1U << 9), // enable CHECKLOCKTIMEVERIFY (BIP65) 54 bitcoinconsensus_SCRIPT_FLAGS_VERIFY_CHECKSEQUENCEVERIFY = (1U << 10), // enable CHECKSEQUENCEVERIFY (BIP112) 55 bitcoinconsensus_SCRIPT_FLAGS_VERIFY_WITNESS = (1U << 11), // enable WITNESS (BIP141) 56 bitcoinconsensus_SCRIPT_FLAGS_VERIFY_ALL = bitcoinconsensus_SCRIPT_FLAGS_VERIFY_P2SH | bitcoinconsensus_SCRIPT_FLAGS_VERIFY_DERSIG | 57 bitcoinconsensus_SCRIPT_FLAGS_VERIFY_NULLDUMMY | bitcoinconsensus_SCRIPT_FLAGS_VERIFY_CHECKLOCKTIMEVERIFY | 58 bitcoinconsensus_SCRIPT_FLAGS_VERIFY_CHECKSEQUENCEVERIFY | bitcoinconsensus_SCRIPT_FLAGS_VERIFY_WITNESS 59 }; 60 61 /// Returns 1 if the input nIn of the serialized transaction pointed to by 62 /// txTo correctly spends the scriptPubKey pointed to by scriptPubKey under 63 /// the additional constraints specified by flags. 64 /// If not nullptr, err will contain an error/success code for the operation 65 EXPORT_SYMBOL int bitcoinconsensus_verify_script(const unsigned char *scriptPubKey, unsigned int scriptPubKeyLen, 66 const unsigned char *txTo , unsigned int txToLen, 67 unsigned int nIn, unsigned int flags, bitcoinconsensus_error* err); 68 69 EXPORT_SYMBOL int bitcoinconsensus_verify_script_with_amount(const unsigned char *scriptPubKey, unsigned int scriptPubKeyLen, int64_t amount, 70 const unsigned char *txTo , unsigned int txToLen, 71 unsigned int nIn, unsigned int flags, bitcoinconsensus_error* err); 72 73 EXPORT_SYMBOL unsigned int bitcoinconsensus_version(); 74 75 #ifdef __cplusplus 76 } // extern "C" 77 #endif 78 79 #undef EXPORT_SYMBOL 80 81 #endif // BITCOIN_SCRIPT_BITCOINCONSENSUS_H 82