Commit ef414f52 authored by Cédric Moreau's avatar Cédric Moreau
Browse files

Cleaning all documentation

parent 16faf0c8
# NCTP - NodeCoin Transport Protocol
NCTP is a transport protocol which aims at exchanging HDC data over HTTP.
## HTTP API
# NodeCoin HTTP API
* [Overview](#overview)
* [Merkle URLs](#merkle-urls)
* [API](#api)
* [pks/](#pks)
* [add](#pksadd)
* [lookup](#pkslookup)
* [hdc/](#hdc)
* [amendments/init](#amendmentsinit)
* [amendments/submit](#amendmentssubmit)
* [amendments/view/[AMENDMENT_ID]/members](#amendmentsviewamendment_idmembers)
* [amendments/view/[AMENDMENT_ID]/self](#amendmentsviewamendment_idself)
* [amendments/view/[AMENDMENT_ID]/voters](#amendmentsviewamendment_idvoters)
* [amendments/vote](#amendmentsvote)
* [coins/[PGP_FINGERPRINT]/list](#coinspgp_fingerprintlist)
* [coins/[PGP_FINGERPRINT]/view/[COIN_ID]](#coinspgp_fingerprintviewcoin_id)
* [community/join](#communityjoin)
* [community/declare](#communitydeclare)
* [transactions/process/issuance](#transactionsprocessissuance)
* [transactions/process/transfert](#transactionsprocesstransfert)
* [transactions/process/fusion](#transactionsprocessfusion)
* [transactions/view/[TRANSACTION_ID]](#transactionsviewtransaction_id)
## Overview
Data is made accessible through an HTTP API mainly inspired from [OpenUDC_exchange_formats draft](https://github.com/Open-UDC/open-udc/blob/master/docs/OpenUDC_exchange_formats.draft.txt), and has been adapted to fit NodeCoin specificities.
......@@ -39,13 +59,10 @@ Data is made accessible through an HTTP API mainly inspired from [OpenUDC_exchan
Merkle URL is a special kind of URL applicable for resources:
* `udc/view/[AMENDMENT_ID]/members`
* `udc/view/[AMENDMENT_ID]/voters`
* `udc/transactions/recipient/[OPENPGP_FINGERPRINT]`
* `udc/transactions/sender/[OPENPGP_FINGERPRINT]`
* `udc/transactions/coin/[COIN_ID]`.
* `hdc/amendments/view/[AMENDMENT_ID]/members`
* `hdc/amendments/view/[AMENDMENT_ID]/voters`
Such kind of URL returns Merkle tree hashes informations. In NodeCoin, Merkle trees are an easy way to detect unsynced data and where the differences come from. For example, `udc/view/[AMENDMENT_ID]/members` is a Merkle tree whose leaves are hashes of members key fingerprint sorted ascending way. Thus, if any new key is added, a branch of the tree will see its hash modified and propagated to the root hash. Change is then easy to detect.
Such kind of URL returns Merkle tree hashes informations. In NodeCoin, Merkle trees are an easy way to detect unsynced data and where the differences come from. For example, `hdc/amendments/view/[AMENDMENT_ID]/members` is a Merkle tree whose leaves are hashes of members key fingerprint sorted ascending way. Thus, if any new key is added, a branch of the tree will see its hash modified and propagated to the root hash. Change is then easy to detect.
For commodity issues, this URL uses query parameters to retrieve partial data of the tree, as most of the time all the data is not required. NodeCoin Merkle tree has a determined number of parent nodes (given a number of leaves), which allows to ask only for interval of them.
......@@ -94,7 +111,7 @@ Parameter | Description
`start` | defines the start range (inclusive) of desired hashes. If `level` is used, `start` references to the given level. Otherwise references to the root.
`end` | defines the end range (inclusive) of desired hashes. If `level` is used, `end` references to the given level. Otherwise references to the root.
## Other URLs
## API
### pks/*
......
# NCCP - NodeCoin Currency Protocol
# NCM - NodeCoin Messages format
> NCCP is an extension of HDC Messages Format: it adds rules on top of HDC messages in order to implement a system compliant with NodeCoin monetary rules.
NCM HDC Messages Format: it adds rules on top of HDC messages in order to implement a system compliant with NodeCoin monetary rules.
## Certificates
......
# NCP - NodeCoin Protocol
NodeCoin defines its own protocol called NCP which defines messages, interpretation of them and structuration rules in order to build new currencies based on individuals and Universal Dividend.
**YET TO DEFINE**
\ No newline at end of file
# NodeCoin architecture
------------
| NodeCoin | The software
------------
|
------------
| NCP | Implements NodeCoin Protocol
------------
|
,--------+---------,
▼ ▼
------------ ------------
| HDC |◀-------| NCM | Based on HDC and NCM messages formats
------------ ------------
| |
'--------+---------'
|
------------
| HTTP API | Trought HTTP Protocol
------------
More details on each layer:
Layer | Role
----- | ----
NodeCoin | The software that implements NCP. One instance of NodeCoin handles only one currency.
[NCP](https://github.com/c-geek/nodecoind/blob/master/doc/NCP.md) | A protocol defining how to handle messages in order to build an HDC system.
[HDC](https://github.com/c-geek/nodecoind/blob/master/doc/HDC.md) | A format defining messages to describe an HDC system.
[NCM](https://github.com/c-geek/nodecoind/blob/master/doc/NCM.md) | A format defining messages used by NCP.
[HTTP API](https://github.com/c-geek/nodecoind/blob/master/doc/HTTP_API.md) | The communication protocol to exchange HDC and NCM messages over HTTP.
\ No newline at end of file
......@@ -2,7 +2,7 @@
Well, NodeCoin uses the crypto-currency concept introduced by Bitcoin. In those terms, NodeCoin is like Bitcoin. But NodeCoin has completely different fundation principles, such as individuals, web of trust and Universal Dividend (i.e.: money issued directly by every individual) to do *really* better than Bitcoin.
Actually, NodeCoin has a theoretical reference called [Relativity Theory of Money (french)](http://wiki.creationmonetaire.info/). This theory demonstrates that a currency which aims at respecting individuals economic liberties MUST implement the Universal Dividend, which is the only way to avoid both spatial and temporal asymmetry in money issuance.
Actually, NodeCoin has a theoretical reference called [Relativity Theory of Money (french)](http://wiki.creationmonetaire.info/). This theory demonstrates that a currency which aims at respecting individual's economic liberties MUST implement the Universal Dividend, which is the only way to avoid both spatial and temporal asymmetry in money issuance.
## Spatial and temporal what ?
......@@ -10,13 +10,13 @@ Those concepts refers to the relative access of individuals to newly created mon
### Spatially
When new Bitcoins are created, only **some** Bitcoin users are credited of brand new Bitcoins. **We believe this is the first injustice.** Some might say *«but miners used electricity and time to get it»* ... we would answer this work shouldn't be rewarded by newly created Bitcoins. New Bitcoins should spray every Bitcoin user. Miners should be rewared another way, not by money issuance.
When new Bitcoins are created, only **some** Bitcoin users are credited of brand new Bitcoins. **We believe this is the first injustice.** Some might say *«but miners used electricity and time to get it»* ... we would answer this work shouldn't be rewarded by newly created Bitcoins. New Bitcoins should spray the whole Bitcoin community. Miners should be rewared another way, not by money issuance.
Of course, Bitcoin can't do this as Bitcoin users are not strongly identified, and one might benefit multiple time of money creation if he owns several wallets. But NodeCoin can fix this.
### Temporally
And what about futur users ? Bitcoin has a planned limit of 21 million BTC. And then ? First adopters are the ones who createted Bitcoins, what about the others ? Just like Euros or Dollars, to get money you have to work for the ones who already own it. **We believe this is the second injustice.**
Bitcoin has a planned limit of 21 million BTC, which means less and less bitcoins will be created over the time until 0 remains. Hence, once the first adopters mined every bitcoin, how will future joiners do to get bitcoins ? Just like Euros or Dollars, actually: to get money you have to work for the ones who already own it. **We believe this is the second injustice.**
Every member of a monetary community should be equal towards issuing new coins, and get the same relative amount of it over the time, even if he is a later adopter.
......@@ -35,17 +35,17 @@ Once a WoT is constituted, new members may only join by cooptation of existing m
1. signatures from the current WoT members (a minimal amount of signatures recognizing the new member is required)
2. explicit request of the new member to integrate the WoT
The acceptation of members is formalized in a special document called *Monetary Contract*.
The acceptation of members is formalized in the *Monetary Contract*.
### The Monetary Contract
As said earlier, this document details the WoT composition, but it also allows to define money that may be created by individuals. More precisely, this is the commonly agreed reference all the monetary data is based upon.
Such a contract is actually a chained list of amendments, each amendement defining its own data which may concern individuals, money, or both. Each amendment requires to be signed by at least 2/3 of the WoT voters to be considered as valid. Furthermore, each amendment also specifies a voters list reflecting people who desire to participate in the democratic process.
Such a contract is actually a chained list of amendments, each amendement defining its own data concerning individuals, money, or both. Each amendment requires to gather enough signatures from the WoT voters to be considered as valid. WoT voters is a list defined in each amendment reflecting people who authentically notified their will to participate in the democratic process.
### Coins
Coins are issued by WoT members, in accordance with the Monetary Contract specifications. NodeCoin uses a divisionary money system divided in 9 decimal unities (1..9) completed with a POW 10 parameter. When issuing money, each individual may create the unities he desires, in the limits established by the Monetary Contract.
Coins are issued directly by WoT members, in accordance with the Monetary Contract specifications. NodeCoin uses a divisionary money system divided in 9 decimal unities (1..9) completed with a power 10 parameter. When issuing money, each individual may create the unities he desires, in the limits established by the Monetary Contract.
### Transactions
......
# NodeCoin protocol
NodeCoin defines its own protocol called NCP. NCP is actually a stack of two protocols using HDC messages format:
------------
| NodeCoin | The software
------------
------------
| HDC | Human Dividend Currency Format
------------
------------
,-- | NCCP | NodeCoin Currency Protocol
| ------------
NCP --- + ▼
| ------------
`-- | NCTP | NodeCoin Transport Protocol
------------
More details on each layer:
Layer | Role
----- | ----
NodeCoin | The software that implements NCP. One instance of NodeCoin handles only one currency.
[HDC](https://github.com/c-geek/nodecoind/blob/master/doc/HDC.md) | A format defining messages to describe an HDC system.
[NCCP](https://github.com/c-geek/nodecoind/blob/master/doc/NCCP.md) | The protocol defining rules on HDC messages (the currency rules).
[NCTP](https://github.com/c-geek/nodecoind/blob/master/doc/NCTP.md) | The protocol allowing to exchange HDC messages over HTTP.
\ No newline at end of file
......@@ -2,7 +2,11 @@
NodeCoin is a free server-side software which allows to create new P2P crypto-currencies based on individuals and implementing Universal Dividend.
It is mainly inspired from [OpenUDC project](https://github.com/Open-UDC/open-udc) for that purpose, but differs defining its own open currency protocol called NCP (Nodecoin Currency Protocol). You can learn more on it going to the [concepts page](https://github.com/c-geek/nodecoin/blob/master/concepts.md).
It is mainly inspired from [OpenUDC project](https://github.com/Open-UDC/open-udc) for that purpose, but differs defining its own open currency protocol called NCP (NodeCoin Protocol).
You can get more in NodeCoin project reading the following documents:
* [Concepts](https://github.com/c-geek/nodecoin/blob/master/concepts.md)
* [Architecture](https://github.com/c-geek/nodecoin/blob/master/architecture.md)
## Installation
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment