restructuring
This commit is contained in:
parent
1ccc09f36f
commit
5cbed011ea
|
@ -1 +1 @@
|
|||
BRlobfCZ
|
||||
bRSoJpPA
|
117
test.py
117
test.py
|
@ -1,119 +1,8 @@
|
|||
import zXcat
|
||||
import bXcat
|
||||
from xcat import *
|
||||
from api import *
|
||||
|
||||
|
||||
htlcTrade = Trade()
|
||||
print("Starting test of xcat...")
|
||||
|
||||
def get_initiator_addresses():
|
||||
baddr = bXcat.new_bitcoin_addr()
|
||||
zaddr = zXcat.new_zcash_addr()
|
||||
# print("type baddr", type(baddr))
|
||||
# print("type baddr", type(baddr.to_scriptPubKey()))
|
||||
return {'bitcoin': baddr.__str__(), 'zcash': zaddr.__str__()}
|
||||
# return {'bitcoin': 'myfFr5twPYNwgeXyjCmGcrzXtCmfmWXKYp', 'zcash': 'tmFRXyju7ANM7A9mg75ZjyhFW1UJEhUPwfQ'}
|
||||
|
||||
def get_fulfiller_addresses():
|
||||
baddr = bXcat.new_bitcoin_addr()
|
||||
zaddr = zXcat.new_zcash_addr()
|
||||
return {'bitcoin': baddr.__str__(), 'zcash': zaddr.__str__()}
|
||||
# return {'bitcoin': 'myfFr5twPYNwgeXyjCmGcrzXtCmfmWXKYp', 'zcash': 'tmFRXyju7ANM7A9mg75ZjyhFW1UJEhUPwfQ'}
|
||||
# return {'bitcoin': 'mrQzUGU1dwsWRx5gsKKSDPNtrsP65vCA3Z', 'zcash': 'tmTjZSg4pX2Us6V5HttiwFZwj464fD2ZgpY'}
|
||||
|
||||
def initiate(trade):
|
||||
print("SELLER FUNDING SELL CONTRACT")
|
||||
print("============================")
|
||||
# Get amounts
|
||||
amounts = {"sell": {"currency": "bitcoin", "amount": "0.5"}, "buy": {"currency": "zcash", "amount": "1.12"}}
|
||||
sell = amounts['sell']
|
||||
buy = amounts['buy']
|
||||
sell_currency = sell['currency']
|
||||
buy_currency = buy['currency']
|
||||
# Get addresses
|
||||
init_addrs = get_initiator_addresses()
|
||||
sell['initiator'] = init_addrs[sell_currency]
|
||||
buy['initiator'] = init_addrs[buy_currency]
|
||||
fulfill_addrs = get_fulfiller_addresses()
|
||||
sell['fulfiller'] = fulfill_addrs[sell_currency]
|
||||
buy['fulfiller'] = fulfill_addrs[buy_currency]
|
||||
# initializing contract classes with addresses, currencies, and amounts
|
||||
trade.sellContract = Contract(sell)
|
||||
trade.buyContract = Contract(buy)
|
||||
print(trade.sellContract.__dict__)
|
||||
print(trade.buyContract.__dict__)
|
||||
|
||||
secret = generate_password()
|
||||
print("Generating secret to lock funds:", secret)
|
||||
save_secret(secret)
|
||||
# TODO: Implement locktimes and mock block passage of time
|
||||
seller_locktime = 6 # Must be more than buyer_locktime, so that seller reveal secret before their own locktime
|
||||
buyer_locktime = 3
|
||||
|
||||
create_sell_p2sh(trade, secret, seller_locktime)
|
||||
txid = fund_sell_contract(trade)
|
||||
print("Sent")
|
||||
create_buy_p2sh(trade, secret, buyer_locktime)
|
||||
|
||||
# buyer checks that seller funded the sell contract, and if so funds the buy contract
|
||||
def buyer_fulfill(trade):
|
||||
print("BUYER FUNDING BUY CONTRACT")
|
||||
print("==========================")
|
||||
buy = trade.buyContract
|
||||
sell = trade.sellContract
|
||||
# buy_p2sh_balance = check_p2sh(buy.currency, buy.p2sh)
|
||||
sell_p2sh_balance = check_p2sh(sell.currency, sell.p2sh)
|
||||
if (sell_p2sh_balance < float(sell.amount)):
|
||||
raise ValueError("Sell p2sh not funded, buyer cannot redeem")
|
||||
print("Seller has deposited funds, so funding the buy contract:")
|
||||
txid = fund_buy_contract(trade)
|
||||
print("Buyer Fund tx txid:", txid)
|
||||
|
||||
def redeem_seller(trade):
|
||||
print("SELLER REDEEMING BUY CONTRACT")
|
||||
print("=============================")
|
||||
buy = trade.buyContract
|
||||
# if trade.sellContract.get_status() == 'redeemed':
|
||||
# raise RuntimeError("Sell contract status was already redeemed before seller could redeem buyer's tx")
|
||||
#else:
|
||||
secret = get_secret() # Just the seller getting his local copy of the secret
|
||||
print("SELLER SECRET IN TEST:", secret)
|
||||
txid = redeem_p2sh(trade.buyContract, secret, trade.sellContract)
|
||||
setattr(trade.buyContract, 'redeem_tx', txid)
|
||||
save(trade)
|
||||
|
||||
|
||||
def redeem_buyer(trade):
|
||||
print("BUYER REDEEMING SELL CONTRACT")
|
||||
print("=============================")
|
||||
buyContract = trade.buyContract
|
||||
sellContract = trade.sellContract
|
||||
secret = ""
|
||||
# if sellContract.get_status() == 'redeemed':
|
||||
# raise RuntimeError("Sell contract was redeemed before buyer could retrieve funds")
|
||||
# elif buyContract.get_status() == 'refunded':
|
||||
# print("buyContract was refunded to buyer")
|
||||
# else:
|
||||
# Buy contract is where seller disclosed secret in redeeming
|
||||
if buyContract.currency == 'bitcoin':
|
||||
if (bXcat.still_locked(buyContract)):
|
||||
secret = bXcat.find_secret(buyContract.p2sh,buyContract.fund_tx)
|
||||
if(secret != ""):
|
||||
print("Found secret in seller's redeem tx on bitcoin chain:", secret)
|
||||
else:
|
||||
if zXcat.still_locked(buyContract):
|
||||
secret = zXcat.find_secret(buyContract.p2sh,buyContract.fund_tx)
|
||||
if(secret != ""):
|
||||
print("Found secret in seller's redeem tx on zcash chain:", secret)
|
||||
redeem_tx = redeem_p2sh(sellContract, secret, buyContract)
|
||||
setattr(trade.sellContract, 'redeem_tx', redeem_tx)
|
||||
save(trade)
|
||||
|
||||
|
||||
def generate_blocks(num):
|
||||
bXcat.generate(num)
|
||||
zXcat.generate(num)
|
||||
|
||||
initiate(htlcTrade)
|
||||
htlcTrade = initiate()
|
||||
buyer_fulfill(htlcTrade)
|
||||
# zXcat.generate(8)
|
||||
|
||||
|
|
|
@ -1 +1 @@
|
|||
{"sell": {"redeemScript": "63a8200cb33a44e4b709a2843542d08de5a33eda325a0bb4e4de1875a5377aa0f94d0d8876a91432bbf52f17c1705c3b00249976046104b5ee96206702f91eb17576a914d12e10daa244fab6ca5d9aa2eb358d00e96d066c6888ac", "currency": "bitcoin", "fulfiller": "mk9DFBLEnQHJC9pTni88hhYicQQeEf1p6T", "fund_tx": "82ff1cf3e6d35e10fbcb9cd189e7537981c305d9c4e444875905413700912d40", "redeem_tx": false, "p2sh": "2N2HwxXMxPLhyEcyxSH8Fo2uPPcNzgMDLM2", "amount": "0.5", "redeemblocknum": 7929, "initiator": "mzazhrf9Cd4QEauTy7rUtZiR9LufTVuFVN"}, "buy": {"redeemScript": "63a8200cb33a44e4b709a2843542d08de5a33eda325a0bb4e4de1875a5377aa0f94d0d8876a914de4d717b3a85b2a78173c37a71eb52b94d30a08d6702fc07b17576a9147157b4d95ffc12b553b6f5435b8fac136dad7b366888ac", "currency": "zcash", "fulfiller": "tmL3ekoHczw5Sja7BMSC451mo6uqLKBJw3J", "fund_tx": "41d340aaf2aa064cce099ec7b6249d7eeb21058530199cfbf7fded2bcac3a7e7", "redeem_tx": "c1acfaa0c3da5d1b4e6d8a489186f2b69377c367cde53945a0108c06dec2b9ad", "p2sh": "t28pBkJm5RWwnaQffQriUsqKAhsyEpmmADj", "amount": "1.12", "redeemblocknum": 2044, "initiator": "tmVyn7cSVpoJXxrbm5AXuKfzXuxTnXz63Zv"}}
|
||||
{"buy": {"initiator": "tmSMxPZhpDn9AkwjRjNS3Qd5yMVDYhsFkC8", "fulfiller": "tmUnWCoC3t8rxHQzceUTACD7HeRwiAxXNPe", "redeemblocknum": 2060, "currency": "zcash", "p2sh": "t2TwPo6mdu8bxejBe2LNQFAFKghXNo56s7w", "amount": "1.12", "redeemScript": "63a820af56bf1a42daa1278805ed6da37c150ee7a0123238ffeae6e186abb838d692468876a914b69eab222264f8be1b4c8be18ce636262da3f5cf67020c08b17576a914d13375de703dc3e78147ade514ea4ef2dbf059bf6888ac", "redeem_tx": "ae9b7731d47df3161df946ccf64d4d05fbb2bc4d0ed17fb99fe260dd4450557c", "fund_tx": "bef433c943bd2b9a2283fac9c0cd37dc24e13cab9fa4e59d42f8ad5d52cd3748"}, "sell": {"initiator": "mhVaDPABnd7bWTgYtwSkghbgXQF3Am6EXE", "fulfiller": "miUPnv6ZR3GSWGM9RuqMJXxwuGH8EnSwZY", "redeemblocknum": 7929, "currency": "bitcoin", "p2sh": "2MstbS4GLbRJctDzEAHjgVBvcGg78UUZhZ4", "amount": "0.5", "redeemScript": "63a820af56bf1a42daa1278805ed6da37c150ee7a0123238ffeae6e186abb838d692468876a914206c69ef89d5b53cde7f5b83b65fa64562b005186702f91eb17576a91415ad6758fa7915fda349fc6f3be2f907d70e4e266888ac", "redeem_tx": false, "fund_tx": "bec92dcb673b91c09a77b2a108a645bbb1fb4db77b7c23e11fc1a81d44d626e3"}}
|
Loading…
Reference in New Issue