Solidity

BEP-20 令牌傳輸錯誤

  • October 2, 2021

我無法將測試代幣從我的地址(比如地址 A)轉移到另一個地址 B。我所做的步驟是

  1. 部署並驗證一個 rebase 合約,所有代幣都會自動發送到我的地址。
  2. 然後我將地址 B 設為所有者。
  3. 之後,我嘗試使用元遮罩將我的令牌從 A 轉移到 B,但我無法這樣做。這是失敗交易的連結。這就是智能合約

BSC blockexplorer 說

警告!合約執行過程中遇到的錯誤

$$ execution reverted $$ BEP-20 令牌傳輸錯誤(無法找到相應的傳輸事件日誌),請與發件人核實。

實施 ERC-20/BEP-20 合約的方式有無數種。

transfer在您的情況下,代幣合約在函式上設置了兩個修飾符:

function transfer(address to, uint256 value)
   external
   override
   validRecipient(to)
   initialDistributionLock
   returns (bool)
{
   _transferFrom(msg.sender, to, value);
   return true;
}

你的合約呼叫通過了第一個修飾符validRecipient,因為它只檢查接收者是否不是零地址。但是第二個修飾符initialDistributionLock

modifier initialDistributionLock() {
   require(
       initialDistributionFinished ||
       isOwner() ||
       allowTransfer[msg.sender]
   );
   _;
}

initialDistributionFinished是目前設置為的儲存布爾值false。由於0x82a55de9d15b13eb6db1b6526d9e6e2e25397903既不是合約的所有者,也不是通過在allowTransfer映射中設置來啟用傳輸,合約呼叫被恢復。

因此,在“初始分發”階段禁用傳輸。如果您有權訪問所有者帳戶,您應該能夠設置此標誌true並進行轉移。

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