dash/doc/shared-libraries.md
fanquake 1904ed51d1
Merge #20577: doc: libconsensus: add missing error code description, fix NBitcoin link
cb0b7125c14bf97394bd8b43bf2abfb943bb1cf9 doc: libbitcoinconsensus: add missing error code description, fix NBitcoin link (Sebastian Falbesoner)

Pull request description:

  This PR improves the libbitcoinconsensus description in `shared-libraries.md` in two ways:
  * adds the missing error code description for `bitcoinconsensus_ERR_INVALID_FLAGS` (introduced by commit 5ca8ef299a, PR #8976)
  * updates and fixes the link to the NBitcoin implementation (introduced by commit 3361edd010, PR #6430)
      * the owner of the `NBitcoin` github repository changed from `NicolasDorier` to `MetacoSA` (redirection still worked though)
      * instead of dynamically referring to a file in master with a fixed line number (which is obviously always quickly outdated), use a permalink with a file numbers area

ACKs for top commit:
  MarcoFalke:
    cr ACK cb0b7125c14bf97394bd8b43bf2abfb943bb1cf9
  harding:
    Code (documentation) review ACK cb0b7125c14bf97394bd8b43bf2abfb943bb1cf9.  Text is clear and seems accurate, and the link checks out.

Tree-SHA512: 9840458db6fb40e71c9852104aefcec5abbaf5054c6123701181dd477cea8c81d3647f376b67692159adf577c9b6305b05b784728bf9f14a753fab5898075a4e
2024-01-16 07:57:33 -06:00

2.5 KiB

Shared Libraries

dashconsensus

The purpose of this library is to make the verification functionality that is critical to Dash'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

dashconsensus_version returns an unsigned int with the API version (currently at an experimental 0).

Script Validation

dashconsensus_verify_script returns an int with the status of the verification. It will be 1 if the input script correctly spends the previous output scriptPubKey.

Parameters
  • const unsigned char *scriptPubKey - The previous output script that encumbers spending.
  • unsigned int scriptPubKeyLen - The number of bytes for the scriptPubKey.
  • const unsigned char *txTo - The transaction with the input that is spending the previous output.
  • unsigned int txToLen - The number of bytes for the txTo.
  • unsigned int nIn - The index of the input in txTo that spends the scriptPubKey.
  • unsigned int flags - The script validation flags (see below).
  • dashconsensus_error* err - Will have the error/success code for the operation (see below).
Script Flags
  • dashconsensus_SCRIPT_FLAGS_VERIFY_NONE
  • dashconsensus_SCRIPT_FLAGS_VERIFY_P2SH - Evaluate P2SH (BIP16) subscripts
  • dashconsensus_SCRIPT_FLAGS_VERIFY_DERSIG - Enforce strict DER (BIP66) compliance
  • dashconsensus_SCRIPT_FLAGS_VERIFY_NULLDUMMY - Enforce NULLDUMMY (BIP147)
  • dashconsensus_SCRIPT_FLAGS_VERIFY_CHECKLOCKTIMEVERIFY - Enable CHECKLOCKTIMEVERIFY (BIP65)
  • dashconsensus_SCRIPT_FLAGS_VERIFY_CHECKSEQUENCEVERIFY - Enable CHECKSEQUENCEVERIFY (BIP112)
Errors
  • dashconsensus_ERR_OK - No errors with input parameters (see the return value of dashconsensus_verify_script for the verification status)
  • dashconsensus_ERR_TX_INDEX - An invalid index for txTo
  • dashconsensus_ERR_TX_SIZE_MISMATCH - txToLen did not match with the size of txTo
  • dashconsensus_ERR_DESERIALIZE - An error deserializing txTo
  • dashconsensus_ERR_INVALID_FLAGS - Script verification flags are invalid (i.e. not part of the libconsensus interface)