블록체인
[이더리움/Foundry] Permit ERC2612 서명값(ERC712) 가져오기
초보 & 뉴비
2026. 4. 26. 05:52
(uint8 v, bytes32 r, bytes32 s) = vm.sign(privateKey, digest);
// Permit 내에 구현된 해시 (그대로 사용해야 함 )
bytes32 permitTypeHash = keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)");
address spender = 0x;
uint256 value = 1; // 1 wei
uint256 nonce = contractInstance.nonces(owner); // 서명 재사용 방지, ERC20Permit을 상속하는 contractInstance 메소드
uint256 deadline = block.timestamp + 1 hours;
bytes32 digest = keccak256(
abi.encodePacked(
"\x19\x01", // 고정
contractInstance.DOMAIN_SEPARATOR(), // 서명 재사용 방지, ERC20Permit을 상속하는 contractInstance 메소드
keccak256(abi.encode(permitTypeHash, owner, spender, value, nonce, deadline))
)
);
(uint8 v, bytes32 r, bytes32 s) = vm.sign(digest);
- Foundry 사용 시 사실상 PrivateKey를 알고 있기 때문에 ECDSA 서명을 만들 수 있음 =>
vm.sign() - 서명 함수 리턴 값인 v r s 를 가지고 ecrecover, ECDSA.recover, permit() 등에 넣어서 서명을 검증 할 수 있음