Interface Draft

eip: title: Base on International Financial Reporting Standards to do information diclosure author: xiazy@weiresearch discussions-to: # status: Draft type: Standards Track category: ERC created: 2018-12-28 require: None

## Simple Summary

This standard sits under the ERC-1400 (#1411) umbrella set of standards related to security tokens.

Provides a standard to support information disclosure on tokens.

## Abstract

Allows information of token issue entity information be disclosed for investers.

## Motivation

Since security tokens are subject to regulatory and legal oversight (the details of which will vary depending on jurisdiction, regulatory framework and underlying asset)

Investors need a easy way to check financial report, management team, and litigation report of the company or the entity.

## Requirements

See ERC-1400 or ERC-20 for a full set of requirements across the library of standards.

The following requirements have been compiled following discussions with parties across the Security Token ecosystem.

  • MUST be able to perform forced transfer for legal action or fund recovery.

## Rationale

Investors can continue to check updated information on the issuer. The invested company or organization is obliged to disclose its true information in a timely manner.

## Specification

This standard will try to meet the legal information disclosure system in different countries.

#### hasBasicInformation

This function return false means no legal representive or organization register information available. return true means invoke function getBasicaInformation() will return related information

` solidity function function hasBasicInformation() external view returns (bool) `

#### hasFinancialReport

This function return false means no financial report available. return true means invoke function getFinancialReport() will return related information

` solidity function hasFinancialReport() external view returns (bool) `

#### hasManagementReport

This function return false means no management report available. return true means invoke function getManagementReport() will return related information

` solidity function hasManagementReport() external view returns (bool) `

#### hasLitigationDisclosure

This function return false means no litigation information available. return true means invoke function getLitigationReport() will return related information

` solidity function getLitigationReport() external view returns (bool) `

#### hasLitigationDisclosure

This function return false means no litigation information available. return true means invoke function getLitigationReport() will return related information

` solidity function getLitigationReport() external view returns (bool) `

#### hasLitigationDisclosure

This function return false means no litigation information available. return true means invoke function getLitigationReport() will return related information

` solidity function getLitigationReport() external view returns (bool) `

#### setBasicaInformation

Used to attach a organization document the contract, or update the URI or hash of an existing attached document.

setBasicaInformation MUST throw if the document is not successfully stored.

setBasicaInformation MUST emit a DocumentUpdated event with details of the document being attached or modified.

` solidity function setBasicaInformation(bytes32 _name, string _uri, bytes32 _documentHash) external; `

#### getBasicaInformation

Used to return the details of a document with a known name (bytes32). Returns the URI associated with the document (string), the hash (of the contents) of the document (bytes32), and the timestamp at which the document was last modified via setFinancialReport (uint256).

` solidity function getBasicaInformation(bytes32 _name, string _uri, bytes32 _documentHash) external; `

#### setFinancialReport

Used to attach a new financial report to the contract, or update the URI or hash of an existing attached document.

setFinancialReport MUST throw if the document is not successfully stored.

setFinancialReport MUST emit a DocumentUpdated event with details of the document being attached or modified.

` solidity function setFinancialReport(bytes32 _name, string _uri, bytes32 _documentHash) external; `

#### getFinancialReport

Used to return the details of a document with a known name (bytes32). Returns the URI associated with the document (string), the hash (of the contents) of the document (bytes32), and the timestamp at which the document was last modified via setFinancialReport (uint256).

` solidity function getFinancialReport(bytes32 _name, string _uri, bytes32 _documentHash) external; `

#### setManagementReport

Used to attach a new management report to the contract, or update the URI or hash of an existing attached document.

setManagementReport MUST throw if the document is not successfully stored.

setManagementReport MUST emit a DocumentUpdated event with details of the document being attached or modified.

` solidity function setManagementReport(bytes32 _name, string _uri, bytes32 _documentHash) external; `

#### getManagementReport

Used to return the details of a document with a known name (bytes32). Returns the URI associated with the document (string), the hash (of the contents) of the document (bytes32), and the timestamp at which the document was last modified via setManagementReport (uint256).

` solidity function ManagementReport(bytes32 _name, string _uri, bytes32 _documentHash) external; `

#### setLitigationReport

Used to attach a new iltigation report to the contract, or update the URI or hash of an existing attached document.

LitigationReport MUST throw if the document is not successfully stored.

LitigationReport MUST emit a DocumentUpdated event with details of the document being attached or modified.

` solidity function LitigationReport(bytes32 _name, string _uri, bytes32 _documentHash) external; `

#### getLitigationReport

Used to return the details of a document with a known name (bytes32). Returns the URI associated with the document (string), the hash (of the contents) of the document (bytes32), and the timestamp at which the document was last modified via setFinancialReport (uint256).

` solidity function getLitigationReport(bytes32 _name, string _uri, bytes32 _documentHash) external; `

#### isControllable

In order to provide transparency over whether controllerTransfer / controllerRedeem are useable, the function isControllable can be used.

If a token returns FALSE for isControllable() then it MUST:
  • always return FALSE in the future.
  • controllerTransfer must revert
  • controllerRedeem must revert

In other words, if an issuer sets isControllable to return FALSE, then there can be no further controller transactions for this token contract. controllerRedeem MUST emit a ControllerRedemption event. ` solidity function isControllable() external view returns (bool); `

## Interface

/// @title International Financial Reporting Standards, information (part of the ERC1400 Security Token Standards) /// @dev See https://github.com/SecurityTokenStandard/EIP-Spec /// Reference https://www.growthforce.com/blog/financial-reports-management-reports-differences

interface IERCxxxx is IERC20 {

// Regular Operation

function hasBasicInformation() external view returns (bool);

// Profit and Loss Statement

// Balance Sheet // Accounts Payable // Accounts Receivable // Statement of Cash Flows

function hasFinancialReport() external view returns (bool);

// Optional // Profit and Loss by Class // Department

// Team // Job // Realization Rate // Utilization Rate

function hasManagementReport() external view returns (bool);

// Optional // pending // completed function hasLitigationDisclosure() external view returns (bool);

function setBasicaInformation(bytes32 _name, string _uri, bytes32 _documentHash) external;

// Document Management function getBasicaInformation(bytes32 _name) external view returns (string, bytes32, uint256);

function setBasicaInformation(bytes32 _name, string _uri, bytes32 _documentHash) external;

// Document Management function getBasicaInformation(bytes32 _name) external view returns (string, bytes32, uint256);

function setFinancialReport(bytes32 _name, string _uri, bytes32 _documentHash) external;

// Document Management function getFinancialReport(bytes32 _name) external view returns (string, bytes32, uint256);

function setManagementReport(bytes32 _name, string _uri, bytes32 _documentHash) external;

// Document Management function getManagementReport(bytes32 _name) external view returns (string, bytes32, uint256);

function setLitigationReport(bytes32 _name, string _uri, bytes32 _documentHash) external;

// Document Management function getLitigationReport(bytes32 _name) external view returns (string, bytes32, uint256);

}

## References - [EIP 1400: Security Token Standard With Partitions](https://github.com/ethereum/EIPs/issues/1411) - [EIP Draft](https://github.com/SecurityTokenStandard/EIP-Spec)