#PART 1
##区块链本身

在技术发展的途中,必然会存在其支持者和反对者。而区块链技术和其他技术相比,存在着巨大的争议。其支持者和反对者双方高度对立。支持者认为:区块链于下一代技术 如同蒸汽机对于第一次工业革命 一般,具有划时代的意义。而其反对者则认为其仅仅是一个披着技术外衣,吸引人眼球的”庞氏骗局”。当然,没有任何一种技术是一种万金油,可以解决一切问题。就比如近几年热炒的人工智能,其仍然存在极大局限性。例如:预判矿物资源,由于成本问题,不能通过大量探测,根据大量探测数据进行大数据预测,这是大数据所根本无所适从的。所以,技术本身并不应当受到我们大力吹捧或者刻意贬低。即使是区块链技术,其本身并不能解决一切问题,当然,该技术本身也并非“庞氏骗局”的罪魁祸首。对此,我们应该理性看待.

肖老师有提到:

1.不要觉得现在接触区块链已经晚了,对该技术的关注者远远多于真正了解它的人。一个很常见的是,一项非常流行的技术必然会被商业界各种“换皮”,比如“物联网”、“量子”等。但真正就技术本身来说,现在学习区块链技术仍然属于先行者。
2.区块链 ≠ 比特币。比特币本身仅是基于区块链这一技术的一种加密货币(除此之外还有莱特币、以太币等许多种加密货币),而区块链技术的应用却远不止于此。

##课程大纲

#PART 2

##密码学原理

比特币属于加密货币,可见其中必然会涉及到密码学的知识。而比特币本身开放,其交易记录、交易金额、交易内容甚至源代码都面向全网开放,在比特币中,正是加密确保了信息的不可篡改,保证了区块链本身的优势——不可篡改。

哈希碰撞:

给定x和y,且有x!=y,但给定一个哈希函数Hash(),可以得到Hash(x)=Hash(y),则称为hash碰撞。collision resistance保证,如果有Hash(x)!=Hash(y),必然可以得到x!=y。

collision resistance用处:

如果我们自己有一条信息x,我们希望别人知道我有x但不想让别人知道x具体是什么,就可以通过告诉其Hash(x),由于该性质,保证了x!=y时,Hash(x)和Hash(y)是不相等的。我们只需要告诉别人Hash(x)即可,对方可以通过Hash(x)知道你确实知道x这个信息,但他无法(很难)通过Hash(x)反推出x。

collision resistance和hiding结合实现digital commitment(数据保证):

在视频中,关于股市预测的案例,某个人对某个股票进行涨停预测,我们如何保证能够知晓其预测是否准确?最简单的是提前公布,等待实际结果出现后验证。但实际中,当提前发布预测后,可能会由于预测者本身对股市实际结果造成影响。所以,应该将提前将其写于纸上并密封,交给第三方机构保管,等到实际结果出现后开启密封与实际对比,这就是digital commitment。而第三方机构需要能够使人信服,在实际生活中,有很多场景并不存在一个这样的第三方机构,而区块链技术正为此提供了一个很好的解决方法。
我们把预测结果看作x,提前公布Hash(x),等到预测结果发生时间来临后,公布x,如果根据x可以得到公布的Hash(x),则说明公布的x确实为所预先预测的内容。从而,我们可以实际进行判断预测是否准确。实际使用中,为了x足够大,会对x进行“加盐”,对x拼接一个nonce,对其整体取Hash。

Puzzle friendly

在比特币系统中,还需要第三个性质Puzzle friendly。该性质要求哈希值计算事先不可预测,仅仅根据输入很难预测出输出。例如:我们需要一个哈希值,存在于某一个范围内,只能通过不停运算查找出来。该性质保证了比特币系统中,只能通过“挖矿”获得比特币。也就是说,该性质保证了工作量证明(POW)机制可以运行下去挖矿难,但验证易
在比特币系统中采用SHA-256哈希函数

签名

比特币中账户管理
在第三方中心化系统中,账户开通依赖于第三方。但去中心化的比特币系统中,很明显不能进行“申请账户”。在比特币系统中,申请账户是用户自己来处理的,即自己创建一个公钥-私钥对。
公钥和私钥的应用保证了“签名”的应用。当在比特币网络中进行转账时,通过“签名”可以明确是由哪个账户转出的,从而防止不良分子对其他账户比特币的盗取。
在发布交易时,通过自己私钥签名,其他人可以根据公钥进行验证,从而保证该交易由自己发起。也就是说,只有拥有私钥,才能将该账户中的比特币转走。

PART3

##数据结构
###Hash pointer(哈希指针)
区块链结构本身为一条链表,节点为区块。而传统链表实现,便是通过指针将各个节点串联起来而称为最终的链。如下便是我们最常见的一个链表:

但在区块链系统中,并未采用指针,而是使用了哈希指针。
如下图对于该节点,我们可以看到有两个指针指向这个节点(实际上为一个),其中P为该节点的地址,H()为该节点的哈希值,该值与节点中内容有关。当节点(区块)中内容发生改变,该哈希值也会发生改变,从而保证了区块内容不能被篡改。

区块链与链表区别:哈希指针代替普通指针
如图为一个简单的区块链。其中,每个区块根据自己的区块内容生成自己的哈希值,此外,每个区块都保存有前一个区块的哈希值。需要注意的是,本区块哈希生成依赖于本区块内容,而本区块内容中又包含有前一个区块的哈希值。从而保证了区块内容不被篡改。

如图中所示,如果我们想要破坏区块链完整性。篡改B的内容,而C中保存有B的哈希值,所以C也得进行修改。而同样C后区块也得修改。而用户只需要记住最后一个区块链的哈希地址,就可以检测区块链上内容是否被篡改。
希值,所以C也得进行修改。而同样C后区块也得修改。而用户只需要记住最后一个区块链的哈希地址,就可以检测区块链上内容是否被篡改。
在实际应用中,一整条链可能会被切断分开保存在多个地方。若用户仅仅具有其中一段,当用到前面部分区块数据时,直接问系统中其他节点要即可,当要到之后,仅仅通过计算要到的最后一个哈希值和自己保存哈希值是否一致可以判断所给内容是否确实为区块链上真实的内容。