-
Notifications
You must be signed in to change notification settings - Fork 5.9k
Description
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) publicTransfer 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) publicVote 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) publicDistribute 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
[-]Equity Agreement Standard on Ethereum[/-][+]ERC1384(FAS) --- Equity Agreement Standard on Ethereum[/+][-]ERC1384(FAS) --- Equity Agreement Standard on Ethereum[/-][+]ERC-1384(FAS) --- Equity Agreement Standard on Ethereum[/+]calchulus commentedon Sep 12, 2018
Thoughts on adding a few features related to vesting (for team or early investors) or burning (in case of share buyback)?
ideabit commentedon Sep 16, 2018
Hi, @calchulus.
We will consider adding it. Would you mind joining us in the discussion?
calchulus commentedon Sep 18, 2018
would love to - where is the discussion?
ideabit commentedon Sep 21, 2018
@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 commentedon Sep 21, 2018
ideabit commentedon Sep 21, 2018
@calchulus ,
Awesome, thanks for the input.
calchulus commentedon Sep 23, 2018
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 commentedon Oct 21, 2019
Hey, are you still working on this?
anubnair commentedon Jan 7, 2020
Hi, Anyone working on this?
gai-jin-rus commentedon Jan 10, 2020
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 commentedon Dec 4, 2021
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 commentedon Dec 18, 2021
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.