Skip to content

Protocol Fees

The protocol implements several fee mechanisms:

  1. Channel Creation Fee (default: 0.02 ETH)

    • Paid when creating a new channel
    • Can be adjusted by the protocol owner
    • Can be retrieved by calling getChannelCreationFee()[/protocol-reference/ProtocolFees#getchannelcreationfee--uint96-external] on ChannelManager
  2. Comment Creation Fee (default: 0)

    • Can be enabled for spam prevention
    • Set by the protocol owner
    • Can be retrieved by calling getCommentCreationFee()[/protocol-reference/ProtocolFees#getcommentcreationfee--uint96-external] on ChannelManager
  3. Hook Transaction Fee (default: 2%)

    • Applied to the total fee passed to hooks
    • Measured in basis points (1 bp = 0.01%)
  4. Hook Fee

    • The hook contract may or may not implement a fee mechanism
    • How the fee is taken is entirely up to the hook contract implementation
    • There is currently no standard way to retrieve the hook fee value
    • We are working on an SDK helper function to estimate the required fee based on known hook contracts

Calculating fee required for posting a comment

⚠️ Before you dive into the details, please note that we've implemented helper functions to calculate the total fee required for posting/editing a comment on a channel. Please see the links at the end of this section.

When posting a comment (including replies), the fee consists of the comment creation fee and the total fee passed to the hook.

Total fee required = Comment creation fee + Total fee passed to the hook

The total fee passed to the hook is calculated as follows:

Total fee passed to the hook = fee required by the hook / (1 - Hook transaction fee)

SDK Helper Functions

We’ve added helper functions to simplify fee calculations when posting or editing comments in a channel. Instead of manually gathering all the required details, these helpers handle the logic for you and return the total fee directly.

Example of using the helper functions can be found in the examples

Example: Calculating fee required for posting a comment on the "Takes" channel

Let's use the "Takes" channel used by interface.social as an example. Here are the steps required to calculate the total fee needed to post a comment:

...
// 1. Get the comment creation fee required by the protocol
 
const { fee: commentCreationFee } = await getCommentCreationFee({
  readContract: publicClient.readContract,
});
 
console.log("Comment creation fee:", commentCreationFee);
 
// 2. Get the hook address from the channel
 
const channel = await getChannel({
  channelId,
  readContract: publicClient.readContract,
});
 
console.log("Channel hook address:", channel.hook);
 
// if the channel has no hook, use the comment creation fee as the total fee required
if (!channel.hook) {
  return commentCreationFee;
}
 
// 3. Get the hook transaction fee required by the protocol
 
const { fee: transactionHookFee } = await getHookTransactionFee({
  readContract: publicClient.readContract,
});
 
console.log("Transaction hook fee:", transactionHookFee);
 
// 4. Since we know the hook is a "Takes" channel hook, we know they have a
// commentFee function to retrieve the fee required by the hook
 
const takesChannelHookCommentFeeABI = parseAbi([
  "function commentFee() view returns (uint256)",
]);
 
const hookCommentFee = await publicClient.readContract({
  abi: takesChannelHookCommentFeeABI,
  address: channel.hook ?? never('hook address not found'),
  functionName: "commentFee",
});
 
console.log("Hook comment fee:", hookCommentFee);
 
// 5. Calculate the total fee required
const totalFee = commentCreationFee + (hookCommentFee * 10000n) / BigInt(10000 - transactionHookFee);
 
console.log("Total fee required:", totalFee);
 
return totalFee;

For full examples, please refer to the examples