diff --git a/.gas-snapshot b/.gas-snapshot new file mode 100644 index 0000000..323dd5c --- /dev/null +++ b/.gas-snapshot @@ -0,0 +1,51 @@ +CounterTest:testFuzz_IncrementNeverOverflows(uint256) (runs: 1000, μ: 29848, ~: 29842) +CounterTest:testFuzz_SetNumber(uint256) (runs: 1000, μ: 27784, ~: 28501) +CounterTest:test_Decrement_RevertOnZero() (gas: 10507) +CounterTest:test_Increment() (gas: 28504) +NFTTest:testFuzz_Mint_AnyOwnerAndTokenId(address,uint256) (runs: 1000, μ: 57635, ~: 57635) +NFTTest:test_ApprovedSpenderCanTransfer() (gas: 89948) +NFTTest:test_MintAndOwnership() (gas: 56843) +NFTTest:test_Mint_RevertOnDoubleMint() (gas: 60750) +NFTTest:test_Mint_RevertOnZeroAddress() (gas: 8719) +NFTTest:test_OperatorCanTransfer() (gas: 97310) +NFTTest:test_OwnerOf_RevertOnNonexistent() (gas: 10784) +NFTTest:test_TransferFrom_ByOwner() (gas: 71974) +NFTTest:test_TransferFrom_RevertOnZeroAddress() (gas: 59090) +NFTTest:test_TransferFrom_RevertWhenUnauthorized() (gas: 66062) +NFTTest:test_Transfer_ClearsApproval() (gas: 88882) +OwnableTest:test_Accept_RevertWhenNotPending() (gas: 39927) +OwnableTest:test_InitialOwnerIsDeployer() (gas: 12926) +OwnableTest:test_OnlyOwner_CanCallProtected() (gas: 36846) +OwnableTest:test_Renounce_ZerosOwner() (gas: 14479) +OwnableTest:test_Transfer_OverwritesPendingOwner() (gas: 44002) +OwnableTest:test_Transfer_RevertWhenNotOwner() (gas: 15260) +OwnableTest:test_TwoStepTransfer() (gas: 34792) +StakingInvariantTest:invariant_totalStakedEqualsBalance() (runs: 256, calls: 3840, reverts: 0) +StakingTest:testFuzz_StakeUnstake_TotalAlwaysConsistent(uint96,uint96) (runs: 1000, μ: 113808, ~: 114389) +StakingTest:test_Stake() (gas: 65043) +StakingTest:test_Unstake() (gas: 75504) +StakingTest:test_Unstake_RevertInsufficientStake() (gas: 64892) +TimeLockTest:testFuzz_ExecuteAtAnyTimeAfterEta(uint256) (runs: 1000, μ: 56458, ~: 56505) +TimeLockTest:test_Cancel_ClearsQueue() (gas: 36989) +TimeLockTest:test_Execute_RevertWhenNotQueued() (gas: 20812) +TimeLockTest:test_Execute_RevertWhenTooEarly() (gas: 47721) +TimeLockTest:test_OnlyAdmin_CanExecute() (gas: 48914) +TimeLockTest:test_OnlyAdmin_CanQueue() (gas: 16143) +TimeLockTest:test_QueueThenExecute() (gas: 55711) +TimeLockTest:test_Queue_RevertOnDuplicate() (gas: 46068) +TokenTest:testFuzz_Approve(address,uint256) (runs: 1000, μ: 36452, ~: 36831) +TokenTest:testFuzz_Transfer_PreservesTotalSupply(uint256) (runs: 1000, μ: 47212, ~: 47844) +TokenTest:test_Approve_AndTransferFrom() (gas: 72961) +TokenTest:test_InfiniteAllowance_NotDecremented() (gas: 69946) +TokenTest:test_Metadata() (gas: 21459) +TokenTest:test_Transfer() (gas: 44638) +TokenTest:test_TransferFrom_RevertOnInsufficientAllowance() (gas: 39482) +TokenTest:test_Transfer_RevertOnInsufficientBalance() (gas: 15571) +TokenTest:test_Transfer_RevertOnZeroAddress() (gas: 11220) +VaultInvariantTest:invariant_contractBalanceEqualsUserSum() (runs: 256, calls: 3840, reverts: 0) +VaultInvariantTest:invariant_netFlowEqualsBalance() (runs: 256, calls: 3840, reverts: 0) +VaultInvariantTest:invariant_totalAssetsMatchesBalance() (runs: 256, calls: 3840, reverts: 0) +VaultTest:testFuzz_DepositWithdrawInvariant(uint96,uint96) (runs: 1000, μ: 54339, ~: 55245) +VaultTest:test_Deposit() (gas: 42719) +VaultTest:test_Withdraw() (gas: 52401) +VaultTest:test_Withdraw_RevertOnInsufficientBalance() (gas: 42777) \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..6f72060 --- /dev/null +++ b/Makefile @@ -0,0 +1,53 @@ +# Common workflows. Forge has good defaults; this just shortens what I type 50x a day. + +.PHONY: help build test test-watch fuzz invariant snapshot snapshot-check gas coverage fmt clean deploy + +help: + @echo "build - forge build" + @echo "test - forge test (full suite, summary output)" + @echo "test-watch - rerun tests on file change" + @echo "fuzz - run fuzz tests only, with more runs" + @echo "invariant - run invariant tests only, with more depth" + @echo "snapshot - write .gas-snapshot baseline" + @echo "snapshot-check - fail if gas usage moved vs baseline" + @echo "gas - per-test gas report" + @echo "coverage - line coverage summary" + @echo "fmt - forge fmt" + @echo "clean - remove build artifacts" + @echo "deploy - run script/Deploy.s.sol (needs PRIVATE_KEY, RPC_URL)" + +build: + forge build + +test: + forge test --summary + +test-watch: + forge test --watch + +fuzz: + forge test --match-test "Fuzz" --fuzz-runs 5000 + +invariant: + forge test --match-test "invariant" --invariant-runs 1000 --invariant-depth 50 + +snapshot: + forge snapshot + +snapshot-check: + forge snapshot --check + +gas: + forge test --gas-report + +coverage: + forge coverage --report summary + +fmt: + forge fmt + +clean: + forge clean + +deploy: + forge script script/Deploy.s.sol:DeployScript --rpc-url $$RPC_URL --broadcast -vvv