btcsuite / btcd

An alternative full node bitcoin implementation written in Go (golang)
https://github.com/btcsuite/btcd/blob/master/README.md
ISC License
6.27k stars 2.37k forks source link

rpcclient: client.GetBlockVerboseTx does not work with bitcoind #1088

Closed mikebocian closed 4 years ago

mikebocian commented 6 years ago
func main() {
    // Connect to local bitcoin core RPC server using HTTP POST mode.
    connCfg := &rpcclient.ConnConfig{
        Host:         "192.168.1.100:8332",
        User:         "bitcoinrpc",
        Pass:         "somehardhash",
        HTTPPostMode: true, // Bitcoin core only supports HTTP POST mode
        DisableTLS:   true, // Bitcoin core does not provide TLS by default
    }
    log.SetFlags(log.LstdFlags | log.Lshortfile)

    var err error
    // Notice the notification parameter is nil since notifications are
    // not supported in HTTP POST mode.
    client, err := rpcclient.New(connCfg, nil)
    if err != nil {
        log.Fatal(err)
    }
    defer client.Shutdown()

    //scanDeep(client, 1)

    // Get the current block count.
    blockCount, err := client.GetBlockCount()
    if err != nil {
        log.Fatal(err)
    }
    log.Printf("Block count: %d", blockCount)

    var hash chainhash.Hash
    chainhash.Decode(&hash, "0000000000000000015ed7a2934f8ecb39eda15459376fff64284e1a87688d5d")

    result, e := client.GetBlockVerboseTx(&hash)
    if e != nil {
        log.Fatal(e)
    }
}

This ends with:

2017/12/04 17:49:44 bitcoind-client.go:47: Block count: 497578
2017/12/04 17:49:44 bitcoind-client.go:54: -1: getblock "blockhash" ( verbosity ) 

If verbosity is 0, returns a string that is serialized, hex-encoded data for block 'hash'.
If verbosity is 1, returns an Object with information about block <hash>.
If verbosity is 2, returns an Object with information about block <hash> and information about each transaction. 

Arguments:
1. "blockhash"          (string, required) The block hash
2. verbosity              (numeric, optional, default=1) 0 for hex encoded data, 1 for a json object, and 2 for json object with transaction data

Result (for verbosity = 0):
"data"             (string) A string that is serialized, hex-encoded data for block 'hash'.

Result (for verbosity = 1):
{
  "hash" : "hash",     (string) the block hash (same as provided)
  "confirmations" : n,   (numeric) The number of confirmations, or -1 if the block is not on the main chain
  "size" : n,            (numeric) The block size
  "strippedsize" : n,    (numeric) The block size excluding witness data
  "weight" : n           (numeric) The block weight as defined in BIP 141
  "height" : n,          (numeric) The block height or index
  "version" : n,         (numeric) The block version
  "versionHex" : "00000000", (string) The block version formatted in hexadecimal
  "merkleroot" : "xxxx", (string) The merkle root
  "tx" : [               (array of string) The transaction ids
     "transactionid"     (string) The transaction id
     ,...
  ],
  "time" : ttt,          (numeric) The block time in seconds since epoch (Jan 1 1970 GMT)
  "mediantime" : ttt,    (numeric) The median block time in seconds since epoch (Jan 1 1970 GMT)
  "nonce" : n,           (numeric) The nonce
  "bits" : "1d00ffff", (string) The bits
  "difficulty" : x.xxx,  (numeric) The difficulty
  "chainwork" : "xxxx",  (string) Expected number of hashes required to produce the chain up to this block (in hex)
  "previousblockhash" : "hash",  (string) The hash of the previous block
  "nextblockhash" : "hash"       (string) The hash of the next block
}

Result (for verbosity = 2):
{
  ...,                     Same output as verbosity = 1.
  "tx" : [               (array of Objects) The transactions in the format of the getrawtransaction RPC. Different from verbosity = 1 "tx" result.
         ,...
  ],
  ,...                     Same output as verbosity = 1.
}

Examples:
> bitcoin-cli getblock "00000000c937983704a73af28acdec37b049d214adbda81d7e2a3dd146f6ed09"
> curl --user myusername --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "getblock", "params": ["00000000c937983704a73af28acdec37b049d214adbda81d7e2a3dd146f6ed09"] }' -H 'content-type: text/plain;' http://127.0.0.1:8332/

Process finished with exit code 0
mikebocian commented 6 years ago

The generated rpc command looks like this: {"jsonrpc":"1.0","method":"getblock","params":["0000000000000000015ed7a2934f8ecb39eda15459376fff64284e1a87688d5d",true,true],"id":1}

and it should look like: {"jsonrpc":"1.0","method":"getblock","params":["0000000000000000015ed7a2934f8ecb39eda15459376fff64284e1a87688d5d",2],"id":1}

jcvernaleo commented 4 years ago

Should be done based on above.