Hand Drawn Twitter Logo
Hand Drawn Linkedin Logo Hand Drawn Facebook Logo Hand Drawn EMail Logo

对比特币的通俗技术解释

比特币、区块链和相关概念背后的技术是非常复杂,以至于了解它们通常意味着在技术细节和整体理解之间进行选择。

 

你不需要做出那样的选择。

 

也许你听说过区块链将如何颠覆你的行业。也许你对比特币很感兴趣,但又不想投资你不懂的东西。也许你只是好奇它的工作原理。不管你的理由是什么,每个人都可以在技术层面上理解比特币和区块链技术。

 

我是比利比特币,我将在此为你解惑。

 

很多人对比特币的兴趣开始于“为什么”,但这个为什么是有争议的。我们将集中于这些技术是什么以及它们的工作原理。比特币是几个概念的巧妙组合,因此将它分解成几部分有助于理解。

 

Asterix Bullet
Asterix Bullet
Asterix Bullet
Asterix Bullet
Asterix Bullet
Asterix Bullet

加密哈希函数

加密是一种通过将一段信息转换成无法读懂的文本来保证信息安全的方法,如果没有正确的工具,就无法破译这些文本。加密在比特币中扮演着两个不同的关键角色(因此得名“加密货币”)。第一个是加密哈希函数。

哈希函数是一组规则,它将任何大小的信息片段转换为大小相同的数据片段,称为“哈希”。

一个简单的例子是国际标准书号系统(ISBN),每本书背面都有的标识数字。它将一段信息——一本书的特定版本——转换成13个数字的标准字符串。在ISBN的“哈希函数”中,第一版的《哈利波特与魔法石》变成了:

978-0439708180。

ISBN Hash Function

Scrabble(一种拼字游戏)是哈希函数的另一个例子。使用一组简单的规则——将字母块上的数字相加——“Scrabble哈希函数”为每个可能的单词分配一个数字。

现在想象一下,我把一袋拼字游戏的字母块倒在桌子上并打乱顺序。

首先,我选一个词——比如说”仙人掌(CACTUS)”——我问你它值多少分。你很快就会发现那些拼写CACTUS的字块并把它们加起来:10分。

 

 

Cryptographic Hash Funtion Scrabble

翻译: input:输入   hashing rules:哈希规则   hash:哈希值

接下来,我告诉你我在想一个特定的词,它值10分。它是什么?现在你肯定难住了。原因是Scrabble是一种基本的密码哈希函数。密码哈希函数是一种具有一些特殊属性的哈希函数:

 

属性一:对于任何给定的数据,很容易计算特定的哈希值(hash),而相同的数据总是会产生相同的哈希值。

 

Scrabble集合满足这个属性,因为你可以很容易地算出“CACTUS”值10分,不管你怎么加,它总是值10分。

Underline
Property 1 of Hash Functions Scrabble

属性二:不可能根据哈希值计算出原始数据是什么。

 

我们的拼字游戏也具有这个属性:不难发现“CACTUS”值10分,但如果我告诉你我在想一个值10分的特定单词,你很可能无法凭空猜想出“CACTUS”。

 

Underline
Property 2 of Hash Funtions Scrabble

属性三:非常、非常不可能有任何两个不同的数据片段具有相同的哈希值。

 

拼字游戏没有这个属性,因为除了“CACTUS”之外,还有其他的词也值10分。但是我们可以想象一个更高级的具有这个属性的拼字游戏。

 

想象一个拼字盘,上面布满了那些标有特殊值的方格:双字母分数,三重单词分数,等等。除此之外比较特别的是这个拼字盘板上有各种各样的这类特殊方格布满整个拼字盘,不管字母怎么放置,每个方格都有一个简单但独特的效果:“词乘以3.5点”、“字母乘以1.2”、“给词加上12.1”等等。

Underline
Property 3 of Hash Functions Scrabble

翻译: multiply word by 3.5:单词乘以3.5   add 12.1 to word:单词加上12.1    multiply letter by 2.4:字母乘以2.4   multiply word by 8:单词乘以8    add 17 to word:单词加上17   multiply letter by 6:字母乘以6

在这样一块拼字盘上,很难找到在不同的方格上的任何两个有相同分数的单词。

 

大多数计算机哈希函数不是棋盘游戏,而是算法:一组规则,告诉计算机如何将一段数据转换成一串字符。这些算法有很多种,但是我们感兴趣的是SHA-256 ——安全哈希算法(Secure Hashing Algorithm 256)。

SHA-256命令计算机使用一系列错综复杂的简单步骤,这些步骤可以将任何大小的信息变成256个1和0的字符串。

顺便说一句:有一点很重要,在计算机语言中,所有的数据都用“二进制”表示,即一系列的1和0。

Computers read in Binary

翻译: you see:你所看到的    computer sees:计算机所看到的

Play Button for SHA256

由美国国家安全局(NSA)在2001年创建的SHA-256拥有我们刚刚提到的三种属性,但是是在一个非常复杂的程度上——强化版的拼字游戏。点击播放按钮,看看SHA-256是如何计算出来的。

下面是一台运行SHA-256算法的计算机对我的名字“Billy”进行哈希运算的结果:

