LiquidityProtection
- Removed protection logic
- Removed the ability to migrate positions to v3
- Added support for settings total positions value
- Updated withdrawal logic
- Updated system migration to v3 logic
VortexBurner
- BNT -> vBNT trades are routed through v3
General
- Added support for etherscan verification
LiquidityProtection
- Added admin functions
General
- Added the StakingRewardsClaim contract & supporting scripts
LiquidityProtection
- Removed checkpoint updates (gas optimization)
- Removed subscriber notifications on add/remove liquidity (gas optimization)
LiquidityProtection
- Added support for migration for v3
General
- Fixed typechain exports
General
- Added support for migrating positions into v3
- Upgraded prettier and updated style/format
- Upgraded and cleaned up CI support
- Upgraded all dependencies
General
- Major upgrade, many improvements and cleanups in preparation for v3 integration
- Updated the dev stack/infrastructure platform from truffle to hardhat
- Major tests upgrade for robustness and flexibility
- Replaced auto-generated getters with private state vars + dedicated custom getters
- Upgraded/Optimized extended math utils
- Replaced any OpenZeppelin supported contract with the OZ version
- Updated conventions based on the latest OpenZeppelin standard
- Added some utility functions in various contracts for more code reuse
- Cleaned up some terminology issues
- Removed legacy contracts
- Updated docs conventions - removed params/return definitions, added
requirements
section where appropriate - Added prettier auto formatting
- Cleaned up directory structure
- Upgraded all dependencies
- Added CI support
StakingRewards
- Added support for staking rewards from a specific pool (reduced gas cost option)
General
- Fixed a minor issue in the test deployment script
LiquidityProtection
transferPositionAndCall
replaced bytransferPositionAndNotify
with predefined callback interface
General
- Minor cleanups
General
- Updated project dependencies
General
- Normalized ETH/reserve token usages (new
ReserveToken
contract, updated token handling across the board)
ConverterFactory
- Allow unregistering factories
LiquidityProtection
- Added
transferPosition
&transferPositionAndCall
that allow owners to transfer their positions to other wallets/contracts - Fixed an issue that caused APR of new positions to remain at 0 in the first few days
General
- Added global network settings (
NetworkSettings
contract) - Added the Vortex mechanism (global network fee logic and the
VortexBurner
contract) - Moved the native token address and more generic utils into the
Utils
contract - Removed support for Liquid Tokens
- Removed legacy EtherToken support
- Removed affiliate fee logic
- Many other minor changes and cleanups
Converters
syncReserveBalances
is now exposed- Updated the upgrade process with some optimizations
- Added support for global network fees
- Removed support for withdrawing locked tokens (simplification)
addLiquidityReturn
updated to handle input of multiple amounts
TokenHolder
- Added support for ETH and for withdrawing multiple tokens in a single call
General
- Replaced the local ERC20Token/TokenHandler with OpenZepplin's ERC20/SafeERC20
- Moved from npm to yarn
- Added FixedRatePoolConverter (type 4)
StandardPoolConverter
- Added
sourceAmountAndFee
function that returns the source amount and fee based on a target amount
LiquidityProtection
- Pool spot rate is now recorded on deposit instead of the average rate
LiquidityProtection
- Updated settings contract conventions
LiquidityProtection
- Added support for disabling adding liquidity with a specific reserve
- Added support for multipler event subscribers
LiquidityProtection
- Added
LiquidityProtectionSystemStore
contract that holds the system balance/minted amounts - Added a dedicated wallet contract for liquidity protection
General
- Replaced the local SafeMath contract with OpenZepplin's version
- Renamed Math contract to MathEx contract to prevent conflicts
LiquidityProtection
- Added
LiquidityProtectionStats
contract that holds totals & provider specific stats - Added an event subscriber contract that receives liquidity add/remove events
LiquidityProtection
- Removed support for protecting/unprotecting existing pool tokens
- Added a function that returns the current available space in the pool (
poolAvailableSpace
)
ConverterUpgrader
- Added support for upgrading a converter with reserve tokens that revert on transfer(0)
General
- Added a gas optimized standard pool converter (type 3) for 2 reserves, 50%/50% weights
- Added Checkpoint store contract for tracking any actions that happen at a specific point in time
- Optimized some of the generic Math functions
- Removed legacy code
- Added prettier to the code
ConverterRegistry
- Creating a standard type 1 pool will result in a type 3 pool
ConverterUpgrader
- Upgrading a standard type 1 pool will result in a new type 3 pool
LiquidityProtection
- New flexible and more secure network token minting limit system
- Liquidity cannot be added and removed in the same block anymore
- Settings moved into a dedicated contract
- Removed the high tier pool system
- Optimized calculations to reduce potential overflows/underflows
- Added addLiquidityFor function that allows creating a position for a different wallet
- Removed the transferLiquidity function
- Added on-chain tracking for when users remove liquidity
- Fixed an issue that triggererd an exception in the poolROI view function in certain cases
LiquidityProtection
- Added support for high tier pools
- Fixed an issue in the system ratio limit
LiquidityProtection
- Updated to use the TokenGovernance contract for both the network token & the governance token
- Minor gas optimization
General
- Added prettier
LiquidityProtection
- Fixed a potential overflow exception in
removeLiquidityTargetAmount
- Binary size optimization
General
- Many other minor changes and cleanups
LiquidityProtection
- Improved accuracy of the return/fee calculations
LiquidityProtection
- Fixed an issue that prevented users from adding single sided liquidity in some cases
LiquidityPoolV1Converter
- Fixed an issue that caused recentAverageRate to return 0/0 for new converters
LiquidityProtection
- Fixed an issue in removeLiquidityReturn that returned the wrong amount
- Added support for max rate deviation
General
- Added the liquidity protection mechanism
General
- Moved more generic math functions into Math
ReentrancyGuard
- Gas optimization
LiquidityPoolV1Converter
- Recent average rate is now calculated before the conversion
General
- Added Math contract with various math utilities
ERC20Token
- Removed the approve frontrunning protection
SmartToken
- Renamed to DSToken
- Removed the owner's ability to disable transfers
- Removed the owner's ability to withdraw other tokens from the contract
LiquidityPoolV1Converter
- Added the ability to query the recent average rate
- Added the ability to query the return amount for adding/removing liquidity
General
- Removed binaries from the repo
ConverterRegistry
- Fixed an issue that prevented creating a new pool if an old pool had one of the new pool's reserves
General
- Updated all "contract interfaces" to real interfaces
- Cleaned up conventions
LiquidityPoolV2Converter
- Updated the fee structure to standard fee / oracle deviation fee
General
- Upgraded contracts/solidity compiler to v0.6.12
LiquidityPoolV2Converter
- Allow the owner to update the amplification factor
LiquidityPoolV2Converter
- Allow the owner to update the external rate propagation time
PriceOracle
- Fixed
lastUpdateTime
to return the latest time between the oracles
LiquidityPoolV2Converter
- Updated weights/fees logic
LiquidTokenConverter
- Initial purchase/supply now takes the reserve weight into account
LiquidityPoolV2Converter
- Fixed an issue in the upgrade process
LiquidityPoolV2Converter
- Upgraded dynamic fee mechanism
Converters
- Updated version number
General
- Added LiquidityPoolV2Converter
- Added a Chainlink price oracle proxy contract
- Moved converter types into dedicated folders
- Many other minor changes and cleanups
Converters
- Added the converter type to the
Activation
event
Converter Factory
- Added support for custom factory for converter types
- Added the converter type to the
NewConverter
event
General
- Updated truffle to 5.1.32
- Updated web3.js to 1.2.9
- Switched to ganache-core
- Updated to the newest solidity-coverage and run it as a plugin
- Added solhint and added npm scripts
- Added eslint
- Upgraded tests to expect and chai, use BN instead of BigNumber and avoid state sharing via before() callbacks
- Various tests updates and improvements
General
- Renamed
rate
related functions totargetAmount
for clarity
LiquidityPoolV1Converter
- Fixed an issue when adding liquidity that only added a fraction of the requested amount
TokenHandler
- Fixed a security vulnerability that allowed any wallet to invoke the transfer functions
BancorNetwork
- Fixed an issue in the backward compatibility layer for older converters
ConverterUpgrader
- Fixed an issue in the backward compatibility layer for older converters
BancorNetwork
- Added backward compatibility to
rateByPath
ConverterRegistry
- Fixed a bug that prevented removal of older converters from the registry
General
- Major upgrade, many improvements and design changes (new backward compatibility layer still supports most of older interfaces)
- Major gas optimization on conversions
- New design to allow different converter types
- Removed EtherToken functionality in favor of using ETH directly (the contract is still used for backward compatibility)
- Added revert error messages
- Improved support for non standard token transfer/transferFrom functions
- Many other minor changes, bug fixes and cleanups
BancorNetwork
- Added a new
conversionPath
function getReturnByPath
is now replaced byrateByPath
- all conversion functions are now replaced by
convertByPath
BancorConverter
- Converters are now broken into different contracts with
ConverterBase
as the base contract - New entity introduced - Converter Anchor. The anchor rerpresents the converter id and is the non upgradable component of the converter
- New
converterType
function to allow identifying the converter - There are now two major converter types - Liquid Token Converter & Liquidity Pool Converter
- Add/Remove liquidity functions moved to the new liquidity pool converter
- New add/remove liquidity functions -
addLiquidity
now accepts the reserve amounts instead of the pool token amount - It's now possible to add liquidity to empty liquidity pools
- It's no longer possible to convert into pool tokens (these can only be acquired by adding liquidity)
- Conversions cannot be executed directly against converters anymore - all conversions should be executed through the BancorNetwork contract
- New
TokenRateUpdate
event that gets emitted for rate changes between any two tokens (reserve/reserve, pool/reserve etc.) PriceDataEvent
is now deprecated in favor of the newTokenRateUpdate
event
ConverterRegistry
- Added
newConverter
factory function to simplify converter creation process - Converters cannot be added to the registry directly anymore, instead use the new factory function
- Converters are now accessible by their anchors instead of by their smart tokens
- Smart token functions/events are now replaced with anchor functions/events
BancorX
- Removed support for smart tokens for security reasons. Allowance should be used instead
BancorConverter
- Added re-entrancy protection
BancorConverterRegistry
- Reverted the signature change of
getLiquidityPoolByReserveConfig
(logic is still intact)
BancorConverter
- Removed
Manager
permission/code totalReserveRatio
is now public
BancorConverterRegistry
- Fixed a bug with identifying converters with similar configurations
EtherToken
- Name & symbol are now constructor args
BancorNetwork
- Removed signature/gas price limit logic
BancorConverter
- Removed the
converterType
variable
BancorConverterUpgrader
- Removed legacy converter (0.4) support
BancorFormula
- Increased liquidation cost precision
EtherToken
- Added
depositTo
function for direct depositing to another account for gas optimization
BancorNetwork
- Added a new Conversion event that gets emitted for any conversion in the network
BancorConverter
- Owners cannot disable conversions anymore
- Owners cannot disable conversions from specific reserves anymore
- Removed the virtual balance mechanism
General
- Better handling for non standard ERC20 tokens's transfer function (removed NonStandardTokenRegistry contract, gas optimization)
BancorConverterRegistry
- Fixed an issue that allowed adding duplicate pools to the registry in certain situations
General
- Added the BancorNetworkPathFinder contract, now compatible with the new converter registry contract
BancorConverter
- Added a dedicated getReserveRatio function
BancorConverterRegistry
- Now enforces only a single liquidity pool for each reserve configuration
- Disabled converters are now considered invalid (can be removed by anyone)
- Added a utility function that returns a list of converters for a given list of smart tokens
General
- Minor cleanups
General:
- Added ContractRegistryClient contract for common contract registry behavior and cleaner access, and updated all registry clients
BancorConverterRegistry:
- Full redesign - it now allows iterating over different primitives in the network and does not require re-adding converters after a converter upgrade
BancorConverter:
- Added support for fund/liquidate in non 50%/50% reserves converters
BancorFormula:
- Added calculations for fund/liquidate in non 50%/50% reserves
BancorConverter:
- Updated the virtual balances mechanism - it now scales all reserve balances by the same factor and is only relevant to cross reserve conversions
BancorNetwork:
- Added affiliate fee support in xConvert & xConvertPrioritized
SmartTokenController:
- Removed the disableTokenTransfers function
General:
- Added a testnet/private chain deployment script/migration
- Updated the readme file with more tutorials on the various scripts
ERC20Token:
- Cleaned up construction, added the total supply as a constructor arg
General:
- Cleaned up all compilation warnings
BancorConverter:
- Added a protection against activation with no token supply
BancorConverterRegistry
- Added events when adding/removing tokens
- Removing the last converter of a token will now also remove the token from the list of tokens
General:
- Added the BancorNetworkPathFinder contract
BancorConverterFactory
- Added utility function
latestConverterAddress
to return the latest converter for a given token - Removing the last converter for a token will now also remove the token from the list of tokens
General:
- Terminology changes (Connector -> Reserve, Weight -> Ratio)
- Compiler upgraded to 0.4.26
- Truffle upgraded to 4.1.16
General:
- Fixed line breaks in documentation
BancorNetwork:
- Added support for affilate fee
BancorConverter:
- Minor cleanups / bug fixes
BancorX:
- Added support for any ERC20/Smart token (was previously BNT specific)
Converters:
- Fixed a rounding error in the
fund
function
General:
- Added support for auto generation of documentation
- Updated contract documentation
- Cleaned up tests
Network:
- Fixed an issue that caused getReturnByPath to fail if the path contained old converters
- added the ConverterRegistry contract
General:
- Added support for non standard ERC-20 tokens
- Added NonStandardTokenRegistry contract to support non standard ERC-20 tokens
Network:
- Removed
convertForMultiple
General:
- Minor cleanups / bug fixes
- Moved to SafeMath
Converters:
- Added
completeXConversion
function to convert from BNT to another token by providing an id rather than amount - Changed the version from bytes32 to uint16
quickConvert
andquickConvertPrioritized
now callconvertForPrioritized3
in the BancorNetwork contract- Renamed
isPurchaseEnabled
toisSaleEnabled
in connector token struct, and validated that sales are enabled for thefromConnector
rather than thetoConnector
in the conversion functions
Network:
verifyTrustedSender
function argumentamount
renamed tocustomVal
- Added
xConvert
andxConvertPrioritized
functions which converts any token to BNT and transfers the result to BancorX - Added
validateXConversion
function to get around the 16 variable function limit in thexConvert
function - Added
convertForPrioritized3
with backwards compatibility to now receive a custom value along with the amount for verifying trusted senders
General:
- Minor cleanups / bug fixes
- Upgraded compiler version to 0.4.24
Converters:
- Replaced the
setRegistry
function withupdateRegistry
function - Removed quickBuyPath from converter
- getReturn now returns the fee as a separate return value
- Converter owner can no longer withdraw connector tokens while the converter is active
- Converter owner can no longer transfer the token ownership once the converter is active
- Added a dedicated
upgrade
function for easier upgrades - Added a
fund
function for increasing liquidity atomically - Added a
liquidate
function for decreasing liquidity atomically even when conversions are disabled
Registry:
- Fixed item removal
General:
- Upgraded compiler version to 0.4.23
- Updated all contracts to make use of the new
constructor
keyword - Removed more local contract dependencies and replaced them with querying the registry
Utilities:
- ContractRegistry - added support for querying the number of items/contract names in the registry
General:
- Added more predefined contract ids
Bug fixes:
- Fixed a crash in BancorConverterUpgrader when trying to upgrade converters with virtual connector balance
Bug fixes:
- Fixed BancorNetwork contract backward compatibility with older converters
General:
- Restructured contract folders
- Upgraded compiler version to 0.4.21
- Replaced from testrpc with ganache
- Other minor cleanups
Converters:
- Gas cost optimizations when converting between 2 connectors, now uses an optimized dedicated formula calculation
- Conversions now trigger 2 separate events - Conversion & PriceDataUpdate
- Added support for multiple conversions in a single atomic transaction
- Added support for conversion whitelist
- Removed the BancorConverterExtensions contract and replaced it with the new ContractRegistry contract
- Added the ability for the owner to also set the manager
- Renamed BancorQuickConverter to BancorNetwork to more accurately reflect its place as the entry point for bancor related functionality
- Removed EIP228 related functionality and deprecated the EIP
Utilities:
- Added support for contract registry to minimize dependencies between contracts
- Added support for a "feature flags" contract that allows contracts to dynamically query other contracts for supported features