getDynamicObjectField method

Future<Object> getDynamicObjectField(
  1. String parentId,
  2. String nameType,
  3. Uint8List nameBcs, {
  4. List<String>? readMask,
})

Fetch the child object of a dynamic OBJECT field on parentId.

Implementation

Future<Object> getDynamicObjectField(
  String parentId,
  String nameType,
  Uint8List nameBcs, {
  List<String>? readMask,
}) async {
  final resolvedType = await resolveType(nameType);
  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',
  ]);
  // 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);
}