Solidity
修飾符的未聲明標識符錯誤
我是solidity的新手,對為什麼會收到這個未聲明的標識符錯誤感到困惑:
我有這個修飾符:
modifier isRegistered(uint ID_num){ require (Array[ID_num].exists, "Object DNE"); _; }
然後我在這個函式中呼叫它,但我得到了未聲明的標識符錯誤。
function newAdoption(address addy1, address addy2) public isRegistered(ID_number){ }
我在哪裡錯了?
newAdoption 函式的修飾符中的“ID_number”不存在。
您不應該依賴使用者輸入,因為任何使用者都可以傳遞任何值,因此不值得信任。
我不知道你想做什麼,但你應該嘗試這樣的模式:
struct MyUser { bool exists; address userAddress; } mapping (address => MyUser) public myUsers; modifier isRegistered(address userAddress){ require (myUsers[userAddress].exists, "Object DNE"); _; } function newAdoption(address addy1, address addy2) public isRegistered(msg.sender){ }
這樣,您的智能合約會檢查聯繫它的地址是否是使用者。
編輯:為了讓它更簡單,你也可以這樣做:
mapping (address => bool) public myUsers; modifier isRegistered(address userAddress){ require (myUsers[userAddress], "Object DNE"); _; } function addUser(address _newUser) external onlyOwner() { myUsers[_newUser] = true; } function newAdoption(address addy1, address addy2) public isRegistered(msg.sender){ }
它顯示該錯誤的原因是因為
ID_number
在函式範圍內不存在。當然,您在此合約中沒有任何具有名稱的狀態變數,ID_number
並且函式參數也沒有該名稱。因此
ID_number
必須是該函式的參數(因為當您使用修飾符時,參數已經包含在函式範圍內)或屬於該範圍的任何其他變數。function newAdoption(address addy1, address addy2) public isRegistered(addy2){ }
function newAdoption(address addy1, address addy2) public isRegistered(any_variable_that_lies_in_this_scope){ }
希望能幫助到你。