icon-project / icon-sdk-python

ICON SDK for Python
45 stars 45 forks source link

estimate_step with DepositTransaction raise Exception #75

Closed yakkle closed 1 year ago

yakkle commented 1 year ago

estimate_step does not support DepositTransaction.

reproduce steps:

>>> deposit_tx = (DepositTransaction()
...       .from_("hx...")
...       .to("cx...")
...       .value(100000000000000000000)
...       .nid(3)
...       .action("add")
...       .build())
>>> icon_service.esimate_step(deposit_tx)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "iconsdk/icon_service.py", line 354, in estimate_step
    result = self.__provider.make_request('debug_estimateStep', params, full_response)
  File "iconsdk/providers/http_provider.py", line 124, in make_request
    return self._return_custom_response(response, full_response)
  File "iconsdk/providers/http_provider.py", line 136, in _return_custom_response
    raise JSONRPCException(content["error"])
iconsdk.exception.JSONRPCException: {'code': -32000, 'message': 'ServerError: E0006:InvalidTransaction'

icon_service.estimate_step does not process when data_type is deposit. https://github.com/icon-project/icon-sdk-python/blob/v2.3.0/iconsdk/icon_service.py#L349-L352

    def estimate_step(self, transaction: Transaction, full_response: bool = False) -> int:
        ...
        if transaction.data_type in ('deploy', 'call'):
            params["data"] = generate_data_value(transaction)
        elif transaction.data_type == 'message':
            params["data"] = transaction.data

        result = self.__provider.make_request('debug_estimateStep', params, full_response)
        return result if full_response else int(result, 16)
sink772 commented 1 year ago

Fixed by #77