This project implements a flexible approach for defining a compliance layer around a standard ERC20 token.
Standard ERC-20 face a problem with mainstream adoption due to the scepticism of many regulatory bodies driven by the lack of built-in mechanism to enforce compliance with the governing financial laws.
To mitigate such concerns and boost the token adoption by institutional users we decided to design a framework allowing token designers to easily define and implement restriction coming from the traditional financial world.
This solution may be seen as complementary to the ERC-1400 security token standard by focusing on a preventive side and enforcing that non-compliant transfer cannot be executed rather than allowing regulators to intervene only after something went wrong.
The first use case will be adopting Alice social impact bonds coupons to be tradable in a compliant way so they may be more accessible to traditional institutional investors.
We are grateful to the Gnosis team for supporting this project by awarding the GECO grant to Alice.
Any ERC-20 token may become compliant by extending the ComplianceWrapper contract. This contract intercepts any transfer attempts and invokes the PolicySelector to choose the appropriate compliance policy based on transfer parameters such as an investor type. A selected Policy is a set of Checkers which express rules and restrictions modelled after a real-world financial environment.
At every transfer executed on a compliant token a wrapper intercept the attempt and automatically classify to be verified by appropriate compliance policy. The selected policy contains a set of checkers that validates if transfer parameters are compliant. If the parameters go through all of the verification the mediating checkers are updated to being able to take into account trading history for subsequent verification.
To install all of the necessary dependencies use the node package manager:
npm install
To run all of the smart contract tests, use the following truffle command in your console:
npx truffle test
It's advices to use the ganache client for efficient testing
npx ganache-cli -a 100
All comments and ideas for improvements and pull requests are welcomed. We want to improve the project based on feedback from the community.