Can I process incoming transfers using only the daemon RPC and my private view key (so without a wallet)? Or how can I decrypt
vout from the
get_block output JSON?
The daemon (
monerod) has no wallet functionality, it's for working with the blockchain. To determine incoming transactions for a given wallet (e.g. viewable and spendable using your wallet keys), you would need to scan the blockchain for outputs owned by your wallet and check their spent status.
A full scan (in pseudo code) looks something like follows (ignoring subaddresses):
unspent =  # array which will hold tuples of (tx, output) a = hex2bin(v) # my private view key A = hex2bin(V) # my public view key b = hex2bin(s) # my private spend key B = hex2bin(S) # my public spend key for each block in blockchain: for each tx in block: R = get_tx_pubkey(tx) for each output, i in tx: if is_mine(output, R, i) and not is_spent(output, R, i): unspent.append((tx, output)) is_mine(out, R, i): P = Hs(8aR||i)G + B return P == out is_spent(out, R, i): x = Hs(8aR||i) + b I = xHp(xG) return has_key_image(blockchain, I) get_tx_pubkey(tx): return key from tx.extra
Given the blockchain is hundreds of thousands of blocks each with N transactions, a full scan is pretty intensive.
Also, you cannot perform the above with just the daemon RPC method get_block, because other than the miner tx, get_block will only get you the tx hashes - not the actual tx data. Therefore you'd also need to use get_transactions. And of course, calling these JSON methods repeatedly over the whole blockchain would be very slow.
If you are looking to develop your own wallet implementation, there are the necessary binary methods, which remove the JSON parsing overhead, but really, this is why there is a wallet RPC interface -
monero-wallet-rpc. That handles all the lower-level stuff and exposes a useful RPC interface for higher-level wallet functionality.
If you just want to process a single blocks transactions, with only the daemon JSON RPC interface and your wallet keys, you can use get_block (to get each tx hash) and get_transactions (to get the tx pubkey and outputs for each tx). Then you'd need to implement a method like
is_mine above to check if you owned a given output and a method like
is_spent above to check the spent status (and for
has_key_image you could make use of is_key_image_spent).