实现区块链的跨链,最主要的诉求就是Token的转移,而Token的跨链转移又分为充币和提币2种操作。以PalletOne调色板来说,如果要把ETH跨链到PalletOne上来流转,就是ETH的充币操作,要将PalletOne上的PETH(PalletOne上发行的与ETH1:1等值兑换的Token)跨链回到以太坊,变成ETH,就是ETH的提币操作。

ETH的充币

这里的过程其实和我之前的一篇博客PalletOne调色板Token PTN跨链转网的技术原理 相似,只是我们需要在PalletOne上面创建一个与ETH等值兑换的Token,我们这里就命名为PETH吧。总结一下充币的过程,细节我就不再累述了:

1.用户在以太坊映射和锁定合约上注册映射自己的PalletOne地址。

2.用户将一定数量的ETH转账到该映射和锁定合约。

3.定时任务扫描合约的转入事件,发现有新的转入,就发起PalletOne充币合约的调用,该充币合约检查ETH的转账和地址映射,将同等数量的PETH转账到用户指定的映射地址上。

ETH的提币

用户在获得了PETH后,可以在PalletOne网络进行各种Token操作,比如去中心化交易所的币币互换,游戏合约的道具购买,积分兑换等等。假如另一个用户拿到了PETH,他需要将这些Token变现为ETH,该怎么操作呢?下面我们来详细介绍一下其中的过程。

0.初始化了4个陪审员的公钥到以太坊锁定合约

这个是运营方在设置ETH充币提币合约时就做好的,只需要做一次。ETH的提币合约在PalletOne中是由陪审团来执行,而陪审团是由4个陪审员节点组成。每个陪审员节点都生成了一个以太坊的公私钥和地址,并且将公钥和地址公开到网络上。项目运营方在以太坊的映射和锁定合约(接下来我们就命名为0x1合约)上将这4个陪审员的公钥设置进去,只有这4个公钥中的3个签名才能解锁其中的ETH。

1.(PalletOne钱包)传入ETH收款地址,锁定PETH

PalletOne上面有一个ETH提币合约我们就命名为PC1,用户将自己的PETH转账到PC1,同时在交易的Data Message中提供了自己的以太坊地址。出于降低钱包操作难度的目的,用户无论使用官方PalletOne钱包还是第三方支持PTN的钱包,只要能过进行转账时附言即可。

2.(PalletOne合约)发起提币调用,生成解锁ETH的签名,并最终生成以太坊合约的inputdata

等步骤1的调用被打包后,用户或者定时任务扫描锁定PETH的交易,一旦发现有新的交易,即发起对PC1合约的“提币”方法的调用,该方法读取锁定PETH交易的数据,并由4个陪审员各自用自己的以太坊私钥进行签名,签名后的数据再进行排序,我们只需要取3个签名即可。这个时候,合约已经获得了调用0x1合约进行ETH提币的所有参数:

  • 以太坊ETH映射和锁定合约的地址0x1
  • 用户映射的收ETH的地址
  • 要转网的ETH数量(=转入的PETH的数量-ETH转网Gas费)
  • 锁定PETH的TxHash
  • 3个陪审员的签名

在以太坊锁定合约0x1上,有一个方法:

function withdraw(address recver, uint amount, bytes32 reqid, bytes sigstr1, bytes sigstr2, bytes sigstr3) public

该方法接收的参数都已经完备,所以我们就可以按照以太坊的规则,生成对应的inputData。最终将合约地址0x1,调用的inputData写入到StateDB中,以供专门用于以太坊合约调用的定时任务查询和调用。

3.(以太坊合约)发起以太坊锁定合约的提币,用户获得ETH

定时任务(以太坊合约调用者)扫描PC1合约的状态,一旦发现有新的提币调用,就读取这次提币申请的如下信息:

  • 要被调用的以太坊合约地址
  • 调用合约时传入的inputData(也就是要被调用的合约方法和合约参数编码后的值)
  • GasFee

