繁体   English   中英

solidity 智能合约能否代表 msg.sender 在 erc20 合约中执行 approve function

[英]Can a solidity smart contract execute the approve function in an erc20 contract on behalf of the msg.sender

建立银行合同以执行存款和取款。 我想知道银行合约是否有可能代表 msg.sender 为他们想要存入的代币执行 erc20 合约中的 approve function。 下面是我尝试让银行合约调用 erc20 代币合约 approve function。但是,msg.sender 不是银行合约地址而不是原始的 msg.sender(存款令牌的第二行 function。)这听起来很傻但是合同有没有办法发送传入 msg.senders 地址的请求? 如果没有,则 msg.sender 是否有一种集成的方式来批准银行合约地址和金额,以使银行合约能够调用 transferFrom function 并获得津贴。

//best guess on what that would look like inside the function depositTokens
msg.sender = customer;
customer.IER20(usdt).approve.address(this), uint _amount;
address public usdt;
  mapping(address => uint) public bankBalance;
  constructor() public {
      usdt = 0x77c24f0Af71257C0ee26e0E0a108F940D1698d53;
  }
usdt = 0x77c24f0Af71257C0ee26e0E0a108F940D1698d53;
  function depositTokens(uint _amount) public {
      IER20(usdt).approve.address(this), uint _amount;
      // Trasnfer usdt tokens to contract
      IERC20(usdt).transferFrom(msg.sender, address(this), _amount);
      // Update the bank balance in map
      bankBalance[msg.sender] = bankBalance[msg.sender] + _amount;
  }

//approve function in erc20
  function approve(address delegate, uint256 numTokens) public override returns (bool) {
      allowed[msg.sender][delegate] = numTokens;
      emit Approval(msg.sender, delegate, numTokens);
      return true;

答案是否定的,approve function 将msg.sender作为给津贴的那个。 您可以在此处查看最常用的 OpenZeppelin 实现。

但是我可以看到你正在尝试做什么,我想补充一点,有一种方法可以在发送交易之前自动要求 EOA(外部拥有账户)或拥有钱包的用户批准合同中的一些代币。 我不知道钱包是自动执行还是您必须在 UI 中对其进行编码,但我认为这就是您要找的。

然后在用户已经批准您的银行后,您可以删除deposit中的第一行 function

暂无
暂无

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

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