微信号:java_daren

介绍:精通java技术;具备互联网思维,进可创业,退可求职谋生,本号正是为了召集和培养这样的达人.

通过比特币了解以太坊(1)

2018-03-04 23:55 Mike Goldin

作者:Mike Goldin

图标:Eva Shon

译者:java达人

来源:https://media.consensys.net/time-sure-does-fly-ed4518792679

(点击阅读原文前往)


区块链

区块链基本上是状态变更的公共记录。任何人都可以审查区块链随时间变化的状态,并通过数学确定性证明这些交易是按照区块链的规则进行的。以比特币为例,这些规则很简单:比特币不能被重复使用,它们的来源必须追溯到一个对有效区块的挖掘(更多关于挖掘的内容请看后续)。为了开始我们的旅程,我建议你阅读比特币白皮书,即使你对密码学一无所知。稍后我们将返回到密码基础。比特币的白皮书很短,只有前六个部分与我们真正有关。

Satoshi Nakamoto的比特币白皮书: https://bitcoin.org/bitcoin.pdf [阅读1–6部分]


区块链交易的密码学基础

作为一个在密码学方面没有什么背景的人,我发现自己开始困惑于白皮书对交易的描述。我们应该清楚,这是一种机制,目的是通过追踪资产相关所有者的历史记录,在给定的时间内证明对某项资产的所有权。但是什么是公钥,散列呢?这些如何帮助我们证明资产的所有权?如果你从未上过密码学课,请观看可汗学院的视频对这些重要的功能进行的描述。(java达人:国内可看数字签名是什么?)


(Satoshi Nakamoto,比特币:点对点电子现金系统)


现在让我们回顾一下白皮书的交易图。在这里,我们将所有者2的公钥和之前的交易(在其中,所有者1拥有比特币)转换成唯一的摘要(哈希函数的输出)。然后,用所有者1的私钥对摘要签名。在未来,任何人都可以通过将所有者2声明的状态变化输入签名验证算法来验证他对比特币的所有权:一笔比特币和所有者2的公钥(标志着一笔比特币向所有者2转移),所有者1的公钥(表示这笔比特币是所有者1向他转移的),和交易的签名表单(可在区块链上公开的摘要,交易发生时被记录)。只有在所有者2指定的确切状态变化的确是用所有者1的私钥签名时,所有者1的公钥才能确认签名的交易摘要在签名的交易链上的有效性。这个过程可以递归地重复回到比特币的原点,证明整个所有权链条是有效的。


你可能在这一点上有很多问题,并且已经在考虑边缘案例——所有权链是如何开始的?比特币的具体金额是如何转帐的?令人惊讶的是,你需要理解比特币的并不多。接下来,我们将讨论三到六部分的白皮书,并找出其中一些边缘案例是如何解决的。




挖矿在区块链实现网络一致性方面的作用

所有比特币交易都向整个网络广播,这些交易由验证交易有效性的矿工收集(主要使用前面描述的方法),并将所有有效的交易记录到“块”中。块的内容和一个递增的随机数(称为“nonce”)随后被反复尝试计算,直到结果输出包含一定数量的前导零。网络动态调整必要的前导零个数(或“难度”),以便控制平均每10分钟开采一个区块。由于散列算法的结果是不可预知的,要找到被网络其他节点接受的有效散列需要运气和CPU能力。人们拥有的计算能力越强,他们在网络其他人之前找到有效散列的机会就越大。当有效块被“挖掘”时,它被广播并由网络的其他节点进行测试。其他节点在给定最新标准块的情况下,在接受该块作为最新标准网络状态之前,测试所包括的状态转换是否有意义,所有用于有效性验证的交易签名,这个区块和所提供的nonce。然后将该块添加到每个节点本地数据库中的原有区块链的头部


所有权链如何开始? 比特币协议规定,每个区块都允许向区块矿工提供一笔25 BTC的交易,其中这些25 BTC是凭空创造的。 这提供矿工支持网络的激励。 如果一个比特币的所有权链可以追溯到这些特殊交易中的一种,那么比特币可以被验证为非伪造。 的确,这是新比特币创造的唯一途径。


控制51%网络的恶意用户用比特币支付他的咖啡,可以喝着他的饮料,然后挖掘一个区块(从他刚刚交易之前的状态开始),欺骗性地略去了他的咖啡购买。 即使这个网络在他开始挖掘欺诈链时抢先挖掘了几个区块,他那51%的网络马力将不可避免地赶上。 因为比特币协议认为最长的链条才是规范的,才会被接受,即使存在被遗弃的区块子链暗示他的欺骗行为,恶意用户也会逃脱处罚



Extra Credit:比特币中的UTXO  在比特币中,并不持有可以从其中撤回和存入的无限可分的货币单位。 相反,比特币用户处理“未使用的交易输出”(UTXO)。 如果矿工新挖了25BTC,想要买1 BTC咖啡,他们必须指定整个25 BTC(UTXO)作为交易的输入,并为交易指定两个输出:其中一个输出发送一个 BTC到商家的地址,第二个输出指定24比特币作为“充值”发送回购买者的地址。 要购买另一杯咖啡,该24比特币作为一个UTXO。 多个UTXO组合包含在一个交易输入中以交换更昂贵的物品,而作为新的单个UTXO被商户接收。 以太坊不使用UTXO - 它的帐户余额是可分的。


您现在拥有了解比特币区块链基本原理所需的全部知识。 这是让人头晕目眩的东西! 如果你还没有完全理解它,请不要失落:试着带着它睡上几天,这些知识会在你的梦中组合起来。 一旦如此,你可以开始想象如何运用像比特链区块链那样的技术,在输入和程序代码被公开共享时,验证任意复杂计算的公共输出。 实际上,我们将在本系列的第二部分中探讨这一点。 回头见!


请继续关注Mike系列文章下一节“Ethereum:Bitcoin Plus Everything”。




java达人

ID:drjava

(扫码或长按识别)

 
java达人 更多文章 回顾下以前经历的两类项目 Base:Acid的替代方案 加入知识星球,领取识人利器 java 与 python 的并发争论 Java 8 Stream 教程 (三)
猜您喜欢 周末荐读 |数据挖掘技术 你是软件行业的"圈里人"么? 深入理解密码技术 服务设计初探 做大数据,必须要有的格局