簡體   English   中英

錯誤:返回錯誤:處理事務時出現 VM 異常:恢復余額不足 — 給出的原因:余額不足

[英]Error: Returned error: VM Exception while processing transaction: revert Not Enough Balance — Reason given: Not Enough Balance

這是我的 erc20 代幣的轉移函數,稱為“CBC”

function transfer(address receiver, uint numTokens) public payable returns (bool)  {
        require(numTokens <= balances[msg.sender],"Not Enough Balance");
        balances[msg.sender] = balances[msg.sender].sub(numTokens);
        balances[receiver] = balances[receiver].add(numTokens);
        emit Transfer(msg.sender, receiver, numTokens);
        return true;
    }

我在另一個 ERC721 合約中調用了傳遞函數,這是我的代碼

function mint(string calldata _uri,uint value) external onlyOwner {
    token.transfer(receiverAddress,value);
    super._mint(msg.sender, tokenId);
    super._setTokenUri(tokenId, _uri);
    urlOf[tokenId] = _uri;
    tokenId = tokenId + 1;
    emit MintToken(msg.sender, tokenId, _uri,value);
}

在我的測試中,它總是失敗,除了沒有足夠的用戶余額,但我可以確認部署者有足夠的余額,這是我得到錯誤

有人可以告訴我如何修復它,因為我是區塊鏈的新手,不勝感激

這是因為當你在 mint 中調用 transfer 時,msg.sender(在 transfer 中)是調用合約(實現 mint 的那個)的地址,而不是調用 mint 的人的地址。 因此,token 需要有足夠的余額來執行操作。

msg.sender 保持不變的唯一時間是調用合約中的另一個函數時。 調用另一個合約會將 msg.sender 更改為調用合約的地址。 沒有這個,任何人都可以使用 msg.sender 來授權其他合約中的其他交易。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM