0%

BTC十---回顾问答

BTC问答回顾

1.转账交易的时候,如果接收者不在线(你转账给A,但是A那时候没有连接到比特币网络上)怎么办?

这个时候不需要接收者在线,转账交易只不过要在区块链上记录一下。

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

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

3.如果你账户的私钥丢失了该怎么办?

其实是没有办法的,这个账户上的钱就变成了死钱,永远取不出来,去中心化的系统大家没有办法给你重置密码。

有些加密货币的交易所,一般来说,这些交易所都是中心化的机构,那么在交易所办一个账户的时候一般来说是要提供身份证明的,这种情况下,你把你的交易货币保存在交易所里,那么私钥实际上是由交易所来保管的 ,你登陆这个交易所是按照登陆银行差不多的程序(有一个账户名,一个密码),登陆的时候,一般来说还需要二次验证(google 身份验证器),如果私钥丢失是可以在交易所查到的;

有些在线钱包也提供私钥保管的功能,但并不说这些机构为我们自己保管私钥更加安全,目前这些机构仍处于缺乏监管的状态,历史上出现过交易所被黑客攻击的情况,其中最著名的例子就是Mt.Gox的例子,Mt.Gox曾经是世界上最大的交易所,交易量占到了全球的交易量的70%。后来被攻击了,CEO被判刑。

相比来说,冷钱包或者硬钱包更加安全。

4.如果你的私钥泄漏了怎么办?(你发现你的账户上出现了一些可疑的交易)

这个时候你应该把你账户上的钱,转到另一个安全账户上。(这个也和现实中银行的体验不太一样)

比特币账户创建之后,公私钥对都是没有办法修改的

5.如果转账的账户地址填错了怎么办?

没有办法取消以前发布的交易,比特币中转账的交易一旦发布在区块链上就没有办法取消了,它没有提供这种机制取消一个已经发布的交易,如果你知道是谁的地址,可以跟他联系一下

也可能转给不存在的地址(有些地址其实不是公钥的哈希得到的:digital commitment:你想证明某个时间你知道了某个知识,可能只是一个文件取了哈希)

在Proof of Burn中提到的OP_RETURN后面可以写所有的去哈希的内容,上面的内容没有人管,这是推荐采用的方法,但是有的人不这么干:有人用内容取哈希之后得到的哈希值生成一个看上去像比特币地址的东西,这时候转账给这个假的地址,这样转账的钱就变成了死钱,这种做法,就是牺牲很少一点的比特币,换取往这个区块链里写入这个哈希值的一个机会。后者的做法是不提倡的,因为这样转账交易的输出会永久的保留在UTXO里,对全节点不友好

6.Proof of Burn的机制是怎么执行的,不是说OP_RETURN会无条件地返回错误吗?那这个交易是怎么通过验证的?

验证时候:是把当前这个交易的输入脚本和这个交易(币的来源)的输出脚本拼接,这个过程是不可以发生错误的,关键在于,OP_RETURN是写在当前交易的输出脚本里的,所以验证当前交易的合法性的时候不会执行当前语句(因为他是输出脚本),有人想花这个钱的时候,才会执行这个输出脚本,因为OP_RETURN永远都返回错误,所以永远都不可能花出去。

7.会不会有的矿工偷答案?(其他矿工发布了一个nonce,这个矿工没有找到这个nonce,他收到这个区块之后,查一下这个nonce是符合要求的,然后就把他当成自己的nonce发布出去)你怎么知道哪个nonce是属于哪个矿工的?

发布的区块里,会发布一个coinBase tx,里面会填一个收款地址,谁挖到了矿,就填谁,如果你要抄答案,那么你要把收款人的地址换成自己的地址,而这个地址发生变化的话,coinBase tx的内容就会发生变化,这样会导致这个Merkle tree的根哈希值发生变化,而这个nonce在块头里,根哈希值也在块头,block header的哈希值发生变化之后,原来找到的nonce就作废了。所以你不可能偷答案,因为每个矿工挖到的nonce是和自己的收款地址绑定在一起的。

8.交易费可以看作是发布区块的时候给矿工的一点小费,那么你怎么知道这个交易费该给那个矿工?事先你怎么知道哪个矿工会挖到矿?

事先不需要知道哪个矿工得到这个交易费,只要total inputs > total ouputs,这个差值就是交易费,给谁不需要事先知道,哪个矿工挖到矿了,就可以把这些差额收集起来,作为自己的交易费。