getDynamicObjectField method

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

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);
}