# Changelog All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [1.12.3] - 2023-01-23 ### Changed - Increase purging duration of asynchronous requests to 60 days - Stability improvements ## [1.12.2] - 2022-12-15 ### Fixed - Add `inputs` & `outputs` properties to the Bitcoin transaction output ## [1.12.1] - 2022-10-13 ### Fixed - Fix fee calculation for Bitcoin coinbase transactions on `GET /btc/transaction/:hash` ## [1.12.0] - 2022-10-13 ### Added - Add new endpoint `GET /requests` containing records of async request IDs. Multiple query parameters are supported to locate current and past async request IDs incl. their request configuration, computed properties, and the last output - Add additional property `purgedBy` to `GET /request/:id` containing the removal timestamp of the async request ID. It is possible to find records of purged async requests via `GET /requests?includePurged=true` - Add optional `tangany-bitcoin-fee-rate` header to provide a user-defined Bitcoin transaction fee rate in sat/vbyte - Add `gas` and `gasPrice` properties to the `status` of `Running` Ethereum transactions and to the `output` of `Completed` Ethereum transactions - Support "personal_sign" method of signing of Ethereum specific messages via `POST /eth/wallet/:wallet/sign` - Introduce new Ethereum testnet Goerli addressable via `tangany-ethereum-network: goerli`. The Ethereum monitoring and transaction search features are not supported for Goerli. Please be aware that the deprecated Ropsten Ethereum network is planned for deactivation in Q4 2022 - Support "type 2" (EIP-1559) transactions on the `polygon` Ethereum network as well as the Polygon Mumbai custom RPCs - Add new status properties to `GET /btc/transaction/:hash` and to the async request `output` of `Completed` Bitcoin transactions: `receivedTime`, `totalInput`, `totalOutput` and `fees` - Introduce transaction threshold clearance. Once enabled, all transactions exceeding a predefined USD value limit need to be manually confirmed by the Tangany transaction approval team before being transmitted to the blockchain. Tangany typically handles transaction approvals in the time frame of two business days. This feature can be enabled on an account basis via a customer service request ### Changed - Increase the polling duration of `Pending` and `Running` async transaction requests to 30 days to improve the lifetime integrity of pending transactions if a blockchain protocol experiences temporary processing issues - Improve the retry handling of gateway errors during the Ethereum transaction polling phase. This fixes the issue of async requests failing with `Received a gateway error` after a transaction was already passed to the network - The `Retry-After` header now estimates an actual recommendation for a polling reattempt of asynchronous processes instead returning a fixed value - Improve error handling of external HTTP resources as such a more detailed error message is returned when making an API call - Introduce input validation of Ethereum monitor `webhook.url` property to only allow HTTPS targets - Add the `secure` and `httpOnly` flags to the `Set-Cookie` headers ### Fixed - Improve the misleading error `Invalid data type: tangany-ethereum-gas-price must be 0 or a positive integer` if a transaction gets rejected due to an extreme gas price via `tangany-ethereum-gas-price` - Fix Ethereum Gas Tank funded transactions sometimes failing with `replacement transaction underpriced` or `Received a gateway error` ## [1.11.0-hotfix.1] - 2022-09-23 ### Fixed - Fix a rare case of Ethereum transactions getting stuck in "sending transaction" stage ## [1.11.0-hotfix.0] - 2022-09-07 ### Fixed - Fix Gas Tank funded Ethereum transactions occasionally failing with `replacement transaction underpriced` and `Received a gateway error` ## [1.11.0] - 2022-06-13 ### Added - Add optional support for transaction recipients allowlisting. Blockchain transactions to external addresses not contained on a customer's allowlist will be automatically declined. Smart Contract transaction configuration where the recipient address cannot be parsed by the system will be rejected as well. At the moment only ERC20-compatible Ethereum contracts are parsable by the system. This is an opt-in feature. Contact the Tangany customer service to enable recipient allowlisting for a subscription ## [1.10.4] - 2022-05-24 ### Changed - Lift the restriction of 32-character long IDs in `tangany-request-id`. This limitation was temporarily introduced in 1.10 to protect legacy async requests that were still active at this point in time ### Fixed - Fix `Invalid function signature. Unrecognized type uint96` in Ethereum contract calls - Fix `param.substring is not a function` when passing byte type `inputs` to Ethereum contract calls ## [1.10.3] - 2022-05-18 ### Added - Support Solidity struct and byte data types in Ethereum smart contract calls. This now allows passing tuples to `function` ### Changed - Improve validation of provided Ethereum contract call `function` and `inputs`. Invalid method arguments are now declined with a user-friendly error ### Fixed - Fix boolean arguments passed to Ethereum smart contract call `inputs` always assumed positive - Fix Ethereum contract event search `inputs` values being sometimes returned as scaled "Ether" decimals instead of native solidity values - Fix Bitcoin transactions failing in certain conditions with `TX rejected: transaction is not standard. transaction output 1: payment is dust` - Fix root cause for error code `839467514140446` responsible for miscellaneous performance inconsistencies throughout the API - Fix Ethereum monitors not executing on chain events ## [1.10.2] - 2022-04-11 ### Fixed - Fix Ethereum gas estimations in EIP-1559 enabled networks - Improve the calculation of a Bitcoin transaction vbyte size causing the estimated `feeRate` to match the transaction results of external Bitcoin explorers ## [1.10.1] - 2022-03-31 ### Fixed - Fix API endpoint execution occasionally rejected with `TypeError: Converting circular structure to JSON` - Fix validation issues in the OAS3 (Swagger) specification ## [1.10.0] - 2022-03-28 ### Added - Add Polygon and Binance Smart Chain to the API-supported public Ethereum networks. To access these networks via the integrated Tangany node infrastructure pass `polygon` or `bsc` to the `tangany-ethereum-network` header in the supported Ethereum endpoints - Extend the Ethereum Gas Tank to support all EVM compatible networks (including Polygon and BSC) - Add request header `tangany-request-id` to support idempotency in asynchronous operations. Defaults to an automatically generated UUID if no custom request ID is provided ### Changed - Remove the `data` property from `POST /eth/wallet/:wallet/send-async` due to regulatory requirements ### Fixed - Fix a case where Ethereum contract calls return an empty response instead of a `true` boolean - Fix `wallet` resolution in array-type arguments of Ethereum contract calls - Fix a case where the polling of a pending Ethereum transaction is interrupted with `RPC error: internal error` - Fix currencies for certain EVM networks in `GET eth/contract/wallet/:wallet` to return the correct `currency` - Fix a rare case of Ethereum transactions being retransmitted with invalid nonce if the initial transmission attempt gets rejected by a rate-limited RPC response or similar conditions ## [1.9.2] - 2022-01-10 ### Fixed - Fix the transaction `amount` of payable Ethereum smart contracts not honored in the gas estimation ## [1.9.1] - 2022-01-05 ### Fixed - Fix insufficient gas price calculation in EIP1559 transactions - Fix Bitcoin wallet balance `currency` swapped between main- and testnet ## [1.9.0-hotfix.0] - 2022-01-04 ### Fixed - Fix "Could not extract the smart contract method name" when using array-type arguments in the `function` definition of Ethereum smart contract calls ## [1.9.0] - 2022-01-03 ### Changed - The Bitcoin transaction `amount` is now an optional recipient property matching the behavior of the Ethereum transaction endpoints. Excluding the `amount` from the Tx configuration results in a "0" value transaction. Since the `to` & `wallet` recipients are also optional, sending Bitcoin wallet transaction with an empty body [will result in 0 BTC transaction to "self"](https://www.blockchain.com/btc-testnet/tx/e0e1832afd3bb201263866feede23d915c93b622c570ea158b23fb3c05a3e063) - Improve the overall Bitcoin operations performance for wallets with a large transaction history - Improve API error messages to make certain fail conditions clearer to understand - Introduce [EIP-1559](https://eips.ethereum.org/EIPS/eip-1559) transaction support for the London hardfork in the public Ethereum networks (`mainnet` & `ropsten`). The transaction fee calculation is now based on the network fee per gas property of the current block ("base fee") and the custom defined priority fee ("tip"). Optionally use the `tangany-ethereum-gas-price` to override the automatically determined base fee with a custom Wei value and `tangany-ethereum-tx-speed` to define the miner's tip per transaction. - Update the preset values for `tangany-ethereum-tx-speed` to reflect best-practice recommendations for EIP-1559 priority fees. This should not introduce any noticeable impact to networks that still employ pre-EIP-1559 ("legacy") transaction behaviour. Wei values for each speed setting may now change dynamically based on current network requirement of the Ethereum Mainnet. Override `tangany-ethereum-tx-speed` presets by passing a positive integer as a custom Wei value. - Synchronously validate sufficient Ether balance of a wallet before creating an asynchronous Ethereum transaction request - Honor `tangany-use-gas-tank` header setting in Ethereum estimation endpoints - Extend the API documentation https://docs.tangany.com/ with more examples and in-depth information - Return common `currency` strings based on the current blockchain network in the balance and estimation endpoints - Bitcoin `currency` is now shown as `BTC` in mainnet and `tBTC` in testnet in `GET /btc/wallet/:wallet` - Estimating transactions that exceed the current wallet balance will now always result in a bad request - Synchronously validate Ethereum contract method execution before creating asynchronous transactions. On-chain exceptions in contracts are now rejected with a clear error message (instead of `code 895502584267144`) - Return `null` if a custom `tangany-ethereum-network` does not support the `protocolVersion` call from `GET /eth/status` which would otherwise cause `faulty` status on custom Ethereum networks - Statuses of asynchronous requests are now stored for 30 days - Increase the polling frequency for pending transactions in asynchronous processes to minimize the latency for a mined transaction to complete ### Fixed - Fix the handling of Bitcoin transactions for wallets with a high amount of unspent transaction outputs (UTXO) that would otherwise cause server timeouts. Any Bitcoin transaction may now include up to 100 UTXO. This limitation may impede the maximum transferable BTC amount if a wallet holds more than 100 unspent transaction outputs since the transaction amount is based on the sum of the included UTXO values. The following constraints apply if a Bitcoin wallet holds more than 100 UTXO: - The maximum amount of BTC that can be sent in a single transaction is limited by the UTXOs included in the transaction. Verify the maximum transferable `inputsValue` for the constrained UTXO set via the estimation endpoint `GET /btc/wallet/:wallet/estimate-fee` - Multiple sweeping operations are required to transfer all funds from a wallet. To reduce the number of unspent outputs in a Bitcoin wallet, consider consolidating the wallet's UTXOs using the sweeping operation (`POST /btc/wallet/:wallet/sweep-async`) to itself (e.g., by omitting the `to` or `wallet` recipient) - Automatically attempt resending transactions that were declined by a remote gateway (`code 176109813039601`) - Fix a case where Ethereum smart contract transactions ignore the optional `amount` property when executing a "payable" contract method - Fix certain array-type body `inputs` breaking the execution of Ethereum smart contract endpoints - Fix rare cases where endpoint executions would fail because a connection with a customer vault could not be established (`code 235163752350247`) ### Added - Integrate Tezos blockchain: Beside Ethereum and Bitcoin, WaaS now supports Tezos operations (currently transaction and delegation) including batches. It is possible to send several consecutive operations in one block without counter problems. For new wallets, a reveal operation is automatically executed on the first operation. The following endpoints were added: - `GET /xtz/wallet/:wallet` - `POST /xtz/wallet/:wallet/estimate-fee` - `POST /xtz/wallet/:wallet/send-async` - `POST /xtz/wallet/:wallet/delegate-async` - `POST /xtz/contract/:contract/:wallet/send-async` - `POST /xtz/contract/:contract/:wallet/estimate-fee` - `POST /xtz/contract/:contract/view` - `GET /xtz/contract/:contract/storage` - `GET /xtz/operation/:hash` - `GET /xtz/status` - `HEAD /xtz/status` - Set the new optional `sweep` parameter to `true` to estimate the transaction fee for a wallet sweeping operation via `POST /btc/wallet/:wallet/estimate-fee` - Add additional properties to the Bitcoin Tx estimation response `GET /btc/wallet/:wallet/estimate-fee` to include the amount of the designated transaction (UTXO) `inputs` and their total `inputsValue`. If a (sweeping) transaction uses the maximum amount of 100 `inputs`, the returned `inputsValue` represents the maximum transferable BTC amount. - Add additional properties to the Bitcoin balance response `GET /btc/wallet/:wallet` to include the amount of `utxo` the wallet currently holds. - Add `nonce` and `data` properties to Ethereum wallet and contract estimation endpoints - Add the `id` property to the response bodies of asynchronous operations ## [1.8.2-hotfix.2] - 2021-09-27 ### Fixed - Fix insufficient `gas` amount and consequently the incorrectly calculated `fee` in `POST eth/contract/:contract/:wallet/estimate-fee`. The endpoint will now return a 400 error response if trying to estimate conditions that cannot be fulfilled by the contract (e.g. transfer more tokens than available) ### Changed - Improve the error messages of failed Ethereum smart contract executions ## [1.8.2-hotfix.1] - 2021-09-09 ### Fixed - Fix Ethereum smart contract transaction endpoints validating ERC20 token amounts as required Ether balances ## [1.8.2-hotfix.0] - 2021-07-08 ### Changed - Internal change concerning application stability ## [1.8.2] - 2021-06-14 ### Changed - Support EIP-155 transactions in Ethereum custom networks ### Fixed - Fix "Could not process invalid cookie value" responses when communicating with certain custom networks - Fix certain Bitcoin recipient addresses declined with `Invalid recipient address` - Fix prematurely purging `Completed` asynchronous request IDs ## [1.8.1] - 2021-06-07 ### Changed - Check Bitcoin transactions for a valid fee configuration before the asynchronous hand-over ### Fixed - Add missing tag query params to pagination links in `GET /wallets` - Fix `GET /wallet/:wallet/sign` not throwing expected errors for invalid encodings - Fix async Bitcoin transactions stuck in the `awaiting transaction confirmation` stage and time out eventually even though the transaction is mined successfully - Fix bug where a deleted wallet could be updated - Fix incorrect error message about gas price for gas-less custom Ethereum networks - Fix a rare case where an async Ethereum request status may indicate a failure (error code `828065450941776`) even though the transaction is mined successfully - Fix cases where async Ethereum transaction processes may unexpectedly fail due to various recoverable errors ### Added - Add support for tag value queries (e.g. `?tag["my-tag"]="my-value"`) in `GET /wallets` ## [1.8.0] - 2021-03-10 ### Added - (**opt-in beta**) Monitor wallet-based transactions and get notified in real-time about transaction status changes via a webhook - Create new wallet-based transaction with extensive filtering options: `POST /eth/wallet/:wallet/monitors` - Replace exiting monitors: `PUT /eth/wallet/:wallet/monitor/:monitor` - Partially update existing monitors `PATCH /eth/wallet/:wallet/monitor/:monitor`. Supports RFC 6902 - Delete monitor `DELETE /eth/wallet/:wallet/monitor/:monitor` - Query monitor status `GET /eth/wallet/:wallet/monitor/:monitor` - List all monitors for current wallet `GET /eth/wallet/:wallet/monitors` - List all monitors `GET /eth/monitors` - Added a new header `tangany-ethereum-chain-id` to enforce desired chain ID in a custom Ethereum network - Included a new field `data` to Ethereum smart contract estimation response of `POST /eth/contract/:contract/:wallet/estimate-fee` that converts the smart contract ABI call to hexadecimal data - Categorize wallets and add custom meta data via wallet tags - Add tags to wallets and update exiting tags using the new endpoint `PATCH /wallet/:wallet` that supports atomic updates via [RFC 6902 (JSON Patch)](https://tools.ietf.org/html/rfc6902) - Added new, improved `GET /wallets` endpoint to query wallets - Includes pagination and sorting options - Allows tag filtering using the `?tag` & `?xtag` query parameters ### Changed - Extended responses of sending Ethereum endpoints with `nonce` and HATEOAS links to adjacent resources - Requests using the custom network URL in the `tangany-ethereum-network` header are now checked against a customer-specific whitelist. Contact the support team to enable new custom Ethereum networks for a user account. Custom Ethereum networks that were used by existing customers were automatically whitelisted before the launch ### Fixed - Improved the behaviour of sent Ethereum transactions in asynchronous requests. `unknown` transactions are now rejected after a shorter time span - Fixed a case where `tangany-ethereum-nonce` header were not enforced in an Ethereum transaction if the provided nonce was less than the current blockchain nonce - Vastly improved the throughput of asynchronous Ethereum transactions from a single wallet - Reduced the likelihood of overlapping nonces when sending multiple Ethereum transactions from a single wallet simultaneously ### Deprecated - Soft deprecate `POST /wallet`. This endpoint will from now on be documented as `POST /wallets`. - Soft deprecate `GET /wallet`. Migrate to compatible endpoint with extended features `GET /wallets` ## [1.7.1] - 2021-02-01 ### Changed - Improve the information content in error messages ### Fixed - Fix wallet count of hsm-secured wallets in `GET /wallets` always returns 0 - Fix wallet substitution in contract calls when argument is a deep nested array of type wallet ### Added - Add error messages in case of invalid argument filters in contract event searches ### Deprecated - **Synchronous transaction endpoints are deprecated and will permanently cease function on 01 July 2021. We advise a timely migration to asynchronous endpoint variants to prevent possible service interruptions** | Deprecated endpoint | API URL | | :--- | :--- | | Ethereum - Make wallet transaction | `POST /eth/wallet/:wallet/send` | | Ethereum - Sign wallet transaction | `POST /eth/wallet/:wallet/sign` | | Ethereum ERC20 - Make ERC20 token transaction | `POST /eth/erc20/:token/:wallet/send` | | Ethereum ERC20 - Execute ERC20 "transferFrom" | `POST /eth/erc20/:token/:wallet/transfer-from` | | Ethereum ERC20 - Execute ERC20 "approve" | `POST /eth/erc20/:token/:wallet/approve` | | Ethereum ERC20 - Execute ERC20 "mint" | `POST /eth/erc20/:token/:wallet/mint` | | Ethereum ERC20 - Execute ERC20 "burn" | `POST /eth/erc20/:token/:wallet/burn` | | Bitcoin - Make wallet transaction | `POST /btc/wallet/:wallet/send` | | Bitcoin - Sign wallet transaction | `POST /btc/wallet/:wallet/sign` | ## [1.7.0] - 2020-12-22 ### Changed - Display total number of wallets per vault in `GET /wallet` - Extend the wallet status with the public secp256k1 key - Return `AUTO` response header if `tangany-bitcoin-max-fee-rate` header was not provided in the client request - Allow positive integer values in the `tangany-bitcoin-tx-confirmations` configuration header matching `tangany-ethereum-tx-confirmations` - Make `inputs` body parameter optional for all Ethereum smart contract endpoints ### Fixed - A custom Ethereum RPC Network URL passed via `tangany-ethereum-network` won't get cut-off after the host portion anymore - Fix bug in Ethereum Event response where `logIndex` was `null` instead of `0` - Fix broken session cookies for public Ethereum networks - Fix a rare case where rapid transactions from the same wallet may be dropped from the transaction queue - Fix bug in BTC amounts where integers in decimal notations like `1.000` get rejected ### Added - Add sorting options `transactionIndex` and `transactionIndexDesc` to read tx api endpoints - Send asynchronous Bitcoin wallet transaction via `POST /btc/wallet/:wallet/send-async` - Query Ethereum transaction events using smart contract call arguments in `GET /eth/contract/:contract/events` - Add support for array type arguments in Ethereum smart contract endpoints - Add payload signing endpoint `POST /wallet/:wallet/sign` - Add signature verification endpoint `POST /wallet/:wallet/verify` ## [1.6.1] - 2020-08-12 ### Changed - Fix empty return value when executing a `bool` response type smart contract call ### Fixed - Fix misleading error message for recipients address mismatch when using the `wallet` request body parameter ### Added - Add convenience route `GET /eth/contract/:contract/call/:method` for calling Ethereum smart contract methods without arguments - Add optional query parameter `?type` to define the return types for smart contract method calling routes `GET /eth/contract/:contract/call/:method` and `GET /eth/contract/:contract/:wallet/call/:method`. The `?type` query accepts valid Solidity data types and defaults to is `uint256` ## [1.6.0] - 2020-08-10 ### Changed - Enable `amount` argument for `POST /eth/contract/:contract/:wallet/send-async` to allow interacting with payable smart contract methods. This also changes the `amount` argument to become an optional argument in all Ethereum sending endpoints (defaults to 0) ### Fixed - Allow empty `inputs` in request bodies of Ethereum contract endpoints ### Added - Call Ethereum smart contract methods via `POST /eth/contract/:contract/call` , `POST /eth/contract/:contract/:wallet/call` and `GET /eth/contract/:contract/:wallet/call/:method` - Sweep Bitcoin wallet by transferring all funds to address via `POST /btc/wallet/:wallet/sweep-async` - Wallet names of the current `tangany-vault-url` can be used as a substitution for its Ethereum addresses in compatible endpoints ## [1.5.0-hotfix.1] - 2020-07-23 ### Changed ### Fixed - Fix erratic transaction events search results when log index is 0 - Fix `GET /eth/transaction/:hash` fail with "Invalid params" with fetching status for a new transaction without a block number ### Added ## [1.5.0-hotfix.0] - 2020-07-13 ### Changed ### Fixed - Fix ERC20 endpoint transactions fail with "invalid number value" when trying to send / mint / burn / approveFrom token amounts over "1000" ### Added ## [1.5.0] - 2020-07-01 ### Changed - Enhance `GET /eth/transaction/:hash` to return more relevant transaction data - Add `blockHash` property to `GET /btc/hash/:hash` ### Fixed - Improve the error message when sending less than 1 wei in an Ethereum transaction - Return 404 for unknown async request ids via `GET /request/{id}` - Fix a rare case where `blockNr` property is missing from the `GET /btc/transaction/:hash` response - Fix ancient Ethereum transactions being reported as erroneous ### Added - Support new custom header `tangany-ethereum-gas` to enforce user defined gas amount for Ethereum transactions - Support new custom header `tangany-ethereum-nonce` to enforce given nonce in Ethereum transactions - Estimate Ethereum transaction fees via `POST /eth/wallet/:wallet/estimate-fee` and `POST /eth/contract/:contract/:wallet/estimate-fee` - Explore Ethereum transactions via `GET /eth/transactions` and `GET /eth/wallet/:wallet/transactions` - Examine Ethereum and Bitcoin node status via `GET /eth/status` and `GET /btc/status` - Explore Ethereum smart contract events via `GET /eth/contract/:contract/events` and query individual events via `GET /eth/transaction/:hash/event/:index` ## [1.4.0-hotfix.0] - 2020-06-02 ### Changed - Improve performance ## [1.4.0] - 2020-04-02 ### Changed - Disable UTF-8 conversion of Ethereum data payload to allow interacting with arbitrary smart contracts via `POST /eth/wallet/{wallet}/send`. Now only hexadecimal strings are accepted for `data` ### Fixed - Limit allowed decimal places for transaction amount - Fix Bitcoin endpoints not processing the affinity cookie sent in a request - Support new custom header `tangany-ethereum-gas-price` ### Added - Add support for sending ethereum asynchronously via `POST /eth/{wallet}/send-async` - Add status endpoint for asynchronous requests: `GET /request/{id}` - Add support for `tangany-use-gas-tank` header for ERC20 methods to support ether-less Token workflows on ethereum public networks - Add smart contract support via `POST /eth/contract/:contract/:wallet/send-async` - Add ethereum signing endpoint: `POST /eth/wallet/{wallet}/sign` - Add bitcoin signing endpoint: `POST /btc/wallet/{wallet}/sign` ## [1.3.0] - 2019-12-04 ### Changed - Change 404 response for unknown hashes to `unknown` status for `GET /eth/transaction/{hash}` ### Fixed - Improve latency for sending Bitcoin from wallets with a large transaction history ### Added - Add call configuration metadata to the response headers - Add optional `data` field to `POST /eth/{wallet}/send` - Add `data` to the `GET /eth/transaction/{hash}` response - Add `tangany-ethereum-tx-confirmations` header to evaluate transaction validity - Add `status` to the `GET /eth/transaction/{hash}` response to get insights about the transaction lifecycle - Add status `unknown` to `GET /btc/transaction/{hash}` response - Add `blockNr` to `GET /btc/transaction/{hash}` response - Add session cookie to maintain a sticky session with the backend blockchain node - Add support for `HEAD` connection method to `HEAD /eth/transaction/{hash}` & `HEAD /btc/transaction/{hash}` to fetch the session cookie ## [1.2.1-hotfix.2] - 2019-11-11 ### Changed - Improved Bitcoin performance for wallets with lots of UTXOs ## [1.2.1-hotfix.1] - 2019-10-17 ### Fixed - Fixed the request exception in `POST /btc/{wallet}/send` for trying to send below minimum allowed amount in the Bitcoin protocol ## [1.2.1-hotfix.0] - 2019-10-02 ### Changed - Change internal monitoring ## [1.2.1] - 2019-08-13 ### Changed - Changed `GET /btc/transaction/{hash}` to return a 404 status when given transaction cannot be found ### Fixed - Fixed `POST /eth/erc20/{token}/{wallet}/approve` asserting the Ether balance instead of token balance to execute the approve transaction ### Added - Added optional "to" parameter to `POST /eth/erc20/{token}/{wallet}/mint` to enable minting ERC20 tokens to arbitrary addresses ## [1.2.0-hotfix.2] - 2019-07-29 ### Fixed - Fixed missing functionality for `POST /eth/erc20/{token}/{wallet}/burn` ## [1.2.0-hotfix.1] - 2019-07-26 ### Fixed - Fixed the bitcoin header `tangany-bitcoin-max-fee-rate` not accepting a string-type input - Fixed `POST /btc/wallet/{wallet}/estimate-fee` to always execute despite the `tangany-bitcoin-max-fee-rate` header setting ## [1.2.0] - 2019-07-26 ### Changed - Made the HTTP header `tangany-ethereum-network` optional by using the default value "mainnet" for Ethereum network ### Fixed ### Added - Added `POST /eth/erc20/{token}/{wallet}/approve` and `POST /eth/erc20/{token}/{wallet}/transfer-from` to support the matching standard Ethereum ERC20 methods - Added `POST /eth/erc20/{token}/{wallet}/burn` and `POST /eth/erc20/{token}/{wallet}/mint` to support the matching extended Ethereum ERC20 methods - Added support for Bitcoin ## [1.1.3-hotfix.2] - 2019-06-18 ### Fixed - Fix internal headers ## [1.1.3-hotfix.1] - 2019-06-18 ### Changed - Remove internal tests ## [1.1.3-hotfix.0] - 2019-05-15 ### Fixed - Fix the server response for attempting to make an Ethereum transaction with insufficient funds ## [1.1.3] - 2019-03-26 ### Changed - Add paging to `GET /wallet` via the `skiptoken` query parameter to prevent long running requests when trying to query hundreds of wallets ## [1.1.2] - 2019-03-22 ### Fixed - Fix `GET /eth/erc20/{token}/{wallet}` returning a decimal value instead of float for token balance ## [1.1.1] - 2019-03-22 ### Added - Add HTTP header `tangany-ethereum-tx-speed` to affect the additional gas that is added to the network gas to accelerate the transaction ## [1.1.0] - 2019-03-21 ### Added - Add support for Ethereum RPC networks via `tangany-ethereum-network` HTTP header ## [1.0.1] - 2019-03-18 ### Fixed - Fix `GET /wallet` fail with "allKeys.map is not a function" when zero wallets are available - Fix `POST /eth/erc20/{token}/{wallet}/send` to return status 201 on success instead of 200 ## [1.0.0] - 2019-03-15 ### Added - Initial release