From ea6f0cf0e671be9004738e27aff1883dc23cf608 Mon Sep 17 00:00:00 2001 From: John Carlo San Pedro Date: Tue, 20 Feb 2024 16:26:16 +1300 Subject: [PATCH] ensure oracle cannot be initialized with zero address --- contracts/SeekerPowerOracle.sol | 5 ++++ deployments/ganache_deployment_phase_two.json | 28 +++++++++---------- deployments/genesis.config.ts | 4 +-- test/seekerOracle.test.ts | 14 ++++++++++ test/staking.test.ts | 2 +- 5 files changed, 36 insertions(+), 17 deletions(-) diff --git a/contracts/SeekerPowerOracle.sol b/contracts/SeekerPowerOracle.sol index fda4bd1d..85acbbac 100644 --- a/contracts/SeekerPowerOracle.sol +++ b/contracts/SeekerPowerOracle.sol @@ -37,10 +37,15 @@ contract SeekerPowerOracle is ISeekerPowerOracle, Initializable, Ownable2StepUpg error UnauthorizedRegisterSeekerPowerCall(); error NonceCannotBeReused(); error PowerCannotBeZero(); + error OracleCannotBeZeroAddress(); function initialize(address _oracle) external initializer { Ownable2StepUpgradeable.__Ownable2Step_init(); + if (_oracle == address(0)) { + revert OracleCannotBeZeroAddress(); + } + oracle = _oracle; } diff --git a/deployments/ganache_deployment_phase_two.json b/deployments/ganache_deployment_phase_two.json index 275caf59..b3281211 100644 --- a/deployments/ganache_deployment_phase_two.json +++ b/deployments/ganache_deployment_phase_two.json @@ -1,15 +1,15 @@ { - "deployer": "0x835dF5fE77D479695a616F79A3FC3a25310eb7c6", - "syloToken": "0xc4db8fD3209c98290AB32693F5155c596B97Eabe", - "authorizedAccounts": "0x075EEeD1215982b78A2e05cD2213b5f53A718a9A", - "registries": "0xFB87c433852Bb2917B37b0471DFA5B369e75083A", - "ticketingParameters": "0x65A9be6e97eD2F417250A819e93BCb359b1140d0", - "epochsManager": "0x7bFCE7796fdE3Ba0F2052959d506bdA480518edA", - "stakingManager": "0xa4dE4FEA5e961e5C130013CfE207f7C08148A73C", - "rewardsManager": "0x4aa109E0DB0223ed2d9085679F450EfDf188CFf6", - "directory": "0x7E7C762176eaa1662d372399265760d4600CCf28", - "syloTicketing": "0x943E7031A7Ed0FC236173f05a3084104b81Aa480", - "seekers": "0x49C537a88016186Ef41713239799Fc975F9e9aFA", - "seekerPowerOracle": "0xca7efb9aA54e70F7a8e7efb878A48BaefA34F4AC", - "futurepassRegistrar": "0x7DBf77bb534997892e5Bcfbdc79Dd82E71C35245" -} \ No newline at end of file + "deployer": "0x835dF5fE77D479695a616F79A3FC3a25310eb7c6", + "syloToken": "0xc4db8fD3209c98290AB32693F5155c596B97Eabe", + "authorizedAccounts": "0x075EEeD1215982b78A2e05cD2213b5f53A718a9A", + "registries": "0xFB87c433852Bb2917B37b0471DFA5B369e75083A", + "ticketingParameters": "0x65A9be6e97eD2F417250A819e93BCb359b1140d0", + "epochsManager": "0x7bFCE7796fdE3Ba0F2052959d506bdA480518edA", + "stakingManager": "0xa4dE4FEA5e961e5C130013CfE207f7C08148A73C", + "rewardsManager": "0x4aa109E0DB0223ed2d9085679F450EfDf188CFf6", + "directory": "0x7E7C762176eaa1662d372399265760d4600CCf28", + "syloTicketing": "0x943E7031A7Ed0FC236173f05a3084104b81Aa480", + "seekers": "0x49C537a88016186Ef41713239799Fc975F9e9aFA", + "seekerPowerOracle": "0xca7efb9aA54e70F7a8e7efb878A48BaefA34F4AC", + "futurepassRegistrar": "0x7DBf77bb534997892e5Bcfbdc79Dd82E71C35245" +} diff --git a/deployments/genesis.config.ts b/deployments/genesis.config.ts index 65313f00..87410965 100644 --- a/deployments/genesis.config.ts +++ b/deployments/genesis.config.ts @@ -88,7 +88,7 @@ const GenesisParameters: ContractParameters = { }, SeekerPowerOracle: { - oracleAccount: '0x835dF5fE77D479695a616F79A3FC3a25310eb7c6', + oracleAccount: '', }, }; @@ -127,7 +127,7 @@ const GanacheTestnetParameters: ContractParameters = { }, SeekerPowerOracle: { - oracleAccount: '', + oracleAccount: '0x835dF5fE77D479695a616F79A3FC3a25310eb7c6', // deployer }, }; diff --git a/test/seekerOracle.test.ts b/test/seekerOracle.test.ts index 4892a5e8..2c4b25d6 100644 --- a/test/seekerOracle.test.ts +++ b/test/seekerOracle.test.ts @@ -25,6 +25,20 @@ describe('Seeker Power Oracle', () => { contracts = await utils.initializeContracts(deployer, token); }); + it('seeker power oracle cannot be initialized with invalid arguments', async () => { + const SeekerPowerOracle = await ethers.getContractFactory( + 'SeekerPowerOracle', + ); + const seekerPowerOracle = await SeekerPowerOracle.deploy(); + + await expect( + seekerPowerOracle.initialize(ethers.ZeroAddress), + ).to.be.revertedWithCustomError( + seekerPowerOracle, + 'OracleCannotBeZeroAddress', + ); + }); + it('seeker power oracle cannot be initialized twice', async () => { await expect( contracts.seekerPowerOracle.initialize(deployer), diff --git a/test/staking.test.ts b/test/staking.test.ts index b0dd7ad4..19e0ee26 100644 --- a/test/staking.test.ts +++ b/test/staking.test.ts @@ -523,7 +523,7 @@ describe('Staking', () => { it('cannot join directory with invalid arguments', async () => { await directory.addManager(owner); await expect( - directory.joinNextDirectory(ethers.ZeroAddress, 1), + directory.joinNextDirectory(ethers.ZeroAddress, defaultSeekerId), ).to.be.revertedWithCustomError(directory, 'StakeeCannotBeZeroAddress'); });