transactionDataToGrpcTransaction function

Transaction transactionDataToGrpcTransaction(
  1. TransactionData data
)

Implementation

grpc_transaction.Transaction transactionDataToGrpcTransaction(
  TransactionData data,
) {
  final inputs = data.inputs?.map(callArgToGrpcInput).toList();

  final commands = data.commands?.map(commandToGrpcCommand).toList();

  final tx = grpc_transaction.Transaction(
    version: 1,
    sender: data.sender,
    kind: grpc_transaction.TransactionKind(
      kind: grpc_transaction.TransactionKind_Kind.PROGRAMMABLE_TRANSACTION,
      programmableTransaction: (grpc_transaction.ProgrammableTransaction()
        ..inputs.addAll(inputs ?? [])
        ..commands.addAll(commands ?? [])),
    ),
    gasPayment: grpc_transaction.GasPayment(
      objects: data.gasData.payment
          ?.map(
            (ref) => ObjectReference()
              ..objectId = ref.objectId
              ..version = Int64.parseRadix(ref.version.toString(), 10)
              ..digest = ref.digest,
          )
          .toList(),
      owner: data.gasData.owner ?? data.sender,
      price: data.gasData.price != null
          ? Int64.parseRadix(data.gasData.price.toString(), 10)
          : null,
      budget: data.gasData.budget != null
          ? Int64.parseRadix(data.gasData.budget.toString(), 10)
          : null,
    ),
  );

  if (data.expiration != null) {
    final validity = data.expiration!.validity;
    final window = validity ?? data.expiration!.validDuring;
    if (window != null) {
      final allowedProposers = validity?['allowedProposers'];
      tx.expiration = grpc_transaction.TransactionExpiration(
        kind: validity != null ? .VALIDITY : .VALID_DURING,
        minEpoch: _int64OrNull(window['minEpoch']),
        epoch: _int64OrNull(window['maxEpoch']),
        minTimestamp: _grpcTimestampOrNull(window['minTimestamp']),
        maxTimestamp: _grpcTimestampOrNull(window['maxTimestamp']),
        chain: window['chain'] as String,
        nonce: window['nonce'] as int,
        allowedProposers: allowedProposers == null
            ? null
            : grpc_transaction.AllowedProposers(
                epoch: Int64.parseRadix(
                  allowedProposers['epoch'].toString(),
                  10,
                ),
                proposers: SuiBcs.assertAllowedProposersStrictlyIncreasing(
                  allowedProposers['proposers'] as List,
                ).cast<int>(),
              ),
      );
    } else if (data.expiration?.epoch == null) {
      tx.expiration = (grpc_transaction.TransactionExpiration()
        ..kind = grpc_transaction
            .TransactionExpiration_TransactionExpirationKind
            .NONE);
    } else {
      tx.expiration = (grpc_transaction.TransactionExpiration()
        ..kind = grpc_transaction
            .TransactionExpiration_TransactionExpirationKind
            .EPOCH
        ..epoch = Int64.parseRadix(data.expiration!.epoch.toString(), 10));
    }
  }

  return tx;
}