Skip to content

Commit 98948fb

Browse files
committed
[blockchain] Fetch data request collateral and fee from the database without building a DataRequest object
1 parent 85187b6 commit 98948fb

File tree

3 files changed

+56
-48
lines changed

3 files changed

+56
-48
lines changed

blockchain/transactions/commit.py

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
from blockchain.transactions.data_request import DataRequest
1+
from blockchain.transactions.data_request import (
2+
get_collateral_for_data_request,
3+
get_commit_and_reveal_fee_for_data_request,
4+
)
25
from blockchain.transactions.transaction import Transaction
36
from schemas.component.commit_schema import (
47
CommitTransactionForApi,
@@ -23,8 +26,9 @@ def process_transaction(self, call_from):
2326
self.txn_details["data_request"] = self.json_txn["body"]["dr_pointer"]
2427

2528
# Get the reward for the miner of this transaction
26-
fee = DataRequest().get_commit_and_reveal_fee_for_data_request(
27-
self.txn_details["data_request"]
29+
fee = get_commit_and_reveal_fee_for_data_request(
30+
self.database,
31+
self.txn_details["data_request"],
2832
)
2933
if "fee" in fee:
3034
self.txn_details["fee"] = fee["fee"]
@@ -36,8 +40,9 @@ def process_transaction(self, call_from):
3640
)
3741

3842
# Fetch collateral from database since we cannot use output / input difference anymore to calculate it
39-
collateral = DataRequest().get_collateral_for_data_request(
40-
self.txn_details["data_request"]
43+
collateral = get_collateral_for_data_request(
44+
self.database,
45+
self.txn_details["data_request"],
4146
)
4247
if "collateral" in collateral:
4348
self.txn_details["collateral"] = collateral["collateral"]

blockchain/transactions/data_request.py

Lines changed: 42 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -301,46 +301,6 @@ def get_transaction_from_database(self, data_request_hash):
301301
else:
302302
return {"error": "transaction not found"}
303303

304-
def get_commit_and_reveal_fee_for_data_request(self, data_request_hash):
305-
sql = """
306-
SELECT
307-
data_request_txns.commit_and_reveal_fee
308-
FROM
309-
data_request_txns
310-
WHERE
311-
data_request_txns.txn_hash=%s
312-
LIMIT 1
313-
"""
314-
result = self.database.sql_return_one(
315-
sql,
316-
parameters=[bytearray.fromhex(data_request_hash)],
317-
)
318-
319-
if result:
320-
return {"fee": result[0]}
321-
else:
322-
return {"error": "transaction not found"}
323-
324-
def get_collateral_for_data_request(self, data_request_hash):
325-
sql = """
326-
SELECT
327-
data_request_txns.collateral
328-
FROM
329-
data_request_txns
330-
WHERE
331-
data_request_txns.txn_hash=%s
332-
LIMIT 1
333-
"""
334-
result = self.database.sql_return_one(
335-
sql,
336-
parameters=[bytearray.fromhex(data_request_hash)],
337-
)
338-
339-
if result:
340-
return {"collateral": result[0]}
341-
else:
342-
return {"error": "transaction not found"}
343-
344304
def calculate_fees(
345305
self,
346306
witnesses,
@@ -360,6 +320,48 @@ def calculate_fees(
360320
return dro_fee, miner_fee
361321

362322

323+
def get_commit_and_reveal_fee_for_data_request(database, data_request_hash):
324+
sql = """
325+
SELECT
326+
data_request_txns.commit_and_reveal_fee
327+
FROM
328+
data_request_txns
329+
WHERE
330+
data_request_txns.txn_hash=%s
331+
LIMIT 1
332+
"""
333+
result = database.sql_return_one(
334+
sql,
335+
parameters=[bytearray.fromhex(data_request_hash)],
336+
)
337+
338+
if result:
339+
return {"fee": result[0]}
340+
else:
341+
return {"error": "transaction not found"}
342+
343+
344+
def get_collateral_for_data_request(database, data_request_hash):
345+
sql = """
346+
SELECT
347+
data_request_txns.collateral
348+
FROM
349+
data_request_txns
350+
WHERE
351+
data_request_txns.txn_hash=%s
352+
LIMIT 1
353+
"""
354+
result = database.sql_return_one(
355+
sql,
356+
parameters=[bytearray.fromhex(data_request_hash)],
357+
)
358+
359+
if result:
360+
return {"collateral": result[0]}
361+
else:
362+
return {"error": "transaction not found"}
363+
364+
363365
def build_retrieval(kinds, urls, all_headers, bodies, scripts):
364366
# Add kinds, urls, bodies and translate scripts
365367
# psycopg does not handle arrays of enums very well

blockchain/transactions/reveal.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import cbor2
44

5-
from blockchain.transactions.data_request import DataRequest
5+
from blockchain.transactions.data_request import get_commit_and_reveal_fee_for_data_request
66
from blockchain.transactions.transaction import Transaction
77
from schemas.component.reveal_schema import (
88
RevealTransactionForApi,
@@ -28,8 +28,9 @@ def process_transaction(self, call_from):
2828
self.txn_details["data_request"] = self.json_txn["body"]["dr_pointer"]
2929

3030
# Get the reward for the miner of this transaction
31-
fee = DataRequest().get_commit_and_reveal_fee_for_data_request(
32-
self.txn_details["data_request"]
31+
fee = get_commit_and_reveal_fee_for_data_request(
32+
self.database,
33+
self.txn_details["data_request"],
3334
)
3435
if "fee" in fee:
3536
self.txn_details["fee"] = fee["fee"]

0 commit comments

Comments
 (0)