Skip to content

Commit a31ad88

Browse files
authored
Merge pull request #234 from swapper-pegasus/223-btc-get-transaction-performance
BTC Get Transaction async
2 parents b044404 + 7ec46b0 commit a31ad88

2 files changed

Lines changed: 49 additions & 36 deletions

File tree

Connector/btc/apirpc.py

Lines changed: 39 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -49,12 +49,14 @@ async def getAddressHistory(id, params, config):
4949

5050
mid = (left + right) // 2
5151

52-
tx = await getTransaction(
53-
id=int(time.time()),
54-
params={
55-
"txHash": txs[mid]
56-
},
57-
config=config
52+
tx = await asyncio.ensure_future(
53+
getTransaction(
54+
id=int(time.time()),
55+
params={
56+
"txHash": txs[mid]
57+
},
58+
config=config
59+
)
5860
)
5961

6062
if tx["transaction"]["blockNumber"]:
@@ -459,14 +461,16 @@ async def getTransactionHex(id, params, config):
459461
if err is not None:
460462
raise error.RpcBadRequestError(id=id, message=err.message)
461463

462-
rawTransaction = await RPCConnector.request(
463-
endpoint=config.bitcoincoreRpcEndpoint,
464-
id=id,
465-
method=GET_RAW_TRANSACTION_METHOD,
466-
params=[
467-
params["txHash"],
468-
False if "verbose" not in params else params["verbose"]
469-
]
464+
rawTransaction = await asyncio.ensure_future(
465+
RPCConnector.request(
466+
endpoint=config.bitcoincoreRpcEndpoint,
467+
id=id,
468+
method=GET_RAW_TRANSACTION_METHOD,
469+
params=[
470+
params["txHash"],
471+
False if "verbose" not in params else params["verbose"]
472+
]
473+
)
470474
)
471475

472476
response = {"rawTransaction": rawTransaction}
@@ -491,30 +495,36 @@ async def getTransaction(id, params, config):
491495
raise error.RpcBadRequestError(id=id, message=err.message)
492496

493497
try:
494-
transaction = await getTransactionHex(
495-
id=id,
496-
params={
497-
"txHash": params["txHash"],
498-
"verbose": True
499-
},
500-
config=config
498+
transaction = await asyncio.ensure_future(
499+
getTransactionHex(
500+
id=id,
501+
params={
502+
"txHash": params["txHash"],
503+
"verbose": True
504+
},
505+
config=config
506+
)
501507
)
502508

503509
# Check if transaction is confirmed, and obtain block number
504510
blockNumber = timestamp = None
505511
if "blockhash" in transaction["rawTransaction"]:
506-
transactionBlock = await getBlockByHash(
507-
id=id,
508-
params={
509-
"blockHash": transaction["rawTransaction"]["blockhash"],
510-
"verbosity": VERBOSITY_DEFAULT_MODE
511-
},
512-
config=config
512+
transactionBlock = await asyncio.ensure_future(
513+
getBlockByHash(
514+
id=id,
515+
params={
516+
"blockHash": transaction["rawTransaction"]["blockhash"],
517+
"verbosity": VERBOSITY_DEFAULT_MODE
518+
},
519+
config=config
520+
)
513521
)
514522
blockNumber = transactionBlock["block"]["height"]
515523
timestamp = transactionBlock["block"]["time"]
516524

517-
transactionDetails = await utils.decodeTransactionDetails(transaction["rawTransaction"], id, config)
525+
transactionDetails = await asyncio.ensure_future(
526+
utils.decodeTransactionDetails(transaction["rawTransaction"], id, config)
527+
)
518528

519529
# Converting all transaction details to str
520530

Connector/btc/utils.py

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
#!/usr/bin/python3
2+
import asyncio
23
import hashlib
34
import base58
45
import bech32
@@ -112,13 +113,15 @@ async def decodeTransactionDetails(txDecoded, id, config):
112113
)
113114
break
114115

115-
transaction = await apirpc.getTransactionHex(
116-
id=id,
117-
params={
118-
"txHash": txInput["txid"],
119-
"verbose": True
120-
},
121-
config=config
116+
transaction = await asyncio.ensure_future(
117+
apirpc.getTransactionHex(
118+
id=id,
119+
params={
120+
"txHash": txInput["txid"],
121+
"verbose": True
122+
},
123+
config=config
124+
)
122125
)
123126

124127
for txOutput in transaction["rawTransaction"]["vout"]:

0 commit comments

Comments
 (0)