Solidity中如何从IERC20代币实例获取对应ERC-20合约地址
正确获取对应ERC-20代币部署地址的写法
两个候选写法里,正确的是token.address,token.this是完全错误的写法。
具体说明
- Solidity 语法体系中不存在
this.xxx这类前端面向对象的实例属性调用规则:如果要获取当前执行合约本身的地址,标准写法是address(this),不存在把this作为属性挂载在其他合约实例上的用法,token.this本身就属于语法错误,编译阶段就会直接报错。 - 所有合约类型的引用(包括IERC20这类接口类型的合约实例),Solidity 语言原生内置了
.address成员属性,不需要你在接口定义里额外声明对应方法,直接调用就能拿到该实例指向的链上合约部署地址。
实际使用的代码参考:
// 你定义的public修饰的IERC20类型状态变量 IERC20 public token = IERC20(0xdAC17F958D2ee523a2206206994597C13D831ec7); function getTokenAddr() public view returns(address) { // 直接调用.address属性即可拿到目标代币的部署地址 return token.address; }
- 补充说明:你声明的
token是public修饰的状态变量,合约编译时会自动生成同名的公共getter方法,外部调用这个getter返回的本身就是地址类型,不需要再额外拼接.address。
内容的提问来源于stack exchange,提问作者kasper
相关产品推荐
相关产品推荐

