resolveType static method
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');
}