Skip to content

ERC-1384(FAS) --- Equity Agreement Standard on Ethereum #1384

@ideabit

Description

@ideabit

Simple Summary

An equity agreement standard.

Abstract

The following is a standard that allows for the implementation of equity allocation and related functions within smart contracts. This standard allows for the functions of querying basic project and equity information, track the history of equity transfers, transfer equity, and distribute profits based on equity allocation.

Motivation

This standard interface allows any project to tokenize their equity, to be protected by the security of Ethereum, and to be used by applications, enabling the transfer of equity from wallet to wallet.

Specification

FAS

The Fair and Autonomous Stakeholder-equity protocol (FAS) is a standardized smart contract designed to tokenize how equity works. By implementing this with blockchain technology, precisely smart contracts, it enables tokenized equity to operate on a fair and autonomous basis, allowing the execution of any process to be transparent and pre-determined by the contract. This equity agreement standard allows for the querying of project and equity information, transfer of equity, distribution of profits and voting-related actions.

Methods

name

function name() external view returns (string _name)

Return the name of the project - e.g. "MyProject"

Return type string

FasNum

function FasNum() external view returns (uint256 _FasNum)

Return the number of total FAS created in the project - e.g. 100

Return type uint256

owner

function owner() external view returns (address _owner)

Return the address of the project owner - e.g. 0xca35b7d915458ef540ade6068dfe2f44e8fa733c

Return type address

createTime

function createTime() external view returns (uint256 _createTime)

Return the timestamp of the project creation time - e.g. 1534431600

Return type uint256

balanceOf

function balanceOf(address _owner) public view returns (uint256 _balance)

Return the FAS number owned by the address _owner - e.g. 15

Return type uint256

ownerOf

function ownerOf(uint256 _FasId) public view returns (address _owner)

Return the address of the FAS owner for _FasId - e.g. 0xca35b7d915458ef540ade6068dfe2f44e8fa733c

Return type address

exists

function exists(uint256 _FasId) public view returns (bool)

Confirm the validity for the Fas with the FAS ID _FasId

allOwnedFas

function allOwnedFas(address _owner) public view returns (uint256[] _allOwnedFasList)

Return the list of FAS ID for the FAS owned by the address _owner - e.g. [0,1,2,3,4]

Return type uint256[]

getTransferRecords

function getTransferRecords(uint256 _FasId) public view returns (address[] _preOwners)

Return the list of transferor addresses for the FAS with FAS ID _FasId and arrange the list as the order of transferring - e.g. [0xCA35b7d915458EF540aDe6068dFe2F44E8fa733c,0x14723A09ACff6D2A60DcdF7aA4AFf308FDDC160C]

Return type address[]

transfer

function transfer(address _to, uint256[] _FasId) public

Transfer the FAS with FAS ID _FasId (the number of FAS transferred here can be multiple by a list of FAS ID) to the address _to,and trigger the event Transfer

If the transferor attempts to send a FAS that does belong to him or a FAS that does not exist, the function will be broke.

createVote

function createVote() public payable returns (uint256 _voteId)

Creat a voting event,and return the Vote ID _voteId

Return type uint256

vote

function vote(uint256 _voteId, uint256 _vote_status_value) public

Vote for the event with the Vote ID _voteId. In the voting event,value 0 for _vote_status_value means affirmative vote,value 1 for _vote_status_value means dissenting vote,and value 2 means abstaining.

getVoteResult

function getVoteResult(uint256 _voteId) public payable returns (bool result)

Obtain the voting result of the event with Vote ID _voteId. return true if the voting event got successful, and return false if not.

Return type bool

dividend

function dividend(address _token_owner) public

Distribute bonus from the wallet address _token_owner to all the Fas owners.

Event

Transfer

event Transfer(address indexed _from, address indexed _to, uint256 indexed _FasId);

Will be triggered when transferring Fas, including transferring 0 FAS

Vote

event Vote(uint256 _voteId);

Will be triggered when creating a voting event

Backwards Compatibility

The equity agreement standard is compatible with ERC-20.

Test Cases

Test Cases are available at

Copyright

Copyright and related rights waived via CC0.

Activity

changed the title [-]Equity Agreement Standard on Ethereum[/-] [+]ERC1384(FAS) --- Equity Agreement Standard on Ethereum[/+] on Sep 5, 2018
changed the title [-]ERC1384(FAS) --- Equity Agreement Standard on Ethereum[/-] [+]ERC-1384(FAS) --- Equity Agreement Standard on Ethereum[/+] on Sep 5, 2018
calchulus

calchulus commented on Sep 12, 2018

@calchulus

Thoughts on adding a few features related to vesting (for team or early investors) or burning (in case of share buyback)?

ideabit

ideabit commented on Sep 16, 2018

@ideabit
Author

Hi, @calchulus.
We will consider adding it. Would you mind joining us in the discussion?

calchulus

calchulus commented on Sep 18, 2018

@calchulus

would love to - where is the discussion?

ideabit

ideabit commented on Sep 21, 2018

@ideabit
Author

@calchulus .
Sorry for the delayed reply, but thanks for your input! We have been thinking of adding vesting related function(s) to our contract (a schedule of some sort of a predetermined time for vesting equity to a founding team member / early investor, and a violation of meeting the specific timeline will result in a share buyback). When you say burning, are you refering to the equity not vested due to leaving early or the burn rate of a startup?

calchulus

calchulus commented on Sep 21, 2018

@calchulus
ideabit

ideabit commented on Sep 21, 2018

@ideabit
Author

@calchulus ,
Awesome, thanks for the input.

calchulus

calchulus commented on Sep 23, 2018

@calchulus

But yes, in theory, there should be a way to delegate where equity goes if leaving early, or if it just gets burned, etc.

jaebooker

jaebooker commented on Oct 21, 2019

@jaebooker

Hey, are you still working on this?

anubnair

anubnair commented on Jan 7, 2020

@anubnair

Hi, Anyone working on this?

gai-jin-rus

gai-jin-rus commented on Jan 10, 2020

@gai-jin-rus

Hi, Anyone working on this?

Yes, I do. I've reworked the program code a little bit. Testing on http://remix.ethereum.org/

github-actions

github-actions commented on Dec 4, 2021

@github-actions

There has been no activity on this issue for two months. It will be closed in a week if no further activity occurs. If you would like to move this EIP forward, please respond to any outstanding feedback or add a comment indicating that you have addressed all required feedback and are ready for a review.

github-actions

github-actions commented on Dec 18, 2021

@github-actions

This issue was closed due to inactivity. If you are still pursuing it, feel free to reopen it and respond to any feedback or request a review in a comment.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      No branches or pull requests

        Participants

        @anubnair@calchulus@jaebooker@ideabit@gai-jin-rus

        Issue actions

          ERC-1384(FAS) --- Equity Agreement Standard on Ethereum · Issue #1384 · ethereum/EIPs