IntersectMBO / IntersectMBO/cardano-cli
[FR] - Balance existing transaction
- 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
Assessment
This issue has not been assessed yet.