simulateTransaction method
Future<TransactionResponse>
simulateTransaction(
- Transaction transactionBlock, {
- TransactionIncludeOptions? include,
- bool? doGasSelection,
- bool? checksEnabled,
override
Simulates transactionBlock without signing; results surface via
effects, events, and command outputs.
Implementation
@override
Future<TransactionResponse> simulateTransaction(
sui_dart.Transaction transactionBlock, {
TransactionIncludeOptions? include,
bool? doGasSelection,
bool? checksEnabled,
}) async {
final readMask = _simulateReadMask(include);
// gRPC conversion is synchronous, so intents must resolve before it.
if (!transactionBlock.isPreparedForSerialization()) {
await transactionBlock.prepareForSerialization(
sui_dart.SerializeTransactionOptions(client: this),
);
}
// An empty payment means address-balance gas, so the node must select gas.
final payment = transactionBlock.getData().gasData.payment;
final gasSelection = doGasSelection ?? (payment != null && payment.isEmpty);
final response = await _client.transactionExecutionService
.simulateTransaction(
SimulateTransactionRequest(
transaction: transactionBlock.toGrpcTransaction(),
readMask: readMask,
doGasSelection: gasSelection,
checks: checksEnabled == false
? SimulateTransactionRequest_TransactionChecks.DISABLED
: SimulateTransactionRequest_TransactionChecks.ENABLED,
),
);
var result = _parseTransaction(response.transaction, include);
if (include?.commandResults == true) {
result = result.copyWith(
commandResults: response.commandOutputs.map((cmdResult) {
return CommandResult(
returnValues: cmdResult.returnValues.map((output) {
return CommandOutput(
bcs: output.hasValue()
? Uint8List.fromList(output.value.value)
: Uint8List(0),
);
}).toList(),
mutatedReferences: cmdResult.mutatedByRef.map((output) {
return CommandOutput(
bcs: output.hasValue()
? Uint8List.fromList(output.value.value)
: Uint8List(0),
);
}).toList(),
);
}).toList(),
);
}
return result;
}