We want a powerful and user-friendly API that exposes commonly used steps in tx processing.
Here we initialize such an API. The MVP includes basic support for SLP and ALP txs.
- We can get the utxos required to build an arbitary tx with the exported `selectUtxos` function, which supports different selection strategies to support Postage protocol
- We can build a tx (and get info about it) without broadcasting it, by calling `wallet.tx(<instructions>).build().fee()` or `wallet.tx(<instructions>).build().size()`; or the actual TxBuilder with `wallet.tx(<instructions>).build().tx`
- We can build and broadcast a tx with one call with `await wallet.tx(<instructions>).build().broadcast()`
- We can specify the outIdx of token outputs and have extensive validation against token spec about what works / does not work
- We have included a regtest proof of concept for a postage tx
- We have included regtest confirmed behavior for basic XEC, SLP, and ALP txs
This diff ended up piling in many features, as we had to build out a lot of this capability to properly evaluate the API. While the methods in this app do involve some complexity, it is greatly simplified compared to using ecash-lib directly, and the strong typing and validation enhance the developer experience.
From here,
[] We should add a websocket so the user does not need to remember to call `await wallet.sync()` before sending every tx
[] Support other token types
[] Support Agora actions
[] Add support for chained txs, i.e. `await wallet.tx(<instructions>).build().broadcast()` should "just work" even if the instructions are asking to send more token outputs than a single tx can hold, or more XEC outputs than the tx broadcast limit of 100kb will tolerate.