Skip to content

Commit

Permalink
Remove exception invalid method name in tx-builder (#429)
Browse files Browse the repository at this point in the history
  • Loading branch information
falvaradorodriguez authored Jun 28, 2024
1 parent f343bb8 commit d59dc92
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 26 deletions.
4 changes: 0 additions & 4 deletions src/safe_cli/tx_builder/exceptions.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,3 @@ class SoliditySyntaxError(Exception):

class TxBuilderEncodingError(Exception):
pass


class InvalidContratMethodError(Exception):
pass
29 changes: 13 additions & 16 deletions src/safe_cli/tx_builder/tx_builder_file_decoder.py
Original file line number Diff line number Diff line change
@@ -1,17 +1,13 @@
import dataclasses
import json
import re
from typing import Any, Dict, List
from typing import Any, Dict, List, Optional

from eth_abi import encode as encode_abi
from hexbytes import HexBytes
from web3 import Web3

from .exceptions import (
InvalidContratMethodError,
SoliditySyntaxError,
TxBuilderEncodingError,
)
from .exceptions import SoliditySyntaxError, TxBuilderEncodingError

NON_VALID_CONTRACT_METHODS = ["receive", "fallback"]

Expand All @@ -33,7 +29,7 @@ def _parse_types_to_encoding_types(contract_fields: List[Dict[str, Any]]) -> Lis

def encode_contract_method_to_hex_data(
contract_method: Dict[str, Any], contract_fields_values: Dict[str, Any]
) -> HexBytes:
) -> Optional[HexBytes]:
contract_method_name = contract_method.get("name") if contract_method else None
contract_fields = contract_method.get("inputs", []) if contract_method else []

Expand All @@ -43,9 +39,7 @@ def encode_contract_method_to_hex_data(
)

if not is_valid_contract_method:
raise InvalidContratMethodError(
f"Invalid contract method {contract_method_name}"
)
return None

try:
encoding_types = _parse_types_to_encoding_types(contract_fields)
Expand Down Expand Up @@ -223,17 +217,20 @@ def convert_to_proposed_transactions(
) -> List[SafeProposedTx]:
proposed_transactions = []
for index, transaction in enumerate(batch_file["transactions"]):
data_value = transaction.get("data")
if data_value is None:
encoded_data = encode_contract_method_to_hex_data(
transaction.get("contractMethod"),
transaction.get("contractInputsValues"),
)
data_value = encoded_data.hex() if encoded_data is not None else "0x"

proposed_transactions.append(
SafeProposedTx(
id=index,
to=transaction.get("to"),
value=transaction.get("value"),
data=transaction.get("data")
or encode_contract_method_to_hex_data(
transaction.get("contractMethod"),
transaction.get("contractInputsValues"),
).hex()
or "0x",
data=data_value,
)
)
return proposed_transactions
9 changes: 3 additions & 6 deletions tests/test_tx_builder_file_decoder.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,7 @@
from hexbytes import HexBytes
from web3 import Web3

from safe_cli.tx_builder.exceptions import (
InvalidContratMethodError,
SoliditySyntaxError,
TxBuilderEncodingError,
)
from safe_cli.tx_builder.exceptions import SoliditySyntaxError, TxBuilderEncodingError
from safe_cli.tx_builder.tx_builder_file_decoder import (
SafeProposedTx,
_get_base_field_type,
Expand Down Expand Up @@ -191,8 +187,9 @@ def test_encode_contract_method_to_hex_data(self):
# Test invalid contrat method
contract_method = {"name": "receive", "inputs": []}
contract_fields_values = {}
with self.assertRaises(InvalidContratMethodError):
self.assertIsNone(
encode_contract_method_to_hex_data(contract_method, contract_fields_values)
)

# Test invalid value
contract_method = {
Expand Down

0 comments on commit d59dc92

Please sign in to comment.