MetaMask - RPC 错误:无法设置未定义的属性(设置“loadingDefaults”)错误

Jul*_*ien 7 blockchain solidity smartcontracts truffle metamask

我正在构建一个质押功能,并在授予访问我的令牌的权限后遇到以下错误:

“MetaMask - RPC 错误:无法设置未定义的属性(设置“loadingDefaults”)”

Solidity 合约的质押功能:

    // Staking function
    function depositTokens(uint _amount) public {
        require(_amount > 0, 'Amount has to be > 0');
    // Transfer tether tokens to this contract
    tether.transferFrom(msg.sender, address(this), _amount);

    // Update Staking balance
    stakingBalance[msg.sender] = stakingBalance[msg.sender] + _amount;

    if(!hasStaked[msg.sender]) {
        stakers.push(msg.sender);
    }

    // Update Staking balance
    isStaking[msg.sender] = true;
    hasStaked[msg.sender] = true;
    
    }
Run Code Online (Sandbox Code Playgroud)

质押前端

stakeTokens = (amount) => {
this.setState({loading: true })
this.state.tether.methods.approve(this.state.deBank._address, amount).send({from: this.state.account}).on('transactionHash', (hash) => {
  this.state.deBank.methods.depositTokens(amount).send({from: this.state.account}).on('transactionHash', (hash) => {
    this.setState({loading:false})
  })
}) 
Run Code Online (Sandbox Code Playgroud)

}

在此输入图像描述

奇怪的是,在 25-30% 的情况下,我会进入第二个审批步骤,交易就会通过。

任何人都知道是什么原因造成的?

小智 4

重新安装模块并重新编译没有执行任何操作,但在我将函数更改为 async wait 语法后它就解决了:

stakeTokens = async (amount) => {
  this.setState({ loading: true });

  await this.state.tether.methods
    .approve(this.state.decentralBank._address, amount)
    .send({ from: this.state.account });

  await this.state.decentralBank.methods
    .depositTokens(amount)
    .send({ from: this.state.account });

  this.setState({ loading: false });

};
Run Code Online (Sandbox Code Playgroud)

现在它应该提示 Metamask 两次。批准第一,存款代币第二。

此错误在 Metamask 的 Github 上有一个未解决的问题:https://github.com/MetaMask/metamask-extension/issues/13197