Thanks.
No, the witnesses are not part of the block data. Witnesses are part of a transaction's data. If a transaction has a witness, then calling getrawtransaction will have a txinwitness field for each input which has the witness data. However if you get the raw block (just the hex), then you will get the witness data as it will return the block with the transactions in witness serialization. The same will happen with getrawtransaction.
What do you mean by "get the raw block"? At least up to version 0.11.2, JSON-RPC API does not include
getrawblock to return block hash, but rather just
getblock which returns the block's JSON. So where did you mean that I can get the "raw" block (just hex)?
I assume that when you're referring transaction - you mean with or without the "verbose" parameter, where 0 will just give the raw transaction (hex), and 1 will give the transaction JSON. So according to you verbose=0 will give the hex together with the witness data, and verbose=1 will give the transaction data together with
txinwitness for each witness-using input, Correct?
Another question in the subject - will full nodes save witnesses data, and will witnesses be relayed?
As I understand it, full nodes will keep saving the signatures in the blockchain DB, only that now they may be saved as witnesses and not as an integral part of the inputs' scriptSig.
About relay - I understand that some clients (e.g. SPV clients) will be able to get transactions without the witness data (using some flag?) to allow thinner bandwidth clients to validate existence of transaction (as they do not care about actually validating their unlocking scripts, only counting on the fact they're confirmed). Did I get it right?