首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MetaMask - RPC错误:无法设置未定义(设置'loadingDefaults')错误的属性

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

Stack Overflow用户
提问于 2021-12-18 16:13:12
回答 7查看 1.4K关注 0票数 7

我正在构建一个标记函数,并在授予访问我的令牌的权限后遇到以下错误:

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

承担功能稳固合同:

代码语言:javascript
复制
    // 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;
    
    }

桩前

代码语言:javascript
复制
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})
  })
}) 

}

奇怪的是,在25%-30%的情况下,我进入了第二个批准步骤,交易就完成了。

有人知道是什么原因造成的吗?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2022-01-06 01:57:32

重新安装模块和重新编译并没有做任何事情,但是在我将函数更改为异步等待语法之后,它就成功了:

代码语言:javascript
复制
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 });

};

现在应该能提示Metamask两次了。第一次申请批准,第二次申请存款凭证。

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

票数 4
EN

Stack Overflow用户

发布于 2022-01-11 17:07:00

将函数更改为异步等待语法:

代码语言:javascript
复制
stakeTokens = async (amount) => {
await this.setState({ loading: true });
await this.state.tetherToken.methods.approve(this.state.tokenBank._address,amount).send({from : this.state.account });
  this.state.tokenBank.methods.stakeTokens(amount).send({from: this.state.account});
this.setState ({ loading: false });
票数 1
EN

Stack Overflow用户

发布于 2021-12-20 23:01:46

在与您相同的过程中遇到相同的问题时,可能尝试使用节点10并重新部署所有内容。

如果成功的话请告诉我。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70405024

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档