近段时间看了些关于比特币和区块链有关的文章,受益匪浅,所以想记录下来,用自己最直白的话来说自己眼中的比特币和区块链。站在巨人的肩膀上,班门弄斧,如有不妥之处,请多多指教。
一、比特币
1.比特币是什么
简单的说,现在说比特币的价值,就像在上世纪70年代说互联网的价值一样,假设有一天你把“123456”这串数字发给了对方买了一斤猪肉(这个举例有点..),对方收到了这串数字,从而完成了你们的这次交易,那么这也许就是比特币的价值了。你也许感觉有点扯淡,但是从发展的眼光来看,这是必然的,就像20年前谁会相信出门买东西带着手机就可以完成交付一样。钱是虚拟的也是必然的,其实钱也是一直是虚拟的,只是由于技术的限制,所以现在我们使用纸币这个东西来替代。
2.什么是非对称加密
简单的说,非对称加密就是加密和解密需要两把钥匙,一把为公钥,一把为私钥,公钥每个人都有,私钥只有你自己拥有,别人用你的公钥加密信息后发送给你,你用私钥来获取里面的东西,可以这样理解,你的支付宝账号(公钥)每个人都可以获取,对方通过你的支付宝账号转账,不再是直接到账,而是你输入密码(私钥)后才能获取,这样确保这笔钱是属于你自己的。别人也无法盗取你的钱,因为私钥只有你自己拥有。
3.比特币交易
首先要有一个比特币钱包(目前国内不支持购买服务),钱包中存放的不是钱,而是你的公钥和私钥,拥有了公钥和私钥之后就可以去交易了。
根据协议,公钥的长度是512位。这个长度不太方便传播,因此协议又规定,要为公钥生成一个160位的指纹。所谓指纹,就是一个比较短的、易于传播的哈希值。160位是二进制,写成十六进制,大约是26到35个字符,比如 1BvBOSEYstWetqTFn5Au4m4GFg7xJaNVN2。这个字符串就叫做钱包的地址,它是唯一的,即每个钱包的地址肯定都是不一样的。
向别人收钱的时候,只要把你的钱包地址告诉对方就可以了,因此你可以用私钥获取钱包的钱。所以比特币的交易就是比特币地址的转移,比特币的交易完全公开,所以我们可以通过交易地址查询改地址拥有的比特币数量,能否完成这笔交易,为了确保交易的属实性,需要提供:
1.上一笔的交易Hash值
2.交易双方地址
3.对方公钥
4.对方私钥生成的签名文件
交易记录必须写入数据库才真实有效,写入的是一种名为区块链的特殊数据库。(参考)根据比特币协议,一个区块的大小最大是 1MB,而一笔交易大概是500字节左右,因此一个区块最多可以包含2000多笔交易。矿工负责把这2000多笔交易打包在一起,组成一个区块,然后计算这个区块的 Hash。计算 Hash 的过程叫做采矿,这需要大量的计算。矿工之间也在竞争,谁先算出 Hash,谁就能第一个添加新区块进入区块链,从而享受这个区块的全部收益,而其他矿工将一无所获。一笔交易一旦写入了区块链,就无法反悔了。
二、区块链
1.区块链是什么
简单的说,区块链就是一种特殊的分布式数据库,我们常见的Mysql是非分布式数据库,常见的分布式数据库如:Redis、Mongodb,而区块链只是一种特殊的分布式数据库。
任何人都可以架构服务器加入区块链网络成为一个节点,所有节点都存储整个数据库,可以往节点中写入或读取数据库。区块链没有管理员的概念,任何人都可以使用。
2.区块链的组成
区块链由每一个区块组成,每个区块就是每一条数据库记录,每个区块包含区块头(当前区块的特征值)和区块体(实际数据)可以简单想象为数据结构。区块头中包含多项特征值,如生成时间、区块体的Hash值、上一个区块的Hash,Hash可以理解为一种加密,任何字符串通过Hash计算都生成256为的Hash字符串,不同字符串计算的结果不相同。所以每个区块的Hash值都是唯一的,如果区块改变了,他的Hash值肯定会改变,又因为每个区块中记录上一个区块的Hash,而Hash= Hash(区块头),所以如果某个节点的Hash值发生了改变,那么,在他之后的区块肯定会改变。