为啥 web3.js 拒绝有效的 RSK 智能合约地址?
Posted
技术标签:
【中文标题】为啥 web3.js 拒绝有效的 RSK 智能合约地址?【英文标题】:Why does web3.js reject a valid RSK smart contract address?为什么 web3.js 拒绝有效的 RSK 智能合约地址? 【发布时间】:2021-04-24 21:24:02 【问题描述】:我正在尝试与 RSK 主网上的智能合约进行交互,但我收到了这个错误...
Provided address "0xAb2d290b7a600f5eA8d5B933f6F15c867Fd7e60e" is invalid,
the capitalization checksum test failed,
or its an indirect IBAN address which can't be converted.
地址是从RSK Explorer本身获取的,所以不知道web3.js为什么会出现这个错误。
请问有人可以帮我吗?
提前致谢!
【问题讨论】:
【参考方案1】:根据RSKIP-60,RSK 网络在EIP1191 之后有自己的校验和验证。
但是,一些工具和库仍然不支持 EIP-1191。
大多数以太坊工具和库仅支持 EIP-155。 web3.js 就是其中之一,它会检查期望 EIP-155 校验和的校验和。
解决方法
(1) 将智能合约地址转换为全小写字符串:
return new web3.eth.Contract(coinBackAbi, tokenObj.address.toString().toLowerCase());
请注意,EIP-155 和 EIP-1191 都定义将全小写地址视为“跳过校验和”。
(2)另一种方法是使用@rsksmart/rsk-utils
,
使用它来转换地址以使用适当的校验和:
// Ethereum --> use this for web3.js
toChecksumAddress ("0xAb2d290b7a600f5eA8d5B933f6F15c867Fd7e60e", null)
// RSK Mainnet
toChecksumAddress ("0xAb2d290b7a600f5eA8d5B933f6F15c867Fd7e60e", 30)
【讨论】:
以上是关于为啥 web3.js 拒绝有效的 RSK 智能合约地址?的主要内容,如果未能解决你的问题,请参考以下文章