区块链100问之交易机制、账户
文章目录
- 区块链100问之交易机制、账户
- 比特币和以太坊的交易机制分别是什么?
- Account模型运行机制?
- UTXO模型运行机制?
- 交易是如何确认的?如何评估?如何上链?
- 什么是SPV?如何运作?
- 除了SPV验证,Merkle Tree还有什么作用?
- 交易的分类?
- 如何解决双花问题?
- 比特币上账户地址生成用什么哈希算法?
- 比特币和以太坊对比?
- PS
比特币和以太坊的交易机制分别是什么?
答:
-
比特币交易模型是UTXO
-
以太坊交易模型是Account —>联盟链也是
更多是用在智能合约型的区块链上
Account模型运行机制?
答:
Account:Account Based
- 传统账户模型:余额作为状态
- 中心化系统中,甚至在同一个数据库中,会直接退化成一个事务
- 特点:交易只是事件本身,不包含结果,交易的共识和状态的共识本质上可以隔离的。
- 缺点:
- Account 模型交易之间没有依赖性,需要解决重放问题
- 实现闪电网络/雷电网络,Plasma 等,用户举证需要更复杂的 Proof 证明机制
UTXO模型运行机制?
UTXO:“Unspent Transaction Output“
- 思路:无状态,只记录交易事件而不记录最终状态,需要用户自行计算余额。
- 输入输出满足条件:
- 任意交易至少一个输入、一个输出
- 输入全部移动 输入金额= 输出金额之和 + 交易手续费
- 构造交易之后广播到全网
上述交易TX中,每笔交易都可以找到向前交易,TX4的向前交易是TX2,TX2的向前交易是TX0;可以发现TX6的收款人未花费,则output0就是UTXO的真正语义---->Unspent Transaction Output,未花费的交易输出。
-
特点:
- 较好的并行支付能力,一笔交易可以包含任意笔输入输出,同时也没有次序要求
- UTXO 具有较好的可裁剪特性,可以压缩数据。在任意位置截断,记录 UTXO 对应的交易哈希即可,然后从其他节点获取并校验 UTXO,这也是 SPV 轻钱包工作的基础之一
-
缺点:
-
Blockchain-blindness:只能查看自己的历史轨迹
将比特币系统上的所有交易执行一遍,将所有由自己解锁的,同时还没有被“花费”的交易输出收集得到自己余额
-
Value-blindness:不能提供非常精细的金额控制
-
矿工上块时就会验证。
交易是如何确认的?如何评估?如何上链?
答:
- 如果请求少,则等10min,下一个区块就确认上链;如果请求多,拥堵就需要排队,矿工不断从等待记录的转账交易选手续高的进行转账;一旦已经交易确认,已被网络处理,不太可能被撤销(后续的每一个区块都是对这个交易的确认)。
- 小额交易,则单块确认;大额交易,需要6个区块进行确认(也就是1小时)
什么是SPV?如何运作?
答:轻钱包SPV(Simplified Payment Vertification)
- 未存储交易数据的节点,判断交易真实性,发请求Merkle Block Message
- 存储交易数据的客户端收到请求,将验证路径返回
- 查交易,找区块TX1
- 数据结构=>关系型数据库,用sql查询
- 时间戳定位区块位置
- 可以借助中介(第三方网站)
- 检查区块是否在网络的最长链条里
- 取出所有交易生成的Merkle Tree,get Proof方法得到交易验证路径
- 验证路径发送回请求端
- 查交易,找区块TX1
- SPV得到路径,做merkle校验,确认无误认为可信
除了SPV验证,Merkle Tree还有什么作用?
答:
-
最直接的就是判断数据是否被篡改
在区块内部存放各层各交易的哈希值以及root哈希值,由于高一级的hash被下层交易锁影响,下层交易修改,高一级哈希不再匹配
-
P2P下载
从多个节点下载的数据块,如何验证未被修改?
- Hash List:计算每个数据块的哈希值作为一个列表,并做一个根哈希,类似merkle tree 的逻辑结构
- 下载方接收到根哈希和哈希列表(种子文件),来验证自己下载的区块完整性
-
成员隶属证明(Proof of Membership)
整棵树不完整的情况下快速判断数据块是否合法
总结点数 n T r e e _ h e i g h t − 1 = ⌈ l o g 2 n ⌉ = 验证需要的 H a s h 值个数 时间复杂度为 O ( l o g ( n ) ) 总结点数n \\ Tree\_height-1=\lceil log_2n\rceil=验证需要的Hash值个数\\ 时间复杂度为O(log(n)) 总结点数nTree_height−1=⌈log2n⌉=验证需要的Hash值个数时间复杂度为O(log(n))
交易的分类?
答:
- 发行铸币(50BTC)
- 转账
没有销毁机制
如何解决双花问题?
答:双花指的是double spent,攻击者同时将一笔钱作为不同的交易或抹掉自己给别人的转账记录。
中本聪提出==>
- 每次交易都要向整个网络广播
- 在P2P网络中最早打上时间戳并挖矿成功的那个交易为交易成功
- 等待多次确认
比特币上账户地址生成用什么哈希算法?
极客时间版权所有: https://time.geekbang.org/column/article/6224
答:
-
在非对称算法中,私钥一般是通过一个随机数产生的,这个随机数也叫做种子,从这个角度来说,知道了这个随机数也就等于知道了私钥,不过私钥的产生范围非常大,在比特币中是 2 的 256 次方,差不多在 10 的 70 方数量级上。
-
如果你产生随机数的算法足够均匀分布,私钥碰撞的可能性比中了 1 亿大奖同时被雷劈中的概率还要小数亿倍。所以区块链对产生随机数的算法要求比较高,它要求真实的均匀随机分布,而不是计算机伪随机数。
如果我们有了私钥,接下来就如图所示:
- 从私钥到公钥,是由非对称加密算法保证的,这种算法在比特币中选择的是 ECDSA 算法,ECDSA 算法中选择的椭圆曲线名为 secp256k1。
- 从公钥到地址,是由哈希算法保证的,在这一步使用了 SHA256 和 RIPEMD160。椭圆曲线加密算法 ECC 利用了“寻找离散对数”的难解性提供了单向不可逆性
- 58base编码得到最终结果
比特币和以太坊对比?
比特币 | 以太坊 | |
---|---|---|
编程 | 不支持循环 | 支持智能合约(solidity) |
哈希函数 | SHA256、RIPEMD-160、ECDSA(Secp256k1) | Keccak-256 |
交易模型 | UTXO(不可分,缺少状态) | Account |
难度 | 2016块调整(≈2weeks) | 自反馈机制 |
PS
Token:Token 确实是数字资产的承载形式,但交易并不是数字资产的唯一资产。
区块链基础技术:P2P 网络、共识机制、哈希与加密算法、记账模型(UTXO)
PoS 共识机制改变了 PoW 工作量证明的验证方式,验证区块Token 对应的 Stake,用以替代 PoW 的工作量证明
极客时间版权所有: https://time.geekbang.org/quiz/question?sheet_id=799286&quiz_id=4731