Skip to content

Commit e03cfba

Browse files
authored
fix(contracts): sizes (#195)
1 parent 60bbab6 commit e03cfba

File tree

9 files changed

+207
-216
lines changed

9 files changed

+207
-216
lines changed

contracts/.gas-snapshot

Lines changed: 166 additions & 166 deletions
Large diffs are not rendered by default.

contracts/foundry.toml

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,15 @@ exclude_lints = ["mixed-case-variable", "mixed-case-function", "screaming-snake-
1515

1616
[profile.deploy]
1717
optimizer = true
18-
optimizer_runs = 200
18+
optimizer_runs = 188
19+
bytecode_hash = "none"
20+
cbor_metadata = false
1921

2022
[profile.fuzz]
2123
optimizer = true
22-
optimizer_runs = 200
24+
optimizer_runs = 188
25+
bytecode_hash = "none"
26+
cbor_metadata = false
2327
runs = 10000
2428
seed = "0x1234"
2529

contracts/script/operations/CreateProverAndStake.s.sol

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,6 @@ contract CreateProverAndStakeScript is BaseScript {
1515
uint256 STAKER_FEE_BIPS = 1000; // 10%
1616
uint256 STAKE_AMOUNT = 10_000e18;
1717

18-
// Ensure not already a prover owner
19-
if (SuccinctStaking(STAKING).hasProver(msg.sender)) {
20-
revert("Already a prover owner");
21-
}
22-
2318
// Ensure not already staked
2419
if (SuccinctStaking(STAKING).balanceOf(msg.sender) > 0) {
2520
revert("Already staked");

contracts/src/SuccinctStaking.sol

Lines changed: 31 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -114,15 +114,15 @@ contract SuccinctStaking is
114114
uint256 _slashCancellationPeriod
115115
) external initializer {
116116
// Ensure that parameters critical for functionality are non-zero.
117-
if (
118-
_owner == address(0) || _governor == address(0) || _vApp == address(0)
119-
|| _prove == address(0) || _intermediateProve == address(0) || _dispenser == address(0)
120-
) {
121-
revert ZeroAddress();
122-
}
123-
if (_maxUnstakeRequests == 0 || _unstakePeriod == 0 || _slashCancellationPeriod == 0) {
124-
revert ZeroAmount();
125-
}
117+
_requireNonZeroAddress(_owner);
118+
_requireNonZeroAddress(_governor);
119+
_requireNonZeroAddress(_vApp);
120+
_requireNonZeroAddress(_prove);
121+
_requireNonZeroAddress(_intermediateProve);
122+
_requireNonZeroAddress(_dispenser);
123+
_requireNonZeroNumber(_maxUnstakeRequests);
124+
_requireNonZeroNumber(_unstakePeriod);
125+
_requireNonZeroNumber(_slashCancellationPeriod);
126126

127127
// Setup the initial state.
128128
__UUPSUpgradeable_init();
@@ -279,7 +279,7 @@ contract SuccinctStaking is
279279
/// @inheritdoc ISuccinctStaking
280280
function requestUnstake(uint256 _stPROVE) external override stakingOperation {
281281
// Ensure unstaking a non-zero amount.
282-
if (_stPROVE == 0) revert ZeroAmount();
282+
_requireNonZeroNumber(_stPROVE);
283283

284284
// Get the prover that the staker is staked with.
285285
address prover = stakerToProver[msg.sender];
@@ -289,7 +289,7 @@ contract SuccinctStaking is
289289
if (unstakeClaims[msg.sender].length >= maxUnstakeRequests) revert TooManyUnstakeRequests();
290290

291291
// Check that this prover is not in the process of being slashed.
292-
if (slashClaimCount[prover] > 0) revert ProverHasSlashRequest();
292+
_requireProverWithoutSlashRequests(prover);
293293

294294
// Get the amount of $stPROVE this staker currently has.
295295
uint256 stPROVEBalance = balanceOf(msg.sender);
@@ -333,7 +333,7 @@ contract SuccinctStaking is
333333
if (claims.length == 0) revert NoUnstakeRequests();
334334

335335
// Check that this prover is not in the process of being slashed.
336-
if (slashClaimCount[prover] > 0) revert ProverHasSlashRequest();
336+
_requireProverWithoutSlashRequests(prover);
337337

338338
// Process the available unstake claims.
339339
PROVE += _finishUnstake(_staker, prover, claims);
@@ -367,7 +367,7 @@ contract SuccinctStaking is
367367
returns (uint256 index)
368368
{
369369
// Ensure slashing a non-zero amount.
370-
if (_iPROVE == 0) revert ZeroAmount();
370+
_requireNonZeroNumber(_iPROVE);
371371

372372
// Create the slash claim.
373373
index = slashClaims[_prover].length;
@@ -496,7 +496,7 @@ contract SuccinctStaking is
496496
uint256 amount = _PROVE == type(uint256).max ? available : _PROVE;
497497

498498
// Ensure dispensing a non-zero amount.
499-
if (amount == 0) revert ZeroAmount();
499+
_requireNonZeroNumber(amount);
500500

501501
// If caller passed a specific number, make sure it doesn't exceed available.
502502
if (amount > available) revert AmountExceedsAvailableDispense();
@@ -532,7 +532,7 @@ contract SuccinctStaking is
532532
returns (uint256 stPROVE)
533533
{
534534
// Ensure staking a non-zero amount.
535-
if (_PROVE == 0) revert ZeroAmount();
535+
_requireNonZeroNumber(_PROVE);
536536

537537
// Ensure the staking amount is greater than the minimum stake amount.
538538
if (_PROVE < minStakeAmount) revert StakeBelowMinimum();
@@ -541,7 +541,7 @@ contract SuccinctStaking is
541541
if (deactivatedProvers[_prover]) revert ProverNotActive();
542542

543543
// Check that this prover is not in the process of being slashed.
544-
if (slashClaimCount[_prover] > 0) revert ProverHasSlashRequest();
544+
_requireProverWithoutSlashRequests(_prover);
545545

546546
// Ensure the staker is not already staked with a different prover.
547547
address existingProver = stakerToProver[_staker];
@@ -663,6 +663,21 @@ contract SuccinctStaking is
663663
dispenseRate = _dispenseRate;
664664
}
665665

666+
/// @dev Thrown if a zero address is passed.
667+
function _requireNonZeroAddress(address _address) internal pure {
668+
if (_address == address(0)) revert ZeroAddress();
669+
}
670+
671+
/// @dev Thrown if a zero number is passed.
672+
function _requireNonZeroNumber(uint256 _number) internal pure {
673+
if (_number == 0) revert ZeroAmount();
674+
}
675+
676+
/// @dev Validates that a prover has no pending slash requests.
677+
function _requireProverWithoutSlashRequests(address _prover) private view {
678+
if (slashClaimCount[_prover] > 0) revert ProverHasSlashRequest();
679+
}
680+
666681
/// @dev Authorizes an ERC1967 proxy upgrade to a new implementation contract.
667682
function _authorizeUpgrade(address _newImplementation) internal override onlyOwner {}
668683
}

contracts/src/SuccinctVApp.sol

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import {
1212
WithdrawAction,
1313
CreateProverAction
1414
} from "./libraries/PublicValues.sol";
15+
import {IProver} from "./interfaces/IProver.sol";
1516
import {ISuccinctVApp} from "./interfaces/ISuccinctVApp.sol";
1617
import {ISuccinctStaking} from "./interfaces/ISuccinctStaking.sol";
1718
import {ISP1Verifier} from "../lib/sp1-contracts/contracts/src/ISP1Verifier.sol";
@@ -201,7 +202,7 @@ contract SuccinctVApp is
201202
{
202203
// Validate.
203204
if (_owner == address(0)) revert ZeroAddress();
204-
if (_owner != ISuccinctStaking(staking).ownerOf(_prover)) {
205+
if (_owner != IProver(_prover).owner()) {
205206
revert ProverNotOwned();
206207
}
207208

contracts/src/interfaces/IProverRegistry.sol

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -44,11 +44,6 @@ interface IProverRegistry {
4444
/// @notice The number of provers in the registry.
4545
function proverCount() external view returns (uint256);
4646

47-
/// @notice The owner of a given prover.
48-
/// @param prover The address of the prover.
49-
/// @return The address of the owner.
50-
function ownerOf(address prover) external view returns (address);
51-
5247
/// @notice Check if a given address is a prover.
5348
/// @dev This does not check if the prover is deactivated, use `isDeactivatedProver` to check
5449
/// if the prover is deactivated.
@@ -68,11 +63,6 @@ interface IProverRegistry {
6863
/// @return The address of the prover.
6964
function getProver(address owner) external view returns (address);
7065

71-
/// @notice Check if a given address is the owner of a prover.
72-
/// @param owner The address of the owner.
73-
/// @return True if the address is the owner of a prover, false otherwise.
74-
function hasProver(address owner) external view returns (bool);
75-
7666
/// @notice Create a new prover.
7767
/// @dev The caller becomes the owner of the new prover. Only one prover can be created per
7868
/// owner. It is recommended to use a cold wallet to create a prover, and then

contracts/src/libraries/ProverRegistry.sol

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -77,11 +77,6 @@ abstract contract ProverRegistry is IProverRegistry {
7777
iProve = _iProve;
7878
}
7979

80-
/// @inheritdoc IProverRegistry
81-
function ownerOf(address _prover) external view override returns (address) {
82-
return IProver(_prover).owner();
83-
}
84-
8580
/// @inheritdoc IProverRegistry
8681
function isProver(address _prover) external view override returns (bool) {
8782
return provers[_prover];
@@ -97,18 +92,13 @@ abstract contract ProverRegistry is IProverRegistry {
9792
return ownerToProver[_owner];
9893
}
9994

100-
/// @inheritdoc IProverRegistry
101-
function hasProver(address _owner) public view override returns (bool) {
102-
return ownerToProver[_owner] != address(0);
103-
}
104-
10595
/// @inheritdoc IProverRegistry
10696
function createProver(uint256 _stakerFeeBips) external override returns (address) {
10797
if (_stakerFeeBips > 10000) {
10898
revert InvalidStakerFeeBips();
10999
}
110100

111-
if (hasProver(msg.sender)) {
101+
if (ownerToProver[msg.sender] != address(0)) {
112102
revert ProverAlreadyExists();
113103
}
114104

contracts/test/SuccinctStaking.registry.t.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ contract SuccinctStakingRegistryTests is SuccinctStakingTest {
8282
vm.assume(_staker != address(0));
8383
vm.assume(_proverOwner != _staker);
8484
// Ensure these addresses don't already have provers
85-
vm.assume(!SuccinctStaking(STAKING).hasProver(_proverOwner));
85+
vm.assume(SuccinctStaking(STAKING).getProver(_proverOwner) == address(0));
8686
vm.assume(_staker != ALICE && _staker != BOB); // These already have provers from setup
8787

8888
uint256 stakeAmount = bound(_stakeAmount, MIN_STAKE_AMOUNT, STAKER_PROVE_AMOUNT);

contracts/test/SuccinctStaking.t.sol

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -320,15 +320,11 @@ contract SuccinctStakingSetupTests is SuccinctStakingTest {
320320
assertEq(ERC20(ALICE_PROVER).symbol(), "PROVER-1");
321321
assertEq(ERC20(BOB_PROVER).symbol(), "PROVER-2");
322322
assertEq(SuccinctStaking(STAKING).proverCount(), 2);
323-
assertEq(SuccinctStaking(STAKING).ownerOf(ALICE_PROVER), ALICE);
324-
assertEq(SuccinctStaking(STAKING).ownerOf(BOB_PROVER), BOB);
325323
assertEq(SuccinctStaking(STAKING).isProver(ALICE_PROVER), true);
326324
assertEq(SuccinctStaking(STAKING).isProver(BOB_PROVER), true);
327325
assertEq(SuccinctStaking(STAKING).isDeactivatedProver(ALICE_PROVER), false);
328326
assertEq(SuccinctStaking(STAKING).isDeactivatedProver(BOB_PROVER), false);
329327
assertEq(SuccinctStaking(STAKING).getProver(ALICE), ALICE_PROVER);
330328
assertEq(SuccinctStaking(STAKING).getProver(BOB), BOB_PROVER);
331-
assertEq(SuccinctStaking(STAKING).hasProver(ALICE), true);
332-
assertEq(SuccinctStaking(STAKING).hasProver(BOB), true);
333329
}
334330
}

0 commit comments

Comments
 (0)