Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions packages/core/solidity/src/governor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import { OptionsError } from './error';
import { setAccessControl } from './set-access-control';
import { printContract } from './print';
import { setInfo } from './set-info';
import { setUpgradeable } from './set-upgradeable';
import { setUpgradeableGovernor } from './set-upgradeable';
import { defineFunctions } from './utils/define-functions';
import { durationToBlocks, durationToTimestamp } from './utils/duration';
import { clockModeDefault, type ClockMode } from './set-clock-mode';
Expand Down Expand Up @@ -99,7 +99,7 @@ export function buildGovernor(opts: GovernorOptions): Contract {
addTimelock(c, allOpts);

setAccessControl(c, allOpts.access);
setUpgradeable(c, allOpts.upgradeable, allOpts.access);
setUpgradeableGovernor(c, allOpts.upgradeable);
setInfo(c, allOpts.info);

return c;
Expand Down
35 changes: 35 additions & 0 deletions packages/core/solidity/src/set-upgradeable.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,41 @@ export function setUpgradeable(c: ContractBuilder, upgradeable: Upgradeable, acc
}
}

export function setUpgradeableGovernor(c: ContractBuilder, upgradeable: Upgradeable) {
if (upgradeable === false) {
return;
}

c.upgradeable = true;

c.addParent({
name: 'Initializable',
path: '@openzeppelin/contracts/proxy/utils/Initializable.sol',
});

switch (upgradeable) {
case 'transparent':
break;

case 'uups': {
const UUPSUpgradeable = {
name: 'UUPSUpgradeable',
path: '@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol',
};
c.addParent(UUPSUpgradeable);
c.addOverride(UUPSUpgradeable, functions._authorizeUpgrade);
c.addModifier('onlyGovernance', functions._authorizeUpgrade);
c.setFunctionBody([], functions._authorizeUpgrade);
break;
}

default: {
const _: never = upgradeable;
throw new Error('Unknown value for `upgradeable`');
}
}
}

const functions = defineFunctions({
_authorizeUpgrade: {
args: [{ name: 'newImplementation', type: 'address' }],
Expand Down
Loading