静说比特币
比特币作为一个2009年诞生的点对点的支付系统,在几乎无人运维的情况下运转到了如今,很多人为之赋予了各种意义。现在我们尝试着剥离资本的面纱,看看这个元祖虚拟币是怎么工作的。
1.数据结构
在这里,我们尝试从两方面来了解比特币,区块链以及UTXO(Unspent Transaction Output,未花费的交易输出)
1.1 区块链
在比特币中,存储数据的数据结构是区块链,顾名思义就是区块形成的链,区块中的数据结构大致如下图所示
数据名称 | 数据说明 |
---|---|
Time | 当前区块生成的时间 |
Nonce | 随机数,用于工作量证明 |
PreviousHash | 前一个区块的哈希 |
transactions | 区块中包含的交易列表 |
通过PreviousHash,每一个区块都和上一个区块关联起来,随着时间的流逝就创建出了一个持续增长的区块来了,它不断地更新,从而能够代表比特币账本的最新状态。
1.2 UTXO
比特币系统中没有账号,只有UTXO。每个UTXO都有一个面值和所有者(这就是大家喜闻乐见的地址)。
每一笔交易包含一个或多个输入和一个或多个输出。每个输出包含一个新的加入到状态中的UTXO。
这样讲可能难以理解,简单的说可以把UTXO理解成交易流水。在比特币系统中没有用户,只有每个地址相关的流水,当某个地址需要交易时就开始从当前地址相关的UTXO的输出中开始凑,直到输入凑够了需要交易的数量,如果有多,没关系,从输出中找零。当某一笔流水已经被用过了,就从自己的账户中划掉。
举个例子:小张的户头上有4笔UTXO,输出分别为2块,3块,5块,10块。现在小张想向小李转16块钱,于是小张就开始凑输入,发现需要3+5+10=18就能超过16块钱。于是小张发起了交易,一个新的UTXO被生成,这个输入分别是3块,5块和10块,输出是小张的地址2块,小李的地址16块。同时小张地址上本身的3块,5块,10块的UTXO被消耗掉了。
2.工作量证明与挖矿
在上文的数据结构中提到了Nonce,这实际上是一个“无用”的随机数。这个随机数是由SHA-256计算的。这个随机数的特点就是非常难以计算,但是很容易验算。要算出这个随机数,只能通过反复的尝试,简单的说就是
for(i := 0 ; i < MAX ; i ++){
if check(i) {
return i
} else {
continue
}
}
能算出来这个Nonce,就能代表该节点完成了工作量的证明。这个工作量证明解决了“谁是大多数的问题”,“大多数”的决定表达为最长的链,因为最长的链包含了最大的工作量。如果大多数的CPU为诚实的节点控制,那么诚实的链条将以最快的速度延长,并超越其他的竞争链条。
想要攻击这个系统的人就需要拥有更强的算力,如果这是一个为了利益的攻击者的话,他会发现用这个算力在系统中合法经营会获得更高的收益,攻击这个系统会使这个系统贬值。
在同一时间有大量的节点进行这个Nonce的计算,但是最快的节点的计算会被认可。其它节点的算力会被浪费掉了。整体这些计算和打包交易的行为可以认为是“挖矿”。比特币为了奖励矿工的计算,会凭空发给矿工一笔25BTC(这个数字在逐渐的减少)的交易。
可以看到,比特币的工作量证明实际上是一个很低效和浪费很大的事情,极大的算力浪费在了计算Nonce,但这确实是一个很简洁很民主的事情,通过难以伪造的算力的投票确定了谁才是大多数,保证整个系统是符合大多数人的利益的。
3.交易策略
现实社会中的交易是很明确的一手交钱一手交货,钱已经到手了就不太会被转走了。而在比特币上是如何的呢?
比特币仍然是一手交钱一手交货,问题在于交钱之后钱不一定到手上,或者会出现一种“看上去到手”的错觉。比特币大约是10分钟生成一个新块,那么在交易完成后我们需要大致等待10分钟,期待交易会被打包在最新的块上。当我们看到了交易之后,交易真的完成了吗?并非那么确定。
在上一节我们可以看到比特币系统会信任最长的链,有些脸黑的情况下我们的交易并没有被打包到最长的链上,而是某些次长的链上,所以我们还需要更多时间去确认,节点投赞成票的方式就是在认可的链条后挖矿,因此当打包我们交易的块后产生了足够多的块,那么我们就可以认为这个交易已经被真真正正的写成功了,就可以愉快的银货两讫了。
从这点可以看到,比特币要用于线下即时交易是有一些困难的,这个确认时间确实有点长,而且还是在基本无人作恶的情况下。那么当有算力攻击时会怎么样呢?
这里中本聪给出了数学证明,将这个问题近似的看成了赌徒破产问题
,得出了计算结论:如果攻击者的算力比诚实矿工的算力低,那么攻击成功的概率会因为区块数的增长而呈指数化的下降。
4.一些瞎侃
匿名
在比特币网络上的交易都是一串地址与另一串地址,只是在网络上流转时,是无人知道这个地址后面的是猫还是狗。然而由于比特币的价值波动,更多是一种投资品,最终人们还是需要提现法币,在提现的时候,这个匿名就被打破了。因为人们需要和现实世界产生关系,银行、交易所或者其它的一些机构能够通过对地址账户上的提交的监控确定到账户和个人的关联,从而顺藤摸瓜拉出一大片。这样想一想,其实现金交易的匿名性会更好,当然,现金没有U盘好携带。
特色主义算力攻击
比特币之前的主要算力是在国内,由于众所周知的原因,国内连接国外的网络其实一般,如果在某一天与国外节点发生了断网,那么比特币上的交易就会被分成两个链,大家各自产生了自己的链和交易。当某一天网络恢复,那么这两个链就会被合二为一,由算力开始投票,某一条链上的交易都会被抛弃,如果真的到了那样一天,比特币会如何发展? 这真是一件很有趣的事情。
有兴趣的朋友可以关注我们的公众号,一起讨论和学习
不错不错,已关注楼主公众号
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Congratulations @remark31! You received a personal award!
Click here to view your Board
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Congratulations @remark31! You received a personal award!
You can view your badges on your Steem Board and compare to others on the Steem Ranking
Vote for @Steemitboard as a witness to get one more award and increased upvotes!
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit