Contract-Design

協議之間介面衝突的細粒度

  • March 6, 2021

在我的項目中集成Balancer Exchange協議時,我注意到在他們的交換代理中定義了這個介面:

interface TokenInterface {
   function balanceOf(address) external view returns (uint);
   function allowance(address, address) external view returns (uint);
   function approve(address, uint) external returns (bool);
   function transfer(address, uint) external returns (bool);
   function transferFrom(address, address, uint) external returns (bool);
   function deposit() external payable;
   function withdraw(uint) external;
}

這幾乎是一個 ERC-20 介面,但它有兩個自定義函式,depositwithdraw. 這些功能存在的原因超出了這個問題的範圍。

我想在交換代理上呼叫這個函式:

function smartSwapExactIn(
   TokenInterface tokenIn,
   TokenInterface tokenOut,
   uint256 totalAmountIn,
   uint256 minTotalAmountOut,
   uint256 nPools
) external payable returns (uint256 totalAmountOut);

TokenInterface但是在編寫契約時,我想使用一個普通的 ERC-20 界面而不是這個自定義界面。

這是棘手的部分。Balancer 已經在地址0x3E66B66Fd1d0b02fDa6C811Da9E0547970DB2f21部署了交換代理。我會用我自己的合約做同樣的事情(在某個時候部署它),顯然編譯器不會抱怨,因為我使用了另一個介面而不是TokenInterface(它不知道它的最終目的是什麼)。

當我嘗試smartSwapExactIn通過定義與 and 參數略有不同的介面的合約呼叫 Balancer 的函式TokenInterfacetokenIn,協議是否會“交叉劍” tokenOut

是的,如果協議TokenInterface不完全相同,協議將相互交鋒。

我必須使用Balancer repo中定義的介面:

interface TokenInterface {
   function balanceOf(address) external view returns (uint256);

   function allowance(address, address) external view returns (uint256);

   function approve(address, uint256) external returns (bool);

   function transfer(address, uint256) external returns (bool);

   function transferFrom(
       address,
       address,
       uint256
   ) external returns (bool);

   function deposit() external payable;

   function withdraw(uint256) external;
}

引用自:https://ethereum.stackexchange.com/questions/90441