Skip to content

Commit 346c53a

Browse files
committed
Adding decrypt error to contract query
1 parent 0af824e commit 346c53a

File tree

1 file changed

+31
-18
lines changed

1 file changed

+31
-18
lines changed

secret_sdk/client/lcd/api/wasm.py

Lines changed: 31 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import base64
22
import json
3+
import re
34
from typing import Any, Optional
5+
from secret_sdk.exceptions import LCDResponseError
46

57
from secret_sdk.client.lcd.api._base import BaseAsyncAPI, sync_bind
68
from secret_sdk.core.coins import Coins
@@ -62,7 +64,6 @@ async def code_hash_by_code_id(self, code_id: int) -> dict:
6264
res = await self._c._get(f"/compute/v1beta1/code_hash/by_code_id/{code_id}")
6365
return res
6466

65-
6667
async def contract_hash(self, contract_address: str) -> str:
6768
"""Fetches information about an instantiated contract.
6869
@@ -81,7 +82,7 @@ async def contract_hash(self, contract_address: str) -> str:
8182
return _contract_code_hash[contract_address]
8283

8384
async def contract_query(
84-
self, contract_address: str, query: dict, contract_code_hash: Optional[str] = None,
85+
self, contract_address: str, query: dict, contract_code_hash: Optional[str] = None,
8586
height: Optional[int] = 0, timeout: Optional[int] = 15, retry_attempts: Optional[int] = 1
8687
) -> Any:
8788
"""Runs a QueryMsg on a contract.
@@ -114,21 +115,33 @@ async def contract_query(
114115
params['block_height'] = str(height)
115116

116117
query_path = f"/compute/v1beta1/query/{contract_address}"
117-
query_result = await BaseAsyncAPI._try_await(
118-
self._c._get(query_path, params=params, timeout=timeout, retry_attempts=retry_attempts)
119-
)
118+
try:
119+
query_result = await BaseAsyncAPI._try_await(
120+
self._c._get(query_path, params=params, timeout=timeout, retry_attempts=retry_attempts)
121+
)
122+
except LCDResponseError as lcd_error:
123+
# trying to decrypt error
124+
error_json = json.loads(lcd_error.message.replace("'", '"'))
125+
error_msg = error_json.get('message','')
126+
encrypted_error = re.findall('encrypted: (.+?):', error_msg)
127+
if encrypted_error:
128+
decrypted_error = self._c.encrypt_utils.decrypt(base64.b64decode(bytes(encrypted_error[0], 'utf-8')), nonce)
129+
lcd_error.message = decrypted_error.decode('utf-8')
130+
raise lcd_error
131+
except:
132+
raise
120133

121134
encoded_result = base64.b64decode(bytes(query_result["data"], "utf-8"))
122135
decrypted = self._c.encrypt_utils.decrypt(encoded_result, nonce)
123136
return json.loads(base64.b64decode(decrypted))
124137

125138
async def contract_execute_msg(
126-
self,
127-
sender_address: AccAddress,
128-
contract_address: AccAddress,
129-
handle_msg: dict,
130-
transfer_amount: Optional[Coins] = None,
131-
contract_code_hash: Optional[str] = None
139+
self,
140+
sender_address: AccAddress,
141+
contract_address: AccAddress,
142+
handle_msg: dict,
143+
transfer_amount: Optional[Coins] = None,
144+
contract_code_hash: Optional[str] = None
132145
) -> MsgExecuteContract:
133146
if not contract_code_hash:
134147
if contract_address not in _contract_code_hash:
@@ -183,7 +196,7 @@ def code_hash_by_code_id(self, code_info: int) -> dict:
183196

184197
@sync_bind(AsyncWasmAPI.contract_query)
185198
def contract_query(
186-
self, contract_address: str, query_msg: dict, contract_code_hash: Optional[str] = None,
199+
self, contract_address: str, query_msg: dict, contract_code_hash: Optional[str] = None,
187200
height: Optional[int] = 0, timeout: Optional[int] = 15, retry_attempts: Optional[int] = 1
188201
) -> Any:
189202
pass
@@ -192,12 +205,12 @@ def contract_query(
192205

193206
@sync_bind(AsyncWasmAPI.contract_execute_msg)
194207
def contract_execute_msg(
195-
self,
196-
sender_address: AccAddress,
197-
contract_address: AccAddress,
198-
handle_msg: dict,
199-
transfer_amount: Coins,
200-
contract_code_hash: str
208+
self,
209+
sender_address: AccAddress,
210+
contract_address: AccAddress,
211+
handle_msg: dict,
212+
transfer_amount: Coins,
213+
contract_code_hash: str
201214
) -> MsgExecuteContract:
202215
pass
203216

0 commit comments

Comments
 (0)