一、说明
充提币接口主要负责完成代币的充提操作,充提币通过两个不同的合约实现。
1. 充币接口合约相对简单,只需要通过合约将代币从msg.sender transferFrom到接收地址即可。
2. 提币接口要复杂些,主要功能包括签名验签,代币的提现。针对签名验签需要前端程序提交签名消息和hash值,通过 ecrecover函数推算出公钥地址,验证用于签名消息的私钥配合要求的公钥地址,以此判断是指定的公钥对应的私钥签名的消息。进而说明提币请求是由前端程序发起的,而不是由其他消息发起者冒充发起提币请求。
3. 提币时需要前端程序传递签名消息 signature 和 产生hash值的参数:转账数量(amount),接收者地址(to),临时性验证变量(_nonce)。对原始变量进行二次hash后产生以太坊hash,然后通过 ecrecover 方法反推公钥地址,如果计算出的公钥地址等于指定的公钥地址,说明用来对消息签名的私钥和公钥是匹配成对的,也就说明用来签名的钱包地址是程序中指定的钱包地址,进而说明提币请求是从前端程序合法发起的,排查是其他请求者冒充发起非法提币。
二、合约功能流程图
三、签名验签流程
1、对 转账数量(amount),接收者地址(to),临时性验证变量(_nonce)三个变量做一次hash,通过以下代码段实现:
function getMessageHash( uint256 amount, address to, uint256 _nonce ) private pure returns (bytes32) { return keccak256(abi.encodePacked(amount, to, _nonce)); }
2、添加以太坊签名前缀:”\x19Ethereum Signed Message:\n32″, 通过以下代码段实现
function getEthSignedMessageHash(bytes32 _messageHash) private pure returns (bytes32) { return keccak256( abi.encodePacked( "\x19Ethereum Signed Message:\n32", _messageHash ) ); }
至此,完成将变量amount,to,_nonce转换为以太坊hash
3、传递amount,to,_nonce和签名消息到 verify 函数,反推签名的私钥和指定公钥匹配
function verify( address _signer, uint256 amount, address to, uint256 _nonce, bytes memory signature ) internal pure returns (bool) { bytes32 messageHash = getMessageHash(amount, to, _nonce); bytes32 ethSignedMessageHash = getEthSignedMessageHash(messageHash); return recoverSigner(ethSignedMessageHash, signature) == _signer; }
验证签名的私钥和指定公钥匹配,说明签名验签成功。
四、完整版本充提币合约源码及部署配置和前端调用操作文档
完整版本充提币合约源码及部署配置和前端调用操作文档下载地址:
此内容仅供注册用户可见,请登录!
至此,完成充提币接口合约原理及使用说明所有操作流程。
pdf+视频币安智能链BSC发币教程及多模式组合合约源代码下载:
币安智能链BSC发币(合约部署、开源、锁仓、LP、参数配置、开发、故障处理、工具使用)教程下载:
多模式(燃烧、回流指定营销地址、分红本币及任意币种,邀请推广八代收益,LP加池分红、交易分红、复利分红、NFT分红、自动筑池、动态手续费、定时开盘、回购)组合合约源代码下载:
pdf+视频币安智能链BSC发币教程及多模式组合合约源代码下载地址:
此内容仅供注册用户可见,请登录!
添加VX或者telegram获取全程线上免费指导
评论前必须登录!
注册