问题一:比特币系统转账交易时,对方如果不在线,会出现什么问题?
转账交易时,不需要对方是一定在线的,因为转账只是在区块链系统数记录一下,把当前的账户的比特币转到对方账户上,对方是不是当时在区块链网络里,这个是没有关系的。
问题二:假设谋个全节点接受到了转账交易, 有没有可能转账交易中接受者的收款地址是这个节点以前没有听说过的?
可能,比特币在创建账户的时候,是不需要通知其他人的。在本地产生一个公私钥对就可以了。只有在以后产生的收款地址第一次收到钱的时候,其他节点才知道这个账户的存在。
问题三:如果你的账户私钥丢失了,该怎么办?
私钥丢失是没有办法的,账户上的钱就变成了死钱,永远取不出来。这个跟我们平时的银行不一样,如果是银行卡丢失了密码或者银行卡丢了,可以去银行查验一下身份,来找回丢失的密码或者补办卡,但是在去中心化的系统里,是没有人能可以担当重置密码责任的。
另外说明,如果是在交易所开户账户,交易所本身是一个中心化的系统,那么需要提供身份证给交易所来验证身份,那么你在交易所上开一个账户,实际上是由交易所帮个人保管了私钥。登录交易所的时候,是按照登录差不多银行的程序来登录,会有一个账户和密码。那么如果客户的这个交易所的账户密码丢失是可以去交易所去找回。
但是目前的交易所并没有一套完整的监制体系,日本的 ”门头沟(Mt.Gox)“交易所就发生过被黑客攻陷的例子。
想比之下,冷钱包或者硬件钱包还是比较可靠的。
问题四:如果你的账户私钥泄露的怎么办?发现一些不是你操作的交易?
首先,应该尽快的将当前账户上的钱,转移到另外一个安全的账户上。
如果是传统的中心银行,那么可以通知银行,将密码重置。但是在区块链的区中心化是做不到的。比特币账户的密码就是私钥,公私钥对一旦生成是没有办法进行修改的。可以重新生成一个新的账户,但是原来账户的私钥是改变不了的。同时,我们也没有办法去阻止别人向这个已有账户转账的交易。
所以能做的只能是,第一时间抢在别人钱,把自己账户上的钱,转移到一个安全的账户上。
问题五:如果转账的时候,写错了地址该怎么办?
没有办法,BTC是不提供撤销交易的。如果可以知道对方是谁,可以交流对方是否愿意将钱转回来,但也只能是交流,无法进行强迫。如果不知道对方是谁,或者转的是一个不存在的地址,那么就没有办法了。
如果是假地址,UTXO全局变量会永久的保存这条记录。
问题六:在挖矿的过程中,如何判断是哪个矿工最先找到的这个nonce(防止nonce抄袭)?
发布的区块里有一个"coinbase tx". 里面有一个收款人地址,是记录挖到矿的矿工地址。如果要偷答案的话,偷答案者需要将这个收款人地址换成自己的地址。那么“coinbase tx”的内容就会发生变化。这样会导致,梅克尔树的根哈希值会改变。那么block header保存着梅克尔树的根哈希值。那么block header也会变。那么原来找到的匹配的nonce就会作废,所以不可能产生“偷答案”的情况。
问题七:交易费是给矿工的小费,那么如果判别该给哪些矿工?
事先不需要知道哪个矿工会得到这个交易费。
只要total inputs
> toal outputs
这个差额就是交易费。在发布的交易里面,一个交易可以有很多的输入和很多输出。那么总的差额就是当前区块的交易费。哪个矿工挖到这个区块,那就就可以将差额的交易费获取到,作为他自己的交易费。
关于作者:
作者:Aceld(刘丹冰)
mail: danbing.at@gmail.com
github: https://github.com/aceld
原创书籍: https://www.kancloud.cn/@aceld
文章推荐
开源软件作品
(原创开源)Zinx-基于Golang轻量级服务器并发框架[完整版(附教程视频)]
(原创开源)Lars-基于C++负载均衡远程调度系统[完整版]
精选文章
使用Golang的interface接口设计原则
深入浅出Golang的协程池设计
Go语言构建微服务一站式解决方案
Golang中的局部变量“何时栈?何时堆?”
[典藏版]Golang三色标记、混合写屏障GC模式图文全分析
有疑问加站长微信联系(非本文作者)