This is the first of many Steem Improvement Proposals for community review.
Scope
The scope of this proposal is to add native support for escrowed payments. An escrow payment facilitates trade among two or more parties with the potential for dispute resolution. When a user makes a payment via escrow the escrow-agent receives a fee regardless of whether or not a dispute was raised.
Identifying potential escrow agents and their fees is outside the scope of this proposal.
Motivation
The motivation for this improvement proposal is to facilitate the creation of a trusted online market place and peer to peer trading. In this environment people may want to buy from untrusted vendors and would benefit by having a means to dispute the transaction in the event of a problem.
User Actions
An action equates to a signed operation that is interpreted by the blockchain.
There are three primary user actions: escrow transfer, escrow dispute, and escrow release.
Escrow Transfer
This transfer is initiated just like any other transfer and requires the signature of the sender. Unlike a normal transfer, an escrow transfer specifies some additional fields.
- expiration - the time at which the funds will go to the receiver if no other action is taken
- agent - the name of the agent which will have authority to resolve disputes
- fee - the fee that goes to the agent regardless of dispute
- json_meta - extra meta information that is not part of consensus
- escrow_id - a unique identifier assigned by sender to this transaction
Escrow Dispute
Either the sender or receiver of the payment may initiate a dispute anytime between the start of payment and the expiration. Once a dispute is raised, the escrow agent has authority to release funds to either the sender or receiver (but no one else).
Escrow Release
This operation can be used by sender, receiver, or agent to release funds. If the sender releases then the funds go to the receiver. If the receiver releases then they go to the sender. If the agent releases then the funds can go to either the sender or receiver. This operation is designed to allow partial releases.
After the expiration the receiver can use this operation to claim the funds. If the funds are not claimed by the receiver within 1 month of expiration then the sender can reclaim the funds.
Bandwidth Classification
Escrow transactions will fall under the same bandwidth class as transfers and market orders. This means it requires more Steem Power per byte to use these operations than posting actions.
You can track this on github: https://github.com/steemit/steem/issues/143