applyResolvedData method
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];
}
}
}