erc20的permit函数r,s,v值怎么获取
时间: 2024-03-02 22:49:16 浏览: 214
ERC20的permit函数是EIP-2612中提出的一种授权方式,用于在某些情况下减少了用户在进行交易时需要进行两次交易的繁琐操作。
在调用permit函数时,需要传入以下参数:
- owner: 发起授权的账户地址
- spender: 被授权的账户地址
- value: 授权的代币数量
- deadline: 授权截止时间,一般为当前时间加上一个时间段
- v: 用于恢复签名的值
- r: 签名的r值
- s: 签名的s值
其中,v、r、s是通过对owner地址和其他参数进行签名获得的。这里有一个示例代码,可以参考一下:
```solidity
function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external {
require(deadline >= block.timestamp, 'ChitSwap: EXPIRED');
bytes32 hashStruct = keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, value, nonces[owner]++, deadline));
bytes32 hash = keccak256(abi.encodePacked('\x19\x01', DOMAIN_SEPARATOR, hashStruct));
address signer = ecrecover(hash, v, r, s);
require(signer != address(0) && signer == owner, 'ChitSwap: INVALID_SIGNATURE');
_approve(owner, spender, value);
}
```
需要注意的是,不同的ERC20代币实现可能会有所不同,具体实现还需要查看对应的合约代码。
阅读全文