Still in quarantine :(
前言
上研究生的时候,我当时有一个课题就是关于区块链的。我还记得当我刚开始研究区块链的时候,是多么的痛苦,不过最后也算挺过来了。但这也不代表着我现在对区块链有多深的造诣和了解,不可否认,区块链技术确实挺有意思的。去中心化,哈希加密,工作量证明,了解这些概念都对加深对编程的了解有很大的帮助。什么?这些概念你都没听过?没关系,我打赌你一定听过这个—比特币(Bitcoins)
Bitcoin
It is the first decentralized peer-to-peer payment network that is powered by its users with no central authority or middlemen (bitcoin.org)
去中心化(Decentralization)
我们是否想过这样一个问题?为什么我们会使用微信,支付宝,和各大银行的金融服务?因为大家都使,还是因为我们信任这些公司?信任,听上去有些看不见摸不到,但是正是因为信任,我们依托第三方机构来完成我们的交易,从而形成了所谓的中心化网络。而比特币,其实可以说是比特币网络打破了这个传统结构,无需第三方介入,通过加密和区块链技术来实现去中心化。当然,上面提到的只是宏观上对于比特币的解释,它到底是怎么交易的呢?
交易(Transaction)
要想弄清楚比特币是如何交易的,我们就得弄清楚上面的图到底说了些什么?我们可以注意懂上图主要有三个元素
- Public key
- Private key
- Hash
通过上面的这三个元素,我们需要明白每一次比特币发生的交易需要用到两种加密技术
哈希算法
- 加密数值基本不可逆(很难解码)
- 在原始数据不同的情况下,不会出现相同的hash value
非对称加密算法
- 两个钥匙:(公钥和私钥)
- 加密过程:通过算法和公钥对数据进行加密
- 解码过程:通过加密过程的算法和私钥进行解码
OK!基本概念讲完了,现在我们来看比特币的交易过程。举例:现在有A同学想转账100给B同学
- 首先我们要把交易信息(100)和要发送的地址(B同学的公钥)做哈希加密获得一个哈希值(h1)
- 我们用A同学的私钥对h1来进行加密,得到一个加密值s1(签名过程)
- 我们将签名s1和交易信息发送给同学B
- 同学B收到信息后,用A同学的公钥来对s1进行解码得到哈希值h1
- 同学B用自己的公钥和交易信息进行哈希加密得到哈希值h2
- 验证h1和h2是否相同
- 交易验证后,就像比特币网络进行广播,而这笔交易会被打包进区块中,再挖掘下一个区块时,这笔交易得到全网共识后,交易就算完成了
在比特币系统中,公钥生成的钱包地址用于接收比特币,而私钥则用于比特币支付时的交易签名。
在支付比特币时,比特币的所有者需要在交易中提交自己的公钥和该交易的签名。
而比特币网络中所有节点可以通过所提交的公钥和签名进行验证,从而确认支付者对交易的比特币的所有权。
在这来给大家提供一个别人发开的小demo,有助于我们来了解比特币的交易Demo
挖矿(Mining)
想要交易,我们首先得有本金。比特币从哪里来的呢?比特币其实是一种工作量(Proof-of-Work)的一种奖励。上文我们提到,每一笔交易都会被广播到网络中,而挖矿是对节点上接收到的交易进行工作量证明
工作量证明:使用CPU的算力进行穷举法,有概率性的计算出所需要的目标值,如一串开头有N个0的哈希值。
用Python实现一个简单的区块链模型
Block.py
1 | import hashlib as hasher |
Blockchain.py
1 | import hashlib as hasher |
main.py
1 | from Blockchain import blockchain |