BSIP-0021 Draft - "Introducing the 'Coin-Age' statistic to Bitshares assets" - Input would be massively appreciated!

in #bitshares7 years ago (edited)

BTS

Hey,

This is the third BSIP I've created recently, this BSIP proposes the introduction of an easily queryable coin-age statistic for BSIPs 19 and 20 which propose the introduction of profit-sharing/dividends for MPAs/UIAs.

Similar to BSIPs 19 and 20, this BSIP is a draft and open to community input on the entire contents of the BSIP.

I would massively appreciate any input, including concerns/criticisms.

Long live Bitshares! :D

Best regards,
@cm-steem


BSIP: #021
Title: Introducing the 'Coin-Age' statistic to Bitshares assets
Authors: Customminer
Status: Draft
Type: Protocol
Created: 2017-07-03
Primary Discussion: https://steemit.com/bitshares/@cm-steem/bsip-020-draft-introducing-profit-sharing-dividends-to-bitshares-uia-only-input-would-be-massively-appreciated
Similar Discussions: N/A
Replaces: N/A
Superseded-By: 
Worker: N/A

Abstract

Introducing the ability to query the 'Coin-Age' of assets held by individuals upon the BTS DEX.

Motivation

  • There exists no directly queryable 'coin-age' statistic within the Bitshares network.
  • Currently, the closest we can get to querying an account's accumulated asset coin-age within the client is query an account's transaction history then calculate the coin-age with an external script.
  • There aren't currently any open-source scripts for calculating user asset coin-age.

Rational

  • BSIPs 19 and 20 (Introducing profit-sharing/dividends for MPA(19)/UIA(20)) both reference a non-existent 'coin-age' statistic.
    • Proposed for proportionally distributing profit/dividends based on the length of time an asset has been held in the user's balance within the dividend time period, preventing abuse of the scheduled dividend.
  • We have previously experienced market fluctuations/instability caused by publicly scheduled snapshots (users buy immediately before, snapshot, sell immediately afterwards); discouraging similar practices through the inclusion of 'coin-age' in the dividend mechanism could help neutralise this issue.
  • Regarding consensus, there hasn't been sufficient discussion for users to voice disagreement against coin-age proposals.
  • A legit concern is that if there are a significant quantity of asset holders & transactions to process, that evaluating accumulated_coin_age for all users could be computationally expensive.
  • A concern regarding coin-age that this BSIP accounts for is if coins are held longer than the user specified time_period, that the coins start representing more than one of themselves (1 being worth 2 if held 2 times longer than the user input time period).

Specifications

  • For each chunk of a specific asset transfered to an user in the past, enable the easy querying/calculation of each user's accumulated 'coin-age' statistic.

  • Possible route:

      1. Retrieve list of accounts holding chosen asset
      1. Given this list, query the account's current asset holdings (for chosen asset), returning the list of transactions that make up holdings.
      1. Evaluate coin-age from list of tx for each eligible asset holder.
  • Draft coin-age calculation: (very much so example pseudocode, not production code!)

let reference_asset = USD; //User input variable
let time_period = 30 days; //User input variable
let accumulated_coin_age = 0;
let reference_time = current_time; //User input variable

if (whitelisted_accounts) {
    let eligible_asset_holders = whitelisted_accounts //whitelist input by user
} else if (blacklisted_accounts) {
    let eligible_asset_holders = asset_holder_list - blacklisted_account_list //blacklist input by user
} else {
    let eligible_asset_holders = asset_holder_list //include all asset holders.
}

for each asset_holder in eligible_asset_holders  {
    for each tx in asset_holdings {
        let tx_balance = current_tx_balance //Get the quantity of coins present in this transaction
        let time_diff = current_date - tx_inbound_date //Get the age of the transaction

        if (time_diff > time_period) {
            accumulated_coin_age += tx_balance //Prevent coins being worth more if held longer than time_period. Increase time_period to provide this functionality.
        } else {
            accumulated_coin_age += ((time_diff/time_period)*tx_balance)
        }
    }
    //Store current asset_holder & accumulated_coin_age in [hashmap|storage] for later referencing
}
  • Coin-Age based individual-user dividend calculation:
if (whitelisted_accounts) {
    let total_eligible_token_supply = assets_held_by_whitelisted_accounts
} else if (blacklisted_accounts) {
    let total_eligible_token_supply = total_supply - assets_held_by_blacklisted_accounts
} else {
    let total_eligible_token_supply = total_supply
}

