Skip to content

EFP Multisig

The EFP multisig is a set of Gnosis Safes on Base, OP Mainnet, and Ethereum Mainnet, and each requires 3 out of 4 signatories to execute a transaction.

Multisig Wallet Addresses

ChainAddressGnosis Safe
Base0x860bFe7019d6264A991277937ea6002714C3c508Link
OP Mainnet0x860bFe7019d6264A991277937ea6002714C3c508Link
Ethereum Mainnet0xeaa7B3B7f9A6c9782Fc17A49C4dfC170193d69DdLink

Signers

The signers are the same on all three chains and are controlled by members of the EFP core team.

AddressOwner
0x983110309620D911731Ac0932219af06091b6744brantly.eth
0x96184444629F3489c4dE199871E6F99568229d8fbrantly.eth
0xC9C3A4337a1bba75D0860A1A81f7B990dc6073340xthrpw.eth
0x5B0f3DBdD49614476e4f5fF5Db6fe13d41fCB516encrypteddegen.eth

EFP Contracts owned by Multisig

Base (Chain ID: 8453)
NameAddress
EFPAccountMetadata0x5289fE5daBC021D02FDDf23d4a4DF96F4E0F17EF
EFPListRecords0x41Aa48Ef3c0446b46a5b1cc6337FF3d3716E2A33
EFPListRegistry0x0E688f5DCa4a0a4729946ACbC44C792341714e08
EFPListMinter0xDb17Bfc64aBf7B7F080a49f0Bbbf799dDbb48Ce5
TokenURIProvider0xC8BA343aeaF2b3b3EC79C25f05F4Ef459D9c7eFB
OP Mainnet (Chain ID: 10)
NameAddress
EFPListRecords0x4Ca00413d850DcFa3516E14d21DAE2772F2aCb85
Ethereum Mainnet (Chain ID: 1)
NameAddress
EFPListRecords0x5289fE5daBC021D02FDDf23d4a4DF96F4E0F17EF

Privileges

For each of the chains, the multisig has privileged control over the following functions in each of the contracts listed below.

EFPAccountMetadata


Pause

Allows the owner to cease all contract interaction

/**
* @dev Pauses the contract. Can only be called by the contract owner.
*/
function pause() public onlyOwner {
_pause();
}
Unpause

Allows the owner to resume all contract interaction

/**
* @dev Unpauses the contract. Can only be called by the contract owner.
*/
function unpause() public onlyOwner {
_unpause();
}
Add Proxy

Allows the owner to add an account to a list of privileged addresses which are allowed to update account metadata. This allows the List Minter to set default lists and metadata during the minting process.

/**
* @dev Add proxy address.
* @param proxy The proxy address.
*/
function addProxy(address proxy) external whenNotPaused onlyOwner {
proxies[proxy] = true;
emit ProxyAdded(proxy);
}
Remove Proxy

Allows the owner to remove an account from the list of privileged proxy addresses

/**
* @dev Remove proxy address.
* @param proxy The proxy address.
*/
function removeProxy(address proxy) external whenNotPaused onlyOwner {
proxies[proxy] = false;
emit ProxyRemoved(proxy);
}

EFPListRecords


Pause

Allows the owner to cease all contract interaction

/**
* @dev Pauses the contract. Can only be called by the contract owner.
*/
function pause() public onlyOwner {
_pause();
}
Unpause

Allows the owner to resume all contract interaction

/**
* @dev Unpauses the contract. Can only be called by the contract owner.
*/
function unpause() public onlyOwner {
_unpause();
}

EFPListRegistry


Pause

Allows the owner to cease all contract interaction

/**
* @dev Pauses the contract. Can only be called by the contract owner.
*/
function pause() public onlyOwner {
_pause();
}
Unpause

Allows the owner to resume all contract interaction

/**
* @dev Unpauses the contract. Can only be called by the contract owner.
*/
function unpause() public onlyOwner {
_unpause();
}
Set TokenURIProvider

Allows the owner to set the TokenURIProvider contract address

/**
* @notice Sets the token URI provider.
* @param tokenURIProvider_ The new token URI provider.
*/
function setTokenURIProvider(address tokenURIProvider_) external onlyOwner {
tokenURIProvider = ITokenURIProvider(tokenURIProvider_);
emit TokenURIProviderChange(tokenURIProvider_);
}
Set PriceOracle

Allows the owner to set the priceOracle contract address. This contract is currentlet unset.

/**
* @notice Sets the price oracle.
* @param priceOracle_ The new price oracle.
*/
function setPriceOracle(address priceOracle_) external whenNotPaused onlyOwner {
priceOracle = IEFPListNFTPriceOracle(priceOracle_);
emit PriceOracleChange(priceOracle_);
}
Withdraw

Allows the owner to withdraw Ether from the contract

/**
* @notice Withdraws Ether from the contract.
*
* @param recipient The address to send the Ether to.
* @param amount The amount of Ether to send.
* @return Whether the transfer succeeded.
*/
function withdraw(address payable recipient, uint256 amount) public onlyOwner returns (bool) {
require(amount <= address(this).balance, 'Insufficient balance');
(bool sent,) = recipient.call{value: amount}('');
require(sent, 'Failed to send Ether');
return sent;
}
Set MintState

Allows the owner to modify limitations when minting lists

/// @notice Sets the mint state.
/// @param _mintState The new mint state.
function setMintState(MintState _mintState) external whenNotPaused onlyOwner {
mintState = _mintState;
emit MintStateChange(_mintState);
}
Set MaxMintBatchSize

Allows the owner to modify limitations on the maximum number of lists that can be minted in one transanction

/// @notice Sets the max mint batch size.
/// @param _maxMintBatchSize The new max mint batch size.
function setMaxMintBatchSize(uint256 _maxMintBatchSize) external whenNotPaused onlyOwner {
maxMintBatchSize = _maxMintBatchSize;
emit MaxMintBatchSizeChange(_maxMintBatchSize);
}

EFPListMinter


Pause

Allows the owner to cease all contract interaction

/**
* @dev Pauses the contract. Can only be called by the contract owner.
*/
function pause() public onlyOwner {
_pause();
}
Unpause

Allows the owner to resume all contract interaction

/**
* @dev Unpauses the contract. Can only be called by the contract owner.
*/
function unpause() public onlyOwner {
_unpause();
}

TokenURIProvider


Set BaseURI

Allows the owner to set the BaseURI use for contructing token URIs

/**
* @dev Sets the base URI for token URIs
* @param baseURI The new base URI
*/
function setBaseURI(string memory baseURI) external onlyOwner {
_baseURI = baseURI;
}