NFTFairTreasury¶
The treasury contract serves as a central entity for collecting payment and sales revenue generated from vaults. This design is intended such that users would send at most one approve()
call for one ERC20 token that can be spent across all vaults on the NFTFair platform.
To ensure the protocol does not drain the user's allowance without explicit approval, the collectPayment()
method requires an EIP712 Signature, indicating the amount of specified tokens to be spent by an authorized address.
The structure of the EIP712 Message (similarly based on EIP 2612) is the following:
Permit: [
{ name: 'owner', type: 'address' },
{ name: 'spender', type: 'address' },
{ name: 'token', type: 'address' },
{ name: 'value', type: 'uint256' },
{ name: 'nonce', type: 'uint256' },
{ name: 'deadline', type: 'uint256' },
],
Parameter | Description |
---|---|
owner | The owner of the token. This is most likely the user's address |
spender | The authorized spender. This is most likely the vault's address |
token | The address of the ERC20 token to be spent |
value | The payment amount |
nonce | The user's transaction count in the Treasury contract |
deadline | Transaction reverts at block.timestamp > deadline |
In the future, the protocol may set a fee upon payment collection, using basis points. This value is given a ceiling of 3000. In other words. the protocol can not set a fee higher than 30%.
Last but not least, the protocol has the ability to exempt fees or configure a custom fee percentage for a specified spender. If an address is neither exempt nor assigned with a custom basis point, the Treasury will collect fee using the default BP.
collectPayment()
¶
function collectPayment(
address _buyer,
address _token,
uint256 _amount,
uint256 _deadline,
bytes calldata _signature
)
This function is called by the payee directly, to collect payment from the buyer.
Parameter | Type | Description |
---|---|---|
buyer | address |
The owner of the token. This is most likely the user's address |
token | address |
The address of the ERC20 token to be spent |
amount | uint256 |
The payment amount |
deadline | uint256 |
Transaction reverts at block.timestamp > deadline |
signature | bytes |
The user signed EIP712 message |
setNewBp
¶
function setNewBp(uint256 _newBp)
onlyOwner()
Parameter | Type | Description |
---|---|---|
New BP | uint256 |
REVERTS > 3000 |
setAddressBp
¶
function setAddressBp(address _spender, uint256 _newBp)
_spender
. Requires onlyOwner()
Parameter | Type | Description |
---|---|---|
Spender | address |
This is most likely the vault's address. |
New BP | uint256 |
REVERTS > 3000 |
toggleAddressExemption
¶
function toggleAddressExemption(address _spender)
_spender
from paying fees. Requires onlyOwner()
Parameter | Type | Description |
---|---|---|
Spender | address |
This is most likely the vault's address. |
recoverERC20()
¶
function recoverERC20(
address _recipient,
address _token,
uint256 _amount
)
Withdraws the protocol revenue. Requires onlyOwner()
.
Parameter | Type | Description |
---|---|---|
recipient | address |
The recipient address |
token | address |
The address of the ERC20 token |
amount | uint256 |
The amount to withdraw |
getFeeMultiplier()
¶
function getFeeMultiplier(address _spender) public view returns (uint256 multiplier)
Returns the BP value for a specified _spender
.