Add ERC: Transparent Financial Statements
Complete Reference Implementation and Source code HERE. title: Transparent Financial Statements description: A.P.I. for Protocols to Ensure Open Transparent Financial Data for all Investors. author: Ignacio Ceaglio (@Nachoxt17) [email protected] discussions-to: https://ethereum-magicians.org/t/erc-xxxx-transparent-financial-statements/21191 status: Review type: Standards Track category: Interface created: 2024-09-20 requires: 20
Abstract
This proposal defines a standard A.P.I. that enables E.V.M. Blockchain-based companies (or also called "Protocols") to publish their financial information, specifically Income Statements and Balance Sheets, on-chain in a transparent and accessible manner through Solidity Smart Contracts. This standard aims to emulate the reporting structure used by publicly traded companies in traditional stocks markets, like the S.E.C. 10-Q filings. The financial statements include key information, namely as Revenue, Cost of Goods Sold, Operating Expenses, Operating Income, Earnings before Interest, Taxes, Depreciation, and Amortization (E.B.I.T.D.A.) and Earnings Per Token (E.P.Share-Token), allowing investors to assess the financial health of blockchain-based companies in a standardized, transparent, clear and reliable format.
Motivation
The motivation of this E.I.P. is to Bring Seriousness to the CryptoCurrencies Investments Market. Currently, the situation is as follows:
Most ERC-20 Tokens representing E.V.M. Blockchain-based companies (or also called "Protocols"), DO NOT work the same way as a Publicly Traded Stock that represents a Share of ownership of the equity of that such company (so the user who buys a Protocol's ERC-20, is also now a share-holder and co-owner of the business, its profits and/or its dividends), but rather function as "Commodities" such as oil; they are consumable items created by said E.V.M. Blockchain-based company (or "Protocol") to be spent in their platform. They are Publicly Traded and advertised to be representing the underlying Protocol like a Share, working in practice the same way as a Commodity and without any Public, Transparent and Clear Financial Information as publicly traded stocks have.
Added to that, most token research analysis reports that can be currently found on the internet are informal Substack or Twitter posts, with lots of abstract explanations about the features of the said Protocol to invest in, that lack of transparent financial numbers and factual financial information, that are made by anonymous users without real exposed reputations to affect.
This E.I.P. will improve that by giving users and investors transparent, clear and factual financial information to work with when analyzing as a potential investment the such E.V.M. Blockchain-based company that implements this E.I.P. in their Solidity Smart Contracts, and that will generate Trust, Transparency and Seriousness in the CryptoCurrencies Investments Market long term.
Specification
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119 and RFC 8174.
All Transparent Financial Statements Standard implementations MUST implement ERC-20 to represent shares, and the financial numbers displayed in a StableCoin's value.
All Transparent Financial Statements MUST implement ERC-20's optional metadata extensions.
The name and symbol functions SHOULD reflect the underlying token's name and symbol in some way.
All methods MUST be of visibility public.
All methods MUST return the stablecoin.
Timestamp Constraint: For all methods, startTimestamp MUST be less than or equal to endTimestamp. If startTimestamp is equal to endTimestamp, the method returns a balance sheet snapshot. If startTimestamp is less than endTimestamp, the method returns an income statement for that period.
Output Structs: Instead of a single uint256 value, each method returns a Struct with one or OPTIONAL more uint256 entries to allow for detailed financial data, each one with their own customized entry name.
Definitions:
- Currency: The individual StableCoin used to value the publicly displayed financial numbers.
- Revenue: Total earnings from selling products or services before expenses.
- Cost of Goods Sold (C.O.G.S.): Direct costs for producing goods/services, including labor and materials.
- Operating Expenses: Expenses like Selling, General, and Administrative, Research and Development, and other operational costs.
- Operating Income: Revenue minus operating expenses.
- E.B.I.T.D.A.: Earnings Before Interest, Taxes, Depreciation, and Amortization.
- Other Income and Expenses: Non-operating income, such as interest, investment gains or losses.
- Net Income: Profit after all expenses, taxes, and deductions.
- E.P.S.: Earnings per Share Token (ERC-20), showing profit allocated per share.
Methods
currency
Returns the address of the individual StableCoin used to value the publicly displayed financial numbers.
- name: address
type: function
visibility: public
stateMutability: view
inputs:
/none/
outputs:
- name: currencyAddress
type: address
revenue
Returns total revenue generated by the protocol within a time period.
- name: revenue
type: function
visibility: public
stateMutability: view
inputs:
- name: startTimestamp
type: uint256
- name: endTimestamp
type: uint256
outputs:
- name: RevenueStruct
type: struct
fields:
- name: grossRevenue
type: uint256
- name: optionalAdditionalRevenueDetail1
type: uint256
- name: optionalAdditionalRevenueDetailN
type: uint256
cogs
Returns the cost of goods sold within a specified period.
- name: cogs
type: function
visibility: public
stateMutability: view
inputs:
- name: startTimestamp
type: uint256
- name: endTimestamp
type: uint256
outputs:
- name: COGSStruct
type: struct
fields:
- name: totalCOGS
type: uint256
- name: optionalAdditionalCOGSDetail1
type: uint256
- name: optionalAdditionalCOGSDetailN
type: uint256
operatingExpenses
Returns the total operating expenses within a specified period.
- name: operatingExpenses
type: function
visibility: public
stateMutability: view
inputs:
- name: startTimestamp
type: uint256
- name: endTimestamp
type: uint256
outputs:
- name: OperatingExpensesStruct
type: struct
fields:
- name: totalOperatingExpenses
type: uint256
- name: optionalAdditionalExpenseDetail1
type: uint256
- name: optionalAdditionalExpenseDetailN
type: uint256
operatingIncome
Returns operating income for the specified period (Revenue - COGS - Operating Expenses).
- name: operatingIncome
type: function
visibility: public
stateMutability: view
inputs:
- name: startTimestamp
type: uint256
- name: endTimestamp
type: uint256
outputs:
- name: OperatingIncomeStruct
type: struct
fields:
- name: totalOperatingIncome
type: uint256
- name: optionalAdditionalIncomeDetail1
type: uint256
- name: optionalAdditionalIncomeDetailN
type: uint256
ebitda
Returns EBITDA for the given period.
- name: ebitda
type: function
visibility: public
stateMutability: view
inputs:
- name: startTimestamp
type: uint256
- name: endTimestamp
type: uint256
outputs:
- name: EBITDAstruct
type: struct
fields:
- name: totalEBITDA
type: uint256
- name: optionalAdditionalEBITDADetail1
type: uint256
- name: optionalAdditionalEBITDADetailN
type: uint256
otherIncomeExpenses
Returns non-operating income and expenses, such as interest and investment gains or losses, for the specified period.
- name: otherIncomeExpenses
type: function
visibility: public
stateMutability: view
inputs:
- name: startTimestamp
type: uint256
- name: endTimestamp
type: uint256
outputs:
- name: OtherIncomeExpensesStruct
type: struct
fields:
- name: totalOtherIncome
type: uint256
- name: totalOtherExpenses
type: uint256
- name: totalOtherIncomeDetail1
type: uint256
- name: totalOtherExpensesDetail1
type: uint256
- name: totalOtherIncomeDetailN
type: uint256
- name: totalOtherExpensesDetailN
type: uint256
netIncome
Returns net income for the period (Operating Income + Other Income/Expenses - Taxes - Depreciation).
- name: netIncome
type: function
visibility: public
stateMutability: view
inputs:
- name: startTimestamp
type: uint256
- name: endTimestamp
type: uint256
outputs:
- name: NetIncomeStruct
type: struct
fields:
- name: totalNetIncome
type: uint256
- name: optionalAdditionalNetIncomeDetail1
type: uint256
- name: optionalAdditionalNetIncomeDetailN
type: uint256
earningsPerShare
Returns Earnings Per Share Token (EPS) for the period.
- name: earningsPerShare
type: function
visibility: public
stateMutability: view
inputs:
- name: startTimestamp
type: uint256
- name: endTimestamp
type: uint256
outputs:
- name: EPSstruct
type: struct
fields:
- name: basicEPS
type: uint256
- name: dilutedEPS
type: uint256
- name: EPSDetail1
type: uint256
- name: EPSDetailN
type: uint256
fullFinancialReport
Returns a comprehensive struct that includes all the prior financial details of the Protocol combined: Revenue, COGS, Operating Expenses, Operating Income, EBITDA, Other Incomes and Expenses, Net income, and EPS into a unified Struct.
- name: fullFinancialReport
type: function
stateMutability: view
visibility: public
inputs:
- name: startTimestamp
type: uint256
- name: endTimestamp
type: uint256
outputs:
- name: FullFinancialsStruct
type: struct
fields:
- name: RevenueStruct
type: struct
- name: COGSStruct
type: struct
- name: OperatingExpensesStruct
type: struct
- name: OperatingIncomeStruct
type: struct
- name: EBITDAstruct
type: struct
- name: OtherIncomeExpensesStruct
type: struct
- name: NetIncomeStruct
type: struct
- name: EPSstruct
type: struct
✅ All reviewers have approved.
The commit 4597eb99bfd1ed1c2dfb6406b43cf409fb286789 (as a parent of 2ffba9e0c073673bde856149ecd1b570ba7900d4) contains errors. Please inspect the Run Summary for details.
All Format checks passed :white_check_mark:. @Mc01 , @axic, @lightclient and @SamWilsn, you are invited to review :D
@abcoathup please also let me know if the formatting is correct here. In the .md file, I used as a file name erc-659.md because before I tried with eip-review_t_financial_statements_s.md, erc-review_t_financial_statements_s.md, eip-XXXX.md and erc-XXXX.md but in all cases the eth-bot reverted, and inside the file in the header I specified eip: 659, because if I left it blank the eth-bot will revert.
If I wrote something wrong regarding the E.I.P./E.R.C. number or .md file name, please tell me exactly for what to replace it instead.
All Conversations Resolved :white_check_mark:(except from one with @SamWilsn in which I'm awaiting for further feedback). @Mc01 , @axic, @lightclient and @SamWilsn, you are invited to re-review and offer further and deeper feedback! :D
After I have taken care of all of your further and deeper feedback, I will remove the 2 <!-- TODO --> present in the document.
All Conversations Resolved ✅(except from one with @SamWilsn in which I'm awaiting for further feedback). @Mc01 , @axic, @lightclient and @SamWilsn, you are invited to re-review and offer further and deeper feedback! :D
After I have taken care of all of your further and deeper feedback, I will remove the 2
<!-- TODO -->present in the document.
X2 I insist in having updates since it has been 2 weeks since the last comments were resolved.
All Conversations Resolved ✅(except from one with @SamWilsn in which I'm awaiting for further feedback). @Mc01 , @axic, @lightclient and @SamWilsn, you are invited to re-review and offer further and deeper feedback! :D
After I have taken care of all of your further and deeper feedback, I will remove the 2
<!-- TODO -->present in the document.
X3 I insist in having updates since it has been 2 weeks since the last comments were resolved.
All Conversations Resolved ✅(except from one with @SamWilsn in which I'm awaiting for further feedback). @Mc01 , @axic, @lightclient and @SamWilsn, you are invited to re-review and offer further and deeper feedback! :D
After I have taken care of all of your further and deeper feedback, I will remove the 2
<!-- TODO -->present in the document.
X4 I insist in having updates since it has been 2 weeks since the last comments were resolved.
@Nachoxt17 please note there is only a small number of ERC editors. (I am not an editor) You can try attending office hours: https://github.com/ethcatherders/EIPIP/issues/363
@Nachoxt17 please note there is only a small number of ERC editors. (I am not an editor) You can try attending office hours: https://github.com/ethcatherders/EIPIP/issues/363
Thanks! This is useful.
@Nachoxt17 please note there is only a small number of ERC editors. (I am not an editor) You can try attending office hours: ethcatherders/EIPIP#363
Hello @poojaranjan , Can this ERC be reviewed in the next office hours?
Take a look at fixing these while you're in draft.
Done @SamWilsn .