From a technical standpoint, MFCP is a set of smart contracts that runs on any Ethereum-based chain that facilitates the creation, management and servicing of any fungible asset. The protocol builds on the ERC-1400 standard and includes an interface to ensure backwards compatibility with the ERC-20 standard. Non-Ethereum-based chains can be supported via custom integration. Essentially any fungible Financial instruments can be converted into digital assets using MFCP. The components making up MFCP are the following:
Governance is the core component upon which the entire MFCP is built. Governance contracts are the master controllers for all subsequent contracts. Governance contracts facilitate
- Contract registry
- Permission management system
- Rule engine
The functionality of governance contracts is enforced by a definition contract which is inherited into all MFCP contracts. In other words, in order for a contract to be part of MFCP it must contain the definition contract.
Compliance is a module which enables mapping of accredited investors to their respective addresses. The accreditation process can be performed by dedicated KYC providers. A choice of multiple providers can be offered and the final output is uploaded in the form of a hash on to the smart contract. The information about accredited investors is stored in KYC Regis by registered KYC Provider. The KYC provider contract keeps track of all permitted KYC Providers. A KYC interface contract is used to register compliance details onto MFCP. MFCP permits transactions only for accredited investors (with some exceptions as per local regulation). Compliance is a service layer within contracts which can or cannot be used depending on need and requirements. For example, the accreditation process is a requirement during the issuance of an instrument but may not be required for transfers done by an exchange.
Asset factory is the module that creates the asset contract, which is the base template upon which all fungible instruments are built. The only functionality of the asset factory module is to generate new asset contracts and link them to the governance contracts. Asset factory also maintains a registry of all the assets ever created.
Module Registry contains a list of module contracts along with their respective asset contract. Only Module factory contracts can change the state of Module registry contracts. Module registry contracts are used as governance functions to identify associations of module contracts to an asset contract. Only successfully authorised modules can communicate with functions of an asset contract.
Asset is the base definition upon which all different types of financial instruments are built. Asset contracts can only be created by Asset factories. Modules can be attached / associated with Asset contracts by asset owners and these registered modules can be allowed to change the state of the contract. Each Asset contract has an owner. It is the responsibility of the asset owner to define the entire lifecycle of the asset by virtue of adding respective modules to the asset.
Module Factory Contracts and Module Contracts
Module Factory contracts can only create module contracts within MFCP as no external module deployment is permitted. During the module deployment process the Module Factory contract registers the respective contract on to governance framework and, at the same time, registers the association of the module to its respective asset. In its essence, a module is a piece of code which performs a specific task during the life cycle of the asset. MFCP supports multiple types of modules and also allows for custom development of modules. Module contracts have functionalities relating to the following life cycle elements:
- Transfer / trading
- Rights management
- Distribution of returns