【问题标题】:How to resolve an async issue如何解决异步问题
【发布时间】:2021-03-27 10:50:21
【问题描述】:

首先,让我先说我无论如何都不是开发人员。我有一个很小的编码背景,我试图在这里依赖它,但它让我失望了。

我的问题如下:

我有一些代码,它基本上是一个在以太坊网络上执行智能合约工作的机器人。代码完全在 javascript 中,所以我试图做的区块链方面是无关紧要的。但基本上我正在尝试执行一个 API 请求,该请求接收一个数字(称为“gas”),这个数字决定了我的机器人愿意支付多少费用才能在以太坊网络上执行工作。但是,我了解到 API 发送的默认数字太低。所以我决定尝试通过乘以从 API 请求中获得的数字来增加 gas。但是,当我这样做时,似乎代码在收到 API 请求之前尝试将数字相乘。因此,我收到一个 NaN 错误。原始代码如下所示:

    async work() {
        this.txPending = true;
        try {
          const gas = await this.getGas();
          const tx = await this.callWork(gas);
          this.log.info(`Transaction hash: ${tx.hash}`);
          const receipt = await tx.wait();
          this.log.info(`Transaction confirmed in block ${receipt.blockNumber}`);
          this.log.info(`Gas used: ${receipt.gasUsed.toString()}`);
        } catch (error) {
          this.log.error("While working:" + error);
        }
        this.txPending = false;
      }

我所做的更改如下所示:

    async work() {
    this.txPending = true;
    try {
      let temp_gas = await this.getGas();
      const gas = temp_gas * 1.5;
      const tx = await this.callWork(gas);
      console.log(gas);
      console.log('something');
      const receipt = await tx.wait();
      this.log.info(`Transaction confirmed in block ${receipt.blockNumber}`);
      this.log.info(`Gas used: ${receipt.gasUsed.toString()}`);
    } catch (error) {
      this.log.error("While working:" + error);
    }
    this.txPending = false;
  }

根据我的研究,似乎我需要做的是创建一个 Promise 函数,但我完全不知道如何创建它。如果有人可以帮助我,我愿意付给他们一点以太坊,也许 0.2(大约 150 美元)。

【问题讨论】:

  • 对不起,这2段代码有什么区别?

标签: javascript ethereum solidity


【解决方案1】:

从技术上讲,您无法确定交易的 gas 成本,而是立即为 gas 设置一些相当大的值,例如 0x400000。矿工将根据需要从这笔金额中提取,并将多余的部分留在您的帐户中。这就是以太坊和比特币之间的区别——在比特币中,指定的全部费用将由矿工承担。

【讨论】:

  • 抱歉,我发现第二个的 sn-p 贴错了。无论如何,我认为gas的工作方式是,如果你放一些任意大的数字,它不会全部用完,但仍然会比必要的多一点。顺便说一句,这是我从中提取的 API:“gasnow.org/api/v3/gas/price?utm_source=relayerjobs”所以,正如你所看到的,它会产生一些它认为可行的 gas 成本。但是由于其他人试图做和我一样的事情之间的竞争,这通常是不够的。所以我尝试进行我发布的更改。
猜你喜欢
  • 2018-11-10
  • 2019-03-27
  • 2019-02-13
  • 1970-01-01
  • 2020-02-15
  • 1970-01-01
  • 2010-10-02
  • 2010-12-22
  • 1970-01-01
相关资源
最近更新 更多