> For the complete documentation index, see [llms.txt](https://developers.polymath.network/polymath/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://developers.polymath.network/polymath/dev-2.1.0/changelog.md).

# CHANGELOG

## Changelog

All notable changes to this project will be documented in this file.

## v2.1.0 - Release Candidate

[**2.1.0**](https://www.npmjs.com/package/polymath-core?activeTab=readme) **13-09-18**

### CappedSTO 2.1.0

* `rate` is now accepted as multiplied by 10^18 to allow settting higher price than 1ETH/POLY per token.
* Indivisble tokens are now supported. When trying to buy partial tokens, allowed full units of tokens will be purchased and remaining funds will be returned.

### USDTieredSTO 2.1.0

* Added `stableCoinsRaised` function that returns amount of individual stable coin raised when address of that stable coin is passed.
* Added support for multiple stable coins in USDTSTO.
* Added `buyTokensView` and `getTokensMintedByTier` to USDTSTO.
* Added `getSTODetails` to USDTSTO.
* Added an Array of Tiers that will hold data about every tier in USDTSTO.
* Added `buyWithETHRateLimited`, `buyWithPOLYRateLimited` and `buyWithUSDRateLimited` to USDTSTO.
* Added `getTokensSoldByTier` to return sold (not minted during finalisation) tokens in each tier to USDTSTO.
* Removed individual mappings for tier data removed in UDSTSTO.
* Removed the old Proxy deployment method of USDTieredSTO and adopt the new inherited proxy deployment approach.
* Bump the version to `2.1.0`
* Added `getAccreditedData` to return accredited & non-accredited investor data.
* Event `TokenPurchase` has uint256 tier instead of uint8 tier. &#x20;
* Event `SetAddresses` has non-indexed array of address of `_usdTokens` rather than single indexed address.
* Added `getUsdTokens()` function that returns array of accepted stable coin (usd token) addresses.
* Pass an array of `_usdToken` address in `configure` function instead of singleton address. This will require changes in bytes data generation when deploying a usdtsto through factory.

### GeneralTransferManager

* `getInvestors`, `getAllInvestorsData`, `getInvestorsData` added to GTM to allow easy data queries.
* `changeDefaults(uint64 _defaultFromTime, uint64 _defaultToTime)` added which sets a default timestamp used when `fromTime` or `toTime` are 0.
* Add `address[] public investors` to record a list of all addresses that have been added to the whitelist (`getInvestors`).
* Fix for when `allowAllWhitelistIssuances` is FALSE
* Make GTM a Proxy based implementation to reduce deployment gas costs
* Changed the version of `GeneralTransferManagerFactory` from `1.0.0` to `2.1.0`.
* `_investor` and `_addedBy` is now indexed in the `ModifyWhitelist` event.
* Add public variable `defaults` to get the offset timing.

### Manual Approval TransferManager

* Removed `0x0` check for the `_from` address to `ManualApprovalTransferManager`. This allows for the Issuer/Transfer Agent to approve a one-off mint of tokens that otherwise would not be possible.
* Changed the version of `ManualApprovalTransferManagerFactory` from `1.0.0` to `2.1.0`.  &#x20;
* Deployed 2.0.1 `ManualApprovalTransferManagerFactory` to address 0x6af2afad53cb334e62b90ddbdcf3a086f654c298
* Add `getActiveApprovalsToUser()` function to access all the active approvals for a user whether user is in the `from` or in `to`. &#x20;
* Add `getApprovalDetails()` to get the details of the approval corresponds to `_from` and `_to` address.
* Add feature to modify the details of the active approval using `modifyApproval()` & `modifyApprovalMulti()`.
* Add `addManualApprovalMulti()` and `revokeManualApprovalMulti()` batch function for adding and revoking the manual approval respectively.
* Add `_description` parameter during the `addManualApproval()` function call. It will be a `bytes32` variable which depicts the cause of manual approval.
* Remove `addManualBlocking()` , `revokeManualBlocking()` functions.
* Add `getTotalApprovalsLength()` to get the number of active approvals.
* Add `getAllApprovals()` to get the details of all approvals.

### Dividends

* Changed the version of `ERC20DividendCheckpointFactory` & `EtherDividendCheckpointFactory` from `1.0.0` to `2.1.0`.
* Applied proxy pattern to Dividends modules.
* During the launch of dividend module issuer need to pass the reclaimed wallet that receive the left over funds from the module.

  i.e pass `_wallet` in `configure()` function of dividend module. It emits `SetWallet` event for the confirmation of the same.
* Add `changeWallet()` function to change the reclaimed wallet address (only be called by the owner).
* Add `getDividendsData()` getter to receive the details about all the dividend.
* Add `getDividendData()` getter to receive the details about the particular dividend by passing a corresponding dividend index.
* Add `getDividendProgress()` getter to retrieves the list of investors and their details corresponds to particular dividend.
* Add `getCheckpointData()` use to retrieves list of investors, their balances, and their current withholding tax percentage corresponds to checkpointId.
* `isExcluded()` a view function added to check whether an address is excluded from claming a dividend or not.
* `isClaimed()` a view function added to checks whether an address has claimed a dividend or not.
* DividendIndex is indexed in the events `ERC20DividendClaimed`, `ERC20DividendReclaimed`, `ERC20DividendWithholdingWithdrawn`. Similarly for the Ether dividend module `EtherDividendClaimed`, `EtherDividendReclaimed`, `EtherDividendClaimFailed`, `EtherDividendWithholdingWithdrawn`.
* `EXCLUDED_ADDRESS_LIMIT` changed from 50 to 150.

### Experimental modules

* Remove the `SingleTradeVolumeRestrictionTMFactory.sol` and its corresponding module `SingleTradeVolumeRestrictionTM.sol`.
* Add the new TM called `BlacklistTransferManager.sol` and its corresponding factory `BlacklistTransferManagerFactory.sol`.
* Chnage the name of module from `LockupVolumeRestrictionTM.sol` to `LockUpTransferManager.sol`, similarly factory become `LockUpTransferManagerFactory.sol`.
* Add new module called `VestingEscrowWallet.sol` and its corresponding factory `VestingEscrowWalletFactory.sol`.

### STR & MR

* `getArrayAddress(), getArrayBytes32(), getArrayUint()` are now public getters.
* `getUintValues(), getBoolValues(), getStringValues(), getAddressValues(), getBytes32Values(), getBytesValues()` rename to `getUintValue(), getBoolValue(), getStringValue(), getAddressValue(), getBytes32Value(), getBytesValue()`. #488

### Added

* Add new module called `VolumeRestrictionTM.sol` under the TransferManager modules list. It will be used to restrict the token

  volume traded in a given rolling period.

### Changed

* `getAllModulesAndPermsFromTypes()` does not take securityToken address as a parameter anymore.

## v1.5.0 - Release Candidate

[**1.5.0**](https://www.npmjs.com/package/polymath-core?activeTab=readme) **15-08-18**

### Added

* Added `getInvestorsAt` which returns the investors (non-zero balances) at a particular checkpoint
* Added `iterateInvestors` to allow an a subset of `investors` to be returned from the security token in case `investors` is large.
* `ChangeModuleBudget` in SecurityToken now takes in the change in budget rather than absoulte budget. Added boolean paramter to decide increase/decrease.
* Added `createCheckpoint() withPerm(CHECKPOINT)` to dividend checkpoint modules.
* Added `deleteDelegate()` to general permission manager. It will disable the delegate but not delete the perms.
* Migrated from `npm` to `yarn`.
* Added `SingleTradeVolumeRestrictionManager` module
* Added flag in `PercentageTransferManager` to allow ignoring of issuance transfers
* Added `transferWithData`, `transferFromWithData`, `mintWithData`, `burnWithData` to allow passing of a `bytes _data` for off-chain validation
* Added ability for modules to have multiple types
* Added `name` field to dividends struct in DividendCheckpoint. #295
* Added `getTagsByType`, `getTagsByTypeAndToken`, `getModulesByType`, `getModulesByTypeAndToken` to MR
* Added `getTokensByOwner` to STR
* Added withholding tax to ether & erc20 dividends
* Generalised MakerDAO oracle to allow different instances referencing different currencies
* Added DAI as a fundraising currency to USDTieredSTO
* `transferTickerOwnership()` function is introduced in `TickerRegistry` to transfer the ticker ownership after the registeration #191.
* `getTickersByOwner()` function is used to get the list of tickers owned by the issuer #189.  &#x20;
* New function `addCustomTicker()` is used the add the Ticker in tickerRegistry. To avail the facility to Registry owner to add the tokens without paying the fee #190. &#x20;
* Adding the functionality to change the `version`,`name`,`description`,`title` of a Module factory.  &#x20;
* Add the `registrationTimestamp` in the `SecurityTokenData` structure that also leads the change in the `getSecurityTokenData()` return parameters. #199
* Add `_deployedAt` new parameter in the `addCustomSecurityToken`. #199
* Add `getReputationOfFactory()` & `getModuleListOfType()` functions to get the array type data from the ModuleRegistry contract.  &#x20;
* Add `_setupCost` in `LogGenerateModuleFromFactory` event.  &#x20;
* Add new function `getAllModulesByName()`, To get the list of modules having the same name. #198. &#x20;
* Add new function `modifyTickerDetails()`, To modify the details of undeployed ticker. #230    &#x20;

### Fixed

* 0x0 and duplicate address in exclusions are no longer allowed in dividend modules.
* All permissions are denied if no permission manager is active.
* Generalize the STO varaible names and added them in `ISTO.sol` to use the common standard in all STOs.
* Generalize the event when any new token get registered with the polymath ecosystem. `LogNewSecurityToken` should emit \_ticker, \_name, \_securityTokenAddress, \_owner, \_addedAt, \_registrant respectively. #230 &#x20;
* Change the function name of `withdraPoly` to `withdrawERC20` and make the function generalize to extract tokens from the ST contract. parmeters are contract address and the value need to extract from the securityToken.    &#x20;

### Removed

* Removed investors list pruning
* Remove `swarmHash` from the `registerTicker(), addCustomTicker(), generateSecurityToken(), addCustomSecurityToken()` functions of TickerRegistry.sol and SecurityTokenRegistry.sol. #230 &#x20;
* Remove `Log` prefix from all the event present in the ecosystem.   &#x20;
* Removed `addTagByModuleType` & `removeTagsByModuleType` from MR.

\======

## v1.4.1

[**1.4.1**](https://www.npmjs.com/package/polymath-core?activeTab=readme) **13-08-18**

### Added

* Test cases for 1.4.1 migration
* STR Migration script
* Encrypted API Key for CMC queries in PolyOracle

### Changed

* Remove endData update from unpause function
* Allow custom tokens to be added when STR is paused
* PolyOracle does not revert on out of order callbacks (silently ignores instead)
* Removed USDTieredSTO > STR dependency by moving oracle registry to PolymathRegistry

### Fixed

* Rounding edge cases in USDTieredSTO.sol that could have reverted valid transactions     &#x20;
* Fix #239: fix basic fee logic for ongoing module fees
* Fix #238: make beneficial investments optionally supported (default to not

  allowed)

## v1.4.0

[**1.4.0**](https://www.npmjs.com/package/polymath-core?activeTab=readme) **13-08-18**

### Added

* USDTieredSTO module added as a new STO type. Allows to raise with multiple tiers while pegging price to USD. The USDTieredSTO contract gets the USD to POLY/ETH rate from the STR which contains references to pricing oracles.
* Added PolyOracle to get POLY/USD price for the USDTieredSTO.
* Added MakerDAOOracle to get ETH/USD price for the USDTieredSTO.
* Added CLI for USDTieredSTO.
* Scripts for monitoring Oracles' status.
* Scripts for monitoring Polymath stats (Tokens registered, tokens deployed, STOs launched).
* Test cases for 1.4.1 migration
* STR Migration script
* Encrypted API Key for CMC queries in PolyOracle

### Changed

* Modified CappedSTOFactory to comply with minor interface changes in iSTO. It now uses a mapping named `fundRaiseType` to specify the fundraise type (ETH / POLY)
* Remove endData update from unpause function
* Allow custom tokens to be added when STR is paused
* PolyOracle does not revert on out of order callbacks (silently ignores instead)
* Removed USDTieredSTO > STR dependency by moving oracle registry to PolymathRegistry

### Fixed

* Modified function name in TickerRegistry and SecurityTokenRegistry from `changePolyRegisterationFee` to `changePolyRegistrationFee`. Event name is modified too from `LogChangePolyRegisterationFee` to `LogChangePolyRegistrationFee`
* Minor CLI fixes
* Change in the datastructure of SymbolDetails new variable `expiredTimestamp` introduced and change the variable name `timestamp` to `registeredTimestamp` in Tickerregistry.sol #192.     &#x20;
* Rounding edge cases in USDTieredSTO.sol that could have reverted valid transactions
* Bug in ManualApprovalTransferManager that allowed anyone to reduce anyone's transfer allowance

\=======

## v1.3.0

[**1.3.0**](https://www.npmjs.com/package/polymath-core?activeTab=readme) **25-07-18**

### Added

* Implemented `finishedIssuerMinting / finishedSTOMinting`. The former permanently forbids the issuer from minting tokens. The latter permanently forbids STO modules from minting tokens.    &#x20;
* Added registry of registries. Contracts should point to the registry which acts as a proxy and delegates to the corresponding registry contract.
* Added ModifyWhitelistMulti to Percentage Transfer Manager.   &#x20;
* Add the `Transfer` event in the getTokens function call of `PolyTokenFaucet.sol`.    &#x20;
* Introduce the `_valid` flag in the event of `LogModifyWhitelist` in `PercentageTransferManager.sol`

### Changed

* Removed \_locked parameter from modules. This was only used on STOs to allow the issuer to indicate they would not be minting more tokens after the STO (since it wouldn't be possible to remove it), but now we have the finishedSTOMinting flag that they can use to indicate so in a more transparent way.

## v1.2.1

[**1.2.1**](https://www.npmjs.com/package/polymath-core?activeTab=readme) **27-06-18**

### Added

* Further minting can be forbids on the Issuer level and the STO level using the functions `finishMintingIssuer()`,`finishMintingSTO()`.
* `modifyWhitelistMulti` added in `PercentageTransferManager` contract.   &#x20;

### Changed

* Added extra parameter to TransferManager.verifyTransfer to indicate whether the call is part of a transfer or not. &#x20;

### Removed

* Logic of module locking is removed and also removes the `_locked` parameter.   &#x20;
* Remove `finishMinting()` function from the `SecurityToken` contract.

## v1.2.0

[**1.2.0**](https://www.npmjs.com/package/polymath-core?activeTab=readme) **22-05-18**

### Added

* ERC20DividendCheckpoint module added for on-chain dividend ERC20 payments
* EtherDividendCheckpoint module added for on-chain dividend ETH payments
* Iterable list of investors available on-chain
* STOs are pausable now. It is facilated by using the Pausable contract.
* ManualApprovalTransferManager - allows approval or blocking of explicit address pairs for transfers.
* Module Factories now allow their owner to set 3 types of fees: Setup fee, Usage fee, Monthly fee.
* Added Checkpoint feature to token. This allows the issuer to create snapshots of the token's balances and totalSupply to be used for casting votes or distributing dividends. Created CLI to demo this feature.
* Further minting is forbidden by adding one additional check for `mintingFinished` flag. Issuer can stop minting by calling the `finishMinting()` function.
* Issuer can prevent addresses from participating in the STO. To facilitate this, `_canBuyFromSTO` has been added to modifyWhitelist function.
* Added multi-mint feature.
* Event `LogGenerateModuleFromFactory` emitted at the level of ModuleFactory to log the creation of the module using the respective module factory.
* Added registration fee of `250 POLY` for registering ticker or security token with registry contracts, fee can be changed using `changePolyRegistrationFee`.
* Added ReclaimTokens contract to handle retrieving ERC20 Tokens sent to our contracts.
* Added Pausable feature to registry functions `registerTicker`, `generateSecurityToken`, `registerModule`, `addCustomSecurityToken`.
* Added Registry contract to handle upgradability functionality with a function to change the reference address between registry contracts.
* POLY faucet CLI is added in demo. &#x20;
* `getDividendIndex()` is introduced in `ERC20DividendCheckpoint` & `EtherDividendCheckpoint` contract.

### Changed

* Added extra parameter to TransferManager.verifyTransfer to indicate whether the call is part of a transfer or not. &#x20;
* Added a new return type to verifyTransfer methods called FORCE\_VALID which would override any INVALID returned by TransferManagers if needed. For example, this could be used if we wanted the Manual Approval TM to force a transfer to happen even if the CountTM said that the 2000 investor cap had been reached.
* Burning tokens now respects TransferManagers and investorCount. &#x20;
* Updated CLI with MultiMint process. &#x20;
* Change the `setupCost` of `cappedSTOFactory` from `0 POLY` to `20K POLY`.     &#x20;
* Add one more parameter called the `_owner` in the `addCustomSecurityToken()`.
* Change `_addModule` in SecurityToken.sol to get MR address from STR contract.
* Update CLI with POLY payments. &#x20;

### Removed

* `ExchangeTransferManagerFactory` and `ExchangeTransferManager` is removed from repository.

## v1.1.0

[**1.1.0**](https://www.npmjs.com/package/polymath-core?activeTab=readme) **18-05-18**

### Changed

* Factored out the second reference to the POLY token from ISTO contracts
* Defaulted all STs to have 18 decimals
* Removed decimals parameter from `generateSecurityToken`
* Modified TokenBurner to be an interface
* Moved CappedSTO specific functions to CappedSTO from ISTO
* Moved TokenBurner & PolyToken contracts to test directory (out of main contract directory)
* Modified IST20 interface to inherit from ERC20 interfaces
* Modified verifyTransfer function in TransferManagers to return a Result enumeration instead of boolean
* Fixed `capReached()` which was checking fundsRaised agains cap, but the cap is expressed in tokens.   &#x20;
* Constant key variables migrated from the securityToken to ISecurityToken contract.
* Solidity compiler version get changed to 0.4.23 that leads to the addition of reason string in the `require` and `revert` statements.
* zeppelin-solidity package version and name get changed to openzeppelin-solidity v1.9.0.     &#x20;

### Added

* whitelists for CountTransferManager and PercentageTransferManager to bypass logic
* added CountTransferManager to restrict the total number of token holders
* added PercentageTransferManager to restrict the total percentage of tokens held by any single holder
* generateSecurityToken in SecurityTokenRegistry takes an additional parameter specifying whether the token is divisible.
* IModule contract takes the polyToken contract address as the constructor argument to wrapping all the factories with the polyToken contract address.     &#x20;
* `takeFee()` new function introduced to extract the POLY token from the factory. It only be called by the owner of the factory.     &#x20;
* Added ability for issuer to provide a signed piece of data to allow investors to whitelist themselves.
* `_securityTokenAddress` get indexed in the `LogNewSecurityToken` event.    &#x20;
* Now each investor have its `expiryTime` for the KYC. After the expiryTime limit reached, investor will not abe to use transfer related functions.
* Transfers of tokens gets paused at the level of all TM as well as on the ST level. To facilitate this 3 functions get added namely

  `pause()`, `unpause()`,`freezeTransfers()`. All 3 functions are called by the issuer of the securityToken only.
* Security token has got a new feature of burning the tokens, To use this feature user need to call the `burn()` function but before that issuer need to deploy the `TokenBurner` contract and set its address into the SecurityToken contract using the function `setTokenBurner()`.           &#x20;

### Remove

* `investorStatus()` function in securityToken contract has removed.

[**0.3.1**](https://www.npmjs.com/package/polymath-core?activeTab=readme) **06-04-18**

### Added

* Add `emit` keyword to emit the events.   &#x20;
* Two new variable is added at the time of registration of ticker. `swarmHash` represents the off-chain data storage location on IPFS and `owner` It reperesent the ethereum address of the owner.      &#x20;
* `LogRegisterTicker` emits two more variable called `_swarmHash` and `_owner`.  &#x20;
* Two events are added in `GeneralPermissionManager` contract to facilitate the notifications for the UI end.

  ```
      __`LogChangePermission`__ :Emit when permissions to a delegate get changed.    
      __`LogAddPermission`__: Emit when delegate is added in permission manager contract.   
  ```
* `getInstructions()` is a public function added into the factories contracts. Use to get the useful instructions about the corresponding factory.  &#x20;
* `_securityTokenRegistry` is more argument is added in **securityTokenV2** contract.

### Changed

* All contracts get migrated from solc version 0.4.18 to 0.4.21.
* Now symbols get stored in smart contract in uppercase instead of lowercase.   &#x20;
* Public variable `STRAdress` name in TickerRegistry smart contract changed to `strAddress`.  &#x20;
* Function `permissions()` name in all module factories get changed to `getPermissions()`.  &#x20;
* Function `delegateDetails()` name gets changed to `getDelegateDetails()` in GeneralPermissionManager contract.     &#x20;
* `STVersionProxy_001 & STVersionProxy_002` contract name changed to STVersionProxy001 & STVersionProxy002 respectively.  &#x20;

[**0.3.0**](https://www.npmjs.com/package/polymath-core?activeTab=readme) **02-04-18**

### Added

* Multiple events are added to `ModuleRegistry` contract to facilitate the Logging of the operations.  &#x20;

  ```
    __`LogModuleUsed`__: Emit when Module get used by a securityToken.    
    __`LogModuleRegistered`__: Emit when a new module gets registered by the polymath for securityToken to use.   
    __`LogModuleVerified`__: Emit when module get verified by the ModuleRegistry owner.   
  ```
* ModuleRegistry now know about the SecurityTokenRegistry by using the function `setTokenRegistry` and it only is called by the owner of the ModuleRegistry contract.
* `verifyModule` function added to verify the newly added modules on the polymath platform. It is a type of ownable function.
* `securityTokenRegistry` public variable added to store the address of the SecurityTokenRegistry. And `verified` mapping added to hold the list of verified `moduleFactory` addresses with a bool flag.  &#x20;
* Now `getSecurityTokenData()` is added to get the securityToken data instead of calling directly the public mapping `securityTokens`.  &#x20;
* New variable `tokensSold` is added in the **cappedSTO** contract. It is used to track the amount of securityTokens sold. &#x20;
* New moduleFactory called `ExchangeTransferManagerFactory` is added in to the list of the available modules in the Polymath V1 system.  &#x20;
* **\_budget** is a new parameter added in the `addModule`. It signifies the budget of the ongoing module in terms of **POLY** token.  &#x20;
* Two new events added into the securityToken contract to facilitate the logging of the operations.  &#x20;

  ```
   __`LogModuleRemoved`__ : Event emit when module get removed from the securityToken.
   __`LogModuleBudgetChanged`__: Emit when module budget get changed.   
  ```
* `getModuleData` function added in the securityToken to get the data of the Module with the help of **moduleType** and the **index of the module** user want to get.  &#x20;
* `removeModule` new function added facilitate the removal of the module from the securityToken. It is ownable type function.   &#x20;
* `changeModuleBudget` function added to change the budget of the module that already been added. It is ownable type function. &#x20;

### Changed

* In early release token symbol in uppercase or in lowercase entertain differently. But for this release both upercase and lowercase symbol name are same.  &#x20;
* Address of the owner of the securityToken is removed from the strucuture of the `SecurityTokenData`.
* Mapping `securityTokens` in ISecurityTokenRegistry is now being private instead of public.  &#x20;
* `expiryLimit` default value get changed to 7 days instead of the 90 days in TickerRegistry.   &#x20;
* **contact** variable is replaced by the **tokenName** variable in `SymbolDetails` structure of TickerRegistry. &#x20;
* Token name is now emitted in the `LogRegisterTicker` event corresponds to **\_name** variable.   &#x20;
* Now **checkValidity** function takes three arguments insted of two, tokenName is the third one.
* **Cap** is based on the number of securityToken sold instead of the quantity of the fundraised type. &#x20;
* **buyTokensWithPoly** has only one argument called `_investedPoly` only. Beneficiary Address should be its msg.sender.   &#x20;
* **getRaiseEther()** function name changed to **getRaisedEther()**.  &#x20;
* **getRaisePoly()** function name changed to **getRaisedPoly()**.  &#x20;
* `LogModuleAdded` emit one more variable called **\_budget**.  &#x20;
* `modules` mapping in the securityToken contract now returns **the array of ModuleData**.   &#x20;

### Removed

* `admin` varaible is removed from the TickerRegistry contract.   &#x20;

[**0.2.0**](https://www.npmjs.com/package/polymath-core?activeTab=readme) **26-03-18**

### Added

* ModuleRegistry contract will provide the list of modules by there types. &#x20;
* `SecurityTokenRegistry` is now working on the basis of the proxy version of the securitytoken contract. For that SecurityTokenRegistry has one more variable in the constructor called \_STVersionProxy .  &#x20;
* `setProtocolVersion` new function added in the SecurityTokenRegistry to set the protocol version followed to generate the securityToken. Only be called by the `polymath admin`.  &#x20;
* `SecurityToken` now have the integration with polyToken. At the time of `addModule()` SecurityToken approve the cost of the module to moduleFactory as the spender.  &#x20;
* New function `withdrawPoly(uint256 _amount)` is added to withdrawal the unused POLY from the securityToken contract. Called only by the owner of the contract.  &#x20;
* `checkPermission(address _delegate, address _module, bytes32 _perm)` function is added to check the permissions on the service providers(delegate).
* `STVersionProxy_001.sol` & `STVersionProxy_002.sol` are the two new contract added. Both of those are the proxy contract use to generate the SecurityToken. Both contract constructor takes two variables address of `transferManagerFactory` address of the

  `permissionManagerFactory`.  &#x20;
* New Module type is added called `PermissionManager`. It has three contracts called GeneralPermissionManagerFactory, GeneralPermissionManager, IPermissionManager.
* `GeneralPermissionManger` is all about providing the permission to the delegate corresponds to the SecurityToken. Major functionality is added, check, change the permission of the delegate.  &#x20;
* Two more functions added for each factory type i.e `getDescription()` & `getTitle()`. &#x20;
* `CappedSTO` is now Configurable by choosing the type of fundraise. Either POLY or ETH.
* `CappedSTO` takes 3 more constructor arguments fundRaiseType (uint8), the address of the polyToken & address of the fund's receiver.   &#x20;
* `buyTokensWithPoly(address _beneficiary, uint256 _investedPoly)` new function added in cappedSTO to facilitate the funds raising with the POLY.  &#x20;
* `verifyInvestment(address _beneficiary, uint256 _fundsAmount)` new function added in ISTO to check whether the investor provides the allowance to the CappedSTO or not.   &#x20;
* `LogModifyWhitelist` event of GeneralTransferManager emit two more variables. i.e address which added the investor in whitelist(`_addedBy`) and records the timestamp at which modification in whitelist happen(`_dateAdded`).  &#x20;
* `permissions()` function added in GeneralTransferManager to get all permissions. &#x20;
* `PolyToken.sol` contract is added at contracts/helpers/PolyToken.sol. For now, it has no big use.

### Changed

* ModuleRegistry only holds the module type of modules only not there names or cost anymore.  &#x20;
* No More ModuleReputation struct for counting the reputation of module. Now `reputation` mapping only contains the list of the addresses those used that module factory.   &#x20;
* `checkModule()` of ModuleRegistry contract rename to `useModule()` with same function parameters.  &#x20;
* Event `LogModuleAdded` emit only 5 variables instead of 6. timestamp is no longer be a part of the event. &#x20;
* `SecurityTokenRegistrar` now renamed as `SecurityTokenRegistry`.  &#x20;
* Deployment of the securityToken is now performed by the proxy contracts and call being generated form the SecurityTokenRegistry.
* `TickerRegistrar` renamed as `TickerRegistry`.  &#x20;
* TickerRegistry is now Ownable contract.
* `setTokenRegistrar` functio of TickerRegistry renamed to `setTokenRegistry`.  &#x20;
* SecurityToken constructor has one change in the variable. i.e `_moduleRegistry` contract address is replaced by the `_owner` address.  &#x20;
* Their is no `_perm` parameter in the `addModule()` function of the securityToken contract. Now only 4 parameters left.
* Type of Mudules changed   &#x20;
  * Permission has a type 1       &#x20;
  * TransferManager has a type 2   &#x20;
  * STO has a type 3 &#x20;
* Location of SecurityToken changed to `contracts/token/SecurityToken.sol`
* GeneralTransferManager takes only 1 variables as constructor argument i.e address of the securityToken. &#x20;
* Functions of GeneralTransferManager earlier controlled by the owner only, now those can be controlled by the delegates as well with having proper permissions.  &#x20;

### Removed

* `getCost()` is removed from the ModuleRegistry contract.
* `SafeMath.sol` contract is replaced by the zeppelin-solidity library contract . &#x20;
* No more `SecurityTokens` and `symbol` information will be directly part of the SecurityTokenRegistry. Those information will accessed by inheriting the `ISecurityTokenRegistry`.  &#x20;
* Remove the Delegable.sol, AclHelpers.sol, DelegablePorting.sol contracts. Now permission manager factory takes their place . \* `delegates` mapping removed from the GeneralTransferManager. &#x20;
