一、说明
dapp开发过程种涉及到链上数据的修改时可以直接调用链上合约,也可以通过充提币接口实现链上代币的交易。可以直接在ERC20合约中预留充提币接口,通过非对称加密方式来校验冲突交易,也可以通过对称加密方式采用加密数据传输实现充提(该种方式存在安全隐患,不建议使用)。
当然,最常见和推荐的充提币方式是采用充提币接口,在提币过程种通过非对称加密算法即公私钥验证方式来确保提币操作的质量是从dapp发出,并且提币到指定地址的实现方式。
二、充提币接口实现代码
充值接口相对简单,因为无须交易充值钱包地址,只需要保证充值的目标地址即可,没有权限验证环节,接口合约代码实现如下:
contract Vault is Owned { struct Receord { address depositer; uint256 amount; } Receord[] public historyReceords; mapping(address => uint256[]) indexs; function deposit(uint256 amount) external { historyReceords.push(Receord({depositer: msg.sender, amount: amount})); uint256 counter = historyReceords.length - 1; emit Deposit(msg.sender, amount); } function withdrawToken(IERC20 token, uint256 _amount) external onlyOwner { token.transfer(msg.sender, _amount); } }
提币接口相对要复杂些,因为提币要涉及到提币权限验证,要确保提币操作的质量从dapp发出。即只有dapp才能提币权限,其他任何地址发出的提币请求都是非法的。实现原理是借助非对称加密方式(公私钥)实现提币请求验证。具体实现代码如下:
contract Vault is Owned, VerifySignature { struct UserWithdraw { uint256 amount; uint256 lastRewardTime; } mapping(address => UserWithdraw) public record; mapping(address => uint256) public userNonce; 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({ lastRewardTime: block.timestamp }); } function setSigner(address _signer) external onlyOwner { signer = _signer; } }
通过以上ERC20代币的充提币接口来实现代币token在dapp中的充提实现。
至此,完成dapp开发调用智能合约实现代币的充提币接口实现的所有操作流程。
pdf+视频币安智能链BSC发币教程及多模式组合合约源代码下载:
币安智能链BSC发币(合约部署、开源、锁仓、LP、参数配置、开发、故障处理、工具使用)教程下载:
多模式(燃烧、回流指定营销地址、分红本币及任意币种,邀请推广八代收益,LP加池分红、交易分红、复利分红、NFT分红、自动筑池、动态手续费、定时开盘、回购)组合合约源代码下载:
pdf+视频币安智能链BSC发币教程及多模式组合合约源代码下载地址:
添加VX或者telegram获取全程线上免费指导
评论前必须登录!
注册