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

Sol*_*ros 5 checksum web3js web3-donotuse rsk

我正在尝试与 RSK 主网上的智能合约进行交互,但出现此错误...

Provided address "0xAb2d290b7a600f5eA8d5B933f6F15c867Fd7e60e" is invalid,
the capitalization checksum test failed, 
or its an indirect IBAN address which can't be converted.
Run Code Online (Sandbox Code Playgroud)

该地址是从 RSK Explorer 本身获得的,所以我不确定为什么 web3.js 会出现此错误。

拜托,有人可以帮我吗?

提前致谢!

Jes*_*ark 7

根据RSKIP-60,RSK 网络在EIP1191 之后有自己的校验和验证。

但是,一些工具和库仍然不支持 EIP-1191。

大多数以太坊工具和库仅支持 EIP-155。web3.js 就是其中之一,它会检查校验和,期望得到 EIP-155 校验和。

解决方法

(1) 将智能合约地址转换为全小写字符串:

return new web3.eth.Contract(coinBackAbi, tokenObj.address.toString().toLowerCase());
Run Code Online (Sandbox Code Playgroud)

请注意,EIP-155 和 EIP-1191 都定义了全小写地址将被视为“跳过校验和”。

(2) 另一种方法是使用@rsksmart/rsk-utils,使用它来转换地址以使用适当的校验和:

// Ethereum --> use this for web3.js
toChecksumAddress ("0xAb2d290b7a600f5eA8d5B933f6F15c867Fd7e60e", null)
// RSK Mainnet
toChecksumAddress ("0xAb2d290b7a600f5eA8d5B933f6F15c867Fd7e60e", 30)
Run Code Online (Sandbox Code Playgroud)