Whitelist
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
_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
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
_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
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
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
<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
<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);