2017-07-03 09:48:05 -07:00
|
|
|
import plyvel
|
2017-07-24 13:23:40 -07:00
|
|
|
import json
|
2017-09-04 19:17:55 -07:00
|
|
|
import xcat.utils as utils
|
2017-09-15 13:32:48 -07:00
|
|
|
from xcat.trades import Trade
|
2017-07-03 09:48:05 -07:00
|
|
|
|
|
|
|
|
2017-09-12 22:28:36 -07:00
|
|
|
class DB():
|
2017-08-25 12:11:23 -07:00
|
|
|
|
2017-09-12 22:28:36 -07:00
|
|
|
def __init__(self):
|
|
|
|
self.db = plyvel.DB('/tmp/xcatDB', create_if_missing=True)
|
|
|
|
self.preimageDB = plyvel.DB('/tmp/preimageDB', create_if_missing=True)
|
2017-09-04 16:03:17 -07:00
|
|
|
|
2017-09-12 22:28:36 -07:00
|
|
|
#############################################
|
|
|
|
######## Trades stored by tradeid ###########
|
|
|
|
#############################################
|
2017-09-04 16:03:17 -07:00
|
|
|
|
2017-09-12 22:28:36 -07:00
|
|
|
# Takes dict or obj, saves json str as bytes
|
|
|
|
def create(self, trade, tradeid):
|
2017-09-15 12:29:07 -07:00
|
|
|
if isinstance(trade, dict):
|
|
|
|
trade = json.dumps(trade, sort_keys=True, indent=4)
|
|
|
|
elif isinstance(trade, Trade):
|
2017-09-12 22:28:36 -07:00
|
|
|
trade = trade.toJSON()
|
2017-09-15 12:29:07 -07:00
|
|
|
else:
|
|
|
|
raise ValueError('Expected dictionary or Trade object')
|
2017-09-12 22:28:36 -07:00
|
|
|
self.db.put(utils.b(tradeid), utils.b(trade))
|
2017-07-03 09:48:05 -07:00
|
|
|
|
2017-09-12 22:28:36 -07:00
|
|
|
# Uses the funding txid as the key to save trade
|
|
|
|
def createByFundtx(self, trade):
|
2017-09-15 12:29:07 -07:00
|
|
|
if isinstance(trade, dict):
|
|
|
|
txid = trade['sell']['fund_tx']
|
|
|
|
trade = json.dumps(trade, sort_keys=True, indent=4)
|
|
|
|
elif isinstance(trade, Trade):
|
|
|
|
txid = trade.sell.fund_tx
|
|
|
|
trade = trade.toJSON()
|
|
|
|
else:
|
|
|
|
raise ValueError('Expected dictionary or Trade object')
|
2017-09-12 22:28:36 -07:00
|
|
|
self.db.put(utils.b(txid), utils.b(trade))
|
|
|
|
|
|
|
|
def get(self, tradeid):
|
|
|
|
rawtrade = self.db.get(utils.b(tradeid))
|
|
|
|
tradestr = str(rawtrade, 'utf-8')
|
2017-09-15 12:29:07 -07:00
|
|
|
trade = Trade(fromJSON=tradestr)
|
2017-07-31 15:15:22 -07:00
|
|
|
return trade
|
|
|
|
|
2017-09-12 22:28:36 -07:00
|
|
|
#############################################
|
|
|
|
###### Preimages stored by tradeid ##########
|
|
|
|
#############################################
|
|
|
|
|
|
|
|
# Stores secret locally in key/value store by tradeid
|
|
|
|
def save_secret(self, tradeid, secret):
|
|
|
|
self.preimageDB.put(utils.b(tradeid), utils.b(secret))
|
|
|
|
|
|
|
|
def get_secret(self, tradeid):
|
|
|
|
secret = self.preimageDB.get(utils.b(tradeid))
|
|
|
|
secret = str(secret, 'utf-8')
|
|
|
|
return secret
|
|
|
|
|
|
|
|
#############################################
|
|
|
|
########## Dump or view db entries ##########
|
|
|
|
#############################################
|
|
|
|
|
|
|
|
def dump(self):
|
|
|
|
results = []
|
|
|
|
with self.db.iterator() as it:
|
|
|
|
for k, v in it:
|
2017-09-15 13:32:48 -07:00
|
|
|
j = json.loads(str(v, 'utf-8'))
|
2017-09-12 22:28:36 -07:00
|
|
|
results.append((str(k, 'utf-8'), j))
|
|
|
|
return results
|
|
|
|
|
|
|
|
def print_entries(self):
|
|
|
|
it = self.db.iterator()
|
|
|
|
with self.db.iterator() as it:
|
|
|
|
for k, v in it:
|
|
|
|
j = json.loads(utils.x2s(utils.b2x(v)))
|
|
|
|
print("Key:", k)
|
|
|
|
print('val: ', j)
|
|
|
|
# print('sell: ', j['sell'])
|