110010000011011010010101110011111001110000101100100101101100110110011110001111001110100101001101011001010110100111101110011101011111001010100101000001011100100011001101100010101100111000110110101001000100111101010101000101001011110100111101010100001001010

一台电脑瞬间就能把“Billy”变成这个256个0和1的字符串,“Billy”总是产生同样的字符串(属性一)。但是同一台计算机不可能根据这个256个0和1的字符串解算出“Billy”(属性二)。

 

而且,由于SHA-256的设计方式(就像我们想象中的”超级复杂的拼字盘”),另一段数据也几乎不可能被哈希运算成“Billy”对应的二进制字符串(属性三)。

SHA-256可以处理任何信息:

 

单词”Billy”,一幅仙人掌的图片,视频文件——权利的游戏.mp4。这是因为在计算机语言中,所有的信息都是以1和0的形式记录的。

Hash Your Name
hash your name here

翻译: hash your name here:

点击这里来对你的名字进行哈希运算

为了便于阅读,当人们提到这些1和0的长串时,他们使用一种叫做十六进制系统的东西,它把每一个字符串中的四个1和0转换成一个字母或数字。上面的“Billy”对应的256个1和0的字符串,用这个十六进制系统写成,看起来是这样的:

85eea4a0285dcb11cceb68f39df10d1aa132567dec49b980345142f09f4cb05e

 

还有第四个属性:

属性四:即使是对输入数据的微小更改,也会导致输出哈希值的显著变化。

 

下面是SHA-256如何逐字地哈希我的名字(十六进制)。注意,当每个字母被添加时,结果的哈希值没有任何相似之处。

Underline
Property 4 of Hash Functions

SHA-256非常有用,因为256位1和0的数字提供了大量可能的哈希值——2256种可能,即1.16×1077。这比我们银河系中的原子数量多出50亿倍,比地球上的沙粒(~7.5x1018)或水的加仑数(~3.26x1020)多出许多许多的数量级。

 

我们讨论的是无限数量的信息,可以通过SHA-256进行分配,并分配了几乎无数的哈希值。这就是为什么它就像加强版的拼字游戏——如果你从哈希输出开始,你必须经过无数次的猜测才能找到对应的输入。

 

好吧,但是这和比特币又有什么关系呢?

数字货币和比特币网络

问得好。比特币使用加密哈希函数来创建一种新的“数字现金”。要了解如何做到这一点,我们需要绕一个简单的弯路。

 

数字现金是什么?数字现金是一种电子交易媒介,它与普通纸币具有许多相同的性质——无需第三方就可以很容易地转账、难以伪造和匿名。信用卡和借记卡以及PayPal和Venmo等服务似乎都是一种数字现金,但这些服务的背后是第三方:银行、信用卡公司和其他金融机构。最后,你支票账户里的“电子”金钱以美元(某处)表示,由我们必须信任的一个或多个机构管理。

 

另一方面,纸币是匿名的,很容易在人与人之间转移。它不需要第三方参与交易,它的面值是众所周知和认可的。但数字现金有一个大问题。

 

对于纸币,我的每个一美元只能花一次。如果我从钱包里拿出钱给你,那就成了你的钱。我不能再花它了,你则可以用它做你想做的事。序列号是那张钞票的唯一标识符,如今,几乎不可能创造出一种看上去一样的假钞。

 

但数字现金应该很容易伪造。由于“数字钞票”将由一系列的1和0组成(就像电脑上的所有东西一样),我可以复制这一系列的1和0,并且伪造我的钱。如果每个人都能复制自己的数字“钱包”里的任何数字“钞票”,那么这种货币将很快变得毫无用处。

 

解决这个问题的唯一方法似乎是使用某种账本:一个记录簿,用来记录每个人有多少数字现金,并记录每笔交易。但如果这本记录簿是由值得信赖的第三方维护的,那么我们又回到了原点。一种去中心化的方式来跟踪交易是创建数字现金的最困难的部分。

比特币是一种使用加密哈希函数而不是第三方来记录交易的数字货币。

 

重要的是要知道,大写字母“B” 开头的比特币(Bitcoin)指的是整个技术,类似美国的金融体系。以小写字母“b”比特币则表示数字现金系统的单位,类似美钞。

 

在比特币(Bitcoin,大写B)中,比特币(bitcoin,小写B)的交易通过SHA-256进行哈希。我们已经了解了如何通过SHA-256对任何信息进行哈希,而交易只不过是由一系列1和0表示的信息。

 

这些哈希输出通过点对点网络共同记录。点对点网络是一个分散的计算机网络,在没有中央管理员的情况下通过网络相互通信。这种记录被称为分布式账本,任何想要获得账本副本的网络成员都可以拥有一个。如果你愿意,你今天可以把账本下载到你的电脑上,这是无需许可的,也就是说任何人都可以通过下载一个让你可以访问它的应用或电脑软件来加入网络,就像网络浏览器可以让你访问万维网一样。

 

账本是集体维护的,而不是由某一个成员维护的。与只有受信任的第三方才能向账本中添加交易的集中式账本不同,分布式账本允许任何人在遵守一套称为比特币协议的规则的情况下向账本中添加交易。接下来,我们将跟踪一笔比特币交易,并根据协议查看如何将其添加到比特币账本中。

挖矿——如何验证和添加比特币交易到账本中