定时任务根据以上信息,用自己的账号发起对指定合约的调用。调用完毕后,可以获得本次调用的TxHash,定时任务再发起对PC1合约的调用,登记本次ETH提币的TxHash,以便用户能够查询转网的结果。陪审员会根据TxHash去验证转网结果,并更新本次转网提币请求的状态。如果一切正常,用户映射的以太坊收款地址,将收到对应数量的ETH,对用户来说本次转网提币结束。

4.(PalletOne合约)以太坊合约调用者获得GasFee的补偿

因为以太坊的合约调用是需要花费真金白银的ETH的,所以转网提币合约必须对该调用者进行ETH的补偿。我们前面提到:  要转网的ETH数量=转入的PETH的数量-ETH转网Gas费。也就是说,如果我有1个PETH要进行提币,而转网提币的手续费是0.01PETH,那么我最终以太坊钱包会收到0.99ETH。而以太坊合约调用者在步骤3中向PC1合约登记了转网TxHash,陪审员验证转网成功的同时,也会将手续费0.01PETH记账到合约调用者的地址下,合约调用者随时可以从PC1合约提取PETH。

总结

以上就是PalletOne调色板关于跨链以太坊提币的详细过程,我们以锁定PETH的RequestHash作为提币的唯一标识,无论在PalletOne合约还是在以太坊合约中,都使用,主要就是为了防止重放攻击,由于RequestHash是唯一的,不可能碰撞出一模一样的RequestHash,所以合约中只需要检查RequestHash对应的状态,就可以确定下一步该怎么处理。

按理来说,步骤1和步骤2应该是可以合并成一步的,为什么要分开呢?主要是为了预防双花攻击。如果一个人发起了双花交易,这两笔交易都是转入1PETH,但是手续费用的是同一笔UTXO,由于PalletOne的合约是异步执行的,所以陪审团在执行两个提币请求时,并不知道存在双花,所以陪审团都会生成3个签名,而最终在打包的时候Mediator发现双花,只打包其中的一笔。这个时候虽然最终打包是一笔,但从P2P角度来看,整个网络上其实获得了两笔提取ETH的签名,用户可以在以太坊合约中进行两次提币。而分成两步后,就可以杜绝这种情况的发生。

PalletOne调色板跨链的ETH提币实现的更多相关文章

  1. PalletOne调色板跨链的BTC实现

    之前已经讲到了PalletOne调色板跨链以太坊ETH和ERC20的技术原理,接下来我们来讲解PalletOne跨链比特币BTC的技术原理. 一.BTC充币 假如用户A持有一定数量的比特币BTC,他希 ...

  2. PalletOne调色板Token PTN跨链转网的技术原理

    之前一直在忙于通用跨链公链PalletOne的研发,没有怎么做技术分享的博客,最近PalletOne主网上线也有几个月的时间了,即将进行PTN(PalletOne上面的主Token)从ERC20到主网 ...

  3. BlockChain 的跨链技术的重要性和必要性

    本期我们将从跨链技术的重要性和必要性.畅想区块链未来世界.什么是跨链.目前四种跨链技术的对比.构建EOS同构跨链体系群.EOCS跨链技术介绍.跨链通道.中继等几个层面带大家走进EOS跨链和EOCS的世 ...

  4. SmartRaiden 和 Lighting Network 进行去中心化跨链原子资产交换

    作者介绍 虫洞社区·签约作者 steven bai 前言 如果能够进行以太坊和比特币跨链原子资产交换,是不是一件很酷的事情? 目前链下的扩容方式有很多,最广为人知的就是比特币的闪电网络和以太坊的雷电网 ...

  5. web3.js支持SimpleChain跨链调用

    SimpleChain的跨链协议已经对外开放很久了,很多应用也已经慢慢支持Simplechain的跨链.最近社区开发者web3.js中集成了Simplechain的跨链接口,开发者只需用npm安装包文 ...

  6. Bystack跨链技术源码解读

    Bystack是由比原链团队提出的一主多侧链架构的BaaS平台.其将区块链应用分为三层架构:底层账本层,侧链扩展层,业务适配层.底层账本层为Layer1,即为目前比较成熟的采用POW共识的Bytom公 ...

  7. ES Bridge跨链桥服务升级,新增BSC跨链网络

    3月15日,Equal Sign Bridge(ES Bridge)跨链桥宣布新增BSC跨链网络,方便更多用户参与到ES Bridge的建设与发展,未来还将持续拓展更多的主流跨链币种,提升各链间的互操 ...

  8. EOCS跨链核心技术内幕

    EOCS跨链技术的核心就是ICP模块,ICP即Inter Chain Protocol(跨链交互协议),下面着重介绍ICP工作原理和实现细节. Inter Chain Protocol(ICP) IC ...

  9. 基于SimpleChain Beta的跨链交互与持续稳态思考

    1. 区块链扩展性迷局 比特币作为第一个区块链应用与运行到目前为止最被信任的公链,其扩展性问题却持续被作为焦点贯穿着整个链的发展周期.事实上,在2009年1月4日比特币出现的那一天到2010年10月1 ...

