pancakeSwap、uniswapV2 … 如何实现交易手续费(滑点)

心血来潮,写篇小文章,就写一点点示例代码吧

实现交易滑点其实很简单,首先要理解的是从哪里扣手续费

扣手续费,那么得理解那些东西呢 ?

  • 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转出,也就是你要买的Token
		if (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 给addr
			emit Transfer(pair, addr2, totalFee / 2); 			
		} else {
			// 卖出 Token
			// 操作和 买入一样
      	}
	}

	... 省略结尾

}

👌,粗略的代码就已经实现了,dex 交易滑点了,其他的可以举一反三,调整代码。
不懂的可留言

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>