不同区块链中balance关键字的余额返回规则差异
关于
address(this).balance返回值的明确说明 address(this).balance不存在“固定返回ETH余额”的逻辑,它永远返回当前合约部署所在EVM链的原生货币余额,返回值的资产类型完全由合约运行的链环境决定:
- 若合约部署在以太坊主网、以太坊官方测试网(Sepolia、Holesky等),这类链的原生资产是ETH,此时
address(this).balance返回的就是对应合约地址的ETH余额,这也是多数入门教程直接将其描述为“返回ETH余额”的原因——这类教程默认用以太坊环境做演示。 - 若合约部署在Polygon PoS链,这类链的原生资产是MATIC(现已升级为POL,原生资产逻辑未变),此时调用
address(this).balance返回的就是该合约地址持有的原生MATIC/POL余额,不会返回跨链映射到Polygon的WETH、或是其他链上的ETH资产。 - 该逻辑对所有EVM兼容链通用:部署在BNB Chain时返回BNB余额,部署在Avalanche C链时返回AVAX余额,部署在Fantom时返回FTM余额,没有例外。
底层逻辑补充:EVM在状态层为每个地址单独维护了原生资产余额的存储字段,
balance属性是直接读取该字段的数值,本身不对资产名称、资产类型做任何判定,字段记录的是哪类链原生资产,返回值就对应哪类资产的数量。
内容的提问来源于stack exchange,提问作者Mohamad javad Safari
相关产品推荐
相关产品推荐

