diff options
Diffstat (limited to 'developers.html.j2')
-rw-r--r-- | developers.html.j2 | 277 |
1 files changed, 145 insertions, 132 deletions
diff --git a/developers.html.j2 b/developers.html.j2 index 9d62052d..f6023274 100644 --- a/developers.html.j2 +++ b/developers.html.j2 | |||
@@ -20,32 +20,37 @@ | |||
20 | <h2>{{ _("Free") }}</h2> | 20 | <h2>{{ _("Free") }}</h2> |
21 | 21 | ||
22 | <p>{{ _("Taler is free software implementing an open | 22 | <p>{{ _("Taler is free software implementing an open |
23 | protocol. Anybody is welcome to inspect our code and | 23 | protocol. Anybody is welcome to inspect our code |
24 | integrate our reference implementation into their | 24 | and integrate our reference implementation into |
25 | applications. Different components of Taler are being | 25 | their applications. Different components of Taler |
26 | made available under different licenses. The Affero | 26 | are being made available under different |
27 | GPLv3+ is used for the exchange, the LGPLv3+ is used for | 27 | licenses. The Affero GPLv3+ is used for the |
28 | reference code demonstrating integration with merchant | 28 | exchange, the LGPLv3+ is used for reference code |
29 | platforms, and licenses like Apache/Mozilla/GPLv3+ are | 29 | demonstrating integration with merchant platforms, |
30 | used for wallets and related customer-facing software. | 30 | and licenses like Apache/Mozilla/GPLv3+ are used |
31 | We are open for constructive suggestions for maximizing | 31 | for wallets and related customer-facing software. |
32 | the adoption of this libre payment platform. | 32 | We are open for constructive suggestions for |
33 | ") }}</p> | 33 | maximizing the adoption of this libre payment |
34 | platform. ") }}</p> | ||
35 | |||
34 | </div> | 36 | </div> |
35 | <div class="col-lg-6"> | 37 | <div class="col-lg-6"> |
36 | <h2>{{ _("RESTful") }}</h2> | 38 | <h2>{{ _("RESTful") }}</h2> |
37 | 39 | ||
38 | <p>{{ _("Taler is designed to work on the Internet. To | 40 | <p>{{ _("Taler is designed to work on the Internet. To |
39 | ensure that Taler payments can work with restrictive | 41 | ensure that Taler payments can work with |
40 | network setups, Taler uses a RESTful protocol over HTTP or | 42 | restrictive network setups, Taler uses a RESTful |
41 | HTTPS. Taler's security does not depend upon the use of | 43 | protocol over HTTP or HTTPS. Taler's security does |
42 | HTTPS, but obviously merchants may choose to offer HTTPS | 44 | not depend upon the use of HTTPS, but obviously |
43 | for consistency and because it generally is better for | 45 | merchants may choose to offer HTTPS for consistency |
44 | privacy compared to HTTP. Taler uses JSON to encode | 46 | and because it generally is better for privacy |
45 | structure data, making it easy to integrate Taler with | 47 | compared to HTTP. Taler uses JSON to encode |
46 | existing Web applications. Taler's protocol is documented | 48 | structure data, making it easy to integrate Taler |
47 | in detail <a href='https://api.taler.net/'>here</a>. | 49 | with existing Web applications. Taler's protocol |
48 | ") }}</p> | 50 | is documented in |
51 | detail <a href='https://api.taler.net/'>here</a>. | ||
52 | ") }}</p> | ||
53 | |||
49 | </div> | 54 | </div> |
50 | </div> | 55 | </div> |
51 | <div class="row"> | 56 | <div class="row"> |
@@ -53,32 +58,33 @@ | |||
53 | <h2>{{ _("Code") }}</h2> | 58 | <h2>{{ _("Code") }}</h2> |
54 | 59 | ||
55 | <p>{{ _("Taler is currently primarily developed by a | 60 | <p>{{ _("Taler is currently primarily developed by a |
56 | research team at Inria and TU Munich. However, | 61 | research team at Inria and GNUnet e.V. However, |
57 | contributions from anyone are welcome. Our Git | 62 | contributions from anyone are welcome. Our Git |
58 | repositories can be cloned using the Git and HTTP access | 63 | repositories can be cloned using the Git and HTTP |
59 | methods against <tt>git.taler.net</tt> with the name of | 64 | access methods against <tt>git.taler.net</tt> with |
60 | the respective repository. A list of public repositories | 65 | the name of the respective repository. A list of |
61 | can be found in | 66 | public repositories can be found in |
62 | our <a href='https://git.taler.net/'>GitWeb</a>. | 67 | our <a href='https://git.taler.net/'>GitWeb</a>. |
63 | ") }}</p> | 68 | ") }}</p> |
69 | |||
64 | </div> | 70 | </div> |
65 | <div class="col-lg-4"> | 71 | <div class="col-lg-4"> |
66 | <h2>{{ _("Documentation") }}</h2> | 72 | <h2>{{ _("Documentation") }}</h2> |
67 | 73 | ||
68 | <p>{{ _("In addition to this website, | 74 | <p>{{ _("In addition to this website, |
69 | the <a href='https://git.taler.net/'>documented | 75 | the <a href='https://git.taler.net/'>documented |
70 | code</a> and the <a href='https://api.taler.net/'>API | 76 | code</a> and |
71 | documentation</a>, we are in the process of preparing a | 77 | the <a href='https://api.taler.net/'>API |
72 | comprehensive design document which will be published here | 78 | documentation</a>, we are in the process of |
73 | soon. | 79 | preparing a comprehensive design document which |
74 | ") }}</p> | 80 | will be published here soon. ") }}</p> |
75 | </div> | 81 | </div> |
76 | <div class="col-lg-4"> | 82 | <div class="col-lg-4"> |
77 | <h2>{{ _("Discussion") }}</h2> | 83 | <h2>{{ _("Discussion") }}</h2> |
78 | 84 | ||
79 | <p>{{ _("We have a mailinglist for developer discussions. | 85 | <p>{{ _("We have a mailinglist for developer discussions. |
80 | You can subscribe to it or read the list archive at | 86 | You can subscribe to it or read the list archive at |
81 | <a href='http://lists.gnu.org/mailman/listinfo/taler'>http://lists.gnu.org/mailman/listinfo/taler</a>.") }}</p> | 87 | <a href='http://lists.gnu.org/mailman/listinfo/taler'>http://lists.gnu.org/mailman/listinfo/taler</a>.") }}</p> |
82 | </div> | 88 | </div> |
83 | </div> | 89 | </div> |
84 | 90 | ||
@@ -86,130 +92,137 @@ | |||
86 | <div class="col-lg-4"> | 92 | <div class="col-lg-4"> |
87 | <h2>{{ _("Regression Testing") }}</h2> | 93 | <h2>{{ _("Regression Testing") }}</h2> |
88 | 94 | ||
89 | <p>{{ _("We | 95 | <p>{{ _("We have |
90 | have <a href='https://buildbot.net/'>Buildbot</a> | 96 | <a href='https://buildbot.net/'>Buildbot</a> |
91 | automation tests to detect regressions and check for | 97 | automation tests to detect regressions and check |
92 | portability at | 98 | for portability at |
93 | <a href='https://buildbot.taler.net/'>buildbot.taler.net</a>. | 99 | <a href='https://buildbot.taler.net/'>buildbot.taler.net</a>. |
94 | ") }}</p> | 100 | ") }}</p> |
95 | </div> | 101 | </div> |
96 | <div class="col-lg-4" note="not yet operational"> | 102 | <div class="col-lg-4" note="not yet operational"> |
97 | <h2>{{ _("Code Coverage Analysis") }}</h2> | 103 | <h2>{{ _("Code Coverage Analysis") }}</h2> |
98 | 104 | ||
99 | <p>{{ _("We | 105 | <p>{{ _("We use |
100 | use <a href='http://ltp.sourceforge.net/coverage/lcov.php'>LCOV</a> | 106 | <a href='http://ltp.sourceforge.net/coverage/lcov.php'>LCOV</a> |
101 | to analyze the code coverage of our tests, the results are | 107 | to analyze the code coverage of our tests, the |
102 | available | 108 | results are available |
103 | at <a href='https://lcov.taler.net/'>lcov.taler.net</a>. | 109 | at <a href='https://lcov.taler.net/'>lcov.taler.net</a>. |
104 | ") }}</p> | 110 | ") }}</p> |
105 | </div> | 111 | </div> |
106 | <div class="col-lg-4"> | 112 | <div class="col-lg-4"> |
107 | <h2>{{ _("Performance Analysis") }}</h2> | 113 | <h2>{{ _("Performance Analysis") }}</h2> |
108 | 114 | ||
109 | <p>{{ _("We | 115 | <p>{{ _("We |
110 | use <a href='https://gnunet.org/gauger'>Gauger</a> for | 116 | use <a href='https://gnunet.org/gauger'>Gauger</a> |
111 | performance regression analysis of the exchange backend | 117 | for performance regression analysis of the exchange |
112 | at <a href='https://gauger.taler.net/'>gauger.taler.net</a>. | 118 | backend |
113 | ") }}</p> | 119 | at <a href='https://gauger.taler.net/'>gauger.taler.net</a>. |
120 | ") }}</p> | ||
114 | </div> | 121 | </div> |
115 | </div> | 122 | </div> |
116 | 123 | ||
117 | <div class="col-lg-12"> | 124 | <div class="col-lg-12"> |
118 | <h2 id="overview">{{ _("Taler system overview") }}</h2> | 125 | <h2 id="overview">{{ _("Taler system overview") }}</h2> |
119 | 126 | ||
120 | <p>{{ _("The Taler system consists of protocols executed | 127 | <p>{{ _("The Taler system consists of protocols executed among |
121 | among a number of actors with the help | 128 | a number of actors with the help |
122 | of <a href='https://www.fsf.org/'>Free Software</a> as | 129 | of <a href='https://www.fsf.org/'>Free Software</a> |
123 | illustrated in the illustration on the right. Typical | 130 | as illustrated in the illustration on the right. |
124 | transactions involve the following steps: | 131 | Typical transactions involve the following steps: ") |
125 | ") }}</p> | 132 | }}</p> |
126 | 133 | ||
127 | <img src="{{ url('images/system.svg') }}" alt="system overview" style="float: right; margin: 50px 5px 5px 5px;" width="50%"> | 134 | <img src="{{ url('images/system.svg') }}" alt="system overview" style="float: right; margin: 50px 5px 5px 5px;" width="50%"> |
128 | <ol> | 135 | <ol> |
129 | <li>{{ _("A customer instructs his <b>bank</b> to | 136 | <li>{{ _("A customer instructs his <b>bank</b> to |
130 | transfer funds from his account to the Taler exchange | 137 | transfer funds from his account to the Taler |
131 | (top left). In the subject of the transaction, he | 138 | exchange (top left). In the subject of the |
132 | includes an authentication token from his | 139 | transaction, he includes an authentication |
133 | electronic <b>wallet</b>. In Taler terminology, the | 140 | token from his electronic <b>wallet</b>. In |
134 | customer creates a reserve at the exchange. | 141 | Taler terminology, the customer creates a |
135 | ") }}</li> | 142 | reserve at the exchange. ") }}</li> |
136 | 143 | ||
137 | <li>{{ _("Once the exchange has received the | 144 | <li>{{ _("Once the exchange has received the wire |
138 | transfer, it allows the customer's electronic wallet | 145 | transfer, it allows the customer's electronic |
139 | to <b>withdraw</b> electronic coins. The electronic | 146 | wallet to <b>withdraw</b> electronic coins. |
140 | coins are digital representations of the original | 147 | The electronic coins are digital |
141 | currency from the transfer. It is important to note | 148 | representations of the original currency from |
142 | that the exchange does not learn the "serial numbers" | 149 | the transfer. It is important to note that the |
143 | of the coins created in this process, so it cannot tell | 150 | exchange does not learn the "serial |
144 | later which customer purchased what at which merchant. | 151 | numbers" of the coins created in this |
145 | The use of Taler does not change the currency or the | 152 | process, so it cannot tell later which customer |
146 | total value of the funds (except for fees which the | 153 | purchased what at which merchant. The use of |
147 | exchange may charge for the service). | 154 | Taler does not change the currency or the total |
148 | ") }}</li> | 155 | value of the funds (except for fees which the |
149 | 156 | exchange may charge for the service). ") | |
150 | <li>{{ _("Once the customer has the digital coins in | 157 | }}</li> |
151 | his wallet, the wallet can be used to <b>spend</b> the | 158 | |
152 | coins with merchant portals that support the Taler | 159 | <li>{{ _("Once the customer has the digital coins in his |
153 | payment system and accept the respective exchange as a | 160 | wallet, the wallet can be used to <b>spend</b> |
154 | business partner (bottom arrow). This creates a digital | 161 | the coins with merchant portals that support |
155 | contract signed by the customer's coins and the | 162 | the Taler payment system and accept the |
156 | merchant. If necessary, the customer can later use | 163 | respective exchange as a business partner |
157 | this digitally signed contract in a court of law to | 164 | (bottom arrow). This creates a digital contract |
158 | prove the exact terms of the contract and that he paid | 165 | signed by the customer's coins and the |
159 | the respective amount. The customer does not learn the | 166 | merchant. If necessary, the customer can later |
160 | banking details of the merchant, and Taler does not | 167 | use this digitally signed contract in a court |
161 | require the merchant to learn the identity of the | 168 | of law to prove the exact terms of the contract |
162 | customer. Naturally, the customer can spend any | 169 | and that he paid the respective amount. The |
163 | fraction of his digital coins (the system takes care of | 170 | customer does not learn the banking details of |
164 | customers getting change). | 171 | the merchant, and Taler does not require the |
165 | ") }}</li> | 172 | merchant to learn the identity of the |
173 | customer. Naturally, the customer can spend any | ||
174 | fraction of his digital coins (the system takes | ||
175 | care of customers getting change). ") }}</li> | ||
166 | 176 | ||
167 | <li>{{ _("Merchants receiving digital | 177 | <li>{{ _("Merchants receiving digital |
168 | coins <b>deposit</b> the respective receipts that | 178 | coins <b>deposit</b> the respective receipts |
169 | resulted from the contract signing with the customer at | 179 | that resulted from the contract signing with |
170 | the exchange to redeem the coins. The deposit step | 180 | the customer at the exchange to redeem the |
171 | does not reveal the details of the contract between the | 181 | coins. The deposit step does not reveal the |
172 | customer and the merchant or the identity of the | 182 | details of the contract between the customer |
173 | customer to the exchange in any way. However, the | 183 | and the merchant or the identity of the |
174 | exchange does learn the identity of the merchant via | 184 | customer to the exchange in any way. However, |
175 | the provided bank routing information. The merchant | 185 | the exchange does learn the identity of the |
176 | can, for example when compelled by the state for | 186 | merchant via the provided bank routing |
177 | taxation, provide information linking the individual | 187 | information. The merchant can, for example |
178 | deposit to the respective contract signed by the | 188 | when compelled by the state for taxation, |
179 | customer. Thus, the exchange's database allows the | 189 | provide information linking the individual |
180 | state to enforce that merchants pay applicable taxes | 190 | deposit to the respective contract signed by |
181 | (and do not engage in illegal contracts). | 191 | the customer. Thus, the exchange's database |
182 | ") }}</li> | 192 | allows the state to enforce that merchants pay |
193 | applicable taxes (and do not engage in illegal | ||
194 | contracts). ") }}</li> | ||
183 | 195 | ||
184 | <li>{{ _("Finally, the exchange transfers funds | 196 | <li>{{ _("Finally, the exchange transfers funds |
185 | corresponding to the digital coins redeemed by the | 197 | corresponding to the digital coins redeemed by |
186 | merchants to the merchant's <b>bank</b> account. The | 198 | the merchants to the merchant's <b>bank</b> |
187 | exchange may combine multiple small transactions into | 199 | account. The exchange may combine multiple |
188 | one larger bank transfer. The merchant can query the | 200 | small transactions into one larger bank |
189 | exchange about the relationship between the bank | 201 | transfer. The merchant can query the exchange |
190 | transfers and the individual claims that were | 202 | about the relationship between the bank |
191 | deposited. | 203 | transfers and the individual claims that were |
192 | ") }}</li> | 204 | deposited. ") }}</li> |
193 | 205 | ||
194 | <li>{{ _("Most importantly, the exchange keeps | 206 | <li>{{ _("Most importantly, the exchange keeps |
195 | cryptographic proofs that allow it to demonstrate that | 207 | cryptographic proofs that allow it to |
196 | it is operating correctly to third parties. The system | 208 | demonstrate that it is operating correctly to |
197 | requires an external <b>auditor</b>, such as a | 209 | third parties. The system requires an |
198 | government-appointed financial regulatory body, to | 210 | external <b>auditor</b>, such as a |
199 | frequently verify the exchange's databases and check that | 211 | government-appointed financial regulatory body, |
200 | its bank balance matches the total value of the | 212 | to frequently verify the exchange's databases |
201 | remaining coins in circulation. | 213 | and check that its bank balance matches the |
202 | ") }}</li> | 214 | total value of the remaining coins in |
215 | circulation. ") }}</li> | ||
203 | 216 | ||
204 | <li>{{ _("Without the auditor, the exchange operators | 217 | <li>{{ _("Without the auditor, the exchange operators |
205 | could embezzle funds they are holding in | 218 | could embezzle funds they are holding in |
206 | reserve. Customers and merchants cannot cheat each | 219 | reserve. Customers and merchants cannot cheat |
207 | other or the exchange. If any party's computers are | 220 | each other or the exchange. If any party's |
208 | compromised, the financial damage is limited to the | 221 | computers are compromised, the financial damage |
209 | respective party and proportional to the funds they | 222 | is limited to the respective party and |
210 | have in circulation during the period of the | 223 | proportional to the funds they have in |
211 | compromise. | 224 | circulation during the period of the |
212 | ") }}</li> | 225 | compromise. ") }}</li> |
213 | </ol> | 226 | </ol> |
214 | <p></p> | 227 | <p></p> |
215 | </div> | 228 | </div> |