为什么 web3.js 拒绝有效的 RSK 智能合约地址?

Why does web3.js reject a valid RSK smart contract address?

我正在尝试与 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会出现这个错误。

拜托,有人可以帮助我吗?

提前致谢!

根据 RSKIP-60, RSK network has its own checksum validation following 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)