FluidAuthGate ​
Inherits:BasicUpgradeable, BasicValidations, FluidAuthLevels, IFluidAuthGate
Title: FluidAuthGate
Identity registry for privileged Fluid actors: is an address Liquidity governance, or a team multisig of at least a given security level. Consumers query the gate instead of hardcoding multisigs, so a rotation is one upgrade here instead of redeploying every consumer.
UUPS behind an ERC1967 proxy; LL governance is the only upgrader. Identities are immutables on the implementation — rotation = deploy a new implementation and upgrade. Current auth tier levels: MAX -> governance CRITICAL -> TEAM_MULTISIG_TIMELOCK (team multisig via timelock) HIGH -> TEAM_MULTISIG MID -> TEAM_MULTISIG2 LOW -> none as of now
Constants ​
TEAM_MULTISIG ​
main team multisig, security level SECURITY_LEVEL_HIGH.
address public immutable TEAM_MULTISIGTEAM_MULTISIG2 ​
team multisig 2, security level SECURITY_LEVEL_MID.
address public immutable TEAM_MULTISIG2TEAM_MULTISIG_TIMELOCK ​
timelock controlled by the main team multisig, security level SECURITY_LEVEL_CRITICAL.
address public immutable TEAM_MULTISIG_TIMELOCKFunctions ​
constructor ​
Note: oz-upgrades-unsafe-allow: constructor
constructor(address liquidity_, address teamMultisig_, address teamMultisig2_, address teamMultisigTimelock_)
BasicUpgradeable(liquidity_)
validAddress(teamMultisig_)
validAddress(teamMultisig2_)
validAddress(teamMultisigTimelock_);Parameters
| Name | Type | Description |
|---|---|---|
liquidity_ | address | Liquidity proxy whose EIP-1967 admin is governance for this contract. |
teamMultisig_ | address | |
teamMultisig2_ | address | |
teamMultisigTimelock_ | address |
governance ​
current governance (EIP-1967 admin of LIQUIDITY).
function governance() public view returns (address);isGovernance ​
whether addr_ is Liquidity Layer governance.
function isGovernance(address addr_) public view returns (bool);requireAuthLevel ​
reverts Access__Unauthorized unless authLevel(addr_) is non-zero and
=
minSecurityLevel_.SECURITY_LEVEL_MAXis governance-only.
function requireAuthLevel(address addr_, uint256 minSecurityLevel_) public view;requireAuthLevelLow ​
requireAuthLevel at SECURITY_LEVEL_LOW.
function requireAuthLevelLow(address addr_) public view;requireAuthLevelMid ​
requireAuthLevel at SECURITY_LEVEL_MID.
function requireAuthLevelMid(address addr_) public view;requireAuthLevelHigh ​
requireAuthLevel at SECURITY_LEVEL_HIGH.
function requireAuthLevelHigh(address addr_) public view;requireAuthLevelCritical ​
requireAuthLevel at SECURITY_LEVEL_CRITICAL.
function requireAuthLevelCritical(address addr_) public view;requireAuthLevelMax ​
requireAuthLevel at SECURITY_LEVEL_MAX.
function requireAuthLevelMax(address addr_) public view;authLevel ​
security level of addr_; governance is SECURITY_LEVEL_MAX, 0 for unknown addresses.
governance resolves first so a team identity that also is governance still gets MAX (L2s).
function authLevel(address addr_) public view returns (uint256);_authorizeUpgrade ​
LIQUIDITY is an implementation immutable, so an implementation built against a different Liquidity would move onlyGovernance to that chain of custody and lock this gate — and with it every consumer — permanently.
function _authorizeUpgrade(address newImplementation_) internal override onlyGovernance;Errors ​
AuthGate__ImplementationLiquidityMismatch ​
thrown when upgrading to an implementation bound to a different Liquidity
error AuthGate__ImplementationLiquidityMismatch();