有没有更好的方法来更新 tx 哈希?

Posted

技术标签:

【中文标题】有没有更好的方法来更新 tx 哈希?【英文标题】:Is there a better way of updating the tx hash? 【发布时间】:2019-03-22 23:32:32 【问题描述】:

以下是我的代码的 sn-p(正在运行)

....

let txhash = '';

class App extends Component 
  ....

  async componentDidMount() 
    .....
  

  onSubmit = async(event) => 
    event.preventDefault();
    const accounts = await web3.eth.getAccounts();

    this.setState(
      message: "Waiting for the transaction to be mined..."
    );

    await lottery.methods.enterLotteryContract().send(
      from: accounts[0],
      value: web3.utils.toWei(this.state.value, 'ether')
    ).on('transactionHash', function(hash) 
      txhash = hash
    );

    this.setState(
      message: "Congrats, the tx has been mined; your txhash  is " + txhash
    )
    console.log(txhash);
  );

更多信息在这里:https://github.com/DKSukhani/lottery-react/blob/master/src/App.js

想知道是否有更好的方法让我获得txhash 然后显示它。我希望我可以将txhash 作为状态组件之一,而不是将其声明为空变量。此外,我使用回调函数仅将其重新分配给txhash

【问题讨论】:

【参考方案1】:

你能把你的问题问得更清楚一点吗?您的代码很有意义,并且对于某些未知目的看起来很好。不过,这个目的正是我需要知道的。

您何时需要 txHash,是在每次调用此函数之后还是您尝试跟踪其他内容。 为什么它不能是一个状态变量,你没有在你的片段中包含状态,所以我不得不去看看你的其余代码,没有理由不这样做。您在 sn-p 中使用它,因此很明显您可以在某种程度上使用它。我不使用 React,所以可能存在一些渲染循环、侦听器问题或其他无法使用 setState 的原因。

话虽如此,请查看 this link 以了解您可以使用 on 收听的不同事件,因为我认为您正在收听错误的事件或输出错误的文本。当您将状态消息设置为说 tx 已被开采时,我不相信它实际上已经被开采了。

我会使用 confirmation 并且只在事件的第一次触发时显示消息,然后忽略剩余的 23 个。与确认号一起返回的对象描述为 here 并且有一个您可以使用的 transactionHash 变量同时检查交易是否已确认并获取哈希。现在您的事件调用不再那么浪费,您可以对消息使用与 txHash 相同的 setState 调用,甚至完全跳过存储 txHash(只要您仍然可以异步使用 setState)。

【讨论】:

以上是关于有没有更好的方法来更新 tx 哈希?的主要内容,如果未能解决你的问题,请参考以下文章

有没有更好的方法来反映用户端更改的 CSS 代码,而不是告诉他们请清除缓存以查看更新? [复制]

有没有比使用 Console.Clear() 更好的方法来制作控制台游戏?

如何为频繁的数据库更新编写 Websockets/AJAX 代码?或者有没有更好的方法?

Spring Security 批量密码散列

仅用一个键在哈希中查找键名?

最快的方法来计算没有碰撞的整数数组的哈希值