什么是区块链

区块链是一个概念,而比特币与以太币等其他加密货币均为区块链的应用之一。

以下简单一句话理解区块链:许多交易组成区块,许多区块前后互相链结,组成区块链

可先看这个简单介绍影片:https://www.youtube.com/watchv=sYduOfRLHq0

想像今天主管口头下令新政策,虽然没有做记录,但大家听到后都会互相口耳相传,之后这个政策虽然没有被一个中心把它记录下来,但大家心中都知道这件事情了,如果之后这个下这个政策的主管离职了,剩下的人会以大家多数人讲的为算,但如果有人想更改,也会因为与大多数人讲的不同而被拒绝

理解区块链

比特币可以说是目前家喻户晓的一项使用区块链技术的应用。我们先来说明比特币是如何运作,说明过程中会将会一步一步讲解区块链的相关概念

Bitcoin is an innovative payment network and a new kind of money. 源自比特币官网

我们最常听到比特币是在新闻报导或朋友闲聊时,谈到今天比特币价格又飙涨到了多少,某位玩家又在中国又投资了新的矿机或矿场本书将会在后续章节介绍如何申请一个自己的比特币地址与钱包,并且进行购买比特币与转帐等动作

大家可能会想的第一个问题可能是: 在电脑上的货币他真的够安全吗

接着我们会想到网路上刷信用卡不也是在网路上的虚拟交易吗,那线上刷信用卡跟我们使用比特币他的差别又在哪里

加密货币钱包

比特币地址类似于14qViLJfdGaP4EeHnDyJbEGQysnCpwn1g

可用的比特币位址数量接近2的161次方个,假如地球上约有2的63次方粒沙,如果每一粒沙中有一个地球,那么比特币位址总数远远超过所有这些地球上的所有的沙子的数量

为了能在区块链网路里进行交易,你需​​要一个比特币地址,它让你可以存放你的比特币。比特币地址是由一个私钥之后产生公钥在进行一些密码学方法出的一个比特币地址(将会在后续章节详细介绍产生方式)

每个公钥都是由一个私钥所产生

如果一个讯息被公钥加密,只有配对的私钥才能解密读到讯息。反之,如果你用你的私钥加密讯息,只有配对的公钥可以解密。所以当小明想要转帐小王,他需要用他的私钥将转帐讯息加密后,送到网路里,然后每个节点使用小明的公钥将讯息解开,以确认是由小明发送的。

在加密完成时会产生一个电子签名,它会被节点们用来确认交易讯息的发送来源和真伪。电子签名内容是一串文字,它是由私钥对交易讯息所签发出的一段hash。如果你更改交易讯息中任何一个字元,电子签名也会跟着改变,所以骇客很难更改你的交易讯息或是得知交易金额。

查询余额

我们转帐后比特币是如何知道我们现在帐户余额是多少呢

刚才有提到比特币网路的组成是由全世界跑着比特币节点程式的电脑所构成

每个节点电脑会进行验证交易与同步其他节点资料的动作且都保有一份区块链帐本,但节点是如何知道你的帐户余额区块链系统并没有记录每个人的帐户余额,事实上,它只有纪录网路上每笔交易纪录

持有比特币代表的是,于区块链帐本上查询你的地址还存在着尚未变成输入交易之纪录。

看到上图

如果在out没有连接着其他in的话则其即变为目前帐户的余额

区块中的交易

看到上图,每个产生的交易会先在交易池中等待被节点纳入区块中

每个节点都可以将若干个交易讯息从交易池中选取并打包成区块发送到网络上,并建议其为链上的最新区块。

区块链系统使用密码学方法(后面章节会提到实作)设计了一道复杂的数学题,只要有正确答案,就可以成为链上的最新区块。这个答案是由节点计算后一起被打包进区块。答案是一个数字,得到答案的唯一方法就是不断地计算。哪个节点先得到了答案,它就先有权利将它的候选区块放到链上。

