aboutsummaryrefslogtreecommitdiff
path: root/developers.html.j2
diff options
context:
space:
mode:
Diffstat (limited to 'developers.html.j2')
-rw-r--r--developers.html.j2277
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 &quot;serial numbers&quot; 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 &quot;serial
144 later which customer purchased what at which merchant. 151 numbers&quot; 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>