zbxcat/xcat/db.py

81 lines
2.1 KiB
Python

import plyvel
from xcat.utils import *
import binascii
import sys
import json
import ast
from xcat.trades import *
import xcat.bitcoinRPC as bitcoinRPC
db = plyvel.DB('/tmp/xcatDB', create_if_missing=True)
preimageDB = plyvel.DB('/tmp/preimageDB', create_if_missing=True)
# Takes dict or obj, saves json str as bytes
def create(trade, tradeid):
if type(trade) == dict:
trade = json.dumps(trade)
else:
trade = trade.toJSON()
db.put(b(tradeid), b(trade))
# Uses the funding txid as the key to save trade
def createByFundtx(trade):
trade = trade.toJSON()
# # Save trade by initiating txid
jt = json.loads(trade)
txid = jt['sell']['fund_tx']
db.put(b(txid), b(trade))
def get(tradeid):
rawtrade = db.get(b(tradeid))
tradestr = str(rawtrade, 'utf-8')
trade = instantiate(tradestr)
return trade
def instantiate(trade):
if type(trade) == str:
tradestr = json.loads(trade)
trade = Trade(buy=Contract(tradestr['buy']), sell=Contract(tradestr['sell']), commitment=tradestr['commitment'])
return trade
#############################################
###### Preimages stored by tradeid ##########
#############################################
# Stores secret locally in key/value store by tradeid
def save_secret(tradeid, secret):
res = preimageDB.put(b(tradeid), b(secret))
def get_secret(tradeid):
secret = preimageDB.get(b(tradeid))
secret = str(secret, 'utf-8')
return secret
# db.delete(b'hello')
# testtrade = get('test')
# testtrade = instantiate(testtrade)
# print(testtrade)
# addr = bitcoinRPC.new_bitcoin_addr()
# print(str(addr))
# print(b('thing'))
# hexstr = get(txid)
# print(x2s(hexstr))
def print_entries():
it = db.iterator()
with db.iterator() as it:
for k, v in it:
j = json.loads(x2s(b2x(v)))
print("Key:", k)
print('val: ', j)
# print('sell: ', j['sell'])
# print_entries()
# txid = '1171aeda64eff388b3568fa4675d0ca78852911109bbe42e0ef11ad6bf1b159e'
# entry = db.get(b(txid))
# print(entry)
# print(it.next())