Gradecoin
This will sit behind nginx reverse proxy so running at 127.0.0.1:8080 is no problem, or https.
$ cargo run
$ curl --location --request POST 'localhost:8080/transaction' --header 'Content-Type: application/json' --data-raw '{
"source": "Myself Truly",
"target": "Literally Anybody Else",
"amount": 12,
"timestamp": "2021-04-07T00:17:00"
}'
how?
authentication
- Student generates a 2048 bit RSA Public Key (PK) / Private Key (PR) pair (available in python, c++, rust, gpg)
- They then encrypt their PKs and Student IDs with Gradecoin's PK (will be published)
- They use their PR as the signing key for JWTs
transactions
Students propose transactions, between them and another node (=public keys) or between the grader (=bank) and themselves.
Transactions are signed
using the proposers private key.
(This whole public/private key + signing process will require some crypto dependency, todo)
blocks
Blocks are proposed using N
transactions, this can be an exact number (=20) or if the last block is some time old then small blocks can be proposed.
Block proposal: Block
+ some nonce
is hashed using a simple hash function, resulting hash should have some property that will require some computation time (~1 minute? 10 minutes?) to find (=guessing) Proof-of-work scheme.
First proposed valid block is accepted, if assertions hold.
(No consensus, we are the sole authority, there's no blockchain here, only a glorified database and busywork)
payment
First transaction in the block is called Coinbase, the block reward is paid to the output (Bitcoin notation, different) of this transaction. If we do this then the rest of the transactions are just make believe playing. So banker + block reward approach seems better.
then
After the new block, stale transactions are cleared?
Big Thank List
- https://github.com/blurbyte/restful-rust
- https://github.com/zupzup/warp-postgres-example
- https://blog.logrocket.com/create-an-async-crud-web-service-in-rust-with-warp/
How to be a good server
- https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml
- https://tools.ietf.org/html/rfc7231