Solidity
BEP-20 令牌傳輸錯誤
我無法將測試代幣從我的地址(比如地址 A)轉移到另一個地址 B。我所做的步驟是
- 部署並驗證一個 rebase 合約,所有代幣都會自動發送到我的地址。
- 然後我將地址 B 設為所有者。
- 之後,我嘗試使用元遮罩將我的令牌從 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
並進行轉移。