Add logging debug option

This commit is contained in:
Jay Graber 2017-08-29 17:17:28 -07:00
parent 1e14c0a7f4
commit 3fd724f6fc
5 changed files with 57 additions and 31 deletions

View File

@ -15,11 +15,15 @@ from bitcoin.core.scripteval import VerifyScript, SCRIPT_VERIFY_P2SH
from bitcoin.wallet import CBitcoinAddress, CBitcoinSecret, P2SHBitcoinAddress, P2PKHBitcoinAddress
from xcat.utils import *
import logging
FEE = 0.001*COIN
class bitcoinProxy():
def __init__(self, network='regtest', timeout=900):
if network is not 'testnet' and network is not 'mainnet':
network='regtest'
logging.debug("NETWORK in proxy: {0}".format(network))
self.network = network
self.timeout = timeout

View File

@ -31,7 +31,6 @@ def checkSellStatus(tradeid):
trade.buy.redeem_tx = txs['refund_tx']
print("Refund tx: ", txs['refund_tx'])
save_state(trade, tradeid)
# Remove from db? Or just from temporary file storage
cleanup(tradeid)
elif status == 'sellerFunded':
print("Buyer has not yet funded the contract where you offered to buy {0}, please wait for them to complete their part.".format(trade.buy.currency))
@ -45,6 +44,7 @@ def buyer_check_status(trade):
return 'sellerFunded' # step1
# TODO: Find funding txid. How does buyer get seller redeemed tx?
elif sellState == 'funded' and hasattr(trade.buy, 'fund_tx'):
print("Seller redeemed")
return 'sellerRedeemed' # step3
elif sellState == 'funded' and buyState == 'funded':
return 'buyerFunded' # step2
@ -173,9 +173,9 @@ def checktrade(tradeid):
def newtrade(tradeid, **kwargs):
print("Creating new XCAT trade...")
erase_trade()
tradeid, trade= initialize_trade(tradeid, conf=kwargs['conf'])
print("Trade", trade)
trade = seller_init(tradeid, trade)
tradeid, trade= initialize_trade(tradeid, conf=kwargs['conf'], network=kwargs['network'])
print("New trade created: {0}".format(trade))
trade = seller_init(tradeid, trade, network=kwargs['network'])
print("\nUse 'xcat exporttrade [tradeid]' to export the trade and sent to the buyer.\n")
save_state(trade, tradeid)
return trade
@ -199,12 +199,24 @@ def main():
'''))
parser.add_argument("command", action="store", help="list commands")
parser.add_argument("arguments", action="store", nargs="*", help="add arguments")
parser.add_argument("-d", "--debug", action="store_true", help="Enable debug mode. Defaults to false")
parser.add_argument("-w", "--wormhole", action="store_true", help="Transfer trade data through magic-wormhole")
parser.add_argument("-c", "--conf", action="store", help="Use default trade data in conf file.")
parser.add_argument("-n", "--network", action="store", help="Set network to regtest or mainnet. Defaults to testnet while in alpha.")
# parser.add_argument("--daemon", "-d", action="store_true", help="Run as daemon process")
args = parser.parse_args()
if args.debug:
numeric_level = getattr(logging, 'DEBUG', None)
logging.basicConfig(format='%(levelname)s: %(message)s', level=numeric_level)
else:
logging.basicConfig(format='%(levelname)s: %(message)s', level='INFO')
if args.network:
NETWORK = args.network
else:
NETWORK = 'testnet'
command = args.command
if command == 'importtrade':
if args.wormhole:
@ -234,9 +246,9 @@ def main():
if len(args.arguments) < 1: throw("Usage: newtrade [tradeid]")
tradeid = args.arguments[0]
if args.conf == None:
newtrade(tradeid, network=args.network, conf='cli')
newtrade(tradeid, network=NETWORK, conf='cli')
else:
newtrade(tradeid, network=args.network, conf=args.conf)
newtrade(tradeid, network=NETWORK, conf=args.conf)
elif command == "daemon":
#TODO: not implemented
print("Run as daemon process")
@ -248,6 +260,7 @@ def main():
tradeid = args.arguments[0]
checkBuyStatus(tradeid)
elif command == "step3":
generate(11)
tradeid = args.arguments[0]
checkSellStatus(tradeid)
elif command == "step4":

View File

@ -8,26 +8,32 @@ import xcat.db as db
from xcat.xcatconf import *
from xcat.bitcoinRPC import bitcoinProxy
from xcat.zcashRPC import zcashProxy
import logging
bitcoinRPC = bitcoinProxy()
zcashRPC = zcashProxy()
def generate(num):
bitcoinRPC.generate(num)
zcashRPC.generate(num)
def is_myaddr(address):
if address[:1] is 'm' or address[:1] is '1':
# Handle different network prefixes
if address[:1] == 'm':
status = bitcoinRPC.validateaddress(address)
else:
status = zcashRPC.validateaddress(address)
status = status['ismine']
# print("Address {0} is mine: {1}".format(address, status))
logging.debug("Address status: ", status)
if status['isvalid'] is False:
raise ValueError("Invalid address: %s" % address)
elif 'ismine' in status:
status = status['ismine']
return status
addr = '1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2'
print("Is myaddr", is_myaddr(addr))
def find_secret_from_fundtx(currency, p2sh, fundtx):
if currency is 'bitcoin':
if currency == 'bitcoin':
secret = bitcoinRPC.find_secret(p2sh, fundtx)
else if currency is 'zcash':
elif currency == 'zcash':
secret = zcashRPC.find_secret(p2sh, fundtx)
else:
raise ValueError("Currency not recognized: ", currency)
@ -38,20 +44,20 @@ def import_addrs(trade):
check_fund_status(trade.buy.currency, trade.buy.p2sh)
def check_p2sh(currency, address):
if currency is 'bitcoin':
if currency == 'bitcoin':
print("Checking funds in Bitcoin p2sh")
return bitcoinRPC.check_funds(address)
else if currency is 'zcash':
elif currency == 'zcash':
print("Checking funds in Zcash p2sh")
return zcashRPC.check_funds(address)
else:
raise ValueError("Currency not recognized: ", currency)
def check_fund_status(currency, address):
if currency is 'bitcoin':
if currency == 'bitcoin':
print("Checking funds in Bitcoin p2sh")
return bitcoinRPC.get_fund_status(address)
else if currency is 'zcash':
elif currency == 'zcash':
print("Checking funds in Zcash p2sh")
return zcashRPC.get_fund_status(address)
else:
@ -68,18 +74,18 @@ def check_fund_status(currency, address):
# print("Compiled p2sh for htlc does not match what seller sent.")
def create_htlc(currency, funder, redeemer, commitment, locktime):
if currency is 'bitcoin':
if currency == 'bitcoin':
sell_p2sh = bitcoinRPC.hashtimelockcontract(funder, redeemer, commitment, locktime)
else if currency is 'zcash':
elif currency == 'zcash':
sell_p2sh = zcashRPC.hashtimelockcontract(funder, redeemer, commitment, locktime)
else:
raise ValueError("Currency not recognized: ", currency)
return sell_p2sh
def fund_htlc(currency, p2sh, amount):
if currency is 'bitcoin':
if currency == 'bitcoin':
txid = bitcoinRPC.fund_htlc(p2sh, amount)
else if currency is 'zcash':
elif currency == 'zcash':
txid = zcashRPC.fund_htlc(p2sh, amount)
else:
raise ValueError("Currency not recognized: ", currency)
@ -87,18 +93,18 @@ def fund_htlc(currency, p2sh, amount):
def redeem_p2sh(contract, secret):
currency = contract.currency
if currency is 'bitcoin':
if currency == 'bitcoin':
res = bitcoinRPC.redeem_contract(contract, secret)
else if currency is 'zcash':
elif currency == 'zcash':
res = zcashRPC.redeem_contract(contract, secret)
else:
raise ValueError("Currency not recognized: ", currency)
return res
def parse_secret(currency, txid):
if currency is 'bitcoin':
if currency == 'bitcoin':
secret = bitcoinRPC.parse_secret(txid)
else if currency is 'zcash':
elif currency == 'zcash':
secret = zcashRPC.parse_secret(txid)
else:
raise ValueError("Currency not recognized: ", currency)
@ -221,10 +227,10 @@ def initialize_trade(tradeid, **kwargs):
return tradeid, trade
def seller_init(tradeid, trade):
def seller_init(tradeid, trade, network):
secret = generate_password()
db.save_secret(tradeid, secret)
print("\nGenerated a secret preimage to lock funds. This will only be stored locally: ", secret)
print("Generated a secret preimage to lock funds. This will only be stored locally: {0}".format(secret))
hash_of_secret = sha256(secret)
# TODO: Implement locktimes and mock block passage of time
@ -237,5 +243,5 @@ def seller_init(tradeid, trade):
create_buy_p2sh(trade, hash_of_secret, buy_locktime)
trade.commitment = b2x(hash_of_secret)
print("TRADE after seller init", trade.toJSON())
print("TRADE after seller init: {0}".format(trade.toJSON()))
return trade

View File

@ -2,6 +2,7 @@ from xcat.utils import *
from xcat.db import *
from xcat.bitcoinRPC import bitcoinProxy
from xcat.zcashRPC import zcashProxy
from xcat.xcatconf import *
def enter_trade_id():
tradeid = input("Enter a unique identifier for this trade: ")

View File

@ -17,9 +17,11 @@ ADDRS = {
"zcash": "tmTF7LMLjvEsGdcepWPUsh4vgJNrKMWwEyc"
},
"fulfiller": {
"bitcoin": "mm2smEJjRN4xoijEfpb5XvYd8e3EYWezom",
"zcash": "tmPwPdceaJAHQn7UiRCVnJ5tXBXHVqWMkis"
"bitcoin": "mn2boR7rYq9DaAWWrVN5MazHKFyf7UhdyU",
"zcash": "tmErB22A1G74aq32aAh5AoqgQSJsAAAdT2p"
},
"amounts": {'buy': {'currency': 'zcash', 'amount': 0.02}, 'sell': {'currency': 'bitcoin', 'amount': 0.01}}
}
}
NETWORK = 'testnet'