Есть ли лучший способ обновить хэш TX? - PullRequest
0 голосов
/ 18 октября 2018

Ниже приведен фрагмент моего кода (который работает)

....

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 Ответ

0 голосов
/ 22 октября 2018

Можете ли вы задать свой вопрос немного яснее?Ваш код имеет смысл и выглядит хорошо для какой-то неизвестной цели.Эта цель как раз то, что мне нужно знать.

  • Когда вам нужен txHash, это после каждого вызова этой функции или вы пытаетесь отследить что-то еще.
  • Почему это не может быть переменная состояния, вы не включили состояние в свой фрагмент кода, поэтому мне пришлось посмотреть на остальную часть вашего кода и не найти причины, почему бы и нет.Вы используете его внутри фрагмента, так что вы можете использовать его до некоторой степени.Я не использую React, поэтому, возможно, есть какой-то цикл рендеринга, проблема с прослушивателем или другая причина, по которой вы не можете использовать setState.

С учетом вышесказанного проверьте эту ссылку вразличные события, которые вы можете прослушивать с помощью on, так как я думаю, что вы слушаете неправильное событие или выводите неправильный текст.Когда вы устанавливаете сообщение штата, чтобы сказать, что передача была добыта, я не верю, что это действительно было.

Я бы использовал confirmation и отображал сообщение только при первом срабатывании события, а затем игнорировал оставшиеся 23. Объект, возвращаемый вместе с номером подтверждения, описан здесь и имеетtransactionHash переменная, которую вы можете использовать как для проверки того, что транзакция была подтверждена, так и для получения хэша одновременно.Теперь ваш вызов события больше не такой расточительный, и вы можете использовать тот же вызов setState для сообщения, что и для txHash, или даже вообще пропустить сохранение txHash (если вы все еще можете использовать setState асинхронно).

...