北京大学肖臻老师《区块链技术与应用》公开课笔记(十一):BTC回顾问答
一些问题及其解答
转账交易时候,如果接收者不在线(没有连在比特币网络上)怎么办?
转账交易只需要在区块链上记录,将某账户比特币转到另一账户,而接收方是否在线并无影响。
假设某全节点收到某个转账交易,会不会有可能转账交易中收款人地址该全节点从未听过。
可能,因为比特币账户只需要本地产生即可。只有该账户第一次收到钱时,其他节点在验证订单合法性时才能知道该节点的存在。
如果账户私钥丢失怎么办?
没有办法。因为比特币是去中心化货币,没有第三方中心机构可以重置密码,所以账户上的钱也就变成了死钱,转不出去。
通过加密货币交易所(中心化机构),一般是这个机构来集中保存用户私钥,然后给用户类似账号密码的东西,然后交易一般还需要提供身份证明,如果忘记了私钥,可以向交易所询问。但目前这类货币的交易所,尚且处于缺少监管的状态,并不一定具有可信力。而且,其本身仅起到“中介”作用,与该提问的回答“私钥丢失无法追回里面的比特币”并不冲突。
在历史上,有很多次交易所被黑客攻击偷走大量加密货币的事情,其中最著名的为Mt. GOX(中文译为:门头沟)事件。该交易所曾经为全球最大比特币交易所,交易量占到全球比特币交易量的70%左右,设于日本。后来由于被攻击丢失大量比特币,导致交易所破产,其CEO被判刑入狱。
此外,也有交易所监守自盗,工作人员卷款跑路。
私钥泄露怎么办?
没办法,因为去中心化机构没有第三方中心机构重置密码或冻结账户,只能尽快将剩余BTC转到其他安全账户上,只能自己对自己负责。
且BTC系统中账户便是公私钥对,密码就是私钥,无法更改。
转账写错地址怎么办?
没有办法,只能自认倒霉,无法取消已经发布的交易,也没有类似退款的渠道。如果转入不存在地址,则该部分比特币便成为了死钱,当然,比特币系统中UTXO会永久保存该交易,记录该并不存在的地址。因此,对全节点来说,转入不存在的地址是不友好的。
OP_RETURN
之前在BTC脚本中介绍了OP_RETURN指令,我们提到,这种方法为普通用户提供了一个向比特币网络中写入想要一直保存的内容。但OP_RETURN执行结果是无条件返回错误,而交易返回错误,区块又怎么会包含它?区块链又如何会接收这个区块?
其实OP_RETURN是写在输出脚本里的,而验证交易合法性是这个订单的输入脚本连接这个币的来源的输出脚本执行,所以验证当前交易合法性时,并不会执行该语句。只有在有人想花这笔钱时候,才会执行该语句。
BTC系统挖矿,会不会有矿工“偷”答案?
例如:某个矿工发现其他矿工发布了nonce,收到后验证该区块合法,将该nonce作为自己找到的nonce发布出去。
实际上这是不可能的。发布的区块中有一个coinbase tx,因为要确定出块奖励给谁,其收款人地址为挖到矿的矿工地址,如果要偷答案,需要修改该收款地址,而收款地址改变,铸币交易内容也发生改变,从而引发Merkle Tree根哈希值改变。从而导致原本的nonce作废。也就是说,不可能会“偷”答案。
怎么得知交易费发给谁
事先无需知道谁会挖到矿,交易中总输入大于总输出时就说明有交易费,差额就是交易费。哪个矿工挖到矿,在打包交易时,可以将这些交易费收集起来作为自己获得的交易费。
BTC的统计数据
图1:BTC区块链大小变化情况(至2018年)
因为区块链只能添加,不能删除,所以是不断变长的。但是对于当前硬盘内容来说,保存其没有问题。
图2:UTXO集合大小变化情况(至2018年)
整体也是增大的,而且交易增多,私钥丢失等都会导致UTXO增大。
图3:BTC矿池挖矿情况(至2018年)
集中化趋势严重!
图4:BTC价格变化情况(至2018年)
波动很大
图5:BTC市值变化情况(至2018年)
和图4基本保持一致
图6:BTC交易量变化情况(至2018年)
由于是按照美元价格计算得到,所以波动的一部分原因跟比特币自身价格有关系
图7:BTC交易数目变化情况(至2018年)
总的趋势也是增长
图8:每个区块交易数目变化情况(至2018年)
因为维持了出块时间相对稳定,所以每个区块的交易数目和总的交易数目的趋势是大致相同的
而且我们也可以看到当前每个区块的交易峰值也不过2500,还是低于4000这个上限,所以尽管很多人说到的1MB区块太小,另一方面实际中很多区块没有装满。