没有凭据的Web3j调用合同方法

Web3j call contract method without credentials

已经在 javascript(web3js) 和 c#(nethereum) 中实现了相同的解决方案,它们都允许使用 abi 和已部署的合约地址加载智能合约。现在我在 java 环境 (web3j) 中工作,要加载智能合约,我需要提供凭据。 我只想从合同中调用一些不需要凭据的静态方法。如果没有它,是否有任何解决方法来加载合同?这样我就无法在不提供凭据的情况下向用户显示合同数据。

MyContract contract = MyContract.load(
    "0x32b0138BD1b9527E95f141319ECF9B2765e06C00",
    web3,
    credentials,
    new BigInteger("22000000000"),
    new BigInteger("510000")
);

由于您要执行的操作不需要任何 Eth 来执行,因此您使用什么凭据来执行此操作并不重要。所以你可以生成一个新的密钥对,然后使用它。

Credentials dummyCredentials = Credentials.create(Keys.createEcKeyPair());

MyContract contract = MyContract.load(
    "0x32b0138BD1b9527E95f141319ECF9B2765e06C00",
    web3,
    dummyCredentials,
    new BigInteger("22000000000"),
    new BigInteger("510000")
);