如果我想给我的朋友丹尼尔发一个比特币,我就给比特币用户的分布式网络发一个信息:“比利发送一个比特币给丹尼尔”

Billy Sends 1 Bitcoin to Daniel

翻译: Billy sends 1 bitcoin to Daniel: 比利发送一个比特币给丹尼尔

该交易位于与其他未决交易(称为记忆池memory pool或mempool)一起的组中。记忆池是一组由所有用户识别但尚未验证的交易,就好像服务员在餐厅点了你的菜,但是厨师还没有准备好一样。

Bitcoin transactions memory pool or mempool

翻译: Mike sends 2 bitcoin to Ira:麦克发送2个比特币给艾拉   Billy sends 1 bitcoin to Diniel:比利发送1个比特币给丹尼尔    Linda sends 0.5 bitcoin to Ray: 琳达发送0.5个比特币给雷    mempool:记忆池

任何用户都可以通过将这些交易分组在“区块”中来尝试从记忆池中验证这些交易。实施验证的用户称为”矿工”。根据协议规则,为了验证一组待处理的交易,矿工检查她的账本副本(包括所有以前的比特币交易),以确保我确实有足够的比特币发送给丹尼尔。她对她分组到区块中的任何其他待处理交易都执行相同的操作(在这里,她还检查琳达和迈克。

翻译: miner:矿工    block:区块   block n:区块N   transactions:交易    Billy sends 1 bitcoin to Danial: 比利发送1个比特币给丹尼尔    Linda sends 0.5 bitcoin to Ray: 琳达发送0.5个比特币给雷    Mike sends 2 bitcoin to Ira:麦克发送2个比特币给艾拉

为了添加到账本中,这个区块的交易最终将通过SHA-256进行哈希运算。这意味着组成这三个交易的“数据”的1和0通过SHA-256哈希函数进行哈希运算,产生一个唯一的256位数字(或十六进制的64位数字)。

翻译: input:输入   block:区块    block N:区块N    transactions: 交易    Billy sends 1 bitcoin to Daniel: 比利发送1个比特币给丹尼尔    Linda sends 0.5 bitcoin to Ray: 琳达发送0.5个比特币给雷    Mike sends 2 bitcoin to Ira:麦克发送2个比特币给艾拉    hashing rules:哈希规则    hash:哈希

输入中还包含其他内容,以及交易区块:

前一个区块的哈希。

翻译:block:区块   block M:区块M   transactions: 交易    Bonnie sends 6 bitcoin to Amy: 邦妮发送6个比特币给艾米   Julie sends 5.6 bitcoin to Alice:朱莉发送5.6个比特币给爱丽丝   Yoni sends 12 bitcoin to Sam: 尤尼发送12个比特币给萨姆  hash of block L:区块L的哈希值   block N:区块N   Billy sends 1 bitcoin to Daniel: 比利发送1个比特币给丹尼尔    Linda sends 0.5 bitcoin to Ray: 琳达发送0.5个比特币给雷    Mike sends 2 bitcoin to Ira:麦克发送2个比特币给艾拉    hash of block M:区块M的哈希值

通过在每个新区块中包含前一个区块的哈希值,它创建了一个链的区块(或区块链),每个区块包含所有先前交易的整个历史。

翻译: block L:区块L   Caroline sends 7 bitcoin to Rick: 卡罗琳发送7个比特币给瑞克   Alex sends 16 bitcoin to Tracy: 亚历克斯发送16个比特币给特蕾西    Maria sends 2.5 bitcoin to Chris: 玛丽亚发送2.5个比特币给克里斯    hash of block K:区块K的哈希值

这是可能的,因为SHA-256有一组几乎无限的可能的哈希值,所以每一组新的交易和前一个区块的哈希值都可以有自己的哈希值。因为每个区块的哈希值都是使用前面区块的哈希值计算的,所以每个区块都与前面的区块和前面的所有区块相关,包括它们的交易。对任何区块的一个小更改(例如添加一个欺诈交易)将完全更改每个后续区块的哈希值,而矿工们将注意到哈希值不再对应,并立即拒绝使用来自网络的欺诈交易的“假”区块。

这是至关重要的,因为交易只能在新的区块中添加到区块链,但是你永远不能返回并修改、添加或删除旧区块中的交易。因此,为了确保区块链是有效的,矿工不需要检查每个先前的区块,而只需要检查最近的区块的哈希值(在他们正在验证的块之前的那个区块)。这很重要,因为一旦一个交易添加到区块链中,它就被矿工视为网络的一部分,并且对网络上的任何人都是公开可见的。

 

 

我们如何决定谁将这些交易区块添加到账本中?

根据比特币协议,只有哈希值是以一定数量的0开头的区块才能真正添加到账本中。为什么?这一想法是为了在矿工之间创造一种竞争,以确定谁将增加下一个交易区块。

记住,SHA-256哈希输出是不可预测的。更改输入数据的单个字符将显著地改变输出哈希。这意味着,为了使交易区块的哈希输出以一定数量的0开头,矿工必须向该区块添加一个任意值,即随机数(nonce),并查看结果的哈希值是什么。由于每个SHA-256输出都是不可预测的,因此一个矿工找到一个具有一定数量的0的区块是一个蛮力任务,尽可能快地任意地测试不同的随机数。一段数据不会告诉你它的SHA-256哈希输出是什么——你只能猜测。

 

在这个例子中,矿工获取新交易区块,加上前一个区块的哈希值,并将随机数4202添加到该数据中。(这种对随机数的猜测通常被称为“哈希”),然后,她通过SHA-256将所有数据哈希在一起,然后生成了最终哈希。

在这个假设中,假设一个区块的哈希必须以16个0开头(在十六进制中,每一个0等于二进制的4个0)才被认为是有效的。我们只关心开头的0的个数;剩下的1和0序列并不重要。因为哈希不是以16个0开头的(十六进制中的4个),她必须再试一次。

Try Again!

翻译: nonce:随机数    try again!:再试一次!

一个矿工可能会经历数以万亿计的尝试,直到他们获得“赢”的那一个随机数——导向一个从16个0(十六进制的4个)开始的哈希的那一个,也就是其对应的区块被添加到账本的并且其交易被认为是有效的那个哈希。

一个矿工可能会经历数以万亿计的尝试,直到他们获得“赢”的那一个随机数——导向一个从16个0(十六进制的4个)开始的哈希的那一个,也就是其对应的区块被添加到账本的并且其交易被认为是有效的那个哈希。

翻译:  winner!:赢家!

Winner!

猜出正确的随机数以找出正确的哈希,就像你和你的朋友莎拉在玩掷硬币游戏。第一个连续抛四个正面的人胜出。抛正面的概率是50%,抛反面的概率也是50%

抛出正面是“容易”的。事实上,这发生的概率是二分之一,所以如果你和莎拉同时抛硬币,大家都认为你们中会有一个正面朝上。连续抛两个正面是两倍的难度:概率是25%。这是因为有四种可能的情况。

 

四分之一的情况是两个正面,所以概率是25%。每增加一次正面,连续正面的概率就减少一半。

Two Coin Flips Possibilities

你和莎拉比赛抛硬币,跟两台电脑比赛开采比特币没什么两样。

 

我们知道一个区块的哈希是256个1和0的序列。把它想象成一系列的硬币,1由反面表示,0由正面表示。如果矿工必须找到一个以0开头的哈希(一个正面),那么他们会这样做,平均50%的时间:一半的哈希以0开头,另一半以1开头。如果我们把正在寻找的起始一个哈希的连续的0的数量翻倍(2个正面),那么这些矿工会有25%的概率发现这样的哈希,因为四分之一的哈希都是从两个0开始的。就像抛硬币游戏一样,你需要的连续0越多,猜的次数就越多。

Consecutive Heads Probability Table Bitcoin Mining

翻译: target # of heads:目标正面次数   likelihood:概率   avg # of flips:平均抛掷次数

从2018年4月开始,比特币要求交易区块只能在区块哈希以73个0开始时才能被添加到账本中。这意味着在找到一个成功的哈希之前,矿工平均需要经过1.9×1022次的哈希。这是19个百万六乘方次哈希,或者是0.00000000000000000001%的概率。

 

这并不意味着每一个矿工在十分钟内就会经历19次百万六成方次的哈希。实际上,所有的矿工加起来平均要经历这么多的哈希,只有一个矿工获胜!

 

在任何时候,都有许多矿工试图验证下一个区块,其中包括我的交易。这样做的目的是使向账本中添加交易区块在计算上变得困难,这意味着没有一台计算机能够保证它们能够解决下一个区块。

 

请记住SHA-256输出是不可预测的,这意味着寻找验证区块的随机数只不过是随机猜测,而“胜利者”是随机选择的。他们的计算能力越强,就能越快地对正确的随机数进

行猜测。

 

让我们回到抛硬币游戏。如果萨拉抛硬币的速度是你的两倍,那么她可能会以66.66%的概率获胜,而你获胜的概率只有33.33%。莎拉首先抛四个正面的可能性与她抛硬币相对于你的速度成正比,但仍然不能保证她会先抛四个正面。

 

类似地,任何一个矿工击中猜中正确随机数的的几率与他们与其他矿工相比使用的计算能力成正比。但是没有人知道他们什么时候能找到正确的答案(或者他们是否能找到)。这是至关重要的。如果矿工能够保证他们将验证一个特定的区块,他们就可以验证他们正在使用自己没有的比特币的欺诈性交易。

 

这就是比特币核心的分布式账簿的本质。与其让一个实体(如银行)验证并记录我们的交易,不如让大量的人竞争来验证每一个连续的交易。验证过程——为一个区块解决密码哈希函数——需要足够的时间和计算能力,以至于没有一个实体能够确保他们能够验证下一个交易。这一过程被称为工作证明(proof-of-work)验证系统,关于查找生成成功哈希的随机数所需的能力“工作”或计算能力。

 

如果开采很难,为什么还会有人去开采呢?对于每一个被验证的比特币交易区块,比特币协议允许矿工在被验证的区块中添加一个额外的、特殊的交易:给自己比特币的交易。这被称为coinbase(某比特币交易所)交易。

 

这些挖矿的回报是比特币诞生的唯一途径。比特币协议确定了数量有限的比特币,即2100万比特币。稀缺性是货币的基本属性,就像流通中的美元的供应是有限的一样。

只有矿工的区块最终被其他矿工所接受,矿工才能得到报酬。就像任何其他交易一样,coinbase交易只有在每个人都同意的情况下才会被接受,这只有在块中的所有其他交易都是有效的、并且找到一个成功的哈希时才会发生。矿工们将继续开采,只要他们得到的回报高于挖矿所需的电力和硬件等成本。

Winning Miner is Rewarded

尝试验证区块并获得回报的矿工越多,竞争就越激烈。竞争越激烈,验证过程就越“随机”。最后,验证过程越“随机”,就越安全。随机性是使无须授信的分布式账本成为可能的核心。

 

比特币是一个循环的生态系统,每一个部分都被输入到下一个部分中。只有验证过程广泛分布,人们才能安全地交换比特币;这是可能的,因为有很多矿工在进行验证;这会起作用,因为他们这样做能够获得比特币奖励——这只对他们有价值,因为人们首先能够相互交换比特币!这种对利益、竞争和激励的完美平衡可能是比特币背后最巧妙的概念。

 

就像美联储制定了何时向美国经济注入新资金的政策一样,比特币协议对比特币如何添加到生态系统以及矿工赚到这些比特币有多困难都有一定的规定。成功挖掘区块的比特币奖励每隔21万个区块减半,或大约每四年减半一次。2009年,奖励从50比特币开始。2012年达到25。到了2016年,这个数字变成了12.5。这意味着,到2140年,所有比特币都将被分发出去。

 

矿工还在矿工奖励的基础上收取交易费,你支付这笔钱是为了激励矿工将你的交易纳入一个区块;当所有比特币最终通过挖掘奖励进行分配时,这些交易费用将确保矿工仍有动力去验证区块。费用与交易中比特币的金额无关,而是基于交易文件的大小和市场供求的。

 

难度是一个常用的术语,用来定义挖掘有多“困难”(由哈希中的开头0的个数定义)。每经过2016个比特币区块就会调整比特币的难度,以确保每10分钟找到一个比特币区块,这是一个任意长度的时间,可以以可预测的速度为生态系统添加新的比特币。它还最小化了两个矿工同时验证两个不同区块的风险。

 

让我们最后一次回到抛硬币游戏。假设你或莎拉连续抛4次正面需要10分钟。接下来,你和莎拉在游戏中增加了两个朋友,让游戏更有竞争力。假设你的新朋友抛硬币的速度和你和莎拉一样,你们四个现在可能会连续抛到四个正面的时间减半(五分钟),因为你们的抛硬币速度实际上翻了一倍。为了让游戏的难度保持在10分钟,你可以改变游戏规则,要求连续掷5次正面才能获胜。

 

在比特币中,随着越来越多的矿工加入网络(更多的计算能力),区块被发现的速度也会越来越快。这意味着在下一次调整中,难度必须增加(更多的前置0),以确保仍是每10分钟找到一个区块。另一方面,如果矿工离开网络,在下一次的调整中难度应该会降低,以确保还是每10分钟找到一个区块。开采的第一批比特币区块,矿工数量少得多,只需要32个前置0,比73个前置0比特币容易了很多个数量级。

 

这是很多需要吸收的东西。让我们回顾一下到目前为止的拼图碎片:

Asterix Bullet
Asterix Bullet
Asterix Bullet
Asterix Bullet

比特币就像数字代币,可以很容易地以电子方式从一个人发送到另一个人。

 

那些交易被分组到区块中,并由大型网络的成员验证,这些成员争着为每个区块中包含的数据的加密哈希函数找到答案。这项竞赛确保没有一个人或一群人能够将欺诈性的交易验证到记录簿中。

 

这些被称为“矿工”的验证者每次成功地解决一个哈希并向账本中添加一个交易区块时,都会因为他们的努力而获得比特币奖金。这些比特币提供了竞争的动机,使账本保持诚实。

 

每个已验证的交易区块还包含所有先前交易中包含的信息,以便创建一个区块链——或一个已验证和不可更改交易的区块链。

 

私钥/公钥加密

密码学帮助解决的谜题中还有一个主要的部分,它与数字现金系统中的另一个问题有关:真实性。当我广播一个交易宣称我向我的朋友丹尼尔发送一个比特币时,我怎么知道真的是他?他怎么知道是我?

任何人都可以加入比特币网络,没有个人要求或任何类型的申请。你所需要的只是网络连接。网络中的每个用户都有一串字符,这些字符充当比特币交易的一种公共“电子邮件地址”,即你的比特币地址。如果你想发送比特币,你必须知道他们的比特币地址。就像电子邮件地址一样,任何人都可以创建任意多的比特币地址。

 

这是我的比特币地址的样子: 3GJEgbnMPpdRo3ebKEYhGzaMXb8aehQxp2

比特币的地址来自一种叫做公钥的东西,公钥本身来自于私钥。

Private Key, Public Key, Bitcoin Address Derivation

翻译:  private key:私钥    public key:公钥    bitcoin address:比特币地址

私钥是256个1和0的任意字符串,应该保密——它差不多是比特币“电子邮件地址”的一种密码。私钥可以是256个1和0的任何字符串,而选择私钥无非是选择1到2256之间的数字或写出256个1和0。(如果你现在手工写出256个1和0的字符串,很有可能以前没有人或计算机写过同样的数字。)

公钥是另一个由私钥衍生而来的数字,它使用复杂的不可逆乘法,椭圆曲线乘法. 这种算法的目的是在公钥和私钥之间创建一种特殊的关系。

 

首先,这种关系是单向的:即使你知道公钥,也不知道对应的私钥:

Private Key to Public Key is a One Way Function

这种关系还有另一个有趣的性质,使比特币交易成为可能。如果我使用一种特殊的算法,包括乘法和哈希,即椭圆曲线数字签名算法(ECDSA),将比特币交易与我的私钥结合起来,我将得到另一个数字,即签名。

Digital Signature Components
Hash

翻译:  Billy sends 1 bitcoin to Daniel:比利发送1个比特币给丹尼尔    Billy’s private key:比利的私钥    hash:哈希    William: 威廉    transaction:交易    private key:私钥

事实证明,任何拥有我的公钥和公共交易的人都可以查看该签名并判断它是否确实是我的私钥创建的——而不需要知道我的私钥。这很重要,因为这允许使用签名对交易进行身份验证。要理解这背后的数学原理,请阅读这里

 

让我们来看看实际操作。当我给丹尼尔发一个比特币时,我实际上是在发送一个包,里面有三样东西:

Asterix Bullet
Asterix Bullet
Asterix Bullet

我的签名,它是我的交易和我的私钥的算法输出

 

我的交易本身,因为你不能从签名确定交易

 

我的公钥,用来验证发送者的身份

我把它发送到哪里?给丹尼尔的比特币地址,这个地址来自他的公钥。一个比特币地址给网络上的每个人一个假名身份。记住,网络上的每个人都可以看到所有的交易。我们不知道丹尼尔是“丹尼尔”——我们只知道他的比特币地址,如果丹尼尔告诉我他的地址,我就知道那个地址是丹尼尔的。当我把比特币发送给丹尼尔的比特币地址时,网络中的矿工们不知道是丹尼尔,他们也不在乎。

 

通过我的交易消息和公钥,任何人都可以确定我的签名确实是用我的私钥做的。这意味着即使不知道我的私钥,任何人都可以知道我是发送交易的人。

 

在实践中,这种验证很容易由矿工计算。当一个矿工从记忆池中获取我的包时,她会检查组件是否匹配。

Components of a Bitcoin Transaction Match

翻译: signature:签名    Billy sends 1 bitcoin to Daniel:比利发送1个比特币给丹尼尔    Billy’s public key:比利的公钥

如果有人恶意地试图发送另一笔交易——比方说,把我的两个比特币给了丹尼尔——带有相同的签名和公钥,那么整个交易就会被证明无效,因为我的签名包括了我只向丹尼尔支付一个比特币的交易:

Fraudulent Bitcoin Transaction Extra Bitcoin

翻译:  Billy sends 2 bitcoin to Daniel:比利发送2个比特币给丹尼尔

同样,如果我试图用别人的公钥给丹尼尔支付他们的比特币,那么整个事情也将无效,因为签名涉及到我的私钥,因此不能匹配别人的公钥。如果你更改签名的一个组件,签名就会更改——签名就是用来授权交易的。

Fraudulent Bitcoin Transaction Someone Else's Bitcoin

翻译:  Ben sends 1 bitcoin to Daniel:本发送1个比特币给丹尼尔    Ben’s public key:本的公钥

这就是为什么你的私钥的保密性是至关重要的!在第一种情况下,任何拥有我私钥的人都可以创建一个签名,将我的私钥与欺诈性交易结合在一起,从我的账户中支付额外的比特币,然后输出将被视为有效。在第二种情况下,如果我有本(Ben,人名)的私钥,我可以创建一个签名,将他的私钥与用他的比特币支付给丹尼尔的欺诈性交易结合起来。那么,保持我的私钥私密的最好方法是什么呢?

钱包

有几种方法可以记住私钥并保持它们的私密性。在最简单的形式中,钱包是存储私钥的一种方法。一些钱包是在线的,通过密码保护私钥;而另一些则是硬件,需要密码和物理设备才能访问私钥。

 

你甚至可以只把你的私钥写在一张纸上,永远不要和任何人分享。只是要小心,因为如果你丢失或忘记了你的私钥,就没有办法从公钥再次生成它(记住这是一种单向关系),而且你将永远无法再次访问相关的比特币。你将永远失去它们。

 

通常,钱包还会生成你的私钥、公钥和比特币地址,并允许你与比特币网络进行交互,这样你就可以发送和接收比特币,查看比特币余额,而无需编写任何代码。

 

与任何类型的存储一样,安全性和可访问性之间也存在权衡。可以让你轻松收发比特币的在线钱包可能不那么安全;它们可以从任何地方访问,但承载它们的网站可能容易出现宕机、黑客攻击或有人获得了你的密码。

 

你可能听说过各种各样的交易所被黑客入侵并且比特币被偷。重要的是要知道,比特币协议的工作方式与它应该的工作方式完全一样。黑客通过入侵在线钱包软件获得了大量私人密钥,因此可以生成任何将比特币发送到自己地址的有效签名和交易。失败的是托管网站的网络安全,而不是比特币网络。

 

你可以把这些网上钱包想象成你随身携带的实体钱包,通常你不会随身携带大量现金。硬件钱包是一种物理存储设备。对于日常访问来说,它们可能不太友好,但更安全,因为任何没有物理硬件的人都不可能访问存储的私钥。这更像是一个保险箱,你可以存放真正的贵重物品。

 

网上有一些资源可以帮助你找到适合你的钱包。

 

重要的是要记住,比特币并不是以任何方式“储存”在钱包里的。比特币在区块链上简单地表示为从一个地址到另一个地址的交易,而钱包是一种从你的地址收发的交易中显示余额和保护你的私钥的方式,使你能够访问这个区块链。

 

 

比特币协议

现在你已经了解了比特币交易是如何从头到尾进行的,但你可能会想:我们一直在讨论的比特币协议中的所有这些规则是谁决定的?是否有可能对比特币协议进行修改?

比特币协议的代码最初是由假名中本聪(Satoshi Nakamoto)的人和一小群开发人员编写的,被称为比特币核心(Bitcoin Core)。但没有人拥有比特币核心背后的技术,就像没有人拥有互联网背后的技术一样。如你所知,网络是分布式的,因此,每个人都拥有它。有许多开发人员致力于改进比特币核心软件,但是他们不能自由地强制修改协议,因为网络参与者可以自由地使用他们所选择的任何软件版本。然而,一个人不能仅仅改变他们的软件来给自己一个优势,因为新软件会与旧软件上的其他人不兼容。

 

有时,大量的矿工或用户可能同意更新或更改软件以增强安全性或添加其他功能。任何人都可以建议进行软件更改,这些建议被称为比特币改进建议(BIP)。对比特币协议进行改进有两种可能,软分叉(Soft Fork)和硬分叉(Hard Fork)。

 

软分叉是对比特币协议的更改,可能导致以前有效的区块和交易无效,但新规则下的有效块在旧规则下也有效。你可以把软分叉看作是规则的收紧。

 

把一个软分叉想象成一个新的职场着装规范:

 

 

在“着装规范”软分叉出现之前,男性被要求穿一件有领衬衫。在“着装规范”软分叉之后,男士必须穿有领衬衫和打领带。在旧的着装规范下,打领带一直是一个有效的着装选择,所以它遵循旧的规则;但在新的着装规范下,这是其中一个要求。打领带遵循旧规则和新规则,而不打领带只遵循旧规则。

Dress Code Blockchain Soft Fork

翻译:  old dress code:旧着装规范    new dress code:新着装规范

在“着装规范”软分叉出现之前,男性被要求穿一件有领衬衫。在“着装规范”软分叉之后,男士必须穿有领衬衫和打领带。在旧的着装规范下,打领带一直是一个有效的着装选择,所以它遵循旧的规则;但在新的着装规范下,这是其中一个要求。打领带遵循旧规则和新规则,而不打领带只遵循旧规则。

 

这方面的一个例子是允许比特币每个区块有更多的交易。根据比特币核心,比特币矿工每隔10分钟在每个区块能增加约2500笔交易。这个限制是由于每个区块文件大小为1兆。这是非常有限的,相当于每秒大约4笔交易,而Visa每秒可以处理超过2000笔交易。因此,提出了BIP141:SegWit或隔离证人(Segregated Witness)。SegWit将交易与数字签名(也称为“证人”)分开。在这种新结构下,数字签名不再计算到1兆字节的区块大小限制,从而允许每个块有更多的交易和进而提高交易速度。

 

在最初的比特币规则下,SegWit区块一直都是有效的,但在大多数矿工采用BIP141之后,SegWit区块就成为向区块链添加有效区块的要求。

 

用硬分叉怎么样?让我们看看上面提到的比特币1兆字节的区块大小限制问题,但是用不同的方式解决这个问题。BIP91建议使用8兆字节的区块大小,这样每个区块可以多处理数万个交易。如果BIP91被批准,未来的区块将变成8兆字节,旧的1兆字节块将不再有效。但是,在旧的规则下8兆字节的区块是无效的,因为区块必须是1兆字节——这在两个链之间造成了不兼容性。当执行BIP91之类的更改时,就会出现硬分叉。旧链上的区块与新链不相容,反之亦然。假设矿工同时支持旧的和新的,那么就有了两个区块链和两种加密货币。

 

BIP91于2017年8月1日实施,比特币现金诞生。在使用分叉时,比特币现金遵循了比特币协议的所有规则,只是它有更大的8兆字节的新区块尺寸,从而创建了一种新的货币。对于分叉时你拥有的每一个比特币,你会得到一个“比特币现金”。在分叉时,比特币现金与比特币有着相同的历史,但在分叉之后,两条链开辟了各自的路径。

Bitcoin Cash Hard Fork

翻译: bitcoin:比特币    bitcoin cash:比特币现金

综上所述

既然我们已经了解了所有的谜团,让我们后退一步,再次关注比特币交易——我将1比特币发送给丹尼尔——从头到尾。

1

我向网络发送“比利发送1个比特币给丹尼尔”的消息,其中包括我的公钥、交易和我的签名(它本身是交易和我的私钥的哈希组合)。

Components of a Transaction Message

翻译: William:威廉    Billy’s public key:比利的公钥

2

我的交易与其他未完成的交易一起放在记忆池中,等待矿工将其添加到账本中。

Transactions in a Mempool

翻译: mempool:记忆池

3

矿工将其中的一些交易分组到一个块中,验证签名是否有效。

Miner Adds transactions to block

翻译: miner:矿工

4

矿工重复地哈希分组交易区块,以及前一个区块的哈希和一个任意的随机数。他们在每次尝试时随机地改变随机数,直到区块哈希变成一个成功的输出:一个以指定数量的0开始的输出。

Miners Hash and Lose
5

第一个哈希成功输出的矿工得到了她的区块,其中包括一项附加的特殊交易,该交易将给她一个比特币奖励,添加到账本中。

Miners Hash and Win
6

该区块被添加到区块链中,区块链是用同样的方式验证的所有以前的交易组的账本。因为每个区块都包含前一个区块的哈希,所以最近的区块包含了每一个交易的证明,而对先前块的更改将被拒绝。

Blockchain Summary Drawing

比特币之外的区块链应用

以上所有描述了第一个区块链,2009年由中本聪在其他开发人员的支持下为比特币所实现。从那时起,人们对理解如何在比特币以外运用其潜在技术产生了浓厚兴趣。

比特币是第一个不需要集中式服务器或组织支持的分布式账本系统。其他加密货币也出现了一些或全部相同的特性以及新特性:例如,Monero和Zcash,它们通过模糊交易和发送方数据来增加隐私,莱特币(Litecoin)通过将区块时间减少到2.5分钟,可以实现更快的交易。

 

比特币的共识机制“工作证明”(Proof-of-Work)在创建一个随机的、分散的挖矿过程方面非常有效,但也非常耗能。哈希过程需要电力,而比特币网络的哈希速率约为每秒23000万亿哈希,据估计,每笔比特币交易都需要大约886千瓦时的电——足够为近30个美国家庭提供一天的电力。

 

由于这种能源的使用除了支持比特币交易之外没有其他功能,因此有人提出了一些替代工作证明的方法。一种想法是使用有用工作证明(Proof-of-Useful-Work),即使用挖矿的蛮力来解决问题或推进科学,比如找到大质数或解决推进密码学的蛮力问题。

另一个更实际的解决方案是验证权益证明(Proof-of-Stake,PoS),在该方案下,区块的下一个验证者通过随机选择和财富来确定。验证者必须为他们的货币提供“股权”,并且保持诚实,因为如果验证者包含一个欺诈的交易,并且网络拒绝区块,验证者的权益将丢失。

 

比特币为我们提供了在互联网上建立平台和基础设施、在无须授信中介的情况下进行数字货币交易的模式,但或许自那以来最大的创新是2015年开发的以太坊(Ethereum)。简而言之,以太坊自身就是一个用于构建其他分散式应用程序的分散式平台。除了交换和存储其原生货币以太币之外,以太坊也允许创建智能合同,或者允许计算机程序在没有第三方的情况下自动执行双方合同条款。这些智能合同使得开发分散式应用程序成为可能。

 

我们还在搞清楚哪些去中心化是有意义的,哪些没有意义的,但一些候选包括分散式预测市场、计算机存储共享、交通网络、资产交换、数字媒体权利和贷款。此外,通过使用智能合同,可以在以太坊的基础上发布其他加密货币(即代币)。它们通常用于资助应用程序项目、提供实用程序或激励开发人员和用户使用应用程序。

 

在某些模型中,应用程序用户使用代币为服务付费,开发人员将收到代币用于构建服务。如果应用程序是有用的,并且对它的需求增加,那么其相关代币的价值也会增加,从而提供进一步开发的动力。这允许任何人、任何地点、任何时间为应用程序做贡献,并鼓励他们这样做,而不受单个实体的控制。

 

这种分发代币的过程被称为ICO(首次代币发行),并使为项目筹集资金变得更容易和更可达到。但ICO也导致了筹资诈骗和资金管理不善。这一点,加上如何合法地对代币进行界定的不确定性,引起了监管机构的注意,并对ICO的合法性提出了质疑。你可以在这里阅读每一个ICO和它的目的,并在这里看看以太坊智能合同的竞争者。(以后还会有更多关于以太坊和智能合同的内容。)

 

到这里,我们基本上讨论了任何人都可以加入的开放或公共区块链。企业也对使用区块链解决方案感兴趣,最初是通过以太坊企业联盟(Ethereum Enterprise Alliance)等倡议来建立自己的私有链。早期的区块链概念已经被用于记录银行间的交易和缩短结算时间,跟踪供应链上从农场到商店到消费者的易腐货物以确保质量和新鲜度,并最小化风险、欺诈和贵重实物商品的盗窃。在每个行业中,领导者都在进行头脑风暴、原型构建和构建区块链解决方案,以确保各方之间数据的完整性和有效性。

 

就是这样。

恭喜你!现在,你对比特币和区块链背后的技术有了更好的理解,并为区块链技术的未来讨论和发展做好了准备。

 

有问题、意见,或者只想聊聊天?我很想听听你的意见!billy@billybitco.in

Hand Drawn Twitter Logo Hand Drawn Linkedin Logo Hand Drawn Facebook Logo Hand Drawn Email Logo

Subscribe to our mailing list

注册以接收将来的帖子的通知 :

(订阅)