buildEstimateTx method 
    
    
    
  Implementation
  ADATransaction buildEstimateTx(ONSignADA onSignADA) {
  if (utxos.isEmpty || _outputs.isEmpty) {
    throw const ADAPluginException(
        'Utxos and outputs must not be not empty.');
  }
  final outs = _outputs.map((e) {
    if (e.amount.coin == BigInt.zero) {
      return e.copyWith(amount: e.amount.copyWith(coin: maxU64));
    }
    return e;
  }).toList();
  final transactionSigners = signers;
  final aux = auxiliaryData;
  final body = TransactionBody(
      inputs: TransactionInputs(utxos.map((e) => e.input).toList()),
      outputs: TransactionOutputs(outs),
      mint: getMint(),
      fee: BigInt.from(mask32),
      certificates: certificates.isEmpty
          ? null
          : Certificates(certificates.map((e) => e.certificate).toList()),
      auxiliaryDataHash: aux?.toHash());
  final bodyHash = ADATransactionBuilderUtils.fakeBodyHash;
  final witnesses = <ADABaseTransactionWitness>[];
  for (final i in transactionSigners) {
    final witness = onSignADA(address: i, digest: bodyHash);
    witnesses.addAll(witness);
  }
  final vkeys = witnesses.whereType<Vkeywitness>().toList();
  final bootstraps = witnesses.whereType<BootstrapWitness>().toList();
  final transaction = ADATransaction(
    data: aux,
    body: body,
    witnessSet: TransactionWitnessSet(
        bootstraps: BootstrapWitnesses(bootstraps),
        nativeScripts: nativeScripts,
        vKeys: VkeyWitnesses(vkeys)),
  );
  return transaction;
}