[
    {
        "version": "2.2.0-beta.3",
        "changes": [
            {
                "note": "Dependencies updated"
            }
        ],
        "timestamp": 1574238768
    },
    {
        "version": "2.2.0-beta.2",
        "changes": [
            {
                "note": "Drastically reduced bundle size by adding .npmignore, only exporting specific artifacts/wrappers/utils",
                "pr": 2330
            },
            {
                "note": "Introduced new export ExchangeRevertErrors",
                "pr": 2321
            },
            {
                "note": "Round up in `marketBuyOrdersNoThrow()` so `marketBuyOrdersFillOrKill()` doesn't throw up.",
                "pr": 2338
            }
        ],
        "timestamp": 1574030254
    },
    {
        "version": "2.2.0-beta.1",
        "changes": [
            {
                "note": "LocalBalanceStore.create and constructor now require an instance of DevUtilsContract",
                "pr": 2304
            },
            {
                "note": "In LocalBalanceStore, `transferAsset` is now `transferAssetAsync`",
                "pr": 2304
            },
            {
                "note": "Test utility classes AssetWrapper, MatchOrderTester, and OrderFactoryFromScenario constructors now require an instance of DevUtilsContract",
                "pr": 2304
            },
            {
                "note": "In OrderFactoryFromScenario, `generateOrder` is now `generateOrderAsync`",
                "pr": 2304
            }
        ],
        "timestamp": 1573159180
    },
    {
        "version": "2.2.0-beta.0",
        "changes": [
            {
                "note": "Use new/cheaper reentrancy guard/mutex",
                "pr": 1699
            },
            {
                "note": "Update domain separator",
                "pr": 1742
            },
            {
                "note": "Refactor `executeTransaction` to take `ZeroExTransaction` struct as input",
                "pr": 1753
            },
            {
                "note": "Refactor example contracts that use `executeTransaction`",
                "pr": 1753
            },
            {
                "note": "Upgrade all string reverts to rich reverts",
                "pr": 1761
            },
            {
                "note": "Add support for `SignatureType.OrderValidator` for orders",
                "pr": 1774
            },
            {
                "note": "Add support for `SignatureType.WalletOrderValidator` for orders",
                "pr": 1774
            },
            {
                "note": "Add a `bytes` return value to `executeTransaction`, which is equal to the encoded return data of the underlying Exchange function call",
                "pr": 1793
            },
            {
                "note": "Implement `batchExecuteTransactions`",
                "pr": 1793
            },
            {
                "note": "Refactor preSign to be compatible with `executeTransaction`",
                "pr": 1793
            },
            {
                "note": "Remove ZRX fees in lieu of arbitrary maker and taker fee tokens.",
                "pr": 1819
            },
            {
                "note": "Incorporate Multi-asset and ERC1155 tests into `fillOrder` and `matchOrders` tests",
                "pr": 1819
            },
            {
                "note": "Swap fill order from maker -> taker to taker -> maker",
                "pr": 1819
            },
            {
                "note": "Avoid redundant transfer in `fillOrder()` and `matchOrders()` when maker/taker is the same as feeRecipient and assets are the same",
                "pr": 1819
            },
            {
                "note": "Implement `cancelOrderNoThrow` and `batchCancelOrdersNoThrow` functions",
                "pr": 1827
            },
            {
                "note": "`executeTransaction` will now revert if the input transaction is expired",
                "pr": 1832
            },
            {
                "note": "Log an `TransactionExecuted` event when an `executeTransaction` call is successful",
                "pr": 1832
            },
            {
                "note": "Return a FillResults array for batch fill variants",
                "pr": 1834
            },
            {
                "note": "Add `MixinTransferSimulator` contract for simulating multiple transfers on-chain",
                "pr": 1868
            },
            {
                "note": "Add `EIP1271Wallet` signature type",
                "pr": 1885
            },
            {
                "note": "Remove `WalletOrderValidator` and `OrderValidator` signature types",
                "pr": 1885
            },
            {
                "note": "Make the regular `Validator` signature type have EIP1271 behavior",
                "pr": 1885
            },
            {
                "note": "Always check signature types that are validated via contract (not just on first fill).",
                "pr": 1885
            },
            {
                "note": "Remove unecessary rich revert error types.",
                "pr": 1885
            },
            {
                "note": "Add `IEIP1271Wallet` interface",
                "pr": 1885
            },
            {
                "note": "Add `validatorAddress` field to `SignatureValidatorError` rich reverts",
                "pr": 1885
            },
            {
                "note": "Make `calculateMatchedFillResults` public",
                "pr": 1885
            },
            {
                "note": "Updated RichErrors to the library pattern",
                "pr": 1913
            },
            {
                "note": "Rewrote _dispatchTransferFrom in Solidity",
                "pr": 2020
            },
            {
                "note": "Add `TestIsolatedExchange` contract and `IsolatedExchangeWrapper` test class",
                "pr": 2031
            },
            {
                "note": "Add `ReferenceFunctions` as package export.",
                "pr": 2031
            },
            {
                "note": "Remove `TestExchangeMath.sol`. Exchange math functions are now tested in the `exchange-libs` package and reference implementations are available there as well.",
                "pr": 2031
            },
            {
                "note": "Remove functions from `TestExchangeInternals.sol` that are no longer tested in this package.",
                "pr": 2031
            },
            {
                "note": "Remove `_assertValidFill()`",
                "pr": 2031
            },
            {
                "note": "Add `wrapper_unit_tests` tests and `TestWrapperFunctions` contract",
                "pr": 2042
            },
            {
                "note": "Disallow `signerAddress == 0` in signature validation functions.",
                "pr": 2042
            },
            {
                "note": "Update `Wallet` signature type behavior to be in line with v2.1.",
                "pr": 2042
            },
            {
                "note": "Add (semi) automated reentrancy tests and remove manual ones",
                "pr": 2042
            },
            {
                "note": "Refactor to use new `LibFillResults`, `LibOrder`, `LibZeroExTransaction`, and `LibMath` to libraries",
                "pr": 2055
            },
            {
                "note": "Remove `LibExchangeRichErrors` and `IExchangeRichErrors`",
                "pr": 2055
            },
            {
                "note": "Use built in selectors instead of `LibExchangeSelectors` constants",
                "pr": 2055
            },
            {
                "note": "Move `calculateFillResults` and `calculateMatchedFillResults` to `LibFillResults` in `exchange-libs` package",
                "pr": 2055
            },
            {
                "note": "Compile and export all contracts, artifacts, and wrappers by default",
                "pr": 2055
            },
            {
                "note": "Rename `marketSellOrders` and `marketBuyOrders` back to `marketSellOrdersNoThrow` and `marketBuyOrdersNoThrow`.",
                "pr": 2075
            },
            {
                "note": "Introduce new `marketSellOrdersFillOrKill` and `marketBuyOrdersFillOrKill` functions.",
                "pr": 2075
            },
            {
                "note": "Use `abi.decode()` in `LibExchangeRichErrorDecoder` over `LibBytes`.",
                "pr": 2075
            },
            {
                "note": "Overridden functions in `ReentrancyTester` now return sane values.",
                "pr": 2075
            }
        ],
        "timestamp": 1570135330
    },
    {
        "timestamp": 1568744790,
        "version": "2.1.14",
        "changes": [
            {
                "note": "Dependencies updated"
            }
        ]
    },
    {
        "timestamp": 1567521715,
        "version": "2.1.13",
        "changes": [
            {
                "note": "Dependencies updated"
            }
        ]
    },
    {
        "timestamp": 1566446343,
        "version": "2.1.12",
        "changes": [
            {
                "note": "Dependencies updated"
            }
        ]
    },
    {
        "timestamp": 1565296576,
        "version": "2.1.11",
        "changes": [
            {
                "note": "Dependencies updated"
            }
        ]
    },
    {
        "version": "2.1.10",
        "changes": [
            {
                "note": "Updated calls to <contract wrapper>.deployFrom0xArtifactAsync to include artifact dependencies.",
                "pr": 1995
            }
        ],
        "timestamp": 1564607468
    },
    {
        "timestamp": 1563957393,
        "version": "2.1.9",
        "changes": [
            {
                "note": "Dependencies updated"
            }
        ]
    },
    {
        "timestamp": 1563193019,
        "version": "2.1.8",
        "changes": [
            {
                "note": "Dependencies updated"
            }
        ]
    },
    {
        "timestamp": 1563047529,
        "version": "2.1.7",
        "changes": [
            {
                "note": "Dependencies updated"
            }
        ]
    },
    {
        "timestamp": 1563006338,
        "version": "2.1.6",
        "changes": [
            {
                "note": "Dependencies updated"
            }
        ]
    },
    {
        "timestamp": 1558712885,
        "version": "2.1.5",
        "changes": [
            {
                "note": "Dependencies updated"
            }
        ]
    },
    {
        "timestamp": 1557961111,
        "version": "2.1.4",
        "changes": [
            {
                "note": "Dependencies updated"
            }
        ]
    },
    {
        "timestamp": 1557799313,
        "version": "2.1.3",
        "changes": [
            {
                "note": "Dependencies updated"
            }
        ]
    },
    {
        "timestamp": 1557507213,
        "version": "2.1.2",
        "changes": [
            {
                "note": "Dependencies updated"
            }
        ]
    },
    {
        "version": "2.1.1",
        "changes": [
            {
                "note": "Dependencies updated"
            }
        ],
        "timestamp": 1554997931
    },
    {
        "version": "2.1.0",
        "changes": [
            {
                "note": "Run Web3ProviderEngine without excess block polling",
                "pr": 1695
            }
        ],
        "timestamp": 1553183790
    },
    {
        "version": "2.0.0",
        "changes": [
            {
                "note": "Do not reexport external dependencies",
                "pr": 1682
            },
            {
                "note": "Upgrade contracts to Solidity 0.5.5",
                "pr": 1682
            },
            {
                "note": "Integration testing for ERC1155Proxy",
                "pr": 1673
            }
        ],
        "timestamp": 1553091633
    },
    {
        "timestamp": 1551479279,
        "version": "1.0.9",
        "changes": [
            {
                "note": "Dependencies updated"
            }
        ]
    },
    {
        "timestamp": 1551299797,
        "version": "1.0.8",
        "changes": [
            {
                "note": "Dependencies updated"
            }
        ]
    },
    {
        "timestamp": 1551220833,
        "version": "1.0.7",
        "changes": [
            {
                "note": "Dependencies updated"
            }
        ]
    },
    {
        "timestamp": 1551130135,
        "version": "1.0.6",
        "changes": [
            {
                "note": "Dependencies updated"
            }
        ]
    },
    {
        "timestamp": 1549733923,
        "version": "1.0.5",
        "changes": [
            {
                "note": "Dependencies updated"
            }
        ]
    },
    {
        "version": "1.0.4",
        "changes": [
            {
                "note": "Dependencies updated"
            }
        ],
        "timestamp": 1549547375
    },
    {
        "version": "1.0.3",
        "changes": [
            {
                "note": "Fake publish to enable pinning"
            }
        ],
        "timestamp": 1549504360
    },
    {
        "timestamp": 1549452781,
        "version": "1.0.2",
        "changes": [
            {
                "note": "Dependencies updated"
            }
        ]
    },
    {
        "timestamp": 1549373905,
        "version": "1.0.1",
        "changes": [
            {
                "note": "Dependencies updated"
            }
        ]
    },
    {
        "version": "1.0.0",
        "changes": [
            {
                "note": "Move Exchange contract out of contracts-protocol to new package",
                "pr": 1539
            },
            {
                "note": "Move example contracts out of contracts-examples to new package",
                "pr": 1539
            }
        ]
    }
]
