diff --git a/api.py b/api.py index 6e640dd..c720ba9 100644 --- a/api.py +++ b/api.py @@ -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) diff --git a/trades.py b/trades.py index 1f3d5a9..d83c731 100644 --- a/trades.py +++ b/trades.py @@ -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]) diff --git a/xcat.py b/xcat.py index de9cc5f..b06e3cd 100644 --- a/xcat.py +++ b/xcat.py @@ -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) diff --git a/zXcat.py b/zXcat.py index 728dc1d..99206f3 100644 --- a/zXcat.py +++ b/zXcat.py @@ -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