一、说明
签名验签业务逻辑环节在solidity合约中实现,dapp前端业务服务用户数据的输入,签名及验签结果的展示,提币接口操作的提币请求发起等。该dapp主要实现如下功能:
1、链接钱包,点击链接钱包按钮发起连接请求,展示当前连接钱包的属性信息:钱包地址、钱包余额、当前链id,链名称
2、对消息进行签名,针对用户前端页面输入的参数字段自动hash后,通过metamask钱包产生签名消息
3、对签名消息进行提前验签操作,确保签名的地址为dapp中程序指定的签名钱包,非dapp程序发起的提币请求一律拒绝
4、执行提币接口的提币操作,完成代币从总账地址提币到用户请求提币地址
注:
a. 链接钱包的操作在ether.js中完成,包括当前连接钱包的属性信息
b. 签名过程需要在dapp中完成,根据用户数据的参数字段产生原始hash,经过metamask签名后产生签名消息
c. 验证签名的过程是在solidity合约中实现的,通过recover签名消息验证签名地址
d. 执行代币提币的前提是要求签名验签成功,否则拒绝提币请求。
二、dapp及solidity合约完整版代码实现
1、dapp完整版代码signAndVerify.html文件如下:
<form> <label for="address-input">提币地址:</label> <input type="text" id="address-input"> <label for="amount-input">提币数量:</label> <input type="number" id="amount-input"> <label for="nonce-input">提币nonce:</label> <input type="number" id="nonce-input"> <p class="form-note">提币数量需要包含精度,提币nonce值需要唯一,nonce步长值为2</p> </form> <div class="button-group"> <button class="connect-wallet-btn" onclick="connWallet()">连接钱包</button> <button class="signmgs-btn" onclick="signMessage()">签名消息</button> <button class="verifysig-btn" onclick="verifyMessage()">验证签名</button> <button class="execute-contract-btn" onclick="withdraw()">执行提币</button> </div>
2、css样式布局文件singVerifyStyle.css完整代码如下:
/*输入参数区域样式*/ .input-params { width: 55%; height: 50vh; border: 1px dashed black; margin: 0 auto; display: flex; flex-direction: column; align-items: center; } .input-params h3 { text-align: center; margin-top: 5px; } .input-params form label { display: inline-block; width: 100px; text-align: right; }
3、solidity合约文件Vault_withdraw.sol代码如下:
function withdraw( uint256 amount, address to, uint256 nonce, bytes memory signature ) external { require(nonce > userNonce[to], "nonce"); require( verify(signer, amount, to, nonce, signature), "signature not match" ); record[to] = UserWithdraw({ amount: amount + record[to].amount, lastRewardTime: block.timestamp }); userNonce[to] = nonce + 1; DWT.transfer(to, amount); }
至此,完成dapp实现完整版本签名验签功能,借助签名验签功能实现代币的提币接口所有操作流程。
pdf+视频币安智能链BSC发币教程及多模式组合合约源代码下载:
币安智能链BSC发币(合约部署、开源、锁仓、LP、参数配置、开发、故障处理、工具使用)教程下载:
多模式(燃烧、回流指定营销地址、分红本币及任意币种,邀请推广八代收益,LP加池分红、交易分红、复利分红、NFT分红、自动筑池、动态手续费、定时开盘、回购)组合合约源代码下载:
pdf+视频币安智能链BSC发币教程及多模式组合合约源代码下载地址:
此内容仅供注册用户可见,请登录!
添加VX或者telegram获取全程线上免费指导
评论前必须登录!
注册