区块链是一个概念,而比特币与以太币等其他加密货币均为区块链的应用之一。
以下简单一句话理解区块链:许多交易组成区块,许多区块前后互相链结,组成区块链
比特币可以说是目前家喻户晓的一项使用区块链技术的应用。我们先来说明比特币是如何运作,说明过程中会将会一步一步讲解区块链的相关概念
比特币地址类似于14qViLJfdGaP4EeHnDyJbEGQysnCpwn1g 可用的比特币位址数量接近2的161次方个,假如地球上约有2的63次方粒沙,如果每一粒沙中有一个地球,那么比特币位址总数远远超过所有这些地球上的所有的沙子的数量
为了能在区块链网路里进行交易,你需要一个比特币地址,它让你可以存放你的比特币。比特币地址是由一个私钥之后产生公钥在进行一些密码学方法出的一个比特币地址(将会在后续章节详细介绍产生方式)
每个公钥都是由一个私钥所产生
如果一个讯息被公钥加密,只有配对的私钥才能解密读到讯息。反之,如果你用你的私钥加密讯息,只有配对的公钥可以解密。所以当小明想要转帐小王,他需要用他的私钥将转帐讯息加密后,送到网路里,然后每个节点使用小明的公钥将讯息解开,以确认是由小明发送的。
在加密完成时会产生一个电子签名,它会被节点们用来确认交易讯息的发送来源和真伪。电子签名内容是一串文字,它是由私钥对交易讯息所签发出的一段hash。如果你更改交易讯息中任何一个字元,电子签名也会跟着改变,所以骇客很难更改你的交易讯息或是得知交易金额。
查询余额
我们转帐后比特币是如何知道我们现在帐户余额是多少呢?
刚才有提到比特币网路的组成是由全世界跑着比特币节点程式的电脑所构成
每个节点电脑会进行验证交易与同步其他节点资料的动作且都保有一份区块链帐本,但节点是如何知道你的帐户余额?区块链系统并没有记录每个人的帐户余额,事实上,它只有纪录网路上每笔交易纪录
持有比特币代表的是,于区块链帐本上查询你的地址还存在着尚未变成输入交易之纪录。
看到上图
如果在out没有连接着其他in的话则其即变为目前帐户的余额
区块中的交易
看到上图,每个产生的交易会先在交易池中等待被节点纳入区块中
每个节点都可以将若干个交易讯息从交易池中选取并打包成区块发送到网络上,并建议其为链上的最新区块。
区块链系统使用密码学方法(后面章节会提到实作)设计了一道复杂的数学题,只要有正确答案,就可以成为链上的最新区块。这个答案是由节点计算后一起被打包进区块。答案是一个数字,得到答案的唯一方法就是不断地计算。哪个节点先得到了答案,它就先有权利将它的候选区块放到链上。
每个节点都有一份区块链副本,当节点拿到其他节点丢出来的候选区块(已有正确答案的),就会把区块放到副本链上,同时系统会要求节点搜寻网路里有没有比它的副本链更长的链,如果有,舍弃原有的链,取用更长的链。
在上图中,我们可以看到每个方块中都包含一些数值这些值即为存放在区块链中的区块资料
1.区块链是由包含交易讯息的区块,从后向前有序接起来的数据结构,区块被从后向前有序地链接在这个链条里,每个区块都指向前一个区块
2.对每个区块头进行SHA256加密哈希,每个区块头都包含它的父区块哈希值。这样把每个区块链接到各自父区块的哈希值序列就创建了一条一直可以追溯到第一个区块(创世区块)的链条
3.由于区块头包含“父区块哈希值”,所以当前区块的哈希值因此也受到该字段的影响。如果父区块的hash不一样,则子区块也会有不同的hash,接着这个子区块的子区块也会有不同hash,这种瀑布效应将保证该区块不会被改变