Factory
Inherits: ERC721, Owned
Author: out.eth (@outdoteth)
This contract is used to create and initialize new private pools. Each time a private pool is created, a new NFT representing that private pool is minted to the creator. All protocol fees also accrue to this contract and can be withdrawn by the admin.
State Variables
privatePoolImplementation
The address of the private pool implementation that proxies point to.
address public privatePoolImplementation;
privatePoolMetadata
Helper contract that constructs the private pool metadata svg and json for each pool NFT.
address public privatePoolMetadata;
protocolFeeRate
The protocol fee that is taken on each buy/sell/change. It's in basis points: 350 = 3.5%.
uint16 public protocolFeeRate;
Functions
constructor
constructor() ERC721("Caviar Private Pools", "POOL") Owned(msg.sender);
receive
receive() external payable;
create
Creates a new private pool using the minimal proxy pattern that points to the private pool implementation. The caller must approve the factory to transfer the NFTs that will be deposited to the pool.
function create(
address _baseToken,
address _nft,
uint128 _virtualBaseTokenReserves,
uint128 _virtualNftReserves,
uint56 _changeFee,
uint16 _feeRate,
bytes32 _merkleRoot,
bool _useStolenNftOracle,
bool _payRoyalties,
bytes32 _salt,
uint256[] memory tokenIds,
uint256 baseTokenAmount
) public payable returns (PrivatePool privatePool);
Parameters
_baseToken
address
The address of the base token.
_nft
address
The address of the NFT.
_virtualBaseTokenReserves
uint128
The virtual base token reserves.
_virtualNftReserves
uint128
The virtual NFT reserves.
_changeFee
uint56
The change fee.
_feeRate
uint16
The fee rate.
_merkleRoot
bytes32
The merkle root.
_useStolenNftOracle
bool
Whether to use the stolen NFT oracle.
_payRoyalties
bool
_salt
bytes32
The salt that will used on deployment.
tokenIds
uint256[]
The token ids to deposit to the pool.
baseTokenAmount
uint256
The amount of base tokens to deposit to the pool.
Returns
privatePool
PrivatePool
The address of the private pool.
predictPoolDeploymentAddress
Predicts the deployment address of a new private pool.
function predictPoolDeploymentAddress(bytes32 salt) public view returns (address predictedAddress);
Parameters
salt
bytes32
The salt that will used on deployment.
Returns
predictedAddress
address
The predicted deployment address of the private pool.
setPrivatePoolMetadata
Sets private pool metadata contract.
function setPrivatePoolMetadata(address _privatePoolMetadata) public onlyOwner;
Parameters
_privatePoolMetadata
address
The private pool metadata contract.
setPrivatePoolImplementation
Sets the private pool implementation contract that newly deployed proxies point to.
function setPrivatePoolImplementation(address _privatePoolImplementation) public onlyOwner;
Parameters
_privatePoolImplementation
address
The private pool implementation contract.
setProtocolFeeRate
Sets the protocol fee that is taken on each buy/sell/change. It's in basis points: 350 = 3.5%.
function setProtocolFeeRate(uint16 _protocolFeeRate) public onlyOwner;
Parameters
_protocolFeeRate
uint16
The protocol fee.
withdraw
Withdraws the earned protocol fees.
function withdraw(address token, uint256 amount) public onlyOwner;
Parameters
token
address
The token to withdraw.
amount
uint256
The amount to withdraw.
tokenURI
Returns the token URI for a given token id.
function tokenURI(uint256 id) public view override returns (string memory);
Parameters
id
uint256
The token id.
Returns
<none>
string
uri The token URI.
Events
Create
event Create(address indexed privatePool, uint256[] tokenIds, uint256 baseTokenAmount);
Withdraw
event Withdraw(address indexed token, uint256 indexed amount);
Last updated