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:
- Retrieve list of accounts holding chosen asset
- Given this list, query the account's current asset holdings (for chosen asset), returning the list of transactions that make up holdings.
- 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).