这篇主要记录自己对比特币的理解,内容都来自网络。
1. 原理
1.1 账本(分布式)
比特币的存储靠的是账本,全球人手一份,即所谓的分布式账本。账本说白了就是区块链(block chain),就是每一个比特币从产生到流通的过程中产生的每一笔交易,都记录在上面,形成一个长长的链条。账本的每一页 = 1个区块block,整个账本就是1个首尾相连的chain。
1.2 交易过程
用户A要转10个btc(bit coin)给B,这里涉及几个步骤:
- 身份确认:这里用到了非对称加密。A用自己的私钥加密,B就能确定就是A发起的交易;A再用B的公钥二次加密,保证只有B能看到内容。
- 交易确认:A把交易内容广播给所有矿工(下面会讲矿工的作用),矿工开始计算:1)遍历账本,确保A的账户里有这笔钱。2)以算力+运气来抽奖,一旦抽中,就有资格把这笔交易加入账本中。这时就可以向全世界广播,说这10分钟的奖被我抽中了,你们都别折腾了。大家一看,他的计算结果正确,果然被他抽中了,也都认可。于是纷纷把这笔交易加到账本里,这样保证了:1)A确实有10个btc。2)这笔交易被写在了全世界的每个账本里,永不可被撤消。
1.3 中奖(挖矿)的过程
很多地方都叫挖矿,不过叫中奖可能更准确一点。为什么呢?先说一下为什么有矿工?
你把交易广播出去,别人为什么要帮你确认交易呢?当然要有利益驱动。中本聪的设定是,每笔交易奖励矿工50btc,每4年奖励减半,从50到25、再到12.5。直到2140年达到2100万个总量上限后,没有奖励,矿工只依靠对每笔交易收取手续费赚取利润。
所以,一开始矿工特别多,越到后面越难、算力不足的矿工入不敷出,就会自然退出。
挖矿的具体过程是:
- 矿工把上一个交易记录+这次收到的交易+1个随机数字,合在一起,用hash算法sha-256计算对应的hash值。
- 如果hash值满足某个苛刻的条件(比如前10位都是0、或者前15位都是1之类的,注意这个难度可以轻松的调整),那么这个矿工就可以认为自己挖到(中奖)了,并且向全世界公布结果。
- 其他矿工一看,这10分钟的奖已经被人中了,赶紧抢下个10分钟的。
- 由于hash算法不可逆,并且微小的变化就能导致结果的巨大扰动。所以要找到满足条件的记录,只能靠1位1位的变化那个随机数字,然后计算hash值是否满足。理论上算力越大越容易中奖,但还要靠些运气,因此是算力+运气。
- 并且系统会自动调整难度,保证以目前全球的算力,大约每10分钟,才能算出1个幸运数字。这样保证了btc的产生速度。
2. 优点和潜在的问题
比特币的优点很多,但要大规模应用,还是会有一些问题的。
2.1 优点:去中心化、极低的交易费用、安全匿名等
优点特别多,不然也不会这么火。
- 分布式、去中心化:这决定了比特币不需要央行、国家信用、或者黄金储备作为信用基础。
- 所有交易可追溯:从根本上解决了欺诈、金融诈骗等问题
- 极低的交易费用:再也没有异地付款的手续费、汇率结算的风险等问题
- 安全匿名:每个交易都可以使用1个新的地址,所以很难追踪具体的交易者、官方也无法冻结指定的账户
2.2 潜在的问题
问题当然也是有的:
- 计算和存储量:2009-2011年,3年时间,账本大约增长到350M,保存了13万个block。如果全面应用,账本会迅速增长到GB、TB、PB的级别。这样量级的文件,传输几乎不现实。文件不完整,计算也困难。如果只有少数几家数据中心有能力存储,谈何分布式、P2P
- 安全性:其实也不是完全匿名的。因为账本本身是公开的,很容易查到每个账户的交易信息,并画出货币流向图。突破某个结点、再向上、下游追击,就能全部扯出来。当然,对于政府监管部门而言,也不希望安全性太高
- 投机性:目前的btc波动非常大,很多早期买btc或挖矿获得财富自由的案例。这使得btc更像赌玉石一样的投机商品,而不是交易货币。
对于第1个问题, 我能想到的方案是:
每当账本到达1个量级(比如1GB)、或者某个时点(比如每10年),就做一次归档。对那1时刻的账本做1次snapshot,以后的计算,都以这个snapshot为初始值。由于挖矿的巨大计算量,篡改的成本是惊人的。所以没有必要所有节点都保存包括创世block在内的所有记录,归档的记录分布在某几个数据中心就好,这样就能保证分布式账本的全球性。
对于其他2个问题,还没有深入的思考,欢迎补充。