IntersectMBO / IntersectMBO/cardano-cli

[FR] - Balance existing transaction

Open
#867 19 comments 2 reactions 0 assignees View on GitHub
needs investigation Stale
Dominant language
Haskell
Stars
71
Forks
24
Avg merge
23h 40m
Merged PRs (30d)
14

Description

*Internal* (anyone could benefit though)

**Area**
Transaction building

**Describe the feature you'd like**

I would like to use the `cardano-cli` to balance a transaction that was drafted by another application. Assuming we have a transaction already built with body and witnesses (redeemers) by a DApp in a transaction envelope `tx.json` and some signing key `wallet.sk` which owns ADA to pay fees:

```sh
cardano-cli transaction balance \
--socket-path ... \ #
--testnet-magic 2 \
--unbalanced-tx tx.json \
--cardano-signing-key wallet.sk \
--out-file tx.json
```

Would connect to the `cardano-node` as usual to fetch various information (utxo owned by user, protocol parameters, system start and era history) and **balance the transaction**. That is:
- (Re-)calculate script costs using redeemers from the tx
- Estimate fees
- Find and add input to cover fees
- Add a change output
- Write the balanced transaction to disk (or stdout)

Alternative with slightly smaller scope: Take only an input to use for paying fees and change address, very much like `transaction build`.

**Describe alternatives you've considered**
Obvious alternative is to do all this in the DApp itself, but balancing a transaction is a generic process and not application-specific. Also, this would tie the transaction creating code very much to the "source" of where UTxO, protocol parameters etc. are fetched from. Having it in the `cardano-cli`, a dedicated client to the `cardano-node`, would keep it separated from e.g. an alternative workflow that uses `blockfrost`.

**Additional context / screenshots**
We encountered this while designing a command line tool to create certain smart contract transactions in the Hydra protocol. More details here: https://github.com/cardano-scaling/hydra/issues/1574

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.