智能合约的离线签名(EIP712协议)解决方案

一、解决核心问题

  1. 项目方不支付gas费,由用户自己发起交易,用户支付gas费。
  2. 用户的数据保存在链下服务器中,token合约在链上,交易是由用户通过网页的DAPP发起。

后台服务、token合约、dapp如何配合工作是本方案的重点

二、总架构图

从图上可以看出,核心架构分为三部分:

DAPP:应用形式为web页面,主要功能:为用户提供交互界面,从服务后台拿取用户可以提现的token数量和签名,并负责拉起用户签名交易并发送到链上。

服务后端:分为业务后台与私钥管理后台,业务后台包括现有的token挖矿逻辑与提现的逻辑

私钥管理后台:生成私钥、注入密码、私钥签名,暂停私钥签名。

**合约端:**token合约实现erc20的标准功能、并实现离线签名的提现接口。

三、提现的详细流程

智能合约实现

  1. 智能合约实现提现接口,接口参数如下

离线签名的算法主要采用的eip712签名协议:合约地址、合约的接口定义、用户地址、提现金额、签名有效的区块高度、用户的nonce,hash之后签名。

合约恢复签名地址的具体算法的伪代码如下:

合约接口处理逻辑:

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.服务后台将合约地址、合约的接口定义、用户地址、提现金额、签名有效的区块高度、用户的nonce,hash之后使用调用私钥管理平台的签名接口获得admin的私钥签名。本流程的难点,后端的签名,链上要能通过,联调比较花时间

e.后端监控链上事件,如果监控到提现成功事件,则结束提现流程,将用户的订单状态设置为成功,并更新用户的nonce

f.定时器监控未结束的提现订单,如果链上最新的区块高度已经大于签名有效高度+5,则将提现订单关闭,并将对应的代币释放还给用户,为了防止后端监控失败,导致用户重复提取,所以nonce要以后端为准,如果链上成功了,后端nonce未更新,下一次发起的提现交易则会因为nonce重复失败,确保安全

相关推荐
磐链科技9 小时前
交易所开发新范式:从社交钱包隐私保护中汲取的五大架构启示
架构·区块链
MartinYeung51 天前
当“捕食者”沦为“猎物”:Jaredfromsubway MEV机器人被黑750万美元的技术拆解与代码修复方案
机器人·区块链
MartinYeung51 天前
Aztec Connect 黑客攻击深度剖析:结算边界绕过漏洞
安全·区块链
ZDGJ60991 天前
恒指期货交易策略适合新手吗
区块链
baopixiaoz2 天前
AI量化策略师|Web3 量化交易研究员
大数据·人工智能·python·区块链
Jiamiren3 天前
WEEX:长鑫科技上市大涨,宇树科技合约同步走高,传统资产交易迎来新路径
人工智能·科技·区块链
黄焖鸡能干四碗3 天前
信息安全保障方案(Word文件)
大数据·网络·人工智能·架构·区块链
Web3李李4 天前
链游想要获得市场认可,核心从来不是极致去中心化
web3·去中心化·区块链·软件开发·链游开发
mykj15514 天前
稳定的DOO算力质押系统DAPP合约底层逻辑
web3·区块链·dapp·rwa·质押挖矿
大鱼>5 天前
以太坊Layer2扩容:Optimistic vs ZK-Rollup完整对比
区块链