You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

修改Solidity中函数的状态可变性是否会改变ERC165定义的接口ID?

修改Solidity函数的状态可变性会影响ERC165接口ID吗?

结论是不会,具体原因如下:

  • ERC165的接口ID是对接口内所有函数的函数选择器做异或运算得到的。
  • 函数选择器只由函数的签名决定——也就是函数名+括号里的参数类型列表,view/pure/payable这类状态可修饰符根本不算函数签名的一部分。
  • 举个实际例子:
    • 带view的函数function balanceOf(address) external view returns (uint256),和去掉view的function balanceOf(address) external returns (uint256),二者的函数选择器完全一致。
    • 所以哪怕你修改函数的状态可变性,只要函数名和参数类型没改,函数选择器就不变,最终算出来的ERC165接口ID自然也不会变。

另外要注意,状态可变性不影响接口ID,但会直接限制函数的行为——比如view函数不能修改合约状态,payable函数能接收ETH,这些特性和ERC165的接口识别是完全独立的两回事。

内容的提问来源于stack exchange,提问作者gaurav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 16:48:13