getDynamicObjectField method
Fetch the child object of a dynamic OBJECT field on parentId.
Implementation
Future<Object> getDynamicObjectField(
String parentId,
String nameType,
Uint8List nameBcs, {
List<String>? readMask,
CancelToken? cancelToken,
}) async {
final resolvedType = await resolveType(nameType, cancelToken: cancelToken);
final wrapperType = '0x2::dynamic_object_field::Wrapper<$resolvedType>';
final wrapperId = deriveDynamicFieldID(parentId, wrapperType, nameBcs);
final field = await getObject(
wrapperId,
readMask: const [
'object_id',
'version',
'digest',
'object_type',
'contents',
],
cancelToken: cancelToken,
);
// Field<Wrapper<Name>, ID> content = [parent(32)][name bcs][childId(32)].
final content = Uint8List.fromList(field.contents.value);
final start = 32 + nameBcs.length;
final childBytes = content.sublist(start, start + 32);
final childId = '0x${_hex(childBytes)}';
return getObject(childId, readMask: readMask, cancelToken: cancelToken);
}