我有一份基本可靠的、聪明的合同:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract TestContract {
uint256 public _blockTimestamp;
function accumulated() public payable returns (uint256) {
_blockTimestamp = block.timestamp;
return 1;
}
}使用混合集成开发环境,我可以编译它,并在执行_blockTimestamp函数后检查accumulated变化的值。
现在,我可以部署契约并检查公共变量的值,而不会出现etherjs的任何问题:
const provider = new providers.JsonRpcProvider(getEnv('RINKEBY_NODE_URL'));
const wallet = new Wallet(getEnv('ROPSTEN_PRIVATE_KEY'), provider);
const TestContract = TestContract__factory.connect(getEnv('TEST_CONTRACT'), provider);
const _blockTimestamp = await NFTLTokenContract._blockTimestamp();问题是当我尝试执行函数accumulated时。作为一个应付功能,我需要一个签名者:
const provider = new providers.JsonRpcProvider(getEnv('RINKEBY_NODE_URL'));
const wallet = new Wallet(getEnv('ROPSTEN_PRIVATE_KEY'), provider);
const TestContract = TestContract__factory.connect(getEnv('TEST_CONTRACT'), provider);
const _blockTimestamp = await TestContract._blockTimestamp();
const accumulated = await TestContract.accumulated('1', wallet);但我还是发现了错误:
错误:发送事务需要一个签名者(operation="sendTransaction",code=UNSUPPORTED_OPERATION,version=contracts/5.5.0)
我遗漏了什么?
发布于 2022-07-07 18:14:52
您试图只使用提供程序来调用非视图函数,您必须提供一个签名者才能调用该函数。
尝试使用钱包作为签字人连接到合同:
const TestContract = TestContract__factory.connect(getEnv('TEST_CONTRACT'), wallet);https://stackoverflow.com/questions/72901102
复制相似问题