From 0a59095bc33ffc3aa036a97fd950d622bf5b1d59 Mon Sep 17 00:00:00 2001 From: didi Date: Tue, 18 Feb 2025 11:52:35 +0100 Subject: [PATCH 1/5] switch to foundry v1 (stable) --- flake.lock | 8 ++++---- flake.nix | 2 +- packages/ethereum-contracts/foundry.toml | 2 ++ 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/flake.lock b/flake.lock index b347240854..ce8fd40f2c 100644 --- a/flake.lock +++ b/flake.lock @@ -28,16 +28,16 @@ ] }, "locked": { - "lastModified": 1730625090, - "narHash": "sha256-lWfkkj+GEUM0UqYLD2Rx3zzILTL3xdmGJKGR4fwONpA=", + "lastModified": 1739524201, + "narHash": "sha256-ihmDBJIcM8sMvzYDGCc2aas34kLOEwXQuWlOvocChjk=", "owner": "shazow", "repo": "foundry.nix", - "rev": "1c6a742bcbfd55a80de0e1f967a60174716a1560", + "rev": "72db7ea069f055d5c7856aca091179a070201931", "type": "github" }, "original": { "owner": "shazow", - "ref": "monthly", + "ref": "stable", "repo": "foundry.nix", "type": "github" } diff --git a/flake.nix b/flake.nix index 471be65563..50cdc98323 100644 --- a/flake.nix +++ b/flake.nix @@ -5,7 +5,7 @@ flake-utils.url = "github:numtide/flake-utils"; nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; foundry = { - url = "github:shazow/foundry.nix/monthly"; + url = "github:shazow/foundry.nix/stable"; inputs.flake-utils.follows = "flake-utils"; inputs.nixpkgs.follows = "nixpkgs"; }; diff --git a/packages/ethereum-contracts/foundry.toml b/packages/ethereum-contracts/foundry.toml index bfc0278b1c..0d39459284 100644 --- a/packages/ethereum-contracts/foundry.toml +++ b/packages/ethereum-contracts/foundry.toml @@ -9,6 +9,8 @@ ignored_error_codes = [ ] # keep in sync with truffle-config.js evm_version = 'paris' +optimizer = true +optimizer_runs = 200 remappings = [ '@superfluid-finance/ethereum-contracts/contracts/=packages/ethereum-contracts/contracts/', '@superfluid-finance/solidity-semantic-money/src/=packages/solidity-semantic-money/src/', From e5ffab0f59d3828d4166e7b62477525554a6c71c Mon Sep 17 00:00:00 2001 From: didi Date: Wed, 19 Feb 2025 08:46:38 +0100 Subject: [PATCH 2/5] migration fixes --- packages/automation-contracts/autowrap/foundry.toml | 2 ++ packages/automation-contracts/autowrap/test/Manager.t.sol | 8 ++++++-- .../automation-contracts/autowrap/test/WrapStrategy.t.sol | 3 ++- packages/automation-contracts/scheduler/foundry.toml | 2 ++ packages/hot-fuzz/foundry.toml | 2 ++ packages/solidity-semantic-money/foundry.toml | 2 ++ 6 files changed, 16 insertions(+), 3 deletions(-) diff --git a/packages/automation-contracts/autowrap/foundry.toml b/packages/automation-contracts/autowrap/foundry.toml index 38ee59fb0b..9869431f1b 100644 --- a/packages/automation-contracts/autowrap/foundry.toml +++ b/packages/automation-contracts/autowrap/foundry.toml @@ -3,6 +3,8 @@ root = '../../../' libs = ['lib'] src = 'packages/automation-contracts/autowrap' solc_version = "0.8.23" +optimizer = true +optimizer_runs = 200 remappings = [ '@superfluid-finance/solidity-semantic-money/src/=packages/solidity-semantic-money/src/', '@superfluid-finance/ethereum-contracts/=packages/ethereum-contracts/', diff --git a/packages/automation-contracts/autowrap/test/Manager.t.sol b/packages/automation-contracts/autowrap/test/Manager.t.sol index 5c40171403..ee81cfff0b 100644 --- a/packages/automation-contracts/autowrap/test/Manager.t.sol +++ b/packages/automation-contracts/autowrap/test/Manager.t.sol @@ -77,11 +77,15 @@ contract ManagerTests is FoundrySuperfluidTester { /// TESTS - function testFailDeploymentWithoutCFA() public { + function test_RevertWhen_DeploymentWithoutCFA() public { + vm.expectRevert(IManager.ZeroAddress.selector); new Manager(address(0), 1, 2); } - function testFailDeploymentWrongLimits() public { + function test_RevertWhen_DeploymentWrongLimits() public { + vm.expectRevert( + abi.encodeWithSelector(IManager.WrongLimits.selector, 2, 1) + ); new Manager(address(sf.cfa), 2, 1); } diff --git a/packages/automation-contracts/autowrap/test/WrapStrategy.t.sol b/packages/automation-contracts/autowrap/test/WrapStrategy.t.sol index 856f486866..327c8fca24 100644 --- a/packages/automation-contracts/autowrap/test/WrapStrategy.t.sol +++ b/packages/automation-contracts/autowrap/test/WrapStrategy.t.sol @@ -60,7 +60,8 @@ contract WrapStrategyTests is FoundrySuperfluidTester { /// TESTS - function testFailDeploymentWithoutManager() public { + function test_RevertWhen_DeploymentWithoutManager() public { + vm.expectRevert(IStrategy.ZeroAddress.selector); new WrapStrategy(address(0)); } diff --git a/packages/automation-contracts/scheduler/foundry.toml b/packages/automation-contracts/scheduler/foundry.toml index 6b3a7ebf3a..e80380b8d3 100644 --- a/packages/automation-contracts/scheduler/foundry.toml +++ b/packages/automation-contracts/scheduler/foundry.toml @@ -3,6 +3,8 @@ root = '../../../' libs = ['lib'] src = 'packages/automation-contracts/scheduler' solc_version = "0.8.23" +optimizer = true +optimizer_runs = 200 remappings = [ '@superfluid-finance/solidity-semantic-money/src/=packages/solidity-semantic-money/src/', '@superfluid-finance/ethereum-contracts/=packages/ethereum-contracts/', diff --git a/packages/hot-fuzz/foundry.toml b/packages/hot-fuzz/foundry.toml index 5cd5230ad1..dee3cd7a3e 100644 --- a/packages/hot-fuzz/foundry.toml +++ b/packages/hot-fuzz/foundry.toml @@ -2,6 +2,8 @@ root = '../..' src = 'packages/hot-fuzz/contracts' solc_version = "0.8.23" +optimizer = true +optimizer_runs = 200 remappings = [ '@superfluid-finance/ethereum-contracts/contracts/=packages/ethereum-contracts/contracts/', '@superfluid-finance/solidity-semantic-money/src/=packages/solidity-semantic-money/src/', diff --git a/packages/solidity-semantic-money/foundry.toml b/packages/solidity-semantic-money/foundry.toml index 1dd24e4df7..f7b6d1bbd8 100644 --- a/packages/solidity-semantic-money/foundry.toml +++ b/packages/solidity-semantic-money/foundry.toml @@ -6,6 +6,8 @@ cache_path = 'packages/solidity-semantic-money/out/default.cache' solc_version = '0.8.26' evm_version = 'paris' # no PUSH0 for now deny_warnings = true +optimizer = true +optimizer_runs = 200 via_ir = false remappings = [ '@superfluid-finance/solidity-semantic-money/src/=packages/solidity-semantic-money/src/', From 6a8662b76deb18cababbf316a569a5973f7e8146 Mon Sep 17 00:00:00 2001 From: didi Date: Wed, 19 Feb 2025 08:52:48 +0100 Subject: [PATCH 3/5] CHANGELOG and readme updates --- packages/ethereum-contracts/CHANGELOG.md | 1 + packages/ethereum-contracts/README.md | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/ethereum-contracts/CHANGELOG.md b/packages/ethereum-contracts/CHANGELOG.md index 0abf73b3d1..80a0de65cc 100644 --- a/packages/ethereum-contracts/CHANGELOG.md +++ b/packages/ethereum-contracts/CHANGELOG.md @@ -16,6 +16,7 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm - Fixed deployment of SimpleForwarder (solved an issue which caused batch operation `OPERATION_TYPE_SIMPLE_FORWARD_CALL` to always revert) - `SuperTokenV1Library.getFlowRate` and `SuperTokenV1Library.getFlowInfo` now also allow querying the flowrate between pools and pool members - Superfluid Pools now emit a Transfer event when changing units with `updateMemberUnits`. +- Dependency foundry updated to 1.0 ### Breaking - `SuperTokenV1Library.distributeFlow`: return `actualFlowRate` instead of a bool diff --git a/packages/ethereum-contracts/README.md b/packages/ethereum-contracts/README.md index c13774902d..c8e48c9f81 100644 --- a/packages/ethereum-contracts/README.md +++ b/packages/ethereum-contracts/README.md @@ -138,7 +138,7 @@ function testRevertIfDecreaseFlowRateAllowanceAndACLCreateFlow() { #### Internal Helper Functions -See [`FoundrySuperfluidTester.sol`](test/foundry/FoundrySuperfluidTester.sol) for examples of commonly used internal helper functions. +See [`FoundrySuperfluidTester.t.sol`](test/foundry/FoundrySuperfluidTester.t.sol) for examples of commonly used internal helper functions. If you are writing a test that requires a helper function, the helper function is prefixed with `_` and uses camelCase to indicate that it is an internal helper function. For example: ```solidity @@ -199,7 +199,7 @@ In foundry, you can use the `SuperfluidFrameworkDeployer` to deploy the Superflu import "forge-std/Test.sol"; import { ERC1820RegistryCompiled } from "@superfluid-finance/ethereum-contracts/contracts/libs/ERC1820RegistryCompiled.sol"; -import { SuperfluidFrameworkDeployer } from "@superfluid-finance/ethereum-contracts/contracts/utils/SuperfluidFrameworkDeployer.sol"; +import { SuperfluidFrameworkDeployer } from "@superfluid-finance/ethereum-contracts/contracts/utils/SuperfluidFrameworkDeployer.t.sol"; import { TestToken } from "@superfluid-finance/ethereum-contracts/contracts/utils/TestToken.sol"; import { SuperToken } from "@superfluid-finance/ethereum-contracts/contracts/superfluid/SuperToken.sol"; @@ -218,7 +218,7 @@ contract SomeTest is Test { } } ``` -See [SuperfluidFrameworkDeployer.sol](contracts/utils/SuperfluidFrameworkDeployer.sol) for more details. +See [SuperfluidFrameworkDeployer.t.sol](contracts/utils/SuperfluidFrameworkDeployer.t.sol) for more details. You can also deploy to a local blockchain (`hardhat` or `anvil`) via a forge script. For example, an example `Deploy.s.sol` file: From 83865d224f07f87f9d39b10473f7975d7cec6706 Mon Sep 17 00:00:00 2001 From: didi Date: Fri, 21 Feb 2025 11:23:51 +0100 Subject: [PATCH 4/5] keep hotfuzz evm_version at shanghai --- packages/hot-fuzz/foundry.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/hot-fuzz/foundry.toml b/packages/hot-fuzz/foundry.toml index dee3cd7a3e..1571e85714 100644 --- a/packages/hot-fuzz/foundry.toml +++ b/packages/hot-fuzz/foundry.toml @@ -2,6 +2,7 @@ root = '../..' src = 'packages/hot-fuzz/contracts' solc_version = "0.8.23" +evm_version = 'shanghai' optimizer = true optimizer_runs = 200 remappings = [ From 9f2259ac70a37189afe03881fa1878f3cfd62e67 Mon Sep 17 00:00:00 2001 From: didi Date: Fri, 21 Feb 2025 20:19:16 +0100 Subject: [PATCH 5/5] explicit evm_version for automation-contracts --- packages/automation-contracts/autowrap/foundry.toml | 1 + packages/automation-contracts/scheduler/foundry.toml | 1 + 2 files changed, 2 insertions(+) diff --git a/packages/automation-contracts/autowrap/foundry.toml b/packages/automation-contracts/autowrap/foundry.toml index 9869431f1b..bdf6e6f602 100644 --- a/packages/automation-contracts/autowrap/foundry.toml +++ b/packages/automation-contracts/autowrap/foundry.toml @@ -3,6 +3,7 @@ root = '../../../' libs = ['lib'] src = 'packages/automation-contracts/autowrap' solc_version = "0.8.23" +evm_version = 'paris' optimizer = true optimizer_runs = 200 remappings = [ diff --git a/packages/automation-contracts/scheduler/foundry.toml b/packages/automation-contracts/scheduler/foundry.toml index e80380b8d3..33fe841026 100644 --- a/packages/automation-contracts/scheduler/foundry.toml +++ b/packages/automation-contracts/scheduler/foundry.toml @@ -3,6 +3,7 @@ root = '../../../' libs = ['lib'] src = 'packages/automation-contracts/scheduler' solc_version = "0.8.23" +evm_version = 'paris' optimizer = true optimizer_runs = 200 remappings = [