Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Slash] Add governanceAdmin in initializing contract #9

Merged
merged 1 commit into from
Sep 14, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
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
13 changes: 13 additions & 0 deletions contracts/interfaces/ISlashIndicator.sol
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ interface ISlashIndicator {
event SlashDoubleSignAmountUpdated(uint256 slashDoubleSignAmount);
/// @dev Emiited when the duration of jailing felony updated
event FelonyJailDurationUpdated(uint256 felonyJailDuration);
/// @dev Emitted when the address of governance admin is updated.
event GovernanceAdminUpdated(address);

enum SlashType {
UNKNOWN,
Expand Down Expand Up @@ -106,6 +108,17 @@ interface ISlashIndicator {
*/
function setFelonyJailDuration(uint256 _felonyJailDuration) external;

/**
* @dev Updates the governance admin
*
* Requirements:
* - The method caller is the governance admin
*
* Emits the event `GovernanceAdminUpdated`
*
*/
function setGovernanceAdmin(address _governanceAdmin) external;

/**
* @dev Gets slash indicator of a validator
*/
Expand Down
2 changes: 2 additions & 0 deletions contracts/mocks/MockSlashIndicator.sol
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,8 @@ contract MockSlashIndicator is ISlashIndicator {

function governanceAdmin() external view override returns (address) {}

function setGovernanceAdmin(address __newAddr) external override {}

function setSlashFelonyAmount(uint256 _slashFelonyAmount) external override {}

function setSlashDoubleSignAmount(uint256 _slashDoubleSignAmount) external override {}
Expand Down
26 changes: 24 additions & 2 deletions contracts/slashing/SlashIndicator.sol
Original file line number Diff line number Diff line change
Expand Up @@ -61,15 +61,16 @@ contract SlashIndicator is ISlashIndicator, Initializable {
* @dev Initializes the contract storage.
*/
function initialize(
address __governanceAdmin,
IRoninValidatorSet _validatorSetContract,
uint256 _misdemeanorThreshold,
uint256 _felonyThreshold,
IRoninValidatorSet _validatorSetContract,
uint256 _slashFelonyAmount,
uint256 _slashDoubleSignAmount,
uint256 _felonyJailBlocks
) external initializer {
validatorContract = _validatorSetContract;

_setGovernanceAdmin(__governanceAdmin);
_setSlashThresholds(_felonyThreshold, _misdemeanorThreshold);
_setSlashFelonyAmount(_slashFelonyAmount);
_setSlashDoubleSignAmount(_slashDoubleSignAmount);
Expand Down Expand Up @@ -138,6 +139,13 @@ contract SlashIndicator is ISlashIndicator, Initializable {
// GOVERNANCE FUNCTIONS //
///////////////////////////////////////////////////////////////////////////////////////

/**
* @inheritdoc ISlashIndicator
*/
function setGovernanceAdmin(address __governanceAdmin) external override onlyGovernanceAdmin {
_setGovernanceAdmin(__governanceAdmin);
}

/**
* @inheritdoc ISlashIndicator
*/
Expand Down Expand Up @@ -199,6 +207,20 @@ contract SlashIndicator is ISlashIndicator, Initializable {
// HELPER FUNCTIONS //
///////////////////////////////////////////////////////////////////////////////////////

/**
* @dev Updates the address of governance admin
*/
function _setGovernanceAdmin(address __governanceAdmin) internal {
if (__governanceAdmin == _governanceAdmin) {
return;
}

require(__governanceAdmin != address(0), "SlashIndicator: Cannot set admin to zero address");

_governanceAdmin == __governanceAdmin;
emit GovernanceAdminUpdated(__governanceAdmin);
}

/**
* @dev Sets the slash thresholds
*/
Expand Down
3 changes: 2 additions & 1 deletion src/deploy/proxy/slash-indicator-proxy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,10 @@ const deploy = async ({ getNamedAccounts, deployments }: HardhatRuntimeEnvironme
const logicContract = await deployments.get('SlashIndicatorLogic');

const data = new SlashIndicator__factory().interface.encodeFunctionData('initialize', [
initAddress[network.name]!.governanceAdmin,
initAddress[network.name]!.validatorContract,
slashIndicatorConf[network.name]!.misdemeanorThreshold,
slashIndicatorConf[network.name]!.felonyThreshold,
initAddress[network.name]!.validatorContract,
slashIndicatorConf[network.name]!.slashFelonyAmount,
slashIndicatorConf[network.name]!.slashDoubleSignAmount,
slashIndicatorConf[network.name]!.felonyJailBlocks,
Expand Down
3 changes: 2 additions & 1 deletion test/integration/ActionSlashValidators.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -76,9 +76,10 @@ describe('[Integration] Slash validators', () => {
slashLogicContract.address,
proxyAdmin.address,
slashLogicContract.interface.encodeFunctionData('initialize', [
governanceAdmin.address,
roninValidatorSetAddr,
slashIndicatorConf[network.name]!.misdemeanorThreshold,
slashIndicatorConf[network.name]!.felonyThreshold,
roninValidatorSetAddr,
slashIndicatorConf[network.name]!.slashFelonyAmount,
slashIndicatorConf[network.name]!.slashDoubleSignAmount,
slashIndicatorConf[network.name]!.felonyJailBlocks,
Expand Down
3 changes: 2 additions & 1 deletion test/integration/ActionSubmitReward.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -75,9 +75,10 @@ describe('[Integration] Submit Block Reward', () => {
slashLogicContract.address,
proxyAdmin.address,
slashLogicContract.interface.encodeFunctionData('initialize', [
governanceAdmin.address,
roninValidatorSetAddr,
slashIndicatorConf[network.name]!.misdemeanorThreshold,
slashIndicatorConf[network.name]!.felonyThreshold,
roninValidatorSetAddr,
slashIndicatorConf[network.name]!.slashFelonyAmount,
slashIndicatorConf[network.name]!.slashDoubleSignAmount,
slashIndicatorConf[network.name]!.felonyJailBlocks,
Expand Down
3 changes: 2 additions & 1 deletion test/integration/ActionWrapUpEpoch.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -76,9 +76,10 @@ describe('[Integration] Wrap up epoch', () => {
slashLogicContract.address,
proxyAdmin.address,
slashLogicContract.interface.encodeFunctionData('initialize', [
governanceAdmin.address,
roninValidatorSetAddr,
slashIndicatorConf[network.name]!.misdemeanorThreshold,
slashIndicatorConf[network.name]!.felonyThreshold,
roninValidatorSetAddr,
slashIndicatorConf[network.name]!.slashFelonyAmount,
slashIndicatorConf[network.name]!.slashDoubleSignAmount,
slashIndicatorConf[network.name]!.felonyJailBlocks,
Expand Down
8 changes: 5 additions & 3 deletions test/slash/SlashIndicator.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import {
import { Address } from 'hardhat-deploy/dist/types';
import { SlashType } from './slashType';
import { Network, slashIndicatorConf } from '../../src/config';
import { BigNumber } from 'ethers';
import { BigNumber, Signer } from 'ethers';
import { expects as SlashExpects } from '../helpers/slash-indicator';

let slashContract: SlashIndicator;
Expand All @@ -21,6 +21,7 @@ let deployer: SignerWithAddress;
let proxyAdmin: SignerWithAddress;
let mockValidatorsContract: MockValidatorSetForSlash;
let vagabond: SignerWithAddress;
let governanceAdmin: SignerWithAddress;
let coinbases: SignerWithAddress[];
let defaultCoinbase: Address;
let localIndicators: number[];
Expand Down Expand Up @@ -55,7 +56,7 @@ describe('Slash indicator test', () => {
let misdemeanorThreshold: number;

before(async () => {
[deployer, proxyAdmin, vagabond, ...coinbases] = await ethers.getSigners();
[deployer, proxyAdmin, vagabond, governanceAdmin, ...coinbases] = await ethers.getSigners();
localIndicators = Array<number>(coinbases.length).fill(0);
defaultCoinbase = await network.provider.send('eth_coinbase');

Expand All @@ -75,9 +76,10 @@ describe('Slash indicator test', () => {
logicContract.address,
proxyAdmin.address,
logicContract.interface.encodeFunctionData('initialize', [
governanceAdmin.address,
mockValidatorsContract.address,
slashIndicatorConf[network.name]!.misdemeanorThreshold,
slashIndicatorConf[network.name]!.felonyThreshold,
mockValidatorsContract.address,
slashIndicatorConf[network.name]!.slashFelonyAmount,
slashIndicatorConf[network.name]!.slashDoubleSignAmount,
slashIndicatorConf[network.name]!.felonyJailBlocks,
Expand Down