私钥
私钥 == 256个bit,抛硬币256次就得到了一串私钥
(吃惊的概率!如果我抛出的序列,碰巧这个私钥里面有钱,那余额就是我的,而实际上不可能)
通过私钥产生地址,这时并没有进入账本,只有谁向地址转过一点钱,进入区块链账本,才被大家知道。
私钥就是一切!
数字签名技术
sign() 、verify() 由密码学保证不被破解,开源
转账交易
张三把 "张三向李四转10元",签名 公布
众人验证有余额、签名为true,记录到账本
张三账户余额 -= 10;李四账户余额 += 10;
(实际情况支持 一对一、一对多、多对一、多对多 转账)
中心化记账的缺点
这种区块链技术,其实也可以由 第三方中心化 来记账
但是有以下一些问题:
拒绝服务攻击:检测到 发款方是你,不记账,则余额里面的钱转不出去,废掉了
厌倦后停止服务:记账没啥收益,不搞了
被攻击:破坏服务器,监守自盗,被gov干预……
去中心化记账的流程
人人都可以记账,每个人都可以保留完整的账本,参与P2P网络,监听到全世界的交易,成为记账节点
我获取到的消息 不是来自中心,而是通过P2P,来自其他PC
- 数字签名(私钥,转账信息) == 签名,发送(转账信息,签名),发起一笔交易后,向全网广播。甚至可以发微博、Twitter
- 每个记账节点,持续监听、传播全网的交易。收到一笔新交易,verify(发送人的地址,转账信息,签名)验证准确性后,将其放入本地交易池,并继续向其他节点传播。
- 因为网络传播,同一时间时,不同记账节点的交易池不一定相同
- 每隔10分钟,从所有记账节点当中,[按照某种方式抽取1名],将其交易池作为下一个区块,并向全网广播。
- 其它节点根据最新的区块中的交易,删除自己交易池中已经被记录的交易,继续记账,等待下一次被选中。
记账人的奖励:收到固定BTC(大约4年减半)(这是发行BTC唯一的方式)+手续费
争夺记账权POW(Proof of work)
找到Nonce,使得下面等式成立
SHA256(Nonce,上一个区块的hash,本交易池的交易内容
其中第一笔是打到自己账户的矿工奖励) < 某特定值
找到Nonce的唯一办法:从0开始遍历
遍历完32位Nonce,若还找不到合适的Nonce,就改改交易池内容的顺序
如果有人找到,则看看算对否,
若对,承认这个节点,就去掉交易池中已上链的内容,把他作为父区块的hash,继续找Nonce。
两个节点找Nonce,找到的结果是不一样的:
就算转账内容+排列顺序都一样,但是第一笔:矿工奖励的收款地址是自己的,所以hash不一样
hash(Nonce,父区块hash,本区块内容的hash) < 随机值,
通过调整这个随机值,更具全网算力,调整难度,使得平均挖矿时间==10min
因为随机值比较小,所以开头0很多。
比特币全貌
注意:本文归作者所有,未经作者允许,不得转载