let total_distributable_tokens = 1000 OPEN.GRC; //quantity & token type set by user

for each asset_holder in coin_age_hashmap {
    dividend_allocation = (accumulated_coin_age/total_eligible_token_supply)*total_distributable_tokens
} 

Discussion

How does coin-age prevent abuse of BSIPs 19 & 20?

  • If we were to perform a scheduled dividend based on a static snapshot of immediate account holdings, users could purchase the asset immediately prior to the scheduled dividend, receive the dividend then sell immediately afterwards, potentially causing market instability/fluctuations around the scheduled dividend.
  • We have experienced this form of market instability in the past for protoshares (around past sharedrops) and for BTSX for dns/vote.

Potential alternatives to 'coin-age' for preventing abuse of a dividend system

  • Random snapshot date within sharedrop time period (similar to peerplay's secret snapshot date within possible snapshot range).
    • Downsides: Assets held outwith the moment of snapshot within the snapshot time period are not eligible for receiving dividends.
  • Increasing market fees on the days surrounding the scheduled sharedrop? If an UIA has an additionally enabled fee market, a premium fee could be enabled potentially encouraging users to buy the assets earlier in the month & providing longer term asset holders additional profit? Would ony be possible for UIA, not MPA.
  • Disabling of market trading in the days surrounding the dividend payment? This would be incresibly heavy handed & potentially scare asset holders, especially if the asset price fluctuaed on external exchanges.
  • Entirely disregard any concerns of dividend system abuse? Openledger currently performs regular sharedrops onto Obits holders without taking coin-age into account!

Summary for Shareholders

  • No impact on shareholders, this would simply enable an additional queryable statistic within the Bitshares network for additional functionality proposed in BSIPs 19 and 20 to take advantage of.
  • No worker proposal nor bounty proposed yet, simply brainstorming documentation within the community!
  • Will be discussed/mentioned in a future BeyondBitcoin hangout.

Copyright

N/A - Consider this BSIP entirely open-source/MIT-licensed, I am not the originator of the concept of 'coin-age' (several proof-of-stake cryptocurrencies make use of coin-age for finding stakable coins).

See Also

Sort:  

Excellent work, will vote for it. Cheers!

I believe there is some type of coin age value displayed in the BitShares wallet under the vesting panel, or possibly I'm thinking of the witness "withdraw vesting" panel. I've seen something in the wallet GUI I'm sure of it. It may need further development / exposure in the API + docs tho to be useful. This is an unfinished aspect of the API / backend I would support completing, especially since it will augment BSIPs 19 & 20.

Soooooooo glad to see your enthusiasm and thoughtful work on these BSIPs cm! Great job!

Thanks for the input, I'm going to keep writing up BSIPs on ideas that I think could benefit the Bitshares network.

There are a few interesting ideas for BSIPs which were never completed by dan which I think i'll try expanding next.

Also after having written 20 and 21, I've realized that 19/20 might not be properly following the BSIP formatting guide perfectly (formatting changes, moving text about).

Looks like you're right, coin age is shown in this view. It would still be required for the BSIPs 19 & 20 on a larger scale though.

I don't understand why coin age should be an issue. There is no such thing in the stock market. If you hold on the ex-date, you are eligible to the dividend.

There are usually fluctuations before and after ex-dates, but not more than the value of the dividend.

So I see no point in this. It is normal market behavior and to be expected.

I believe that you should be rewarded a dividend based on the fees collected from the market on the days in which you held your market pegged asset (such as bitUSD) for. If you can just earn the full month's dividend for holding bitUSD at the moment of the scheduled dividend, then there wouldn't be an incentive to hold your FIAT savings long term on the BTS DEX (the primary point of dividends for MPA, encouraging more BTS to be locked up as MPA collateral).

UIA would have the option of whether or not they wanted to enable coin-age in their dividend distribution, OBITS for example doesn't take coin-age into account when they perform a dividend.

I get your point. Incentivizing is fine. But don't let it get in the way for actually paying dividend. It is not common practice in stocks that is the asset class I know best. The way I view this proposal is another delay, which I would be plain, downright boring.

great post keep at it buddy. Sitting on a few bitshares:P

Informative post keep sharing man that's very usefull me newbie thanks for sharing 😊👍👍👍✌

Seems like a very reasonable idea. You got my vote.