mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-01-10 11:57:28 -03:00
25dc87e6f8
This library has existed for nearly 10 years with very little known uptake or impact. It has become a maintenance burden. In several cases it dictates our code/library structure (for example necessitating LIBBITCOIN_CRYPTO_BASE), as well as build-system procedures (building multiple copies of object files especially for the lib). Several discussions have arisen wrt migrating it to CMake and it has become difficult to justify adding more complexity for a library that is virtually unused anyway. See for example the discussions: https://github.com/hebasto/bitcoin/pull/41 https://github.com/bitcoin/bitcoin/pull/29123 Instead, we (fanquake, hebasto, TheCharlatan, and I) propose simply not migrating it to CMake and letting it end with v27. Any remaining use-cases could be handled in the future by libbitcoinkernel.
5.7 KiB
5.7 KiB
Shared Libraries
bitcoinconsensus
This library is deprecated and will be removed in v28
The purpose of this library is to make the verification functionality that is critical to Bitcoin's consensus available to other applications, e.g. to language bindings.
API
The interface is defined in the C header bitcoinconsensus.h
located in src/script/bitcoinconsensus.h
.
Version
bitcoinconsensus_version
returns an unsigned int
with the API version (currently 2
).
Script Validation
bitcoinconsensus_verify_script
, bitcoinconsensus_verify_script_with_amount
and bitcoinconsensus_verify_script_with_spent_outputs
return an int
with the status of the verification. It will be 1
if the input script correctly spends the previous output scriptPubKey
.
Parameters
bitcoinconsensus_verify_script
const unsigned char *scriptPubKey
- The previous output script that encumbers spending.unsigned int scriptPubKeyLen
- The number of bytes for thescriptPubKey
.const unsigned char *txTo
- The transaction with the input that is spending the previous output.unsigned int txToLen
- The number of bytes for thetxTo
.unsigned int nIn
- The index of the input intxTo
that spends thescriptPubKey
.unsigned int flags
- The script validation flags (see below).bitcoinconsensus_error* err
- Will have the error/success code for the operation (see below).
bitcoinconsensus_verify_script_with_amount
const unsigned char *scriptPubKey
- The previous output script that encumbers spending.unsigned int scriptPubKeyLen
- The number of bytes for thescriptPubKey
.int64_t amount
- The amount spent in the inputconst unsigned char *txTo
- The transaction with the input that is spending the previous output.unsigned int txToLen
- The number of bytes for thetxTo
.unsigned int nIn
- The index of the input intxTo
that spends thescriptPubKey
.unsigned int flags
- The script validation flags (see below).bitcoinconsensus_error* err
- Will have the error/success code for the operation (see below).
bitcoinconsensus_verify_script_with_spent_outputs
const unsigned char *scriptPubKey
- The previous output script that encumbers spending.unsigned int scriptPubKeyLen
- The number of bytes for thescriptPubKey
.int64_t amount
- The amount spent in the inputconst unsigned char *txTo
- The transaction with the input that is spending the previous output.unsigned int txToLen
- The number of bytes for thetxTo
.UTXO *spentOutputs
- Previous outputs spent in the transaction.UTXO
is a struct composed byconst unsigned char *scriptPubKey
,unsigned int scriptPubKeySize
(the number of bytes for thescriptPubKey
) andunsigned int value
.unsigned int spentOutputsLen
- The number of bytes for thespentOutputs
.unsigned int nIn
- The index of the input intxTo
that spends thescriptPubKey
.unsigned int flags
- The script validation flags (see below).bitcoinconsensus_error* err
- Will have the error/success code for the operation (see below).
Script Flags
bitcoinconsensus_SCRIPT_FLAGS_VERIFY_NONE
bitcoinconsensus_SCRIPT_FLAGS_VERIFY_P2SH
- Evaluate P2SH (BIP16) subscriptsbitcoinconsensus_SCRIPT_FLAGS_VERIFY_DERSIG
- Enforce strict DER (BIP66) compliancebitcoinconsensus_SCRIPT_FLAGS_VERIFY_NULLDUMMY
- Enforce NULLDUMMY (BIP147)bitcoinconsensus_SCRIPT_FLAGS_VERIFY_CHECKLOCKTIMEVERIFY
- Enable CHECKLOCKTIMEVERIFY (BIP65)bitcoinconsensus_SCRIPT_FLAGS_VERIFY_CHECKSEQUENCEVERIFY
- Enable CHECKSEQUENCEVERIFY (BIP112)bitcoinconsensus_SCRIPT_FLAGS_VERIFY_WITNESS
- Enable WITNESS (BIP141)bitcoinconsensus_SCRIPT_FLAGS_VERIFY_TAPROOT
- Enable TAPROOT (BIP340, BIP341, BIP342)
Errors
bitcoinconsensus_ERR_OK
- No errors with input parameters (see the return value ofbitcoinconsensus_verify_script
for the verification status)bitcoinconsensus_ERR_TX_INDEX
- An invalid index fortxTo
bitcoinconsensus_ERR_TX_SIZE_MISMATCH
-txToLen
did not match with the size oftxTo
bitcoinconsensus_ERR_DESERIALIZE
- An error deserializingtxTo
bitcoinconsensus_ERR_AMOUNT_REQUIRED
- Input amount is required if WITNESS is usedbitcoinconsensus_ERR_INVALID_FLAGS
- Script verificationflags
are invalid (i.e. not part of the libconsensus interface)bitcoinconsensus_ERR_SPENT_OUTPUTS_REQUIRED
- Spent outputs are required if TAPROOT is usedbitcoinconsensus_ERR_SPENT_OUTPUTS_MISMATCH
- Spent outputs size doesn't match tx inputs size
Example Implementations
- NBitcoin (.NET Bindings)
- node-libbitcoinconsensus (Node.js Bindings)
- java-libbitcoinconsensus (Java Bindings)
- bitcoinconsensus-php (PHP Bindings)
- rust-bitcoinconsensus (Rust Bindings)