Initial micropayment doc (#169)

* Start with micropayment

* More µRaiden details

* More SWAP details

* More SWAP details and start of Orchid

* Add information about Raiden

* Initial ideas about pluggable API
This commit is contained in:
Frank Mueller 2018-04-13 13:03:39 +02:00 committed by GitHub
parent c005b2be9c
commit 252dc99fa8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 113 additions and 0 deletions

View File

@ -68,6 +68,7 @@ Description:
## Artifacts
- [Information about Micropayment](micropayment.md)
- [Logfile](log.md)
- [Links](links.md)

View File

@ -0,0 +1,112 @@
## Micropayment
### Existing Solutions
#### Raiden
##### Concept
- Off-chain solution for ERC20-compliant token transfers on Ethereum
- Designed for many-to-many solutions
- Transfer of tokens without global consensus
- Previously setup on-chain deposits and *balance proofs*
- Payment channels for bidirectional transfers between two participants as long as deposit isn't exceeded
- Transfers require no fees
- Funds can be added to existing channels
- Blockchain isn't involved during transfers, only for channel creation and potential closing
- As binding as on-chain due to smart contract containing tokens only accessable to both participants
- Closing leads to payments to both participants based on balance
- *Network* of channels with routing allow transfers between all peers, secured by *hash-locks*
- Scaling with the number of peers
- RESTful API
##### Links
- https://raiden.network/
- http://raiden-network.readthedocs.io/en/stable/
- https://medium.com/@raiden_network/
#### µRaiden
##### Concept
- Like Raiden but only between two parties: *sender* (client) and *receiver* (service provider)
- Designed for many-to-one solutions
- Creation of channel and settling leads to µRaiden Smart Contract and a *deposit*
- Smart Contract enforces payment of deposit
- Signing payments with balance-proofs between sender and receiver allows off-chain transactions
- Once channel gets closed deposit is payed to receiver based on *balance proofs* and rest to sender
- Typically only two on-chain transactions for opening and closing
- If deposit of sender gets low it can increase it with an on-chain transaction
- Own ERC20 and ERC223 compliant token
- RESTful API
##### Links
- https://raiden.network/micro.html
- https://github.com/raiden-network/microraiden
- https://microraiden.readthedocs.io/en/docs-develop/
#### SWAP
##### Concept
- Swarm Accounting Protocol
- Generic *peerwise* accounting
- Long-term exchange of data chunks balanced by data chunks preferred
- Relies on reputation system
- Open for payment systems with issue and receive function
- Issue results in a 3rd party proveable promise of payment
- Issued *cheques* will be accumulated in *cheque book*
- Only last one will be cashed in
- Peer decides how often to cash in
- Transactions costs motivate to minimize their number
- Trust to peers grows with good behavior
- SWAP^2 provides API to set triggers for automatic payments
- SWAP^3 reduces transaction cost by debt swap
##### Links
- https://github.com/ethersphere/swarm/wiki/Swap
- https://github.com/ethersphere/swarm/wiki/Swap-demo-instructions
### API
#### Client
##### Query Conditions
Ask service provider about pricing and model (bandwidth, CPU, etc.).
##### Establish Business Contract
Establish a payed connection with an initial deposit.
##### Check Balance
Check balance of the deposit to increase fund early enough before
connection potentially is dropped.
##### Increase Fund
Increase fund to keep connection with higher quality level. If
fund is spent connection may not be dropped but changed into
free connection. That may be dropped later.
##### Close Contract
Close contract so that used deposit is spent service provide and
rest is refunded.
#### Service Provider
##### Book Token
Book a token based on provided service. If all tokens of deposit
are used with a booking then close contract.
##### Close Contract
Close contract to retrieve used deposit and transform connection
into a free connection.