本文我们从比特币系统来讲解区块链是怎么运行的,比特币系统我们可以建立自己的账号,可以交易,也可以挖矿,并且比特币也支持几种简单的合约,首先我们要理解区块链是一个分布式的系统,他是去中心化的,比特币系统可以自动运维,每个人都可以使用,而且记账是公开的,比特币系统可以自动保证数据的准确性。。。
那么比特币系统是怎么运行的呢? 首先比特币是一个系统,那么他就可以运行在各种计算器上,他就可以对外提供服务,例如对外提供api与外包的程序进行交互信息,与交易所进行信息转换等等。。。
1.p2p去中心化网络
比特币是一个全世界的开放网络,只要你有服务器,就能加入这个网络,成为一个节点。每个节点都包含了整个区块链(目前大概 100多 GB),并且节点之间时刻不停地在同步信息。
当你发生了一笔支付,你所在的节点就会把这笔交易告诉另一个节点,直至传遍整个网络。矿工从网上收集各种新发生的交易,将它们打包写入区块链。一旦写入成功, 矿工所在节点的区块链,就成为最新版本,其他节点都会来复制新增的区块,保证全网的区块链都是一致的。
最后,你所在的节点也拿到了最新的区块链,从而得知你早先的那笔交易,已经写在里面了,至此交易确认成功,比特币就是通过这种点对点的机制保证了数据可以同步一致的,也就是说所有信息的交互是由p2p网络同步完成的
2.共识机制
对于区块链来说,它没有一个中心主体在负责体系的运转,账本怎么记?什么账本才是大家确认的?诸如此类都需要由一个去中心化的机制来达成共识。
对于一个公链来说,它是否足够安全,是否更有效率,共识机制是关键。共识机制设计好了,一是能够保证网络的安全,保证记账的安全,免于遭受恶意攻击;二是能够让社区很好的自运转,特别是在如何激励方面,是否有好的设计是自治社区能否进入良性循环的关键。
最后,越来越多的共识算法,除了保证安全之外,也会考虑到效率和公平。我们来看看,不同的共识算法各自的优劣之处,p2p网络保证了数据的传输同步,共识保证了数据的正确安全
3.数据安全
首先,理解比特币,必须理解非对称加密。
你可能听说过这个词,所谓非对称加密,其实很简单,就是加密和解密需要两把钥匙:一把公钥和一把私钥。
公钥是公开的,任何人都可以获取。私钥是保密的,只有拥有者才能使用。他人使用你的公钥加密信息,然后发送给你,你用私钥解密,取出信息。反过来,你也可以用私钥加密信息,别人用你的公钥解开,从而证明这个信息确实是你发出的,且未被篡改,这叫做数字签名。
现在请设想,如果公钥加密的不是普通的信息,而是加密了一笔钱,发送给你,这会怎样?
首先,你能解开加密包,取出里面的钱,因为私钥在你手里。其次,别人偷不走这笔钱,因为他们没有你的私钥。因此,支付可以成功。
这就是比特币(以及其他数字货币)的原理:非对称加密保证了支付的可靠性。
由于支付的钱必须通过私钥取出,所以你是谁并不重要,重要的是谁拥有私钥。只有拥有了私钥,才能取出支付给你的钱。
4.未花费交易
比特币中比特币交未花费交易,除了创世块中初始化的比特币其他的所有比特币都有输入的,因为比特币的拥有者持有的比特币是用自己的私钥加密的,所以花费之前需要用自己的私钥解密,比特币拥有者拥有的币是通过记录的形式保存的,没有中心化交易系统中类似额度的概率,我们看一下一笔交易的流转实例图:
5.数据储存
比特币程序将数据存在了4个地方。
-
blocks/blk*.dat的文件中存储了实际的块数据,这些数据以网络格式存储。它们仅用于重新扫描钱包中丢失的交易,将这些交易重新组织到链的不同部分,并将数据块提供给其他正在同步数据的节点。 -
blocks/index/*是一个levelDB数据库,存储着目前已知块的元数据,这些元数据记录所有已知的块以及它们存储在磁盘上的位置。没有这些文件,查找一个块将是非常慢的。 -
chainstate/*是一个levelDB数据库,以紧凑的形式存储所有当前未花费的交易以及它们的元数据。这里的数据对于验证新传入的块和交易是必要的。在理论上,这些数据可以从块数据中重建,但是这需要很长时间。没有这些数据也可以对数据进行验证,但是需要现有块数据进行扫面,这无疑是非常慢的。 -
blocks/rev*.dat中包含了“撤销”数据,可以将区块视为链的“补丁”(它们消耗一些未花费的输出并生成新的输出),那么这些撤销数据将是反向补丁。如果需要回滚链,这些数据将是必须的。
比特币程序从网络中接受数据后,会将数据以.dat的形式转储到磁盘上。
一个块文件大约为128MB。每个块文件会有一个对应的撤销文件,比如文件blocks/blk1234.dat和blocks/recv1234.dat对应。
比特币网络的所有数据所有节点都是相同的,只有经过确认的数据才会保存在数据文件中
交易流程
A向B发送了一笔交易,首先这笔交易被加密发送到网络上,同步到其他节点中,也就是会被同步到很多节点的内存中,等待打包,节点对这些数据进行校验打包,具有打包权力的矿工会得到挖矿奖励,然后打包数据同步到区块链节点中,这样就完成了一笔交易,也就是区块链系统完成了一词这个流程的运行
转载于:https://my.oschina.net/zaxb/blog/1827604