我正在构建一个标记函数,并在授予访问我的令牌的权限后遇到以下错误:
"MetaMask - RPC错误:无法设置未定义的属性(设置'loadingDefaults')“
承担功能稳固合同:
// 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;
}桩前
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%的情况下,我进入了第二个批准步骤,交易就完成了。
有人知道是什么原因造成的吗?
发布于 2022-01-06 01:57:32
重新安装模块和重新编译并没有做任何事情,但是在我将函数更改为异步等待语法之后,它就成功了:
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上有一个未解决的问题
发布于 2022-01-11 17:07:00
将函数更改为异步等待语法:
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 });发布于 2021-12-20 23:01:46
在与您相同的过程中遇到相同的问题时,可能尝试使用节点10并重新部署所有内容。
如果成功的话请告诉我。
https://stackoverflow.com/questions/70405024
复制相似问题