- changed: Upgrade
@nymproject/mix-fetchto v2, which routes NYM mixnet traffic through the new smolmix-wasm tunnel (@nymproject/mix-tunnel). The v2 wasm + worker are inlined into the bundle, so the build no longer copies sibling.wasm/web-worker-*.jsassets.
- changed: Upgrade yaob to v0.4.0 to share a single bridge instance with currency plugins (mismatched yaob copies give the bridge separate object-id counters that cross-wire bridged nativeIo objects).
- added:
EdgeCurrencyWallet.walletSettingsandEdgeCurrencyWallet.changeWalletSettings, plus matching engine plumbing. - added:
EdgeCurrencyWallet.importedflag, indicating a wallet created by importing keys. - removed: All Flow tooling. TypeScript is the type system of record, and nothing in the Edge codebase consumes the generated Flow types. This drops the
flow-bindevDependency, the root.flowconfig, thebuild.typesscript and itsmake-types.tsgenerator, therollup-plugin-flow-entryplugin, theeslint-plugin-flowtypeconfig, theflow-typeddirectory, and the publishedtypes.js.flowartifact. Theflow-binpackage shipped an x86_64-only binary that failed with EBADARCH on arm64 hosts. Note: droppingtypes.js.flowis a breaking change for any downstream consumer that imports this package via Flow.
- changed: Convert the build tooling from Yarn to npm.
- security: Upgrade dependencies per Socket security recommendations.
- added: Expose engine otherMethods on EdgeMemoryWallet so memory wallets support custom methods like makeMaxSpend.
- fixed: Upgraded @nymproject/mix-fetch with promised reliability improvements.
- fixed: Pass flat private keys to
syncNetworkin memory wallets, fixing sweep forunsafeSyncNetworkcurrencies.
- changed: Upgrade mixFetch library and remove per-host request queue from mixFetch for performance improvements.
- fixed: Fixed IndexDB cache issue on Android causing failed mixFetch initialization.
- changed: Reconfigure mixFetch options for network reliability.
- changed: Upgrade
@nymproject/mix-fetchto improve performance with new concurrency changes.
- added:
EdgeTxActionGiftCard.productIdandEdgeTxActionGiftCard.quoteIdproperties.
- added:
EdgeCurrencyEngineCallbacks.onSyncStatusChangedcallback. - added:
EdgeCurrencyInfo.syncDisplayPrecisionoption. - added:
EdgeCurrencyWallet.splitmethod. - added:
EdgeCurrencyWallet.syncStatusproperty and matchingEdgeSyncStatustype. - deprecated:
EdgeAccount.splitWalletInfomethod. - deprecated:
EdgeCurrencyEngineCallbacks.onAddressesChecked. UseonSyncStatusChangedinstead. - deprecated:
EdgeCurrencyWallet.syncRatio. UsesyncStatusinstead.
- fixed: Fixed bundle issue caused by iOS symlink from /private/var/ and /var/ paths.
- changed: Refactor bundler to use platform-native asset loaders over local HTTP server.
- fixed: Race condition in
fuzzyTimeoutthat could cause swap quote aggregation to reject prematurely, dropping successful quotes from slower providers.
- added: New
privacyoption argument to EdgeIo fetch function for NYM support. - fixed: Change-server websocket reconnects reliably after disconnection
- added: Added change-server subscription timeout fallback.
- fixed: Transaction confirmation count calculation for utxo-based currencies
- added: Add
appVersion,osType, andosVersiontoEdgeContextOptionsfor v2 coreRollup endpoint support. - changed: Use
/v2/coreRollupendpoint when device info is available, with/v1/coreRollupas fallback.
- fixed: Allow duplicate sync keys when performing a wallet split, in case a previous failed attempt left a repo behind.
- fixed: Do not lose wallet import history when doing a split-archive-split.
- added: Added
change2.edge.appserver to default change server list.
- fixed: Recover WIP login stashes if login-server network requests fails.
- changed: Don't recalculate numeric
EdgeTransaction.confirmationsvalue
- added: Add
EdgeTxActionGiftCardtype toEdgeTxAction
- added: Add
payoutTokenIdtoEdgeTxSwap
- added: Added
EdgeSubscribedAddresstype foronSubscribeAddressesandstartEngine. - added: Add
needsSynctoEdgeEngineSyncNetworkOptionsto fix sync reliability. - added: Persist
EdgeSubscribedAddressobjects to synced storage for each engine/wallet.
- added:
EdgeCurrencyInfo.evmChainId
- fixed: Account for other potentially fee-impacting props (e.g. OP_RETURN) in
- fixed: Do not "upgrade" swap quotes to the wrong tokenId.
- fixed: Avoid deprecated Gradle syntax.
- changed: Support 16KiB alignment on Android.
- added:
SwapAddressErrortype withreasonflags - changed: Require the React Native environment to include es2015 &
asyncsupport. - fixed:
splitWalletInforeturn value when an archived split wallet exists
- added: Log the device description on more requests, such as credential changes.
- fixed: Fixed syncing bug caused by ES5 transpilation.
- fixed: By-pass pin-wait period special case caused by duress mode feature.
- added: Added
usesChangeServerflag toEdgeCurrencyInfoto optimize syncing for engines which subscribe to the change-server. - fixed: Race condition between engine change-server subscription and periodic sync.
- fixed: Don't write the enabled tokens file until after we've read it from disk.
- changed: Fake PIN disable while in duress mode.
- changed:
SwapBelowLimitError&SwapAboveLimitErrornativeMin/nativeMaxnow optional - changed:
SwapBelowLimitError&SwapAboveLimitErrorpluginIddeprecated in favor ofswapPluginId
- fixed: Fix change-server reliability issues by fallback to pull-based syncing as a trade-off.
- fixed: Show the correct login errors when duress account is disabled.
- added: Support for zero-sync (aka silent-sync) enabled by the change-server protocol.
- changed: Batch change-server subscriptions for better reliability and efficiency.
- fixed: Allow pin change while device is in duress mode and user is logged into a non-duress account.
- fixed: Change conditions for syncNetwork pixies to avoid unnecessary sync and support for zero-sync (aka silent-sync) enabled by the change-server protocol.
- fixed: Create a package.json React Native export.
- changed: Allow for duress mode setup while in duress mode but only for non-duress accounts.
- fixed: Fixed regression causing pin disabled for other accounts when disabling PIN login within a duress account
- added: A
transactionsRemovedevent onEdgeCurrencyWallet.
- added: Add
getTokenDetailsto currency tools
- added: Added
forDuressAccountoption tocheckPin. - changed: Extended
onSubscribeAddressescallback to optionally include checkpoints. - fixed: Disabling pin-login while in duress mode disables pin-login for the main login.
- fixed:
loginWithPasswordbug disabled duress mode when doing an online login. - fixed: Properly fake duress mode settings while in duress mode.
- fixed: Disable duress pin mistakenly disables pin-login for entire account.
- fixed: Make
deleteRemoteAccounta no-op while in duress mode.
- fixed: Bug causing duress account creation from
loginWithKeywhile in duress mode. - fixed: Clean the Android build folder, so leftover files don't get published.
- changed: Show all local users even when in duress mode.
- changed: Stay in duress mode when using
loginWithPassword. - fixed: Broken
changePin({ enableLogin: false })when in duress mode. - fixed: Made
checkPasswordwork when in duress mode. - fixed: Made
changePassworda no-op for duress accounts - fixed: Made
enableOtp/disableOtpa no-op for duress accounts. - fixed: Spoof
changeRecoveryfor duress account. - fixed: Support duress mode when logging in with
loginWithKey(biometric login). - fixed: Unintentional pin timeouts caused by duress mode pin-logins.
- fixed: Deleting account while in duress account will forget account rather than throw error.
- fixed: Incorrect protocol for default change server URL.
- added: Added new Duress Mode feature.
- added:
importedflag from raw private keys intoEdgeWalletInfoFull - added: Integration with change-server.
- fixed: New transaction event should not be emitted when updating transaction metadata.
- added: Log changes to the
enabledTokenIdarray. - fixed: Create wallets in the correct location when using non-default appId's.
- changed:
saveTxemitsnewTransactionevent for unseen transaction.
- fixed: Only write the enabled tokens file when actually necessary.
- fixed: Metadata stomping bug in memory caused by new EdgeTransaction objects from the engine.
- fixed: Support the
loginServerprop on theMakeEdgeContextcomponent.
- fixed: Broken
EdgeContextProps.loginServertype definition.
- added:
EdgeContextOptions.loginServer. This replacesEdgeContextOptions.authServer, but without the/apipath component in the server URL. - changed: Auto-rotate between multiple login servers.
- deprecated:
EdgeContextOptions.authServer. UseEdgeContextOptions.loginServerinstead.
- added:
onSeenTxCheckpointcallback for new Seen Tx Checkpoint API. - added:
onTransactionscallback to support new Seen Tx Checkpoint API.
- added:
EdgeCurrencyInfo.chainDisplayNameandEdgeCurrencyInfo.assetDisplayName - deprecated:
EdgeCurrencyInfo.displayName
- deprecated:
EdgeCurrencyWallet.denominationToNativeandEdgeCurrencyWallet.nativeToDenominationutilities. Clients can perform these conversions on their own, using information that the core already provides. - fixed: Do not report the
segwitAddressas thepublicAddressfor wallets that have one.
- fixed: Fixed broken
fetchCorsimplementation caused by referencing error toEdgeIo.fetch.
- added: Add
avoidCorsAPI toEdgeFetchFunction - changed: Deprecated
fetchCorsAPI in favor offetchwithavoidCorsoption.
- added: Added
networkFeestoEdgeTransaction. - added: Add
getAddressestoEdgeCurrencyWallet - changed: Deprecated
getReceiveAddressfield onEdgeCurrencyWallet - changed: Deprecated
networkFeeandparentNetworkFeefield onEdgeTransaction.
- fixed: Accept
''to select the default API key.
- fixed: Do not error when changing the PIN on accounts with children.
- fixed: Incorrectly including
parentNetworkFeefor native currency transactions fromgetTransactions.
- fixed: Correctly update info-server payload in the background.
- changed: Log unknown swap errors as a crash.
- fixed: Barcode login works again.
- added: Support HMAC-based API keys.
- changed: Allow transactions tagged with actions through spam filter
- added:
minReceiveAmounttoEdgeSwapQuote- the minimum amount that can be received from the swap
- added: Report key wallet creation dates.
- added:
EdgeContext.fetchChallenge, to request an account-creation CAPTCHA. - added: Accept a challengeId in
EdgeContext.usernameAvailable
- added: Log HTTP 409 errors from login server with breadcrumbs.
- fixed: Use full URI to determine whether a request has previously succeeded CORS
- added:
EdgeStreamTransactionOptions.spamThreshold.
- added:
EdgeCurrencyEngine.otherMethodsWithKeys. These methods will be added toEdgeCurrencyEngine.otherMethods, but the core will insert private keys as the first parameter.
- added:
EdgeCurrencyTools.getDisplayPublicKeysto get the master public keys for a wallet. - added:
EdgeCurrencyConfig.getTokenIdto create a tokenId from an EdgeToken
- added:
EdgeCurrencyWallet.signBytesto sign raw bytes with a private key. - changed: Randomize data-sync start times.
- fixed: Work with React Native bridgeless mode on iOS and Android.
- added:
EdgeCurrencyConfig.getTokenIdto create a tokenId from an EdgeToken
- fixed: Edge case for filtering transactions with empty txs (zero amount & fee)
- added: Add
makeMemoryWalletmethod to ephemeral wallet objects that can query balances and spend funds
- fixed: Correctly handle
nullfetch bodies on Android.
- fixed: Filter transactions with empty (zero) nativeAmount and networkFee
- changed: Replace the CORS proxy servers with a fully native fallback on React Native.
- added: New
enableRbffield onEdgeSpendInfo - changed: Deprecated
rbfTxidfield onEdgeSpendInfo
- fixed: Add missing Swift import statement.
- added: Better documentation comments for the
EdgeObjectTemplatetypes. - changed: Expose the
EdgeTransaction.feeRateUsedprovided by the engine, and only use the on-disk copy as a fallback.
- added:
EdgeContextOptions.airbitzSupport, for loading legacy Airbitz data from disk. - fixed: Export the
EdgeObjectTemplatetype. - fixed: TypeScript v5 compatibility.
- added: New
'failed'value to confirmations field onEdgeTransactions
- added:
EdgeCorePluginOptions.infoPayload, containing arbitrary JSON provided by the info server. - added:
EdgeCurrencyPlugin.updateInfoPayload, called when we the core fetches a fresh payload from the info server.
- fixed: Correctly save
enabledTokenIdswhen creating a new wallet.
- added: Accept an
enabledTokensparameter to thecreateCurrencyWalletsmethod.
- fixed: Token activation causing error and insufficient funds when used with core 1.x plugins
- added: Make swap timeouts adjustable.
- fixed: Provide a
currencyCodefallback toEdgeCurrencyEngine.getMaxSpendable.
- added: Missing asset action types (claim, claimOrder, swapNetworkFee, and transferNetworkFee).
- fixed: Avoid superfluous property updates.
- fixed: Correctly populate
tokenIdonmakeSpendwhen using legacy currency plugins. - fixed: Correctly write
assetActionto disk.
- added:
EdgeCurrencyWallet.saveTxActionto add/editEdgeTransaction.savedAction - added:
EdgeTransaction.assetAction&EdgeSpendInfo.assetActionfor action info that is saved per token in a transaction. - added:
EdgeTransaction.savedAction&EdgeSpendInfo.savedActionas editable version ofchainAction - added:
EdgeTxActionFiataction type for fiat buy/sells - added:
EdgeTxActionTokenApprovalaction type for token approval transactions - changed: Extend
EdgeTxActionSwapto fully replaceEdgeSwapData - changed: Make
EdgeCurrencyInfo.defaultSettingsandEdgeCurrencyInfo.metaTokensoptional. - changed: Rename
EdgeTransaction.actiontochainAction - changed: Require
tokenIdto be null or string and eliminatecurrencyCodeinEdgeCurrencyWallet.getTransactions/getReceiveAddress,EdgeSpendInfo,EdgeSwapRequest,EdgeTxAction.EdgeAssetAmount,saveTxMetadata - removed:
EdgeAccount.rateCacheand related types, as well as the rate plugin concept. - removed:
EdgeContext.deleteLocalAccount - removed:
EdgeContext.listUsernames - removed:
EdgeContext.pinLoginEnabled - removed:
EdgeCurrencyInfo.symbolImageandsymbolImageDarkMono. - removed:
EdgeLoginRequest.displayImageUrl - removed:
listRecoveryQuestionChoicesand related types. - removed:
validateMemomethods and related types.
- added:
EdgeCurrencyCodeOptions.tokenId. This upgradesgetBalance,getNumTransactions, andgetReceiveAddress. - added:
EdgeCurrencyEngineCallbacks.onTokenBalanceChanged, which is thew new balance-update callback. - added:
EdgeCurrencyWallet.balanceMap, which reports balances by tokenId. - added:
EdgeParsedUri.tokenId - added:
EdgeTokenIdtype definition. - added:
EdgeTransaction.tokenId. - added: Allow deleting metadata fields by passing
nulltosaveTxMetadata. - deprecated:
EdgeCurrencyEngineCallbacks.onBalanceChanged. UseonTokenBalanceChangedinstead. - deprecated:
EdgeParsedUri.currencyCode. UsetokenIdinstead. - deprecated:
EdgeTransaction.currencyCode. UsetokenIdinstead.
- added: Extra cors servers to distribute load
- added:
EdgeAccount.createCurrencyWallets, for creating multiple wallets at once.
- added: Accept an
onNewTokenscallback fromEdgeCurrencyEngine. - added: Emit an
enabledDetectedTokensevent when auto-enabling tokens. - added: Expose auto-detected tokens as
EdgeCurrencyWallet.detectedTokenIds. - changed: Save enabled tokens by their tokenId, not by their currency code.
- fixed: Add missing
exportto theEdgeCorePluginFactorytype definition.
- added:
EdgeAccount.fetchSwapQuotes, to return all relevant quotes, and not just the best one.
- added:
EdgeTransaction.actionto tag known smart contract transaction types (swap, stake, etc.).
- added: Support optimized login syncing, checking to see if our credentials are up-to-date before performing a periodic login.
- added: Export cleaners for server types and testing data types.
- deprecated:
EdgeContext.listRecoveryQuestionChoices. The GUI provides its own localized strings now.
- added: Add a
ChallengeErrorand related types, which will allow the login server to request CAPTCHA validation. - fixed: Correctly pass
EdgeSpendTarget.memosthrough to currency plugins. - fixed: Do not let
EdgeTransaction.memosbe undefined, even for legacy plugins. - fixed: Restore "0x" prefix support for legacy hex memos.
- added: Currency-info support for multiple memos per transaction.
- added:
EdgeCurrencyInfo.memoOptions, lists acceptable memo types. - added:
EdgeCurrencyInfo.multipleMemos, set if a currency supports multiple memos in the same transaction. - deprecated:
EdgeCurrencyInfo.memoMaxLength - deprecated:
EdgeCurrencyInfo.memoMaxValue - deprecated:
EdgeCurrencyInfo.memoType. Note: If it is not set correctly, legacy plugins will no longer receive memos. Some buggy plugins forgot to do this, so those plugins will stop receiving memos. This is not a breaking change, though, since this field was always mandatory.
- added:
- added: Spending support for multiple memos.
- added:
EdgeSpendInfo.memos - deprecated:
EdgeSpendTarget.memo
- added:
- added: Transaction history support for on-chain memos.
- added:
EdgeTransaction.memos - deprecated:
EdgeTransaction.spendTargets.memo
- added:
- added: New infoServer and syncServer options for EdgeContextOptions
- fixed: Allow PIN changes on accounts without usernames.
- changed: Change the
errorevent type toany. This will becomeunknownin a future breaking release.
- changed: Reduced YAOB throttle to 50ms and apply throttle to return bridge calls
- added: canBePartial and maxFulfillmentSeconds to EdgeSwapQuote
- added: skipBlockHeight config option
- changed: Throttle the react-native bridge to 500ms. This will create some lag, but should improve overall performance.
- changed: Move the Android namespace definition out of the
AndroidMaifest.xmland into thebuild.gradlefile.
- fixed: Interpret HTTP 418 responses from the CORS proxy as errors.
- changed: Remove
fetchfallback logic. No proxy servers will be used. - changed: The
fetchCorsmethod is no longer deprecated. Use this if CORS might be an issue. Do not use this for any secrets or credentials.
- fixed: Escape bridge strings closer to serialization, for possibly better performance.
- fixed: Fallback to CORS-safe fetch functions on all errors to fix inconsistency with error messages across platforms.
- changed: Add fallback to bridged
fetchif request to edge-cors-proxy server fails.
- changed: Added a fallback to edge-cors-proxy server to
fetchmethod onEdgeIo.
- fixed: Enable WebView debugging on iOS 16.4+
- fixed: Correctly return transactions after a resync.
- added: Add an
EdgeAccount.getPinmethod. - fixed: Allow the
EdgeAccount.usernameproperty to update after callingchangeUsername.
- added: Add an
EdgeCurrencyWallet.streamTransactionsmethod. - deprecated: Pagination options for
getTransactions. UsestreamTransactionsif you need pagination. - fixed: Add the correct URI to
changeUsername, so it works. - fixed: Send a 'transactionsChanged' event when editing metadata.
- added: Add an
EdgeContext.forgetAccountmethod. - deprecated:
EdgeContext.deleteLocalAccount. UseEdgeContext.forgetAccountinstead. - fixed: Do not throw a "No username in reply" error when logging into light accounts via barcode.
- fixed: Do not crash when accessing
EdgeAccount.usernameon an account that has none.
- changed: Convert
createAccountto named parameters - changed: Return an array from
fetchLoginMessages - changed: Fix the
listRecoveryQuestionChoicesreturn type - changed: Allow usernames to be
undefined - removed: Ethereum hacks
- Ethereum address derivation.
EdgeAccount.signEthereumTransaction
- removed: Deprecated client-side token methods
EdgeCurrencyEngine.getEnabledTokens(no longer used)EdgeCurrencyEngine.getTokenStatus(no longer used)EdgeCurrencyWallet.addCustomTokenEdgeCurrencyWallet.changeEnabledTokensEdgeCurrencyWallet.disableTokensEdgeCurrencyWallet.enableTokensEdgeCurrencyWallet.getEnabledTokens
- removed: Deprecated display-key properties
EdgeCurrencyWallet.displayPrivateSeedEdgeCurrencyWallet.displayPublicSeed
- removed: Deprecated
EdgeAccount.loginKeyproperty - removed: Deprecated
keysproperties onEdgeAccountandEdgeCurrencyWallet - removed: Deprecated
EdgeTransaction.amountSatoshi - removed: Deprecated
optionsprop from theMakeEdgeContextcomponent. - removed: Unused
EdgeTransaction.wallet - removed: Unused
getTransactionsparameters - removed: Unused type definitions
EdgeBitcoinPrivateKeyOptionsEdgeCreatePrivateKeyOptions
- removed: No longer allow the OTP key to be passed as
EdgeAccountOptions.otp. This parameter only accepts 6-digit OTP codes now. Pass the key asEdgeAccountOptions.otpKeyinstead.
- deprecated:
EdgeContext.pinLoginEnabled. UseEdgeContext.localUsersinstead. - fixed: Correctly handle
startEntriesingetTransactions, by always returning the requested number of transactions.
- added:
EdgeAccount.changeUsername. - added:
EdgeAccount.getLoginKey. - deprecated:
EdgeAccount.loginKey. UseEdgeAccount.getLoginKeyinstead. - deprecated:
EdgeContext.listUsernames. UseEdgeContext.localUsersinstead.
- fixed: Return transactions from getTransactions, even if they have no on-disk metadata
- changed: Remove deprecated methods in unit tests
- fixed: Return transactions from getTransactions, even if they have no on-disk metadata
- added:
EdgeUserInfo.username. - added: Provide
EdgeAccountmethods for reading public and private keys:getDisplayPrivateKeygetDisplayPublicKeygetRawPrivateKeygetRawPublicKey
- added: Matching
EdgeCurrencyToolsmethods for getting display keys. - deprecated:
EdgeCurrencyEnginemethods for getting display keys. - deprecated:
EdgeAccountandEdgeCurrencyWalletkey properties.
- added: Log any swap plugins that time out.
- added:
EdgeParsedUri.minNativeAmount. Note: This is not a breaking change, but we incorrectly updated the version number as if it were.
- fixed: Stop incorrectly writing metadata for sends. This should make editing metadata more stable.
- fixed: Remove check that spentTargets.length > 0 in makeSpend
- changed: Removed private keys from
walletInfoformakeCurrencyEngine - added: Add an
EdgeTransaction.isSendflag.
- fixed: Remove check that spentTargets.length > 0 in makeSpend
- fixed: Incorrectly formed
privateKeysargument forsignTxcall to the engine
- fixed: Passing only the private keys to
EdgeEnginePrivateKeyOptions['privateKeys']forsyncNetwork, instead of the entireEdgeWalletInfo
- added: Pass private keys to
EdgeCurrencyEngine.signTxand similar functions. - changed: Only accept base-10 integer balances from currency engines, and ignore all other balance strings.
- removed: Make deprecated token methods optional on
EdgeCurrencyEngine, so they can be removed.
- added: Add
expireDatetoEdgeParsedUri
- fixed: Update
denominationToNativeandnativeToDenominationto look atallTokens, instead of the legacy token lists.
- added:
EdgeAccount.currencyEngineErrors- these are set for wallets that fail to load. - added:
EdgeAccount.waitForAllWallets()- resolves once all wallets have either loaded or failed (but balances may still be syncing).
- added: Provide login request images for both dark & light mode apps as
EdgeLoginRequest.displayImageDarkUrlandEdgeLoginRequest.displayImageDarkUrl. - added:
EdgeFakeContextOptions.allowNetworkAccess, which allows non-Edge traffic to pass through to the real network. - added:
EdgeWalletInfoFull.migratedFromWalletId, which can be saved when sweeping funds from an old wallet to a new wallet. - deprecated:
EdgeLoginRequest.displayImageUrl. Use the new dark or light mode images instead.
- added: Support for token activation
- changed: Convert source code to TypeScript internally. No changes should be visible externally, aside from some file locations.
- added: New 'syncing' to confirmations API
- fixed: Bug in
validateConfirmationsfunction incorrectly inferring a transaction as 'dropped'
- fixed: Re-publish with missing files.
- changed: Make sensitive account & wallet properties, like keys, non-enumerable.
- changed: Use the pluginId as the wallet logging prefix, instead of the currency code.
- added: Always-enabled tokens. The currency engine checks these for balances and transactions, but they do not appear in the per-wallet enabled token lists.
EdgeCurrencyConfig.alwaysEnabledTokenIdsEdgeCurrencyConfig.changeAlwaysEnabledTokenIds
- added:
EdgeCurrencyTools.checkPublicKey, which provides a mechanism for currency plugins to refresh their cached public keys if necessary. - added:
EdgeSwapInfo.isDexandEdgeSwapRequestOptions.preferType, to always prefer DEX swaps over centralized swaps. - changed: Always select the "transfer" plugin if it returns a quote, regardless of price.
- added: Accelerate Transaction API
- fixed: Clean swap quotes before logging to prevent circular reference error
- fixed: Export more accurate TypeScript definitions for our React Native components.
- added: New options for getReceiveAddress
- changed: Upgrade biggystring to 4.0.0
- changed: Increase BCH replay protection transaction value amount
- changed: Upgrade redux to 4.2.0
- changed: Upgrade redux-keto to 0.3.5
- fixed: Login server override testing
- added:
EdgeTransaction.walletId. - added: Add the swap request to the quote object as
EdgeSwapQuote.request. - changed: Change login server to login.edge.app, and filter which domains we allow.
- deprecated:
EdgeTransaction.wallet. UseEdgeTransaction.walletIdinstead.
- added: Specifying token spends by their ID, instead of their imprecise currency code:
EdgeSpendInfo.tokenIdEdgeSwapRequest.fromTokenIdEdgeSwapRequest.toTokenId
- deprecated: Spending tokens by their currency code.
EdgeSpendInfo.currencyCodeEdgeSwapRequest.fromCurrencyCodeEdgeSwapRequest.toCurrencyCode
- fixed: Correctly pass
EdgeSpendInfo.pendingTxsto the currency plugin.
- added: Include the
loginIdinEdgeContext.localUsers. - added: Accept an optional metadata parameter to
EdgeSwapQuote.approve.
- added:
hexoption for memoType
- fixed: Correctly pass
EdgeSpendInfo.skipChecksto the currency plugin.
- added:
EdgeContext.clientId. - added:
EdgeSpendInfo.pendingTxsandEdgeSpendInfo.skipChecksflags. - fixed: Show useful information when logging errors, instead of just
{}.
- changed: Allow individual plugins to resist being loaded by returning
undefinedinstead of anEdgeCurrencyPluginobject.
- changed: Randomly generate loginIds so recycled usernames don't cause conflicts
- fixed: Upgrade edge-sync-client to include patch
- added: Add optional from/to parameter to min and max swap errors
- upgrade: yaob dependency to include error serialization fix
- added: New
deleteRemoteAccountfunction to theEdgeAccountobject
- fixed: Loosen constraint for checking tx confirmation status in 'getTransaction' and Make the condition identical to the condition in onBlockHeightChanged.
- added: New Confirmations API on
EdgeTransactiontype
- fixed: Do not uselessly re-save the custom tokens on every login.
- fixed: Correctly load custom tokens (regression from last release).
- fixed: Correctly load tokens from the legacy settings file.
- fixed: Correctly report errors when adding invalid custom tokens.
- added:
EdgeCurrencyConfig.allTokens. - fixed: Do not erroneously enable tokens when editing their currency codes.
- fixed: Never return
undefinedforEdgeCurrencyConfig.customTokens. - fixed: Handle token edits that change the
tokenIdorcurrencyCode. - removed: Do not treat parent currencies as tokens. This logic was unused, so update the documentation.
- added:
EdgeCurrencyWallet.currencyConfig. - changed: Save custom tokens to disk.
- added:
EdgeCurrencyConfig.addCustomToken. - added:
EdgeCurrencyConfig.changeCustomToken. - added:
EdgeCurrencyConfig.removeCustomToken. - deprecated:
EdgeCurrencyWallet.addCustomToken.
- added:
- changed: Save enabled tokens to disk.
- added:
EdgeCurrencyWallet.changeEnabledTokenIds - added:
EdgeCurrencyWallet.enabledTokenIds - deprecated:
EdgeCurrencyWallet.changeEnabledTokens - deprecated:
EdgeCurrencyWallet.disableTokens - deprecated:
EdgeCurrencyWallet.enableTokens - deprecated:
EdgeCurrencyWallet.getEnabledTokens
- added:
- changed: Update the token API for currency plugins. Plugins should implement the new methods, then turn the old methods to no-ops.
- added: Optional
EdgeCurrencyEngine.changeCustomTokens - added: Optional
EdgeCurrencyEngine.changeEnabledTokenIds - added: Optional
EdgeCurrencyTools.getTokenId - deprecated:
EdgeCurrencyEngine.addCustomToken - deprecated:
EdgeCurrencyEngine.disableTokens - deprecated:
EdgeCurrencyEngine.enableTokens - deprecated:
EdgeCurrencyEngine.getEnabledTokens - deprecated:
EdgeCurrencyEngine.getTokenStatus
- added: Optional
- fixed: Avoid an internal crash on logout while reloading addresses.
- fixed: Make our code compatible with older Java versions again.
- fixed: Use the correct React dependency in the iOS podspec.
- changed: Allow individual log sources to be set to
silent. - changed: Move some string manipulations off of the main Java thread.
- changed: Perform React Native disk accesses on their own threads.
- added:
EdgeCurrencyInfo.canReplaceByFee. - changed: Make
denominationToNativeandnativeToDenominationonly look at the currencies available on the current wallet.
- fixed: Stop adding
undefinedentries toEdgeAccount.currencyWallets.
- added: Define a new
EdgeTokentype and make that available asEdgeCurrencyConfig.builtinTokensandEdgeCurrencyConfig.customTokens. - added: Define a new
EdgeCurrencyPlugin.getBuiltinTokensmethod, and use that to populateEdgeCurrencyConfig.builtinTokenswhen available. - added: Pass
EdgeTokenfields toEdgeCurrencyEngine.addCustomToken, along with the existingEdgeMetaTokenfields. - deprecated:
EdgeCurrencyInfo.defaultSettings - deprecated:
EdgeCurrencyInfo.metaTokens - deprecated:
EdgeCurrencyInfo.symbolImage - deprecated:
EdgeCurrencyInfo.symbolImageDarkMono
- added: Include an
importedflag with all new wallet keys, to indicate whether they were derived freshly or imported from user-entered data. - fixed: Do not hang forever if creating a currency engine fails.
- changed: Add comments and improve organization in the public types file.
- changed: Use cleaners to load & save many files for additional safety.
- fixed: Improve wallet start-up performance by loading fewer files.
- changed: Send the optional
keyOptionsparameter through theimportKeymethods. - fixed: Remove JCenter from the Android build file.
- added:
EdgeCurrencyWallet.stakingStatus, along with matching engine methods for returning and updating this. - fixed: Removed unnecessary C++ compiler flags.
- fixed: Correctly select swaps with the best price.
- fixed: Correctly prefer swap plugins with active promo codes.
- changed: Add more logging to the swap procedure.
- fixed: Only write the
deviceDescriptionon sent transactions. - fixed: Add a native
requiresMainQueueSetupmethod to silence a warning on iOS.
- changed: Write files atomically on Android, so out-of-disk and other errors do not lead to data corruption.
- fixed: Upgrade edge-sync-client, so info server errors are no longer fatal.
- fixed: Do not destroy the core WebView when opening Safari links on iOS.
This release completely changes the way React Native works, both to improve performance and to make integration and debugging much easier.
- changed: Simplify the React Native integration to "just work".
- Stop depending on external libraries such as react-native-fast-crypto, react-native-randombytes, or react-native-webview.
- Use React Native auto-linking to integrate all native code, HTML, and Javascript needed to run the core.
- Accept core plugins via a
pluginUrisprop toMakeEdgeContextorMakeFakeEdgeWorld. - Allow core debugging by running
npm run startin this repo to start a dev server, and then setting thedebugprop to true. - Accept an
allowDebuggingprop on Android to enable WebView debugging in general (useful for debugging plugins).
- changed: Require
EdgeCurrencyEnginemethods to return promises. - changed: Mark methods as
readonlyin the TypeScript definitions, to match what Flow was already doing.
- fixed: Allow logins with an appId to approve or reject vouchers.
- added: Allow maximum swaps by passing "max" to
EdgeSwapRequest.quoteFor. - added: Add an
EdgeCurrencyEngine.getMaxSpendablemethod for native max-spend calculations.
- added:
EdgeSpendTarget.memo, which is a renamed version ofEdgeSpendTarget.uniqueIdentifier. - added:
EdgeCurrencyInfo.memoType,EdgeCurrencyInfo.memoMaxLength,EdgeCurrencyInfo.memoMaxValue. Use these to learn which currencies support memos. - added:
EdgeCurrencyTools.validateMemo&EdgeCurrencyWallet.validateMemo. Use these to check memos for validity before sending. - deprecated:
EdgeSpendTarget.uniqueIdentifier. UseEdgeSpendTarget.memoinstead.
- fixed: Gracefully handle errors while reading the exchange-rate hint cache.
- fixed: Correctly match server-returned children with their on-disk stash entries. This produces more accurate errors if the server loses a child.
- fixed: onWcNewContractCall callback type
- fixed: Bitcoin and Bitcoin xpub documentation
- added: Implement TypeScript utilities in Flow
- added: Wallet Connect types and onWcNewContractCall callback
- updated: Ethereum, Bitcoin, and Bitcoin xpub documentation
- fixed: Type-safety and null checks
- fixed: Allow
import 'edge-core-js/types'to work in TypeScript.
- changed: Upgrade cleaners to v0.3.11
- fixed: Restore Webpack production mode
- fixed: Limit the number of documents uploaded to the sync server in one request.
- fixed: Upgrade to edge-sync-client v0.2.1, which improves the sync-server retry logic.
- changed: Use edge-sync-client to retrieve the list of sync servers instead of a hard-coded list.
- fixed: If multiple metadata files exist for a single transaction, always load the oldest one.
- fixed: Ensure that transactions never have
undefinedas anativeAmount. - fixed: Change the WebPack build settings to allow easier debugging.
- fixed: Fix the React Native WebView bundle to work on really old devices.
- Replace nullish coalescing operator with ternary
- added: Save the device description on sent transactions.
- added: Add an optional
InsufficientFundsError.networkFeefield. - fixed: Avoid performing back-to-back initial syncs.
This is a breaking release to remove various deprecated features that have accumulated.
- Remove several methods and properties:
EdgeAccount.exchangeCache- UseEdgeAccount.rateCacheinstead.EdgeContext.getRecovery2Key- UseEdgeUserInfo.recovery2Keyinstead.EdgeContext.pinExists- UseEdgeUserInfo.pinLoginEnabledinstead.EdgeContext.on('login')- UseEdgePendingEdgeLogin.watch('account')instead.EdgeContext.on('loginError')- UseEdgePendingEdgeLogin.watch('error')instead.EdgeContext.on('loginStart')- UseEdgePendingEdgeLogin.watch('username')instead.EdgeCurrencyWallet.exportTransactionsToCSV- Moved to edge-react-gui project.EdgeCurrencyWallet.exportTransactionsToQBO- Moved to edge-react-gui project.EdgeCurrencyWallet.getBalance- UseEdgeCurrencyWallet.balanceinstead.EdgeCurrencyWallet.getBlockHeight- UseEdgeCurrencyWallet.blockHeightinstead.EdgeCurrencyWallet.getDisplayPrivateSeed- UseEdgeCurrencyWallet.displayPrivateSeedinstead.EdgeCurrencyWallet.getDisplayPublicSeed- UseEdgeCurrencyWallet.displayPublicSeedinstead.EdgeCurrencyWallet.startEngine- UseEdgeCurrencyWallet.changePaused(false)instead.EdgeCurrencyWallet.stopEngine- UseEdgeCurrencyWallet.changePaused(true)instead.EdgeEncodeUri.legacyAddress- UseEdgeEncodeUri.publicAddressinstead.EdgeEncodeUri.segwitAddress- UseEdgeEncodeUri.publicAddressinstead.
- Remove the
optionsprop on theMakeEdgeContextReact Native component.- Just pass any context options as normal props.
- Remove the
typeproperty from all error classes, as well as the globalerrorNamestable.- Use the new error-identification methods, such as
asMaybePasswordError, to determine if an error is a specific type.
- Use the new error-identification methods, such as
- Stop allowing
nullin places where we expect anEdgeAccountOptionsobject.- Just pass
undefinedif this parameter isn't used.
- Just pass
- Return the
EdgeAccount.otpResetDateas aDateobject.
The following changes affect Edge core plugins:
- Remove
EdgeIo.console- UseEdgeCorePluginOptions.loginstead. - Define
EdgeCurrencyEnginemethods to returnPromise<void>instead ofPromise<mixed>. - The core will no longer upgrade
pluginNametopluginIdfor legacy currency plugins.
- Add a
pausedflag toEdgeCurrencyWallet, and a matchingchangePausedmethod. - Deprecate
EdgeCurrencyWallet.startEngine- UseEdgeCurrencyWallet.changePaused(false)instead. - Deprecate
EdgeCurrencyWallet.stopEngine- UseEdgeCurrencyWallet.changePaused(true)instead. - Clean legacy Airbitz wallet files to prevent potential crashes at login.
- Enable safari10 option in webpack minimizer to fix stuck loading screens on iOS 10
- Add
crashandbreadcrumbmethods toEdgeLogfor crash reporting. - Deprecate the
optionsprop on theMakeEdgeContextReact Native component.- Just pass any context options as normal props.
- Reset the wallet sync ratio as part of a resync.
- Deprecate several methods:
EdgeContext.getRecovery2Key- UseEdgeUserInfo.recovery2Keyinstead.EdgeCurrencyWallet.exportTransactionsToCSV- Moved to edge-react-gui project.EdgeCurrencyWallet.exportTransactionsToQBO- Moved to edge-react-gui project.EdgeCurrencyWallet.getDisplayPrivateSeed- UseEdgeCurrencyWallet.displayPrivateSeedinstead.EdgeCurrencyWallet.getDisplayPublicSeed- UseEdgeCurrencyWallet.displayPublicSeedinstead.
- Upgrade build scripts to use Webpack 5.
- Fix an error which was causing all new 2FA-protected logins to fail.
- Add cleaners for all core error types, such as
asMaybeOtpError. These provide a type-safe way to identify different error objects that may have been thrown. - Deprecate the old
errorNamestable.
- Fix a code-packaging error in the previous release.
- Improve the
EdgePendingEdgeLoginAPI.- Add a
statefield to track the progress of the barcode login. - Add other fields to hold the outcome of the barcode login.
- Add a
watchmethod to track changes to these fields.
- Add a
- Allow
EdgeCurrencyEngine.dumpDatato return a promise. - Cache exchange-rate hints from all local accounts to speed up initial rates query.
- Validate incoming & outgoing network requests even more thoroughly.
- Fix the
EdgeContext.listRecoveryQuestionChoicesmethod.- Fix the runtime data validation to accept the actual server return values.
- The return type of
Promise<string[]>has always been incorrect, so the correct return type is nowPromise<EdgeRecoveryQuestionChoice[]>. - As a stop-gap measure, though the return-type definitions is now
any. We will insert the correct return type definition in the next breaking release.
- Load all supported currency pairs at launch to improve exchange rate loading. List is replaced by enabled wallets once the wallets are loaded.
- Fix the
parentNetworkFeefield missing in certainEdgeTransactioninstances. - Fix missing transactions while searching.
- Perform more data validation on network requests.
- Fix a bug that would prevent login vouchers from working on Airbitz accounts with 2fa turned on.
- Expose periodic 2fa errors through the context's
errorevent. - Add an
EdgeAccount.repairOtpmethod.
- Ensure all crypto to crypto exchange rates have a route to USD
- Add currency code column to CSV exports
- Update
EdgeCurrencyEngineto allowgetFreshAddres,addGapLimitAddresses, andisAddressUsedto return promises.
- Periodically perform a re-login to sync logged-in account credentials with the server.
- Fix a bug that would prevent the
EdgeContext.logSettingsproperty from updating.
- Add an
EdgeContextOptions.logSettingsproperty to control logging verbosity, along with anEdgeContext.changeLogSettingsmethod. - Deprecate the
EdgeEncodeUri.legacyAddressandEdgeEncodeUri.segwitAddressparameters. Just pass the address inEdgeEncodeUri.publicAddress, regardless of format. - Update the swap logging to give more information about failed quotes.
- Upgrade Airbitz accounts with secret-key login
- Filter duplicates from rateHints
- Add low priority edgeRates bias
- Update linting
- (feature) Add ability to filter
getTransactions()withsearchStringoption - (feature) Add requested currency pair to rateHints if it cannot be served by searchRoutes()
- (feature) Identify enabled currency and fiat pairs to pass to exchange rate plugins
- (feature) RBF Transaction Support
- Adds new
rbfTxidoptional string toEdgeSpendInfotype definition - Adds new
rbfTxidto the returnedEdgeTransactionobject inmakeSpendonEdgeCurrencyWalletobjects
- Adds new
- Include sync keys in the logs
- (feature) Add onAddressChanged callback
- This allows a plugin to inform the GUI of address or account name updates (e.g. when an EOS account becomes activated)
- (fix) Don't crash when using a barcode to log into accounts with pending OTP resets.
- (fix) Correctly expire any vouchers on the device while doing a barcode login.
- (fix) Upgrade to node-fetch v2.6.1.
- (fix) Switch to the new voucher endpoint.
- (fix) Always return
OtpError.voucherIdwhen available. - (feature) Expose an
EdgeAccount.pendingVouchersfield. - (feature) Expose as
EdgeUserInfo.voucherIdfield.
- (feature) Add a
keyLoginEnabledflag toEdgeUserInfo. - (feature) Add a
lastLogindate toEdgeUserInfoandEdgeAccount.
- (feature) Add a login voucher system. When a new device tries to log into an account with 2-factor security, the server can issue a voucher along with the
OtpError. Existing devices with the 2-factor token can then log in and either approve or deny the voucher usingEdgeAccount.approveVoucherorEdgeAccount.rejectVoucher. TheEdgeLoginMessagestype also includes a list of pending vouchers now. - (chore) Upgrade to hash.js v1.1.7 and redux-keto v0.3.4.
- (feature) Allow users to pass 6-digit OTP codes directly. This means
EdgeAccountOptions.otpis deprecated for passing the secret. UseEdgeAccountOptions.otpKeyto pass the secret, orEdgeAccountOptions.otpto pass the 6-digit code. - (feature) Save usernames for first-time logins that fail 2fa.
- (feature) Save & return the account creation date as
EdgeAccount.created. - (fix) Harden server response parsing.
- (fix) Upgrade many dev dependencies.
- Restore sync failure messages in the UI
- Allow the user to pass an
onLogcallback to the context constructor- This allows our CLI to silence the core and supports more flexibilty in GUI log handling
- Apply cleaners to the login stashes as well as remove some legacy disklet API usage
- Support date filters for
getTransactions - Save fee information in the spend metadata
- Send sync failures to the logs, not the UI
- Fix BSV replay protection feature broken by commit 11e752d8
- Update info server URI
- Add bias for Coinmonitor exchange rate provider
- Fix type annotations on some optional parameters that were accidentally marked as mandatory.
- Work around an issue in edge-currency-bitcoin that prevented spends from saving metadata.
- Expose an
EdgeAccount.rootLoginId.
- Save the decryption keys for Monero spends (requires a matching Monero plugin change).
- Replace git2.airbitz.co with git1.edge.app in the sync server list.
- Save transaction metadata with spends.
- Save an
EdgeTransaction.spendTargetslist with every spend. - Save an optional
EdgeTransaction.swapDatafield with swap transactions.
- Prioritize the
wazirxrate plugin when available.
- Use constant-time comparisons for encryption & decryption.
- Upgrade redux-keto dependency & fix uncovered type errors.
- Improve git server error messages & rotation logic.
This is a breaking release to address some issues in the swap API.
This release also renames all pluginName instances to pluginId. This affects all plugin types, but the core contains compatibility code so old currency plugins continue working (but not for rate or swap plugins, which are easier to just upgrade).
- Breaking changes to the swap API:
- Return a new
EdgeSwapResultstructure fromEdgeSwapQuote.approve. This now contains thedestinationAddressandorderIdthat used to exist on theEdgeSwapQuotetype. - Merge the
EdgeSwapPluginQuoteandEdgeSwapQuotetypes into one.- The
EdgeSwapQuote.isEstimateflag is no longer optional, but must betrueorfalse. - Remove
EdgeSwapQuote.quoteUri. Just concatenateEdgeSwapInfo.orderUriwithEdgeSwapResult.orderIdto get this.
- The
- Rename
EdgeSwapInfo.quoteUritoorderUri. - Remove the deprecated
pluginsoption fromEdgeSwapRequestOptions.
- Return a new
- Other breaking changes:
- Remove deprecated
EdgeAccount.currencyTools. UseEdgeAccount.currencyConfig. - Remove deprecated
EdgeAccount.exchangeTools. UseEdgeAccount.swapConfig. - Remove deprecated
EdgeAccount.getExchangeQuote. UseEdgeAccount.fetchSwapQuote. - Remove deprecated
EdgeAccount.pluginData. UseEdgeAccount.dataStore. - Remove deprecated
EdgeIo.WebSocket.
- Remove deprecated
- Prioritize swap providers with active promo codes.
- Simplify the API for providing plugin swap promo codes.
- Quick re-publish to fix Flow bug in previous release.
- Fix the TypeScript type definitions.
- Add a way to prioritize different exchange-rate plugins.
- Add a way to pass promotion codes & disable swap providers on-the-fly while quoting.
- Deprecate
pluginNamefields in favor ofpluginId, which is a less confusing name. - Add a way to pass a preferred plugin to
fetchSwapQuote.
- Add
EdgeCurrencyInfo.xpubExplorer.
- Record auth server failures in the log.
- Type updates:
- Deprecate
EdgeIo.console. - Supply our own types for
EdgeIo.fetch, which clarify our supported feature set. - Fix
EdgeOtherMethodsto be read-only.
- Deprecate
- New features:
- Pass a
logmethod to plugins and engines. - Add an
EdgeIo.fetchCorsmethod on platforms that support it.
- Pass a
- Fixes:
- Fix Edge login network error handling.
- Use the
logmethod internally, which changes our message format.
- Work around a balance update bug.
- Add a
hiddenwallet state.
- Generate TypeScript type definitions from the public Flow types.
- Add Flow type definitions to the error types.
- Perform the React Native polyfill more safely.
- Add an
EdgeCurrencyWallet.changeEnabledTokensmethod.
- Save 2-factor keys sent back from the auth server.
- Expose the
recovery2KeyinEdgeContext.localUsers.
- Include a default API key in the core, in case the user initializes the context with a blank
apiKey.
- Add a
currencyCodetoInsufficientFundsError. - Update the readme with helpful information.
- Fix swap quote prioritization logic to always prefer exact quotes.
- Add an
EdgeCurrencyConfig.importKeymethod. - Add optional properties to
EdgeCurrencyInfo:canAdjustFeescanImportKeyscustomFeeTemplatecustomTokenTemplate
- De-duplicate dependencies.
- Enable minification on React Native builds.
- Always prefer top-level currency codes over tokens, if there is a conflict.
- Close unused swap quotes.
- Update YAOB correctly when plugin configurations change.
- Simplify the react-native WebView debug appearance.
- Update linting and build tooling.
- Add a new
EdgeContext.pausedcontrol for stopping background work.
- Fix OTP settings to only apply to the root login.
- Add
closeevents to Flow type definitions. - Apply timeouts to the exchange-rate fetching logic.
- Add polyfills for old React Native WebView implementations.
- Pass
otherParamsthrough theEdgeCurrencyWalletimplementation.
- Fix exchange-rate fetching again (for real this time?).
- Fix exchange-rate fetching again.
- rn: Re-start the core when the
WebViewreloads.
- Improve swap error-ranking logic.
- Make exchange-rate fetching more robust.
- Indicate which swap quotes are only estimates, and de-prioritize those.
Breaking changes:
- Remove swap plugins from core. These now live in the
edge-exchange-pluginsproject. - Tighten up spending-related Flow types
Fixes:
- Do not fail login when accounts contain broken Ethereum keys.
- Support
react-native-webview^5.0.1. - Pass custom tokens to currency plugin URI logic.
- Improve logging & error messages.
- Remove unused
EdgeSpendInfofields.
- Do not let missing files crash
EdgeCurrencyWallet.getTransactions. - Fix a packaging error that would wrongly include
src/index.jsin the distribution. - Work around bad Litecoin defaults in the bitcoin plugin.
- Cache public keys at wallet start-up.
- Reduce logging related to missing fiat amounts.
- Throttle wallet updates.
- Upgrade to disklet v0.4.0.
- Add an optional
EdgeCurrencyTools.importPrivateKeymethod.
- Delay bridge crash
- Harden the react-native WebView bridge to avoid crashes.
- Add Flow types for the plugin initialization functions.
- Work around bugs in the Bitcoin plugin resulting in missing wallets.
- Do not send rate plugin errors to
EdgeContext.on('error').
- Fix out of range errors for ChangeNOW.
- Add a standalone
fetchLoginMessagesfor react-native. - Add a secret
unfilteredIndexhack toEdgeCurrencyWallet.getTransactionsto work around a missing transaction bug. - Add an
EdgeCurrencyWallet.publicWalletInfoproperty.
This is a major release with large numbers of breaking changes for all platforms:
- Remove legacy type names.
- Remove legacy account and context callbacks.
- Remove
EdgeAccount.fetchSwapCurrencies. - Rename
EdgeSwapQuoteOptionstoEdgeSwapRequest. - Replace
makeFakeEdgeContextswith a newmakeFakeEdgeWorldAPI. - Replace
makeFakeIoswithmakeFakeIo. - Remove
errornamespace. - Rework plugin loading:
- Plugins must now provide their own networking and crypto.
- The
addEdgeCorePlugins/lockEdgeCorePluginsfunctions install plugins. - The
makeEdgeContextfunction accepts a plain JSON plugin configuration object.
- Swap plugins:
- Remove
pluginTypeproperty - Remove
makeToolsmethod - Remove
EdgePluginEnvironment&EdgeSwapToolstypes - Add
checkSettingsmethod &EdgeSwapPluginStatustype - Add
fetchSwapQuotemethod
- Remove
- Rate plugins:
- Rename
EdgeExchangePairHinttoEdgeRateHint - Rename
EdgeExchangePairtoEdgeRatePair - Rename
EdgeExchangePlugintoEdgeRatePlugin - Rename
exchangeInfotorateInfo - Rename
rateInfo.exchangeNametorateInfo.displayName - Rename
fetchExchangeRatestofetchRates
- Rename
- Currency plugins:
- In
EdgeCurrencyInfo- Change
walletTypestowalletType - Rename
currencyNametodisplayName
- Change
- In
EdgeCurrencyPlugin- Rename
makeEnginetomakeCurrencyEngine - Move
changeUserSettingsto the engine. - Move all other features behind a
makeCurrencyToolsmethod &EdgeCurrencyToolstype - Make methods fully async
createPrivateKeyderivePublicKeyparseUriencodeUri
- Rename
- In
EdgeCurrencyEngineOptions- Rename
optionalSettingstouserSettings - Remove legacy disklet
- Rename
- In
EdgeCurrencyEngine- Remove unused options from
isAddressUsed&addGapLimitAddresses - Remove
EdgeUnusedOptionstype - Remove
EdgeDataDump.pluginType
- Remove unused options from
- In
For React Native in particular, we have the following changes:
- Replace
makeEdgeContextwith a<MakeEdgeContext />React component. - Replace
makeFakeContextswith a<MakeFakeEdgeWorld />React component. - Remove
makeReactNativeIo. - The assets in
lib/react-nativeneed to be installed into the app bundle and pulled in via HTML:- Android:
file:///android_asset/edge-core/index.html - iOS:
file://${main-bundle-path}/edge-core/index.html
- Android:
- Plugins need to be compiled as standalone scripts and installed in the same way.
- Ship the library as debug-friendly ES 2018 code. Non-standard features like Flow are still transformed out.
- Add an
edge-core-js/typesentry point containing just Flow types. - Remove
peerDependencies, which was causing problems for users on platforms other than React Native.
- Add
payinAddressanduniqueIdentifierto swap metadata.
- Fix
getTransactionsfor compatibility withedge-currency-accountbasedEthereum. - Fix AUD currency lookup bug.
- Clean up Flow types
- Fix
EdgeGetTransactionsOptions.startEntriestype. - Add an
EdgePluginMaphelper type.
- Fix
- Upgrade build tools to fix Travis.
- Fix
peerDependenciesspelling. - Expose repo syncing through the secret internal API.
- Add Faa.st swap plugin.
- Log more steps during login.
- Upgrade to Flow v0.89.0.
- Upgrade to redux-pixies v0.3.6 to fix ghost wallets appearing at login.
- Sync the account keys during a
loginWithKey.
- Fix
getTransactionsto return token transactions in the requested range. - Fix ChangeNOW 400 errors.
- Fix ChangeNOW support email & quote URI.
- Add
EdgeSwapQuote.destinationAddress. - Re-apply replay protection when splitting BCH->BSV a second time.
- Fix ChangeNOW out of range errors.
- Add ChangeNOW swap plugin.
- Upgrade to disklet v0.3.0
- Replace
folderandlocalFolderwithdiskletandlocalDiskletin all API's to use the new Disklet API.
- Replace
- Removed deprecated API's:
- Renamed API's:
EdgeCurrencyConfig.changePluginSettings(usechangeUserSettings)EdgeCurrencyConfig.changeSettings(usechangeUserSettings)EdgeCurrencyConfig.pluginSettings(useuserSettings)EdgeCurrencyConfig.settings(useuserSettings)EdgeSwapConfig.exchangeInfo(useswapInfo)EdgeSwapConfig.settings(useuserSettings)EdgeSwapConfig.changeSettings(usechangeUserSettings)EdgeSwapCurrencies.exchanges(usepluginNames)EdgeSwapQuote.exchangeService(usepluginName)
- Legacy swap API:
EdgeCurrencyWallet.getQuoteEdgeContext.getExchangeSwapRateEdgeContext.getExchangeSwapInfo
- Renamed API's:
- Upgraded to Disklet v0.3.0 API:
EdgeAccount.folder->EdgeAccount.diskletEdgeAccount.localFolder->EdgeAccount.localDiskletEdgeCurrencyWallet.folder->EdgeCurrencyWallet.diskletEdgeCurrencyWallet.localFolder->EdgeCurrencyWallet.localDisklet
- Made
convertCurrencyasync. - Made
makeFakeContextsasync. - Make
EdgeContextOptions.apiKey&EdgeContextOptions.appIdmandatory. - Optimize the build system.
- Fixed an issue with
wallet.getTransactions()that sometimes it wouldn't return the oldest transactions. - Small cleanups and type fixes
- Fix the splitting/replay protection from Bitcoin Cash to Bitcoin SV
- Some flow fixes
- Add metadata to replay protection transactions
- Do not await on
reloadPluginSettings, This prevents network roundtrips from blocking login. Upwards of 30s saved on really slow networks.
- When splitting from Bitcoin Cash to Bitcoin SV, preform a max spend to self to have replay protection before splitting the wallet
- Fix detecting and throwing of ShapeShift errors due to geo location or unverified accounts
- Improve
fetchSwapQuoteerror hierarchy with rich information about different possible error conditions.
- Fix
getTransactionsfrom only returning a subset of transactions - Fix swap exchange to gracefully fallback if one exchange errors
- Properly filter out a swap provider if they don't support a
getQuotecurrency pair
- Do not call
makeEngineon wallets which are archived or deleted
- Allow
createPrivateKey,derivePublicKey,parseUri, andencodeUrimethods from currency plugins to be async
- Fix a potential crash on logout.
- Allow swap plugins to be disabled.
- Add
supportEmailtoEdgeSwapInfo. - Fix swapping from coins with unique id's using Changelly.
- Log more swap steps.
- Upgrade to Disklet v0.2.8.
- Remove change to types of
createPrivateKeyandderivePublicKeydue to Flow errors
- Fix throw when user account doesn't have a Shapeshift auth token
- Fix Changelly to use legacy addresses except for DGB
- Add denomination conversion helper routines.
- Add Changelly support to the swap API.
New:
EdgeSwapConfig.needsActivationfor exchanges that need KYC or other data.EdgeSwapQuote.networkFeefor outgoing network fee.SwapBelowLimitError&SwapAboveLimitErrorfor failed quotes.
Deprecations:
EdgeContext.getAvailableExchangeTokensEdgeContext.getExchangeSwapInfoEdgeContext.getExchangeSwapRateEdgeCurrencyWallet.getQuote
Renames (old names deprecated):
EdgeAccount.currencyTools->EdgeAccount.currencyConfigEdgeAccount.exchangeTools->EdgeAccount.swapConfigEdgeAccount.getExchangeCurrencies->EdgeAccount.fetchSwapCurrenciesEdgeAccount.getExchangeQuote->EdgeAccount.fetchSwapQuoteEdgeCurrencyTools.settings->EdgeCurrencyConfig.userSettingsEdgeCurrencyTools.changeSettings->EdgeCurrencyConfig.changeUserSettingsEdgeExchangeQuote.exchangeSource->EdgeSwapQuote.pluginNameEdgeExchangeCurrencies.exchanges->EdgeSwapCurrencies.pluginNames
- Fix a packaging issue with the client-side methods.
- Move the client-side methods into their own file.
- Add a new Shapeshift API (still experimental & subject to change).
- Rename
EdgeCurrencyTools.pluginSettingstoEdgeCurrencyTools.settings. - Rename
EdgeCurrencyTools.changePluginSettingstoEdgeCurrencyTools.changeSettings.
- Do not use legacy address for Digibyte when using ShapeShift
- Add a
waitForCurrencyWallethelper. - Work around 0 block-height problem with some currency plugins.
- Update to
yaob0.3.0. This one changes the timing on some callbacks a bit (breaking).
- Add a fake user with several test wallets.
- Hack around weird GUI Flow bug.
- Update the readme file.
- Work around a GUI crash.
-
Make the core API bridgeable using Yaob.
-
Add a private key hiding mode.
-
Add a user list to the context object.
-
Remove the ability to pass a node-style callback to any asynchronous API method instead of getting a promise.
-
Fail earlier if the
apiKeyis missing. -
Rename
EdgeEdgeLoginRequesttoEdgePendingEdgeLogin
- Fix the git server list again.
- Fix the git server list.
- Upgrade disklet dependency.
- Add more git servers.
- Fix a type error that Flow somehow doesn't catch when run in this repo, but does catch when this library is in somebody else's
node_modules.
- Expose the wallet sync ratio as a property
- Rename the account data store API
- Many, many code cleanups & fixes:
- Fix an edge login race condition.
- Do not allow users to delete logged-in accounts from disk.
- Fix a hang if anything goes wrong creating wallets (redux-pixies upgrade).
- Remove deprecated context properties & options
- Remove
EdgeContext.io - Remove
EdgeContext.getCurrencyPlugins - Make many methods async:
EdgeCurrencyWallet.getNumTransactionsEdgeAccount.listSplittableWalletTypesEdgeCurrencyWallet.dumpDataEdgeCurrencyWallet.parseUriEdgeCurrencyWallet.encodeUri
- Add wallet properties for balances, block heights, and seeds
- Fix QBO & CSV export crash
- Another fix to QBO export 255-character limit (memo field)
- Pass options to
EdgeCurrencyPlugin.createPrivateKeys.
- Fix QBO export error.
- Fix minor Flow bug.
- Upgrade Flow.
- Improve Flow types in currency wallet code.
- Fix bug where Edge could not edit Airbitz metadata.
- Add a basic
EdgeAccount.currencyToolsAPI. - Fix QBO export bug.
- Fix more incorrect wallet key types.
- Add a
NoAmountSpecifiedError.
- Fix a return value error in
listSplittableWalletTypes.
- Fix Flow type bugs
- Fix incorrect platform detection on Web.
- Fix payment request Flow types.
- Implement plugin data API.
- Fix Edge login unhandled promise rejection error.
- Fix the Flow type for the transaction export denomination.
- Export the
Errortypes directly.
- Fix Shapeshifting XMR and XRP.
- Add
EdgeCurrencyInfo.requiredConfirmationsand associatedPendingFundsErrortypes.
- Move the unit tests out of the
srcdirectory.
- Replace flow-copy-source with rollup-plugin-flow-entry to fix a packaging bug.
- Add
uniqueIdentifiertoEdgeParsedUri.
- Improve various flow typing issues, both inside and outside the core
- Add
getTxids& related callback to the CurrencyEngine.
- Auto-correct mis-typed 2fa secrets
- Expose
hmacSha256for the CLI - Fixed spelling mistake
- Storage and Wallet flow coverage
- Rename storage and exchange related files
- Change createPrivateKey and derivePublicKey to Object instead of {}
- Remove empty strings in the QBO export
- Flow type fix
- Add QBO & CSV export
- Add private key sweeping
- Add
EdgeCurrencyWallet.getNumTransactions - Remove deprecated methods
- Throttle wallet callbacks
- Do not crash on really long passwords when running in the web.
- Fix Edge login race conditions.
- Support Shapeshift precise transactions
- Do not report transactions that have been dropped
- Fix incorrect array dereference when saving transaction metadata
- Optimize getTransactions to only decrypt data for the range queried
- Prevent bitcoin segwit wallets from being split to bitcoin cash
- Add
legacyAddresstoEdgeEncodeUri
- Fix git sync on timer after login
- Fix wallet splitting issues
- Fix git syncing issues for large wallets
- Add a
listSplittableWaleltTypesfunction
- Renamed the library to edge-core-js
- Fix build issues on React Native & web.
- Properly handle Shapeshift HTTP error codes.
- Add a
getAvailableExchangeTokensfunction to the context.
- Fix login checksum errors exposed by previous release.
- Fall back on the app name for unnamed wallets.
- Fixes exchange rate multipliers for custom tokens.
- Handle plugin errors more gracefully.
- Make PIN changes fully recursive across all apps
- Allow the PIN to be enabled / disabled
- Fixes to Flow types, including brand-new flow types for
EdgeCurrencyWallet. - Fixes for Shapeshift spends (Bitcoin Cash addresses, proper fees).
- Redux state cleanups
- Fix accelerated crypto on React Native.
- Remove
core-jspolyfill. The main GUI needs to pull this in, if needed, since including it too late in the setup process can break React. - Switch to
regeneratorinstead ofnodentfor async / await support. This is slower but more compatible.
- Renamed the library to edge-login, massive development work.
Fixes:
- Logging into partner apps works again (round 2)
Fixes:
- Logging into partner apps works again
New:
- New plugin format
- Exchange rate cache
looginWithKeymethod- Store transaction metadata on first detection
Fixes:
- Code cleanup & reorganization
- Fixes to the transaction list
- Fixes to the transaction metadata format
Breaking changes:
- No longer expose the internal
loginorloginTreeon the account.
New:
- Currency wallet support
- Wallet sort / archive / delete support
- Support for legacy wallet keys
Breaking changes:
- Fix the wallet id derivation algorithm
Fixes:
- The library explicitly depends on
buffernow, fixing React Native - Build system cleanups
- Many, many code cleanups
New:
- Error types all have a
nameproperty, which will replace thetype - Use the
diskletlibrary for all storage needs - Expose
hashUsernamefor the CLI
Breaking changes:
- api: Make
removeUsernameasync - The on-disk repo format has changed, requiring a re-sync
New:
- Accept the
ioobject as amakeContextoption
Breaking changes:
- Move the CLI tool to its own package
- api: Make
usernameAvailableproduce a bool - api: Make
listUsernamesasync - api: Make
pinExists&pinLoginEnabledasync - api: Remove deprecated exports
- api: Remove obsolete C++ error code system
- api: Remove platform-specific context constructors
- Make the auth server configurable
- Switch back to the production auth server by default
Breaking changes:
- Edge login v2
- New on-disk storage format
- Quick fix to package.json to exclude node-isms from the browser
Breaking changes:
- Make
checkPasswordasync - Remove
runScryptTimingWithParameters
New:
- Add a
removeUsernamemethod to the context makeContextaccepts arandomfunction- Add a
makeRandomGeneratorhelper for RN - Many CLI improvements
- Better error types
Fixes:
- Faster
scrypt - Switch to the
fetchAPI - Troublesome dependencies are now bundled and isolated
- Port project to ES2015
Fixes:
- Sync server rotation support
- HTTPS connections to sync servers
- Removed
asmcrypto.js - Made the CLI executable & installable
- Pruned the list of files we publish to NPM