首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么桩令牌功能不起作用(坚固/反应)?

为什么桩令牌功能不起作用(坚固/反应)?
EN

Ethereum用户
提问于 2022-01-08 11:35:51
回答 1查看 165关注 0票数 0

我创建了一个简单的dapp,它包含了function /块菌/web3,允许用户输入多个令牌并将其提交到指定位置,问题是当单击submit按钮时,Metamask弹出以确认事务(Approuve),但我没有第二个弹出来确认stakeTokens函数。

注:(在默认情况下,我将100枚代币存入他们的账户中)

实心木桩标志

代码语言:javascript
复制
   function stakeTokens(uint _amount) public {
         // Require amount greater than 0
        require(_amount > 0, "amount cannot be 0");

        // Transfer tokens from the investor wallet to "this" farm
        daiToken.transferFrom(msg.sender, address(this), _amount);
 
        // Store deposit balance
        stakingBalance[msg.sender] = stakingBalance[msg.sender] + _amount;

        // To store inside the array *Only* who haven't stake yet(The new investors);
       //  if hasStacked is false then will be true ! then will execute the code
        if(!hasStaked[msg.sender]){
            stakers.push(msg.sender);
        }

        //update staking status
        isStaking[msg.sender] = true;
        hasStaked[msg.sender] = true;
        
    }

桩标反应

代码语言:javascript
复制
const stakeTokens = async (amount) => {
     await dTokens.methods.approve(FarmAddress, amount).send({ from : investorAccount}).on("transitionsHash", (hash)=> {
       fTokens.methods.stakeTokens(amount).send({from : investorAccount})
    }).on("transitionsHash", (hash)=> {
      console.log("stacking has been validated")
    });
};

提交功能

代码语言:javascript
复制
const stackHandler =  (e) => {
    e.preventDefault();

    const amount = refInput.current.value;
    const newAmount = amount.toString();
    const myAmount = web3.utils.toWei(newAmount, "ether");
    stakeTokens(myAmount);
    
}

web3 js

代码语言:javascript
复制
import Web3 from "web3";

window.ethereum.request({method: "eth_requestAccounts" });

const web3 = new Web3(window.ethereum);


export default web3;
EN

回答 1

Ethereum用户

发布于 2022-01-08 14:45:06

你的交易“链接”可能有点离题。您的第二个transitionsHash侦听器仍然链接到第一个tx。尝试以下几点:

代码语言:javascript
复制
const stakeTokens = (amount, onSuccess) => {
  dTokens.methods
    .approve(FarmAddress, amount)
    .send({ from: investorAccount })
    .on('transitionsHash', hash => {
      fTokens.methods
        .stakeTokens(amount)
        .send({ from: investorAccount })
        .on('transitionsHash', hash => {
          console.log('stacking has been validated')
          onSuccess(); // Example of where to use a callback
        })
    })
}

建议:

  1. 您应该考虑为成功和失败添加一些回调(我已经添加了一个),您可以在侦听器中触发这些回调,以便将结果返回到应用程序。也检查(“错误”)。
  2. 您可能希望将“批准”与“股份交易”分开。您将有用户批准,但关闭应用程序之前,交易是造币。下一次他们回来的时候,他们应该能够立竿见影,但他们将被要求再次批准。
票数 0
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/118323

复制
相关文章

相似问题

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