随机推荐

  1. liunx新装tomcat之后,tomcat不能识别新发布的项目

    遇到的问题 在liunx新装tomcat之后,发布之前的项目,发现在tomcat不能识别新发布的项目,打成war包,还是直接把项目拷贝过去都不行. 环境:虚拟机:VMware 主机系统:win10 虚 ...

  2. 在C#中进行时间和时间戳的转换

    一.时间转换为 毫秒时间戳 由于 UTC 和 中国时区有时间差, 所以我们在时间转换为时间戳的时候, 我们需要多减去8个小时的时区差. // 时间转换为 毫秒时间戳 public static dou ...

  3. 你不知道的JavaScript(上)this和对象原型(四)原型

    五章 原型 1.[[ Prototype ]] JavaScript 中的对象有一个特殊的 [[Prototype]] 内置属性,其实就是对于其他对象的引用.几乎所有的对象在创建时 [[Prototy ...

  4. 数组知识总结(js)

    js数组知识注意点: 声明空数组时,和c语言中的不同 js c var arr=[ ] //合法,声明一个空数组,数组长度为0; int a[];//错误因为在c中声明一个数组不仅要指定类型还要指定数 ...

  5. Java生鲜电商平台-生鲜系统中商品订单系统售后系统设计

    Java生鲜电商平台-生鲜系统中商品订单系统售后系统设计(服务订单履约系统) 说明: 电商之下,我们几乎能从电商平台上买到任何我们日常需要的商品,但是对于很多商品来说,用户购买发货后,只是整个交易流程 ...

  6. 知识图谱基础之RDF,RDFS与OWL

    https://blog.csdn.net/u011801161/article/details/78833958 https://blog.csdn.net/baidu_15113429/artic ...

  7. oop面向对象【接口、多态】

    今日内容 1.接口 2.三大特征——多态 3.引用类型转换 教学目标 1.写出定义接口的格式 2.写出实现接口的格式 3.说出接口中成员的特点 4.能够说出使用多态的前提条件 5.理解多态的向上转型 ...

  8. Shell(五):函数

    linux shell 可以用户定义函数,然后在shell脚本中可以随便调用. shell中函数的定义格式: [ function ] funname [()] { action; [return i ...

  9. Ubuntu18.04搭建测试环境

    前言 说一下我的情况,之前由于我的云服务器数据库的root账号密码123456太简单,而在之前的博客中也泄露出了我的云服务器的IP地址,导致有人远程连接我的数据库,删除了项目数据库里的数据只剩下WAR ...

  10. Cocos Creator 资源加载流程剖析【四】——额外流程(MD5 PIPE)

    当我们将游戏构建发布到web平台时,勾选Md5 Cache选项可以开启MD5 Pipe,它的作用是给构建后的资源加上md5后缀,避免浏览器的缓存导致部分资源不是最新,因为使用了md5后缀后,当资源内容 ...