2023-09-12 12:06:53 -07:00
# Changelog
All notable changes to this library will be documented in this file.
2023-05-23 04:39:46 -07:00
2023-09-12 12:06:53 -07:00
The format is based on [Keep a Changelog ](https://keepachangelog.com/en/1.0.0/ ),
and this library adheres to [Semantic Versioning ](https://semver.org/spec/v2.0.0.html ).
## [Unreleased]
2024-04-15 08:43:19 -07:00
### Changed
- Gradle 8.7
- Android Gradle Plugin 8.3.0
- Kotlin 1.9.23
- Other dependencies update
2024-04-09 05:29:05 -07:00
## [2.1.0] - 2024-04-09
2024-04-09 04:49:52 -07:00
### Added
- The Orchard support has been finished, and the SDK now fully supports sending and receiving funds on the Orchard
addresses
2024-03-18 19:06:08 -07:00
### Fixed
- SDK release 1.11.0-beta01 documented that `Synchronizer.new` would throw an
exception indicating that an internal migration requires the wallet seed, if
called with `null` . This has been unintentionally broken the entire time: the
handling logic for this case was accidentally removed shortly after it was
added. The SDK now correctly throws `InitializeException.SeedRequired` .
2024-03-13 02:03:53 -07:00
### Changed
2024-04-09 04:49:52 -07:00
- `Synchronizer.refreshAllBalances` now refreshes the Orchard balances as well
2024-03-13 02:03:53 -07:00
- The SDK uses ZIP-317 fee system internally
2024-04-09 04:49:52 -07:00
- `ZcashSdk.MINERS_FEE` has been deprecated, and will be removed in 2.1.x
2024-03-14 06:40:40 -07:00
- `ZecSend` data class now provides `Proposal?` object initiated using `Synchronizer.proposeTransfer`
2024-04-09 04:49:52 -07:00
- Wallet initialization using `Synchronizer.new` now could throw a new `SeedNotRelevant` exception when the provided
seed is not relevant to any of the derived accounts in the wallet database
2024-03-25 10:03:30 -07:00
- Checkpoints update
2024-03-13 02:03:53 -07:00
2024-03-08 12:13:54 -08:00
## [2.0.7] - 2024-03-08
2024-02-19 12:45:49 -08:00
### Fixed
- `Synchronizer.sendToAddress` and `Synchronizer.shieldFunds` now throw an
exception if the created transaction successfully reaches `lightwalletd` but
fails to reach its backing full node's mempool.
2024-02-07 08:33:47 -08:00
### Changed
- `WalletBalance` now contains new fields `changePending` and `valuePending` . Fields `total` and `pending` are
still provided. See more in the class documentation
`sdk-lib/src/main/java/cash/z/ecc/android/sdk/model/WalletBalance.kt`
- `Synchronizer.transparentBalances: WalletBalance` to `Synchronizer.transparentBalance: Zatoshi`
2024-02-19 14:43:49 -08:00
- `WalletSnapshot.transparentBalance: WalletBalance` to `WalletSnapshot.transparentBalance: Zatoshi`
2024-02-26 06:59:05 -08:00
- `Memo.MAX_MEMO_LENGTH_BYTES` is now available in public API
2024-02-19 14:43:49 -08:00
- `Synchronizer.sendToAddress` and `Synchronizer.shieldFunds` have been
2024-04-09 04:49:52 -07:00
deprecated, and will be removed in 2.1.x (which will create multiple
2024-02-19 14:43:49 -08:00
transactions at once for some recipients).
2024-02-07 08:33:47 -08:00
### Added
2024-02-19 14:09:01 -08:00
- APIs that enable constructing a proposal for transferring or shielding funds,
and then creating transactions from a proposal. The intermediate proposal can
be used to determine the required fee, before committing to producing
transactions.
- `Synchronizer.proposeTransfer`
- `Synchronizer.proposeShielding`
- `Synchronizer.createProposedTransactions`
2024-02-07 08:33:47 -08:00
- `WalletBalanceFixture` class with mock values that are supposed to be used only for testing purposes
2024-02-26 06:59:05 -08:00
- `Memo.countLength(memoString: String)` to count memo length in bytes
2024-03-02 09:55:22 -08:00
- `PersistableWallet.toSafeString` is a safe alternative for the regular [toString] function that prints only
non-sensitive parts
- `Synchronizer.validateServerEndpoint` this function checks whether the provided server endpoint is valid.
The validation is based on comparing:
* network type
* sapling activation height
* consensus branch id
2024-02-07 08:33:47 -08:00
2024-01-30 18:43:16 -08:00
## [2.0.6] - 2024-01-30
### Fixed
- In 2.0.5, `Synchronizer.shieldFunds` always returned an error due to a crash
on the Rust side. This release fixes the underlying bug.
2024-01-30 11:19:34 -08:00
## [2.0.5] - 2024-01-30
2024-01-30 09:03:14 -08:00
### Added
- `cash.z.ecc.android.sdk.model.Proposal` (currently unused in the public API).
- System tracing to `CompactBlockProcessor` and the Rust backend.
2024-01-15 08:29:54 -08:00
### Changed
2024-01-30 09:03:14 -08:00
- Migrated to NDK 26.1.10909125 and Rust 1.75.0.
- The wallet balances are now updated immediately upon synchronizer start.
- Existing wallets will now only fetch the most recent subtree roots, improving
synchronizer startup times.
- Performance of block scanning and `SdkSynchronizer.refreshAllBalances` has
been improved.
2024-01-15 08:29:54 -08:00
- `WalletAddressFixture` fixture properties have been updated
2024-01-30 09:03:14 -08:00
### Fixed
- The transparent wallet balance `StateFlow` now shows the total transparent
balance in the wallet, instead of the balance of the default address. It also
now treats all zero-conf balance as available.
### Removed
- `SdkSynchronizer.refreshSaplingBalance` and
`SdkSynchronizer.refreshTransparentBalance`
(use `SdkSynchronizer.refreshAllBalances` instead).
2024-01-08 08:51:40 -08:00
## [2.0.4] - 2024-01-08
2024-01-05 00:56:23 -08:00
### Added
- `TransactionOverview.txIdString()` to provide a readable transaction ID to SDK-consuming apps
2024-01-08 08:22:27 -08:00
- `MonetarySeparators.current(locale: Locale? = null)` now accepts `Locale` on input to force separators locale. If
no value is provided, the default one is used.
2024-01-05 00:56:23 -08:00
2024-01-08 05:45:47 -08:00
### Removed
- `LightWalletEndpointExt` and its functions and variables were removed from the SDK's public APIs entirely. It's
preserved only for testing and wallet Demo app purposes. The calling wallet app should provide its own
2024-04-09 04:49:52 -07:00
`LightWalletEndpoint` instance within `PersistableWallet` or `SdkSynchronizer` APIs.
2024-01-08 05:45:47 -08:00
2024-01-04 01:47:46 -08:00
### Changed
- Gradle 8.5
2024-01-04 05:10:06 -08:00
- Kotlin 1.9.21
- Other dependency update
2024-01-08 08:51:40 -08:00
- Checkpoints update
2024-01-04 01:47:46 -08:00
2024-01-07 01:29:33 -08:00
### Removed
- Several internally unused exceptions from `Exceptions.kt`
2023-11-08 06:22:45 -08:00
## [2.0.3] - 2023-11-08
2023-11-08 03:27:14 -08:00
### Added
- `Synchronizer.getExistingDataDbFilePath` public API to check and provide file path to the existing data database
file or throws [InitializeException.MissingDatabaseException] if the database doesn't exist yet. See #1292 .
### Changed
- `CompactBlockProcessor` switched internally from balance and progress FFIs to wallet summary FFI APIs. This change
brings a block synchronization speed up. No action is required on the client side. See #1282 .
2023-11-08 06:22:45 -08:00
- Checkpoints update
2023-11-08 03:27:14 -08:00
2023-10-20 05:48:09 -07:00
## [2.0.2] - 2023-10-20
### Fixed
- Incorrect note deduplication in the `v_transactions` database view: This is a fix in the Rust layer. The amount
sent in the transaction was incorrectly reported even though the actual amount was correctly sent. Now, clients
should see the amount they expect to see.
### Changed
- Checkpoints update
2023-10-02 12:35:04 -07:00
## [2.0.1] - 2023-10-02
2023-09-28 00:54:27 -07:00
### Changed
- `PersistableWallet` API provides a new `endpoint` parameter of type `LightWalletEndpoint` , which could be used for
the Lightwalletd server customization. The new parameter is part of PersistableWallet persistence. The SDK handles
the persistence migration internally.
2023-10-02 03:49:36 -07:00
- The **1_000** Zatoshi fee proposed in ZIP-313 is deprecated now, so the minimum is **10_000** Zatoshi, defined in
2023-10-02 10:41:54 -07:00
ZIP-317—the `ZcashSdk.MINERS_FEE` now returns the correct value as described above. Note that the actual fee is
2023-10-02 03:49:36 -07:00
handled in a rust layer.
2023-10-02 10:41:54 -07:00
- Adopted the latest Bip39 library v1.0.6
2023-09-28 00:54:27 -07:00
2023-09-25 13:11:44 -07:00
## [2.0.0] - 2023-09-25
2023-09-22 15:48:06 -07:00
## [2.0.0-rc.4] - 2023-09-22
### Fixed
Transparent balance is now correctly updated after a shielding transaction is
created, instead of only once the transaction is mined.
2023-09-21 05:28:31 -07:00
## [2.0.0-rc.3] - 2023-09-21
### Fixed
The Kotlin layer of the SDK now correctly matches the Rust layer `PrevHashMismatch` exception with `ContinuityError`
and triggers rewind action.
2023-09-20 11:14:44 -07:00
## [2.0.0-rc.2] - 2023-09-20
2023-09-20 06:51:06 -07:00
### Changed
- Some of the `TransactionOverview` class parameters changed:
- `id` was removed
- `index` is nullable
- `feePaid` is nullable
- `blockTimeEpochSeconds` is nullable
2023-09-20 07:53:50 -07:00
### Removed
- Block heights are absolute, not relative. Thus, these two operations above the `BlockHeight` object were removed:
- `plus(other: BlockHeight): BlockHeight`
- `minus(other: BlockHeight): BlockHeight`
2023-09-12 12:06:53 -07:00
## [2.0.0-rc.1] - 2023-09-12
### Notable Changes
- `CompactBlockProcessor` now processes compact blocks from the lightwalletd
server using the **Spend-before-Sync** algorithm, which allows scanning of
wallet blocks to be performed in arbitrary order and optimized to make it
possible to spend received notes without waiting for synchronization to be
complete. This feature shortens the time until a wallet's spendable balance
can be used.
- The block synchronization mechanism is additionally about one-third faster
thanks to an optimized `CompactBlockProcessor.SYNC_BATCH_SIZE` (issue ** #1206 **).
2023-08-09 01:59:15 -07:00
2023-08-14 00:48:55 -07:00
### Removed
2023-09-12 12:06:53 -07:00
- `CompactBlockProcessor.ProcessorInfo.lastSyncHeight` no longer had a
well-defined meaning after implementation of the **SpendBeforeSync**
synchronization algorithm and has been removed.
`CompactBlockProcessor.ProcessorInfo.overallSyncRange` provides related
information.
2023-08-14 00:48:55 -07:00
- `CompactBlockProcessor.ProcessorInfo.isSyncing` . Use `Synchronizer.status` instead.
- `CompactBlockProcessor.ProcessorInfo.syncProgress` . Use `Synchronizer.progress` instead.
2023-09-12 12:06:53 -07:00
- `alsoClearBlockCache` parameter from rewind functions of `Synchronizer` and
`CompactBlockProcessor` , as it has no effect on the current behaviour of
these functions.
- Internally, we removed access to the shared block table from the Kotlin
layer, which resulted in eliminating these APIs:
2023-09-10 02:45:53 -07:00
- `SdkSynchronizer.findBlockHash()`
- `SdkSynchronizer.findBlockHashAsHex()`
2023-09-07 09:00:34 -07:00
### Changed
2023-09-12 12:06:53 -07:00
- `CompactBlockProcessor.quickRewind()` and `CompactBlockProcessor.rewindToNearestHeight()`
now might fail due to internal changes in getting scanned height. Thus, these
functions now return `Boolean` results.
- `Synchronizer.new()` and `PersistableWallet` APIs require a new
`walletInitMode` parameter of type `WalletInitMode` , which describes wallet
initialization mode. See related function and sealed class documentation.
2023-09-07 09:00:34 -07:00
### Fixed
2023-09-12 12:06:53 -07:00
- `Synchronizer.getMemos()` now correctly returns a flow of strings for sent
and received transactions. Issue ** #1154 **.
- `CompactBlockProcessor` now triggers transaction polling while block
synchronization is in progress as expected. Clients will be notified shortly
after every new transaction is discovered via `Synchronizer.transactions`
API. Issue ** #1170 **.
## [1.21.0-beta01]
2023-08-09 01:59:15 -07:00
Note: This is the last _1.x_ version release. The upcoming version _2.0_ brings the **Spend-before-Sync** feature,
which speeds up discovering the wallet's spendable balance.
2023-08-31 23:48:54 -07:00
### Changed
- Updated dependencies:
- Gradle 8.3
- AGP 8.1.1
- Kotlin 1.9.10
2023-09-01 06:55:18 -07:00
- Coroutines 1.7.3
2023-08-31 23:48:54 -07:00
- Compose
2023-09-01 06:50:28 -07:00
- AndroidX
2023-09-01 06:53:47 -07:00
- gRPC/Protobuf
2023-08-31 23:48:54 -07:00
- etc.
2023-09-08 11:02:23 -07:00
- Checkpoints
2023-07-31 04:34:58 -07:00
## 1.20.0-beta01
2023-07-17 03:50:53 -07:00
- The SDK internally migrated from `BackendExt` rust backend extension functions to more type-safe `TypesafeBackend` .
2023-09-12 12:06:53 -07:00
- `Synchronizer.getMemos()` now internally handles expected `RuntimeException` from the rust layer and transforms it
2023-07-31 04:34:58 -07:00
in an empty string.
2023-07-17 03:50:53 -07:00
2023-07-05 05:19:57 -07:00
## 1.19.0-beta01
### Changed
- Adopted the latest Bip39 version 1.0.5
### Fixed
- `TransactionOverview` object returned with `SdkSynchronizer.transactions` now contains a correct `TransactionState.
Pending` in case of the transaction is mined,but not fully confirmed.
2023-09-12 12:06:53 -07:00
- When the SDK internally works with a recently created transaction there was a moment in which could the transaction
2023-07-05 05:19:57 -07:00
causes the SDK to crash, because of its invalid mined height. Fixed now.
2023-06-12 07:03:39 -07:00
## 1.18.0-beta01
2023-09-12 12:06:53 -07:00
- Synchronizer's functions `getUnifiedAddress` , `getSaplingAddress` , `getTransparentAddress` , and `refreshUtxos` now
do not provide `Account.DEFAULT` value for the account argument. As accounts are not fully supported by the SDK
yet, the caller should explicitly set Account.DEFAULT as the account argument to keep the same behavior.
2023-06-12 07:03:39 -07:00
- Gradle 8.1.1
- AGP 8.0.2
2023-09-12 12:06:53 -07:00
2023-05-18 12:22:13 -07:00
## 1.17.0-beta01
2023-05-18 04:36:15 -07:00
- Transparent fund balances are now displayed almost immediately
- Synchronization of shielded balances and transaction history is about 30% faster
- Disk space usage is reduced by about 90%
- `Synchronizer.status` has been simplified by combining `DOWNLOADING` , `VALIDATING` , and `SCANNING` states into a single `SYNCING` state.
- `Synchronizer.progress` now returns `Flow<PercentDecimal>` instead of `Flow<Int>` . PercentDecimal is a type-safe model. Use `PercentDecimal.toPercentage()` to get a number within 0-100% scale.
- `Synchronizer.clearedTransactions` has been renamed to `Synchronizer.transactions` and includes sent, received, and pending transactions. Synchronizer APIs for listing sent, received, and pending transactions have been removed. Clients can determine whether a transaction is sent, received, or pending by filtering the `TransactionOverview` objects returned by `Synchronizer.transactions`
2023-05-05 14:46:07 -07:00
- `Synchronizer.send()` and `shieldFunds()` are now `suspend` functions with `Long` return values representing the ID of the newly created transaction. Errors are reported by thrown exceptions.
2023-09-12 12:06:53 -07:00
- `DerivationTool` is now an interface, rather than an `object` , which makes it easier to inject alternative implementations into tests. To adapt to the new API, replace calls to `DerivationTool.methodName()` with `DerivationTool.getInstance().methodName()` .
2023-05-18 04:36:15 -07:00
- `DerivationTool` methods are no longer suspending, which should make it easier to call them in various situations. Obtaining a `DerivationTool` instance via `DerivationTool.getInstance()` frontloads the need for a suspending call.
- `DerivationTool.deriveUnifiedFullViewingKeys()` no longer has a default argument for `numberOfAccounts` . Clients should now pass `DerivationTool.DEFAULT_NUMBER_OF_ACCOUNTS` as the value. Note that the SDK does not currently have proper support for multiple accounts.
- The SDK's internals for connecting with librustzcash have been refactored to a separate Gradle module `backend-lib` (and therefore a separate artifact) which is a transitive dependency of the Zcash Android SDK. SDK consumers that use Gradle dependency locks may notice this difference, but otherwise it should be mostly an invisible change.
2023-04-12 11:13:32 -07:00
2023-04-11 04:42:36 -07:00
## 1.16.0-beta01
2023-05-18 04:36:15 -07:00
(This version was only deployed as a snapshot and not released on Maven Central)
2023-04-11 04:42:36 -07:00
### Changed
- The minimum supported version of Android is now API level 27.
2023-02-06 06:41:38 -08:00
## 1.15.0-beta01
### Changed
- A new package `sdk-incubator-lib` is now available as a public API. This package contains experimental APIs that may be promoted to the SDK in the future. The APIs in this package are not guaranteed to be stable, and may change at any time.
2023-09-12 12:06:53 -07:00
- `Synchronizer.refreshUtxos` now takes `Account` type as first parameter instead of transparent address of type
2023-05-18 04:36:15 -07:00
`String` , and thus it downloads all UTXOs for the given account addresses. The Account object provides a default `0` index Account with `Account.DEFAULT` .
2023-02-06 06:41:38 -08:00
2023-02-09 03:52:10 -08:00
## 1.14.0-beta01
### Changed
- The minimum supported version of Android is now API level 24.
2023-02-01 02:14:55 -08:00
## 1.13.0-beta01
### Changed
2023-09-12 12:06:53 -07:00
- The SDK's internal networking has been refactored to a separate Gradle module `lightwallet-client-lib` (and
2023-02-01 02:14:55 -08:00
therefore a separate artifact) which is a transitive dependency of the Zcash Android SDK.
- The `z.cash.ecc.android.sdk.model.LightWalletEndpoint` class has been moved to `co.electriccoin.lightwallet.client.model.LightWalletEndpoint`
2023-04-13 04:36:24 -07:00
- The new networking module now provides a `LightWalletClient` for asynchronous calls.
2023-09-12 12:06:53 -07:00
- Most unary calls respond with the new `Response` class and its subclasses. Streaming calls will be updated
2023-02-01 02:14:55 -08:00
with the Response class later.
2023-05-18 04:36:15 -07:00
- SDK clients should avoid using generated GRPC objects, as these are an internal implementation detail and are in process of being removed from the public API. Any clients using GRPC objects will find these have been repackaged from `cash.z.wallet.sdk.rpc` to `cash.z.wallet.sdk.internal.rpc` to signal they are not a public API.
2023-02-01 02:14:55 -08:00
2023-01-12 08:32:43 -08:00
## 1.12.0-beta01
### Changed
- `TransactionOverview` , `Transaction.Sent` , and `Transaction.Received` have `minedHeight` as a nullable field now. This fixes a potential crash when fetching transactions when a transaction is in the mempool
2022-08-04 10:09:19 -07:00
2023-01-12 08:32:43 -08:00
## 1.11.0-beta01
2022-08-04 10:09:19 -07:00
### Added
2022-06-17 05:06:21 -07:00
- `cash.z.ecc.android.sdk` :
2022-11-08 11:25:56 -08:00
- `Synchronizer.getUnifiedAddress`
- `Synchronizer.getSaplingAddress`
2022-06-17 05:06:21 -07:00
- `Synchronizer.isValidUnifiedAddr`
2022-10-24 06:09:29 -07:00
- `Synchronizer.getMemos(TransactionOverview)`
2022-10-31 12:27:34 -07:00
- `Synchronizer.getReceipients(TransactionOverview)`
2022-09-27 06:01:53 -07:00
- `cash.z.ecc.android.sdk.model` :
2022-10-06 10:44:34 -07:00
- `Account`
2022-09-27 06:01:53 -07:00
- `FirstClassByteArray`
2022-10-19 13:52:54 -07:00
- `PendingTransaction`
- `Transaction`
2022-09-27 06:01:53 -07:00
- `UnifiedSpendingKey`
2022-08-04 10:09:19 -07:00
- `cash.z.ecc.android.sdk.tool` :
2022-09-29 10:04:00 -07:00
- `DerivationTool.deriveUnifiedSpendingKey`
- `DerivationTool.deriveUnifiedFullViewingKey`
2022-11-08 05:43:15 -08:00
- `DerivationTool.deriveTransparentAccountPrivateKey`
- `DerivationTool.deriveTransparentAddressFromAccountPrivateKey`
2022-08-04 10:09:19 -07:00
- `DerivationTool.deriveUnifiedAddress`
- `DerivationTool.deriveUnifiedFullViewingKeys`
- `DerivationTool.validateUnifiedFullViewingKey`
- Still unimplemented.
2022-06-17 05:06:21 -07:00
- `cash.z.ecc.android.sdk.type` :
- `AddressType.Unified`
- `UnifiedFullViewingKey` , representing a Unified Full Viewing Key as specified in
[ZIP 316 ](https://zips.z.cash/zip-0316#encoding-of-unified-full-incoming-viewing-keys ).
2022-08-04 10:09:19 -07:00
### Changed
- The following methods now take or return `UnifiedFullViewingKey` instead of
`UnifiedViewingKey` :
- `cash.z.ecc.android.sdk` :
- `Initializer.Config.addViewingKey`
- `Initializer.Config.importWallet`
- `Initializer.Config.newWallet`
- `Initializer.Config.setViewingKeys`
2022-05-18 18:04:30 -07:00
- `cash.z.ecc.android.sdk` :
2022-10-19 13:52:54 -07:00
- `Synchronizer.Companion.new` now takes many of the arguments previously passed to `Initializer` . In addition, an optional `seed` argument is required for first-time initialization or if `Synchronizer.new` throws an exception indicating that an internal migration requires the wallet seed. (This second case will be true the first time existing clients upgrade to this new version of the SDK).
2022-12-14 07:33:18 -08:00
- `Synchronizer.new()` now returns an instance that implements the `Closeable` interface. `Synchronizer.stop()` is effectively renamed to `Synchronizer.close()`
- `Synchronizer` ensures that multiple instances cannot be running concurrently with the same network and alias
2022-09-29 10:04:00 -07:00
- `Synchronizer.sendToAddress` now takes a `UnifiedSpendingKey` instead of an encoded
Sapling extended spending key, and the `fromAccountIndex` argument is now implicit in
the `UnifiedSpendingKey` .
- `Synchronizer.shieldFunds` now takes a `UnifiedSpendingKey` instead of separately
encoded Sapling and transparent keys.
2022-10-06 10:44:34 -07:00
- `Synchronizer` methods that previously took an `Int` for account index now take an `Account` object
2022-12-07 05:36:08 -08:00
- `Synchronizer.sendToAddress()` and `Synchronizer.shieldFunds()` return flows that can now be collected multiple times. Prior versions of the SDK had a bug that could submit transactions multiple times if the flow was collected more than once.
2022-12-16 05:11:09 -08:00
- Updated dependencies:
- Kotlin 1.7.21
2023-09-12 12:06:53 -07:00
- AndroidX
2022-12-16 05:11:09 -08:00
- etc.
- Updated checkpoints
2022-08-04 10:09:19 -07:00
### Removed
2022-10-06 10:40:49 -07:00
- `cash.z.ecc.android.sdk` :
2022-10-19 13:52:54 -07:00
- `Initializer` (use `Synchronizer.new` instead)
2022-12-14 07:33:18 -08:00
- `Synchronizer.start()` - Synchronizer is now started automatically when constructing a new instance.
2022-11-08 11:25:56 -08:00
- `Synchronizer.getAddress` (use `Synchronizer.getUnifiedAddress` instead).
- `Synchronizer.getShieldedAddress` (use `Synchronizer.getSaplingAddress` instead)
2022-10-19 13:52:54 -07:00
- `Synchronizer.cancel`
2023-01-09 08:55:30 -08:00
- `Synchronizer.cancelSpend`
2022-08-04 10:09:19 -07:00
- `cash.z.ecc.android.sdk.type.UnifiedViewingKey`
- This type had a bug where the `extpub` field actually was storing a plain transparent
public key, and not the extended public key as intended. This made it incompatible
with ZIP 316.
- `cash.z.ecc.android.sdk.tool` :
2022-11-08 05:43:15 -08:00
- `DerivationTool.deriveSpendingKeys` (use `DerivationTool.deriveUnifiedSpendingKey` instead)
- `DerivationTool.deriveViewingKey` (use `DerivationTool.deriveUnifiedFullViewingKey` instead)
2022-11-03 20:51:23 -07:00
- `DerivationTool.deriveTransparentAddress` (use `Synchronizer.getLegacyTransparentAddress` instead).
- `DerivationTool.deriveTransparentAddressFromPrivateKey` (use `Synchronizer.getLegacyTransparentAddress` instead).
- `DerivationTool.deriveTransparentAddressFromPublicKey` (use `Synchronizer.getLegacyTransparentAddress` instead).
- `DerivationTool.deriveTransparentSecretKey` (use `DerivationTool.deriveUnifiedSpendingKey` instead).
2022-08-04 10:09:19 -07:00
- `DerivationTool.deriveShieldedAddress`
2022-11-08 05:43:15 -08:00
- `DerivationTool.deriveUnifiedViewingKeys` (use `DerivationTool.deriveUnifiedFullViewingKey` instead)
2023-09-12 12:06:53 -07:00
- `DerivationTool.validateUnifiedViewingKey`
2022-08-04 10:09:19 -07:00
2023-05-18 04:36:15 -07:00
## Version 1.9.0-beta05
2022-10-04 07:27:09 -07:00
- The minimum version of Android supported is now API 21
- Fixed R8/ProGuard consumer rule, which eliminates a runtime crash for minified apps
2023-05-18 04:36:15 -07:00
## Version 1.9.0-beta04
2023-09-12 12:06:53 -07:00
- The SDK now stores sapling param files in `no_backup/co.electricoin.zcash` folder instead of the `cache/params`
2022-09-06 03:44:33 -07:00
folder. Besides that, `SaplingParamTool` also does validation of downloaded sapling param file hash and size.
**No action required from client app**.
2023-05-18 04:36:15 -07:00
## Version 1.9.0-beta03
2022-08-16 05:53:23 -07:00
- No changes; this release is a test of a new deployment process
2023-05-18 04:36:15 -07:00
## Version 1.9.0-beta02
2022-08-12 08:05:00 -07:00
- The SDK now stores database files in `no_backup/co.electricoin.zcash` folder instead of the `database` folder. **No action required from client app** .
2023-05-18 04:36:15 -07:00
## Version 1.9.0-beta01
2022-08-02 06:29:09 -07:00
- Split `ZcashNetwork` into `ZcashNetwork` and `LightWalletEndpoint` to decouple network and server configuration
2022-08-12 08:05:00 -07:00
- Gradle 7.5.1
- Updated checkpoints
2022-08-02 06:29:09 -07:00
2023-05-18 04:36:15 -07:00
## Version 1.8.0-beta01
2023-09-12 12:06:53 -07:00
- Enabled automated unit tests run on the CI server
2022-07-28 07:01:06 -07:00
- Added `BlockHeight` typesafe object to represent block heights
- Significantly reduced memory usage, fixing potential OutOfMemoryError during block download
- Kotlin 1.7.10
- Updated checkpoints
2023-05-18 04:36:15 -07:00
## Version 1.7.0-beta01
2022-07-07 06:58:26 -07:00
- Added `Zatoshi` typesafe object to represent amounts.
2022-06-29 13:19:22 -07:00
- Kotlin 1.7.0
2022-06-21 16:34:42 -07:00
2023-05-18 04:36:15 -07:00
## Version 1.6.0-beta01
2022-06-13 06:16:51 -07:00
- Updated checkpoints for Mainnet and Testnet
2022-06-03 05:38:38 -07:00
- Fix: SDK can now be used on Intel x86_64 emulators
2022-06-13 06:16:51 -07:00
- Prevent R8 warnings for apps consuming the SDK
2022-06-03 05:38:38 -07:00
2023-05-18 04:36:15 -07:00
## Version 1.5.0-beta01
2022-05-19 12:41:34 -07:00
- New: Transactions can be created after NU5 activation.
2022-05-20 15:14:06 -07:00
- New: Support for receiving v5 transactions.
2022-05-25 12:42:54 -07:00
- Known issues: The SDK will not run on Intel 64-bit API 31+ emulators. Workarounds include: testing on a physical device, using an older 32-bit API version Intel emulator, or using an ARM emulator.
2022-05-19 12:41:34 -07:00
2023-05-18 04:36:15 -07:00
## Version 1.4.0-beta01
2022-01-19 10:39:07 -08:00
- Main entrypoint to the SDK has changed. See [MIGRATIONS.md ](MIGRATIONS.md )
2022-06-13 06:16:51 -07:00
- The minimum version of Android supported is now API 19
2022-05-09 06:14:30 -07:00
- Updated checkpoints for Mainnet and Testnet
- Internal bugfixes around concurrent access to resources, which could cause transient failures and data corruption
- Added ProGuard rules so that SDK clients can use R8 to shrink their apps
- Updated dependencies, including Kotlin 1.6.21, Coroutines 1.6.1, GRPC 1.46.0, Okio 3.1.0, NDK 23
2022-05-25 12:42:54 -07:00
- Known issues: The SDK will not run on Intel 64-bit API 31+ emulators. Workarounds include: testing on a physical device, using an older 32-bit API version Intel emulator, or using an ARM emulator.
2022-01-27 12:42:35 -08:00
2023-05-18 04:36:15 -07:00
## Version 1.3.0-beta20
2022-01-27 12:42:35 -08:00
- New: Updated checkpoints for Mainnet and Testnet
2021-11-22 07:14:21 -08:00
2023-05-18 04:36:15 -07:00
## Version 1.3.0-beta19
2021-11-19 12:32:49 -08:00
- New: Updated checkpoints for Mainnet and Testnet
- Fix: Repackaged internal classes to a new `internal` package name
- Fix: Testnet checkpoints have been corrected
- Updated dependencies
2021-10-13 07:20:13 -07:00
2023-05-18 04:36:15 -07:00
## Version 1.3.0-beta18
2021-08-09 22:36:25 -07:00
- Fix: Corrected logic when calculating birthdates for wallets with zero received notes.
2023-05-18 04:36:15 -07:00
## Version 1.3.0-beta17
2021-07-29 17:50:59 -07:00
- Fix: Autoshielding confirmation count error so funds are available after 10 confirmations.
- New: Allow developers to enable Rust logs.
- New: Accept GZIP compression from lightwalletd.
2021-08-09 22:36:25 -07:00
- New: Reduce the UTXO retry time.
2021-07-29 17:50:59 -07:00
2023-05-18 04:36:15 -07:00
## Version 1.3.0-beta16
2021-06-29 23:39:46 -07:00
- Fix: Gracefully handle failures while fetching UTXOs.
- New: Expose StateFlows for balances.
- New: Make it easier to subscribe to transactions.
- New: Cleanup default logs.
- New: Convenience functions for WalletBalance objects.
2023-05-18 04:36:15 -07:00
## Version 1.3.0-beta15
2021-06-20 17:51:49 -07:00
- Fix: Increase reconnection attempts on failed app restart.
- New: Updated checkpoints for testnet and mainnet.
2023-05-18 04:36:15 -07:00
## Version 1.3.0-beta14
2021-06-18 21:30:08 -07:00
- New: Add separate flows for sapling, orchard and tranparent balances.
- Fix: Continue troubleshooting and fixing server disconnects.
- Updated dependencies.
2023-05-18 04:36:15 -07:00
## Version 1.3.0-beta12
2021-06-06 21:58:41 -07:00
- New: Expose network height as StateFlow.
- Fix: Reconnect to lightwalletd when a service exception occurs.
2023-05-18 04:36:15 -07:00
## Version 1.3.0-beta11
2021-05-12 18:28:57 -07:00
- Fix: Remove unused flag that was breaking new wallet creation for some wallets.
2023-05-18 04:36:15 -07:00
## Version 1.3.0-beta10
2021-05-07 14:32:00 -07:00
- Fix: Make it safe to call the new prepare function more than once.
2023-05-18 04:36:15 -07:00
## Version 1.3.0-beta09
2021-05-03 19:55:17 -07:00
- New: Add quick rewind feature, which makes it easy to rescan blocks after an upgrade.
2021-05-07 01:30:59 -07:00
- Fix: Repair complex data migration bug that caused crashes on upgrades.
2021-05-03 19:55:17 -07:00
2023-05-18 04:36:15 -07:00
## Version 1.3.0-beta08
2021-05-01 20:05:14 -07:00
- Fix: Disable librustzcash logs by default.
2023-05-18 04:36:15 -07:00
## Version 1.3.0-beta07
2021-04-30 21:05:37 -07:00
- Fix: Address issues with key migration, allowing wallets to reset viewing keys, when needed.
2023-05-18 04:36:15 -07:00
## Version 1.3.0-beta06
2021-04-29 12:57:33 -07:00
- Fix: Repair publishing so that AARs work on Windows machines [issue #222 ].
- Fix: Incorrect BranchId on 32-bit devics [issue #224 ].
- Fix: Rescan should not go beyond the wallet checkpoint.
- New: Drop Android Jetifier since it is no longer used.
- Updated checkpoints, improved tests (added Test Suites) and better error messages.
2023-05-18 04:36:15 -07:00
## Version 1.3.0-beta05
2021-04-23 12:01:02 -07:00
- Major: Consolidate product flavors into one library for the SDK instead of two.
- Major: Integrates with latest Librustzcash including full Data Access API support.
- Major: Move off of JCenter and onto Maven Central.
- New: Adds Ktlint [Credit: @nighthawk24 ]
- Fix: Added SaplingParamTool and ability to clear param files from cache [Credit: @herou ]
2021-04-23 15:50:54 -07:00
- New: Added responsible disclosure document for vulnerabilities [Credit: @zebambam ]
2021-04-23 12:01:02 -07:00
- New: UnifiedViewingKey concept.
- New: Adds support for autoshielding, including database migrations.
- New: Adds basic support for UTXOs, including refresh during scan.
- New: Support the ability to wipe all sqlite data and rebuild from keys.
- New: Switches to ZOMG lightwalletd instances.
- Fix: Only notify subscribers when a new block is detected.
- New: Add scan metrics and callbacks for apps to measure performance.
- Fix: Improve error handling and surface critical Initialization errors.
- New: Adds cleanup and removal of failed transactions.
- New: Improved logic for determining the wallet birthday.
- New: Add the ability to rewind and rescan blocks.
- New: Better safeguards against testnet v mainnet data contamination.
- New: Improved troubleshooting of ungraceful shutdowns.
- Docs: Update README to draw attention to the demo app.
- New: Expose transaction count.
- New: Derive sapling activation height from the active network.
- New: Latest checkpoints for mainnet and testnet.
2023-05-18 04:36:15 -07:00
## Version 1.2.1-beta04
2021-01-05 11:42:49 -08:00
- New: Updated to latest versions of grpc, grpc-okhttp and protoc
- Fix: Addresses root issue of Android 11 crash on SSL sockets
2023-05-18 04:36:15 -07:00
## Version 1.2.1-beta03
2020-12-17 23:27:37 -08:00
- New: Implements ZIP-313, reducing the default fee from 10,000 to 1,000 zats.
- Fix: 80% reduction in build warnings from 90 -> 18 and improved docs [Credit: @herou ].
2023-05-18 04:36:15 -07:00
## Version 1.2.1-beta02
2020-11-23 21:58:14 -08:00
- New: Improve birthday configuration and config functions.
- Fix: Broken layout in demo app transaction list.
2023-05-18 04:36:15 -07:00
## Version 1.2.1-beta01
2020-11-19 06:30:46 -08:00
- New: Added latest checkpoints for testnet and mainnet.
- New: Added display name for Canopy.
2020-11-20 11:14:43 -08:00
- New: Update to the latest lightwalletd service definition.
- Fix: Convert Initializer.Builder to Initializer.Config to simplify the constructors.
2020-11-19 06:30:46 -08:00
2023-05-18 04:36:15 -07:00
## Version 1.2.0-beta01
2020-10-30 06:59:36 -07:00
- New: Added ability to erase initializer data.
- Fix: Updated to latest librustzcash, fixing send functionality on Canopy.
2023-05-18 04:36:15 -07:00
## Version 1.1.0-beta10
2020-10-30 06:59:36 -07:00
- New: Modified visibility on a few things to facilitate partner integrations.
2020-10-16 10:39:16 -07:00
2023-05-18 04:36:15 -07:00
## Version 1.1.0-beta08
2020-10-30 06:59:36 -07:00
- Fix: Publishing has been corrected by jcenter's support team.
- New: Minor improvement to initializer
2020-10-01 13:29:45 -07:00
2023-05-18 04:36:15 -07:00
## Version 1.1.0-beta05
2020-10-30 06:59:36 -07:00
- New: Synchronizer can now be started with just a viewing key.
- New: Initializer improvements.
- New: Added tool for loading checkpoints.
- New: Added tool for deriving keys and addresses, statically.
- New: Updated and revamped the demo apps.
- New: Added a bit more (unofficial) t-addr support.
- Fix: Broken testnet demo app.
- Fix: Publishing configuration.
2020-09-11 02:17:05 -07:00
2023-05-18 04:36:15 -07:00
## Version 1.1.0-beta04
2020-10-30 06:59:36 -07:00
- New: Add support for canopy on testnet.
- New: Change the default lightwalletd server.
- New: Add lightwalletd service for fetching t-addr transactions.
- New: prove the concept of local RPC via protobufs.
- New: Iterate on the demo app.
- New: Added new checkpoints.
- Fix: Minor enhancements.
2020-08-13 19:46:22 -07:00
2023-05-18 04:36:15 -07:00
## Version 1.1.0-beta03
2020-10-30 06:59:36 -07:00
- New: Add robust support for transaction cancellation.
- New: Update to latest version of librustzcash.
- New: Expand test support.
- New: Improve and simplify intialization.
- New: Flag when rust is running in debug mode, causing a 10X slow down.
- New: Contributing guidelines.
- Fix: Minor cleanup and improvements.