ERC20 Transferfrom()带有Web3J和MetAmask的私钥
我使用标准IERC20创建ERC20智能合约。
我做了一个赌博游戏,如果当前用户失去了,他/她将不得不将一个令牌转移给经销商(也是智能合约的Deployer aka msg.sender)。
在上面的方案中,我认为转换(“ Current_user_privatekey”,“ Deverloyer_publickey”,1)应该是答案。
但是,使用Web3JS和MetAmask,我不确定如何获得“ Current_user_privatekey”,因为MetAmask不允许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;
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
私钥可让您控制该帐户。因此,ERC20不使用私钥,而是实现津贴并批准。我在这里解释了它们:
基本上,您的帐户地址允许撤回指定的令牌金额的合同地址。
因此,您应该通过公共地址,而不是通过私钥,而是
Private key gives you control of that account. So instead of using private key, erc20 implements allowance and approve. I explained them here: what approve and allowance methods are really doing in ERC20 Standard?
Basically your account address is allowing contract address for a specified token amount to be withdrawn.
So instead of passing private key, you should be passing the public address