侧链

1.  概念

侧链这一术语在Adam Back等人2014年左右的论文《用楔入式侧链实现区块链的创新》被首次讨论。论文描述了“双向楔入侧链”,这种机制通过证明你已经“锁定”了一些你拥有的货币,从而允许你在一个侧链内操作一些其他的货币。 这里要澄清一个误解。侧链能增加规模,但是这不意味着扩展性。侧链在提升扩展性上并不比增加区块体积优秀。侧链带来的是实验的能力。能够建立以不同的,甚至可能更好的技术为基础的网络。

2. 术语

checkpoint检查点,侧链定期向主链发送merkle root

two-way-peg:双向楔入,在主链锁定一部分token,而允许在侧链拥有其他的token

zk-SNARKs:零知识证明

3.  plasma

Plasma是参考雷电网络,并将其拓展到任何Tx的layer 2 扩展方案,目的是引导大家只将安全级别很高的部分放置在main chain上,其他低安全级别的部分放置在side chain/off-chain上面完成,参考:https://www.bitrates.com/news/p/plasma-design-space-for-custom-blockchains-extending-off-the-ethereum-blockchain 

主链和侧链的交互

通过smart contract交互

Plasma内部是一个tree of blockchain



Plasma MVP

参考

//www.greatytc.com/p/b79eabd4e2a1

https://blog.csdn.net/ITleaks/article/details/82863285

https://ethresear.ch/t/minimal-viable-plasma/426


关键点:

1.  使用merkletree和 UTXO的存储方式

2.  Priority queue:提交exit的时候先放入链中,先入的先处理,防止用户退链的时候,operator也提出退链

3.   利于攸关者的挑战:所有的退出请求都在队列中保留7天,如果有人挑战成功则退出失败

数据结构如下:

Block 只包含hash root和时间戳

struct PlasmaBlock {

     bytes32 root;

    uint256 timestamp;

}

transaction 是经典的UTXO格式

class Transaction(rlp.Serializable): fields = [

('blknum1', big_endian_int),

('txindex1', big_endian_int),

('oindex1', big_endian_int),

('blknum2', big_endian_int),

('txindex2', big_endian_int),

('oindex2', big_endian_int),

('cur12', utils.address),

('newowner1', utils.address),

('amount1', big_endian_int),

('newowner2', utils.address),

('amount2', big_endian_int),

('sig1', binary),

('sig2', binary),]

SubmitBlock: 完成合约内交易后,child chain(plasma contract作为root chain, 其他区块链作为child chain来实现)调用该接口提交交易的hash root 和timestamp到plasma block chain。

Deposit: 实现从主链向合约转token的操作,计算操作的hash root,写入plasma block,如下:

bytes32 root = keccak256(abi.encodePacked(msg.sender, address(0), msg.value));

startDepositExit:存款人从合约中提款到主链,输入block index和amount后计算hash 和plasma block中的root比对,如果一致加入到exit 链中。

startExit:如果存款人转账给A,A提款到主链,需要携带交易所在的block num和merkle proof,合约计算后如果一致加入到exit链中

challengeExit:挑战提款,如果之前A转账给B后,A就发起了startExit/startDepositExit,由于合约无法校验最终的token属于谁,所以需要先放入exitPriority queue,等待7天如果没人挑战就退出,否则B发现后(通过监听退出消息得知)使用该接口,输入A转账B的交易信息后,合约校验无误后,删除A的退出请求。


Plasma CASH

参考

//www.greatytc.com/p/a1c53795ae20?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

https://blog.csdn.net/ITleaks/article/details/83106336

https://ethresear.ch/t/plasma-cash-plasma-with-much-less-per-user-data-checking/1298

关键点:

用户调用deposit将主链的ETH, ERC20, ERC721代币生成coin,coin类似房产,只能整体交易,没法分割,用户在子链通过交易修改coin的所有权(更改coin的owner),可以简化验证,因为只能验证交易是否存在,没有每个用户的余额信息,所以视为整体,不把这个依赖challenge来保证。

使用sparse merkle-tree(相比标准的merkletree主要的优势是除了可以证明存在,还可以证明不存在,这样可以防止operator 构造假的block):https://medium.com/@kelvinfichter/whats-a-sparse-merkle-tree-acda70aeb837 和coin的存储方式


