Host-customized fork of https://github.com/tecnovert/basicswap/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
1.9 KiB
68 lines
1.9 KiB
# -*- coding: utf-8 -*- |
|
|
|
# Copyright (c) 2020-2022 tecnovert |
|
# Distributed under the MIT software license, see the accompanying |
|
# file LICENSE or http://www.opensource.org/licenses/mit-license.php. |
|
|
|
from basicswap.db import ( |
|
Concepts, |
|
) |
|
from basicswap.util import ( |
|
SerialiseNum, |
|
) |
|
from basicswap.script import ( |
|
OpCodes, |
|
) |
|
from basicswap.basicswap_util import ( |
|
EventLogTypes, |
|
) |
|
|
|
INITIATE_TX_TIMEOUT = 40 * 60 # TODO: make variable per coin |
|
ABS_LOCK_TIME_LEEWAY = 10 * 60 |
|
|
|
|
|
def buildContractScript(lock_val, secret_hash, pkh_redeem, pkh_refund, op_lock=OpCodes.OP_CHECKSEQUENCEVERIFY): |
|
script = bytearray([ |
|
OpCodes.OP_IF, |
|
OpCodes.OP_SIZE, |
|
0x01, 0x20, # 32 |
|
OpCodes.OP_EQUALVERIFY, |
|
OpCodes.OP_SHA256, |
|
0x20]) \ |
|
+ secret_hash \ |
|
+ bytearray([ |
|
OpCodes.OP_EQUALVERIFY, |
|
OpCodes.OP_DUP, |
|
OpCodes.OP_HASH160, |
|
0x14]) \ |
|
+ pkh_redeem \ |
|
+ bytearray([OpCodes.OP_ELSE, ]) \ |
|
+ SerialiseNum(lock_val) \ |
|
+ bytearray([ |
|
op_lock, |
|
OpCodes.OP_DROP, |
|
OpCodes.OP_DUP, |
|
OpCodes.OP_HASH160, |
|
0x14]) \ |
|
+ pkh_refund \ |
|
+ bytearray([ |
|
OpCodes.OP_ENDIF, |
|
OpCodes.OP_EQUALVERIFY, |
|
OpCodes.OP_CHECKSIG]) |
|
return script |
|
|
|
|
|
def extractScriptSecretHash(script): |
|
return script[7:39] |
|
|
|
|
|
def redeemITx(self, bid_id, session): |
|
bid, offer = self.getBidAndOffer(bid_id, session) |
|
ci_from = self.ci(offer.coin_from) |
|
|
|
txn = self.createRedeemTxn(ci_from.coin_type(), bid, for_txn_type='initiate') |
|
txid = ci_from.publishTx(bytes.fromhex(txn)) |
|
|
|
bid.initiate_tx.spend_txid = bytes.fromhex(txid) |
|
self.log.debug('Submitted initiate redeem txn %s to %s chain for bid %s', txid, ci_from.coin_name(), bid_id.hex()) |
|
self.logEvent(Concepts.BID, bid_id, EventLogTypes.ITX_REDEEM_PUBLISHED, '', session)
|
|
|