区块链学习笔记10——课堂问答

十、课堂问答

问题一:转账交易的时候如果接收者不在线怎么办

(比如说,你想把某个比特币转给某个人,那个人当时没有连到比特币网络上,这个时候会出现什么情况)

答:接收者不需要在线,转账交易只不过在区块链上记录一下,把我账户上的比特币转到他的账户上,和当时是不是连在比特币网络里是没有关系的

问题二:假设某个全节点收到了一笔转账交易,有没有可能这个转账交易中接收者的收款地址是这个节点以前从来没有听说过的

答:可能,比特币在创建账户的时候是不需要通知其他人的,在本地产生一对公私钥就可以了,只有在以后产生这个收款地址第一次收到钱的时候,其他节点才知道这个账户的存在。

问题三:如果你账户的私钥丢失了该怎么办

答:私钥丢失之后其实是没有办法的,账户上的钱变成了死钱,永远取不出来,这跟我们平时生活体验不一样,银行的账户密码丢了,可以去银行查验一下身份,然后重置密码。在去中心化的系统里,像比特币的系统里,是没有人给你重置密码的。

另外讲一下,有些加密货币的交易所,一般来说,是中心化的机构,在交易所开发账户的时候,一般是要提供身份证明的,如果你想在某个加密货币的交易所有个自己的账户,类似于银行开户一样,一般是经过身份验证,这种情况下。你把你的比特币保存在交易所里,那么私钥一样是由交易所来保管。登录这个交易所的话,是跟银行差不多的程序,输用户名和密码,一般来说还有二次验证。这种情况下,如果账户密码丢失了,是可以去跟交易所联系,通过身份验证之后,重置密码,这和刚才讲的比特币的私钥丢失是很不一样的。有一些在线钱包也提供保管私钥的功能,并不是说这些交易所和在线钱包比我们保管私钥更安全。加密货币的交易所缺乏监管的状态,历史上曾经发生了很多次加密货币的交易所被黑了的情况,黑客从里面偷走了大量的加密货币,最著名的例子是,曾经是全世界最大的比特币交易所,交易量占到全球交易量的70%,设在日本,后来被黑客攻击,丢失了大量的比特币,这个交易后来破产了,他的CEO后来被判刑了,而且这个不是个例,各种加密货币交易所出现问题的情况发生过很多次,也有的是交易所监守自盗,有的工作人员管理层的卷款跑路了,都发生过。

问题四:假如私钥泄露了怎么办

(比如发现自己账户上出现了一些可疑的交易,应该怎么办)

答:应该尽快地把账户里的钱转移到另一个安全账户上。

也跟平时生活体验不太一样,如果银行账户上出现一些可疑的交易,可能首先想到的是,通知银行,能不能把密码重置了,然后把账户冻结,免得别人把钱取走,这些在区块链的世界里做不到的,比特币账户所谓的密码就是私钥,产生账户的时候用的公私钥对,公私钥对一旦生成之后是没有办法改的,也没有办法改成另外一个私钥,可以生成一个新的账户,但是原来那个账户的私钥是改不了的,同样你也没有办法阻止别人从这个账户转账的交易,任何有私钥的人都可以发布一个转账交易,把这个这个账户上的钱转走,这个也是没有办法冻结的,你能做的只有抢在别人把你的钱转走之前把这个账户里的钱转移到一个安全的账户上

问题五:如果转账的时候写错了地址怎么办

(比如说本来想把钱转给某个人,但是写错了,转给另外一个人)

答:没有办法,没有办法取消已经发布的交易,比特币种转账交易一旦发布到区块链上,就没有办法取消了,没有这种机制来取消已经发布的交易,如果你转到别人的地址,知道是谁的地址的话,可以跟对方联系一下,看看他愿不愿意把钱还给你,但这个也只能商量,没有办法强迫,如果不知道是谁的地址,或者转的是不存在的地址,那就没有办法了,不存在的地址就是,有些地址不是公钥的哈希产生的,比如digital commitment,想把某些地址的内容发布到区块链上。z证明曾在某个时间知道某个事情,比如说有个文件,想要取个哈希,放到区块链上,讲比特币脚本的时候,讲过一种比较经典的说法Proof of Burn,OP_RETURN,可以把要发布的哈希值放到OP_RETURN后面,这个后面写什么反正是没有人管的,这个是个比较标准的做法,是推荐采用的方法,但是有人不这么干。他用这个哈希值生成一个看上去像比特币地址的东西,就比如说A->B,B应该是某个公钥去哈希值得到的地址,然后他就把要保存的那个哈希值生成一个地址,作为收款人的地址,这个地址没有对应私钥,其实是个假的地址,就比特币系统并不知道这个地址是真的还是假的,这个哈希值是怎么来的,别人也会看不出来,所以这样转账的钱就变成死钱了。这个钱永远不可能被取出来。这种做法一般牺牲一点比特币,比如说转很少的钱0.01BTC换取往这个区块链里写入哈希值的一个机会,这个做法是不提倡的,因为这个转账交易的输出会永久的保存在UTXO里面,全节点收到这个转账交易其实并不知道这个地址是真的还是假的,所以他必须永久的保存起来,这个对全节点是不友好的。

