resolveType static method

SolType resolveType(
  1. String type, [
  2. List? components
])

Implementation

static SolType resolveType(String type, [List<dynamic>? components]) {
  if (type.endsWith(']')) {
    final bracketStart = type.lastIndexOf('[');
    final inner = type.substring(0, bracketStart);
    final sizeStr = type.substring(bracketStart + 1, type.length - 1);
    final elementType = resolveType(inner, components);
    if (sizeStr.isEmpty) {
      return SolArray(elementType);
    }
    return SolArray(elementType, int.parse(sizeStr));
  }

  if (type == 'tuple') {
    final comps = (components ?? []).map((c) {
      final m = c as Map<String, dynamic>;
      return resolveType(m['type'] as String, m['components'] as List?);
    }).toList();
    final names = (components ?? [])
        .map((c) => (c as Map<String, dynamic>)['name'] as String? ?? '')
        .toList();
    return SolTuple(comps, names: names);
  }

  if (type == 'address') return SolAddress();
  if (type == 'bool') return SolBool();
  if (type == 'string') return SolString();
  if (type == 'bytes') return SolBytes();

  if (type.startsWith('uint')) {
    final bits = type.length > 4 ? int.parse(type.substring(4)) : 256;
    return SolUint(bits);
  }
  if (type.startsWith('int')) {
    final bits = type.length > 3 ? int.parse(type.substring(3)) : 256;
    return SolInt(bits);
  }
  if (type.startsWith('bytes')) {
    final len = int.parse(type.substring(5));
    return SolFixedBytes(len);
  }

  throw ArgumentError('Unknown Solidity type: $type');
}