区块链研究实验室 | PlasmaMVP使用javascript实现资金撤回教程
为了更好地理解我的研究,我将PlasmaMVP表示为javascript。MVP是Vbuterin最初提出的minimal viable plasma,旨在以非常简单的方式提供plasma的基本安全特性。
基于此提议,OmiseGo实施了MVP,旨在将来使用Plasma。 我主要使用此实现作为参考。 实际上,Plasma提案的白皮书仍然是高度概述,它还没有提到详细的实现方式。
请注意,OmiseGo-MVP与我的实现有两点不同。 首先,出于简化原因,我不在子链内使用令牌。 其次,子链的operator 将收取交易费作为激励。
我把整个过程分解成5个步骤:
部署根链
操作创建子链
将以太币存入根链
花费UTXO
撤回UTXO
部署根链
根链是一个智能合约,因此它被部署到Ether主网。 根链有5个主要功能。 其中4个由Vbuterin定义为Plasma的最小实现。 (即使'finalizeExits'没有定义,提取资金也很重要)
Operate 创建子链
operator创建的子链仅由operator操作,因此该链是权威证明(POA)链。链上的参与者都信任operator。
当然,如果operator进行任何恶意行为,每个参与者都可以收回存入的资金,operator同时也将受到处罚。
根链有一个主要功能,即'addBlock'。 此功能将一个块添加到子链。 operator的操作只是在本文章中添加一个块。
从本质上讲,Plasma的子链是一个树形结构。由于这种结构,Plasma链实现了极高的可扩展性。Plasma可以非常快速和便宜地处理数千个交易。但是树的结构非常复杂,所以我把子链描述为一个没有分支的单链。
在根链存入以太币
起初,Sam构建了一个输出属于他自己的事务5个以太坊。 请注意,此事务将包含在子链中,以便Sam不会将此事务发送到根链。
由于可伸缩性原因,根链仅包含子链的头。头部只包含2个信息:区块和时间戳内的事务的merkle根。
在存款案例中,包含一个事务,这样merkle root就等于事务哈希。
在Plasma中,像Ether资产存储为一个utxo模型(未占用的事务输出模型)。这与以太坊主网不同,以太坊主网将资产存储为状态模型。UTXO模型与比特币的闪电网络相同。
UTXO表示为以下格式。
块号* 1000000000 事务索引* 10000 输出索引
接下来,子链的operator立即创建一个区块以记录来自Sam的存款以太。 operator在区块添加过程中收取费用作为激励。
UTXO花费
Sam构建了一个输出,其输出属于Alice。 请注意,此交易输入是Sam的UTXO。
接下来,operator将包含Sam的事务的块添加到子链中。
在这一刻,Alice无法使用此事务的输出。 因为此事务尚未包含在根链中。
operator将区块提交给根链。 根据块区内的事务计算根哈希。
Sam注意到事务已包含在根链中。 然后,他向Alice发送确认签名。 从现在起,Alice可以使用收到的UTXO。 撤回她的资金需要这个确认签名。
UTXO撤回
Alice建立'sig'以证明'utxoIncludedTx'由包含来自Sam的确认签名的发件人确认。 Ans She构建'证明'以证明'utxoIncludedTx'包含在根链中。
她将退出事务发送到根链。
在这一刻,Alice没有收到退出的UTXO。 该退出请求至少要查看2周。 在这两周内,有人可以挑战这个退出。 如果Alice是恶意的并且这个退出是欺诈并且挑战者获胜,那么Alice失去了这个UTXO。
退出时间锁定到期后,最后,如果她将退出终结事务发送到根链,Alice会收到UTXO。
Alice收到3个Ether(5个来自Sam,2个来自Operator)
本文转载公众号:区块链研究实验室,专注区块链技术,产品社群,经济模型等全方位的知识体系输出,为大家带来不一样的社群学习体验。欢迎联系作者微信加入社群:csschan1120