Availability Verifiers

contract AvailabilityVerifiers is MainStorage, MApprovalChain, LibConstants

A Committee contract is a contract that the exchange service sends committee member signatures to attesting that they have a copy of the data over which a new Merkel root is to be accepted as the new state root. In addition, the exchange contract can call an availability verifier to check if such signatures were indeed provided by a sufficient number of committee members as hard coded in the Committee contract for a given state transition (as reflected by the old and new vault and order roots).

The exchange contract will normally query only one Committee contract for data availability checks. However, in the event that the committee needs to be updated, additional availability verifiers may be registered with the exchange contract by the contract MainGovernance. Such new availability verifiers are then also be required to attest to the data availability for state transitions and only if all the availability verifiers attest to it, the state transition is accepted.

Removal of availability verifiers is also the responsibility of the MainGovernance. The removal process is more sensitive than availability verifier registration as it may affect the soundness of the system. Hence, this is performed in two steps:

  1. The MainGovernance first announces the intent to remove an availability verifier by calling announceAvailabilityVerifierRemovalIntent

  2. After the expiration of a VERIFIER_REMOVAL_DELAY time lock, actual removal may be performed by calling removeAvailabilityVerifier

The removal delay ensures that a user concerned about the soundness of the system has ample time to leave the exchange.

function getRegisteredAvailabilityVerifiers()
external
view
returns (address[] memory _verifers)
function isAvailabilityVerifier(address verifierAddress)
external
view
returns (bool)
function registerAvailabilityVerifier(address verifier, string calldata identifier)
external
function announceAvailabilityVerifierRemovalIntent(address verifier)
external
function removeAvailabilityVerifier(address verifier)
external