提供的地址无效,大写校验和测试失败



我正在尝试使用web3发送合约方法。我正在使用privateKeyToAccount方法创建一个帐户,但当在合同上发送该方法时,我得到以下错误:

提供的地址[object object]无效,大写校验和测试失败,或者是无法转换的间接IBAN地址

我错过了一个步骤吗?我已经创建了web3的一个实例,并且契约接口可以工作。我附上了下面的部分代码。提前感谢您的帮助。

const web3 = new Web3(
new Web3.providers.WebsocketProvider(
'wss://rinkeby.infura.io/ws/v3/<api>'
)
);
const dummyPrivateKey = '0x38544e1555a3553829219281253d2400fa20ebbd922fdh3918a7s2b53b9e1358';
const accounts = web3.eth.accounts.privateKeyToAccount(dummyPrivateKey);
await contract.methods // add username
.addMessage(_username, _message)
.send({ from: accounts });

peter是对的。我错过了你给出整个对象而不是地址的部分。

但是如果你想校验一个地址。您可以简单地使用Web3实用程序函数web3.utils.toChecksumAddress(address)进行转换。更多细节在这里

您正在将帐户对象传递给from字段。但是你只需要传递地址。

from: accounts替换为from: accounts.address


注意:这是accounts对象的样子:

{
address: '0x29B67BB1cFE4799FDb46B49aD81cD771665E2dF7',
privateKey: '0x38544e1555a3553829219281253d2400fa20ebbd922fdh3918a7s2b53b9e1358',
signTransaction: [Function: signTransaction],
sign: [Function: sign],
encrypt: [Function: encrypt]
}

确保您提供的地址是有效的。您可以从Infura等在线提供商或Ganache等本地设置中获取地址。

如果仍然存在问题,则尝试使用以下代码:

web3.utils.toChecksumAddress(address)

我在项目中也遇到过这个问题,但在我的情况下,我也是同时使用Web3服务和相同的测试网络。停止另一个服务,现在恢复正常。