minor README fix
[epoint] / README
1 This is the source code repository of the epoint transaction service.
2
3 Source
4 ------
5
6 web:
7         http://repo.or.cz/w/epoint-server.git
8 git:
9         git clone git://repo.or.cz/epoint-server.git
10
11
12 Build
13 -----
14
15 epoint-server depends on a patched version of the latest go source
16 to get it (see http://golang.org/doc/install.html for details) run
17         hg clone https://go.googlecode.com/hg/ go
18         cd go/src
19         hg patch path/to/epoint-server/patches/*.diff
20         ./all.bash
21
22 to build and install (into $GOROOT/bin) run
23         make
24
25
26 Contact
27 -------
28
29 discuss@epointsystem.org
30 TODO: mailing list
31
32
33 About
34 -----
35
36 The goal of the epoint service is to provide secure and efficient
37 bookkeeping of transferrable debt denominated in currencies that
38 are issued by the anonymous clients of the system themselvs.
39
40 The central bookkeeping is designed to be auditable by any client
41 and proofs can be constructed in case of errors.
42
43 To convert between the various currencies a currency market can
44 be used that is outside of the scope of the epoint service.
45
46 The agreements and authentication methods between the issuers and
47 holders of debt is outside the epoint system as well.
48
49 This project originates from the ePoint Transfer Protocol.
50 Description about that design is at the epointsystem.org website:
51         https://www.epointsystem.org/trac/epoint_issuer
52         https://www.epointsystem.org/trac/website
53
54
55 Overview
56 --------
57
58 An epoint server is a large billboard, where clients can publish
59 draft documents (acknowledging debt, "i owe you")
60
61 Draft documents are digitally signed by the clients and the
62 clients are identified by their public key.
63
64 Any client can issue debt (issuer), and a client holding the
65 debt (holder) can transfer parts of it to any other client using
66 draft documents. A draft specifies the drawer (the client who
67 transfers the debt), the beneficiary (the new holder of the
68 debt), the issuer (the client who owes) and an integer amount
69 that is transferred. The draft is signed by the drawer.
70
71 Drafts with different issuers are independent, the debt of
72 different issuers are denominated in different currencies and
73 cannot be mixed.
74
75 The balance of a client with respect to an issuer is the
76 agregate value of all the drafts that transfer debt of the given
77 issuer to or from the given client.
78
79 An important constraint of the system is that a holder cannot
80 transfer more debt than its balance. Such drafts are invalid and
81 must be rejected. If the issuer is the drawer of a draft then
82 there is no such constraint. The balance of the issuer is <=0
83 and the balance of a holder of the issuer's debt is >=0 at any
84 given time. All the balances together give 0.
85
86 The main purpose of the server is to make it easy to check the
87 current balance of a client.
88
89 To achieve this the server needs to store all the drafts and the
90 public keys of the clients so the drafts are verifiable. The
91 ordering of the drafts matters when the constraints are checked
92 so the server must keep track of the balances in such a way that
93 there is no ambiguity. It must be easy to audit the server and
94 prove if it does not calculate the balances properly. This is
95 done using server signed certificates declaring the balance of
96 a client after each change and referencing related documents
97 (draft, previous certificates) with cryptographic hash.