数据结构如下:

struct Coin {

Mode mode;

State state;

address owner; // who owns that nft

address contractAddress; // which contract does the coin belong to

Exit exit;

uint256 uid;

uint256 denomination;

uint256 depositBlock;

}

类似MVP的PlasmaBlock

struct ChildBlock {

bytes32 root;

uint256 createdAt;

}

transaction结构不同于MVP,包含了coin的索引slot

struct TX {

uint64 slot;

address owner;

bytes32 hash;

uint256 prevBlock;

uint256 denomination;

}

submitBlock(bytes32 root):完成合约内交易后,child chain(plasma contract作为root chain, 其他区块链作为child chain来实现)调用该接口提交交易的hash root 和timestamp到plasma block chain。

deposit:实现从主链向合约转token的操作,相比较MVP增加了uid的参数用来标识token的类型,需要将该种coin保存在合约中,并计算操作的hash root,写入child block

startExit:不同于MVP,需要携带之前的该coin的交易和现在的交易,校验这两个交易都存在后,将其放入队列当中,等待7天,如果没有挑战,就可以通过下面的withdraw方法取出,如果有挑战且成功,则将奖励发放给揭发者。相比MVP安全性更高一些

withdraw:在startExit之后没有挑战或挑战失败后,将token取出到主链, 

challengeBefore:提出一个比退出区块早的证据,只能证明提出者的来源的来源是自己。


respondChallengeBefore:针对challenge,如果可以证明之后又转给了自己就是胜利。

challengeBetween:可以证明提出者的来源有问题。直接惩罚


challengeAfter:可以证明提出者后面已经消费。直接惩罚


关于 RootStock


参考

https://github.com/rsksmart/rskj/wiki


采用侧链+公证人的方式实现,流程如下:

用户A转账到federator账户(多签账户)

Federation账户通过钱包内置功能调用rsk-chain的bridge的智能合约的方法(receiveHeaders和registerBtcTransaction)将SPV证明发送过去

Rsk-chain,收到receiveHeaders之后保存header信息,建立一个BTC的header链(类似钱包),收到registerBtcTransaction后解锁对应固定汇率(1:10)的SBTC,并使用用户A的公钥生成账户(这样用户A可以直接控制),将SBTC存入到该账户下

用户A想要从rsk-chain取回BTC,需要调用智能合约方法releaseBtc,销毁对应数量的SBTC

在federator的BTC账户下投票(钱包是通过注册的消息得知),确定将对应余额返回给用户A的BTC账户。

可以看出通信的关键在于federator账户的钱包。


关于BTC Relay

请参考

https://github.com/ethereum/btcrelay

BTC Relay是带有Bitcoin SPV钱包功能的以太坊智能合约,包括 Relayers社区成员:Relayers为BTC Relay提供新的比特币区块头(header),当交易在区块链进行验证或者区块头被检索的时候,Relayer会获得一笔手续费作为奖励,Relayer提交区块头的这种循环——然后处理比特币支付和奖励Relayer手续费的应用程序——使系统能够自立和自治,如下图:



BTC-Relay使用场景举例

1. Alice和Bob同意使用在以太坊上的BTCSwap合约来进行交易,Alice要买Bob的eth,Bob先把他的 eth发送到BTCSwap合约 

2. Alice向Bob发送bitcoin, 

3. Alice通过bitcoin的交易信息以及BTCSwap合约地址来调用btcrelay.relayTx(),btcrelay通过verifyTx接口验证这笔交易通过后就触发BTCSwap合约里面的processTransaction方法

4. BTCSwap合约在被触发后确认这个btcrelay地址是一个合法地址,然后释放之前Bob的eth

大致流程图如下:



可以看出该方案中,bitcoin和ethereum的通信时依靠转帐者调用合约实现的,并且严重依赖relayer不断通过bitcoin的header。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,951评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,606评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,601评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,478评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,565评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,587评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,590评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,337评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,785评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,096评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,273评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,935评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,578评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,199评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,440评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,163评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,133评论 2 352

推荐阅读更多精彩内容