PalletOne调色板跨链的ETH提币实现
实现区块链的跨链,最主要的诉求就是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提币实现的更多相关文章
- PalletOne调色板跨链的BTC实现
之前已经讲到了PalletOne调色板跨链以太坊ETH和ERC20的技术原理,接下来我们来讲解PalletOne跨链比特币BTC的技术原理. 一.BTC充币 假如用户A持有一定数量的比特币BTC,他希 ...
- PalletOne调色板Token PTN跨链转网的技术原理
之前一直在忙于通用跨链公链PalletOne的研发,没有怎么做技术分享的博客,最近PalletOne主网上线也有几个月的时间了,即将进行PTN(PalletOne上面的主Token)从ERC20到主网 ...
- BlockChain 的跨链技术的重要性和必要性
本期我们将从跨链技术的重要性和必要性.畅想区块链未来世界.什么是跨链.目前四种跨链技术的对比.构建EOS同构跨链体系群.EOCS跨链技术介绍.跨链通道.中继等几个层面带大家走进EOS跨链和EOCS的世 ...
- SmartRaiden 和 Lighting Network 进行去中心化跨链原子资产交换
作者介绍 虫洞社区·签约作者 steven bai 前言 如果能够进行以太坊和比特币跨链原子资产交换,是不是一件很酷的事情? 目前链下的扩容方式有很多,最广为人知的就是比特币的闪电网络和以太坊的雷电网 ...
- web3.js支持SimpleChain跨链调用
SimpleChain的跨链协议已经对外开放很久了,很多应用也已经慢慢支持Simplechain的跨链.最近社区开发者web3.js中集成了Simplechain的跨链接口,开发者只需用npm安装包文 ...
- Bystack跨链技术源码解读
Bystack是由比原链团队提出的一主多侧链架构的BaaS平台.其将区块链应用分为三层架构:底层账本层,侧链扩展层,业务适配层.底层账本层为Layer1,即为目前比较成熟的采用POW共识的Bytom公 ...
- ES Bridge跨链桥服务升级,新增BSC跨链网络
3月15日,Equal Sign Bridge(ES Bridge)跨链桥宣布新增BSC跨链网络,方便更多用户参与到ES Bridge的建设与发展,未来还将持续拓展更多的主流跨链币种,提升各链间的互操 ...
- EOCS跨链核心技术内幕
EOCS跨链技术的核心就是ICP模块,ICP即Inter Chain Protocol(跨链交互协议),下面着重介绍ICP工作原理和实现细节. Inter Chain Protocol(ICP) IC ...
- 基于SimpleChain Beta的跨链交互与持续稳态思考
1. 区块链扩展性迷局 比特币作为第一个区块链应用与运行到目前为止最被信任的公链,其扩展性问题却持续被作为焦点贯穿着整个链的发展周期.事实上,在2009年1月4日比特币出现的那一天到2010年10月1 ...
随机推荐
- linux-linux mysql5.7主从搭建
原理: 1:master,建立二进制日志 , 每产生语句或者磁盘变换,写进日志: 2:slave,建立relaylog日志(中继日志),分析master的binlog. 3:master,建立授权账号 ...
- VMware永久激活密钥
VMware Workstation 14 Pro永久激活密钥 1. ZC3WK-AFXEK-488JP-A7MQX-XL8YF 2. AC5XK-0ZD4H-088HP-9NQZV-ZG2R4 3. ...
- 2020年值得你去试试的10个React开发工具
本文由葡萄城技术团队翻译并首发 转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. JavaScript每天都在出现大量的框架和工具,而React是除了上次我们 ...
- 【每天一题】LeetCode 0067. 二进制求和
开源地址:https://github.com/jiauzhang/algorithms 题目描述 * https://leetcode-cn.com/problems/add-binary * 给定 ...
- Python面向对象-定制方法
Python中的class可以定义许多定制方法,可以让我们方便的生成特定的类. 我们之前介绍了__slots__.__len__(),python中还有许多这样的特殊函数: __str__ >& ...
- [译]C# 7系列,Part 7: ref Returns ref返回结果
原文:https://blogs.msdn.microsoft.com/mazhou/2017/12/12/c-7-series-part-7-ref-returns/ 背景 有两种方法可以将一个值传 ...
- JS 操作符、控制流程、循环、字符串/数组方法
操作符 算术运算符:+ .- . * . / . %.++.-- 赋值运算符:= .+=.-=. *=./=.%= 比较运算符:>.>=.<.<=.!=.==.===(全等,数 ...
- python 打飞机项目 (实战一)
第一步定义 main 函数: # -*- coding=utf-8 -*- import pygame,time from Plane import Plane from pygame.locals ...
- WebMvcConfigurationSupport 避坑指南
通过返回WebMvcConfigurationSupport 的方式, 默认会覆盖 Spring boot的自动配置, 导致配置失效静态资源无法访问:但是在WebMvcConfigurationadp ...
- (转)利用Auto ARIMA构建高性能时间序列模型(附Python和R代码)
转自: 原文标题:Build High Performance Time Series Models using Auto ARIMA in Python and R 作者:AISHWARYA SI ...