实际的操作:
比如一个全节点收到一个转账交易的时候,首先检查一下交易的合法性,只有合法的交易才会被写入区块链里,OP_RETURN是无条件的要返回错误,那么既然他无条件的返回错误,那么怎么通过验证,怎么可能被写到区块链里呢,验证的时候是把当前的这个输入脚本跟前面那个币的来源的输出脚本拼在一起看能不能顺利执行,这个执行过程中,是不可以抛出错误的,如果抛出错误就不是合法交易,关键是OP_RETURN是写在当前交易的输出脚本里。所以验证当前交易合法性的时候不会执行这个语句。有人想花这个钱,后面执行到这个输出脚本才会执行OP_RETURN。

问题六:比特币挖矿就是在尝试大量的nonce,看看哪个nonce是符合难度要求的,那会不会有矿工偷答案,就比如说他自己没有找到合适的nonce,其他矿工发布了一个这个nonce,他收到这个区块之后,查一下这个nonce是符合要求的,然后就把他作为自己找到的nonce发布出去,就是你怎么知道是哪个矿工最先找到的这个nonce?

答:发布的区块里有一个coinbase tx,里面有一个地址,比如说A挖到矿,那么就是A的收款地址,如果要偷答案的话,要把这个收款地址换成你自己的地址,如果地址发生变化的话,coinbase tx的内容就发生了改变,导致Merkcle tree的根哈希值会发生变化,因为这个交易是和区块里的其他交易合在一起构成的

Merkcle tree,任何一个地方发生改变,最后根哈希值就会变,而这个nonce是在块头里面,根哈希值也是在块头里面,block header里面的内容发生改变之后,原来找到的nonce就作废了,所以不可能偷答案,因为挖到的nonce是和自己的收款地址绑在一起的。

问题七:交易费是给发布一个交易的时候给矿工的一点小费,那么你怎么知道这个交易费该给哪个矿工?(就是事先你怎么知道哪个矿工会挖到矿)

答:事先不需要知道哪个矿工会得到这个交易费,总输入-总输出=交易费,哪个矿工挖到矿,就可以把这个区块里所包含的那些交易,那些差额都收集起来作为他自己的交易费。

下面看一下比特币的一些统计数据

下面显示的是比特币区块链大小的统计情况

可以看到区块链是越来越大的,区块链只能往里面添东西,它的长度越长,size就越来越大。

区块链学习笔记10——课堂问答_第1张图片

这个是UTXO集合的大小,总趋势不断变大,有些波动,主要原因是,比特币上面交易多了之后,UTXO会跟着一起变大,还有历史的原因,可能有些账户是私钥丢失了,所以这些账号对应的输出在UTXO里就要永久的保存下去,时间长了,这种情况累计下来也会变多一点

区块链学习笔记10——课堂问答_第2张图片

比特币矿石挖矿的情况,挖矿集中化的趋势也是比较严重的,几个大的矿石,占了系统中总算力的很大一部分

区块链学习笔记10——课堂问答_第3张图片

比特币的价格变化情况

区块链学习笔记10——课堂问答_第4张图片

比特币市值的变化情况,这个市值是绝对的市值,不是说在加密货币中占的百分比

区块链学习笔记10——课堂问答_第5张图片

比特币的交易量,是按照美元价格算出来的交易量,所以这个波动当中,有一部分是比特币本身的价格造成的

区块链学习笔记10——课堂问答_第6张图片

比特币的交易数目

区块链学习笔记10——课堂问答_第7张图片

每个区块的交易数量,跟前面的曲线的形状很相近,是因为每天产生的区块数目是差不多的,难度调整算法要把出块时间调整在十分钟,这样的话,每天能产生多少区块就是差不多的,交易数目的变化主要就是因为每个区块里所包含的交易数目发生了变化,按照1M的字节,出块时间10分钟,每个区块差不多4000个交易,现在这个情况是远远没有达到这个上限,有人说,1M太小了,真实的情况是区块一般是没有装满的。
区块链学习笔记10——课堂问答_第8张图片

你可能感兴趣的:(区块链,区块链,比特币)