ERC20 transferFrom()私钥与web3js和元掩码



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

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

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

然而,与web3js和元掩码,我不确定如何获得"current_user_privatekey",因为元掩码将不允许web3js获得私钥。在StackOverflow的其他帖子中,我发现我们可以硬编码这个私钥,但对于有几个用户的系统来说,这并不理想。我应该怎么做来执行这个transferFrom()函数?

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

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标准中,批准和允许方法到底在做什么?

基本上,您的帐户地址允许提取指定代币金额的合同地址。

传递的不是私钥,而是公共地址

相关内容

  • 没有找到相关文章

最新更新