Skip to content

Commit

Permalink
feat: use encodeCall to make use of type checking
Browse files Browse the repository at this point in the history
  • Loading branch information
heueristik committed Jun 2, 2023
1 parent 20ed2f6 commit a7b662b
Show file tree
Hide file tree
Showing 12 changed files with 40 additions and 58 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand All @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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[]
Expand Down Expand Up @@ -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[]
Expand Down Expand Up @@ -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);
}
}
Expand Down Expand Up @@ -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[]
Expand Down Expand Up @@ -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[]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,7 @@ contract PluginRepoFactory {
pluginRepo = PluginRepo(
createERC1967Proxy(
pluginRepoBase,
abi.encodeWithSelector(PluginRepo.initialize.selector, _initialOwner)
abi.encodeCall(PluginRepo.initialize, (_initialOwner))
)
);

Expand Down
2 changes: 1 addition & 1 deletion packages/contracts/src/framework/utils/TokenFactory.sol
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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";
Expand Down Expand Up @@ -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[]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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";
Expand Down Expand Up @@ -37,19 +38,20 @@ 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;

if (_multiplyHelper == address(0)) {
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[]
Expand Down Expand Up @@ -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[]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
8 changes: 3 additions & 5 deletions packages/contracts/src/plugins/token/MerkleMinter.sol
Original file line number Diff line number Diff line change
Expand Up @@ -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)
)
);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
}
Expand Down Expand Up @@ -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);
}
}
Expand Down

0 comments on commit a7b662b

Please sign in to comment.