aboutsummaryrefslogtreecommitdiffstats
path: root/site/public/index.html
diff options
context:
space:
mode:
authorYigit Sever2021-04-19 18:21:06 +0300
committerYigit Sever2021-04-19 18:21:06 +0300
commit81ebd267c89011ca65cd5cfe382e10fabd9017ac (patch)
tree4e1f17b897bc9e3850e9c50861fd4893371f05e4 /site/public/index.html
parent202625e0e1a4a6a85c895d9cd71a9f419a3b2173 (diff)
downloadgradecoin-81ebd267c89011ca65cd5cfe382e10fabd9017ac.tar.gz
gradecoin-81ebd267c89011ca65cd5cfe382e10fabd9017ac.tar.bz2
gradecoin-81ebd267c89011ca65cd5cfe382e10fabd9017ac.zip
Moving site to separate repo
Diffstat (limited to 'site/public/index.html')
-rw-r--r--site/public/index.html362
1 files changed, 0 insertions, 362 deletions
diff --git a/site/public/index.html b/site/public/index.html
deleted file mode 100644
index ef988ef..0000000
--- a/site/public/index.html
+++ /dev/null
@@ -1,362 +0,0 @@
1<!DOCTYPE html>
2<html lang="en">
3
4<head>
5 <meta charset="UTF-8">
6 <title>Gradecoin</title>
7 <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
8 <style>
9 :root {
10 /* Primary theme color */
11 --primary-color: #F8D12F;
12 /* Primary theme text color */
13 --primary-text-color: #1E2329;
14 /* Primary theme link color */
15 --primary-link-color: #2F57F7;
16 /* Secondary color: the background body color */
17 --secondary-color: #FAFAFA;
18 --secondary-text-color: #303030;
19 /* Highlight text color of table of content */
20 --toc-highlight-text-color: #d46e13;
21 }
22</style>
23
24 <link href="https://fonts.googleapis.com/css?family=Alfa+Slab+One&display=swap" rel="stylesheet">
25 <link href="https://fonts.googleapis.com/css?family=Fira+Sans:400,500,600&display=swap" rel="stylesheet">
26 <link rel="stylesheet" href="/normalize.css">
27 <link rel="stylesheet" href="https:&#x2F;&#x2F;gradecoin.xyz&#x2F;juice.css">
28
29<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/animate.css/4.1.1/animate.min.css" />
30<link rel="stylesheet" href="/site.css" />
31
32</head>
33
34<body>
35
36
37 <header class="pos-absolute" style="background-color: transparent">
38
39
40<a href="https:&#x2F;&#x2F;gradecoin.xyz&#x2F;">
41 <div class="logo">
42 <img src="https:&#x2F;&#x2F;gradecoin.xyz&#x2F;gradecoin.png" alt="logo">
43 Gradecoin
44 </div>
45</a>
46
47<nav>
48
49 <a class="nav-item subtitle-text" href="https:&#x2F;&#x2F;gradecoin.xyz&#x2F;register-docs&#x2F;">Register</a>
50
51 <a class="nav-item subtitle-text" href="https:&#x2F;&#x2F;gradecoin.xyz&#x2F;jwt&#x2F;">JWT</a>
52
53 <a class="nav-item subtitle-text" href="https:&#x2F;&#x2F;gradecoin.xyz&#x2F;transaction-docs&#x2F;">Transactions</a>
54
55 <a class="nav-item subtitle-text" href="https:&#x2F;&#x2F;gradecoin.xyz&#x2F;block-docs&#x2F;">Blocks</a>
56
57 <a class="nav-item subtitle-text" href="https:&#x2F;&#x2F;gradecoin.xyz&#x2F;misc-docs&#x2F;">Misc</a>
58
59
60
61 <a class="nav-item subtitle-text" href="https:&#x2F;&#x2F;github.com&#x2F;zhuowei&#x2F;nft_ptr#why">why?</a>
62
63
64</nav>
65
66 </header>
67
68 <div class="hero">
69
70
71<section class="text-center">
72 <h1 class="heading-text animate__animated animate__jackInTheBox" style="font-size: 50px">
73 Mine your own grades
74 </h1>
75 <h3 class="title-text">
76 <b>Gradecoin</b> is the latest cutting edge blockchain technology agile grading framework that drives organic engagement and other buzzwords, with big data mining search engine optimization
77 </h3>
78 <div>
79 </div>
80</section>
81<img class="hero-image" style="width: 40%" src="https:&#x2F;&#x2F;gradecoin.xyz&#x2F;gradecoin.png">
82
83<div class="explore-more text"
84 onclick="document.getElementById('features').scrollIntoView({behavior: 'smooth'})">
85 ⇩ Learn How ⇩
86</div>
87
88<style>
89
90.hero section {
91 padding: 0 5rem;
92}
93
94@media screen and (max-width: 768px) {
95 .hero section {
96 padding: 0 2rem;
97 }
98
99 .hero-image {
100 display: none
101 }
102
103}
104footer {
105 color: #8b8b8b;
106}
107</style>
108
109 </div>
110
111
112
113 <main>
114
115
116
117
118
119 <div class="toc">
120 <div class="toc-sticky">
121
122 <div class="toc-item">
123 <a class="subtext" href="https://gradecoin.xyz/#welcome-to-gradecoin">Welcome to Gradecoin!</a>
124 </div>
125
126
127 <div class="toc-item">
128 <a class="subtext" href="https://gradecoin.xyz/#coinbase">Coinbase</a>
129 </div>
130
131
132 <div class="toc-item">
133 <a class="subtext" href="https://gradecoin.xyz/#public-key-signatures">Public Key Signatures</a>
134 </div>
135
136
137 <div class="toc-item">
138 <a class="subtext" href="https://gradecoin.xyz/#services">Services</a>
139 </div>
140
141
142 <div class="toc-item-child">
143 <a class="subtext" href="https://gradecoin.xyz/#register"><small>- &#x2F;register</small></a>
144 </div>
145
146 <div class="toc-item-child">
147 <a class="subtext" href="https://gradecoin.xyz/#transaction"><small>- &#x2F;transaction</small></a>
148 </div>
149
150 <div class="toc-item-child">
151 <a class="subtext" href="https://gradecoin.xyz/#block"><small>- &#x2F;block</small></a>
152 </div>
153
154 <div class="toc-item-child">
155 <a class="subtext" href="https://gradecoin.xyz/#user"><small>- &#x2F;user</small></a>
156 </div>
157
158
159
160 <div class="toc-item">
161 <a class="subtext" href="https://gradecoin.xyz/#questions">Questions</a>
162 </div>
163
164
165 <div class="toc-item-child">
166 <a class="subtext" href="https://gradecoin.xyz/#this-all-sound-complicated"><small>- This all sound complicated!</small></a>
167 </div>
168
169 <div class="toc-item-child">
170 <a class="subtext" href="https://gradecoin.xyz/#how-do-you-actually-earn-gradecoin"><small>- How do you actually earn Gradecoin?</small></a>
171 </div>
172
173 <div class="toc-item-child">
174 <a class="subtext" href="https://gradecoin.xyz/#i-found-a-bug"><small>- I found a bug!</small></a>
175 </div>
176
177 <div class="toc-item-child">
178 <a class="subtext" href="https://gradecoin.xyz/#i-hacked-the-server"><small>- I hacked the server!</small></a>
179 </div>
180
181 <div class="toc-item-child">
182 <a class="subtext" href="https://gradecoin.xyz/#submission"><small>- Submission?</small></a>
183 </div>
184
185 <div class="toc-item-child">
186 <a class="subtext" href="https://gradecoin.xyz/#can-my-friends-play"><small>- Can my friends play?</small></a>
187 </div>
188
189 <div class="toc-item-child">
190 <a class="subtext" href="https://gradecoin.xyz/#how-and-or-why"><small>- How and or Why?</small></a>
191 </div>
192
193
194
195 </div>
196 </div>
197
198
199
200 <div class="content text">
201
202<div class="tcontainer" id="features">
203 <div class="ticker-wrap">
204 <div class="ticker-move">
205 <div class="ticker-item"><b>News:</b></div>
206 <div class="ticker-item">Gradecoin is in testnet mode, API is not stable, everything might reset at any time.</div>
207 <div class="ticker-item">Transactions are now unique according to their "by" field, sorry for the trouble</div>
208 <div class="ticker-item">Blocks now require 5 transactions in them, during testnet phase</div>
209 <div class="ticker-item">It was possible (and hilarious) to mine a new block with just 1 transaction, it is now fixed</div>
210 </div>
211 </div>
212</div>
213<h1 id="welcome-to-gradecoin">Welcome to Gradecoin!</h1>
214<p>Blockchains are incredibly simple yet can appear very complicated, we will see how they work and practice programming <em>production</em> cryptography code.</p>
215<p>This server is the sandbox for the PA1, it's currently running the Gradecoin application. Gradecoin is the faux currency we will use to simulate a blockchain network. At the end of the simulation, the amount of Gradecoin you hold will be your PA1 grade.</p>
216<p><strong>A quick summary</strong>: authenticate yourself to the system using public key encryption.
217Craft <a href="https://gradecoin.xyz/transaction-docs/">Transaction</a> proposals and tag them using <a href="https://gradecoin.xyz/jwt/">JWTs</a>.
218When there are enough transactions then you can propose <a href="https://gradecoin.xyz/block-docs/">Blocks</a> in the same way.
219Blocks need to be <em>mined</em> beforehand using Proof-of-work, or brute force.</p>
220<p>Gradecoin offers 3 endpoints at <a href="/register">/register</a>, <a href="/block">/block</a> and <a href="/transaction">/transaction</a>. You can only send GET requests to /block and /transaction without authorization.
221The server is programmed in <a href="https://www.service-architecture.com/articles/web-services/representational_state_transfer_rest.html">RESTful</a> architecture, there are no <code>DELETE</code>, <code>PUT</code> or <code>UPDATE</code> operations, though.</p>
222<p>Gradecoin uses a Proof-of-work block accepting mechanism. It uses single round <a href="https://www.blake2.net/">Blake2s</a> hashing which produces 256-bit (64 hexadecimal characters) output. The <a href="https://wiki.bitcoinsv.io/index.php/Target">target</a> hash is <em>24 bits</em> or <em>6 hexadecimal characters</em> of 0. During testing, I could mine a block on average around 4-6 minutes.</p>
223<blockquote>
224<p>We're expecting you to use existing tools and implementations. Standards are hard. <a href="https://www.reddit.com/r/crypto/comments/2coqsy/dont_roll_your_own/">Don't roll your own crypto</a>. Feel free to ask questions. Collaborate.</p>
225</blockquote>
226<p>You might ask,</p>
227<blockquote>
228<p>But if nobody has any Gradecoin then how do we have transactions?</p>
229</blockquote>
230<p>There is a bank! Their public key is <code>31415926535897932384626433832795028841971693993751058209749445923</code> and they have some amount of Gradecoin preloaded. It's also the only account that you can send transactions requests <em>to</em> yourself.</p>
231<h1 id="coinbase">Coinbase</h1>
232<p>The first transactions of a block is called the <code>coinbase</code>. They are the <strong>author</strong> of the block proposal and if the block is accepted then they get compensated for their efforts with some Gradecoin.</p>
233<h1 id="public-key-signatures">Public Key Signatures</h1>
234<p>Gradecoin uses 2048 bit RSA keypairs.</p>
235<h1 id="services">Services</h1>
236<h2 id="register">/register</h2>
237<ul>
238<li>Create your own 2048 bit RSA <code>keypair</code></li>
239<li>Download <code>Gradecoin</code>'s Public Key from <a href="https://odtuclass.metu.edu.tr/my/">Moodle</a></li>
240<li>Encrypt your <a href="https://www.json.org/json-en.html">JSON</a> wrapped <code>Public Key</code>, <code>Student ID</code> and one time <code>passwd</code> using Gradecoin's Public Key</li>
241<li>Your public key is now in our database and can be used to sign your JWT's during requests</li>
242<li>For more information, check the <a href="https://gradecoin.xyz/register-docs/">register</a> page</li>
243</ul>
244<h2 id="transaction">/transaction</h2>
245<ul>
246<li>You can offer a <a href="https://gradecoin.xyz/transaction-docs/">Transaction</a> with a POST request
247<ul>
248<li>The request should have <code>Authorization</code></li>
249<li>The request header should be signed by the Public Key of the <code>by</code> field in the transaction</li>
250</ul>
251</li>
252<li>Fetch the list of <code>Transaction</code>s with a GET request</li>
253<li>For more information, check our <a href="https://gradecoin.xyz/transaction-docs/">transaction</a> page</li>
254</ul>
255<h2 id="block">/block</h2>
256<ul>
257<li>
258<p>Offer a <a href="https://gradecoin.xyz/block-docs/">Block</a> with a POST request</p>
259<ul>
260<li>The request should have <code>Authorization</code></li>
261<li>The <code>transaction_list</code> of the block should be a subset of pending transactions, available on <a href="/transaction">/transaction</a></li>
262</ul>
263</li>
264<li>
265<p>Fetch the last accepted <code>Block</code> with a GET request</p>
266</li>
267<li>
268<p>For more information, check our <a href="https://gradecoin.xyz/block-docs/">block</a> page</p>
269<p><code>Authorization</code>: The request header should have Bearer JWT.Token signed with Student Public Key</p>
270</li>
271</ul>
272<h2 id="user">/user</h2>
273<ul>
274<li>Meant to be used in the browser, you can see the current list of users and their balance here</li>
275</ul>
276<h1 id="questions">Questions</h1>
277<h2 id="this-all-sound-complicated">This all sound complicated!</h2>
278<ul>
279<li>I've drawn inspiration from <a href="https://explorer.bitcoin.com/btc">actual Bitcoin transactions</a> and <a href="https://github.com/seanmonstar/warp/blob/master/examples/todos.rs">warp</a>. The simplicity of the system is how little interfaces it has.</li>
280<li>Don't know where to start? Gradecoin uses RESTful API; simple <code>curl</code> commands or even your browser will work! <a href="https://curl.trillworks.com/">This website can help as well</a>.</li>
281<li><a href="https://jwt.io">JWT Debugger</a> and the corresponding <a href="https://tools.ietf.org/html/rfc7519">RFC</a>.</li>
282<li>Remember that you are absolutely encouraged to grab off-the-shelf implementations for every cryptography primitive you will use. You can start by finding a code snippet to generate a RSA keypair?</li>
283<li>Check out <a href="https://gradecoin.xyz/misc-docs/">misc</a> for everything else you might be curious about.</li>
284</ul>
285<h2 id="how-do-you-actually-earn-gradecoin">How do you actually earn Gradecoin?</h2>
286<ul>
287<li>Register yourself to at <a href="https://gradecoin.xyz/register-docs/">/register</a></li>
288<li>Create transactions at <a href="https://gradecoin.xyz/transaction-docs/">/transaction</a></li>
289<li>Create blocks to commit transactions at <a href="https://gradecoin.xyz/block-docs/">/block</a></li>
290<li>See how everyone is doing and find people to trade with at <a href="/user">/user</a></li>
291</ul>
292<h2 id="i-found-a-bug">I found a bug!</h2>
293<p>Thank you! Please <a href="mailto:yigit@ceng.metu.edu.tr">let me know</a> so we can solve it.</p>
294<h2 id="i-hacked-the-server">I hacked the server!</h2>
295<p>That wasn't supposed to happen :( I did not place any intentional vulnerabilities to the system so if you cracked something, it was not intended. Please don't abuse it and let me know so I can patch it.</p>
296<h2 id="submission">Submission?</h2>
297<p>At the end of the <em>simulation</em>, your Gradecoin balance will be your grade. I will also expect a unique client programmed in either;</p>
298<ul>
299<li>c</li>
300<li>c++</li>
301<li>perl</li>
302<li>rust</li>
303<li>python</li>
304<li>random assortment of bash scripts</li>
305</ul>
306<p>If your favourite programming language is missing please let me know 🤷?</p>
307<h2 id="can-my-friends-play">Can my friends play?</h2>
308<p>Sadly, no. Student's who are enrolled to the class will receive one-time-passwords for authentication.</p>
309<h2 id="how-and-or-why">How and or Why?</h2>
310<ul>
311<li><a href="https://xkcd.com/2314/">Built</a>, <a href="https://lofi.cafe/">with</a> <a href="https://xkcd.com/2418/">Rust</a></li>
312</ul>
313
314
315 </div>
316
317
318
319 </main>
320
321
322<footer>
323Built For ⁂ CENG489 ⁂ Introduction to Computer Security
324</footer>
325
326</body>
327<script>
328 function highlightNav(heading) {
329 let pathname = location.pathname;
330 document.querySelectorAll(".toc a").forEach((item) => {
331 item.classList.remove("active");
332 });
333 document.querySelector(".toc a[href$='" + pathname + "#" + heading + "']").classList.add("active");
334 }
335
336 let currentHeading = "";
337 window.onscroll = function () {
338 let h = document.querySelectorAll("h1,h2,h3,h4,h5,h6");
339 let elementArr = [];
340
341 h.forEach(item => {
342 if (item.id !== "") {
343 elementArr[item.id] = item.getBoundingClientRect().top;
344 }
345 });
346 elementArr.sort();
347 for (let key in elementArr) {
348 if (!elementArr.hasOwnProperty(key)) {
349 continue;
350 }
351 if (elementArr[key] > 0 && elementArr[key] < 300) {
352 if (currentHeading !== key) {
353 highlightNav(key);
354 currentHeading = key;
355 }
356 break;
357 }
358 }
359 }
360</script>
361
362</html>