"""
DONATION 16RdQZ86NUWQbE6rM86JbxnnaCDcAKqa9
AUTHOR http://steal1982.altervista.org/hashnest.php

"""

####PACMIC PROFIT CALCULATOR####



#####EDIT THIS VALUES#########

#number of BTC/CONTRACTS/UNPAID BALANCE
principal=1

#AutoReBuy option values True/False
autobuy=True
#autobuy=False

#how many days AutoReBuy will be active 0=Entire Contract Duration(infinite)
autobuy_days=0

#difficulty increase https://bitcoinwisdom.com/bitcoin/difficulty
diff_increase=1.02

#################################################


sat=1*10**-8
yeld=0.45*sat
ghs=1000*principal

balance=0
profit=0 
blocks=0


"""
code to get btc per block
"""
import urllib2
import math
import json

def get_btc_block(difficulty,ghs):
 #assuming 100% luck antpool will find 144block daily
 return (25/((difficulty*49710.2696)/((ghs*10**9))))/6/24

def openjsonurl(url):
 res = urllib2.urlopen(url)
 r=res.read()
 return json.loads(r)

def get_diff():
  data=openjsonurl('http://btc.blockr.io/api/v1/coin/info')['data']
  return float(data['last_block']['difficulty'])
##########################################################################

difficulty=get_diff()
btc_block=get_btc_block(difficulty,ghs)
start=principal  #principal become unpaid balance (sorry)

#while principal>=0:
for i in range(0,10):
 blocks+=1
 #difficulty retarget each 2600 blocks
 if blocks %2600==0:
  difficulty*=diff_increase #constant 
  #calculate new amount of btc per block
  btc_block=get_btc_block(difficulty,ghs) 
 

 """
 FROM HASHNEST DOC https://www.hashnest.com/contracts/new?contract_id=2
  Profit Calculation Method

  Unpaid principal (BTC) * 0.45 (satoshis per BTC per second) * time to find a block (seconds)

  For every block found, the remaining payout after the profit is paid will count towards the principal payment. After each principal payment is made, the amount is subtracted from the amount of remaining principal.

  Please note: information on blocks found will only be transfered to Hashnest.com from AntPool after receiving six network confirmations. Because of this, profit and principal payments will be on a slight delay from the network.


 """
 #temp var to store profit reward  
 t=principal*yeld*10*60
 #store to cumulative profit(it is only for stats purposes as principal and balance are really important for the workflow)
 profit+=t
 #temp var to store principal reward
 p=(btc_block-t)
 #I will subtract principal reward from unpaid principal
 principal -=p
 #total balance paid to my wallet
 balance+= btc_block
 #days gone block found/144 assuming luck 100%
 days=blocks/6/24

 print blocks,days,balance,principal,profit,ghs,btc_block,t,p

 #if autobuy is enabled
 if autobuy:
  #rebuy= number of ghs... I can see from screenshots that hashnest also sell fractions of ghs in autorebuy contracts so no round
  # 1BTC=1THS  -> 0.001BTC=1GHS
  rebuy=balance/0.001
  #I HOPE THAT THAT'S FUNDAMENTAL. WHEN I PERFORM AUTOREBUY AUTOREBUY AMOUNT GO TO UNPAID PRINCIPAL
  principal+=balance
  #IM WASTING EVERYTHING IN AUTOREBUY SO BALANCE BECOME 0
  balance=0
  print "buy:",rebuy
  #INCREASE GHS AMOUNT
  ghs=ghs+rebuy
  #CALCULATE NEW AMOUNT OF BTC PER BLOCK AFTER REBUY
  btc_block=get_btc_block(difficulty,ghs)

  #EXIT FROM AUTOBUY AFTER autobuy_days DAYS
  if autobuy_days>0 and blocks>autobuy_days*144:
   autobuy=False 

#THAT'S ONLY FOR STATS PURPOSE
profit=balance-start
print blocks,days,balance,principal,profit,profit/days,365/days*profit*100
print "Blocks:",blocks
print "Days:",days
print "Profit:",profit
print "Average Daily Profit:",profit/days
print "APR:",365/days*profit*100

