Ejemplo n.º 1
0
import pandas as pd
import numpy as np
import datetime as date
today = date.datetime.now().strftime('%Y-%m-%d')

#Internal Modules
from checkonchain.btconchain.btc_add_metrics import *

# Plotly Libraries (+ force browser charts)
import plotly.graph_objects as go
from plotly.subplots import make_subplots
import plotly.io as pio
pio.renderers.default = "browser"


BTC = btc_add_metrics().btc_oscillators()

asset = BTC
blk_max = int(asset['blk'][asset.index[-1]])

# Create Input Dataset for TOP PLOT
x_data_1 = [
    asset['blk'],asset['blk'],asset['blk'],
    asset['blk'],asset['blk'],asset['blk'],
    asset['blk'],asset['blk'],asset['blk'],
    asset['blk']
    ]

y_data_1 = [
    asset['PriceUSD'],asset['PriceRealised'],asset['PriceAvg'],
    asset['PriceDelta'],asset['PriceTop'],asset['PriceInflow'],
import datetime as date
today = date.datetime.now().strftime('%Y-%m-%d')

from plotly.subplots import make_subplots
import plotly.graph_objects as go
import plotly.io as pio
pio.renderers.default = "browser"

from checkonchain.general.coinmetrics_api import *
from checkonchain.btconchain.btc_add_metrics import *
from checkonchain.dcronchain.dcr_add_metrics import *

from checkonchain.general.regression_analysis import *

#Pull Coinmetrics Data for Coins
BTC = btc_add_metrics().btc_coin()
LTC = Coinmetrics_api('ltc', "2011-10-07", today).convert_to_pd()
BCH = Coinmetrics_api('bch', "2017-08-01", today).convert_to_pd()
DAS = Coinmetrics_api('dash', "2014-01-19", today).convert_to_pd()
DCR = dcr_add_metrics().dcr_coin()
XMR = Coinmetrics_api('xmr', "2014-04-18", today).convert_to_pd()
ZEC = Coinmetrics_api('zec', "2016-10-28", today).convert_to_pd()
ETH = Coinmetrics_api('eth', "2015-07-30", today).convert_to_pd()
XRP = Coinmetrics_api('xrp', "2013-01-01", today).convert_to_pd()

#Reduce dataset down to date and a single metric
metric = "CapMrktCurUSD"
BTC2 = BTC[['date', metric]]
LTC2 = LTC[['date', metric]]
BCH2 = BCH[['date', metric]]
DAS2 = DAS[['date', metric]]
Ejemplo n.º 3
0
# Plotly Libraries (+ force browser charts)
import plotly.graph_objects as go
from plotly.subplots import make_subplots
import plotly.io as pio
pio.renderers.default = "browser"

from checkonchain.btconchain.btc_add_metrics import *

#Set Constants
blk_max = 210000 * 6  #max block height to calculate up to
dustlim = 172  #sats
sats = 1e8  #sats per BTC

#Pull Coinmetrics data
BTC_coin = btc_add_metrics().btc_coin()
BTC_coin = BTC_coin.loc[:, [
    'date', 'blk', 'PriceUSD', 'PriceRealised', 'SplyCur', 'BlkCnt',
    'BlkSizeByte', 'BlkSizeMeanByte	', 'FeeMeanNtv', 'FeeMeanUSD', 'FeeMedNtv',
    'FeeMedUSD', 'FeeTotNtv', 'FeeTotUSD', 'TxCnt', 'TxTfr'
]]

#Calculate Actual Fee performance
BTC_coin['DustPrice'] = dustlim / sats * BTC_coin['PriceUSD']
BTC_coin['FeeSatsMean'] = BTC_coin['FeeMeanUSD'] / BTC_coin['PriceUSD']
BTC_coin['FeeSatsMed'] = BTC_coin['FeeMedUSD'] / BTC_coin['PriceUSD']
BTC_coin['TxCntSizeByte'] = BTC_coin['BlkSizeByte'] / BTC_coin['TxCnt']
BTC_coin['TxTfrSizeByte'] = BTC_coin['BlkSizeByte'] / BTC_coin['TxTfr']
BTC_coin['DustSizeByte'] = dustlim
BTC_coin['DustSizeByte'] = dustlim
BTC_coin['FeeTxCnt'] = BTC_coin['TxCntSizeByte'] / sats * BTC_coin['PriceUSD']
Ejemplo n.º 4
0
import numpy as np
import os
os.getcwd()
os.chdir('D:\code_development\checkonchain\checkonchain')

from checkonchain.dcronchain.charts.__init__ import *
from checkonchain.btconchain.btc_add_metrics import *
from checkonchain.dcronchain.dcr_add_metrics import *
from checkonchain.ltconchain.ltc_add_metrics import *
"""**************************************************************************
                            Part 0 - Code Setup
***************************************************************************"""
"""############## PULL DATSETS ##############"""
"""##### Bitcoin #####"""
print('CALCULATING BITCOIN DATAFRAMES')
BTC_sply = btc_add_metrics().btc_sply_curtailed(
    2400000)  #Theoretical Supply curve
BTC_real = btc_add_metrics().btc_real()  #Actual Performance
BTC_half = btc_supply_schedule(0).btc_halvings_stepped(
)  # Calculate Max-Min step to plot up Bitcoin halvings
# Blockchain.com hashrate w/ coinmetrics block (UPDATE 5 Oct 2019)
# Note need to add coinmetrics block manually
BTC_hash = btc_add_metrics().btc_hash()  #Actual Performance
#BTC_hash = pd.read_csv(r"btconchain\data\btc_blockchaincom_hashrate.csv")
#BTC_hash
#BTC_hash = pd.concat([BTC_hash.set_index('blk',drop=False),BTC_real[['blk','date']].set_index('blk',drop=True)],axis=1,join='inner')
#BTC_hash = BTC_hash.drop(BTC_hash.index[0])
#BTC_hash.reset_index(drop=True)
"""##### Decred #####"""
print('CALCULATING DECRED DATAFRAMES')
DCR_sply = dcr_add_metrics().dcr_sply(2400000 * 2 -
                                      33600 * 2)  #Theoretical Supply curve
Ejemplo n.º 5
0
import numpy as np
import math


from checkonchain.btconchain.btc_add_metrics import *
from checkonchain.dcronchain.dcr_add_metrics import *
from checkonchain.ltconchain.ltc_add_metrics import *
from checkonchain.general.regression_analysis import *

#Plotly Libraries
from plotly.subplots import make_subplots
import plotly.graph_objects as go
import plotly.io as pio
pio.renderers.default = "browser"

BTC_sply = btc_add_metrics().btc_sply(1200000) #Theoretical Supply curve
BTC_real = btc_add_metrics().btc_pricing_models() #Actual Performance
BTC_half = btc_supply_schedule(0).btc_halvings_stepped()

DCR_sply = dcr_add_metrics().dcr_sply(1200000*2-33600*2) #Theoretical Supply curve
DCR_real = dcr_add_metrics().dcr_pricing_models() #Actual Market Performance
DCR_natv = dcr_add_metrics().dcr_natv() #Actual On-chain Performance
dcr_btc_blk_start = int(BTC_sply[BTC_sply['Sply_ideal']==1680000]['blk'])
DCR_sply['btc_blk'] = dcr_btc_blk_start + 0.5*DCR_sply['blk']
DCR_real['btc_blk'] = dcr_btc_blk_start + 0.5*DCR_real['blk']

LTC_sply = ltc_add_metrics().ltc_sply(1200000*2) #Theoretical Supply curve
LTC_real = ltc_add_metrics().ltc_real() #Actual Performance


import os
Ejemplo n.º 6
0
#Calculate the dust limit and estimate future value
from checkonchain.btconchain.btc_add_metrics import *
from checkonchain.general.standard_charts import *
from checkonchain.general.regression_analysis import *

#Set Constants
blk_max = 210000 * 6  #max block height to calculate up to
dustlim_min = 172  #bytes
dustlim_avg = 222  #bytes (based on actual performance)
max_fee = 0.01  #Assume 1% of transaction cost is max viable fee
sats = 1e8  #sats per BTC

#Pull Coinmetrics data
BTC_coin = btc_add_metrics().btc_coin()
blk_cur = BTC_coin['blk'].max()  #Current block
BTC_coin = BTC_coin.loc[:, [
    'date', 'blk', 'CapMrktCurUSD', 'PriceUSD', 'PriceRealised', 'SplyCur',
    'BlkCnt', 'BlkSizeByte', 'BlkSizeMeanByte', 'FeeMeanNtv', 'FeeMeanUSD',
    'FeeMedNtv', 'FeeMedUSD', 'FeeTotNtv', 'FeeTotUSD', 'TxCnt', 'TxTfrCnt'
]]

#Add in segwit_adoption from blockchair csv
BTC_segwit = pd.read_csv(
    r'D:\code_development\checkonchain\checkonchain\btconchain\data\blockchair\segwit_adption.csv'
)
BTC_segwit.columns = ['date', 'segwit']
BTC_segwit['date'] = pd.to_datetime(BTC_segwit['date'], utc=True)
BTC_coin = pd.merge(BTC_coin, BTC_segwit, on='date', how='left')
#BTC_coin['segwit'].fillna(0,inplace=True)

#USD cost of a dust transaction
Ejemplo n.º 7
0
2. Cummulative sum --> assuming marginal reward = marginal cost
    PoW = Cummulative Sum (100% for BTC and 60% for DCR)
    PoS = Cummulative Sum (30% for DCR)
3. For Decred, there is a balance between PoS and PoW as described 
in Stafford (2019)
    Assume an attacker portion of ticket stake owned 
        P_y = (1%, 5%, 30%, 50% and 95%)
    Probability of honest tickets having 3/5 votes
        sig_y = 1 - P_y
    Proportion of Hashrate attacker needs
        x_y = (1 / P_y) - 1
4. Decred cost to attack = P_y(PoS) + x_y(PoW)
"""

#Compile Input Dataframes
BTC_subs = btc_add_metrics().btc_subsidy_models()
DCR_subs = dcr_add_metrics().dcr_ticket_models()
BTC_fee = btc_add_metrics().btc_coin()

#Calculate Unforgeable Costliness (cummulative Sum)
BTC_subs['Unforg_Cost'] = BTC_subs['PoW_income_usd'].cumsum()
DCR_subs['PoW_Cost'] = DCR_subs['PoW_income_usd'].cumsum()
DCR_subs['PoS_Cost'] = DCR_subs['PoS_income_usd'].cumsum()

#Calculate Unforgeable Costliness (cummulative Sum)
BTC_subs['Unforg_Cost_Daily'] = BTC_subs['PoW_income_usd']
DCR_subs['PoW_Cost_Daily'] = DCR_subs['PoW_income_usd']
DCR_subs['PoS_Cost_Daily'] = DCR_subs['PoS_income_usd']

#Calculate Range of Decred Security Conditions
for y in range(5, 105, 5):  #Assume range of Attacker ticket stake ownership
Ejemplo n.º 8
0
    df['tic_pool'] = DCR_real['tic_pool']
    df['tic_price'] = DCR_real['tic_price']
    df = dcr_security_calculate_df().calculate_df(asset, atk_blk, df)
    if count == 0:
        response = df
        df = pd.DataFrame(
            columns=['blk', 'y', 'H_net', 'price', 'tic_price', 'tic_pool'])
    else:
        response = response.append(df, ignore_index=True)
        df = pd.DataFrame(
            columns=['blk', 'y', 'H_net', 'price', 'tic_price', 'tic_pool'])
    count += 1
DCR_secure = response
"""BITCOIN"""
#Extract Real Data
BTC_real = btc_add_metrics().btc_real()

asset = 'btc'
df['blk'] = BTC_real['blk']
df['y'] = 0.0
df['H_net'] = BTC_real['pow_hashrate_THs']
df['price'] = BTC_real['PriceUSD']
df['tic_pool'] = 0
df['tic_price'] = 0
df = dcr_security_calculate_df().calculate_df(asset, atk_blk, df)

#plt.plot('y','pow_prof',data=df)
#plt.show()

plt.plot('blk', 'pow_term', data=df)
plt.plot('blk', 'pos_term', data=df)