Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Initial draft of recurring monthly withdrawals #95

Open
wants to merge 2 commits into
base: master
Choose a base branch
from

Conversation

TheTaconator
Copy link
Contributor

Draft of recurring monthly withdrawals in response request for BSIP

Discussion: https://github.com/bitshares/bitshares-core/issues/1208

# Abstract
Recurring withdrawals can currently be defined in BitShares core with respect to any periodic interval greater than the minimum block interval (currently 3 seconds). However those intervals are not intuitive for many use cases such as intervals defined in terms of Gregorian calendar months. This BitShares Improvement Proposal describes describes possible defintions for the periodic intervals and possible implementations such that they are compatible with the existing recurring withdrawal capability. The adoption of of this proposal might increase the goods and services that are accessible through BitShares by making it easier for merchants to accept payment on an intuitive montly basis.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"might increase" -> "will increase"

monthly is simply what the old economy uses


The specified starting date-time will serve two purposes: (1) it will define the start of the recurring authorization, and (2) will implicitly define the starting day of the month **and** the starting time in UTC within that day.

If the starting day of the month is derived to be on either Day 29, 30, or 31 of a month, caution must be taken because not all months in a Gregorian calendar contain these days. One simple manner of addressing this is to prohibit the selection of these days as the start of a recurring month. Another manner is to interpret such a day as beginning on the day requested **if** that Gregorian month contains that day, and otherwise to specify the prior day in the month that is present during that calendar month (for example, a start day of 31 will become 30 when the month is April).
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I find that most other monthly periods define "end of the month" to be the 28th, which I think is sufficient.


### Caution: Possibility of Fractional Last Period

As in the existing definition, it is possible for the last period to be a fraction of a periodic interval due to the open-ended definition of the expiration date-time.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

My suggestion would be to neglect fractional last periods. Only the last fully included period counts (imagine taking out your full monthly salary because someone did not look at the hour of the day).

One could think of implementing a fractional withdrawal for fractional periods, but I believe that is unnecessary as its merely a question of proper UI.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

FYI the existing implementation of recurring withdrawals allows fractional last periods.

Limitations in UI are reasonable. Should we maybe also restrict the Core from allowing fractional?


- a starting date-time in UTC,
- a starting day of month defined as a number between 1-28,
- a starting hour of the day in UTC defined by a number between 1 and 23 (inclusive),
Copy link
Collaborator

@sschiessl-bcp sschiessl-bcp Aug 18, 2018

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why not 0 in the hour?

In general: For the user the UI needs to take care of properly setting it, for the backend I think that the day and hour can be derived from the starting date-time.


# Discussion

A design question (in contrast to the existing definition) is whether an exact quantity of periods should be explicitly defined which will result in an implied expiration date. This is related to _"Specification of Intervals"_ and _"Specification of Period Start Date-Times"_.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If the last fractional period is neglected, this is merely a personal choice. As for usability, anyone using the CLI will be able to handle both, for the UI it is a question of proper UX.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Depending on how strictly the Core handles fractional periods, this specification in the UI can make a difference. My impression from your comments is that Core should be made strict to prevent fractional periods.


# Summary for Stakeholders

The ability to define recurring withdrawals in commonly recognized intervals, such as "monthly", might increase the goods and services that are accessible through BitShares by making it easier for merchants to accept payment on an intuitive montly basis. The adoption of such a feature might also increase the usage of various BitAssets including bitCNY and bitUSD.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

will :)

@sschiessl-bcp
Copy link
Collaborator

It popped up in Telegram that including an auto-payment feature would be nice to have for withdrawal feature. Meaning: Automatically transfer the maximum amount for each period to the configured receiver.

What do you think?

@pmconrad
Copy link
Contributor

This would require additional processing on-chain. I don't see a significant advantage for users - recipients have to check for incoming funds anyway.

Can someone check how often withdrawals have been used yet? We should keep an eye on the cost/benefit ratio of these things.

@TheTaconator
Copy link
Contributor Author

@pmconrad One review of the blockchain operations through June 2018 indicates

  • 17 withdraw permission create (Operation 26)
  • 0 withdraw permission update (Operation 27)
  • 0 withdraw permission claim (Operation 28)
  • 0 withdraw permission delete (Operation 29)

@xeroc
Copy link
Member

xeroc commented Oct 16, 2018

This would require additional processing on-chain. I don't see a significant advantage for users - recipients have to check for incoming funds anyway.

I agree with this. Since the software does not have an architecture to process "stuff" on a timed basis (except for maintenance interval), I would also prefer not to automate things too much.

One of the design principles, originally, was to have actions explicitly executed.

Hence, we could as well do similar to vesting balances in that balances accumulate according to some rule (e.g. unit-step function with monthly reset) and then let users explicitly claim.

@pmconrad
Copy link
Contributor

Is anybody still working on this?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants