Solidity

請解決此錯誤

  • September 10, 2022

為什麼我在修飾函式中收到錯誤,它在 _amount 變數名稱下顯示紅色下劃線。

我還想問一下 require 函式是否在修飾符中工作,因為當我寫我的語句**“require(_checkOwner() ||$$ msg.sender $$>_amount,“You are not allowed!”);"在修飾符中顯示錯誤。所以現在我嘗試在函式中定義上述 require 語句,然後在修飾符中呼叫它。這是正確的方法嗎??還有請回答為什麼我在修飾函式“requiredCondition(uint _amount);”中呼叫的語句中出現 _amount 錯誤。**

pragma solidity ^0.8.16;
import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/Ownable.sol";

contract SharedWallet is Ownable{

   mapping(address => uint) public allowance;

   fallback () external payable{
       
   }
   
   receive () external payable {

   }

   modifier ownerOrAllowed(uint _amount) {
       requiredCondition(uint _amount);
       _;
   }

   function requiredCondition(uint _amount) public {
       require(_checkOwner() || allowance[msg.sender] >_amount,"You are not allowed!");
   }

   function addAllowance(address _who, uint _amount) public onlyOwner{
       allowance[_who] = _amount;
   }

   function withdrawMoney(address payable _to, uint _amount) public ownerOrAllowed(_amount){
       _to.transfer(_amount);
   }
}

您正在(重新)聲明一個已被使用/聲明為參數的變數名。取出第二個 uint

modifier ownerOrAllowed(uint _amount) {
   requiredCondition(_amount);
   _;
}

此外,_checkOwner() 不返回布爾值。你不能這樣使用它。如果 msg.sender 不是所有者,它只會恢復

您在修飾函式中遇到錯誤,它在 _amount 變數名稱下顯示紅色下劃線,因為您在“_amount”之前編寫了數據類型“uint”。此外,您的語句“require(_checkOwner() ||

$$ msg.sender $$>_amount,“You are not allowed!”);" 因為運算符 || 與類型 tuple() 和 bool 不兼容。

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