太原制作网站,锦州网站建设更好,北京网络开发公司,wordpress半透明主题引言#xff1a;本文由天玄链开源开发者提供#xff0c;欢迎报名公益天玄链训练营
https://blockchain.163.com/trainingCamp
一、解决核心问题
项目方不支付gas费#xff0c;由用户自己发起交易#xff0c;用户支付gas费。用户的数据保存在链下服务器中#xff0c;tok…引言本文由天玄链开源开发者提供欢迎报名公益天玄链训练营
https://blockchain.163.com/trainingCamp
一、解决核心问题
项目方不支付gas费由用户自己发起交易用户支付gas费。用户的数据保存在链下服务器中token合约在链上交易是由用户通过网页的DAPP发起。
后台服务、token合约、dapp如何配合工作是本方案的重点
二、总架构图 从图上可以看出核心架构分为三部分
DAPP应用形式为web页面主要功能为用户提供交互界面从服务后台拿取用户可以提现的token数量和签名并负责拉起用户签名交易并发送到链上。
服务后端分为业务后台与私钥管理后台业务后台包括现有的token挖矿逻辑与提现的逻辑
私钥管理后台生成私钥、注入密码、私钥签名暂停私钥签名。
合约端token合约实现erc20的标准功能、并实现离线签名的提现接口。
三、提现的详细流程
智能合约实现
智能合约实现提现接口接口参数如下 离线签名的算法主要采用的eip712签名协议合约地址、合约的接口定义、用户地址、提现金额、签名有效的区块高度、用户的noncehash之后签名。
合约恢复签名地址的具体算法的伪代码如下 合约接口处理逻辑:
a.验证交易发起地址是否与提现的地址一致
b.将接口的调用参数使用签名算法恢复出签名的地址算法如上面代码所示
c.验证签名地址与admin地址是否一致
d.判断用户的nonce是否合法
e.比较当前的区块高度是否小于签名有效的区块高度
f.条件都满足之后将指定的token转移给用户地址。
g.发布提现成功的事件
DAPP实现
2、用户发起提现DAPP向服务方后台获取admin签名然后根据合约接口组装交易数据然后拉起用户的钱包签名如果用户中断该流程由服务方后台负责结束该流程。
后端服务流程
3、服务方后端
a.判断该用户是否有正在处理的订单如果有则直接返回。
b.读取最新的区块高度在最新区块链高度上n个区块为签名有效区块。
c.从数据库中读取用户已处理订单的nonce并从链上查询用户的nonce如果两个nonce不一致则需要报告警人工接入此处非常重要。并且用户签名的nonce要以后端服务的nonce为准。
d.服务后台将合约地址、合约的接口定义、用户地址、提现金额、签名有效的区块高度、用户的noncehash之后使用调用私钥管理平台的签名接口获得admin的私钥签名。本流程的难点后端的签名链上要能通过联调比较花时间
e.后端监控链上事件如果监控到提现成功事件则结束提现流程将用户的订单状态设置为成功并更新用户的nonce
f.定时器监控未结束的提现订单如果链上最新的区块高度已经大于签名有效高度5则将提现订单关闭并将对应的代币释放还给用户为了防止后端监控失败导致用户重复提取所以nonce要以后端为准如果链上成功了后端nonce未更新下一次发起的提现交易则会因为nonce重复失败确保安全