mirror of
https://github.com/LBRYFoundation/lbcd.git
synced 2025-08-23 17:47:24 +00:00
rpcserver: add parity with bitcoind for validateaddress
Updated the rpcserver handler for validateaddress JSON-RPC command to have parity with the bitcoind 0.20.0 interface. The new fields included are - isscript, iswitness, witness_version, and witness_program. The scriptPubKey field has been left out since it requires wallet access. This update has no impact on the rpcclient.ValidateAddress method, which uses the btcjson.ValidateAddressWalletResult type for modelling the response from bitcoind.
This commit is contained in:
parent
36d4ae08e8
commit
7145eef75b
3 changed files with 47 additions and 4 deletions
|
@ -671,9 +671,17 @@ type TxRawDecodeResult struct {
|
||||||
|
|
||||||
// ValidateAddressChainResult models the data returned by the chain server
|
// ValidateAddressChainResult models the data returned by the chain server
|
||||||
// validateaddress command.
|
// validateaddress command.
|
||||||
|
//
|
||||||
|
// Compared to the Bitcoin Core version, this struct lacks the scriptPubKey
|
||||||
|
// field since it requires wallet access, which is outside the scope of btcd.
|
||||||
|
// Ref: https://bitcoincore.org/en/doc/0.20.0/rpc/util/validateaddress/
|
||||||
type ValidateAddressChainResult struct {
|
type ValidateAddressChainResult struct {
|
||||||
IsValid bool `json:"isvalid"`
|
IsValid bool `json:"isvalid"`
|
||||||
Address string `json:"address,omitempty"`
|
Address string `json:"address,omitempty"`
|
||||||
|
IsScript *bool `json:"isscript,omitempty"`
|
||||||
|
IsWitness *bool `json:"iswitness,omitempty"`
|
||||||
|
WitnessVersion *int32 `json:"witness_version,omitempty"`
|
||||||
|
WitnessProgram *string `json:"witness_program,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// EstimateSmartFeeResult models the data returned buy the chain server
|
// EstimateSmartFeeResult models the data returned buy the chain server
|
||||||
|
|
31
rpcserver.go
31
rpcserver.go
|
@ -3493,6 +3493,37 @@ func handleValidateAddress(s *rpcServer, cmd interface{}, closeChan <-chan struc
|
||||||
return result, nil
|
return result, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
switch addr := addr.(type) {
|
||||||
|
case *btcutil.AddressPubKeyHash:
|
||||||
|
result.IsScript = btcjson.Bool(false)
|
||||||
|
result.IsWitness = btcjson.Bool(false)
|
||||||
|
|
||||||
|
case *btcutil.AddressScriptHash:
|
||||||
|
result.IsScript = btcjson.Bool(true)
|
||||||
|
result.IsWitness = btcjson.Bool(false)
|
||||||
|
|
||||||
|
case *btcutil.AddressPubKey:
|
||||||
|
result.IsScript = btcjson.Bool(false)
|
||||||
|
result.IsWitness = btcjson.Bool(false)
|
||||||
|
|
||||||
|
case *btcutil.AddressWitnessPubKeyHash:
|
||||||
|
result.IsScript = btcjson.Bool(false)
|
||||||
|
result.IsWitness = btcjson.Bool(true)
|
||||||
|
result.WitnessVersion = btcjson.Int32(int32(addr.WitnessVersion()))
|
||||||
|
result.WitnessProgram = btcjson.String(hex.EncodeToString(addr.WitnessProgram()))
|
||||||
|
|
||||||
|
case *btcutil.AddressWitnessScriptHash:
|
||||||
|
result.IsScript = btcjson.Bool(true)
|
||||||
|
result.IsWitness = btcjson.Bool(true)
|
||||||
|
result.WitnessVersion = btcjson.Int32(int32(addr.WitnessVersion()))
|
||||||
|
result.WitnessProgram = btcjson.String(hex.EncodeToString(addr.WitnessProgram()))
|
||||||
|
|
||||||
|
default:
|
||||||
|
// Handle the case when a new Address is supported by btcutil, but none
|
||||||
|
// of the cases were matched in the switch block. The current behaviour
|
||||||
|
// is to do nothing, and only populate the Address and IsValid fields.
|
||||||
|
}
|
||||||
|
|
||||||
result.Address = addr.EncodeAddress()
|
result.Address = addr.EncodeAddress()
|
||||||
result.IsValid = true
|
result.IsValid = true
|
||||||
|
|
||||||
|
|
|
@ -577,6 +577,10 @@ var helpDescsEnUS = map[string]string{
|
||||||
// ValidateAddressResult help.
|
// ValidateAddressResult help.
|
||||||
"validateaddresschainresult-isvalid": "Whether or not the address is valid",
|
"validateaddresschainresult-isvalid": "Whether or not the address is valid",
|
||||||
"validateaddresschainresult-address": "The bitcoin address (only when isvalid is true)",
|
"validateaddresschainresult-address": "The bitcoin address (only when isvalid is true)",
|
||||||
|
"validateaddresschainresult-isscript": "If the key is a script",
|
||||||
|
"validateaddresschainresult-iswitness": "If the address is a witness address",
|
||||||
|
"validateaddresschainresult-witness_version": "The version number of the witness program",
|
||||||
|
"validateaddresschainresult-witness_program": "The hex value of the witness program",
|
||||||
|
|
||||||
// ValidateAddressCmd help.
|
// ValidateAddressCmd help.
|
||||||
"validateaddress--synopsis": "Verify an address is valid.",
|
"validateaddress--synopsis": "Verify an address is valid.",
|
||||||
|
|
Loading…
Add table
Reference in a new issue