mirror of
https://github.com/basicswap/basicswap.git
synced 2024-11-17 00:07:56 +00:00
protocol: Add protocol version to order and bid messages
Move chain start heights to bid, use avoid scantxoutset for decred style swaps
This commit is contained in:
parent
8259df4399
commit
1d932cdd01
8 changed files with 163 additions and 61 deletions
|
@ -1,3 +1,3 @@
|
||||||
name = "basicswap"
|
name = "basicswap"
|
||||||
|
|
||||||
__version__ = "0.0.25"
|
__version__ = "0.0.26"
|
||||||
|
|
|
@ -584,6 +584,12 @@ class BasicSwap(BaseApp):
|
||||||
session.execute('ALTER TABLE offers ADD COLUMN addr_to VARCHAR')
|
session.execute('ALTER TABLE offers ADD COLUMN addr_to VARCHAR')
|
||||||
session.execute(f'UPDATE offers SET addr_to = "{self.network_addr}"')
|
session.execute(f'UPDATE offers SET addr_to = "{self.network_addr}"')
|
||||||
db_version += 1
|
db_version += 1
|
||||||
|
elif current_version == 11:
|
||||||
|
session.execute('ALTER TABLE bids ADD COLUMN chain_a_height_start INTEGER')
|
||||||
|
session.execute('ALTER TABLE bids ADD COLUMN chain_b_height_start INTEGER')
|
||||||
|
session.execute('ALTER TABLE bids ADD COLUMN protocol_version INTEGER')
|
||||||
|
session.execute('ALTER TABLE offers ADD COLUMN protocol_version INTEGER')
|
||||||
|
db_version += 1
|
||||||
|
|
||||||
if current_version != db_version:
|
if current_version != db_version:
|
||||||
self.db_version = db_version
|
self.db_version = db_version
|
||||||
|
@ -919,6 +925,7 @@ class BasicSwap(BaseApp):
|
||||||
|
|
||||||
msg_buf = OfferMessage()
|
msg_buf = OfferMessage()
|
||||||
|
|
||||||
|
msg_buf.protocol_version = 1
|
||||||
msg_buf.coin_from = int(coin_from)
|
msg_buf.coin_from = int(coin_from)
|
||||||
msg_buf.coin_to = int(coin_to)
|
msg_buf.coin_to = int(coin_to)
|
||||||
msg_buf.amount_from = int(amount)
|
msg_buf.amount_from = int(amount)
|
||||||
|
@ -989,6 +996,7 @@ class BasicSwap(BaseApp):
|
||||||
offer = Offer(
|
offer = Offer(
|
||||||
offer_id=offer_id,
|
offer_id=offer_id,
|
||||||
active_ind=1,
|
active_ind=1,
|
||||||
|
protocol_version=msg_buf.protocol_version,
|
||||||
|
|
||||||
coin_from=msg_buf.coin_from,
|
coin_from=msg_buf.coin_from,
|
||||||
coin_to=msg_buf.coin_to,
|
coin_to=msg_buf.coin_to,
|
||||||
|
@ -1516,12 +1524,15 @@ class BasicSwap(BaseApp):
|
||||||
self.mxDB.acquire()
|
self.mxDB.acquire()
|
||||||
try:
|
try:
|
||||||
msg_buf = BidMessage()
|
msg_buf = BidMessage()
|
||||||
|
msg_buf.protocol_version = 1
|
||||||
msg_buf.offer_msg_id = offer_id
|
msg_buf.offer_msg_id = offer_id
|
||||||
msg_buf.time_valid = valid_for_seconds
|
msg_buf.time_valid = valid_for_seconds
|
||||||
msg_buf.amount = int(amount) # amount of coin_from
|
msg_buf.amount = int(amount) # amount of coin_from
|
||||||
|
|
||||||
coin_from = Coins(offer.coin_from)
|
coin_from = Coins(offer.coin_from)
|
||||||
coin_to = Coins(offer.coin_to)
|
coin_to = Coins(offer.coin_to)
|
||||||
|
ci_from = self.ci(coin_from)
|
||||||
|
ci_to = self.ci(coin_to)
|
||||||
|
|
||||||
self.checkSynced(coin_from, coin_to)
|
self.checkSynced(coin_from, coin_to)
|
||||||
|
|
||||||
|
@ -1554,6 +1565,7 @@ class BasicSwap(BaseApp):
|
||||||
|
|
||||||
bid_id = bytes.fromhex(msg_id)
|
bid_id = bytes.fromhex(msg_id)
|
||||||
bid = Bid(
|
bid = Bid(
|
||||||
|
protocol_version=msg_buf.protocol_version,
|
||||||
active_ind=1,
|
active_ind=1,
|
||||||
bid_id=bid_id,
|
bid_id=bid_id,
|
||||||
offer_id=offer_id,
|
offer_id=offer_id,
|
||||||
|
@ -1567,6 +1579,8 @@ class BasicSwap(BaseApp):
|
||||||
expire_at=now + msg_buf.time_valid,
|
expire_at=now + msg_buf.time_valid,
|
||||||
bid_addr=bid_addr,
|
bid_addr=bid_addr,
|
||||||
was_sent=True,
|
was_sent=True,
|
||||||
|
chain_a_height_start=ci_from.getChainHeight(),
|
||||||
|
chain_b_height_start=ci_to.getChainHeight(),
|
||||||
)
|
)
|
||||||
bid.setState(BidStates.BID_SENT)
|
bid.setState(BidStates.BID_SENT)
|
||||||
|
|
||||||
|
@ -1842,6 +1856,7 @@ class BasicSwap(BaseApp):
|
||||||
self.checkSynced(coin_from, coin_to)
|
self.checkSynced(coin_from, coin_to)
|
||||||
|
|
||||||
msg_buf = XmrBidMessage()
|
msg_buf = XmrBidMessage()
|
||||||
|
msg_buf.protocol_version = 1
|
||||||
msg_buf.offer_msg_id = offer_id
|
msg_buf.offer_msg_id = offer_id
|
||||||
msg_buf.time_valid = valid_for_seconds
|
msg_buf.time_valid = valid_for_seconds
|
||||||
msg_buf.amount = int(amount) # Amount of coin_from
|
msg_buf.amount = int(amount) # Amount of coin_from
|
||||||
|
@ -1861,13 +1876,6 @@ class BasicSwap(BaseApp):
|
||||||
xmr_swap = XmrSwap()
|
xmr_swap = XmrSwap()
|
||||||
xmr_swap.contract_count = self.getNewContractId()
|
xmr_swap.contract_count = self.getNewContractId()
|
||||||
xmr_swap.dest_af = msg_buf.dest_af
|
xmr_swap.dest_af = msg_buf.dest_af
|
||||||
xmr_swap.start_chain_a_height = ci_from.getChainHeight()
|
|
||||||
xmr_swap.b_restore_height = ci_to.getChainHeight()
|
|
||||||
|
|
||||||
wallet_restore_height = self.getWalletRestoreHeight(ci_to)
|
|
||||||
if xmr_swap.b_restore_height < wallet_restore_height:
|
|
||||||
xmr_swap.b_restore_height = wallet_restore_height
|
|
||||||
self.log.warning('XMR swap restore height clamped to {}'.format(wallet_restore_height))
|
|
||||||
|
|
||||||
for_ed25519 = True if coin_to == Coins.XMR else False
|
for_ed25519 = True if coin_to == Coins.XMR else False
|
||||||
kbvf = self.getPathKey(coin_from, coin_to, bid_created_at, xmr_swap.contract_count, 1, for_ed25519)
|
kbvf = self.getPathKey(coin_from, coin_to, bid_created_at, xmr_swap.contract_count, 1, for_ed25519)
|
||||||
|
@ -1932,6 +1940,7 @@ class BasicSwap(BaseApp):
|
||||||
xmr_swap.bid_msg_id3 = bytes.fromhex(ro['msgid'])
|
xmr_swap.bid_msg_id3 = bytes.fromhex(ro['msgid'])
|
||||||
|
|
||||||
bid = Bid(
|
bid = Bid(
|
||||||
|
protocol_version=msg_buf.protocol_version,
|
||||||
active_ind=1,
|
active_ind=1,
|
||||||
bid_id=xmr_swap.bid_id,
|
bid_id=xmr_swap.bid_id,
|
||||||
offer_id=offer_id,
|
offer_id=offer_id,
|
||||||
|
@ -1943,6 +1952,15 @@ class BasicSwap(BaseApp):
|
||||||
bid_addr=bid_addr,
|
bid_addr=bid_addr,
|
||||||
was_sent=True,
|
was_sent=True,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
bid.chain_a_height_start = ci_from.getChainHeight()
|
||||||
|
bid.chain_b_height_start = ci_to.getChainHeight()
|
||||||
|
|
||||||
|
wallet_restore_height = self.getWalletRestoreHeight(ci_to)
|
||||||
|
if bid.chain_b_height_start < wallet_restore_height:
|
||||||
|
bid.chain_b_height_start = wallet_restore_height
|
||||||
|
self.log.warning('XMR swap restore height clamped to {}'.format(wallet_restore_height))
|
||||||
|
|
||||||
bid.setState(BidStates.BID_SENT)
|
bid.setState(BidStates.BID_SENT)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
@ -2786,7 +2804,8 @@ class BasicSwap(BaseApp):
|
||||||
a_lock_tx_dest = ci_from.getScriptDest(xmr_swap.a_lock_tx_script)
|
a_lock_tx_dest = ci_from.getScriptDest(xmr_swap.a_lock_tx_script)
|
||||||
# Changed from ci_from.getOutput(bid.xmr_a_lock_tx.txid, a_lock_tx_dest, bid.amount, xmr_swap)
|
# Changed from ci_from.getOutput(bid.xmr_a_lock_tx.txid, a_lock_tx_dest, bid.amount, xmr_swap)
|
||||||
|
|
||||||
lock_tx_chain_info = ci_from.getLockTxHeight(bid.xmr_a_lock_tx.txid, a_lock_tx_dest, bid.amount, xmr_swap)
|
p2wsh_addr = ci_from.encode_p2wsh(a_lock_tx_dest)
|
||||||
|
lock_tx_chain_info = ci_from.getLockTxHeight(bid.xmr_a_lock_tx.txid, p2wsh_addr, bid.amount, bid.chain_a_height_start)
|
||||||
|
|
||||||
if lock_tx_chain_info is None:
|
if lock_tx_chain_info is None:
|
||||||
return rv
|
return rv
|
||||||
|
@ -2827,7 +2846,7 @@ class BasicSwap(BaseApp):
|
||||||
|
|
||||||
bid_changed = False
|
bid_changed = False
|
||||||
# Have to use findTxB instead of relying on the first seen height to detect chain reorgs
|
# Have to use findTxB instead of relying on the first seen height to detect chain reorgs
|
||||||
found_tx = ci_to.findTxB(xmr_swap.vkbv, xmr_swap.pkbs, bid.amount_to, ci_to.blocks_confirmed, xmr_swap.b_restore_height, bid.was_sent)
|
found_tx = ci_to.findTxB(xmr_swap.vkbv, xmr_swap.pkbs, bid.amount_to, ci_to.blocks_confirmed, bid.chain_b_height_start, bid.was_sent)
|
||||||
|
|
||||||
if isinstance(found_tx, int) and found_tx == -1:
|
if isinstance(found_tx, int) and found_tx == -1:
|
||||||
if self.countBidEvents(bid, EventLogTypes.LOCK_TX_B_INVALID, session) < 1:
|
if self.countBidEvents(bid, EventLogTypes.LOCK_TX_B_INVALID, session) < 1:
|
||||||
|
@ -2945,9 +2964,11 @@ class BasicSwap(BaseApp):
|
||||||
addr = self.encodeSegwitP2WSH(coin_from, getP2WSH(bid.initiate_tx.script))
|
addr = self.encodeSegwitP2WSH(coin_from, getP2WSH(bid.initiate_tx.script))
|
||||||
else:
|
else:
|
||||||
addr = p2sh
|
addr = p2sh
|
||||||
found = self.lookupUnspentByAddress(coin_from, addr, assert_amount=bid.amount, assert_txid=initiate_txnid_hex)
|
|
||||||
|
ci_from = self.ci(coin_from)
|
||||||
|
found = ci_from.getLockTxHeight(bytes.fromhex(initiate_txnid_hex), addr, bid.amount, bid.chain_a_height_start, find_index=True)
|
||||||
if found:
|
if found:
|
||||||
bid.initiate_tx.conf = found['n_conf']
|
bid.initiate_tx.conf = found['depth']
|
||||||
index = found['index']
|
index = found['index']
|
||||||
tx_height = found['height']
|
tx_height = found['height']
|
||||||
|
|
||||||
|
@ -2984,11 +3005,12 @@ class BasicSwap(BaseApp):
|
||||||
else:
|
else:
|
||||||
addr = self.getScriptAddress(coin_to, bid.participate_tx.script)
|
addr = self.getScriptAddress(coin_to, bid.participate_tx.script)
|
||||||
|
|
||||||
found = self.lookupUnspentByAddress(coin_to, addr, assert_amount=bid.amount_to)
|
ci_to = self.ci(coin_to)
|
||||||
|
found = ci_to.getLockTxHeight(None, addr, bid.amount_to, bid.chain_b_height_start, find_index=True)
|
||||||
if found:
|
if found:
|
||||||
if bid.participate_tx.conf != found['n_conf']:
|
if bid.participate_tx.conf != found['depth']:
|
||||||
save_bid = True
|
save_bid = True
|
||||||
bid.participate_tx.conf = found['n_conf']
|
bid.participate_tx.conf = found['depth']
|
||||||
index = found['index']
|
index = found['index']
|
||||||
if bid.participate_tx is None or bid.participate_tx.txid is None:
|
if bid.participate_tx is None or bid.participate_tx.txid is None:
|
||||||
self.log.debug('Found bid %s participate txn %s in chain %s', bid_id.hex(), found['txid'], coin_to)
|
self.log.debug('Found bid %s participate txn %s in chain %s', bid_id.hex(), found['txid'], coin_to)
|
||||||
|
@ -3506,6 +3528,7 @@ class BasicSwap(BaseApp):
|
||||||
offer_id=offer_id,
|
offer_id=offer_id,
|
||||||
active_ind=1,
|
active_ind=1,
|
||||||
|
|
||||||
|
protocol_version=offer_data.protocol_version,
|
||||||
coin_from=offer_data.coin_from,
|
coin_from=offer_data.coin_from,
|
||||||
coin_to=offer_data.coin_to,
|
coin_to=offer_data.coin_to,
|
||||||
amount_from=offer_data.amount_from,
|
amount_from=offer_data.amount_from,
|
||||||
|
@ -3613,8 +3636,10 @@ class BasicSwap(BaseApp):
|
||||||
# assert(bid_data.rate != offer['data'].rate), 'Bid rate mismatch'
|
# assert(bid_data.rate != offer['data'].rate), 'Bid rate mismatch'
|
||||||
|
|
||||||
coin_to = Coins(offer.coin_to)
|
coin_to = Coins(offer.coin_to)
|
||||||
|
ci_from = self.ci(offer.coin_from)
|
||||||
|
ci_to = self.ci(coin_to)
|
||||||
|
|
||||||
amount_to = int((bid_data.amount * offer.rate) // self.ci(offer.coin_from).COIN())
|
amount_to = int((bid_data.amount * offer.rate) // ci_from.COIN())
|
||||||
swap_type = offer.swap_type
|
swap_type = offer.swap_type
|
||||||
if swap_type == SwapTypes.SELLER_FIRST:
|
if swap_type == SwapTypes.SELLER_FIRST:
|
||||||
ensure(len(bid_data.pkhash_buyer) == 20, 'Bad pkhash_buyer length')
|
ensure(len(bid_data.pkhash_buyer) == 20, 'Bad pkhash_buyer length')
|
||||||
|
@ -3647,6 +3672,7 @@ class BasicSwap(BaseApp):
|
||||||
active_ind=1,
|
active_ind=1,
|
||||||
bid_id=bid_id,
|
bid_id=bid_id,
|
||||||
offer_id=offer_id,
|
offer_id=offer_id,
|
||||||
|
protocol_version=bid_data.protocol_version,
|
||||||
amount=bid_data.amount,
|
amount=bid_data.amount,
|
||||||
pkhash_buyer=bid_data.pkhash_buyer,
|
pkhash_buyer=bid_data.pkhash_buyer,
|
||||||
|
|
||||||
|
@ -3655,6 +3681,8 @@ class BasicSwap(BaseApp):
|
||||||
expire_at=msg['sent'] + bid_data.time_valid,
|
expire_at=msg['sent'] + bid_data.time_valid,
|
||||||
bid_addr=msg['from'],
|
bid_addr=msg['from'],
|
||||||
was_received=True,
|
was_received=True,
|
||||||
|
chain_a_height_start=ci_from.getChainHeight(),
|
||||||
|
chain_b_height_start=ci_to.getChainHeight(),
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
ensure(bid.state == BidStates.BID_SENT, 'Wrong bid state: {}'.format(str(BidStates(bid.state))))
|
ensure(bid.state == BidStates.BID_SENT, 'Wrong bid state: {}'.format(str(BidStates(bid.state))))
|
||||||
|
@ -3903,12 +3931,15 @@ class BasicSwap(BaseApp):
|
||||||
active_ind=1,
|
active_ind=1,
|
||||||
bid_id=bid_id,
|
bid_id=bid_id,
|
||||||
offer_id=offer_id,
|
offer_id=offer_id,
|
||||||
|
protocol_version=bid_data.protocol_version,
|
||||||
amount=bid_data.amount,
|
amount=bid_data.amount,
|
||||||
created_at=msg['sent'],
|
created_at=msg['sent'],
|
||||||
amount_to=(bid_data.amount * offer.rate) // ci_from.COIN(),
|
amount_to=(bid_data.amount * offer.rate) // ci_from.COIN(),
|
||||||
expire_at=msg['sent'] + bid_data.time_valid,
|
expire_at=msg['sent'] + bid_data.time_valid,
|
||||||
bid_addr=msg['from'],
|
bid_addr=msg['from'],
|
||||||
was_received=True,
|
was_received=True,
|
||||||
|
chain_a_height_start=ci_from.getChainHeight(),
|
||||||
|
chain_b_height_start=ci_to.getChainHeight(),
|
||||||
)
|
)
|
||||||
|
|
||||||
xmr_swap = XmrSwap(
|
xmr_swap = XmrSwap(
|
||||||
|
@ -3918,12 +3949,10 @@ class BasicSwap(BaseApp):
|
||||||
vkbvf=bid_data.kbvf,
|
vkbvf=bid_data.kbvf,
|
||||||
pkbvf=ci_to.getPubkey(bid_data.kbvf),
|
pkbvf=ci_to.getPubkey(bid_data.kbvf),
|
||||||
kbsf_dleag=bid_data.kbsf_dleag,
|
kbsf_dleag=bid_data.kbsf_dleag,
|
||||||
b_restore_height=ci_to.getChainHeight(),
|
|
||||||
start_chain_a_height=ci_from.getChainHeight(),
|
|
||||||
)
|
)
|
||||||
wallet_restore_height = self.getWalletRestoreHeight(ci_to)
|
wallet_restore_height = self.getWalletRestoreHeight(ci_to)
|
||||||
if xmr_swap.b_restore_height < wallet_restore_height:
|
if bid.chain_b_height_start < wallet_restore_height:
|
||||||
xmr_swap.b_restore_height = wallet_restore_height
|
bid.chain_b_height_start = wallet_restore_height
|
||||||
self.log.warning('XMR swap restore height clamped to {}'.format(wallet_restore_height))
|
self.log.warning('XMR swap restore height clamped to {}'.format(wallet_restore_height))
|
||||||
else:
|
else:
|
||||||
ensure(bid.state == BidStates.BID_SENT, 'Wrong bid state: {}'.format(str(BidStates(bid.state))))
|
ensure(bid.state == BidStates.BID_SENT, 'Wrong bid state: {}'.format(str(BidStates(bid.state))))
|
||||||
|
@ -4035,7 +4064,7 @@ class BasicSwap(BaseApp):
|
||||||
self.swaps_in_progress[bid.bid_id] = (bid, offer)
|
self.swaps_in_progress[bid.bid_id] = (bid, offer)
|
||||||
|
|
||||||
coin_from = Coins(offer.coin_from)
|
coin_from = Coins(offer.coin_from)
|
||||||
self.setLastHeightChecked(coin_from, xmr_swap.start_chain_a_height)
|
self.setLastHeightChecked(coin_from, bid.chain_a_height_start)
|
||||||
self.addWatchedOutput(coin_from, bid.bid_id, bid.xmr_a_lock_tx.txid.hex(), bid.xmr_a_lock_tx.vout, TxTypes.XMR_SWAP_A_LOCK, SwapTypes.XMR_SWAP)
|
self.addWatchedOutput(coin_from, bid.bid_id, bid.xmr_a_lock_tx.txid.hex(), bid.xmr_a_lock_tx.vout, TxTypes.XMR_SWAP_A_LOCK, SwapTypes.XMR_SWAP)
|
||||||
|
|
||||||
lock_refund_vout = self.ci(coin_from).getLockRefundTxSwapOutput(xmr_swap)
|
lock_refund_vout = self.ci(coin_from).getLockRefundTxSwapOutput(xmr_swap)
|
||||||
|
@ -4340,7 +4369,7 @@ class BasicSwap(BaseApp):
|
||||||
address_to = self.getCachedMainWalletAddress(ci_to)
|
address_to = self.getCachedMainWalletAddress(ci_to)
|
||||||
else:
|
else:
|
||||||
address_to = self.getCachedStealthAddressForCoin(coin_to)
|
address_to = self.getCachedStealthAddressForCoin(coin_to)
|
||||||
txid = ci_to.spendBLockTx(xmr_swap.b_lock_tx_id, address_to, xmr_swap.vkbv, vkbs, bid.amount_to, xmr_offer.b_fee_rate, xmr_swap.b_restore_height)
|
txid = ci_to.spendBLockTx(xmr_swap.b_lock_tx_id, address_to, xmr_swap.vkbv, vkbs, bid.amount_to, xmr_offer.b_fee_rate, bid.chain_b_height_start)
|
||||||
self.log.debug('Submitted lock B spend txn %s to %s chain for bid %s', txid.hex(), ci_to.coin_name(), bid_id.hex())
|
self.log.debug('Submitted lock B spend txn %s to %s chain for bid %s', txid.hex(), ci_to.coin_name(), bid_id.hex())
|
||||||
self.logBidEvent(bid.bid_id, EventLogTypes.LOCK_TX_B_SPEND_TX_PUBLISHED, '', session)
|
self.logBidEvent(bid.bid_id, EventLogTypes.LOCK_TX_B_SPEND_TX_PUBLISHED, '', session)
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
|
@ -4395,7 +4424,7 @@ class BasicSwap(BaseApp):
|
||||||
|
|
||||||
try:
|
try:
|
||||||
address_to = self.getCachedMainWalletAddress(ci_to)
|
address_to = self.getCachedMainWalletAddress(ci_to)
|
||||||
txid = ci_to.spendBLockTx(xmr_swap.b_lock_tx_id, address_to, xmr_swap.vkbv, vkbs, bid.amount_to, xmr_offer.b_fee_rate, xmr_swap.b_restore_height)
|
txid = ci_to.spendBLockTx(xmr_swap.b_lock_tx_id, address_to, xmr_swap.vkbv, vkbs, bid.amount_to, xmr_offer.b_fee_rate, bid.chain_b_height_start)
|
||||||
self.log.debug('Submitted lock B refund txn %s to %s chain for bid %s', txid.hex(), ci_to.coin_name(), bid_id.hex())
|
self.log.debug('Submitted lock B refund txn %s to %s chain for bid %s', txid.hex(), ci_to.coin_name(), bid_id.hex())
|
||||||
self.logBidEvent(bid.bid_id, EventLogTypes.LOCK_TX_B_REFUND_TX_PUBLISHED, '', session)
|
self.logBidEvent(bid.bid_id, EventLogTypes.LOCK_TX_B_REFUND_TX_PUBLISHED, '', session)
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
|
|
|
@ -12,7 +12,7 @@ from enum import IntEnum, auto
|
||||||
from sqlalchemy.ext.declarative import declarative_base
|
from sqlalchemy.ext.declarative import declarative_base
|
||||||
|
|
||||||
|
|
||||||
CURRENT_DB_VERSION = 11
|
CURRENT_DB_VERSION = 12
|
||||||
Base = declarative_base()
|
Base = declarative_base()
|
||||||
|
|
||||||
|
|
||||||
|
@ -41,6 +41,7 @@ class Offer(Base):
|
||||||
offer_id = sa.Column(sa.LargeBinary, primary_key=True)
|
offer_id = sa.Column(sa.LargeBinary, primary_key=True)
|
||||||
active_ind = sa.Column(sa.Integer)
|
active_ind = sa.Column(sa.Integer)
|
||||||
|
|
||||||
|
protocol_version = sa.Column(sa.Integer)
|
||||||
coin_from = sa.Column(sa.Integer)
|
coin_from = sa.Column(sa.Integer)
|
||||||
coin_to = sa.Column(sa.Integer)
|
coin_to = sa.Column(sa.Integer)
|
||||||
amount_from = sa.Column(sa.BigInteger)
|
amount_from = sa.Column(sa.BigInteger)
|
||||||
|
@ -89,6 +90,7 @@ class Bid(Base):
|
||||||
offer_id = sa.Column(sa.LargeBinary, sa.ForeignKey('offers.offer_id'))
|
offer_id = sa.Column(sa.LargeBinary, sa.ForeignKey('offers.offer_id'))
|
||||||
active_ind = sa.Column(sa.Integer)
|
active_ind = sa.Column(sa.Integer)
|
||||||
|
|
||||||
|
protocol_version = sa.Column(sa.Integer)
|
||||||
was_sent = sa.Column(sa.Boolean)
|
was_sent = sa.Column(sa.Boolean)
|
||||||
was_received = sa.Column(sa.Boolean)
|
was_received = sa.Column(sa.Boolean)
|
||||||
contract_count = sa.Column(sa.Integer)
|
contract_count = sa.Column(sa.Integer)
|
||||||
|
@ -123,6 +125,9 @@ class Bid(Base):
|
||||||
debug_ind = sa.Column(sa.Integer)
|
debug_ind = sa.Column(sa.Integer)
|
||||||
security_token = sa.Column(sa.LargeBinary)
|
security_token = sa.Column(sa.LargeBinary)
|
||||||
|
|
||||||
|
chain_a_height_start = sa.Column(sa.Integer) # Height of script chain before the swap
|
||||||
|
chain_b_height_start = sa.Column(sa.Integer) # Height of scriptless chain before the swap
|
||||||
|
|
||||||
initiate_tx = None
|
initiate_tx = None
|
||||||
participate_tx = None
|
participate_tx = None
|
||||||
xmr_a_lock_tx = None
|
xmr_a_lock_tx = None
|
||||||
|
@ -332,9 +337,6 @@ class XmrSwap(Base):
|
||||||
|
|
||||||
b_lock_tx_id = sa.Column(sa.LargeBinary)
|
b_lock_tx_id = sa.Column(sa.LargeBinary)
|
||||||
|
|
||||||
start_chain_a_height = sa.Column(sa.Integer) # Height of script chain before the swap
|
|
||||||
b_restore_height = sa.Column(sa.Integer) # Height of scriptless chain before the swap
|
|
||||||
|
|
||||||
|
|
||||||
class XmrSplitData(Base):
|
class XmrSplitData(Base):
|
||||||
__tablename__ = 'xmr_split_data'
|
__tablename__ = 'xmr_split_data'
|
||||||
|
|
|
@ -85,6 +85,17 @@ def findOutput(tx, script_pk):
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
def find_vout_for_address_from_txobj(tx_obj, addr):
|
||||||
|
"""
|
||||||
|
Locate the vout index of the given transaction sending to the
|
||||||
|
given address. Raises runtime error exception if not found.
|
||||||
|
"""
|
||||||
|
for i in range(len(tx_obj["vout"])):
|
||||||
|
if any([addr == a for a in tx_obj["vout"][i]["scriptPubKey"]["addresses"]]):
|
||||||
|
return i
|
||||||
|
raise RuntimeError("Vout not found for address: txid=%s, addr=%s" % (txid, addr))
|
||||||
|
|
||||||
|
|
||||||
class BTCInterface(CoinInterface):
|
class BTCInterface(CoinInterface):
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def coin_type():
|
def coin_type():
|
||||||
|
@ -911,16 +922,30 @@ class BTCInterface(CoinInterface):
|
||||||
def spendBLockTx(self, chain_b_lock_txid, address_to, kbv, kbs, cb_swap_value, b_fee, restore_height):
|
def spendBLockTx(self, chain_b_lock_txid, address_to, kbv, kbs, cb_swap_value, b_fee, restore_height):
|
||||||
raise ValueError('TODO')
|
raise ValueError('TODO')
|
||||||
|
|
||||||
def getLockTxHeight(self, txid, dest_script, bid_amount, xmr_swap):
|
def getLockTxHeight(self, txid, dest_address, bid_amount, rescan_from, find_index=False):
|
||||||
rv = None
|
# Add watchonly address and rescan if required
|
||||||
p2wsh_addr = self.encode_p2wsh(dest_script)
|
addr_info = self.rpc_callback('getaddressinfo', [dest_address])
|
||||||
|
|
||||||
addr_info = self.rpc_callback('getaddressinfo', [p2wsh_addr])
|
|
||||||
if not addr_info['iswatchonly']:
|
if not addr_info['iswatchonly']:
|
||||||
ro = self.rpc_callback('importaddress', [p2wsh_addr, 'bid', False])
|
ro = self.rpc_callback('importaddress', [dest_address, 'bid', False])
|
||||||
self._log.info('Imported watch-only addr: {}'.format(p2wsh_addr))
|
self._log.info('Imported watch-only addr: {}'.format(dest_address))
|
||||||
self._log.info('Rescanning chain from height: {}'.format(xmr_swap.start_chain_a_height))
|
self._log.info('Rescanning chain from height: {}'.format(rescan_from))
|
||||||
self.rpc_callback('rescanblockchain', [xmr_swap.start_chain_a_height])
|
self.rpc_callback('rescanblockchain', [rescan_from])
|
||||||
|
|
||||||
|
return_txid = True if txid is None else False
|
||||||
|
if txid is None:
|
||||||
|
txns = self.rpc_callback('listunspent', [0, 9999999, [dest_address, ]])
|
||||||
|
import json
|
||||||
|
print('txns', json.dumps(txns, indent=4))
|
||||||
|
|
||||||
|
for tx in txns:
|
||||||
|
print('bid_amount', bid_amount)
|
||||||
|
print('self.make_int(tx[amount])', self.make_int(tx['amount']))
|
||||||
|
if self.make_int(tx['amount']) == bid_amount:
|
||||||
|
txid = bytes.fromhex(tx['txid'])
|
||||||
|
break
|
||||||
|
|
||||||
|
if txid is None:
|
||||||
|
return None
|
||||||
|
|
||||||
try:
|
try:
|
||||||
tx = self.rpc_callback('gettransaction', [txid.hex()])
|
tx = self.rpc_callback('gettransaction', [txid.hex()])
|
||||||
|
@ -933,8 +958,16 @@ class BTCInterface(CoinInterface):
|
||||||
rv = {
|
rv = {
|
||||||
'depth': 0 if 'confirmations' not in tx else tx['confirmations'],
|
'depth': 0 if 'confirmations' not in tx else tx['confirmations'],
|
||||||
'height': block_height}
|
'height': block_height}
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
pass
|
return None
|
||||||
|
|
||||||
|
if find_index:
|
||||||
|
tx_obj = self.rpc_callback('decoderawtransaction', [tx['hex']])
|
||||||
|
rv['index'] = find_vout_for_address_from_txobj(tx_obj, dest_address)
|
||||||
|
|
||||||
|
if return_txid:
|
||||||
|
rv['txid'] = txid.hex()
|
||||||
|
|
||||||
return rv
|
return rv
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
# Copyright (c) 2020 tecnovert
|
# Copyright (c) 2020-2021 tecnovert
|
||||||
# Distributed under the MIT software license, see the accompanying
|
# Distributed under the MIT software license, see the accompanying
|
||||||
# file LICENSE or http://www.opensource.org/licenses/mit-license.php.
|
# file LICENSE or http://www.opensource.org/licenses/mit-license.php.
|
||||||
|
|
||||||
|
@ -13,3 +13,6 @@ class NMCInterface(BTCInterface):
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def coin_type():
|
def coin_type():
|
||||||
return Coins.NMC
|
return Coins.NMC
|
||||||
|
|
||||||
|
def getLockTxHeight(self, txid, dest_address, bid_amount, rescan_from, find_index=False):
|
||||||
|
raise ValueError('TODO: Use scantxoutset')
|
||||||
|
|
|
@ -29,6 +29,8 @@ message OfferMessage {
|
||||||
|
|
||||||
uint64 fee_rate_from = 14;
|
uint64 fee_rate_from = 14;
|
||||||
uint64 fee_rate_to = 15;
|
uint64 fee_rate_to = 15;
|
||||||
|
|
||||||
|
uint32 protocol_version = 16;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Step 2, buyer -> seller */
|
/* Step 2, buyer -> seller */
|
||||||
|
@ -41,6 +43,8 @@ message BidMessage {
|
||||||
bytes pkhash_buyer = 4; /* buyer's address to receive amount_from */
|
bytes pkhash_buyer = 4; /* buyer's address to receive amount_from */
|
||||||
string proof_address = 5;
|
string proof_address = 5;
|
||||||
string proof_signature = 6;
|
string proof_signature = 6;
|
||||||
|
|
||||||
|
uint32 protocol_version = 7;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Step 3, seller -> buyer */
|
/* Step 3, seller -> buyer */
|
||||||
|
@ -67,6 +71,8 @@ message XmrBidMessage {
|
||||||
bytes kbsf_dleag = 6;
|
bytes kbsf_dleag = 6;
|
||||||
|
|
||||||
bytes dest_af = 7;
|
bytes dest_af = 7;
|
||||||
|
|
||||||
|
uint32 protocol_version = 8;
|
||||||
}
|
}
|
||||||
|
|
||||||
message XmrSplitMessage {
|
message XmrSplitMessage {
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||||
# source: messages.proto
|
# source: messages.proto
|
||||||
|
"""Generated protocol buffer code."""
|
||||||
from google.protobuf import descriptor as _descriptor
|
from google.protobuf import descriptor as _descriptor
|
||||||
from google.protobuf import message as _message
|
from google.protobuf import message as _message
|
||||||
from google.protobuf import reflection as _reflection
|
from google.protobuf import reflection as _reflection
|
||||||
|
@ -19,7 +19,7 @@ DESCRIPTOR = _descriptor.FileDescriptor(
|
||||||
syntax='proto3',
|
syntax='proto3',
|
||||||
serialized_options=None,
|
serialized_options=None,
|
||||||
create_key=_descriptor._internal_create_key,
|
create_key=_descriptor._internal_create_key,
|
||||||
serialized_pb=b'\n\x0emessages.proto\x12\tbasicswap\"\xd8\x03\n\x0cOfferMessage\x12\x11\n\tcoin_from\x18\x01 \x01(\r\x12\x0f\n\x07\x63oin_to\x18\x02 \x01(\r\x12\x13\n\x0b\x61mount_from\x18\x03 \x01(\x04\x12\x0c\n\x04rate\x18\x04 \x01(\x04\x12\x16\n\x0emin_bid_amount\x18\x05 \x01(\x04\x12\x12\n\ntime_valid\x18\x06 \x01(\x04\x12\x33\n\tlock_type\x18\x07 \x01(\x0e\x32 .basicswap.OfferMessage.LockType\x12\x12\n\nlock_value\x18\x08 \x01(\r\x12\x11\n\tswap_type\x18\t \x01(\r\x12\x15\n\rproof_address\x18\n \x01(\t\x12\x17\n\x0fproof_signature\x18\x0b \x01(\t\x12\x15\n\rpkhash_seller\x18\x0c \x01(\x0c\x12\x13\n\x0bsecret_hash\x18\r \x01(\x0c\x12\x15\n\rfee_rate_from\x18\x0e \x01(\x04\x12\x13\n\x0b\x66\x65\x65_rate_to\x18\x0f \x01(\x04\"q\n\x08LockType\x12\x0b\n\x07NOT_SET\x10\x00\x12\x18\n\x14SEQUENCE_LOCK_BLOCKS\x10\x01\x12\x16\n\x12SEQUENCE_LOCK_TIME\x10\x02\x12\x13\n\x0f\x41\x42S_LOCK_BLOCKS\x10\x03\x12\x11\n\rABS_LOCK_TIME\x10\x04\"\x8c\x01\n\nBidMessage\x12\x14\n\x0coffer_msg_id\x18\x01 \x01(\x0c\x12\x12\n\ntime_valid\x18\x02 \x01(\x04\x12\x0e\n\x06\x61mount\x18\x03 \x01(\x04\x12\x14\n\x0cpkhash_buyer\x18\x04 \x01(\x0c\x12\x15\n\rproof_address\x18\x05 \x01(\t\x12\x17\n\x0fproof_signature\x18\x06 \x01(\t\"V\n\x10\x42idAcceptMessage\x12\x12\n\nbid_msg_id\x18\x01 \x01(\x0c\x12\x15\n\rinitiate_txid\x18\x02 \x01(\x0c\x12\x17\n\x0f\x63ontract_script\x18\x03 \x01(\x0c\"=\n\x12OfferRevokeMessage\x12\x14\n\x0coffer_msg_id\x18\x01 \x01(\x0c\x12\x11\n\tsignature\x18\x02 \x01(\x0c\"\x8a\x01\n\rXmrBidMessage\x12\x14\n\x0coffer_msg_id\x18\x01 \x01(\x0c\x12\x12\n\ntime_valid\x18\x02 \x01(\x04\x12\x0e\n\x06\x61mount\x18\x03 \x01(\x04\x12\x0c\n\x04pkaf\x18\x04 \x01(\x0c\x12\x0c\n\x04kbvf\x18\x05 \x01(\x0c\x12\x12\n\nkbsf_dleag\x18\x06 \x01(\x0c\x12\x0f\n\x07\x64\x65st_af\x18\x07 \x01(\x0c\"T\n\x0fXmrSplitMessage\x12\x0e\n\x06msg_id\x18\x01 \x01(\x0c\x12\x10\n\x08msg_type\x18\x02 \x01(\r\x12\x10\n\x08sequence\x18\x03 \x01(\r\x12\r\n\x05\x64leag\x18\x04 \x01(\x0c\"\x80\x02\n\x13XmrBidAcceptMessage\x12\x12\n\nbid_msg_id\x18\x01 \x01(\x0c\x12\x0c\n\x04pkal\x18\x03 \x01(\x0c\x12\x0c\n\x04kbvl\x18\x04 \x01(\x0c\x12\x12\n\nkbsl_dleag\x18\x05 \x01(\x0c\x12\x11\n\ta_lock_tx\x18\x06 \x01(\x0c\x12\x18\n\x10\x61_lock_tx_script\x18\x07 \x01(\x0c\x12\x18\n\x10\x61_lock_refund_tx\x18\x08 \x01(\x0c\x12\x1f\n\x17\x61_lock_refund_tx_script\x18\t \x01(\x0c\x12\x1e\n\x16\x61_lock_refund_spend_tx\x18\n \x01(\x0c\x12\x1d\n\x15\x61l_lock_refund_tx_sig\x18\x0b \x01(\x0c\"r\n\x17XmrBidLockTxSigsMessage\x12\x12\n\nbid_msg_id\x18\x01 \x01(\x0c\x12$\n\x1c\x61\x66_lock_refund_spend_tx_esig\x18\x02 \x01(\x0c\x12\x1d\n\x15\x61\x66_lock_refund_tx_sig\x18\x03 \x01(\x0c\"X\n\x18XmrBidLockSpendTxMessage\x12\x12\n\nbid_msg_id\x18\x01 \x01(\x0c\x12\x17\n\x0f\x61_lock_spend_tx\x18\x02 \x01(\x0c\x12\x0f\n\x07kal_sig\x18\x03 \x01(\x0c\"M\n\x18XmrBidLockReleaseMessage\x12\x12\n\nbid_msg_id\x18\x01 \x01(\x0c\x12\x1d\n\x15\x61l_lock_spend_tx_esig\x18\x02 \x01(\x0c\x62\x06proto3'
|
serialized_pb=b'\n\x0emessages.proto\x12\tbasicswap\"\xf2\x03\n\x0cOfferMessage\x12\x11\n\tcoin_from\x18\x01 \x01(\r\x12\x0f\n\x07\x63oin_to\x18\x02 \x01(\r\x12\x13\n\x0b\x61mount_from\x18\x03 \x01(\x04\x12\x0c\n\x04rate\x18\x04 \x01(\x04\x12\x16\n\x0emin_bid_amount\x18\x05 \x01(\x04\x12\x12\n\ntime_valid\x18\x06 \x01(\x04\x12\x33\n\tlock_type\x18\x07 \x01(\x0e\x32 .basicswap.OfferMessage.LockType\x12\x12\n\nlock_value\x18\x08 \x01(\r\x12\x11\n\tswap_type\x18\t \x01(\r\x12\x15\n\rproof_address\x18\n \x01(\t\x12\x17\n\x0fproof_signature\x18\x0b \x01(\t\x12\x15\n\rpkhash_seller\x18\x0c \x01(\x0c\x12\x13\n\x0bsecret_hash\x18\r \x01(\x0c\x12\x15\n\rfee_rate_from\x18\x0e \x01(\x04\x12\x13\n\x0b\x66\x65\x65_rate_to\x18\x0f \x01(\x04\x12\x18\n\x10protocol_version\x18\x10 \x01(\r\"q\n\x08LockType\x12\x0b\n\x07NOT_SET\x10\x00\x12\x18\n\x14SEQUENCE_LOCK_BLOCKS\x10\x01\x12\x16\n\x12SEQUENCE_LOCK_TIME\x10\x02\x12\x13\n\x0f\x41\x42S_LOCK_BLOCKS\x10\x03\x12\x11\n\rABS_LOCK_TIME\x10\x04\"\xa6\x01\n\nBidMessage\x12\x14\n\x0coffer_msg_id\x18\x01 \x01(\x0c\x12\x12\n\ntime_valid\x18\x02 \x01(\x04\x12\x0e\n\x06\x61mount\x18\x03 \x01(\x04\x12\x14\n\x0cpkhash_buyer\x18\x04 \x01(\x0c\x12\x15\n\rproof_address\x18\x05 \x01(\t\x12\x17\n\x0fproof_signature\x18\x06 \x01(\t\x12\x18\n\x10protocol_version\x18\x07 \x01(\r\"V\n\x10\x42idAcceptMessage\x12\x12\n\nbid_msg_id\x18\x01 \x01(\x0c\x12\x15\n\rinitiate_txid\x18\x02 \x01(\x0c\x12\x17\n\x0f\x63ontract_script\x18\x03 \x01(\x0c\"=\n\x12OfferRevokeMessage\x12\x14\n\x0coffer_msg_id\x18\x01 \x01(\x0c\x12\x11\n\tsignature\x18\x02 \x01(\x0c\"\xa4\x01\n\rXmrBidMessage\x12\x14\n\x0coffer_msg_id\x18\x01 \x01(\x0c\x12\x12\n\ntime_valid\x18\x02 \x01(\x04\x12\x0e\n\x06\x61mount\x18\x03 \x01(\x04\x12\x0c\n\x04pkaf\x18\x04 \x01(\x0c\x12\x0c\n\x04kbvf\x18\x05 \x01(\x0c\x12\x12\n\nkbsf_dleag\x18\x06 \x01(\x0c\x12\x0f\n\x07\x64\x65st_af\x18\x07 \x01(\x0c\x12\x18\n\x10protocol_version\x18\x08 \x01(\r\"T\n\x0fXmrSplitMessage\x12\x0e\n\x06msg_id\x18\x01 \x01(\x0c\x12\x10\n\x08msg_type\x18\x02 \x01(\r\x12\x10\n\x08sequence\x18\x03 \x01(\r\x12\r\n\x05\x64leag\x18\x04 \x01(\x0c\"\x80\x02\n\x13XmrBidAcceptMessage\x12\x12\n\nbid_msg_id\x18\x01 \x01(\x0c\x12\x0c\n\x04pkal\x18\x03 \x01(\x0c\x12\x0c\n\x04kbvl\x18\x04 \x01(\x0c\x12\x12\n\nkbsl_dleag\x18\x05 \x01(\x0c\x12\x11\n\ta_lock_tx\x18\x06 \x01(\x0c\x12\x18\n\x10\x61_lock_tx_script\x18\x07 \x01(\x0c\x12\x18\n\x10\x61_lock_refund_tx\x18\x08 \x01(\x0c\x12\x1f\n\x17\x61_lock_refund_tx_script\x18\t \x01(\x0c\x12\x1e\n\x16\x61_lock_refund_spend_tx\x18\n \x01(\x0c\x12\x1d\n\x15\x61l_lock_refund_tx_sig\x18\x0b \x01(\x0c\"r\n\x17XmrBidLockTxSigsMessage\x12\x12\n\nbid_msg_id\x18\x01 \x01(\x0c\x12$\n\x1c\x61\x66_lock_refund_spend_tx_esig\x18\x02 \x01(\x0c\x12\x1d\n\x15\x61\x66_lock_refund_tx_sig\x18\x03 \x01(\x0c\"X\n\x18XmrBidLockSpendTxMessage\x12\x12\n\nbid_msg_id\x18\x01 \x01(\x0c\x12\x17\n\x0f\x61_lock_spend_tx\x18\x02 \x01(\x0c\x12\x0f\n\x07kal_sig\x18\x03 \x01(\x0c\"M\n\x18XmrBidLockReleaseMessage\x12\x12\n\nbid_msg_id\x18\x01 \x01(\x0c\x12\x1d\n\x15\x61l_lock_spend_tx_esig\x18\x02 \x01(\x0c\x62\x06proto3'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -59,8 +59,8 @@ _OFFERMESSAGE_LOCKTYPE = _descriptor.EnumDescriptor(
|
||||||
],
|
],
|
||||||
containing_type=None,
|
containing_type=None,
|
||||||
serialized_options=None,
|
serialized_options=None,
|
||||||
serialized_start=389,
|
serialized_start=415,
|
||||||
serialized_end=502,
|
serialized_end=528,
|
||||||
)
|
)
|
||||||
_sym_db.RegisterEnumDescriptor(_OFFERMESSAGE_LOCKTYPE)
|
_sym_db.RegisterEnumDescriptor(_OFFERMESSAGE_LOCKTYPE)
|
||||||
|
|
||||||
|
@ -178,6 +178,13 @@ _OFFERMESSAGE = _descriptor.Descriptor(
|
||||||
message_type=None, enum_type=None, containing_type=None,
|
message_type=None, enum_type=None, containing_type=None,
|
||||||
is_extension=False, extension_scope=None,
|
is_extension=False, extension_scope=None,
|
||||||
serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
|
serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
|
||||||
|
_descriptor.FieldDescriptor(
|
||||||
|
name='protocol_version', full_name='basicswap.OfferMessage.protocol_version', index=15,
|
||||||
|
number=16, type=13, cpp_type=3, label=1,
|
||||||
|
has_default_value=False, default_value=0,
|
||||||
|
message_type=None, enum_type=None, containing_type=None,
|
||||||
|
is_extension=False, extension_scope=None,
|
||||||
|
serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
|
||||||
],
|
],
|
||||||
extensions=[
|
extensions=[
|
||||||
],
|
],
|
||||||
|
@ -192,7 +199,7 @@ _OFFERMESSAGE = _descriptor.Descriptor(
|
||||||
oneofs=[
|
oneofs=[
|
||||||
],
|
],
|
||||||
serialized_start=30,
|
serialized_start=30,
|
||||||
serialized_end=502,
|
serialized_end=528,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -246,6 +253,13 @@ _BIDMESSAGE = _descriptor.Descriptor(
|
||||||
message_type=None, enum_type=None, containing_type=None,
|
message_type=None, enum_type=None, containing_type=None,
|
||||||
is_extension=False, extension_scope=None,
|
is_extension=False, extension_scope=None,
|
||||||
serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
|
serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
|
||||||
|
_descriptor.FieldDescriptor(
|
||||||
|
name='protocol_version', full_name='basicswap.BidMessage.protocol_version', index=6,
|
||||||
|
number=7, type=13, cpp_type=3, label=1,
|
||||||
|
has_default_value=False, default_value=0,
|
||||||
|
message_type=None, enum_type=None, containing_type=None,
|
||||||
|
is_extension=False, extension_scope=None,
|
||||||
|
serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
|
||||||
],
|
],
|
||||||
extensions=[
|
extensions=[
|
||||||
],
|
],
|
||||||
|
@ -258,8 +272,8 @@ _BIDMESSAGE = _descriptor.Descriptor(
|
||||||
extension_ranges=[],
|
extension_ranges=[],
|
||||||
oneofs=[
|
oneofs=[
|
||||||
],
|
],
|
||||||
serialized_start=505,
|
serialized_start=531,
|
||||||
serialized_end=645,
|
serialized_end=697,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -304,8 +318,8 @@ _BIDACCEPTMESSAGE = _descriptor.Descriptor(
|
||||||
extension_ranges=[],
|
extension_ranges=[],
|
||||||
oneofs=[
|
oneofs=[
|
||||||
],
|
],
|
||||||
serialized_start=647,
|
serialized_start=699,
|
||||||
serialized_end=733,
|
serialized_end=785,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -343,8 +357,8 @@ _OFFERREVOKEMESSAGE = _descriptor.Descriptor(
|
||||||
extension_ranges=[],
|
extension_ranges=[],
|
||||||
oneofs=[
|
oneofs=[
|
||||||
],
|
],
|
||||||
serialized_start=735,
|
serialized_start=787,
|
||||||
serialized_end=796,
|
serialized_end=848,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -405,6 +419,13 @@ _XMRBIDMESSAGE = _descriptor.Descriptor(
|
||||||
message_type=None, enum_type=None, containing_type=None,
|
message_type=None, enum_type=None, containing_type=None,
|
||||||
is_extension=False, extension_scope=None,
|
is_extension=False, extension_scope=None,
|
||||||
serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
|
serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
|
||||||
|
_descriptor.FieldDescriptor(
|
||||||
|
name='protocol_version', full_name='basicswap.XmrBidMessage.protocol_version', index=7,
|
||||||
|
number=8, type=13, cpp_type=3, label=1,
|
||||||
|
has_default_value=False, default_value=0,
|
||||||
|
message_type=None, enum_type=None, containing_type=None,
|
||||||
|
is_extension=False, extension_scope=None,
|
||||||
|
serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
|
||||||
],
|
],
|
||||||
extensions=[
|
extensions=[
|
||||||
],
|
],
|
||||||
|
@ -417,8 +438,8 @@ _XMRBIDMESSAGE = _descriptor.Descriptor(
|
||||||
extension_ranges=[],
|
extension_ranges=[],
|
||||||
oneofs=[
|
oneofs=[
|
||||||
],
|
],
|
||||||
serialized_start=799,
|
serialized_start=851,
|
||||||
serialized_end=937,
|
serialized_end=1015,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -470,8 +491,8 @@ _XMRSPLITMESSAGE = _descriptor.Descriptor(
|
||||||
extension_ranges=[],
|
extension_ranges=[],
|
||||||
oneofs=[
|
oneofs=[
|
||||||
],
|
],
|
||||||
serialized_start=939,
|
serialized_start=1017,
|
||||||
serialized_end=1023,
|
serialized_end=1101,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -565,8 +586,8 @@ _XMRBIDACCEPTMESSAGE = _descriptor.Descriptor(
|
||||||
extension_ranges=[],
|
extension_ranges=[],
|
||||||
oneofs=[
|
oneofs=[
|
||||||
],
|
],
|
||||||
serialized_start=1026,
|
serialized_start=1104,
|
||||||
serialized_end=1282,
|
serialized_end=1360,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -611,8 +632,8 @@ _XMRBIDLOCKTXSIGSMESSAGE = _descriptor.Descriptor(
|
||||||
extension_ranges=[],
|
extension_ranges=[],
|
||||||
oneofs=[
|
oneofs=[
|
||||||
],
|
],
|
||||||
serialized_start=1284,
|
serialized_start=1362,
|
||||||
serialized_end=1398,
|
serialized_end=1476,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -657,8 +678,8 @@ _XMRBIDLOCKSPENDTXMESSAGE = _descriptor.Descriptor(
|
||||||
extension_ranges=[],
|
extension_ranges=[],
|
||||||
oneofs=[
|
oneofs=[
|
||||||
],
|
],
|
||||||
serialized_start=1400,
|
serialized_start=1478,
|
||||||
serialized_end=1488,
|
serialized_end=1566,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -696,8 +717,8 @@ _XMRBIDLOCKRELEASEMESSAGE = _descriptor.Descriptor(
|
||||||
extension_ranges=[],
|
extension_ranges=[],
|
||||||
oneofs=[
|
oneofs=[
|
||||||
],
|
],
|
||||||
serialized_start=1490,
|
serialized_start=1568,
|
||||||
serialized_end=1567,
|
serialized_end=1645,
|
||||||
)
|
)
|
||||||
|
|
||||||
_OFFERMESSAGE.fields_by_name['lock_type'].enum_type = _OFFERMESSAGE_LOCKTYPE
|
_OFFERMESSAGE.fields_by_name['lock_type'].enum_type = _OFFERMESSAGE_LOCKTYPE
|
||||||
|
|
|
@ -1,4 +1,12 @@
|
||||||
|
|
||||||
|
0.0.26
|
||||||
|
==============
|
||||||
|
|
||||||
|
- Added protocol version to order and bid messages
|
||||||
|
- Moved chain start heights to bid.
|
||||||
|
- Avoid scantxoutset for decred style swaps
|
||||||
|
|
||||||
|
|
||||||
0.0.25
|
0.0.25
|
||||||
==============
|
==============
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue