diff --git a/packages/contracts/docs/osx/01-how-it-works/01-core/01-dao/01-actions.md b/packages/contracts/docs/osx/01-how-it-works/01-core/01-dao/01-actions.md index 6ae7c46dc..c22c8725f 100644 --- a/packages/contracts/docs/osx/01-how-it-works/01-core/01-dao/01-actions.md +++ b/packages/contracts/docs/osx/01-how-it-works/01-core/01-dao/01-actions.md @@ -59,9 +59,9 @@ We have an Aragon DAO deployed on the Goerli testnet. Now, we want to wrap `0.1 IDAO.Action[] memory actions = new IDAO.Action[](1); actions[0] = IDAO.Action({ - to: address(0xB4FBF271143F4FBf7B91A5ded31805e42b2208d6), // The address of the WETH contract on Goerli - value: 0.1 ether, // The Goerli ETH value to be sent with the function call - data: abi.encodeWithSelector(bytes4(keccak256('deposit()', []))) // The calldata + to: address(0xB4FBF271143F4FBf7B91A5ded31805e42b2208d6), // The address of the WETH contract on Goerli + value: 0.1 ether, // The Goerli ETH value to be sent with the function call + data: abi.encodeCall(IDAO.deposit, ()) // The calldata }); dao().execute({_callId: '', _actions: actions, _allowFailureMap: 0}); diff --git a/packages/contracts/docs/osx/02-how-to-guides/01-dao/02-action-execution.md b/packages/contracts/docs/osx/02-how-to-guides/01-dao/02-action-execution.md index 03a8588a8..0bf6771d6 100644 --- a/packages/contracts/docs/osx/02-how-to-guides/01-dao/02-action-execution.md +++ b/packages/contracts/docs/osx/02-how-to-guides/01-dao/02-action-execution.md @@ -44,7 +44,7 @@ function exampleFunctionCall( actions[0] = IDAO.Action({ to: address(_calculator), value: 0, // 0 native tokens must be sent with this call - data: abi.encodeWithSelector(_calculator.add.selector, _a, _b) + data: abi.encodeCall(_calculator.add, (_a, _b)) }); // Execute the action array @@ -79,7 +79,7 @@ function examplePayableFunctionCall(IDAO dao, bytes32 _callId, IWETH9 _wethToken actions[0] = IDAO.Action({ to: address(_wethToken), value: 0.1 ether, - data: abi.encodeWithSelector(IWETH9.deposit.selector) // abi.encodeWithSelector(bytes4(keccak256('deposit()')), []) + data: abi.encodeCall(IWETH9.deposit, ()) }); // Execute the action array @@ -104,7 +104,7 @@ function exampleGrantCall( actions[0] = IDAO.Action({ to: address(dao), value: 0, - data: abi.encodeWithSelector(PermissionManager.grant.selector, _where, _who, _permissionId) + data: abi.encodeCall(PermissionManager.grant, (_where, _who, _permissionId)) }); // Execute the action array diff --git a/packages/contracts/docs/osx/02-how-to-guides/02-plugin-development/04-upgradeable-plugin/03-setup.md b/packages/contracts/docs/osx/02-how-to-guides/02-plugin-development/04-upgradeable-plugin/03-setup.md index 96672979e..db702d00b 100644 --- a/packages/contracts/docs/osx/02-how-to-guides/02-plugin-development/04-upgradeable-plugin/03-setup.md +++ b/packages/contracts/docs/osx/02-how-to-guides/02-plugin-development/04-upgradeable-plugin/03-setup.md @@ -68,7 +68,7 @@ contract SimpleStorageBuild1Setup is PluginSetup { plugin = createERC1967Proxy( simpleStorageImplementation, - abi.encodeWithSelector(SimpleStorageBuild1.initializeBuild1.selector, _dao, number) + abi.encodeCall(SimpleStorageBuild1.initializeBuild1, (IDAO(_dao), number)) ); PermissionLib.MultiTargetPermission[] @@ -190,7 +190,7 @@ contract SimpleStorageBuild2Setup is PluginSetup { plugin = createERC1967Proxy( simpleStorageImplementation, - abi.encodeWithSelector(SimpleStorageBuild2.initializeBuild2.selector, _dao, _number, _account) + abi.encodeCall(SimpleStorageBuild2.initializeBuild2, (IDAO(_dao), _number, _account)) ); PermissionLib.MultiTargetPermission[] @@ -222,10 +222,7 @@ contract SimpleStorageBuild2Setup is PluginSetup { if (_currentBuild == 1) { address _account = abi.decode(_payload.data, (address)); - initData = abi.encodeWithSelector( - SimpleStorageBuild2.initializeFromBuild1.selector, - _account - ); + initData = abi.encodeCall(SimpleStorageBuild2.initializeFromBuild1, _account); } } @@ -360,7 +357,7 @@ contract SimpleStorageBuild3Setup is PluginSetup { plugin = createERC1967Proxy( simpleStorageImplementation, - abi.encodeWithSelector(SimpleStorageBuild3.initializeBuild3.selector, _dao, _number, _account) + abi.encodeCall(SimpleStorageBuild3.initializeBuild3, (IDAO(_dao), _number, _account)) ); PermissionLib.MultiTargetPermission[] @@ -394,12 +391,9 @@ contract SimpleStorageBuild3Setup is PluginSetup { { if (_currentBuild == 1) { address _account = abi.decode(_payload.data, (address)); - initData = abi.encodeWithSelector( - SimpleStorageBuild3.initializeFromBuild1.selector, - _account - ); + initData = abi.encodeCall(SimpleStorageBuild3.initializeFromBuild1, (_account)); } else if (_currentBuild == 2) { - initData = abi.encodeWithSelector(SimpleStorageBuild3.initializeFromBuild2.selector); + initData = abi.encodeCall(SimpleStorageBuild3.initializeFromBuild2, ()); } PermissionLib.MultiTargetPermission[] diff --git a/packages/contracts/src/framework/plugin/repo/PluginRepoFactory.sol b/packages/contracts/src/framework/plugin/repo/PluginRepoFactory.sol index 4a666b0ac..9ceeedad7 100644 --- a/packages/contracts/src/framework/plugin/repo/PluginRepoFactory.sol +++ b/packages/contracts/src/framework/plugin/repo/PluginRepoFactory.sol @@ -119,7 +119,7 @@ contract PluginRepoFactory { pluginRepo = PluginRepo( createERC1967Proxy( pluginRepoBase, - abi.encodeWithSelector(PluginRepo.initialize.selector, _initialOwner) + abi.encodeCall(PluginRepo.initialize, (_initialOwner)) ) ); diff --git a/packages/contracts/src/framework/utils/TokenFactory.sol b/packages/contracts/src/framework/utils/TokenFactory.sol index 1573298f0..2b41af6ae 100644 --- a/packages/contracts/src/framework/utils/TokenFactory.sol +++ b/packages/contracts/src/framework/utils/TokenFactory.sol @@ -87,7 +87,7 @@ contract TokenFactory { if (token != address(0)) { // Validate if token is ERC20 bytes memory data = token.functionStaticCall( - abi.encodeWithSelector(IERC20Upgradeable.balanceOf.selector, address(this)) + abi.encodeCall(IERC20Upgradeable.balanceOf, (address(this))) ); if (data.length != 0x20) { diff --git a/packages/contracts/src/plugins/counter-example/v1/CounterV1PluginSetup.sol b/packages/contracts/src/plugins/counter-example/v1/CounterV1PluginSetup.sol index b61527b8c..1b95e75b8 100644 --- a/packages/contracts/src/plugins/counter-example/v1/CounterV1PluginSetup.sol +++ b/packages/contracts/src/plugins/counter-example/v1/CounterV1PluginSetup.sol @@ -4,6 +4,7 @@ pragma solidity 0.8.17; import {Clones} from "@openzeppelin/contracts/proxy/Clones.sol"; +import {IDAO} from "../../../core/dao/IDAO.sol"; import {PermissionLib} from "../../../core/permission/PermissionLib.sol"; import {IPluginSetup} from "../../../framework/plugin/setup/IPluginSetup.sol"; import {PluginSetup} from "../../../framework/plugin/setup/PluginSetup.sol"; @@ -44,11 +45,9 @@ contract CounterV1PluginSetup is PluginSetup { multiplyHelper = createERC1967Proxy(address(multiplyHelperBase), bytes("")); } - bytes memory initData = abi.encodeWithSelector( - bytes4(keccak256("initialize(address,address,uint256)")), - _dao, - multiplyHelper, - _num + bytes memory initData = abi.encodeCall( + CounterV1.initialize, + (IDAO(_dao), MultiplyHelper(multiplyHelper), _num) ); PermissionLib.MultiTargetPermission[] diff --git a/packages/contracts/src/plugins/counter-example/v2/CounterV2PluginSetup.sol b/packages/contracts/src/plugins/counter-example/v2/CounterV2PluginSetup.sol index e9326ef68..baa260832 100644 --- a/packages/contracts/src/plugins/counter-example/v2/CounterV2PluginSetup.sol +++ b/packages/contracts/src/plugins/counter-example/v2/CounterV2PluginSetup.sol @@ -4,6 +4,7 @@ pragma solidity 0.8.17; import {Clones} from "@openzeppelin/contracts/proxy/Clones.sol"; +import {IDAO} from "../../../core/dao/IDAO.sol"; import {PermissionLib} from "../../../core/permission/PermissionLib.sol"; import {IPluginSetup} from "../../../framework/plugin/setup/IPluginSetup.sol"; import {PluginSetup} from "../../../framework/plugin/setup/PluginSetup.sol"; @@ -37,7 +38,10 @@ contract CounterV2PluginSetup is PluginSetup { returns (address plugin, PreparedSetupData memory preparedSetupData) { // Decode the parameters from the UI - (address _multiplyHelper, uint256 _num) = abi.decode(_data, (address, uint256)); + (address _multiplyHelper, uint256 _num, uint256 _newVariable) = abi.decode( + _data, + (address, uint256, uint256) + ); address multiplyHelper = _multiplyHelper; @@ -45,11 +49,9 @@ contract CounterV2PluginSetup is PluginSetup { multiplyHelper = createERC1967Proxy(address(multiplyHelperBase), bytes("")); } - bytes memory initData = abi.encodeWithSelector( - bytes4(keccak256("initialize(address,address,uint256)")), - _dao, - multiplyHelper, - _num + bytes memory initData = abi.encodeCall( + CounterV2.initialize, + (IDAO(_dao), MultiplyHelper(multiplyHelper), _num, _newVariable) ); PermissionLib.MultiTargetPermission[] @@ -112,10 +114,7 @@ contract CounterV2PluginSetup is PluginSetup { if (_currentBuild == 1) { (_newVariable) = abi.decode(_payload.data, (uint256)); - initData = abi.encodeWithSelector( - bytes4(keccak256("setNewVariable(uint256)")), - _newVariable - ); + initData = abi.encodeCall(CounterV2.setNewVariable, (_newVariable)); } PermissionLib.MultiTargetPermission[] diff --git a/packages/contracts/src/plugins/governance/majority-voting/addresslist/AddresslistVotingSetup.sol b/packages/contracts/src/plugins/governance/majority-voting/addresslist/AddresslistVotingSetup.sol index 4de890853..7a8e46a03 100644 --- a/packages/contracts/src/plugins/governance/majority-voting/addresslist/AddresslistVotingSetup.sol +++ b/packages/contracts/src/plugins/governance/majority-voting/addresslist/AddresslistVotingSetup.sol @@ -33,12 +33,7 @@ contract AddresslistVotingSetup is PluginSetup { // Prepare and Deploy the plugin proxy. plugin = createERC1967Proxy( address(addresslistVotingBase), - abi.encodeWithSelector( - AddresslistVoting.initialize.selector, - _dao, - votingSettings, - members - ) + abi.encodeCall(AddresslistVoting.initialize, (IDAO(_dao), votingSettings, members)) ); // Prepare permissions diff --git a/packages/contracts/src/plugins/governance/majority-voting/token/TokenVotingSetup.sol b/packages/contracts/src/plugins/governance/majority-voting/token/TokenVotingSetup.sol index 99067ef36..362f5d616 100644 --- a/packages/contracts/src/plugins/governance/majority-voting/token/TokenVotingSetup.sol +++ b/packages/contracts/src/plugins/governance/majority-voting/token/TokenVotingSetup.sol @@ -142,7 +142,10 @@ contract TokenVotingSetup is PluginSetup { // Prepare and deploy plugin proxy. plugin = createERC1967Proxy( address(tokenVotingBase), - abi.encodeWithSelector(TokenVoting.initialize.selector, _dao, votingSettings, token) + abi.encodeCall( + TokenVoting.initialize, + (IDAO(_dao), votingSettings, IVotesUpgradeable(token)) + ) ); // Prepare permissions @@ -275,7 +278,7 @@ contract TokenVotingSetup is PluginSetup { /// @param token The token address function _isERC20(address token) private view returns (bool) { (bool success, bytes memory data) = token.staticcall( - abi.encodeWithSelector(IERC20Upgradeable.balanceOf.selector, address(this)) + abi.encodeCall(IERC20Upgradeable.balanceOf, (address(this))) ); return success && data.length == 0x20; } diff --git a/packages/contracts/src/plugins/governance/multisig/MultisigSetup.sol b/packages/contracts/src/plugins/governance/multisig/MultisigSetup.sol index e4258aac9..35b430b5b 100644 --- a/packages/contracts/src/plugins/governance/multisig/MultisigSetup.sol +++ b/packages/contracts/src/plugins/governance/multisig/MultisigSetup.sol @@ -34,7 +34,7 @@ contract MultisigSetup is PluginSetup { // Prepare and Deploy the plugin proxy. plugin = createERC1967Proxy( address(multisigBase), - abi.encodeWithSelector(Multisig.initialize.selector, _dao, members, multisigSettings) + abi.encodeCall(Multisig.initialize, (IDAO(_dao), members, multisigSettings)) ); // Prepare permissions diff --git a/packages/contracts/src/plugins/token/MerkleMinter.sol b/packages/contracts/src/plugins/token/MerkleMinter.sol index 45744fde4..f878fb4ac 100644 --- a/packages/contracts/src/plugins/token/MerkleMinter.sol +++ b/packages/contracts/src/plugins/token/MerkleMinter.sol @@ -79,11 +79,9 @@ contract MerkleMinter is IMerkleMinter, PluginUUPSUpgradeable { ) external override auth(MERKLE_MINT_PERMISSION_ID) returns (IMerkleDistributor distributor) { address distributorAddr = createERC1967Proxy( address(distributorBase), - abi.encodeWithSelector( - MerkleDistributor.initialize.selector, - dao(), - IERC20Upgradeable(address(token)), - _merkleRoot + abi.encodeCall( + MerkleDistributor.initialize, + (dao(), IERC20Upgradeable(address(token)), _merkleRoot) ) ); diff --git a/packages/contracts/src/test/plugin/UUPSUpgradeable/PluginUUPSUpgradeableSetupMock.sol b/packages/contracts/src/test/plugin/UUPSUpgradeable/PluginUUPSUpgradeableSetupMock.sol index 482d5b94a..2c8330344 100644 --- a/packages/contracts/src/test/plugin/UUPSUpgradeable/PluginUUPSUpgradeableSetupMock.sol +++ b/packages/contracts/src/test/plugin/UUPSUpgradeable/PluginUUPSUpgradeableSetupMock.sol @@ -83,9 +83,7 @@ contract PluginUUPSUpgradeableSetupV2Mock is PluginUUPSUpgradeableSetupV1Mock { // Update from V1 if (_currentBuild == 1) { preparedSetupData.helpers = mockHelpers(2); - initData = abi.encodeWithSelector( - PluginUUPSUpgradeableV2Mock.initializeV1toV2.selector - ); + initData = abi.encodeCall(PluginUUPSUpgradeableV2Mock.initializeV1toV2, ()); preparedSetupData.permissions = mockPermissions(1, 2, PermissionLib.Operation.Grant); } } @@ -121,18 +119,14 @@ contract PluginUUPSUpgradeableSetupV3Mock is PluginUUPSUpgradeableSetupV2Mock { // Update from V1 if (_currentBuild == 1) { preparedSetupData.helpers = mockHelpers(3); - initData = abi.encodeWithSelector( - PluginUUPSUpgradeableV3Mock.initializeV1toV3.selector - ); + initData = abi.encodeCall(PluginUUPSUpgradeableV3Mock.initializeV1toV3, ()); preparedSetupData.permissions = mockPermissions(1, 3, PermissionLib.Operation.Grant); } // Update from V2 if (_currentBuild == 2) { preparedSetupData.helpers = mockHelpers(3); - initData = abi.encodeWithSelector( - PluginUUPSUpgradeableV3Mock.initializeV2toV3.selector - ); + initData = abi.encodeCall(PluginUUPSUpgradeableV3Mock.initializeV2toV3, ()); preparedSetupData.permissions = mockPermissions(2, 3, PermissionLib.Operation.Grant); } }