首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >合同可以允许ERC20令牌进入EOA帐户吗?

合同可以允许ERC20令牌进入EOA帐户吗?
EN

Ethereum用户
提问于 2023-01-12 09:24:16
回答 3查看 145关注 0票数 0

我们知道EOA帐户有私钥,所以EOA帐户可以允许其他EOA帐户使用他的令牌。但是合同能允许一个EOA账户吗?以下是我的问题:

  1. 如果合同有ERC20令牌,合同许可EOA帐户吗?
  2. 如果合同有ERC20标记,合同许可合同可以吗?
  3. 如果EOA帐户有ERC20令牌,那么EOA帐户是否允许签订合同?

这是我的代码逻辑:合同A在合同B中有10个ERC20令牌,如果合同A有EOA (),A是否允许一个EOA帐户使用他的ERC20令牌?

EN

回答 3

Ethereum用户

发布于 2023-01-12 09:45:07

  1. 是的,合同可以调用ERC(令牌).approve(eEOA,c装入)
  2. 完全一样是的。
  3. 是的,的确,这是与defi协议的经典交互,当您批准defi协议来传输令牌时。

希望能帮上忙!

票数 1
EN

Ethereum用户

发布于 2023-01-12 13:26:30

但是合同能允许一个EOA账户吗?

我假设您在这里所指的是来自ERC20Permit的许可证()函数,而不是来自普通ERC20标准的批准函数。在这种情况下,从理论上讲,你可能需要找到“合同私钥”(一种解析到合同地址的私钥,我的意思是,你实际上不能与它签署交易,至少不能在部署在该地址的合同的网络(S)上),并从该私钥构建许可证。

票数 0
EN

Ethereum用户

发布于 2023-01-12 13:40:13

首先,智能契约签名是由EIP-1271规范的(使用示例在这里可以找到:openzeppelin/ERC1271WalletMock.sol)。

但是,许可标准(EIP-2612)将签名组件定义如下:

rsv是来自owner的有效secp256k1签名。

最流行的用OpenZeppelin实现检查签名的方式如下:

代码语言:javascript
复制
ECDSA.recover(hash, v, r, s);

如果他们使用SignatureChecker检查签名,这是可能的。

但是,智能契约钱包可以实现基于所有者签名的permit-like功能:

代码语言:javascript
复制
contract Vault is Ownable, EIP712 {
    bytes32 public constant TOKEN_PERMIT_TYPEHASH = keccak256(
        "TokenPermit("
            "address token,"
            "address spender,"
            "uint256 value,"
            "uint256 nonce,"
            "uint256 deadline"
        ")"
    );

    mapping(address => uint256) public nonces;

    function tokenPermit(
        address token,
        address spender,
        uint256 value,
        uint256 deadline,
        bytes memory signature,
    ) external {
        require(block.timestamp <= deadline, "ERC20Permit: expired deadline");

        bytes32 structHash = keccak256(abi.encode(TOKEN_PERMIT_TYPEHASH, token, spender, value, nonces[spender]++, deadline));

        bytes32 hash = _hashTypedDataV4(structHash);

        address signer = SignatureChecker.isValidSignatureNow(owner(), hash, signature);
        require(signer == owner(), "TokenPermit: invalid signature");

        IERC20(token).approve(spender, value);
    }
}
票数 0
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

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

复制
相关文章

相似问题

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