build method

Uint8List build({
  1. int? maxSizeBytes,
  2. String? sender,
  3. GasConfig? gasConfig,
  4. TransactionExpiration? expiration,
  5. bool onlyTransactionKind = false,
})

Implementation

Uint8List build({
	int? maxSizeBytes,
	String? sender,
    GasConfig? gasConfig,
    TransactionExpiration? expiration,
	bool onlyTransactionKind = false,
}) {
	// Resolve inputs down to values:
	final inputs = this.inputs.map((input) => input["value"]);

	final kind = {
		"ProgrammableTransaction": {
			"inputs": inputs,
			"transactions": transactions,
		},
	};

	if (onlyTransactionKind) {
      final options = BcsWriterOptions(maxSize: maxSizeBytes);
		return builder.ser('TransactionKind', kind, options).toBytes();
	}

	final expirationValue = expiration ?? this.expiration;
	final senderValue = sender ?? this.sender;

    final gasConfigValue = this.gasConfig.toJson();
    if (gasConfig != null) {
      gasConfig.toJson().forEach((key, value) {
        if (value != null) {
          gasConfigValue[key] = value;
        }
      });
    }

	if (senderValue == null) {
		throw ArgumentError('Missing transaction sender');
	}

	if (gasConfigValue["budget"] == null) {
		throw ArgumentError('Missing gas budget');
	}

    if (gasConfigValue["payment"] == null) {
		throw ArgumentError('Missing gas payment');
	}

    if (gasConfigValue["price"] == null) {
		throw ArgumentError('Missing gas price');
	}

	final transactionData = {
		"sender": prepareSuiAddress(senderValue),
		"expiration": expirationValue?.toJson() ?? { "None": true },
		"gasData": {
			"payment": gasConfigValue["payment"],
			"owner": prepareSuiAddress(this.gasConfig.owner ?? senderValue),
			"price": BigInt.parse(gasConfigValue["price"].toString()),
			"budget": BigInt.parse(gasConfigValue["budget"].toString()),
		},
		"kind": {
			"ProgrammableTransaction": {
				"inputs": inputs,
				"transactions": transactions,
			},
		},
	};

	return builder
		.ser('TransactionData', { "V1": transactionData }, BcsWriterOptions(maxSize: maxSizeBytes))
		.toBytes();
}