TL;DR: I don't know, but I'm going to start collecting data
Almost three weeks ago (wow), I wrote the article Let's talk about the Steem Proposal System (SPS). In that article, I speculated that a high-value SPS could become an attractive takeover target for a well-funded investor or investment group. Since that time, the concept has intrigued me, so I thought I'd slap together a script to see how the attractiveness changes over time.
This morning, I put together such a script, and I'll be scheduling it to run daily. The fundamental assumption is that someone could gain a controlling interest in the SPS by acquiring 25% of all STEEM in circulation (controlPercent=0.25
).
It's clear that these numbers have no real meaning on any single day, since activity at this scale would change prices throughout the ecosystem, but I still think the numbers might be interesting as a day to day/week to week comparison tool.
i.e. is the SPS a more or less attractive takeover target today than it was yesterday? |
So, here is this morning's baseline:
External STEEM Price: 0.175096
External SBD Price: 2.34
SPS balance: 4540220.996
STEEM supply: 465935008.087
SBD supply: 13488263.480
STEEM median quote: 465932484.389
SBD median base: 121393710.117
Conversion price: 0.260539
HairCut ratio: 0.672053
Steem Market cap: 8.15834e+07
Controlling percentage: 0.25
Cost of control: 20395850
dao Conversion Value: 3.05127e+06
dao Nominal Value: 4540220.996
dao External Value: 1.06241e+07
Haircut price C/B: 6.68438
Nominal price C/B: 4.49226
External price C/B: 1.91977
The last three lines are the ones of particular interest. In short, it would cost about $20 million to gain a controlling interest in the 4 1/2 million SBDs in the SPS wallet. At the haircut price of $0.67, this hypothetical cost/benefit ratio (CBR) is roughly 62/3:1; At the nominal price of $1, the CBR is 4 1/2:1; and at the external price of $2.34 the CBR is just about 2:1.
As time goes on, higher CBRs would be less attractive, and lower CBRs would be more attractive.
It's an interesting concept to me, because:
Here's the script:
#!/bin/bash
### "Global" parameters
controlPercent=0.25
priceFile=/tmp/priceData.json
outFile=${HOME}/data/spsCostBenefit.csv
oneDaySeconds=86400
apiEndPoint=https://api.moecki.online
saveIt=${1:-"nope"}
if [ -f ${priceFile} ]
then
now=$( date +%s )
fileDate=$( stat -c %Y ${priceFile} )
priceAge=$(( ( ${now} - ${fileDate} ) / ${oneDaySeconds} ))
else
priceAge=-1
fi
if [ ${priceAge} -lt 0 -o ${priceAge} -gt ${oneDaySeconds} ]
then
echo "Getting price from Internet"
PRICE_DATA=$(curl -s 'https://api.coingecko.com/api/v3/simple/price?ids=steem,steem-dollars&vs_currencies=usd&include_market_cap=false')
if [[ $? -eq 0 ]]; then
echo ${PRICE_DATA} >${priceFile}
else
echo "Error fetching STEEM price data"
if [ -f ${priceFile} ]
then
PRICE_DATA=$(cat ${priceFile} )
else
echo "Could not get prices from Internet or file system."
exit 1
fi
fi
else
PRICE_DATA=$(cat ${priceFile})
fi
steemPrice=$(jq -Sc '."steem".usd' ${priceFile})
if [[ $? -ne 0 ]]; then
echo "Error parsing STEEM price data"
exit 1
fi
sbdPrice=$(jq -Sc '."steem-dollars".usd' ${priceFile})
if [[ $? -ne 0 ]]; then
echo "Error parsing SBD price data"
exit 1
fi
spsBalance=$(curl -s --data '{"jsonrpc":"2.0", "method":"condenser_api.get_accounts", "params":[["steem.dao"]], "id":1}' ${apiEndPoint} | jq -Sr '.result[].sbd_balance | sub(" SBD$"; "")')
supplyInfo=$(curl -s --data '{"jsonrpc":"2.0", "method":"condenser_api.get_dynamic_global_properties", "params":[], "id":1}' ${apiEndPoint})
currentSteemSupply=$( echo ${supplyInfo} | jq -r '.result | .current_supply | sub (" STEEM$"; "")')
currentSbdSupply=$( echo ${supplyInfo} | jq -r '.result | .current_sbd_supply | sub (" SBD$"; "")')
medianInfo=$(curl -s --data '{"jsonrpc":"2.0", "method":"condenser_api.get_current_median_history_price", "params":[], "id":1}' ${apiEndPoint})
medianSbdQuote=$( echo ${medianInfo} | jq -r '.result | .quote | sub (" STEEM$"; "")')
medianSbdBase=$( echo ${medianInfo} | jq -r '.result | .base | sub (" SBD$"; "")')
conversionPrice=$( echo ${medianSbdQuote} ${medianSbdBase} | awk '{print $2 / $1}' )
haircutRatio=$(echo ${steemPrice} ${conversionPrice} | awk '{print $1 / $2}')
int100HaircutRatio=$( echo ${haircutRatio} | awk '{printf "%d", $1 * 100}' )
if [ "${int100HaircutRatio}" -gt 100 ]
then
conversionPrice=1
fi
marketCap=$( echo ${steemPrice} ${currentSteemSupply} | awk '{print $1 * $2}' )
controlValue=$( echo ${marketCap} ${controlPercent} | awk '{print $1 * $2}')
daoConversionValue=$( echo ${spsBalance} ${steemPrice} ${conversionPrice} | awk '{print $1 * ($2 / $3)}' )
daoExternalValue=$( echo ${spsBalance} ${sbdPrice} | awk '{print $1 * $2}' )
conversionCostBenefit=$( echo ${controlValue} ${daoConversionValue} | awk '{print $1 / $2}' )
nominalCostBenefit=$( echo ${controlValue} ${spsBalance} | awk '{print $1 / $2}' )
externalCostBenefit=$( echo ${controlValue} ${daoExternalValue} | awk '{print $1 / $2}' )
echo "External STEEM Price: ${steemPrice}"
echo "External SBD Price: ${sbdPrice}"
echo "SPS balance: ${spsBalance}"
echo "STEEM supply: ${currentSteemSupply}"
echo "SBD supply: ${currentSbdSupply}"
echo "STEEM median quote: ${medianSbdQuote}"
echo "SBD median base: ${medianSbdBase}"
echo "Conversion price: ${conversionPrice}"
echo "HairCut ratio: ${haircutRatio}"
echo "Steem Market cap: ${marketCap}"
echo "Controlling percentage: ${controlPercent}"
echo "Cost of control: ${controlValue}"
echo "dao Conversion Value: ${daoConversionValue}"
echo "dao Nominal Value: ${spsBalance}"
echo "dao External Value: ${daoExternalValue}"
echo "Haircut price C/B: ${conversionCostBenefit}"
echo "Nominal price C/B: ${nominalCostBenefit}"
echo "External price C/B: ${externalCostBenefit}"
if [ ${saveIt} == "save" ]
then
if [ -f "${outFile}" ]; then
echo "${steemPrice},${sbdPrice},${spsBalance},${currentSteemSupply},${currentSbdSupply},${medianSbdQuote},${medianSbdBase},${conversionPrice},${haircutRatio},${marketCap},${controlPercent},${controlValue},${daoConversionValue},${spsBalance},${daoExternalValue},${conversionCostBenefit},${nominalCostBenefit},${externalCostBenefit}" >> "$outFile"
else
echo "External STEEM Price,External SBD Price,SPS balance,STEEM supply,SBD supply,STEEM median quote,SBD median base,Conversion price,HairCut ratio,Steem Market cap,Controlling percentage,Cost of control,dao Conversion Value,dao Nominal Value,dao External Value,Haircut price C/B,Nominal price C/B,External price C/B" > "$outFile"
echo "${steemPrice},${sbdPrice},${spsBalance},${currentSteemSupply},${currentSbdSupply},${medianSbdQuote},${medianSbdBase},${conversionPrice},${haircutRatio},${marketCap},${controlPercent},${controlValue},${daoConversionValue},${spsBalance},${daoExternalValue},${conversionCostBenefit},${nominalCostBenefit},${externalCostBenefit}" >> "$outFile"
fi
fi
The data doesn't have to be perfectly fresh, so I really should have done the same sort of error checking and saving info locally for the Steem API calls that I did for coingecko, but it was taking too long for a one-morning project. 😉 Maybe later.
Visit the /promoted page and #burnsteem25 to support the inflation-fighters who are helping to enable decentralized regulation of Steem token supply growth.