Skip to content
This repository was archived by the owner on May 16, 2019. It is now read-only.

Commit 2d52c8a

Browse files
committed
Check for minimum price before purchase
1 parent e649a30 commit 2d52c8a

File tree

4 files changed

+22
-11
lines changed

4 files changed

+22
-11
lines changed

market/contracts.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
from bitcoin.core.script import CScript, OP_2, OP_3, OP_CHECKMULTISIG
1515
from bitcoin.wallet import P2SHBitcoinAddress, P2PKHBitcoinAddress
1616
from collections import OrderedDict
17-
from config import DATA_FOLDER
17+
from config import DATA_FOLDER, TRANSACTION_FEE
1818
from copy import deepcopy
1919
from datetime import datetime
2020
from dht.utils import digest
@@ -410,6 +410,9 @@ def add_purchase_info(self,
410410
shipping_amount = float("{0:.8f}".format(float(price) / float(conversion_rate))) * quantity
411411
amount_to_pay += shipping_amount
412412

413+
if round(amount_to_pay, 8) < round(TRANSACTION_FEE / float(100000000), 8):
414+
raise Exception("Contract price is below transaction fee.")
415+
413416
order_json["buyer_order"]["order"]["payment"]["amount"] = round(amount_to_pay, 8)
414417
self.contract["buyer_order"] = order_json["buyer_order"]
415418

market/network.py

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -833,16 +833,20 @@ def history_fetched(ec, history):
833833

834834
outputs.append({'value': moderator_fee, 'address': moderator_address})
835835
dispute_json["dispute_resolution"]["resolution"]["moderator_address"] = moderator_address
836-
dispute_json["dispute_resolution"]["resolution"]["moderator_fee"] = moderator_fee
837-
dispute_json["dispute_resolution"]["resolution"]["transaction_fee"] = TRANSACTION_FEE
836+
dispute_json["dispute_resolution"]["resolution"]["moderator_fee"] = \
837+
round(moderator_fee / float(100000000), 8)
838+
dispute_json["dispute_resolution"]["resolution"]["transaction_fee"] = \
839+
round(TRANSACTION_FEE / float(100000000), 8)
838840
if float(buyer_percentage) > 0:
839841
amt = int(float(buyer_percentage) * satoshis)
840-
dispute_json["dispute_resolution"]["resolution"]["buyer_payout"] = amt
842+
dispute_json["dispute_resolution"]["resolution"]["buyer_payout"] = \
843+
round(amt / float(100000000), 8)
841844
outputs.append({'value': amt,
842845
'address': buyer_address})
843846
if float(vendor_percentage) > 0:
844847
amt = int(float(vendor_percentage) * satoshis)
845-
dispute_json["dispute_resolution"]["resolution"]["vendor_payout"] = amt
848+
dispute_json["dispute_resolution"]["resolution"]["vendor_payout"] = \
849+
round(amt / float(100000000), 8)
846850
outputs.append({'value': amt,
847851
'address': vendor_address})
848852

@@ -916,15 +920,18 @@ def release_funds(self, order_id):
916920

917921
outputs = []
918922

919-
outputs.append({'value': int(contract["dispute_resolution"]["resolution"]["moderator_fee"]),
923+
outputs.append({'value': int(float(contract["dispute_resolution"]
924+
["resolution"]["moderator_fee"]) * 100000000),
920925
'address': contract["dispute_resolution"]["resolution"]["moderator_address"]})
921926

922927
if "buyer_payout" in contract["dispute_resolution"]["resolution"]:
923-
outputs.append({'value': int(contract["dispute_resolution"]["resolution"]["buyer_payout"]),
928+
outputs.append({'value': int(float(contract["dispute_resolution"]
929+
["resolution"]["buyer_payout"]) * 100000000),
924930
'address': buyer_address})
925931

926932
if "vendor_payout" in contract["dispute_resolution"]["resolution"]:
927-
outputs.append({'value': int(contract["dispute_resolution"]["resolution"]["vendor_payout"]),
933+
outputs.append({'value': int(float(contract["dispute_resolution"]
934+
["resolution"]["vendor_payout"]) * 100000000),
928935
'address': vendor_address})
929936

930937
tx = BitcoinTransaction.make_unsigned(outpoints, outputs)
@@ -1025,7 +1032,7 @@ def refund(self, order_id):
10251032
refund_json["refund"]["order_id"] = order_id
10261033
if "moderator" in contract["buyer_order"]["order"]:
10271034
sigs = tx.create_signature(vendor_priv, redeem_script)
1028-
refund_json["refund"]["value"] = tx.get_out_value()
1035+
refund_json["refund"]["value"] = round(tx.get_out_value() / float(100000000), 8)
10291036
refund_json["refund"]["signature(s)"] = sigs
10301037
else:
10311038
tx.sign(vendor_priv)

market/protocol.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -369,9 +369,10 @@ def rpc_refund(self, sender, pubkey, encrypted):
369369
outpoints = pickle.loads(self.db.sales.get_outpoint(order_id))
370370
refund_address = order["buyer_order"]["order"]["refund_address"]
371371
redeem_script = order["buyer_order"]["order"]["payment"]["redeem_script"]
372+
value = int(float(refund_json["refund"]["value"]) * 100000000)
372373
tx = BitcoinTransaction.make_unsigned(outpoints, refund_address,
373374
testnet=self.multiplexer.testnet,
374-
out_value=long(refund_json["refund"]["value"]))
375+
out_value=value)
375376
chaincode = order["buyer_order"]["order"]["payment"]["chaincode"]
376377
masterkey_b = bitcointools.bip32_extract_key(KeyChain(self.db).bitcoin_master_privkey)
377378
buyer_priv = derive_childkey(masterkey_b, chaincode, bitcointools.MAINNET_PRIVATE)

openbazaard.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ def start_server(keys, first_startup=False):
7272

7373
def on_bootstrap_complete(resp):
7474
logger.info("bootstrap complete")
75-
mserver.get_messages(mlistener)
75+
task.LoopingCall(mserver.get_messages, mlistener).start(3600)
7676
task.LoopingCall(check_unfunded_for_payment, db, libbitcoin_client, nlistener, TESTNET).start(600)
7777

7878
protocol = OpenBazaarProtocol(db, (ip_address, port), nat_type, testnet=TESTNET,

0 commit comments

Comments
 (0)