def call_func(method:, params: [], tx: {}) # rubocop:disable Naming/UncommunicativeMethodParamName
      data, output_types = function_data_with_ot(method, *params)
      resp = @rpc.call_rpc(:call, params: [tx.merge(data: data, to: address), "latest"])
      result = resp["result"]

      data = [Utils.remove_hex_prefix(result)].pack("H*")
      return if data.nil?

      re = decode_abi output_types, data
      re.length == 1 ? re.first : re
    end
def call_func(method:, params: [], tx: {}) # rubocop:disable Naming/UncommunicativeMethodParamName
      data, output_types = function_data_with_ot(method, *params)
      resp = @rpc.call_rpc(:call, params: [tx.merge(data: data, to: address), "latest"])
      result = resp["result"]

      data = [Utils.remove_hex_prefix(result)].pack("H*")
      return if data.nil?

      re = decode_abi output_types, data
      re.length == 1 ? re.first : re
    end
call contract functions by rpc `call` method

 @param method [Symbol | String] the method name you call
 @param params [Array] the method params you call
 @param tx [Hash] see rpc `call` doc for more info

 @return [any]