Add logging debug option
This commit is contained in:
parent
1e14c0a7f4
commit
3fd724f6fc
|
@ -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
|
||||
|
||||
|
|
25
xcat/cli.py
25
xcat/cli.py
|
@ -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":
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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: ")
|
||||
|
|
|
@ -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'
|
||||
|
|
Loading…
Reference in New Issue