A mobile connects to a node using rpc.
Nodes don't connect each other using RPC. RPC is for node owners, and usually has a long password.
The mobile then asks the node, to give him a set of transactions for a set of public keys.
Not exactly. First of all, block headers have a part that's named "Merkle root" that allows clients to check if a transaction was in the block. In theory, as described in the whitepaper, SPV nodes can keep block headers, and ask other nodes for Merkle proof of their transaction. In practice, it's more complicated. Currently 99% of the SPV nodes use BIP 37. Besides, better SPV methods such as BIP 157 and Neutrino are being researched.
Also, when the node receives a request, it needs to scan the blockchain all over again, to get the transaction history?
Nodes do need to scan the whole blockchain for a transaction if they don't know its block height, unless they use txindex=1
, etc... If they do, accessing it is trivial.
Also, if I give the node the public key and not a transaction then it would need to scan the whole chain? Because light wallets give public keys to the full node and not transactions to my understanding
– Kyle Graham Jun 18 '18 at 13:50gettxout
. Here's what they use. Furthermore, SPVs never hand out the public keys, that'd damage privacy. – MCCCS Jun 18 '18 at 14:05merkleblock
, the nodes send [all transactions in those blocks]'s hashes. Filteradd tells the nodes which pubkeys the SPV is interested in. If the block didn't pass the bloom filter, the nodes can omit tx hashes and save data. May give some more details: https://bitcoin.stackexchange.com/a/11721/38618 – MCCCS Jun 18 '18 at 14:50