每个节点都有一份区块链副本,当节点拿到其他节点丢出来的候选区块(已有正确答案的),就会把区块放到副本链上,同时系统会要求节点搜寻网路里有没有比它的副本链更长的链,如果有,舍弃原有的链,取用更长的链。

在上图中,我们可以看到每个方块中都包含一些数值这些值即为存放在区块链中的区块资料

1.区块链是由包含交易讯息的区块,从后向前有序接起来的数据结构,区块被从后向前有序地链接在这个链条里,每个区块都指向前一个区块

2.对每个区块头进行SHA256加密哈希,每个区块头都包含它的父区块哈希值。这样把每个区块链接到各自父区块的哈希值序列就创建了一条一直可以追溯到第一个区块(创世区块)的链条

3.由于区块头包含“父区块哈希值”,所以当前区块的哈希值因此也受到该字段的影响。如果父区块的hash不一样,则子区块也会有不同的hash,接着这个子区块的子区块也会有不同hash,这种瀑布效应将保证该区块不会被改变

4.区块内包含以下,区块头80字节(byte),而平均每个交易至少是250字节,而且平均每个区块至少包含超过500个交易

另一个相关介绍影片:https://www.youtube.com/watchv=r43LhSUUGTQ

Merkle Tree

如果今天在区块中的某一笔交易本文被窜改,则计算出来之Merkel Root也一定不同

利用这个特性可避免区块中所含的历史交易遭任意窜改

Merkle树被用来归纳一个区块中的所有交易,同时生成整个交易集合的数字指纹,且提供了一种校验区块是否存在某交易的高效途径

为了创建父节点HAB,子节点A和子节点B的两个32字节的哈希值将被串联成64字节的字符串。随后将字符串进行两次哈希来产生父节点的哈希值:

HAB~=SHA256(SHA256(HA + HB))

挖矿

Mining = Securing the network = verify computation

一个新的区块被“挖掘”出来,每个区块里包含着从上一个区块产生到目前这段时间内发生的所有交易,这些交易被依次添加到区块链中。我们把包含在区块内且被添加到区块链上的交易称为“确认”交易,交易经过“确认”之后,新的拥有者才能够花费他在交易中得到的比特币

矿工们在挖矿过程中会得到两种类型的奖励:创建新区块的新币奖励,以及区块中所含交易的交易费

在挖矿过程中成功“挖出”新区块的矿工可以得到该区块中包含的所有交易“小费”。目前,这笔费用占矿工收入的0.5%或更少,大部分收益仍来自挖矿所得的比特币奖励

Finding a nonce input to the algorithm so that the result is below a certain threshold

区块链用难度来控制下一个区块的产生速度,而矿工利用当前的区块头加上一个随机数nonce,并做hash,如果产生一个低于设定难度的值即可成功挖到矿

藉由改变nonce来产生不同hash,想办法让此hash小于目前所设定难度的数值

https://www.youtube.com/watchv=lik9aaFIsl4&t=1s

挖矿困难度解释

https://en.bitcoin.it/wiki/Target

挖矿时间估计

http://coinish.com/bitcoin-mining-calculator/#calc-information

我们可以使用以下网页进行挖矿模拟

https://anders.com/blockchain/block.html

Nonce为一个随机值让我们更改实际挖矿时即为更改Nonce并想办法算出结果因为相同字串经过sha后的数值都一样

但无法预料哪个字串经过sha可以得到我们想要的数值

Data为模拟纳入区块的讯息

看到目前市面上的币种以及价格

当我们想要对目前市面上的加密货币进行投资时,我们必须先到市场上了解其价值

以下网站列出了一些市面上的加密货币可供我们参考

https://coinmarketcap.com/

其他相关Bitcoin schema介绍

以下网站列出了比特币相关schema

https://webbtc.com/api/schema

加密货币Market State图表

一样列了许多市面上可见的加密货币,但采用了另一种方式将之呈现

http://cryptomaps.org/