Cardano Wallet Backend - Wallet Management
Pre-releaseOverview
Program | Platform | Description |
---|---|---|
cardano-wallet |
linux-x86_64 |
A CLI tool to start and interact with a wallet server. See Key Features below. |
cardano-wallet-launcher |
linux-x86_64 |
A commodity utility to launch a wallet server with a corresponding node backend. |
Key Features
This release contains support for basic wallet management features via web
server (JSON through HTTP) or a command-line interface.
cardano-wallet
-
A command-line interface which exposes the following features (see CLI manual below):
-
A web server which exposes the following features (see API Documentation below):
cardano-wallet-launcher
- A command-line interface which starts and supervise both a wallet server and a cardano-http-bridge
Known Limitations
-
⚠️ Only one address derivation scheme is supported: sequential scheme (a.k.a. Icarus' address style or, addresses à la BIP-44). -
⚠️ So far, only one backend is supported: cardano-http-bridge (run on the Byron-OFT era, experimental stability). -
⚠️ The wallet backend server is shipped with only an in memory storage which is volatile: restarting the server will erase the memory completely.
Known Issues
Ticket | Title |
---|---|
#250 | GET v2/wallets does not list wallets from oldest to newest |
#291 | Shuffle statistical tests sometimes fail... |
Bug Fixes
- N/A
Installation Instruction
Please note that currently only Unix\Linux platform is supported.
-
Install cardano-http-bridge.
- Install the rust toolchain.
- In terminal run
cargo install --git https://github.com/input-output-hk/cardano-http-bridge.git
- make sure
$HOME/.cargo/bin
is on your$PATH
-
Download
cardano-wallet
andcardano-wallet-launcher
and put it in the directory that is on your$PATH
, e.g./usr/local/bin
. Make sure to add exec permissions on binary files:chmod u+x cardano-wallet cardano-wallet-launcher
-
Start
cardano-wallet-launcher --help
and see available parameters and follow instructions about how to installcardano-http-bridge
if you haven't done already in point 1.
NOTE:
The wallet server & launcher both expect a
NETWORK
ENV var to be available with one of the following value:
- mainnet
- testnet
- staging (not supported)
This variable commands which network the software should connect to and interact with.
Documentation
Link | Audience |
---|---|
API Documentation | Users of the Cardano Wallet API |
Haddock Documentation | Haskell Developers using the cardano-wallet as a library |
CLI Manual | Users of the Cardano Wallet API |
Changelog
Wallet Layer Integration (with cardano-http-bridge)
PR | Description |
---|---|
#88 | Add property tests for the database layer |
#97 | Fix typo in http-bridge tests |
#98 | Increase test coverage for http-bridge integration |
#115 | Technical debt: add unit tests for network and wallet layer |
#132 | Http-bridge with a local cluster in integration tests |
#134 | Move test data archives |
#135 | Get cardano-node-simple available in CI & allow manipulating stream output when launching commands |
#149 | Prevent network layer to "die" when node backend fails |
#153 | Better test coverage for 'Network.listen' |
#179 | Runtime network configuration as ENV var |
#193 | Provide clearer failure reason when wallet is not syncing |
#202 | Redirect launcher, wallet & bridge output to temporary files during integration tests |
#205 | Review high-level interfaces ('IsOurs', 'IsOwned', 'GenChange') to be more granular |
#207 | Parameterize wallet core over the 'TxId' format |
#210 | Parameterize wallet core over the 'Address' format |
#212 | Code re-organization: Extract Http-bridge specifics into a dedicated package |
#226 | Make integration tests failing with a clear message on mainnet and staging |
Restore Historical Data
PR | Description |
---|---|
#137 | Add tracking of known transactions to the wallet model |
#150 | Store transaction history outside of the wallet state |
#156 | Wallet Id deterministic calculation from root public key |
#158 | Extend DB layer & wallet to support wallet metadata |
#172 | Unify 'watchWallet', 'listen', 'processWallet', 'tick' etc.. into one 'restoreWallet' |
#180 | Implement some missing API handlers for the wallets endpoints |
#234 | Fix 'slotRatio' case where the numerator is further than the denominator |
Benchmarking & Nightly Builds
PR | Description |
---|---|
#120 | Remove unused semigroup instance for address pools |
#157 | Add restore benchmarks |
#160 | Add new "special" address discovery scheme (proportional ownership) for testing and benchmarking |
#169 | Fix benchmarks on Buildkite after last refactor |
#187 | Add buildkite nightly build badge (and link) to README |
#190 | Move ENV var export from buildkite script to buildkite pipeline settings |
Coin Selection, transaction creation & submission
PR | Description |
---|---|
#114 | Model transaction metadata as a type |
#121 | Add types skeleton of coin selection and largestFirst algo implementation |
#130 | Extend network-layer to support sending transaction + implement interface with HTTP bridge |
#140 | Random input selection re-implementation |
#146 | Few more negative tests for submitting transactions to cardano-http-bridge |
#164 | Scaffold wallet layer for transaction creation |
#166 | Add signing module to generate witnesses for standard (not multi-sig) transactions |
#167 | Review network layer error (more consistent with other interfaces) |
#175 | Passphrase primitives (encryption & check) |
#181 | Keystore interface extension for our DB-layer |
#182 | Implement POST /v2/transactions API handler |
#196 | Improve testing & coverage for coin selection & fee calculation |
#201 | Property-based tests for 'shuffle' from the coin selection |
#203 | Golden tests for signing of transactions (comparing with cardano-sl) |
#211 | Introduce a 'TransactionLayer' to isolate bits related to transaction signing & size estimation |
Fee Calculation
PR | Description |
---|---|
#174 | Split Fee-related logic from CoinSelection |
#176 | Realistic Fee Calculation (Byron) |
#196 | Improve testing & coverage for coin selection & fee calculation |
#199 | Adjust transaction for fee after coin selection |
Initial Wallet Backend Server & Corresponding CLI
PR | Description |
---|---|
#76 | Translate a subset of the wallet API specification into Servant |
#83 | Port integation tests request module from the old codebase |
#102 | Use hspec-golden-aeson for automatic API golden and roundtrip tests for API types |
#104 | Integration tests DSL extensions: ability to assert on an API response code |
#106 | Few negative mnemonic test cases |
#107 | Finalize First API types |
#108 | Automatic property-based test to validate API Servant definition against swagger specification |
#111 | Add servant post transaction endpoint |
#119 | Servant API: post wallet operation |
#123 | Fix language usage within comments |
#124 | Encode minimum and maximum length for values just once |
#125 | Add ListAddresses , PutWallet , PutWalletPassphrases to servant API definition |
#127 | API server foundation |
#128 | Add a few negative test cases for api types specs for instances that aren't fully generic |
#131 | Integration tests DSL extensions: ability to send non-valid JSON payload in the request |
#133 | Add foundation & initial implementation for a full-blown wallet CLI |
#136 | Api smart constructors |
#139 | Fixes in API specification: use 'block' as a unit instead of 'slot' |
#141 | JSON roundtrip and golden for signed tx type |
#142 | Add FromText and ToText classes to Api.Types |
#152 | Few tests for 'FromText' instances |
#155 | Implement 'cardano-wallet server' command to spin up an actual server |
#159 | Fix comments in Data.Text.Class to remove any mention of the API |
#161 | Add roundtrip textual encoding tests for Network and Port CLI types |
#163 | Negative cases for API types decoding |
#170 | First integration tests on create wallet API endpoint |
#177 | Promote 'ChangeChain' from the term-level to type-level on 'AddressPool' |
#178 | Rename Change Interface & Store new state after generating change addresses |
#183 | Replace 'OctetStream' content-type in API with a proper 'Any' placeholder for response without content |
#184 | More consistency between API specification and automated API testing |
#185 | Integration tests DSL extensions (more expectations & teardown after test) |
#188 | Remove CLI message about passphrase that can be skipped |
#189 | Finalize CLI implementation for endpoints in scope |
#191 | Few unit tests for 'Cardano.Environment' |
#194 | First integration scenarios for wallet creation |
#195 | Include protocol magic in address attributes for testnet |
#197 | Better error messags for mnemonic creation errors |
#198 | Property-based tests for change address generation |
#200 | Fixes in API specification: passphrase length & error code 406 |
#209 | Remote tx history from the wallet state, and replace some usage of 'Set' with built-in 'List' |
#214 | use 'FromText' instance in the API for 'AddressPoolGap' |
#221 | Integration scenarios for wallet creation: address pool gap |
#228 | Rename 'ApiCoins' to 'AddressAmount' |
#230 | Fix API definitions for addresses (which fix request routing for GET /v2/wallets/{walletId} ) |
#232 | Review CLI interface & implement --version |
#235 | Integration tests for 4xx with wallet management API |
Miscellaneous
PR | Description |
---|---|
#99 | Add more information to README |
#105 | Show pre-releases in README badges |
#109 | Remove non-breaking space characters from source code |
#112 | Modules renaming to align with underlying code architecture |
#113 | Fix haddock exports failure on CI |
#117 | Tidy code to meet coding standards |
#206 | Review folder organization |
#208 | Code re-organization: change test data location |
#213 | Code re-organization: CoinSelection & Fee as primitives |
#215 | Code re-organization: change test data location (again) |
#222 | Review and cover 'Buildable' instances for primitive types |
#223 | Compute code coverage for integration test scenarios |
#224 | Fix 'fromText' instance for 'Int' |
#231 | New take on Data.Quantity documentation |
#233 | Relax a bit QuickCheck constraints on 'shuffle' properties |
#236 | Better test coverage for API types (roundtrip HttpApiData, missing negative tests...) |
#237 | Use a lower statistical confidence for 'shuffle' properties |