调用modifierExample.enterDetails触发交易回退,提示非所有者求排查
错误原因及修复方案
核心问题
构造函数中误用了相等比较运算符==,而非赋值运算符=,导致合约部署时admin变量未被正确赋值为部署者地址,始终保持默认的0x0地址。调用enterDetails时,当前调用者地址(部署者地址)与admin的0x0地址不匹配,触发了isAdmin修饰器中的require校验,抛出“you are not the owner”错误。
修复后的构造函数代码
constructor() { admin = msg.sender; }
额外优化建议
- Solidity 0.8.0及以上版本中,构造函数的
public修饰符可省略,编译器会自动识别。 - 可将
admin变量声明为immutable,提升合约安全性与执行效率:address immutable admin;
内容的提问来源于stack exchange,提问作者GADEY POLESWARA MANOJ
相关产品推荐
相关产品推荐

