diff options
Diffstat (limited to 'content')
-rw-r--r-- | content/_index.md | 38 | ||||
-rw-r--r-- | content/block_docs.md | 6 |
2 files changed, 29 insertions, 15 deletions
diff --git a/content/_index.md b/content/_index.md index cbdcff5..036fc57 100644 --- a/content/_index.md +++ b/content/_index.md | |||
@@ -4,14 +4,17 @@ sort_by = "weight" | |||
4 | +++ | 4 | +++ |
5 | 5 | ||
6 | # Welcome to Gradecoin! | 6 | # Welcome to Gradecoin! |
7 | Blockchains are incredibly simple yet can appear very complicated, we will see how they work and practice programming _production_ cryptography code. | 7 | Blockchains are incredibly simple but they can seem very complicated. |
8 | We will see how they work and practice programming _production grade_ cryptography code. | ||
8 | 9 | ||
9 | 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. | 10 | This server is the sandbox for PA1 and it iss currently running the Gradecoin application. |
11 | Gradecoin is the faux currency we will use to simulate a blockchain network. | ||
12 | **At the end of the simulation, the amount of Gradecoin you hold will be your PA1 grade.** | ||
10 | 13 | ||
11 | **A quick summary**: authenticate yourself to the system using public key encryption. | 14 | **A quick summary**: authenticate yourself to the system using public key encryption. |
12 | Craft [Transaction](@/transaction_docs.md) proposals and tag them using [JWTs](@/JWT.md). | 15 | Craft [Transaction](@/transaction_docs.md) proposals and tag them using [JWTs](@/JWT.md). |
13 | When there are enough transactions then you can propose [Blocks](@/block_docs.md) in the same way. | 16 | When there are enough transactions then you can propose [Blocks](@/block_docs.md). |
14 | Blocks need to be _mined_ beforehand using Proof-of-work, or brute force. | 17 | Blocks need to be _mined_ beforehand using Proof-of-work a.k.a. brute force. |
15 | 18 | ||
16 | Gradecoin offers 3 endpoints at [/register](/register), [/block](/block) and [/transaction](/transaction). You can only send GET requests to /block and /transaction without authorization. | 19 | Gradecoin offers 3 endpoints at [/register](/register), [/block](/block) and [/transaction](/transaction). You can only send GET requests to /block and /transaction without authorization. |
17 | The server is programmed in [RESTful](https://www.service-architecture.com/articles/web-services/representational_state_transfer_rest.html) architecture, there are no `DELETE`, `PUT` or `UPDATE` operations, though. | 20 | The server is programmed in [RESTful](https://www.service-architecture.com/articles/web-services/representational_state_transfer_rest.html) architecture, there are no `DELETE`, `PUT` or `UPDATE` operations, though. |
@@ -35,7 +38,9 @@ Gradecoin uses 2048 bit RSA keypairs. | |||
35 | 38 | ||
36 | # Services | 39 | # Services |
37 | 40 | ||
38 | Please respect the system and others. Keep your request rate below a reasonable limit. Programming a bot is absolutely fine as long as it's not aggressively sending requests. | 41 | Please respect the system and others. |
42 | Keep your request rate below a reasonable limit. | ||
43 | Programming a bot is absolutely fine as long as it's not aggressively sending requests. | ||
39 | 44 | ||
40 | ## /register | 45 | ## /register |
41 | - Create your own 2048 bit RSA `keypair` | 46 | - Create your own 2048 bit RSA `keypair` |
@@ -62,13 +67,15 @@ Please respect the system and others. Keep your request rate below a reasonable | |||
62 | > `Authorization`: The request header should have Bearer JWT.Token signed with Student Public Key | 67 | > `Authorization`: The request header should have Bearer JWT.Token signed with Student Public Key |
63 | 68 | ||
64 | ## /user | 69 | ## /user |
65 | - Looking for people to conduct business with? Everyone is listed here! 🤖👋 are bots who are very eager to transact with you. I've trained them personally. | 70 | - Looking for people to conduct business with? Everyone is listed here! |
71 | 🤖👋 are bots who are very eager to transact with you. | ||
72 | I've trained them personally using state-of-the-art neural networks running on thousands of TPUs. | ||
66 | 73 | ||
67 | # Questions | 74 | # Questions |
68 | ## This all sound complicated! | 75 | ## This all sound complicated! |
69 | - I've drawn inspiration from [actual Bitcoin transactions](https://explorer.bitcoin.com/btc) and [warp](https://github.com/seanmonstar/warp/blob/master/examples/todos.rs). The simplicity of the system is how little interfaces it has. | 76 | - I've drawn inspiration from [actual Bitcoin transactions](https://explorer.bitcoin.com/btc) and [warp](https://github.com/seanmonstar/warp/blob/master/examples/todos.rs). The system has only 3 interfaces. It's simple once you read everything over a couple of times. |
70 | - Don't know where to start? Gradecoin uses RESTful API; simple `curl` commands or even your browser will work! [This website can help as well](https://curl.trillworks.com/). | 77 | - Don't know where to start? Gradecoin uses RESTful API; simple `curl` commands or even your browser will work! [This website can help as well](https://curl.trillworks.com/). |
71 | - [JWT Debugger](https://jwt.io) and the corresponding [RFC](https://tools.ietf.org/html/rfc7519). | 78 | - Check out [JWT Debugger](https://jwt.io) and the corresponding [RFC](https://tools.ietf.org/html/rfc7519). |
72 | - 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? | 79 | - 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? |
73 | - Check out [misc](@/misc_docs.md) for everything else you might be curious about. | 80 | - Check out [misc](@/misc_docs.md) for everything else you might be curious about. |
74 | 81 | ||
@@ -84,20 +91,27 @@ Thank you! Please [let me know](mailto:yigit@ceng.metu.edu.tr) so we can solve i | |||
84 | ## I hacked the server! | 91 | ## I hacked the server! |
85 | 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. | 92 | 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. |
86 | 93 | ||
94 | ## I want to contribute! | ||
95 | Thank you! The code for Gradecoin and this site are open source so you can take a look and let me know if you have any improvements, corrections, typos to point out or whatever. | ||
96 | Both documentation (this site) and code contributions are appreciated. | ||
97 | [My git server](https://git.yigitsever.com/) will be somewhat ahead of the [GitHub](https://github.com/yigitsever/gradecoin) repository but I will sync them at every major milestone. | ||
98 | |||
87 | ## Submission? | 99 | ## Submission? |
88 | At the end of the _simulation_, your Gradecoin balance will be your grade. I will also expect a unique client programmed in either; | 100 | At the end of the _simulation_, your Gradecoin balance will be your grade. I will also expect your client for submission, programmed in either; |
101 | |||
89 | - c | 102 | - c |
90 | - c++ | 103 | - c++ |
104 | - dart/typescript | ||
105 | - go | ||
91 | - perl | 106 | - perl |
92 | - rust | ||
93 | - python | 107 | - python |
94 | - dart/typescript | 108 | - rust |
95 | - random assortment of bash scripts | 109 | - random assortment of bash scripts |
96 | 110 | ||
97 | If your favourite programming language is missing please let me know 🤷? | 111 | If your favourite programming language is missing please let me know 🤷? |
98 | 112 | ||
99 | ## Can my friends play? | 113 | ## Can my friends play? |
100 | Probably not at this point. I've allowed a couple of people during the testnet phase but don't intend to any more. | 114 | Sure! They can get in contact with me until the end of the testnet phase. |
101 | 115 | ||
102 | ## How and or Why? | 116 | ## How and or Why? |
103 | - [Built](https://xkcd.com/2314/), [with](https://lofi.cafe/) [Rust](https://xkcd.com/2418/) | 117 | - [Built](https://xkcd.com/2314/), [with](https://lofi.cafe/) [Rust](https://xkcd.com/2418/) |
diff --git a/content/block_docs.md b/content/block_docs.md index 228277c..2eec2ac 100644 --- a/content/block_docs.md +++ b/content/block_docs.md | |||
@@ -7,8 +7,8 @@ weight = 10 | |||
7 | > Blocks commit proposed transactions into the ledger. | 7 | > Blocks commit proposed transactions into the ledger. |
8 | > A transaction that do not appear on a valid block is not accepted by the network. | 8 | > A transaction that do not appear on a valid block is not accepted by the network. |
9 | 9 | ||
10 | Blocks in Gradecoin are proposed to commit [Transactions](@/transaction_docs.md) that were proposed previously to the system. | 10 | We use Blocks to commit proposed [Transactions](@/transaction_docs.md) to the ledger in order to realize them. |
11 | `transaction_list` of the Block should be filled with valid transactions to be committed. | 11 | `transaction_list` of the Block is filled with valid transactions. |
12 | Blocks are valid when they are proposed with a `nonce` that produces a `hash` value with 6 zeroes (24 bits) at the left hand side. | 12 | Blocks are valid when they are proposed with a `nonce` that produces a `hash` value with 6 zeroes (24 bits) at the left hand side. |
13 | 13 | ||
14 | We are _mining_ using [blake2s](https://www.blake2.net/) algorithm, which produces 256 bit hashes. | 14 | We are _mining_ using [blake2s](https://www.blake2.net/) algorithm, which produces 256 bit hashes. |
@@ -53,7 +53,7 @@ If the resulting hash is valid, then you can create a `Block` JSON object with t | |||
53 | Fill this with the `hash` value you found during the mining process. | 53 | Fill this with the `hash` value you found during the mining process. |
54 | 54 | ||
55 | # Block Rules | 55 | # Block Rules |
56 | - Blocks should include some minimum number of transactions. | 56 | - Blocks have to include a minimum number of transactions. |
57 | - Blocks cannot have duplicate transactions. | 57 | - Blocks cannot have duplicate transactions. |
58 | 58 | ||
59 | # References | 59 | # References |