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_NAMECOINCONSENSUS_H 7 #define BITCOIN_SCRIPT_NAMECOINCONSENSUS_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_LIBNAMECOINCONSENSUS) 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 NAMECOINCONSENSUS_API_VER 1 37 38 typedef enum namecoinconsensus_error_t 39 { 40 namecoinconsensus_ERR_OK = 0, 41 namecoinconsensus_ERR_TX_INDEX, 42 namecoinconsensus_ERR_TX_SIZE_MISMATCH, 43 namecoinconsensus_ERR_TX_DESERIALIZE, 44 namecoinconsensus_ERR_AMOUNT_REQUIRED, 45 namecoinconsensus_ERR_INVALID_FLAGS, 46 } namecoinconsensus_error; 47 48 /** Script verification flags */ 49 enum 50 { 51 namecoinconsensus_SCRIPT_FLAGS_VERIFY_NONE = 0, 52 namecoinconsensus_SCRIPT_FLAGS_VERIFY_P2SH = (1U << 0), // evaluate P2SH (BIP16) subscripts 53 namecoinconsensus_SCRIPT_FLAGS_VERIFY_DERSIG = (1U << 2), // enforce strict DER (BIP66) compliance 54 namecoinconsensus_SCRIPT_FLAGS_VERIFY_NULLDUMMY = (1U << 4), // enforce NULLDUMMY (BIP147) 55 namecoinconsensus_SCRIPT_FLAGS_VERIFY_CHECKLOCKTIMEVERIFY = (1U << 9), // enable CHECKLOCKTIMEVERIFY (BIP65) 56 namecoinconsensus_SCRIPT_FLAGS_VERIFY_CHECKSEQUENCEVERIFY = (1U << 10), // enable CHECKSEQUENCEVERIFY (BIP112) 57 namecoinconsensus_SCRIPT_FLAGS_VERIFY_WITNESS = (1U << 11), // enable WITNESS (BIP141) 58 namecoinconsensus_SCRIPT_FLAGS_VERIFY_ALL = namecoinconsensus_SCRIPT_FLAGS_VERIFY_P2SH | namecoinconsensus_SCRIPT_FLAGS_VERIFY_DERSIG | 59 namecoinconsensus_SCRIPT_FLAGS_VERIFY_NULLDUMMY | namecoinconsensus_SCRIPT_FLAGS_VERIFY_CHECKLOCKTIMEVERIFY | 60 namecoinconsensus_SCRIPT_FLAGS_VERIFY_CHECKSEQUENCEVERIFY | namecoinconsensus_SCRIPT_FLAGS_VERIFY_WITNESS 61 }; 62 63 /// Returns 1 if the input nIn of the serialized transaction pointed to by 64 /// txTo correctly spends the scriptPubKey pointed to by scriptPubKey under 65 /// the additional constraints specified by flags. 66 /// If not nullptr, err will contain an error/success code for the operation 67 EXPORT_SYMBOL int namecoinconsensus_verify_script(const unsigned char *scriptPubKey, unsigned int scriptPubKeyLen, 68 const unsigned char *txTo , unsigned int txToLen, 69 unsigned int nIn, unsigned int flags, namecoinconsensus_error* err); 70 71 EXPORT_SYMBOL int namecoinconsensus_verify_script_with_amount(const unsigned char *scriptPubKey, unsigned int scriptPubKeyLen, int64_t amount, 72 const unsigned char *txTo , unsigned int txToLen, 73 unsigned int nIn, unsigned int flags, namecoinconsensus_error* err); 74 75 EXPORT_SYMBOL unsigned int namecoinconsensus_version(); 76 77 #ifdef __cplusplus 78 } // extern "C" 79 #endif 80 81 #undef EXPORT_SYMBOL 82 83 #endif // BITCOIN_SCRIPT_NAMECOINCONSENSUS_H 84