首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用etherjs调用稳健性支付函数

用etherjs调用稳健性支付函数
EN

Stack Overflow用户
提问于 2022-07-07 16:10:45
回答 1查看 41关注 0票数 0

我有一份基本可靠的、聪明的合同:

代码语言:javascript
复制
// 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的任何问题:

代码语言:javascript
复制
  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时。作为一个应付功能,我需要一个签名者:

代码语言:javascript
复制
  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)

我遗漏了什么?

EN

回答 1

Stack Overflow用户

发布于 2022-07-07 18:14:52

您试图只使用提供程序来调用非视图函数,您必须提供一个签名者才能调用该函数。

尝试使用钱包作为签字人连接到合同:

代码语言:javascript
复制
const TestContract = TestContract__factory.connect(getEnv('TEST_CONTRACT'), wallet);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72901102

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档