블록체인

[이더리움/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() 등에 넣어서 서명을 검증 할 수 있음