applyResolvedData method

void applyResolvedData(
  1. TransactionData resolved
)

Fills unset fields from a node-resolved copy; throws on a mismatched input.

Implementation

void applyResolvedData(TransactionData resolved) {
  sender ??= resolved.sender;
  expiration ??= resolved.expiration;
  gasData.budget ??= resolved.gasData.budget;
  gasData.owner ??= resolved.gasData.owner;
  gasData.payment ??= resolved.gasData.payment;
  gasData.price ??= resolved.gasData.price;

  final resolvedInputs = resolved.inputs ?? const [];
  for (var i = 0; i < inputs.length; i++) {
    final input = inputs[i];
    if (input['UnresolvedPure'] != null) {
      if (resolvedInputs[i]['Pure'] == null) _mismatch(i, resolvedInputs[i]);
      inputs[i] = resolvedInputs[i];
    } else if (input['UnresolvedObject'] != null) {
      final original = input['UnresolvedObject'];
      final object = resolvedInputs[i]['Object'];
      final owned = object?['ImmOrOwnedObject'] ?? object?['Receiving'];
      final shared = object?['SharedObject'];
      String? text(dynamic value) => value?.toString();
      bool sameId(dynamic id) =>
          normalizeSuiAddress(original['objectId']) ==
          normalizeSuiAddress(id);

      final matches = owned != null
          ? sameId(owned['objectId']) &&
                (original['version'] == null ||
                    text(original['version']) == text(owned['version'])) &&
                (original['digest'] == null ||
                    original['digest'] == owned['digest']) &&
                // shared-object fields can't resolve to an owned object
                original['mutable'] == null &&
                original['initialSharedVersion'] == null
          : shared != null &&
                sameId(shared['objectId']) &&
                (original['initialSharedVersion'] == null ||
                    text(original['initialSharedVersion']) ==
                        text(shared['initialSharedVersion'])) &&
                (original['mutable'] == null ||
                    original['mutable'] == shared['mutable']) &&
                original['version'] == null &&
                original['digest'] == null;
      if (!matches) _mismatch(i, resolvedInputs[i]);
      inputs[i] = resolvedInputs[i];
    }
  }
}