React获取metamask最新交易状态

时间:2018-03-15 22:55:15

标签: reactjs web3js web3 metamask

我正在使用此功能,通过metamask中的智能合约进行函数调用:

export default class EthereumForm1 extends Component {
  constructor (props) {
    super (props);
    const MyContract = window.web3.eth.contract(ContractABI);

    this.state = {
      ContractInstance: MyContract.at('ContractAddress')
    }
    this.doPause = this.doPause.bind (this);
}
  doPause() {
    const { pause } = this.state.ContractInstance;

    pause (
      {
        gas: 30000,
        gasPrice: 32000000000,
        value: window.web3.toWei (0, 'ether')
      },
      (err) => {
      if (err) console.error ('Error1::::', err);
      console.log ('Contract should be paused');
    })
  }

我想要的是使用加载gif来运行jQuery代码:$(".Loading").show(); 正在处理交易并在之后将其删除。此外,最好在div之后添加事务状态,例如在metamask中(传递或拒绝)。

Metamask transaction status image

2 个答案:

答案 0 :(得分:0)

你不需要jquery来做这件事。 React状态可以自动管理进度状态。您所要做的就是调用setState函数。

class EthereumFrom1 extends React.Component {

    state = {
        loading: false
    };

    constructor(props) {
        super(props);

        this.doPause = this.doPause.bind(this);

    }

    doPause() {
        const {pause} = this.state.ContractInstance;

        pause(
            {
                gas: 30000,
                gasPrice: 32000000000,
                value: window.web3.toWei(0, 'ether')
            },
            (err) => {
                if (err) console.error('Error1::::', err);
                this.setState({loading: true});
            })
    }

    render() {
        return (
            <div>
                {this.state.loading ?
                    <div className="Loading">
                        Loading...
                    </div> : <div>done</div>
                }
            </div>

        )
    }
}

答案 1 :(得分:0)

如果我的transactiopn完成了,那么每隔几秒我就会检查一下是什么帮助我,如果隐藏了装载机的话。

if (latestTx != null) {
  window.web3.eth.getTransactionReceipt(latestTx, function (error, result) {
    if (error) {
      $(".Loading").hide();
      console.error ('Error1::::', error);
    }
    console.log(result);
    if(result != null){
      latestTx = null;
      $(".Loading").hide();
    }
  });
}