I also notice that implementing feeless transaction are recommended on stack-exchange using an unsigned transactions.

Why is it better to implement feeless transactions with an unsigned transaction over SignedExtension with Pays::No?

2 Answers 2


It depends on the situation so one is not better than the other. Unsigned extrinsics can be used by validators, very similar to inherents (adding information to a block). Maybe when the use case is very generic you might find good use with it. However, for transactions it is usual the case that you want to check the signer and if it is a more specific use case, it is advised to use the Pays::No.

  • When you say Pays::No I assume you are talking about using that as weight information for a dispatchable that receives an unsigned tx and using SignedExtension validation of that utx? Commented Nov 10, 2022 at 9:26
  • Yes as weight information but I meant for signed transactions Commented Nov 16, 2022 at 17:40

Having feeless signed transactions could make your chain vulnerable to the chain being spammed. A better approach could be, is to update DispatchResultWithPostInfo with Pays::No for special conditions or accounts.

Another idea that can be explored to implement feeless transactions could be:

  • A user is required to deposit/stake an X amount of tokens in order to get Y amount of free transactions in a given epoch.
  • Any transaction over the amount Y is charged a fee/slashed from the stake.
  • Stake can have a minimum unbonding time to prevent abuse.

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.