Enable txindex=1 as default #37
1 changed files with 34 additions and 12 deletions
|
@ -498,7 +498,19 @@ func isNullDataScript(scriptVersion uint16, script []byte) bool {
|
||||||
|
|
||||||
// scriptType returns the type of the script being inspected from the known
|
// scriptType returns the type of the script being inspected from the known
|
||||||
// standard types.
|
// standard types.
|
||||||
func typeOfScript(pops []parsedOpcode) ScriptClass {
|
//
|
||||||
|
// NOTE: All scripts that are not version 0 are currently considered non
|
||||||
|
// standard.
|
||||||
|
func typeOfScript(scriptVersion uint16, script []byte) ScriptClass {
|
||||||
|
if scriptVersion != 0 {
|
||||||
|
return NonStandardTy
|
||||||
|
}
|
||||||
|
|
||||||
|
pops, err := parseScript(script)
|
||||||
|
if err != nil {
|
||||||
|
return NonStandardTy
|
||||||
|
}
|
||||||
|
|
||||||
if isPubkey(pops) {
|
if isPubkey(pops) {
|
||||||
return PubKeyTy
|
return PubKeyTy
|
||||||
} else if isPubkeyHash(pops) {
|
} else if isPubkeyHash(pops) {
|
||||||
|
@ -521,11 +533,8 @@ func typeOfScript(pops []parsedOpcode) ScriptClass {
|
||||||
//
|
//
|
||||||
// NonStandardTy will be returned when the script does not parse.
|
// NonStandardTy will be returned when the script does not parse.
|
||||||
func GetScriptClass(script []byte) ScriptClass {
|
func GetScriptClass(script []byte) ScriptClass {
|
||||||
pops, err := parseScript(script)
|
const scriptVersion = 0
|
||||||
if err != nil {
|
return typeOfScript(scriptVersion, script)
|
||||||
return NonStandardTy
|
|
||||||
}
|
|
||||||
return typeOfScript(pops)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewScriptClass returns the ScriptClass corresponding to the string name
|
// NewScriptClass returns the ScriptClass corresponding to the string name
|
||||||
|
@ -608,9 +617,17 @@ type ScriptInfo struct {
|
||||||
// pair. It will error if the pair is in someway invalid such that they can not
|
// pair. It will error if the pair is in someway invalid such that they can not
|
||||||
// be analysed, i.e. if they do not parse or the pkScript is not a push-only
|
// be analysed, i.e. if they do not parse or the pkScript is not a push-only
|
||||||
// script
|
// script
|
||||||
|
//
|
||||||
|
// NOTE: This function is only valid for version 0 scripts. Since the function
|
||||||
|
// does not accept a script version, the results are undefined for other script
|
||||||
|
// versions.
|
||||||
|
//
|
||||||
|
// DEPRECATED. This will be removed in the next major version bump.
|
||||||
func CalcScriptInfo(sigScript, pkScript []byte, witness wire.TxWitness,
|
func CalcScriptInfo(sigScript, pkScript []byte, witness wire.TxWitness,
|
||||||
bip16, segwit bool) (*ScriptInfo, error) {
|
bip16, segwit bool) (*ScriptInfo, error) {
|
||||||
|
|
||||||
|
const scriptVersion = 0
|
||||||
|
|
||||||
sigPops, err := parseScript(sigScript)
|
sigPops, err := parseScript(sigScript)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -621,9 +638,8 @@ func CalcScriptInfo(sigScript, pkScript []byte, witness wire.TxWitness,
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Push only sigScript makes little sense.
|
|
||||||
si := new(ScriptInfo)
|
si := new(ScriptInfo)
|
||||||
si.PkScriptClass = typeOfScript(pkPops)
|
si.PkScriptClass = typeOfScript(scriptVersion, pkScript)
|
||||||
|
|
||||||
// Can't have a signature script that doesn't just push data.
|
// Can't have a signature script that doesn't just push data.
|
||||||
if !isPushOnly(sigPops) {
|
if !isPushOnly(sigPops) {
|
||||||
|
@ -644,7 +660,8 @@ func CalcScriptInfo(sigScript, pkScript []byte, witness wire.TxWitness,
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
shInputs := expectedInputs(shPops, typeOfScript(shPops))
|
redeemClass := typeOfScript(scriptVersion, script)
|
||||||
|
shInputs := expectedInputs(shPops, redeemClass)
|
||||||
if shInputs == -1 {
|
if shInputs == -1 {
|
||||||
si.ExpectedInputs = -1
|
si.ExpectedInputs = -1
|
||||||
} else {
|
} else {
|
||||||
|
@ -671,7 +688,9 @@ func CalcScriptInfo(sigScript, pkScript []byte, witness wire.TxWitness,
|
||||||
// Extract the pushed witness program from the sigScript so we
|
// Extract the pushed witness program from the sigScript so we
|
||||||
// can determine the number of expected inputs.
|
// can determine the number of expected inputs.
|
||||||
pkPops, _ := parseScript(sigScript[1:])
|
pkPops, _ := parseScript(sigScript[1:])
|
||||||
shInputs := expectedInputs(pkPops, typeOfScript(pkPops))
|
|
||||||
|
redeemClass := typeOfScript(scriptVersion, sigScript[1:])
|
||||||
|
shInputs := expectedInputs(pkPops, redeemClass)
|
||||||
if shInputs == -1 {
|
if shInputs == -1 {
|
||||||
si.ExpectedInputs = -1
|
si.ExpectedInputs = -1
|
||||||
} else {
|
} else {
|
||||||
|
@ -691,7 +710,8 @@ func CalcScriptInfo(sigScript, pkScript []byte, witness wire.TxWitness,
|
||||||
witnessScript := witness[len(witness)-1]
|
witnessScript := witness[len(witness)-1]
|
||||||
pops, _ := parseScript(witnessScript)
|
pops, _ := parseScript(witnessScript)
|
||||||
|
|
||||||
shInputs := expectedInputs(pops, typeOfScript(pops))
|
redeemClass := typeOfScript(scriptVersion, witnessScript)
|
||||||
|
shInputs := expectedInputs(pops, redeemClass)
|
||||||
if shInputs == -1 {
|
if shInputs == -1 {
|
||||||
si.ExpectedInputs = -1
|
si.ExpectedInputs = -1
|
||||||
} else {
|
} else {
|
||||||
|
@ -888,7 +908,9 @@ func ExtractPkScriptAddrs(pkScript []byte, chainParams *chaincfg.Params) (Script
|
||||||
return NonStandardTy, nil, 0, err
|
return NonStandardTy, nil, 0, err
|
||||||
}
|
}
|
||||||
|
|
||||||
scriptClass := typeOfScript(pops)
|
const scriptVersion = 0
|
||||||
|
scriptClass := typeOfScript(scriptVersion, pkScript)
|
||||||
|
|
||||||
switch scriptClass {
|
switch scriptClass {
|
||||||
case PubKeyHashTy:
|
case PubKeyHashTy:
|
||||||
// A pay-to-pubkey-hash script is of the form:
|
// A pay-to-pubkey-hash script is of the form:
|
||||||
|
|
Loading…
Reference in a new issue