问题1: 数值货币与传统的现金支付区别?
数字货币实际上就是一个文件,他与传统的现金最大的区别在于:数字货币是可以复制的。
对于数字货币可复制特性就会产生double spending attack。
问题2: 怎么防范double spending attack ?
解释:第五个区块中B向G与H交易,那么第五个区块的B交易会向前面区块检查,发现在第三个区块中已经将B的比特币交易给了C与D所以第五个区块中的B交易是非法交易,避免了double spending attack。
问题3:A向B转账需要哪些参数信息?
- A的签名
- B的公钥,通过B的公钥进行hash计算,经过转化可以推算出B的地址(也就相当于现金社会中的银行账户)
- A的公钥,目的是证明A的比特币来源
问题4:怎么验证两个交易通过呢?
用A交易的输入脚本与前一个交易输出的脚本放在一起执行,执行通过证明交易合法,反之不合法。
区块包含:block header与block body
block header包括:
- 区块版本version
- hash of previous block header
- merkler root hash
- 挖矿难度target
- 挖矿nonce(随机数)
注:hash of previous block header计算的时候只算前一个区块的block header
block body:
- 交易列表
问题5:谁有权利将交易写入区块中?
解释:每个人本地维护一条区块链(账本)?这样不行,原因是不同的区块(账本)会发生对不上的现象,一致性不能得到保证,为了解决这个问题,必须实现分布式共识,也就是比特币协议
协议如下:比特币都可以将自己认为合法的交易写入候选模块中,然后通过寻找不同的nonce争取到记账权。
问题5:有没有block header与block body检查后都满足要求,但是这个区块还是不能接受的情况?
解释:若区块不在最长的合法链中不被就收,该特性避免了分叉攻击。
问题6:两个节点同时获取记账权,同时发布区块会怎样?
这种情况该状态会维持一段时间,直到有节点在下一次竞争中胜出。