В то же время, я наткнулся на копию оригинального coinbaser, прежде чем он получил так грязно. Это было от того, когда были Элигии пропорциональный бассейн, так что я не уверен, насколько это полезно, но я подумал, что было бы хорошо, чтобы опубликовать его в любом случае ...
Код:
#! / USR / бен / питон
# - * - кодирование: UTF-8 - * -
импорт jsonrpc
импорт sqlite3
Доступ = jsonrpc.ServiceProxy ( 'HTTP: // bitcoinrpc: password@127.0.0.1: 8332')
GS = access.listtransactions ( '*', 5)
гс = фильтр (лямбда-TXN: TXN [ 'категория'] в ( 'незрелый', 'порождают'), гс)
GS = гс [-2]:
доступно = 50e8
Распределение = {}
Защита распределить (адрес, количество):
глобального доступны, распределение
если сумма < 1:
вернуть
доступно - = сумма
если адр в распределении:
= сумма + распределение [адр]
Распределение [адр] = сумма
# Убедитесь, что есть какие-то остатки, так что он показывает на listtransactions следующий раз;)
доступны - = 1
# Плата за управление бассейн: 1 базовый блок для каждого второго: P
распределяющие ( '1CT1Wbu5kkQArCkWjHnzKyx6YaPCiFTJdB', гс [1] [ 'время'] - гс [0] [ 'время'])
SQL = sqlite3.connect ( '/ дом / bitcoinpool / бассейн / data.sqlite')
sqlc = sql.cursor ()
sqlc.execute ( "SELECT COUNT (имя пользователя), имя пользователя из акций, где время > ?», (Гс [1] [ 'время'],))
акций = sqlc.fetchall ()
sqlc.close ()
дель sqlc
sql.close ()
дель SQL
total_available = доступно
total_shares = сумма (карта (лямбда доля: доля [0], акции))
для share_count, share_addr в акции:
если не access.validateaddress (share_addr) [ 'IsValid']:
Продолжать
сумма = total_available * share_count // total_shares
распространять (share_addr, сумма)
печать (Len (распределение))
для адреса, суммы в distribution.iteritems ():
печать (сумма)
печать (адрес)