Difference between revisions of "SIGHASH flags"

Line 126: Line 126:
  
 
Note that the version number and locktime are always signed, and the scriptSigs are never signed.
 
Note that the version number and locktime are always signed, and the scriptSigs are never signed.
 +
 +
SIGHASH flags are handy when constructing smart contracts and negotiable transactions in payment channels. 
  
 
Use Case 1 - crowdfunding
 
Use Case 1 - crowdfunding

Revision as of 15:39, 21 November 2019

A SIGHASH flag is used to indicate which part of the transaction is signed by the ECDSA signature. The mechanism provides a flexibility in constructing transactions. There are in total 6 different flags that can be added to a digital signature in a transaction.

Flag Value Functional Meaning
SIGHASH_ALL 0x00000001 Sign all inputs and outputs
SIGHASH_NONE 0x00000002 Sign all inputs and no output
SIGHASH_SINGLE 0x00000003 Sign all inputs and the output with the same index
SIGHASH_ALL | ANYONECANPAY 0x00000081 Sign its own input and all outputs
SIGHASH_NONE | ANYONECANPAY 0x00000082 Sign its own input and no output
SIGHASH_SINGLE | ANYONECANPAY 0x00000083 Sign its own input and the output with the same index

The table below illustrates what is signed and what is not signed in a more granulated detail by an ECDSA siganture in the Input 1 in a transaction.

ALL NONE SINGLE ALL | ANYONECANPAY NONE | ANYONECANPAY SINGLE | ANYONECANPAY
Version Yes Yes Yes Yes Yes Yes
Locktime Yes Yes Yes Yes Yes Yes
Input 1 outpoint Yes Yes Yes Yes Yes Yes
Input 1 scriptSig No No No No No No
Input 1 sequence number Yes Yes Yes Yes Yes Yes
Input 2 outpoint Yes Yes Yes No No No
Input 2 scriptSig No No No No No No
Input 2 sequence number Yes Yes Yes No No No
Output 1 Yes No Yes Yes No Yes
Output 2 Yes No No Yes No No

Note that the version number and locktime are always signed, and the scriptSigs are never signed.

SIGHASH flags are handy when constructing smart contracts and negotiable transactions in payment channels.

Use Case 1 - crowdfunding

Use Case 2 - blank check

Use Case 3 - Modular Transaction


References

https://github.com/bitcoin-sv/bitcoin-sv/blob/master/src/script/sighashtype.h