Documentation
¶
Overview ¶
Package rawtx helps you answer questions about raw bitcoin transactions, their inputs, outputs and scripts. More information https://github.com/0xB10C/rawtx
Index ¶
- Constants
- Variables
- func HexDecodeRawTxString(rawTx string) (hexDecodedTx []byte, err error)
- type BitcoinScript
- type ECDSASignature
- type Input
- func (in *Input) FromWireTxIn(txIn *wire.TxIn)
- func (in *Input) GetNestedP2WSHRedeemScript() (redeemScript BitcoinScript)
- func (in *Input) GetP2SHRedeemScript() (redeemScript BitcoinScript)
- func (in *Input) GetP2WSHRedeemScript() (redeemScript BitcoinScript)
- func (in *Input) GetType() InputType
- func (in *Input) HasWitness() bool
- func (input *Input) InputStats() *InputStats
- func (in *Input) IsCoinbase() bool
- func (in *Input) IsCoinbaseWithWitness() bool
- func (in *Input) IsCoinbaseWithoutWitness() bool
- func (in *Input) IsLNUniliteralClosing() bool
- func (in *Input) SpendsMultisig() bool
- func (in *Input) SpendsNativeSegWit() bool
- func (in *Input) SpendsNestedP2WPKH() bool
- func (in *Input) SpendsNestedP2WSH() bool
- func (in *Input) SpendsNestedSegWit() bool
- func (in *Input) SpendsP2MS() bool
- func (in *Input) SpendsP2PK() bool
- func (in *Input) SpendsP2PKH() (spendsP2PKH bool)
- func (in *Input) SpendsP2PKHWithIsCompressed() (spendsP2PKH bool, isCompressedPubKey bool)
- func (in *Input) SpendsP2SH() (spendsP2SH bool)
- func (in *Input) SpendsP2TR() bool
- func (in *Input) SpendsP2TRKeyPath() bool
- func (in *Input) SpendsP2TRScriptPath() bool
- func (in *Input) SpendsP2WPKH() bool
- func (in *Input) SpendsP2WSH() bool
- type InputStats
- type InputType
- type LocktimeStats
- type OpCode
- type Outpoint
- type Output
- func (out *Output) FromWireTxOut(txOut *wire.TxOut)
- func (out *Output) GetOPReturnData() (bool, ParsedOpCode)
- func (out *Output) GetType() OutputType
- func (out *Output) IsOPReturnOutput() (is bool)
- func (out *Output) IsP2MSOutput() (is bool, m int, n int)
- func (out *Output) IsP2PKHOutput() bool
- func (out *Output) IsP2PKOutput() bool
- func (out *Output) IsP2SHOutput() bool
- func (out *Output) IsP2TROutput() bool
- func (out *Output) IsP2WPKHV0Output() bool
- func (out *Output) IsP2WSHV0Output() bool
- func (out *Output) OutputStats() *OutputStats
- type OutputStats
- type OutputType
- type ParsedBitcoinScript
- type ParsedOpCode
- func (poc ParsedOpCode) GetSigHash() (sighash byte)
- func (poc ParsedOpCode) IsCompressedECDSAPubKey() bool
- func (poc ParsedOpCode) IsECDSAPubKey() bool
- func (poc ParsedOpCode) IsECDSAPubKeyWithIsCompressed() (isPubKey bool, isCompressed bool)
- func (poc *ParsedOpCode) IsECDSASignature(requireStrictDER bool) bool
- func (poc *ParsedOpCode) IsECDSASignatureInStrictDER() bool
- func (poc *ParsedOpCode) IsSchnorrSignature() bool
- func (poc *ParsedOpCode) IsSignature() bool
- func (poc ParsedOpCode) IsUncompressedECDSAPubKey() bool
- func (sigOpCode *ParsedOpCode) PubKeyStats() *PubKeyStats
- func (sigOpCode *ParsedOpCode) SignatureStats() *SignatureStats
- func (poc *ParsedOpCode) String() string
- type PubKeyStats
- type SignatureStats
- type TestMultisigType
- type TestOpReturnData
- type TestTransaction
- type Tx
- func (tx *Tx) FromWireMsgTx(wireTx *wire.MsgTx)
- func (tx *Tx) GetLocktime() uint32
- func (tx *Tx) GetNumInputs() int
- func (tx *Tx) GetNumOutputs() int
- func (tx *Tx) GetOutputSum() (sumOutputValues int64)
- func (tx *Tx) GetSizeWithWitness() int
- func (tx *Tx) GetSizeWithoutWitness() int
- func (tx *Tx) HasOPReturnOutput() bool
- func (tx *Tx) HasP2MSOutput() bool
- func (tx *Tx) HasP2PKHOutput() bool
- func (tx *Tx) HasP2PKOutput() bool
- func (tx *Tx) HasP2SHOutput() bool
- func (tx *Tx) HasP2WPKHOutput() bool
- func (tx *Tx) HasP2WSHOutput() bool
- func (tx *Tx) IsBIP69Compliant() bool
- func (tx *Tx) IsCoinbase() bool
- func (tx *Tx) IsExplicitlyRBFSignaling() bool
- func (tx *Tx) IsSpendingMultisig() bool
- func (tx *Tx) IsSpendingNativeSegWit() bool
- func (tx *Tx) IsSpendingNestedSegWit() bool
- func (tx *Tx) IsSpendingSegWit() bool
- func (tx *Tx) IsSpendingTaproot() bool
- func (tx *Tx) LocktimeStats() *LocktimeStats
- func (tx *Tx) Stats() *TxStats
- type TxStats
Constants ¶
const DERMarker = 0x30
DERMarker represents the compound maker used in the DER encoding
const DERValueMarker = 0x02
DERValueMarker represents the value (integer) maker used in the DER encoding
const TAPROOT_ANNEX_INDICATOR = 0x50
const TAPROOT_LEAF_MASK = 0xfe
const TAPROOT_LEAF_TAPSCRIPT = 0xc0
Variables ¶
var OpCodeStringMap = map[OpCode]string{}/* 256 elements not displayed */
OpCodeStringMap maps op codes to their developer readable names
Functions ¶
func HexDecodeRawTxString ¶
HexDecodeRawTxString hex decodes a rawTx string and returns it as byte slice.
Types ¶
type BitcoinScript ¶
type BitcoinScript []byte
BitcoinScript represents a bitcoin script as a byte slice A script can for example be the scriptPubKey or the scriptSig
func (BitcoinScript) IsMultisigScript ¶
func (s BitcoinScript) IsMultisigScript() (isMultisig bool, numRequiredSigs int, numPossiblePubKeys int)
IsMultisigScript checks if a passed BitcoinScript is multisig. Supported are P2SH, P2SH-P2WSH and P2WSH redeem scripts.
func (BitcoinScript) Parse ¶ added in v1.1.0
func (s BitcoinScript) Parse() (parsed ParsedBitcoinScript)
Parse parses the BitcoinScript and returns a ParsedBitcoinScript. It expects a script with correctly formatted data pushes, or it might return ParsedOpCodes with shorter than expected data for pushes-past-script-end.
type ECDSASignature ¶ added in v1.2.0
type ECDSASignature struct {
// contains filtered or unexported fields
}
ECDSASignature hold the raw byte fields of a deserialized ECDSA signature However, these fields might e.g. still be padded with zero values.
func DeserializeECDSASignature ¶ added in v1.2.0
func DeserializeECDSASignature(sigBytes []byte, requireStrictDER bool) (sig ECDSASignature, ok bool)
DeserializeECDSASignature tries to deserialize a ECDSA signature. The caller can choose strict DER encoding is required. If the function returns ok=true then the ECDSASignature object is filled with the r and S values. The caller is expected to pass a signature with the SigHash flag removed. https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki#der-encoding-reference
func (*ECDSASignature) HasLowR ¶ added in v1.2.0
func (sig *ECDSASignature) HasLowR() bool
HasLowR checks if a ECDSASignature has a low r value as implemented in https://github.com/bitcoin/bitcoin/pull/13666
func (*ECDSASignature) HasLowS ¶ added in v1.2.0
func (sig *ECDSASignature) HasLowS() bool
HasLowS checks if a ECDSASignature has a low S value as defined in https://github.com/bitcoin/bips/blob/master/bip-0146.mediawiki#low_s
type Input ¶
type Input struct { Outpoint Outpoint ScriptSig BitcoinScript Sequence uint32 Witness ParsedBitcoinScript // contains filtered or unexported fields }
Input represents a bitcoin transaction input as a struct.
func (*Input) FromWireTxIn ¶
FromWireTxIn populates an Input struct with values from a wire.TxIn.
func (*Input) GetNestedP2WSHRedeemScript ¶
func (in *Input) GetNestedP2WSHRedeemScript() (redeemScript BitcoinScript)
GetNestedP2WSHRedeemScript checks if the input spend is a Nested-P2WSH input and then returns the redeemScript. The returned redeemScript is empty if the input does not spend a Nested-P2WSH input.
func (*Input) GetP2SHRedeemScript ¶
func (in *Input) GetP2SHRedeemScript() (redeemScript BitcoinScript)
GetP2SHRedeemScript checks if the input spend is a P2SH input and then returns the redeemScript. The returned redeemScript is empty if the input does not spend a P2SH input.
func (*Input) GetP2WSHRedeemScript ¶
func (in *Input) GetP2WSHRedeemScript() (redeemScript BitcoinScript)
GetP2WSHRedeemScript checks if the input spend is a P2WSH input and then returns the redeemScript. The returned redeemScript is empty if the input does not spend a P2WSH input.
func (*Input) HasWitness ¶
HasWitness returns a boolean indicating if an input has a witness
func (*Input) InputStats ¶ added in v1.2.0
func (input *Input) InputStats() *InputStats
InputStats returns a populated *InputStats struct for the input
func (*Input) IsCoinbase ¶ added in v1.1.0
IsCoinbase checks if an input is a coinbase input.
func (*Input) IsCoinbaseWithWitness ¶ added in v1.2.0
IsCoinbaseWithWitness checks if an input is a coinbase input by checking the previous- output-index to be equal to 0xffffffff and then checking the previous-tx-hash to be all zero and then checks if the coinbase has a witness.
func (*Input) IsCoinbaseWithoutWitness ¶ added in v1.2.0
IsCoinbaseWithoutWitness checks if an input is a coinbase input by checking the previous- output-index to be equal to 0xffffffff and then checking the previous-tx-hash to be all zero and then checks if the coinbase has a witness.
func (*Input) IsLNUniliteralClosing ¶
IsLNUniliteralClosing checks if the input spend is a lightning network unilateral close.
OP_IF pubKey OP_ELSE OP_DATA_X (i.e. CSV time) OP_CHECKSEQUENCEVERIFY OP_DROP pubKey OP_ENDIF OP_CHECKSIG
func (*Input) SpendsMultisig ¶
SpendsMultisig checks if the input spend is a multisig input. Checked are P2MS, P2SH, P2SH-P2WSH and P2WSH inputs.
func (*Input) SpendsNativeSegWit ¶
SpendsNativeSegWit checks if the input spend is a native SegWit input. A native SegWit input has a witness but an empty scriptSig.
func (*Input) SpendsNestedP2WPKH ¶
SpendsNestedP2WPKH checks if the input spend is a nested P2WPKH input. A nested P2WPKH input has a witness and the scriptSig looks like OP_DATA_22(OP_0 OP_DATA_20(20 byte hash))
func (*Input) SpendsNestedP2WSH ¶
SpendsNestedP2WSH checks if the input spend is a nested P2WSH input. A nested P2WSH input has a witness and the scriptSig looks like OP_DATA_34(OP_0 OP_DATA_32(32 byte hash))
func (*Input) SpendsNestedSegWit ¶
SpendsNestedSegWit checks if the input spend is a nested SegWit input. A nested SegWit input has an **not** empty scriptSig and a witness.
func (*Input) SpendsP2MS ¶
SpendsP2MS checks if an input spends a P2MS input. A P2MS has no witness items and a scriptSig as follows: OP_0 <signature> [<signature>] [<signature>] (where [] means optional)
func (*Input) SpendsP2PK ¶
SpendsP2PK checks if the input spend is a P2PK input. A P2PK input only contains the signature in the scriptSig. <signature>
func (*Input) SpendsP2PKH ¶
SpendsP2PKH checks if the input spend is a P2PKH input. <signature> <pubkey>
func (*Input) SpendsP2PKHWithIsCompressed ¶
SpendsP2PKHWithIsCompressed checks if the input spend is a P2PKH input. Additionally it returns a boolean indicating if the revealed pubkey is compressed. <signature> <pubkey>
func (*Input) SpendsP2SH ¶
SpendsP2SH checks if the input spend is a P2SH input. A P2SH input has a redeemscript push at the end of the scriptSig, which is neither a signature or a pubkey.
func (*Input) SpendsP2TR ¶ added in v1.3.0
func (*Input) SpendsP2TRKeyPath ¶ added in v1.3.0
func (*Input) SpendsP2TRScriptPath ¶ added in v1.3.0
func (*Input) SpendsP2WPKH ¶
SpendsP2WPKH checks if an input is spending a P2WPKH input. A P2WPKH input has a empty scriptSig, but contains exactly two items in the witness: [signature, pubkey]
func (*Input) SpendsP2WSH ¶
SpendsP2WSH checks if an input spends a P2WSH input. Native SegWit inputs that aren't P2WPKH or P2TR are likely P2WSH.
type InputStats ¶ added in v1.2.0
type InputStats struct { Type InputType TypeString string Sequence uint32 IsSpendingSegWit bool IsSpendingNativeSegWit bool IsSpendingNestedSegWit bool IsLNUniliteralClosing bool IsSpendingMultisig bool MultiSigM int MultiSigN int SigStats []*SignatureStats PubKeyStats []*PubKeyStats OpCodes []OpCode }
InputStats contains stats about a transaction input
type InputType ¶
type InputType int
InputType defines the input type
type LocktimeStats ¶ added in v1.2.0
LocktimeStats contains stats about the transaction locktime
type OpCode ¶
type OpCode byte
OpCode represents a Bitcoin operation code
const ( Op0 OpCode = 0x00 OpDATA1 OpCode = 0x01 OpDATA2 OpCode = 0x02 OpDATA3 OpCode = 0x03 OpDATA4 OpCode = 0x04 OpDATA5 OpCode = 0x05 OpDATA6 OpCode = 0x06 OpDATA7 OpCode = 0x07 OpDATA8 OpCode = 0x08 OpDATA9 OpCode = 0x09 OpDATA10 OpCode = 0x0a OpDATA11 OpCode = 0x0b OpDATA12 OpCode = 0x0c OpDATA13 OpCode = 0x0d OpDATA14 OpCode = 0x0e OpDATA15 OpCode = 0x0f OpDATA16 OpCode = 0x10 OpDATA17 OpCode = 0x11 OpDATA18 OpCode = 0x12 OpDATA19 OpCode = 0x13 OpDATA20 OpCode = 0x14 OpDATA21 OpCode = 0x15 OpDATA22 OpCode = 0x16 OpDATA23 OpCode = 0x17 OpDATA24 OpCode = 0x18 OpDATA25 OpCode = 0x19 OpDATA26 OpCode = 0x1a OpDATA27 OpCode = 0x1b OpDATA28 OpCode = 0x1c OpDATA29 OpCode = 0x1d OpDATA30 OpCode = 0x1e OpDATA31 OpCode = 0x1f OpDATA32 OpCode = 0x20 OpDATA33 OpCode = 0x21 OpDATA34 OpCode = 0x22 OpDATA35 OpCode = 0x23 OpDATA36 OpCode = 0x24 OpDATA37 OpCode = 0x25 OpDATA38 OpCode = 0x26 OpDATA39 OpCode = 0x27 OpDATA40 OpCode = 0x28 OpDATA41 OpCode = 0x29 OpDATA42 OpCode = 0x2a OpDATA43 OpCode = 0x2b OpDATA44 OpCode = 0x2c OpDATA45 OpCode = 0x2d OpDATA46 OpCode = 0x2e OpDATA47 OpCode = 0x2f OpDATA48 OpCode = 0x30 OpDATA49 OpCode = 0x31 OpDATA50 OpCode = 0x32 OpDATA51 OpCode = 0x33 OpDATA52 OpCode = 0x34 OpDATA53 OpCode = 0x35 OpDATA54 OpCode = 0x36 OpDATA55 OpCode = 0x37 OpDATA56 OpCode = 0x38 OpDATA57 OpCode = 0x39 OpDATA58 OpCode = 0x3a OpDATA59 OpCode = 0x3b OpDATA60 OpCode = 0x3c OpDATA61 OpCode = 0x3d OpDATA62 OpCode = 0x3e OpDATA63 OpCode = 0x3f OpDATA64 OpCode = 0x40 OpDATA65 OpCode = 0x41 OpDATA66 OpCode = 0x42 OpDATA67 OpCode = 0x43 OpDATA68 OpCode = 0x44 OpDATA69 OpCode = 0x45 OpDATA70 OpCode = 0x46 OpDATA71 OpCode = 0x47 OpDATA72 OpCode = 0x48 OpDATA73 OpCode = 0x49 OpDATA74 OpCode = 0x4a OpDATA75 OpCode = 0x4b OpPUSHDATA1 OpCode = 0x4c OpPUSHDATA2 OpCode = 0x4d OpPUSHDATA4 OpCode = 0x4e Op1NEGATE OpCode = 0x4f OpRESERVED OpCode = 0x50 Op1 OpCode = 0x51 OpTRUE OpCode = 0x51 Op2 OpCode = 0x52 Op3 OpCode = 0x53 Op4 OpCode = 0x54 Op5 OpCode = 0x55 Op6 OpCode = 0x56 Op7 OpCode = 0x57 Op8 OpCode = 0x58 Op9 OpCode = 0x59 Op10 OpCode = 0x5a Op11 OpCode = 0x5b Op12 OpCode = 0x5c Op13 OpCode = 0x5d Op14 OpCode = 0x5e Op15 OpCode = 0x5f Op16 OpCode = 0x60 OpNOP OpCode = 0x61 OpVER OpCode = 0x62 OpIF OpCode = 0x63 OpNOTIF OpCode = 0x64 OpVERIF OpCode = 0x65 OpVERNOTIF OpCode = 0x66 OpELSE OpCode = 0x67 OpENDIF OpCode = 0x68 OpVERIFY OpCode = 0x69 OpRETURN OpCode = 0x6a OpTOALTSTACK OpCode = 0x6b OpFROMALTSTACK OpCode = 0x6c Op2DROP OpCode = 0x6d Op2DUP OpCode = 0x6e Op3DUP OpCode = 0x6f Op2OVER OpCode = 0x70 Op2ROT OpCode = 0x71 Op2SWAP OpCode = 0x72 OpIFDUP OpCode = 0x73 OpDEPTH OpCode = 0x74 OpDROP OpCode = 0x75 OpDUP OpCode = 0x76 OpNIP OpCode = 0x77 OpOVER OpCode = 0x78 OpPICK OpCode = 0x79 OpROLL OpCode = 0x7a OpROT OpCode = 0x7b OpSWAP OpCode = 0x7c OpTUCK OpCode = 0x7d OpCAT OpCode = 0x7e OpSUBSTR OpCode = 0x7f OpLEFT OpCode = 0x80 OpRIGHT OpCode = 0x81 OpSIZE OpCode = 0x82 OpINVERT OpCode = 0x83 OpAND OpCode = 0x84 OpOR OpCode = 0x85 OpXOR OpCode = 0x86 OpEQUAL OpCode = 0x87 OpEQUALVERIFY OpCode = 0x88 OpRESERVED1 OpCode = 0x89 OpRESERVED2 OpCode = 0x8a Op1ADD OpCode = 0x8b Op1SUB OpCode = 0x8c Op2MUL OpCode = 0x8d Op2DIV OpCode = 0x8e OpNEGATE OpCode = 0x8f OpABS OpCode = 0x90 OpNOT OpCode = 0x91 Op0NOTEQUAL OpCode = 0x92 OpADD OpCode = 0x93 OpSUB OpCode = 0x94 OpMUL OpCode = 0x95 OpDIV OpCode = 0x96 OpMOD OpCode = 0x97 OpLSHIFT OpCode = 0x98 OpRSHIFT OpCode = 0x99 OpBOOLAND OpCode = 0x9a OpBOOLOR OpCode = 0x9b OpNUMEQUAL OpCode = 0x9c OpNUMEQUALVERIFY OpCode = 0x9d OpNUMNOTEQUAL OpCode = 0x9e OpLESSTHAN OpCode = 0x9f OpGREATERTHAN OpCode = 0xa0 OpLESSTHANOREQUAL OpCode = 0xa1 OpGREATERTHANOREQUAL OpCode = 0xa2 OpMIN OpCode = 0xa3 OpMAX OpCode = 0xa4 OpWITHIN OpCode = 0xa5 OpRIPEMD160 OpCode = 0xa6 OpSHA1 OpCode = 0xa7 OpSHA256 OpCode = 0xa8 OpHASH160 OpCode = 0xa9 OpHASH256 OpCode = 0xaa OpCODESEPARATOR OpCode = 0xab OpCHECKSIG OpCode = 0xac OpCHECKSIGVERIFY OpCode = 0xad OpCHECKMULTISIG OpCode = 0xae OpCHECKMULTISIGVERIFY OpCode = 0xaf OpNOP1 OpCode = 0xb0 OpCHECKLOCKTIMEVERIFY OpCode = 0xb1 OpCHECKSEQUENCEVERIFY OpCode = 0xb2 OpNOP4 OpCode = 0xb3 OpNOP5 OpCode = 0xb4 OpNOP6 OpCode = 0xb5 OpNOP7 OpCode = 0xb6 OpNOP8 OpCode = 0xb7 OpNOP9 OpCode = 0xb8 OpNOP10 OpCode = 0xb9 OpUNKNOWN186 OpCode = 0xba OpUNKNOWN187 OpCode = 0xbb OpUNKNOWN188 OpCode = 0xbc OpUNKNOWN189 OpCode = 0xbd OpUNKNOWN190 OpCode = 0xbe OpUNKNOWN191 OpCode = 0xbf OpUNKNOWN192 OpCode = 0xc0 OpUNKNOWN193 OpCode = 0xc1 OpUNKNOWN194 OpCode = 0xc2 OpUNKNOWN195 OpCode = 0xc3 OpUNKNOWN196 OpCode = 0xc4 OpUNKNOWN197 OpCode = 0xc5 OpUNKNOWN198 OpCode = 0xc6 OpUNKNOWN199 OpCode = 0xc7 OpUNKNOWN200 OpCode = 0xc8 OpUNKNOWN201 OpCode = 0xc9 OpUNKNOWN202 OpCode = 0xca OpUNKNOWN203 OpCode = 0xcb OpUNKNOWN204 OpCode = 0xcc OpUNKNOWN205 OpCode = 0xcd OpUNKNOWN206 OpCode = 0xce OpUNKNOWN207 OpCode = 0xcf OpUNKNOWN208 OpCode = 0xd0 OpUNKNOWN209 OpCode = 0xd1 OpUNKNOWN210 OpCode = 0xd2 OpUNKNOWN211 OpCode = 0xd3 OpUNKNOWN212 OpCode = 0xd4 OpUNKNOWN213 OpCode = 0xd5 OpUNKNOWN214 OpCode = 0xd6 OpUNKNOWN215 OpCode = 0xd7 OpUNKNOWN216 OpCode = 0xd8 OpUNKNOWN217 OpCode = 0xd9 OpUNKNOWN218 OpCode = 0xda OpUNKNOWN219 OpCode = 0xdb OpUNKNOWN220 OpCode = 0xdc OpUNKNOWN221 OpCode = 0xdd OpUNKNOWN222 OpCode = 0xde OpUNKNOWN223 OpCode = 0xdf OpUNKNOWN224 OpCode = 0xe0 OpUNKNOWN225 OpCode = 0xe1 OpUNKNOWN226 OpCode = 0xe2 OpUNKNOWN227 OpCode = 0xe3 OpUNKNOWN228 OpCode = 0xe4 OpUNKNOWN229 OpCode = 0xe5 OpUNKNOWN230 OpCode = 0xe6 OpUNKNOWN231 OpCode = 0xe7 OpUNKNOWN232 OpCode = 0xe8 OpUNKNOWN233 OpCode = 0xe9 OpUNKNOWN234 OpCode = 0xea OpUNKNOWN235 OpCode = 0xeb OpUNKNOWN236 OpCode = 0xec OpUNKNOWN237 OpCode = 0xed OpUNKNOWN238 OpCode = 0xee OpUNKNOWN239 OpCode = 0xef OpUNKNOWN240 OpCode = 0xf0 OpUNKNOWN241 OpCode = 0xf1 OpUNKNOWN242 OpCode = 0xf2 OpUNKNOWN243 OpCode = 0xf3 OpUNKNOWN244 OpCode = 0xf4 OpUNKNOWN245 OpCode = 0xf5 OpUNKNOWN246 OpCode = 0xf6 OpUNKNOWN247 OpCode = 0xf7 OpUNKNOWN248 OpCode = 0xf8 OpUNKNOWN249 OpCode = 0xf9 OpSMALLINTEGER OpCode = 0xfa OpPUBKEYS OpCode = 0xfb OpUNKNOWN252 OpCode = 0xfc OpPUBKEYHASH OpCode = 0xfd OpPUBKEY OpCode = 0xfe OpINVALIDOPCODE OpCode = 0xff )
Bitcoin OP Codes. Mainly copied and adopted from https://github.com/btcsuite/btcd/blob/master/txscript/opcode.go
func GetDataPushOpCodeForLength ¶ added in v1.2.0
GetDataPushOpCodeForLength returns the optimal DataPush OpCode for the given data length OpINVALIDOPCODE is returned for zero, negative or bigger than 0xffffffff inputs.
func (OpCode) IsDataPushOpCode ¶ added in v1.1.0
IsDataPushOpCode indicates if a opCode pushes data to the stack
type Outpoint ¶
Outpoint represents a bitcoin transaction input's previous outpoint as a struct.
func (*Outpoint) FromWireOutpoint ¶
FromWireOutpoint populates an Outpoint struct with values from a wire.OutPoint.
type Output ¶
type Output struct { Value int64 ScriptPubKey BitcoinScript // contains filtered or unexported fields }
Output represents a bitcoin transaction output as a struct.
func (*Output) FromWireTxOut ¶
FromWireTxOut populates an Output struct with values from a wire.TxOut.
func (*Output) GetOPReturnData ¶
func (out *Output) GetOPReturnData() (bool, ParsedOpCode)
GetOPReturnData returns a ParsedOpCode struct, which includes the Op Code and the data pushed by OP_RETURN. An OP_RETURN scriptPubKey looks like:
OP_RETURN <SomeDataPush> <OP_RETURN data>
func (*Output) GetType ¶
func (out *Output) GetType() OutputType
GetType retruns the output type as a OutputType
func (*Output) IsOPReturnOutput ¶
IsOPReturnOutput returns if an Output is an OP_RETURN output An OP_RETURN scriptPubKey looks like:
OP_RETURN <SomeDataPush> <OP_RETURN data>
func (*Output) IsP2MSOutput ¶
IsP2MSOutput returns a boolean indicating if a output is a P2MS output A P2MS 1-of-2 scriptPubKey looks like:
OP_1 PubKey PubKey OP_2 OP_CHECKMULTISIG
func (*Output) IsP2PKHOutput ¶
IsP2PKHOutput returns a boolean indicating if a output is a P2PKH output A P2PKH scriptPubKey looks like:
OP_DUP OP_HASH160 OP_DATA_20(20 byte pubKeyHash) OP_EQUALVERIFY OP_CHECKSIG OP_DUP OP_HASH160 OP_DATA_20( ) OP_EQUALVERIFY OP_CHECKSIG
func (*Output) IsP2PKOutput ¶
IsP2PKOutput returns a boolean indicating if a output is a P2PK output A P2PK output looks like:
PubKey OP_CHECKSIG
func (*Output) IsP2SHOutput ¶
IsP2SHOutput returns a boolean indicating if a output is a P2SH output A P2SH scriptPubKey looks like:
OP_HASH160 OP_DATA_20(20 byte hash) OP_EQUAL
func (*Output) IsP2TROutput ¶ added in v1.3.0
IsP2TROutput returns a boolean indicating if a output is a P2TR output A P2TR output looks like:
OP_1 OP_PUSH32 <schnorr_public_key>
func (*Output) IsP2WPKHV0Output ¶
IsP2WPKHV0Output returns a boolean indicating if a output is a P2WPKH output with witness program 0 A P2WPKH V0 output looks like:
OP_0 OP_DATA_20(20 byte hash) (where the leading OP_0 indicates witness program 0)
func (*Output) IsP2WSHV0Output ¶
IsP2WSHV0Output returns a boolean indicating if a output is a P2WSH output with witness program 0 A P2WSH V0 output looks like:
OP_0 (as witness program 0) OP_DATA_32(32 byte hash)
func (*Output) OutputStats ¶ added in v1.2.0
func (out *Output) OutputStats() *OutputStats
OutputStats returns a populated *OutputStats struct for an output
type OutputStats ¶ added in v1.2.0
type OutputStats struct { Type OutputType TypeString string Amount int64 OpReturnData []byte PubKeyStats []*PubKeyStats // P2MS outputs have pubkeys OpCodes []OpCode }
OutputStats contains stats about an output
type OutputType ¶
type OutputType int
OutputType defines the input type
const ( OutP2PK OutputType = iota + 1 OutP2PKH OutP2WPKH OutP2MS OutP2SH OutP2WSH OutP2TR OutOPRETURN OutUNKNOWN )
Possible types a output can be
func (OutputType) String ¶
func (ot OutputType) String() string
type ParsedBitcoinScript ¶
type ParsedBitcoinScript []ParsedOpCode
ParsedBitcoinScript is a parsed BitcoinScript
func (ParsedBitcoinScript) String ¶
func (pbs ParsedBitcoinScript) String() (s string)
type ParsedOpCode ¶
ParsedOpCode respresents a OP Code as a part of a parsed BitcoinScript. TODO: rename ito ParsedBitcoinScriptElement or something similar?
func (ParsedOpCode) GetSigHash ¶
func (poc ParsedOpCode) GetSigHash() (sighash byte)
GetSigHash returns the SIGHASH of a signature. If the passed ParsedOpCode does not push a Signature the returned SIGHASH is 0.
func (ParsedOpCode) IsCompressedECDSAPubKey ¶ added in v1.3.0
func (poc ParsedOpCode) IsCompressedECDSAPubKey() bool
IsCompressedECDSAPubKey checks a two byte slices if they could represent a compressed public key. <pubkey length> <|pubkey|>
func (ParsedOpCode) IsECDSAPubKey ¶ added in v1.3.0
func (poc ParsedOpCode) IsECDSAPubKey() bool
IsECDSAPubKey checks a two byte slices if they could represent a public key.
func (ParsedOpCode) IsECDSAPubKeyWithIsCompressed ¶ added in v1.3.0
func (poc ParsedOpCode) IsECDSAPubKeyWithIsCompressed() (isPubKey bool, isCompressed bool)
IsECDSAPubKeyWithIsCompressed checks a two byte slices if they could represent a pubkey and if that pubkey is compressed.
func (*ParsedOpCode) IsECDSASignature ¶ added in v1.2.0
func (poc *ParsedOpCode) IsECDSASignature(requireStrictDER bool) bool
IsECDSASignature checks a ParsedOpCode if it could represent a ECDSA signature.
func (*ParsedOpCode) IsECDSASignatureInStrictDER ¶ added in v1.2.0
func (poc *ParsedOpCode) IsECDSASignatureInStrictDER() bool
IsECDSASignatureInStrictDER checks a ParsedOpCode if it represents a DER-encoded signature.
func (*ParsedOpCode) IsSchnorrSignature ¶ added in v1.3.0
func (poc *ParsedOpCode) IsSchnorrSignature() bool
IsSchnorrSignature checks a ParsedOpCode if it could represent a Schnorr signature.
func (*ParsedOpCode) IsSignature ¶
func (poc *ParsedOpCode) IsSignature() bool
IsSignature checks a ParsedOpCode if it could represent a signature.
func (ParsedOpCode) IsUncompressedECDSAPubKey ¶ added in v1.3.0
func (poc ParsedOpCode) IsUncompressedECDSAPubKey() bool
IsUncompressedECDSAPubKey checks a two byte slices if they could represent a uncompressed public key. <pubkey length> <|pubkey|>
func (*ParsedOpCode) PubKeyStats ¶ added in v1.2.0
func (sigOpCode *ParsedOpCode) PubKeyStats() *PubKeyStats
PubKeyStats returns a populated *PubKeyStats struct for the PubKey The caller must make sure that the *ParsedOpCode is a pubkey.
func (*ParsedOpCode) SignatureStats ¶ added in v1.2.0
func (sigOpCode *ParsedOpCode) SignatureStats() *SignatureStats
SignatureStats returns a populated *SignatureStats struct for the signature The caller must make sure that the *ParsedOpCode is a signature.
func (*ParsedOpCode) String ¶
func (poc *ParsedOpCode) String() string
type PubKeyStats ¶ added in v1.2.0
type PubKeyStats struct {
IsCompressed bool
}
PubKeyStats contains stats about a PubKey
type SignatureStats ¶ added in v1.2.0
type SignatureStats struct { Length int IsECDSA bool IsStrictDER bool HasLowR bool HasLowS bool SigHash byte }
SignatureStats contains stats about a signature
type TestMultisigType ¶ added in v1.2.0
type TestMultisigType struct {
// contains filtered or unexported fields
}
TestMultisigType stores an expected value which is compared to a function result in a unit test
type TestOpReturnData ¶ added in v1.2.0
type TestOpReturnData struct {
// contains filtered or unexported fields
}
TestOpReturnData stores an expected value which is compared to a function result in a unit test
type TestTransaction ¶ added in v1.2.0
type TestTransaction struct { Note string RawTx string Size int VSize int Weight int CompressedPubKey []bool MultisigType []TestMultisigType InputTypes []InputType OutputTypes []OutputType OpReturnData []TestOpReturnData Locktime uint32 OutputSum int64 IsExplicitlySignalingRBF bool IsBIP69Compliant bool IsSpendingMultisig bool IsSpendingTaproot bool IsLNUniliteralClosing bool P2MSType []TestMultisigType }
TestTransaction is used in the unit tests to
func GetTestTransactions ¶ added in v1.2.0
func GetTestTransactions() []TestTransaction
GetTestTransactions returns an array of TestTransactions
type Tx ¶
type Tx struct { Hash []byte HashString string Version int32 Inputs []Input Outputs []Output Locktime uint32 // contains filtered or unexported fields }
Tx represents a bitcoin transaction as a struct.
func DeserializeRawTxBytes ¶
DeserializeRawTxBytes returns a wire.MsgTx for a hex decoded rawTx as byte slice. If the rawTx is can't be deserialized an error is returned.
func StringToTx ¶
StringToTx returns a wire.MsgTx for a raw transaction hex string
func (*Tx) FromWireMsgTx ¶
FromWireMsgTx populates a Tx struct with values from a wire.MsgTx.
func (*Tx) GetLocktime ¶
GetLocktime returns the locktime of the transaction
func (*Tx) GetNumInputs ¶
GetNumInputs returns the number of inputs the transaction has
func (*Tx) GetNumOutputs ¶
GetNumOutputs returns the number of outputs the transaction has
func (*Tx) GetOutputSum ¶
GetOutputSum returns the sum of all output values of the transaction in satoshi
func (*Tx) GetSizeWithWitness ¶
GetSizeWithWitness returns the transaction size **without** the witness stripped (size in bytes)
func (*Tx) GetSizeWithoutWitness ¶
GetSizeWithoutWitness returns the transaction size **with** the witness stripped (vsize in vbyte)
func (*Tx) HasOPReturnOutput ¶
HasOPReturnOutput returns a boolean indicating if the transaction has a OP_RETURN output
func (*Tx) HasP2MSOutput ¶
HasP2MSOutput returns a boolean indicating if the transaction has a P2MS output
func (*Tx) HasP2PKHOutput ¶
HasP2PKHOutput returns a boolean indicating if the transaction has a P2PKH output
func (*Tx) HasP2PKOutput ¶
HasP2PKOutput returns a boolean indicating if the transaction has a P2PK output
func (*Tx) HasP2SHOutput ¶
HasP2SHOutput returns a boolean indicating if the transaction has a P2SH output
func (*Tx) HasP2WPKHOutput ¶
HasP2WPKHOutput returns a boolean indicating if the transaction has a P2WPKH output
func (*Tx) HasP2WSHOutput ¶
HasP2WSHOutput returns a boolean indicating if the transaction has a P2WSH output
func (*Tx) IsBIP69Compliant ¶
IsBIP69Compliant returns a boolean indicating if the transaction is BIP 69 compliant
func (*Tx) IsCoinbase ¶
IsCoinbase returns a boolean indicating if a the transaction is a coinbase transaction.
func (*Tx) IsExplicitlyRBFSignaling ¶
IsExplicitlyRBFSignaling returns a boolean indicating if the transaction is explicitly signaling ReplaceByFee The transaction might still be implicitly able to be replaced by fee by e.g. a parent transaction signaling RBG
func (*Tx) IsSpendingMultisig ¶
IsSpendingMultisig returns a boolean indicating if the transaction spends a multisig input
func (*Tx) IsSpendingNativeSegWit ¶
IsSpendingNativeSegWit returns a boolean indicating if the transaction spends native SegWit
func (*Tx) IsSpendingNestedSegWit ¶
IsSpendingNestedSegWit returns a boolean indicating if the transaction spends nested SegWit
func (*Tx) IsSpendingSegWit ¶
IsSpendingSegWit returns a boolean indicating if a transaction spends SegWit inputs
func (*Tx) IsSpendingTaproot ¶ added in v1.3.2
IsSpendingTaproot returns a boolean indicating if the transaction spends a taproot input
func (*Tx) LocktimeStats ¶ added in v1.2.0
func (tx *Tx) LocktimeStats() *LocktimeStats
LocktimeStats returns a populated *LocktimeStats struct for the transaction
type TxStats ¶ added in v1.2.0
type TxStats struct { TxID []byte TxIDString string Version int32 Payments uint32 OutAmount int64 VSize int Size int IsCoinbase bool IsSpendingSegWit bool IsSpendingTaproot bool IsSpendingNativeSegWit bool IsSpendingNestedSegWit bool IsBIP69Compliant bool IsExplicitlyRBFSignaling bool Locktime *LocktimeStats InStats []*InputStats OutStats []*OutputStats }
TxStats contains stats about a transaction.