Foundry
Test
Assert
assertApproxEqAbs: 유사값 확인. 오차 범위 내의 값인지 확인한다. 오차는 앞뒤 절대값으로 계산- Lt, Gt 로 오차 범위 체크하는 것보다 이게 깔끔함. 다만 앞뒤 범위가 다르다면 직접 해야
assertApproxEqRel: 유사값 확인. 오차 범위 내의 값인지 확인한다. 오차는 앞뒤 비율로 계산. 1e18 를 100%로 하는 퍼센테이지 계산- Foundry는 StdError를 제공한다. 만약 StdError를 사용하지 않고 직접 캐치하려면 다음과 같이 처리한다.
vm.expectRevert(abi.encodeWithSignature("Panic(uint256)", 0x11));: 언더플로우/오버플로우 계산 오류 (unchecked 밖에서 발생한)vm.expectRevert(abi.encodeWithSignature("Panic(uint256)", 0x12));: 0 으로 나누기 에러- 기타 패닉 코드는 panic-via-assert-and-error-via-require 참고
Vm
prank: 호출자를 변경한다. address 인자 두개를 넣으면 tx.origin도 변경 가능하다.deal: 계정에게 네이티브 토큰(ETH) 양 설정하기etch: 특정 주소에 컨트랙트 셋팅하기roll: block.number 조작하기. 해당 값으로 설정하기 때문에, 블록 넘버의 증가를 시뮬레이션하기 위해서는vm.roll(block.number + 1)과 같이 사용해야 한다.warp: block.timestamp 조작하기. 해당 값으로 설정하기 때문에, 시간의 흐름을 시뮬레이션하기 위해서는vm.warp(block.timestamp + 1)와 같이 사용해야 한다.
주의할 점
ZKSync
zksync 체인의 컨트랙트 개발에는 foundry-zksync를 이용하는 게 좋다.
tags: blockchain, smart contract