Suppose I am a company that wishes to pay for my clients’ transaction fees as they use my product. I can simply contribute an additional fee for each transaction I want to cover within the transaction group. This can be achieved by developing an application with a specific app call that can only be invoked by the admin. Although the app call itself doesn’t perform any actions, it enables the creation of a transaction that subsidizes all other transactions within the group.
I have a preliminary implementation idea for this feature, and I believe it could be a valuable addition to numerous future projects. However, I would greatly appreciate any feedback and insights on this topic.
Welcome to Algorand!
I think you need to use a smart signature contract account (which is not a smart contract/application).
Indeed, a smart contract/application still need to be called by an account.
(Modes of use - Algorand Developer Portal)
Smart signature contract accounts can allow to execute certain transactions (approved by the smart signature logic) from the account.
What kind of products are you looking for?
It is important to be very careful that an attacker cannot easily drain the contract account used to pay the fees. If there is such a possibility, attackers will drain your accounts almost for sure. (Attackers regularly drain TestNet dispensers while TestNet tokens have no value.)
I think I was not clear with my idea, I hope that this image clarifies the model.
I think there is not a possible attack. Furthermore, I prefer if possible to avoid smart signatures.
Yes, you can do that too. This requires that the company secret keys are held in a hot wallet and signs all transactions. If this model works for you, this works.
I’m not sure we really need an ARC for that in the sense that we don’t expect to have any interoperability issues arising from the design: you can already implement this design without any special support from any wallet.
Great, the idea is here is someone wants to use it.
As Fabrice said, it can be done using a logicSig. However, depending on the wallet, it might trigger a warning (for safety purposes). But if it is only for company usage and your user doesn’t have access to the wallet anyway, both are fine.
This is just a specific use case of Atomic Transfer. I don’t think it is worth writing an ARC for this.
However, thank you for sharing the idea. I am sure it will help other projects.
Can I obtain same result with pooling on Atomic Transfer ?
Yup, the idea is to group all the TX that you want to pay in the same group, and set the fee on the app call = to the group TX size. Then all the other TX in the group will have fee = 0. That is the overall idea