心血来潮,写篇小文章,就写一点点示例代码吧
实现交易滑点其实很简单,首先要理解的是从哪里扣手续费
扣手续费,那么得理解那些东西呢 ?
- swap 背后的逻辑是什么
- 通俗的来讲,swap其实就是他给创建了一个 LP 的合约 (createPair)
- 在dex进行交易的时候,你要理解是用你的TokenA 去兑换 TokenB 出来
- ,理解以上两个,就知道你下一步应该做什么了
- 类似于swap背后的原理什么的,这里不做多的阐述,只讲实现滑点
- 上面提到了 TokenA 兑换TokenB,既然有兑换,那肯定有转账,也就是 Transfer
- Erc20 标准中 Transfer 有transfer(); transferFrom(); 两个方法
- 可以看到这两个方法最终会调用内部方法 _transfer();
- ok,下面开始盲写一波代码
//其他代码省略,这里只写_transfer 中的部分代码uint256 fee = 4; // 滑点为 4%function _transfer(from, to, amount) internal {// 不管这玩意的难度,你只要知道,这玩意很简单就... 省略开头// ,我们正式开始实现 滑点// 如果是从 lp 的地址转入,或者转出,则说明这是在dex交易if (from == pair || to == pair ) {// 从pair转出,也就是你要买的Tokenif (from == pair) {uint256 totalFee = fee * amount / 100;// 买入,实现买入滑点,你可以在他转给用户之前,实现,转移出去_balance[addr1] += totalFee / 2 ; // 这里扣除 2%_balance[addr2] += totalFee - totalFee / 2 ; // 这里扣除 2%// 这里 只是给 对应的 接受 手续费的地址增加了手续费,还需要给其增加转账事件emit Transfer(pair, addr1, totalFee / 2); // 表示pair转了了totalFee/2 给addremit Transfer(pair, addr2, totalFee / 2); } else {// 卖出 Token// 操作和 买入一样}}... 省略结尾}
,粗略的代码就已经实现了,dex 交易滑点了,其他的可以举一反三,调整代码。
不懂的可留言