比特币主要使用椭圆曲线数位签章演算法( ECDSA),这个算法有两个至关重要的特性:第一,只要知道私钥,就可以算出相应的公钥;第二,你用私钥签过名的东西,可以用公钥算一下是不是你签的。
其实,比特币在交易过程中没有钱包,只有交易账单,整个比特币交易就是一大堆交易账单。比如,账单1,从A转到B,转了X比特币;账单2,从B转到C和D,转了X比特币;账单3,从C转到E,转了X比特币…只要下载客户端,就能接收到从比特币成立那天开始的所有账单。因此,只要把所有账单都下载,自然就能知道各账户上应该剩多少钱。每张比特币交易账单都是一段数据,签完名后会发送到全网。下面把数据结构逆向成易懂的中文解释,具体如下:01
FROM(谁发送的)
它包括两部分:一是 Previous Tx,也就是说,花的任何一笔钱都应有人转给你,需要出示账单的ID;二是 Script Si,就是把单子用你的私钥做Hash(哈希算法),只有你能做这个Hash02
TO(谁接受的)
这包括两部分:一是Vae,即要发多少;二是 Script Pub Key,即对方的公钥,比特币账户就是一段公钥。
签完单子后,开始往全网发送。怎么发呢?比特币通信很简单,可以类比成iRC频道。跟普通的IRC不同的是,其客户端是一台IRC服务器,启动客户端的时候,会接收到周围的有公网P的客户端地址,也就是“服务器”列表。此列表会不断地刷新,都是其他比特币用户,你在这个IRC“喊”句话,周围的人都会听到,进而扩散到全世界。
把签单发送到全世界后,收到单子的客户端就会校验这个单子是否正确。比如,校验你的签名,是不是你发的;校验你是否有那么多钱。计算后如果发现这笔交易没问题,基本上就算转账成功。现在,即使对方接受了比特币,但要想花,也得有那个地址(公钥)对应的私钥如此往复。这就是比特币的交易原理。