Whitelist

Git Source

Inherits: Ownable2Step

An external Whitelist module that Ion's system-wide contracts can use to verify that a user is permitted to borrow or lend. A merkle whitelist is used to allow for a large number of addresses to be whitelisted without consuming infordinate amounts of gas for the updates. There is also a protocol whitelist that can be used to allow for a protocol controlled address to bypass the merkle proof check. These protocol-controlled contract are expected to perform whitelist checks themsleves on their own entrypoints.

The full merkle tree is stored off-chain and only the root is stored on-chain.

State Variables

protocolWhitelist

mapping(address protocolControlledAddress => bool) public protocolWhitelist;

borrowersRoot

mapping(uint8 ilkIndex => bytes32) public borrowersRoot;

lendersRoot

bytes32 public lendersRoot;

Functions

constructor

Creates a new Whitelist instance.

constructor(bytes32[] memory _borrowersRoots, bytes32 _lendersRoot) Ownable(msg.sender);

Parameters

Name
Type
Description

_borrowersRoots

bytes32[]

List borrower merkle roots for each ilk.

_lendersRoot

bytes32

The lender merkle root.

updateBorrowersRoot

Updates the borrower merkle root for a specific ilk.

function updateBorrowersRoot(uint8 ilkIndex, bytes32 _borrowersRoot) external onlyOwner;

Parameters

Name
Type
Description

ilkIndex

uint8

of the ilk.

_borrowersRoot

bytes32

The new borrower merkle root.

updateLendersRoot

Updates the lender merkle root.

function updateLendersRoot(bytes32 _lendersRoot) external onlyOwner;

Parameters

Name
Type
Description

_lendersRoot

bytes32

The new lender merkle root.

approveProtocolWhitelist

Approves a protocol controlled address to bypass the merkle proof check.

function approveProtocolWhitelist(address addr) external onlyOwner;

Parameters

Name
Type
Description

addr

address

The address to approve.

revokeProtocolWhitelist

Revokes a protocol controlled address to bypass the merkle proof check.

function revokeProtocolWhitelist(address addr) external onlyOwner;

Parameters

Name
Type
Description

addr

address

The address to revoke approval for.

isWhitelistedBorrower

Called by external modifiers to prove inclusion as a borrower.

If the root is just zero, then the whitelist is effectively turned off as every address will be allowed.

function isWhitelistedBorrower(
    uint8 ilkIndex,
    address poolCaller,
    address addr,
    bytes32[] calldata proof
)
    external
    view
    returns (bool);

Returns

Name
Type
Description

<none>

bool

True if the addr is part of the borrower whitelist or the protocol whitelist. False otherwise.

isWhitelistedLender

Called by external modifiers to prove inclusion as a lender.

If the root is just zero, then the whitelist is effectively turned off as every address will be allowed.

function isWhitelistedLender(address poolCaller, address addr, bytes32[] calldata proof) external view returns (bool);

Returns

Name
Type
Description

<none>

bool

True if the addr is part of the lender whitelist or the protocol whitelist. False otherwise.

Errors

NotWhitelistedBorrower

error NotWhitelistedBorrower(uint8 ilkIndex, address addr);

NotWhitelistedLender

error NotWhitelistedLender(address addr);