Recurring Payments are implemented as a set of withdrawal permissions. Each account can grant any number of withdrawal permissions to other accounts. A withdrawal permission includes following properties:
Start Date
End Date
Withdrawal Limit per Period
Period Length (i.e. 1 month)
Any asset type can be used in the withdrawal limit.
After a user grants the withdrawal permissions, the authorized account is allowed to make one transfer per period of an amount up to the limit. If there is insufficient funds then the withdrawal will fail. Withdrawal permissions are designed to be a convenience for merchants and users, as they do not represent a commitment to pay.
It is up to each merchant to initiate each withdrawal. The BitShares platform does not automatically authorize the transfer of funds unless sufficient signing authority has been reached.
Daily Withdrawal Limits
For security purposes, many banks place daily withdrawal limits on user accounts. In the event that an account is compromised, a thief is limited in the amount of damage that they can do. Withdrawal permissions enable users to protect their funds in the same manner. To do so, a user creates two accounts: savings and checking.
The savings account has keys kept offline where they are unlikely to be compromised. Before placing the keys in cold storage, the savings account authorizes the checking account to make a daily withdrawal of up to $1000, for example.
The checking account can then pull money out of savings at up to this limit, per day, and then use those funds as needed. This gives the user confidence that their losses would be limited if their account is compromised.
Scheduled Payments
As stated above, the withdrawal permission system does not automatically make payments. However, the BitShares blockchain has another feature which enables scheduled payments: proposed transactions. At any time, a user can propose a transaction to execute at a specific date and time in the future. If the transaction has sufficient authorization (i.e. is properly signed by authorities) at the specified time, then it will automatically be executed.
A merchant can use this feature, combined with withdrawal permissions, to implement automatic payments after a one-time setup fee. In practice, it may be cheaper for merchants to maintain their own scheduler to automate billing, since the blockchain charges a fee to propose a transaction separately from the transaction’s own fees.