不需要遍历所有的block,我们的确可以通过遍历block知道每个地址的余额,但是检查不需要这么复杂。
比特币基础知识比特币交易构成(一)这里有比特币交易的介绍。需要注意的是,交易并不是说从你的余额中打钱给别人,而是从每一笔你收到的钱中,凑出一个交易。比如你有1笔1比特币收入A和1笔2比特币的收入B,转给我2.5比特币的交易是 A+B => 2.5(给我) + 0.5(找零给你)。
0.8版本以后的比特币客户端会在每次接收到新block时更新会所有未花掉的output,检查一个交易是否合法只需要看这个交易的所有input是否在这个未花费的output表中。之前的版本需要检查每个input所来自的交易是否在某个block中(只要是存在于block中的就一定是合法的),找到所在的block就可以了。
假设比特币是基于每个地址的余额验证交易,这个也可以用类似的方式优化,即每次都更新相应地址的余额,维护一个地址与余额的表,也不需要遍历所有的block了。