Is it possible to create a token contract that pays a tiny transaction fee in the ERC20 token to a third party?

This transaction fee has nothing to do with the ETH fees which will be paid first and foremost. This is a tiny fee on every transaction paid by the receiver at the time of the payment, like a credit card transaction fee off the top of the token value coming into the receiver's wallet.

Can a tiny part of each payment be diverted to a central account?

Let's just say as an example:

1% of each payment is skimmed off the top of each payment and sent or collected into a central wallet. Is this possible?? (this is not related to the ETH transaction fee)

  • Yes, just take 1% of ETH sent and send it to the "central account". By the way, format your post, it is quite hard (at least for non english native speaker like me) to understand, because you just put everything in one paragraph. Press "enter" ;) Commented Nov 17, 2017 at 1:16
  • Thank you for the response, but that is not what I'm asking. We need 1% of the token skimmed, not the ETH, we don't want ETH, this is in addition to the ETH transaction fee. Commented Nov 17, 2017 at 2:20
  • Then just take 1% of the token (if it has enough decimals, of course) Commented Nov 17, 2017 at 5:42
  • Can you provide example code? I’d like to know the same
    – chovy
    Commented Dec 21, 2021 at 11:29

1 Answer 1


Yes. That's pretty possible. It depends on the code of your smart contract. You can have a function that transfers 1% of the fee to a central account. You can have a function like this:

function transfer(address _to, uint256 _value) {
        require(_value%100 == 0);
        uint fee = _value/100; // for 1% fee
        require (balanceOf[msg.sender] > _value) ;                          // Check if the sender has enough balance
        require (balanceOf[_to] + _value > balanceOf[_to]);                // Check for overflows
        balanceOf[msg.sender] -= _value;                                    // Subtract from the sender
        balanceOf[_to] += (_value-fee);                                           // Add the same to the recipient
        balanceOf[thirdPartyAddress] += fee;
  • Thank you. To clarify, I send 100 tokens to another user, 99 tokens arrive in his wallet and 1 token is routed to a central third-party wallet that just collects fees. Thank you, Prashant Prabhakar Singh for your code example. Commented Nov 17, 2017 at 19:47
  • Yeah, exactly same will happen. Do test this. Cheers :) Commented Nov 17, 2017 at 19:50
  • How would I make the fee configurable? Like .25%
    – chovy
    Commented Dec 21, 2021 at 11:40

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.