From d0ac16ac399ad9f3b44f1c4eb1024de8224be33b Mon Sep 17 00:00:00 2001 From: Daniel Wang <99078276+dantaik@users.noreply.github.com> Date: Sat, 1 Jul 2023 10:15:10 +0800 Subject: [PATCH] clean up by removing ProverPool2 and deprecated documents --- .../protocol/contracts/L1/ProverPool2.sol | 246 ------------------ .../L1/IStakingProverPool.md | 65 ----- .../L1/ITaikoProverPool.md | 59 ----- .../contract-documentation/L1/ProverPool2.md | 173 ------------ .../contract-documentation/L1/ProverPool3.md | 99 ------- .../L1/StakingProverPool.md | 209 --------------- .../L1/TaikoProverPool.md | 209 --------------- 7 files changed, 1060 deletions(-) delete mode 100644 packages/protocol/contracts/L1/ProverPool2.sol delete mode 100644 packages/website/pages/docs/reference/contract-documentation/L1/IStakingProverPool.md delete mode 100644 packages/website/pages/docs/reference/contract-documentation/L1/ITaikoProverPool.md delete mode 100644 packages/website/pages/docs/reference/contract-documentation/L1/ProverPool2.md delete mode 100644 packages/website/pages/docs/reference/contract-documentation/L1/ProverPool3.md delete mode 100644 packages/website/pages/docs/reference/contract-documentation/L1/StakingProverPool.md delete mode 100644 packages/website/pages/docs/reference/contract-documentation/L1/TaikoProverPool.md diff --git a/packages/protocol/contracts/L1/ProverPool2.sol b/packages/protocol/contracts/L1/ProverPool2.sol deleted file mode 100644 index cd67507a8d6..00000000000 --- a/packages/protocol/contracts/L1/ProverPool2.sol +++ /dev/null @@ -1,246 +0,0 @@ -// _____ _ _ _ _ -// |_ _|_ _(_) |_____ | | __ _| |__ ___ -// | |/ _` | | / / _ \ | |__/ _` | '_ (_-< -// |_|\__,_|_|_\_\___/ |____\__,_|_.__/__/ - -pragma solidity ^0.8.20; - -import { AddressResolver } from "../common/AddressResolver.sol"; -import { EssentialContract } from "../common/EssentialContract.sol"; -import { IProverPool } from "./IProverPool.sol"; -import { TaikoToken } from "./TaikoToken.sol"; -import { Proxied } from "../common/Proxied.sol"; - -// author: Brecht -contract ProverPool2 is EssentialContract { - uint256 public constant NUM_SLOTS = 128; - uint256 public constant EXIT_PERIOD = 1 weeks; - uint32 public constant SLASH_POINTS = 9500; // basis points - - uint256 public totalStaked; - uint256 public totalWeight; - - error CAPACITY_INCORRECT(); - error NOT_ENOUGH_BALANCE(); - error CANNOT_BE_PREFERRED(); - - struct Staker { - uint256 amount; - uint256 numSlots; - // If type(uint256).max = signals prover can prove all of the blocks - // Then gets into the preferredProver (if he is also the max prover) - uint256 maxNumSlots; // Max capacity if someone else's unstake would - // increase a prover's slot count - uint256 unstakedAt; - uint16 rewardPerGas; - } - - // Temporary staker who could jump in as a new prover - // when someone unstakes and we need to fill their slots - // - until the 'weight-based-owner' claims them (!) - // So we basically don't increase anyone's slots unintentionally - address preferredProver; - - mapping(uint256 slot => address) slots; - mapping(address staker => Staker) stakers; - - uint256[100] private __gap; - - function init(address _addressManager) external initializer { - EssentialContract._init(_addressManager); - } - - function assignProver( - uint64 blockId, - uint32 feePerGas - ) - external - view - returns (address prover, uint32 rewardPerGas) - { - if (totalStaked == 0) { - return (address(0), 0); - } - - bytes32 rand = keccak256(abi.encode(blockId)); - uint256 slot_idx = uint256(rand) % NUM_SLOTS; - // If the rewardPerGas changes infrequently, just also store it in the - // slot - // so we can keep doing 1 SLOAD. - prover = slots[slot_idx]; - feePerGas = stakers[prover].rewardPerGas; - } - - function stake( - uint256 amount, - uint16 rewardPerGas, - uint16 maxCapacity - ) - external - { - if (maxCapacity > NUM_SLOTS && (maxCapacity != type(uint256).max)) { - revert CAPACITY_INCORRECT(); - } - address staker = msg.sender; - // If the staker was unstaking, first revert the unstaking - if (stakers[staker].unstakedAt > 0) { - totalStaked += stakers[staker].amount; - } - - totalWeight -= getWeight(staker); - totalStaked += amount; - stakers[staker].amount += amount; - stakers[staker].unstakedAt = 0; - stakers[staker].rewardPerGas = rewardPerGas; - stakers[staker].maxNumSlots = maxCapacity; - totalWeight += getWeight(staker); - - // Auto-claim adjustment - for (uint256 slotIdx = 0; slotIdx < NUM_SLOTS; slotIdx++) { - address current = slots[slotIdx]; - if (stakers[current].numSlots > getNumClaimableSlots(current)) { - claimSlot(staker, slotIdx); - } - } - } - - function unstake() external { - address staker = msg.sender; - - totalWeight -= getWeight(staker); - stakers[staker].unstakedAt = block.timestamp; - totalStaked -= stakers[staker].amount; - - // Exchange unstaked slots with the preferredProver - // Auto-claim adjustment - uint256 replacedSlots; - for (uint256 slotIdx = 0; slotIdx < NUM_SLOTS; slotIdx++) { - address current = slots[slotIdx]; - if (current == staker) { - slots[slotIdx] = preferredProver; - replacedSlots++; - } - } - // Someone (later) who's weight allows to actually claim - // the slots will do that later from preferredProver. - stakers[preferredProver].numSlots += replacedSlots; - } - - function setRewardPerGas(uint16 rewardPerGas) external { - address staker = msg.sender; - totalWeight -= getWeight(staker); - stakers[staker].rewardPerGas = rewardPerGas; - totalWeight += getWeight(staker); - } - - function setMaxNumSlots(address staker, uint16 maxNumSlots) external { - // This is basically equal to set 'how much percent' maximum - // a prover is capable to process. - // Since the GasPerSecond of the chain is known, the prover can know - // this number off-chain. This is what ir represents. - - require(stakers[staker].numSlots <= maxNumSlots); - stakers[staker].maxNumSlots = maxNumSlots; - } - - function claimSlot(address staker, uint256 slotIdx) public { - // We only allow claiming slots from other stakers if they have more - // than their number of claimable slots. - // We allow anyone to claim slots to take into rounding errors. - // We allow setting the staker to 0x0 to make the proving open. - // TODO: currently this would allow people to battle over these slot, so - // just let the top staker claim these - require(isSlotClaimable(slotIdx)); - if (stakers[slots[slotIdx]].numSlots > 0) { - stakers[slots[slotIdx]].numSlots -= 1; - } - slots[slotIdx] = staker; - if (staker != address(0)) { - stakers[staker].numSlots += 1; - require(stakers[staker].numSlots <= stakers[staker].maxNumSlots); - } - } - - // preferredProver is the one who can (theoretically) prove all - // the blocks and also the most staked TKO. He will be assigned - // with the slots which will have no 'owner' (until claimed) - // when someone unstakes - function claimPreferredProverStatus(address staker) external { - if ( - stakers[staker].maxNumSlots != type(uint256).max - || stakers[preferredProver].amount >= stakers[staker].amount - || stakers[staker].unstakedAt != 0 - ) { - revert CANNOT_BE_PREFERRED(); - } - preferredProver = staker; - } - - function slashProver(address slashed) external { - stakers[slashed].amount = - stakers[slashed].amount * SLASH_POINTS / 10_000; - } - - function withdraw(address staker) public { - require(stakers[staker].unstakedAt + EXIT_PERIOD >= block.timestamp); - stakers[staker].unstakedAt = 0; - } - - function getWeight(address staker) public view returns (uint256) { - if ( - stakers[staker].unstakedAt == 0 && stakers[staker].amount != 0 - && stakers[staker].rewardPerGas != 0 - ) { - return stakers[staker].amount / stakers[staker].rewardPerGas - / stakers[staker].rewardPerGas; - } else { - return 0; - } - } - - function getNumClaimableSlots(address staker) - public - view - returns (uint256) - { - // Cap the number of slots to maxNumSlots - uint256 numSlotsFromWeight = getWeight(staker) * NUM_SLOTS / totalWeight; - if (numSlotsFromWeight > stakers[staker].maxNumSlots) { - return stakers[staker].maxNumSlots; - } else { - return numSlotsFromWeight; - } - } - - function isSlotClaimable(uint256 slotIdx) public view returns (bool) { - address currentStaker = slots[slotIdx]; - if (currentStaker == address(0)) { - return true; - } else { - return stakers[currentStaker].numSlots - > getNumClaimableSlots(currentStaker); - } - } - - // HELPER FUNCTION ONLY!!! - // ONLY HERE SO STAKERS CAN JUST GO TO ETHERSCAN AND FIND ALL SLOTS THEY - // COULD CLAIM!!! - // NOT USED IN THE SMART CONTRACT ITSELF!!! - function getClaimableSlots() public view returns (uint256[] memory) { - uint256[] memory claimableSlots = new uint[](NUM_SLOTS); - uint256 numClaimableSlots = 0; - for (uint256 i; i < NUM_SLOTS; i++) { - if (isSlotClaimable(i)) { - claimableSlots[numClaimableSlots] = i; - numClaimableSlots += 1; - } - } - // Overwrite the length - assembly { - mstore(claimableSlots, numClaimableSlots) - } - return claimableSlots; - } -} - -contract ProxiedProverPool2 is Proxied, ProverPool2 { } diff --git a/packages/website/pages/docs/reference/contract-documentation/L1/IStakingProverPool.md b/packages/website/pages/docs/reference/contract-documentation/L1/IStakingProverPool.md deleted file mode 100644 index 9b54f3a01b7..00000000000 --- a/packages/website/pages/docs/reference/contract-documentation/L1/IStakingProverPool.md +++ /dev/null @@ -1,65 +0,0 @@ ---- -title: IProverPool ---- - -## IProverPool - -### getProver - -```solidity -function getProver(uint256 blockId) external view returns (address) -``` - -### slash - -```solidity -function slash(address prover) external -``` - ---- - -## title: IStakingProverPool - -## IStakingProverPool - -### enterProverPool - -```solidity -function enterProverPool(uint256 amount, uint256 feeMultiplier, uint32 capacity) external -``` - -### stakeMoreTokens - -```solidity -function stakeMoreTokens(uint256 amount) external -``` - -### adjustFeeMultiplier - -```solidity -function adjustFeeMultiplier(uint8 newFeeMultiplier) external -``` - -### adjustCapacity - -```solidity -function adjustCapacity(uint32 newCapacity) external -``` - -### withdrawRewards - -```solidity -function withdrawRewards(uint64 amount) external -``` - -### exit - -```solidity -function exit() external -``` - -### pickRandomProver - -```solidity -function pickRandomProver(uint256 randomNumber, uint256 blockId) external returns (address) -``` diff --git a/packages/website/pages/docs/reference/contract-documentation/L1/ITaikoProverPool.md b/packages/website/pages/docs/reference/contract-documentation/L1/ITaikoProverPool.md deleted file mode 100644 index 642a019d091..00000000000 --- a/packages/website/pages/docs/reference/contract-documentation/L1/ITaikoProverPool.md +++ /dev/null @@ -1,59 +0,0 @@ ---- -title: ITaikoProverPool ---- - -## ITaikoProverPool - -### enterProverPool - -```solidity -function enterProverPool(uint256 amount, uint256 feeMultiplier, uint32 capacity) external -``` - -### stakeMoreTokens - -```solidity -function stakeMoreTokens(uint256 amount) external -``` - -### adjustFeeMultiplier - -```solidity -function adjustFeeMultiplier(uint8 newFeeMultiplier) external -``` - -### adjustCapacity - -```solidity -function adjustCapacity(uint32 newCapacity) external -``` - -### withdrawRewards - -```solidity -function withdrawRewards(uint64 amount) external -``` - -### exit - -```solidity -function exit() external -``` - -### pickRandomProver - -```solidity -function pickRandomProver(uint256 randomNumber, uint256 blockId) external returns (address) -``` - -### getProver - -```solidity -function getProver(uint256 blockId) external view returns (address) -``` - -### slash - -```solidity -function slash(address prover) external -``` diff --git a/packages/website/pages/docs/reference/contract-documentation/L1/ProverPool2.md b/packages/website/pages/docs/reference/contract-documentation/L1/ProverPool2.md deleted file mode 100644 index d68027149eb..00000000000 --- a/packages/website/pages/docs/reference/contract-documentation/L1/ProverPool2.md +++ /dev/null @@ -1,173 +0,0 @@ ---- -title: ProverPool2 ---- - -## ProverPool2 - -### NUM_SLOTS - -```solidity -uint256 NUM_SLOTS -``` - -### EXIT_PERIOD - -```solidity -uint256 EXIT_PERIOD -``` - -### SLASH_POINTS - -```solidity -uint32 SLASH_POINTS -``` - -### totalStaked - -```solidity -uint256 totalStaked -``` - -### totalWeight - -```solidity -uint256 totalWeight -``` - -### CAPACITY_INCORRECT - -```solidity -error CAPACITY_INCORRECT() -``` - -### NOT_ENOUGH_BALANCE - -```solidity -error NOT_ENOUGH_BALANCE() -``` - -### CANNOT_BE_PREFERRED - -```solidity -error CANNOT_BE_PREFERRED() -``` - -### Staker - -```solidity -struct Staker { - uint256 amount; - uint256 numSlots; - uint256 maxNumSlots; - uint256 unstakedAt; - uint16 rewardPerGas; -} -``` - -### preferredProver - -```solidity -address preferredProver -``` - -### slots - -```solidity -mapping(uint256 => address) slots -``` - -### stakers - -```solidity -mapping(address => struct ProverPool2.Staker) stakers -``` - -### init - -```solidity -function init(address _addressManager) external -``` - -### assignProver - -```solidity -function assignProver(uint64 blockId, uint32 feePerGas) external view returns (address prover, uint32 rewardPerGas) -``` - -### stake - -```solidity -function stake(uint256 amount, uint16 rewardPerGas, uint16 maxCapacity) external -``` - -### unstake - -```solidity -function unstake() external -``` - -### setRewardPerGas - -```solidity -function setRewardPerGas(uint16 rewardPerGas) external -``` - -### setMaxNumSlots - -```solidity -function setMaxNumSlots(address staker, uint16 maxNumSlots) external -``` - -### claimSlot - -```solidity -function claimSlot(address staker, uint256 slotIdx) public -``` - -### claimPreferredProverStatus - -```solidity -function claimPreferredProverStatus(address staker) external -``` - -### slashProver - -```solidity -function slashProver(address slashed) external -``` - -### withdraw - -```solidity -function withdraw(address staker) public -``` - -### getWeight - -```solidity -function getWeight(address staker) public view returns (uint256) -``` - -### getNumClaimableSlots - -```solidity -function getNumClaimableSlots(address staker) public view returns (uint256) -``` - -### isSlotClaimable - -```solidity -function isSlotClaimable(uint256 slotIdx) public view returns (bool) -``` - -### getClaimableSlots - -```solidity -function getClaimableSlots() public view returns (uint256[]) -``` - ---- - -## title: ProxiedProverPool2 - -## ProxiedProverPool2 diff --git a/packages/website/pages/docs/reference/contract-documentation/L1/ProverPool3.md b/packages/website/pages/docs/reference/contract-documentation/L1/ProverPool3.md deleted file mode 100644 index 8957fc45ded..00000000000 --- a/packages/website/pages/docs/reference/contract-documentation/L1/ProverPool3.md +++ /dev/null @@ -1,99 +0,0 @@ ---- -title: ProverPool3 ---- - -## ProverPool3 - -### NUM_SLOTS - -```solidity -uint256 NUM_SLOTS -``` - -### EXIT_PERIOD - -```solidity -uint256 EXIT_PERIOD -``` - -### totalStaked - -```solidity -uint256 totalStaked -``` - -### Staker - -```solidity -struct Staker { - uint256 amount; - uint256 numSlots; - uint256 unstakedAt; -} -``` - -### slots - -```solidity -mapping(uint256 => address) slots -``` - -### stakers - -```solidity -mapping(address => struct ProverPool3.Staker) stakers -``` - -### assignProver - -```solidity -function assignProver(uint64 blockId, uint32 feePerGas) external view returns (address prover, uint32 rewardPerGas) -``` - -### stake - -```solidity -function stake(address staker, uint256 amount) external -``` - -### unstake - -```solidity -function unstake(address staker) external -``` - -### claimSlot - -```solidity -function claimSlot(address staker, uint256 slotIdx) external -``` - -### slashProver - -```solidity -function slashProver(address staker) external -``` - -### withdraw - -```solidity -function withdraw(address staker) public -``` - -### getNumClaimableSlots - -```solidity -function getNumClaimableSlots(address staker) public view returns (uint256) -``` - -### isSlotClaimable - -```solidity -function isSlotClaimable(uint256 slotIdx) public view returns (bool) -``` - -### getClaimableSlots - -```solidity -function getClaimableSlots() public view returns (uint256[]) -``` diff --git a/packages/website/pages/docs/reference/contract-documentation/L1/StakingProverPool.md b/packages/website/pages/docs/reference/contract-documentation/L1/StakingProverPool.md deleted file mode 100644 index e9995f63073..00000000000 --- a/packages/website/pages/docs/reference/contract-documentation/L1/StakingProverPool.md +++ /dev/null @@ -1,209 +0,0 @@ ---- -title: StakingProverPool ---- - -## StakingProverPool - -### Prover - -```solidity -struct Prover { - address proverAddress; - uint256 stakedTokens; - uint256 rewards; - uint256 healthScore; - uint256 lastBlockTsToBeProven; - uint32 capacity; - uint32 numAssignedBlocks; - uint8 feeMultiplier; -} -``` - -### provers - -```solidity -mapping(address => struct StakingProverPool.Prover) provers -``` - -### topProvers - -```solidity -address[32] topProvers -``` - -### blockIdToProver - -```solidity -mapping(uint256 => address) blockIdToProver -``` - -### MIN_TKO_AMOUNT - -```solidity -uint256 MIN_TKO_AMOUNT -``` - -### proversInPool - -```solidity -uint16 proversInPool -``` - -### maxPoolSize - -```solidity -uint16 maxPoolSize -``` - -### MIN_MULTIPLIER - -```solidity -uint8 MIN_MULTIPLIER -``` - -### MAX_MULTIPLIER - -```solidity -uint8 MAX_MULTIPLIER -``` - -### ProverEntered - -```solidity -event ProverEntered(address prover, uint256 amount, uint256 feeMultiplier, uint64 capacity) -``` - -### ProverExited - -```solidity -event ProverExited(address prover) -``` - -### ProverStakedMoreTokens - -```solidity -event ProverStakedMoreTokens(address prover, uint256 amount, uint256 totalStaked) -``` - -### ProverAdjustedFeeMultiplier - -```solidity -event ProverAdjustedFeeMultiplier(address prover, uint256 oldFeeMultiplier, uint256 newFeeMultiplier) -``` - -### ProverAdjustedCapacity - -```solidity -event ProverAdjustedCapacity(address prover, uint32 oldCapacity, uint32 newCapacity) -``` - -### ProverWithdrawAwards - -```solidity -event ProverWithdrawAwards(address prover, uint256 amount) -``` - -### ProverSlashed - -```solidity -event ProverSlashed(address prover, uint256 amount) -``` - -### onlyProver - -```solidity -modifier onlyProver() -``` - -### onlyProtocol - -```solidity -modifier onlyProtocol() -``` - -### init - -```solidity -function init(address _addressManager, uint16 _maxPoolSize) external -``` - -Initialize the rollup. - -#### Parameters - -| Name | Type | Description | -| ---------------- | ------- | --------------------------- | -| \_addressManager | address | The AddressManager address. | -| \_maxPoolSize | uint16 | | - -### enterProverPool - -```solidity -function enterProverPool(uint256 amount, uint256 feeMultiplier, uint32 capacity) external -``` - -### stakeMoreTokens - -```solidity -function stakeMoreTokens(uint256 amount) external -``` - -### adjustFeeMultiplier - -```solidity -function adjustFeeMultiplier(uint8 newFeeMultiplier) external -``` - -### adjustCapacity - -```solidity -function adjustCapacity(uint32 newCapacity) external -``` - -### withdrawRewards - -```solidity -function withdrawRewards(uint64 amount) external -``` - -### exit - -```solidity -function exit() external -``` - -### pickRandomProver - -```solidity -function pickRandomProver(uint256 randomNumber, uint256 blockId) external returns (address) -``` - -### getProver - -```solidity -function getProver(uint256 blockId) external view returns (address) -``` - -### slash - -```solidity -function slash(address prover) external -``` - -### rearrangeTop32 - -```solidity -function rearrangeTop32() internal -``` - -### getTopProverArrayId - -```solidity -function getTopProverArrayId(address prover) internal view returns (uint256) -``` - ---- - -## title: ProxiedStakingProverPool - -## ProxiedStakingProverPool diff --git a/packages/website/pages/docs/reference/contract-documentation/L1/TaikoProverPool.md b/packages/website/pages/docs/reference/contract-documentation/L1/TaikoProverPool.md deleted file mode 100644 index 4ed1cdda5ce..00000000000 --- a/packages/website/pages/docs/reference/contract-documentation/L1/TaikoProverPool.md +++ /dev/null @@ -1,209 +0,0 @@ ---- -title: TaikoProverPool ---- - -## TaikoProverPool - -### Prover - -```solidity -struct Prover { - address proverAddress; - uint256 stakedTokens; - uint256 rewards; - uint256 healthScore; - uint256 lastBlockTsToBeProven; - uint32 capacity; - uint32 numAssignedBlocks; - uint8 feeMultiplier; -} -``` - -### provers - -```solidity -mapping(address => struct TaikoProverPool.Prover) provers -``` - -### topProvers - -```solidity -address[32] topProvers -``` - -### blockIdToProver - -```solidity -mapping(uint256 => address) blockIdToProver -``` - -### MIN_TKO_AMOUNT - -```solidity -uint256 MIN_TKO_AMOUNT -``` - -### proversInPool - -```solidity -uint16 proversInPool -``` - -### maxPoolSize - -```solidity -uint16 maxPoolSize -``` - -### MIN_MULTIPLIER - -```solidity -uint8 MIN_MULTIPLIER -``` - -### MAX_MULTIPLIER - -```solidity -uint8 MAX_MULTIPLIER -``` - -### ProverEntered - -```solidity -event ProverEntered(address prover, uint256 amount, uint256 feeMultiplier, uint64 capacity) -``` - -### ProverExited - -```solidity -event ProverExited(address prover) -``` - -### ProverStakedMoreTokens - -```solidity -event ProverStakedMoreTokens(address prover, uint256 amount, uint256 totalStaked) -``` - -### ProverAdjustedFeeMultiplier - -```solidity -event ProverAdjustedFeeMultiplier(address prover, uint256 oldFeeMultiplier, uint256 newFeeMultiplier) -``` - -### ProverAdjustedCapacity - -```solidity -event ProverAdjustedCapacity(address prover, uint32 oldCapacity, uint32 newCapacity) -``` - -### ProverWithdrawAwards - -```solidity -event ProverWithdrawAwards(address prover, uint256 amount) -``` - -### ProverSlashed - -```solidity -event ProverSlashed(address prover, uint256 amount) -``` - -### onlyProver - -```solidity -modifier onlyProver() -``` - -### onlyProtocol - -```solidity -modifier onlyProtocol() -``` - -### init - -```solidity -function init(address _addressManager, uint16 _maxPoolSize) external -``` - -Initialize the rollup. - -#### Parameters - -| Name | Type | Description | -| ---------------- | ------- | --------------------------- | -| \_addressManager | address | The AddressManager address. | -| \_maxPoolSize | uint16 | | - -### enterProverPool - -```solidity -function enterProverPool(uint256 amount, uint256 feeMultiplier, uint32 capacity) external -``` - -### stakeMoreTokens - -```solidity -function stakeMoreTokens(uint256 amount) external -``` - -### adjustFeeMultiplier - -```solidity -function adjustFeeMultiplier(uint8 newFeeMultiplier) external -``` - -### adjustCapacity - -```solidity -function adjustCapacity(uint32 newCapacity) external -``` - -### withdrawRewards - -```solidity -function withdrawRewards(uint64 amount) external -``` - -### exit - -```solidity -function exit() external -``` - -### pickRandomProver - -```solidity -function pickRandomProver(uint256 randomNumber, uint256 blockId) external returns (address) -``` - -### getProver - -```solidity -function getProver(uint256 blockId) external view returns (address) -``` - -### slash - -```solidity -function slash(address prover) external -``` - -### rearrangeTop32 - -```solidity -function rearrangeTop32() internal -``` - -### getTopProverArrayId - -```solidity -function getTopProverArrayId(address prover) internal view returns (uint256) -``` - ---- - -## title: ProxiedTaikoProverPool - -## ProxiedTaikoProverPool