Hi, I used contracts wizard to create governor contract and I didn't even changed the default values and copied it to my clipboard but compiler and my deploy script says it exceeds limit of contract size and gives error that it cannot be deployed what is the soloution? Thanks
Contract code size is 32070 bytes and exceeds 24576 bytes
Well where is the code then? Pretty impossible to address your question without it.
Not that there's much to say about it - if it exceeds the maximum size, then you gotta get rid of some of the code in it... but posting it here might help understanding what part of it you might get rid of easily.
here it is, I copied what contracts wizard gave me
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
import "@openzeppelin/contracts/governance/Governor.sol";
import "@openzeppelin/contracts/governance/extensions/GovernorSettings.sol";
import "@openzeppelin/contracts/governance/extensions/GovernorCountingSimple.sol";
import "@openzeppelin/contracts/governance/extensions/GovernorVotes.sol";
import "@openzeppelin/contracts/governance/extensions/GovernorVotesQuorumFraction.sol";
import "@openzeppelin/contracts/governance/extensions/GovernorTimelockControl.sol";
contract GovernorContract is
Governor,
GovernorSettings,
GovernorCountingSimple,
GovernorVotes,
GovernorVotesQuorumFraction,
GovernorTimelockControl
{
constructor(
IVotes _token,
TimelockController _timelock,
uint256 _votingDelay,
uint256 _votingPeriod,
uint256 _quorumPercentage
)
Governor("GovernorContract")
GovernorSettings(_votingDelay, _votingPeriod, 0)
GovernorVotes(_token)
GovernorVotesQuorumFraction(_quorumPercentage)
GovernorTimelockControl(_timelock)
{}
// The following functions are overrides required by Solidity.
function votingDelay()
public
view
override(IGovernor, GovernorSettings)
returns (uint256)
{
return super.votingDelay();
}
function votingPeriod()
public
view
override(IGovernor, GovernorSettings)
returns (uint256)
{
return super.votingPeriod();
}
function quorum(
uint256 blockNumber
)
public
view
override(IGovernor, GovernorVotesQuorumFraction)
returns (uint256)
{
return super.quorum(blockNumber);
}
function state(
uint256 proposalId
)
public
view
override(Governor, GovernorTimelockControl)
returns (ProposalState)
{
return super.state(proposalId);
}
function propose(
address[] memory targets,
uint256[] memory values,
bytes[] memory calldatas,
string memory description
) public override(Governor, IGovernor) returns (uint256) {
return super.propose(targets, values, calldatas, description);
}
function proposalThreshold()
public
view
override(Governor, GovernorSettings)
returns (uint256)
{
return super.proposalThreshold();
}
function _execute(
uint256 proposalId,
address[] memory targets,
uint256[] memory values,
bytes[] memory calldatas,
bytes32 descriptionHash
) internal override(Governor, GovernorTimelockControl) {
super._execute(proposalId, targets, values, calldatas, descriptionHash);
}
function _cancel(
address[] memory targets,
uint256[] memory values,
bytes[] memory calldatas,
bytes32 descriptionHash
) internal override(Governor, GovernorTimelockControl) returns (uint256) {
return super._cancel(targets, values, calldatas, descriptionHash);
}
function _executor()
internal
view
override(Governor, GovernorTimelockControl)
returns (address)
{
return super._executor();
}
function supportsInterface(
bytes4 interfaceId
) public view override(Governor, GovernorTimelockControl) returns (bool) {
return super.supportsInterface(interfaceId);
}
}
In the compiler settings, set the value of settings.optimizer.enabled
to false
.
If that doesn't help, then also set the value of settings.viaIR
to true
.
it worked on remix, and how can i do the same in hardhat?
and can you tell me what does optimizer.enabled do? how it reduce the size of contract
Mhyr_Hn:
optimizer.enabled
Determines whether or not the contract code is optimized to be more efficient during runtime.
If it is, then the contract code becomes larger, the gas cost of deploying it becomes higher, and the gas cost of executing each function in it becomes potentially lower.
In other words, it's a tradeoff between deployment gas cost and runtime gas cost.
for hardhat i used this code in my hardhat config to optimize the code and solved my problem
solidity: {
version: "0.8.17",
settings: {
optimizer: {
enabled: true,
runs: 200,
},
},
},