PlatformFee
import "@thirdweb-dev/contracts/extension/PlatformFee.sol";
PlatformFee
allows you to charge a percentage fee wherever there is a transfer of currency (ERC20 tokens or native tokens) in your contract.
Usage
The PlatformFee
extension is an abstract contract, and expects you to implement the following functions by yourself:
Name | Type | Returns | Description |
---|---|---|---|
_canSetPlatformFeeInfo | internal view virtual | bool | Runs on every attempt to set a new platform fee recipient or bps. Returns whether this info can be set in the given execution context. |
This is an example smart contract demonstrating how to inherit from this extension and override the functions to add (optional) custom functionality.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "@thirdweb-dev/contracts/extension/PlatformFee.sol";
contract MyContract is PlatformFee {
/**
* We store the contract deployer's address only for the purposes of the example
* in the code comment below.
*
* Doing this is not necessary to use the `PlatformFee` extension.
*/
address public deployer;
constructor() {
deployer = msg.sender;
}
/**
* This function returns who is authorized to set platform fee info for your contract.
*
* As an EXAMPLE, we'll only allow the contract deployer to set the platform fee info.
*
* You MUST complete the body of this function to use the `PlatformFee` extension.
*/
function _canSetPlatformFeeInfo() internal view virtual override returns (bool) {
return msg.sender == deployer;
}
}
SDK Usage
By adding this extension to a smart contract, the following features, hooks and functions are unlocked in the SDK:
Base Contracts Implementing This Extension
None of the base contracts implement this extension.
Full API reference
getPlatformFeeInfo
function getPlatformFeeInfo() public view returns (address, uint16);
- Returns the platform fee recipient and bps.
- Set this value using the
setPlatformFeeInfo
function.
setPlatformFeeInfo
function setPlatformFeeInfo(address platformFeeRecipient, uint256 platformFeeBps) external;
- Lets an authorized wallet set the platform fee recipient and bps.
- Parameter
platformFeeRecipient
: The address to set as the new platform fee recipient. - Parameter
platformFeeBps
: The value to set as the new platform fee BPS. - The
_canSetPlatformFeeInfo
function is run on every call to this function. If the return value of_canSetPlatformFeeInfo
isfalse
, thesetPlatformFeeInfo
call will revert.
_setupPlatformFeeInfo
function _setupPlatformFeeInfo(address platformFeeRecipient, uint256 platformFeeBps) internal;
- Sets the platform fee recipient and bps.
- Parameter
platformFeeRecipient
: The address to set as the new platform fee recipient. - Parameter
platformFeeBps
: The value to set as the new platform fee BPS. - The
_canSetPlatformFeeInfo
function is not run on a call to this function.
_canSetPlatformFeeInfo
function _canSetPlatformFeeInfo() internal view virtual returns (bool);
- Runs on every
setPlatformFeeInfo
function call. - Returns whether a new platform fee recipient or bps can be set in the given execution context.
- For example, this function can check whether the wallet calling
setPlatformFeeInfo
is the contract owner, and enforce that only the current owner should be able to successfully callsetPlatformFeeInfo
.