以下是我的代码的一部分(正在运行)
....
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
时使用它。
答案 0 :(得分:0)
您能否更清楚地提出您的问题?您的代码有意义,并且出于某些未知目的看起来不错。这个目的正是我需要知道的。
话虽如此,请检查this link上可以使用on
收听的不同事件,因为我认为您正在收听错误的事件或输出错误的文本。当您设置状态信息以说该TX已被开采时,我不相信它实际上已被开采。
我将使用confirmation
并且仅在事件的第一次触发时显示该消息,然后忽略其余的23。在确认编号旁边返回的对象描述为here,并且具有{{1 }}变量,您可以用来检查交易是否已确认并同时获取哈希。现在,您的事件调用不再浪费,您可以对消息使用与txHash相同的setState调用,甚至完全跳过存储txHash(只要您仍然可以异步使用setState即可)。