Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add ERC: Transparent Financial Statements #697

Open
wants to merge 28 commits into
base: master
Choose a base branch
from

Conversation

Nachoxt17
Copy link
Contributor

ERC-7776: Transparent Financial Statements. Fixed 2 minor formatting issues mentioned by @SamWilsn and changed to "Review". You can find the ERC Document HERE.

Abstract

This proposal defines a standard API that enables EVM 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 SEC 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 (EBITDA) and
Earnings Per Share-Token (EPS), allowing investors to assess the financial health of blockchain-based companies in a standardized, transparent, clear and reliable format.

Motivation

The motivation of this ERC is to bring seriousness to the cryptocurrencies investments market. Currently, the situation is as follows:

The current state of token investment analysis is opaque, with most information presented in an abstract and non-quantitative form. This standard API ensures a consistent and reliable way for investors to
evaluate blockchain projects based on real financial data published directly on-chain, not just speculative promises. This will establish a greater
trust in the cryptocurrency markets and align token analysis with the standards of traditional equity markets.

Most ERC-20 Tokens representing EVM 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 EVM 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 ERC 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
EVM Blockchain-based company that implements this ERC 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 such as Revenue, Costs of Goods Sold, Operating Expenses, Operating
Income, EBITDA, Other Income and Expenses, Net Income and Earnings Per Share MUST be displayed in the value of the protocol's stablecoin of choice.

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 external.

All methods MUST return their financial numbers valued in the provided stablecoin.

If the contract owner uses data or methods from other owned smart contracts external to their smart contract implementation of this standard, those smart contracts MUST be verified in the correspondent
blockchain explorer and of open and visible source code.

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 (COGS): 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.
  • EBITDA: 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.
  • EPS: Earnings per Share Token (ERC-20), showing profit allocated per share.

Methods

stablecoinAddress

Returns the address of the individual stablecoin used to value the publicly displayed financial numbers.

- name: stablecoinAddress
  type: function
  visibility: external
  stateMutability: view
  outputs:
    - name: currencyAddress
      type: address

revenue

Returns total revenue generated by the protocol within a time period.

- name: revenue
  type: function
  visibility: external
  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: external
  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: external
  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: external
  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: external
  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: external
  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: external
  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: external
  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
  visibility: external
  stateMutability: view
  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

Nachoxt17 and others added 28 commits September 29, 2024 23:52
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/e-i-p-8900-transparent-financial-statements/21191
status: Review
type: Standards Track
category: Interface
created: 2024-09-20
requires: 20
Improved Specification for more Transparency.
Co-authored-by: Sam Wilson <[email protected]>
Co-authored-by: Sam Wilson <[email protected]>
Co-authored-by: Sam Wilson <[email protected]>
"All Transparent Financial Statements Standard implementations MUST implement ERC-20 to represent shares, and the financial numbers such as Revenue, Costs of Goods Sold, Operating Expenses, Operating 
Income, EBITDA, Other Income and Expenses, Net Income and Earnings Per Share MUST be displayed in the value of the protocol's stablecoin of choice."
Co-authored-by: Sam Wilson <[email protected]>
Co-authored-by: Sam Wilson <[email protected]>
Co-authored-by: Sam Wilson <[email protected]>
Corrected 2 mintor formattings and changed to "Review".
@eip-review-bot
Copy link
Collaborator

eip-review-bot commented Nov 3, 2024

File ERCS/erc-7776.md

Requires 1 more reviewers from @axic, @g11tech, @SamWilsn, @xinbenlv

@eip-review-bot eip-review-bot changed the title ERC-7776: Transparent Financial Statements. Fixed 2 minor formatting issues mentioned by @SamWilsn and changed to "Review". Add ERC: Transparent Financial Statements Nov 3, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants