The principal use case for the garner action is demurrage.
In this use case every account is "taxed" at a certain rate per period (e.g. 2% per month). In this improvement, the token contract will remember the last time demurrage was successfully transferred out of each account. The withdrawal amount will be computed as demurrage-rate x elapsed-time-since-last-garner . Suppose we make the transaction fail if the elapsed time is below a threshold; then the action becomes sort of idempotent (call it several times in a row and it only withdraws once).
This makes garner scheduling less important and handles failed transactions better.
Perhaps create the table entry only on first garner action, and charge the RAM to the withdrawer.
The principal use case for the garner action is demurrage.
In this use case every account is "taxed" at a certain rate per period (e.g. 2% per month). In this improvement, the token contract will remember the last time demurrage was successfully transferred out of each account. The withdrawal amount will be computed as demurrage-rate x elapsed-time-since-last-garner . Suppose we make the transaction fail if the elapsed time is below a threshold; then the action becomes sort of idempotent (call it several times in a row and it only withdraws once).
This makes garner scheduling less important and handles failed transactions better.
Perhaps create the table entry only on first garner action, and charge the RAM to the withdrawer.