This commit is contained in:
Ariel Gabizon 2017-07-26 22:24:08 +02:00
parent 6ca26f821c
commit 2753b3385f
4 changed files with 42 additions and 12 deletions

19
api.py
View File

@ -113,16 +113,19 @@ def seller_redeem():
(buy,sell) = init_redeem_p2sh(trade.buyContract, trade.sellContract)
# in case we're still in the time lock on buy side, try to redeem with secret
if(buy.redeemtype != ""):
if(buy.redeemtype == 'secret'):
privkey = get_redeemer_priv_key(buy)
buy = get_raw_redeem(buy)
r
buy = get_raw_redeem(buy,privkey) #puts the raw transaction in the raw_redeem field
buy.redeem_tx = send_raw_tx(buy.rawredeem)
if(sell.redeemtype != ""):
privkey = get_redeemer_priv_key(sell)
sell = get_raw_redeem(sell)
contract = check trade(trade.buyContract, secret, trade.sellContract)
setattr(trade.buyContract, 'redeem_tx', txid)
if(sell.redeemtype == 'timelock'):
privkey = get_redeemer_priv_key(sell)
sell = get_raw_redeem(sell,privkey)
sell.redeem_tx = send_raw_tx(sell.rawredeem)
trade.buyContract = buy
trade.sellContract = sell
save_seller(trade)

View File

@ -7,7 +7,7 @@ class Trade(object):
class Contract(object):
def __init__(self, data):
# Keep track of funding and redeem tx?
allowed = ('funder', 'redeemer', 'currency', 'p2sh', 'amount', 'fund_tx', 'redeem_tx', 'secret', 'redeemscript', 'redeemblocknum','hash_of_secret','redeemtype')
allowed = ('funder', 'redeemer', 'currency', 'p2sh', 'amount', 'fund_tx', 'redeem_tx', 'secret', 'redeemscript', 'redeemblocknum','hash_of_secret','redeemtype', 'rawredeem')
for key in data:
if key in allowed:
setattr(self, key, data[key])

29
xcat.py
View File

@ -9,6 +9,33 @@ from pprint import pprint
from trades import Contract, Trade
import userInput
def get_redeemer_priv_key(contract):
if contract.currency == 'bitcoin':
return bXcat.get_redeemer_priv_key(contract)
elif contract.currency = 'zcash':
return zXcat.get_redeemer_priv_key(contract)
else:
raise ValueError("invalid currency value:", contract.currency)
def get_raw_redeem(contract, privkey)
if contract.currency == 'bitcoin':
return bXcat.get_raw_redeem(contract, privkey)
elif contract.currency = 'zcash':
return zXcat.get_raw_redeem(contract, privkey)
else:
raise ValueError("invalid currency value:", contract.currency)
def send_raw_tx(rawtx)
if contract.currency == 'bitcoin':
return bXcat.send_raw_tx(rawtx)
elif contract.currency = 'zcash':
return zXcat.send_raw_tx(rawtx)
else:
raise ValueError("invalid currency value:", contract.currency)
#compute redeemblocknum according to current block
def compute_redeemblocknum(currency, increment):
if currency == 'bitcoin':
@ -105,7 +132,7 @@ def init_redeem_p2sh(contract, revertcontract):
if (currency == 'bitcoin'):
contract = bXcat.check_and_return_fundtx(contract)
contract.redeemtype = "secret"
contract.redeemtype = 'secret'
if (currency == 'zcash'):
contract = zXcat.check_and_return_fundtx(contract)

View File

@ -370,7 +370,7 @@ def redeem_after_timelock(contract):
def get_redeemer_priv_key(contract):
if (contract.redeemtype == 'secret'):
redeemPubKey = find_redeemAddr(contract)
elif (contract.redeemtype = 'timelock'):
elif (contract.redeemtype == 'timelock'):
redeemPubKey = find_refundAddr(contract)
else:
raise ValueError("Invalid redeemtype:", contract.redeemtype)
@ -392,7 +392,7 @@ def check_and_return_fundtx(contract):
amount = fundtx['amount'] / COIN
if(amount < minamount):
raise ValueError("Insufficient funds in fund transaction")
raise ValueError("Insufficient funds in fund transaction.")
contract.fund_tx = fund_tx