繁体   English   中英

使用 web3js 和元掩码的 ERC20 transferFrom() 私钥

[英]ERC20 transferFrom() private key with web3js and metamask

我使用标准的 IERC20 创建了一个 ERC20 智能合约。

我做了一个赌博游戏,如果当前用户输了,他/她将不得不将一个令牌转移给经销商(也就是部署者,也就是智能合约的 msg.sender)。

对于上面的场景,我认为 transferFrom("CURRENT_USER_PRIVATEKEY", "DEPLOYER_PUBLICKEY", 1) 应该是答案。

但是,对于 web3js 和 metamask,我不确定如何获取“CURRENT_USER_PRIVATEKEY”,因为 Metamask 不允许 web3js 获取私钥。 在其他 StackOverflow 帖子中,我发现我们可以对这个私钥进行硬编码,但这对于具有多个用户的系统来说并不理想。 我应该怎么做才能执行此 transferFrom() function?

这是我的智能合约和交易代码:

async playerLoseMoney(){
    // Transfer money from player to the dealer
    const AMOUNT = 1;
    try{
      const contract = await this.getContract(erc20_abi_json);
      const computerChoice = await contract.methods.TransferFrom(
        "0x8a2a3a1dacF2B4b57734eB3DB71c33d3EBe263B6",
        "0xc00432E08770B9be73fB2303203B407d7B2E2cf2",
        AMOUNT
      ).call();
      alert("You lose 1 coin!")
    }catch(err){
      alert(err.stack);
      window.location.reload(); 
    }
  }
contract ERC20Token is IERC20 {
    ....
    function transferFrom(address owner, address buyer, uint256 numTokens) public returns(bool){
        require(numTokens <= balances[owner]);
        require(numTokens <= allowed[owner][msg.sender]);

        balances[owner] = balances[owner].sub(numTokens);
        allowed[owner][msg.sender] = allowed[owner][msg.sender].sub(numTokens);
        balances[buyer] = balances[buyer].add(numTokens);
        emit Transfer(owner, buyer, numTokens);
        return true;
    }
}

私钥使您可以控制该帐户。 因此,erc20 不使用私钥,而是实施允许和批准。 我在这里对它们进行了解释: ERC20 标准中的 approve 和 allowance 方法到底在做什么?

基本上,您的帐户地址允许提取指定代币数量的合约地址。

因此,您应该传递公共地址而不是传递私钥

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM