为啥 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 智能合约地址?的主要内容,如果未能解决你的问题,请参考以下文章

如何判断 RSK 上的智能合约是不是为 NFT?

是否可以让智能合约无需信任地实时了解 RSK pegnatories 的地址?

web3使用web3.js发布并执行智能合约

使用 web3 js 调用智能合约函数

部署智能合约时出现节点错误 - Web3.js

Web3js - 部署后立即返回智能合约地址