Skip to content

FluidAuthGate ​

Git Source

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.

solidity
address public immutable TEAM_MULTISIG

TEAM_MULTISIG2 ​

team multisig 2, security level SECURITY_LEVEL_MID.

solidity
address public immutable TEAM_MULTISIG2

TEAM_MULTISIG_TIMELOCK ​

timelock controlled by the main team multisig, security level SECURITY_LEVEL_CRITICAL.

solidity
address public immutable TEAM_MULTISIG_TIMELOCK

Functions ​

constructor ​

Note: oz-upgrades-unsafe-allow: constructor

solidity
constructor(address liquidity_, address teamMultisig_, address teamMultisig2_, address teamMultisigTimelock_)
    BasicUpgradeable(liquidity_)
    validAddress(teamMultisig_)
    validAddress(teamMultisig2_)
    validAddress(teamMultisigTimelock_);

Parameters

NameTypeDescription
liquidity_addressLiquidity proxy whose EIP-1967 admin is governance for this contract.
teamMultisig_address
teamMultisig2_address
teamMultisigTimelock_address

governance ​

current governance (EIP-1967 admin of LIQUIDITY).

solidity
function governance() public view returns (address);

isGovernance ​

whether addr_ is Liquidity Layer governance.

solidity
function isGovernance(address addr_) public view returns (bool);

requireAuthLevel ​

reverts Access__Unauthorized unless authLevel(addr_) is non-zero and

= minSecurityLevel_. SECURITY_LEVEL_MAX is governance-only.

solidity
function requireAuthLevel(address addr_, uint256 minSecurityLevel_) public view;

requireAuthLevelLow ​

requireAuthLevel at SECURITY_LEVEL_LOW.

solidity
function requireAuthLevelLow(address addr_) public view;

requireAuthLevelMid ​

requireAuthLevel at SECURITY_LEVEL_MID.

solidity
function requireAuthLevelMid(address addr_) public view;

requireAuthLevelHigh ​

requireAuthLevel at SECURITY_LEVEL_HIGH.

solidity
function requireAuthLevelHigh(address addr_) public view;

requireAuthLevelCritical ​

requireAuthLevel at SECURITY_LEVEL_CRITICAL.

solidity
function requireAuthLevelCritical(address addr_) public view;

requireAuthLevelMax ​

requireAuthLevel at SECURITY_LEVEL_MAX.

solidity
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).

solidity
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.

solidity
function _authorizeUpgrade(address newImplementation_) internal override onlyGovernance;

Errors ​

AuthGate__ImplementationLiquidityMismatch ​

thrown when upgrading to an implementation bound to a different Liquidity

solidity
error AuthGate__ImplementationLiquidityMismatch();