xChar

什么是 Front Running

Front Running指 miners 可以看到待处理的交易内容。当发现某笔高价交易时,它们可以在该交易之前插入一笔交易,使自己获利。举个例子,Alice决定购买某个稀缺Token,出价为 10 ETH。这笔交易在区块链上公开可见。 Eve是恶意miner,看到Alice的交易后,立即出价 9.9 ETH 购买这个 Token。之后 Alice的交易被打包,Eve再以10 ETH的价格将Token卖给Alice。这样Eve就赚取了价差。

防止 Front Running 的方法

使用混合器(Mixer)
混合器可以打乱交易,避免直接暴露交易内容。用户向混合器发送币,混合器将多个用户的币混合在一起,然后发送给不同地址。这可以有效隐藏交易链条和金额。

减少交易对区块链的依赖
可以通过状态通道或侧链等方式,把大部分交易放在链下进行,只在开启和关闭状态时与链上交互。这降低了区块链的交易负载,也避免了交易内容被第三方查看。

使用零知识证明
零知识证明可以在不泄露实际交易内容的前提下证明交易的有效性。这种方式可有效防止 Front Running。

代码示例:

以下是一个简单的Solidity代码示例,使用混合器来隐藏真实出价。

// Mixer contract
contract Mixer {

  // Collect funds from multiple users 
  function deposit() external payable { 
    ... 
  }

  // Mix multiple users' funds  
  function mix() external {
    ...
  }

  // Withdraw to a separate address
  function withdraw(address payable to) external {
    ...
  } 
}

// Purchase contract
contract Purchase {
  
  // User deposits to mixer
  function depositToMixer() external payable {
    Mixer(mixer).deposit{value: msg.value}();
  }  

  // Purchase from mixed funds
  function purchase(uint value) external {
    Mixer(mixer).withdraw(payable(seller));
    // Additional purchase logic
  }
}
Loading comments...