aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYigit Sever2021-04-15 13:35:06 +0300
committerYigit Sever2021-04-15 13:35:06 +0300
commit6ddfaebe3ed45edb01d8c188fc5449b366ddcf55 (patch)
tree3109e4e703627a7967471d88949b96fd6a9723eb
parent44c9e85fb2440e397514d5103f4647155ba5611b (diff)
downloadgradecoin-6ddfaebe3ed45edb01d8c188fc5449b366ddcf55.tar.gz
gradecoin-6ddfaebe3ed45edb01d8c188fc5449b366ddcf55.tar.bz2
gradecoin-6ddfaebe3ed45edb01d8c188fc5449b366ddcf55.zip
Remove lorems and inpsumses
-rw-r--r--site/content/block_docs.md27
-rw-r--r--site/content/register_docs.md51
-rw-r--r--site/content/transaction_docs.md23
-rw-r--r--site/public/block-docs/index.html49
-rw-r--r--site/public/register-docs/index.html75
-rw-r--r--site/public/search_index.en.js2
-rw-r--r--site/public/transaction-docs/index.html47
-rw-r--r--src/handlers.rs2
-rw-r--r--src/schema.rs2
9 files changed, 183 insertions, 95 deletions
diff --git a/site/content/block_docs.md b/site/content/block_docs.md
index 26803bd..4227f26 100644
--- a/site/content/block_docs.md
+++ b/site/content/block_docs.md
@@ -4,8 +4,27 @@ description = "Block Documentation"
4weight = 2 4weight = 2
5+++ 5+++
6 6
7Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod 7A block that was proposed to commit Transactions in `transaction_list` to the
8tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At 8ledger with a nonce that made `hash` valid; 6 zeroes at the left hand side of the
9vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd 9hash (24 bytes).
10ubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
11 10
11We are _mining_ using [blake2s](https://www.blake2.net/) algorithm, which produces 256 bit hashes. Hash/second is roughly 20x10^3 on my machine, a new block can be mined in around 4-6 minutes.
12
13# Requests
14
15## GET
16A HTTP `GET` request to [/block](/block) endpoint will return the latest mined block.
17
18## POST
19
20A HTTP `POST` request with Authorization using JWT will allow you to propose your own blocks.
21
22# Fields
23```
24transaction_list: [array of Fingerprints]
25nonce: unsigned 32-bit integer
26timestamp: ISO 8601 <date>T<time>
27hash: String
28```
29
30[ISO 8601 Reference](https://en.wikipedia.org/wiki/ISO_8601#Combined_date_and_time_representations)
diff --git a/site/content/register_docs.md b/site/content/register_docs.md
index 45571fb..83aef7f 100644
--- a/site/content/register_docs.md
+++ b/site/content/register_docs.md
@@ -5,38 +5,35 @@ weight = 3
5+++ 5+++
6 6
7POST request to /register endpoint 7POST request to /register endpoint
8Lets a [`User`] (=student) to authenticate themselves to the system
9This `request` can be rejected if the payload is malformed (=not authenticated properly) or if
10the [`AuthRequest.user_id`] of the `request` is not in the list of users that can hold a Gradecoin account
11 8
12# Authentication Process 9Lets a user to authenticate themselves to the system.
13- Gradecoin's Public Key (`gradecoin_public_key`) is listed on moodle. 10Only people who are enrolled to the class can open Gradecoin accounts.
14- Gradecoin's Private Key (`gradecoin_private_key`) is loaded here 11This is enforced with your Student ID and a one time password you will receive.
15 12
16- Student picks a short temporary key (`k_temp`) 13# Authentication Process
17- Creates a JSON object (`auth_plaintext`) with their `metu_id` and `public key` in base64 (PEM) format (`S_PK`): 14- Gradecoin's Public Key (`gradecoin_public_key`) is listed on our Moodle page.
15- You pick a short temporary key (`k_temp`)
16- Create a JSON object (`auth_plaintext`) with your `metu_id` and `public key` in base64 (PEM) format (`S_PK`) [reference](https://tls.mbed.org/kb/cryptography/asn1-key-structures-in-der-and-pem)
17```json
18{ 18{
19 student_id: "e12345", 19 "student_id": "e12345",
20 passwd: "15 char secret" 20 "passwd": "15 char secret",
21 public_key: "---BEGIN PUBLIC KEY..." 21 "public_key": "---BEGIN PUBLIC KEY..."
22} 22}
23```
24
25- Pick a random IV.
26- Encrypt the serialized string of `auth_plaintext` with 128 bit block AES in CBC mode with Pkcs7 padding using the temporary key (`k_temp`), the result is `auth_ciphertext`. Encode this with base64.
27- The temporary key you have picked `k_temp` is encrypted using RSA with OAEP padding scheme
28using SHA-256 with `gradecoin_public_key`, giving us `key_ciphertext`. Encode this with base 64.
29- The payload JSON object (`auth_request`) can be serialized now:
23 30
24- Encrypts the serialized string of `auth_plaintext` with 128 bit block AES in CBC mode with Pkcs7 padding using the temporary key (`k_temp`), the result is `auth_ciphertext` TODO should this be base64'd? 31```json
25- The temporary key student has picked `k_temp` is encrypted using RSA with OAEP padding scheme
26using sha256 with `gradecoin_public_key` (TODO base64? same as above), giving us `key_ciphertext`
27- The payload JSON object (`auth_request`) can be JSON serialized now:
28{ 32{
29 c: "auth_ciphertext" 33 "c": "auth_ciphertext",
30 key: "key_ciphertext" 34 "iv": "hexadecimal",
35 "key": "key_ciphertext"
31} 36}
37```
32 38
33## Gradecoin Side 39If your authentication process was valid, you will be given access and your public key fingerprint that is your address.
34
35- Upon receiving, we first RSA decrypt with OAEP padding scheme using SHA256 with `gradecoin_private_key` as the key and auth_request.key `key` as the ciphertext, receiving `temp_key` (this is the temporary key chosen by stu
36- With `temp_key`, we can AES 128 Cbc Pkcs7 decrypt the `auth_request.c`, giving us
37auth_plaintext
38- The `auth_plaintext` String can be deserialized to [`AuthRequest`]
39- We then verify the payload and calculate the User fingerprint
40- Finally, create the new [`User`] object, insert to users HashMap `<fingerprint, User>`
41
42
diff --git a/site/content/transaction_docs.md b/site/content/transaction_docs.md
index 6607fe9..0526f4e 100644
--- a/site/content/transaction_docs.md
+++ b/site/content/transaction_docs.md
@@ -4,8 +4,23 @@ description = "Transaction documentation"
4weight = 2 4weight = 2
5+++ 5+++
6 6
7Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod 7A transaction request between `source` and `target` to move `amount` Gradecoin.
8tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At
9vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd
10ubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
11 8
9# Requests
10
11## GET
12A HTTP `GET` request to [/transaction](/transaction) endpoint will return the current list of pending transactions.
13
14## POST
15
16A HTTP `POST` request with Authorization using JWT to [/transaction](/transactions) will allow you to propose your own transactions.
17
18
19# Fields
20```
21by: Fingerprint
22source: Fingerprint
23target: Fingerprint
24amount: unsigned 16 bit integer
25timestamp: ISO 8601 <date>T<time>
26```
diff --git a/site/public/block-docs/index.html b/site/public/block-docs/index.html
index 84a1463..7fd12c4 100644
--- a/site/public/block-docs/index.html
+++ b/site/public/block-docs/index.html
@@ -66,14 +66,55 @@
66 66
67 67
68 68
69
70 <div class="toc">
71 <div class="toc-sticky">
72
73 <div class="toc-item">
74 <a class="subtext" href="https://gradecoin.xyz/block-docs/#requests">Requests</a>
75 </div>
76
77
78 <div class="toc-item-child">
79 <a class="subtext" href="https://gradecoin.xyz/block-docs/#get"><small>- GET</small></a>
80 </div>
81
82 <div class="toc-item-child">
83 <a class="subtext" href="https://gradecoin.xyz/block-docs/#post"><small>- POST</small></a>
84 </div>
85
86
87
88 <div class="toc-item">
89 <a class="subtext" href="https://gradecoin.xyz/block-docs/#fields">Fields</a>
90 </div>
91
92
93 </div>
94 </div>
95
96
69 97
70 <div class="content text"> 98 <div class="content text">
71 99
72<div class="heading-text">Block Documentation</div> 100<div class="heading-text">Block Documentation</div>
73<p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod 101<p>A block that was proposed to commit Transactions in <code>transaction_list</code> to the
74tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At 102ledger with a nonce that made <code>hash</code> valid; 6 zeroes at the left hand side of the
75vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd 103hash (24 bytes).</p>
76ubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.</p> 104<p>We are <em>mining</em> using <a href="https://www.blake2.net/">blake2s</a> algorithm, which produces 256 bit hashes. Hash/second is roughly 20x10^3 on my machine, a new block can be mined in around 4-6 minutes.</p>
105<h1 id="requests">Requests</h1>
106<h2 id="get">GET</h2>
107<p>A HTTP <code>GET</code> request to <a href="/block">/block</a> endpoint will return the latest mined block.</p>
108<h2 id="post">POST</h2>
109<p>A HTTP <code>POST</code> request with Authorization using JWT will allow you to propose your own blocks.</p>
110<h1 id="fields">Fields</h1>
111<pre style="background-color:#ffffff;">
112<code><span style="color:#545052;">transaction_list: [array of Fingerprints]
113nonce: unsigned 32-bit integer
114timestamp: ISO 8601 &lt;date&gt;T&lt;time&gt;
115hash: String
116</span></code></pre>
117<p><a href="https://en.wikipedia.org/wiki/ISO_8601#Combined_date_and_time_representations">ISO 8601 Reference</a></p>
77 118
78 119
79 </div> 120 </div>
diff --git a/site/public/register-docs/index.html b/site/public/register-docs/index.html
index e3170f9..9a9b0c0 100644
--- a/site/public/register-docs/index.html
+++ b/site/public/register-docs/index.html
@@ -75,12 +75,6 @@
75 </div> 75 </div>
76 76
77 77
78 <div class="toc-item-child">
79 <a class="subtext" href="https://gradecoin.xyz/register-docs/#gradecoin-side"><small>- Gradecoin Side</small></a>
80 </div>
81
82
83
84 </div> 78 </div>
85 </div> 79 </div>
86 80
@@ -89,53 +83,38 @@
89 <div class="content text"> 83 <div class="content text">
90 84
91<div class="heading-text">Register Documentation</div> 85<div class="heading-text">Register Documentation</div>
92<p>POST request to /register endpoint 86<p>POST request to /register endpoint</p>
93Lets a [<code>User</code>] (=student) to authenticate themselves to the system 87<p>Lets a user to authenticate themselves to the system.
94This <code>request</code> can be rejected if the payload is malformed (=not authenticated properly) or if 88Only people who are enrolled to the class can open Gradecoin accounts.
95the [<code>AuthRequest.user_id</code>] of the <code>request</code> is not in the list of users that can hold a Gradecoin account</p> 89This is enforced with your Student ID and a one time password you will receive.</p>
96<h1 id="authentication-process">Authentication Process</h1> 90<h1 id="authentication-process">Authentication Process</h1>
97<ul> 91<ul>
98<li> 92<li>Gradecoin's Public Key (<code>gradecoin_public_key</code>) is listed on our Moodle page.</li>
99<p>Gradecoin's Public Key (<code>gradecoin_public_key</code>) is listed on moodle.</p> 93<li>You pick a short temporary key (<code>k_temp</code>)</li>
100</li> 94<li>Create a JSON object (<code>auth_plaintext</code>) with your <code>metu_id</code> and <code>public key</code> in base64 (PEM) format (<code>S_PK</code>) <a href="https://tls.mbed.org/kb/cryptography/asn1-key-structures-in-der-and-pem">reference</a></li>
101<li>
102<p>Gradecoin's Private Key (<code>gradecoin_private_key</code>) is loaded here</p>
103</li>
104<li>
105<p>Student picks a short temporary key (<code>k_temp</code>)</p>
106</li>
107<li>
108<p>Creates a JSON object (<code>auth_plaintext</code>) with their <code>metu_id</code> and <code>public key</code> in base64 (PEM) format (<code>S_PK</code>):
109{
110student_id: &quot;e12345&quot;,
111passwd: &quot;15 char secret&quot;
112public_key: &quot;---BEGIN PUBLIC KEY...&quot;
113}</p>
114</li>
115<li>
116<p>Encrypts the serialized string of <code>auth_plaintext</code> with 128 bit block AES in CBC mode with Pkcs7 padding using the temporary key (<code>k_temp</code>), the result is <code>auth_ciphertext</code> TODO should this be base64'd?</p>
117</li>
118<li>
119<p>The temporary key student has picked <code>k_temp</code> is encrypted using RSA with OAEP padding scheme
120using sha256 with <code>gradecoin_public_key</code> (TODO base64? same as above), giving us <code>key_ciphertext</code></p>
121</li>
122<li>
123<p>The payload JSON object (<code>auth_request</code>) can be JSON serialized now:
124{
125c: &quot;auth_ciphertext&quot;
126key: &quot;key_ciphertext&quot;
127}</p>
128</li>
129</ul> 95</ul>
130<h2 id="gradecoin-side">Gradecoin Side</h2> 96<pre style="background-color:#ffffff;">
97<code class="language-json" data-lang="json"><span style="color:#545052;">{
98 &quot;</span><span style="color:#009854;">student_id</span><span style="color:#545052;">&quot;: &quot;</span><span style="color:#009854;">e12345</span><span style="color:#545052;">&quot;,
99 &quot;</span><span style="color:#009854;">passwd</span><span style="color:#545052;">&quot;: &quot;</span><span style="color:#009854;">15 char secret</span><span style="color:#545052;">&quot;,
100 &quot;</span><span style="color:#009854;">public_key</span><span style="color:#545052;">&quot;: &quot;</span><span style="color:#009854;">---BEGIN PUBLIC KEY...</span><span style="color:#545052;">&quot;
101}
102</span></code></pre>
131<ul> 103<ul>
132<li>Upon receiving, we first RSA decrypt with OAEP padding scheme using SHA256 with <code>gradecoin_private_key</code> as the key and auth_request.key <code>key</code> as the ciphertext, receiving <code>temp_key</code> (this is the temporary key chosen by stu</li> 104<li>Pick a random IV.</li>
133<li>With <code>temp_key</code>, we can AES 128 Cbc Pkcs7 decrypt the <code>auth_request.c</code>, giving us 105<li>Encrypt the serialized string of <code>auth_plaintext</code> with 128 bit block AES in CBC mode with Pkcs7 padding using the temporary key (<code>k_temp</code>), the result is <code>auth_ciphertext</code>. Encode this with base64.</li>
134auth_plaintext</li> 106<li>The temporary key you have picked <code>k_temp</code> is encrypted using RSA with OAEP padding scheme
135<li>The <code>auth_plaintext</code> String can be deserialized to [<code>AuthRequest</code>]</li> 107using SHA-256 with <code>gradecoin_public_key</code>, giving us <code>key_ciphertext</code>. Encode this with base 64.</li>
136<li>We then verify the payload and calculate the User fingerprint</li> 108<li>The payload JSON object (<code>auth_request</code>) can be serialized now:</li>
137<li>Finally, create the new [<code>User</code>] object, insert to users HashMap <code>&lt;fingerprint, User&gt;</code></li>
138</ul> 109</ul>
110<pre style="background-color:#ffffff;">
111<code class="language-json" data-lang="json"><span style="color:#545052;">{
112 &quot;</span><span style="color:#009854;">c</span><span style="color:#545052;">&quot;: &quot;</span><span style="color:#009854;">auth_ciphertext</span><span style="color:#545052;">&quot;,
113 &quot;</span><span style="color:#009854;">iv</span><span style="color:#545052;">&quot;: &quot;</span><span style="color:#009854;">hexadecimal</span><span style="color:#545052;">&quot;,
114 &quot;</span><span style="color:#009854;">key</span><span style="color:#545052;">&quot;: &quot;</span><span style="color:#009854;">key_ciphertext</span><span style="color:#545052;">&quot;
115}
116</span></code></pre>
117<p>If your authentication process was valid, you will be given access and your public key fingerprint that is your address.</p>
139 118
140 119
141 </div> 120 </div>
diff --git a/site/public/search_index.en.js b/site/public/search_index.en.js
index 97b7942..a5eeec0 100644
--- a/site/public/search_index.en.js
+++ b/site/public/search_index.en.js
@@ -1 +1 @@
window.searchIndex = {"fields":["title","body"],"pipeline":["trimmer","stopWordFilter","stemmer"],"ref":"id","version":"0.9.5","index":{"body":{"root":{"docs":{},"df":0,"0":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1},"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"8":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.4142135623730951}},"df":1}},"5":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":1}},"2":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1,"0":{"docs":{},"df":0,"4":{"docs":{},"df":0,"8":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951}},"df":1}}},"4":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1},"5":{"docs":{},"df":0,"6":{"docs":{"https://gradecoin.xyz/":{"tf":1.0},"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":2}}},"3":{"docs":{"https://gradecoin.xyz/":{"tf":1.0},"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":2,"1":{"docs":{},"df":0,"4":{"docs":{},"df":0,"1":{"docs":{},"df":0,"5":{"docs":{},"df":0,"9":{"docs":{},"df":0,"2":{"docs":{},"df":0,"6":{"docs":{},"df":0,"5":{"docs":{},"df":0,"3":{"docs":{},"df":0,"5":{"docs":{},"df":0,"8":{"docs":{},"df":0,"9":{"docs":{},"df":0,"7":{"docs":{},"df":0,"9":{"docs":{},"df":0,"3":{"docs":{},"df":0,"2":{"docs":{},"df":0,"3":{"docs":{},"df":0,"8":{"docs":{},"df":0,"4":{"docs":{},"df":0,"6":{"docs":{},"df":0,"2":{"docs":{},"df":0,"6":{"docs":{},"df":0,"4":{"docs":{},"df":0,"3":{"docs":{},"df":0,"3":{"docs":{},"df":0,"8":{"docs":{},"df":0,"3":{"docs":{},"df":0,"2":{"docs":{},"df":0,"7":{"docs":{},"df":0,"9":{"docs":{},"df":0,"5":{"docs":{},"df":0,"0":{"docs":{},"df":0,"2":{"docs":{},"df":0,"8":{"docs":{},"df":0,"8":{"docs":{},"df":0,"4":{"docs":{},"df":0,"1":{"docs":{},"df":0,"9":{"docs":{},"df":0,"7":{"docs":{},"df":0,"1":{"docs":{},"df":0,"6":{"docs":{},"df":0,"9":{"docs":{},"df":0,"3":{"docs":{},"df":0,"9":{"docs":{},"df":0,"9":{"docs":{},"df":0,"3":{"docs":{},"df":0,"7":{"docs":{},"df":0,"5":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"5":{"docs":{},"df":0,"8":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"9":{"docs":{},"df":0,"7":{"docs":{},"df":0,"4":{"docs":{},"df":0,"9":{"docs":{},"df":0,"4":{"docs":{},"df":0,"4":{"docs":{},"df":0,"5":{"docs":{},"df":0,"9":{"docs":{},"df":0,"2":{"docs":{},"df":0,"3":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"6":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1,"4":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}},"7":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1},"a":{"docs":{},"df":0,"a":{"docs":{},"df":0,"a":{"docs":{},"df":0,"a":{"docs":{},"df":0,"a":{"docs":{},"df":0,"a":{"docs":{},"df":0,".":{"docs":{},"df":0,"b":{"docs":{},"df":0,"b":{"docs":{},"df":0,"b":{"docs":{},"df":0,"b":{"docs":{},"df":0,"b":{"docs":{},"df":0,"b":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"c":{"docs":{},"df":0,"c":{"docs":{},"df":0,"c":{"docs":{},"df":0,"c":{"docs":{"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}},"u":{"docs":{},"df":0,"s":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}},"c":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.7320508075688772}},"df":1}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.0},"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":2}}}},"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://gradecoin.xyz/block-docs/":{"tf":1.0},"https://gradecoin.xyz/transaction-docs/":{"tf":1.0}},"df":2}}}}},"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.4142135623730951}},"df":1},"l":{"docs":{},"df":0,"g":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"m":{"docs":{"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":1}}}}}}},"i":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"y":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://gradecoin.xyz/block-docs/":{"tf":1.0},"https://gradecoin.xyz/transaction-docs/":{"tf":1.0}},"df":2}}}}}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":1}}}}}}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/block-docs/":{"tf":1.4142135623730951},"https://gradecoin.xyz/transaction-docs/":{"tf":1.4142135623730951}},"df":2}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951}},"df":1}}}},"p":{"docs":{"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":1}},"p":{"docs":{},"df":0,"i":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}}}}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"k":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951}},"df":1},"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}},"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}},"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":2.0}},"df":1}}}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":1,".":{"docs":{},"df":0,"c":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":1},"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":1}}}}}}}}}}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951},"https://gradecoin.xyz/jwt/":{"tf":1.0},"https://gradecoin.xyz/register-docs/":{"tf":1.7320508075688772}},"df":3}}},"o":{"docs":{},"df":0,"r":{"docs":{"https://gradecoin.xyz/":{"tf":2.23606797749979},"https://gradecoin.xyz/jwt/":{"tf":1.7320508075688772}},"df":2}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":1,".":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}}},"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"k":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"6":{"docs":{},"df":0,"4":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.4142135623730951}},"df":1,"'":{"docs":{},"df":0,"d":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":1}}}}},"h":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://gradecoin.xyz/":{"tf":1.0},"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":2}}}},"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}}}}},"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":2.0},"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":2,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"2":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://gradecoin.xyz/":{"tf":3.3166247903554},"https://gradecoin.xyz/block-docs/":{"tf":1.0},"https://gradecoin.xyz/jwt/":{"tf":1.4142135623730951},"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":4,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951}},"df":1}}}}}}}}},"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}},"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"g":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1},"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}},"c":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951},"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":2,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":1}}},"l":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}},"b":{"docs":{},"df":0,"c":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.4142135623730951}},"df":1}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951}},"df":1}}}}},"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":1}}}}}}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"s":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"a":{"docs":{"https://gradecoin.xyz/block-docs/":{"tf":1.0},"https://gradecoin.xyz/transaction-docs/":{"tf":1.0}},"df":2}}}},"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951}},"df":1}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951}},"df":1}}}}},"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}}},"m":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951}},"df":1}}}}},"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://gradecoin.xyz/block-docs/":{"tf":1.0},"https://gradecoin.xyz/transaction-docs/":{"tf":1.0}},"df":2}}}}}}}},"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}}}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}},"f":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.0},"https://gradecoin.xyz/jwt/":{"tf":1.0},"https://gradecoin.xyz/register-docs/":{"tf":1.4142135623730951}},"df":3}}},"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"l":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1},"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}}}},"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}}},"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"g":{"docs":{"https://gradecoin.xyz/":{"tf":1.0},"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":2}}}},"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.4142135623730951}},"df":1}}}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://gradecoin.xyz/block-docs/":{"tf":1.4142135623730951},"https://gradecoin.xyz/transaction-docs/":{"tf":1.4142135623730951}},"df":2}}},"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":1}}}}}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://gradecoin.xyz/block-docs/":{"tf":2.0},"https://gradecoin.xyz/transaction-docs/":{"tf":2.0}},"df":2}}},"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.7320508075688772}},"df":1}}},"w":{"docs":{},"df":0,"n":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"w":{"docs":{},"df":0,"n":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"o":{"docs":{"https://gradecoin.xyz/block-docs/":{"tf":1.0},"https://gradecoin.xyz/transaction-docs/":{"tf":1.0}},"df":2},"r":{"docs":{},"df":0,"e":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951}},"df":1}}}},"e":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"3":{"docs":{},"df":0,"4":{"docs":{},"df":0,"5":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":1}}}}},"a":{"docs":{"https://gradecoin.xyz/block-docs/":{"tf":1.0},"https://gradecoin.xyz/transaction-docs/":{"tf":1.0}},"df":2},"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{"https://gradecoin.xyz/block-docs/":{"tf":1.0},"https://gradecoin.xyz/transaction-docs/":{"tf":1.0}},"df":2}}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{"https://gradecoin.xyz/block-docs/":{"tf":1.0},"https://gradecoin.xyz/transaction-docs/":{"tf":1.0}},"df":2}}}},"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":1},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951},"https://gradecoin.xyz/register-docs/":{"tf":1.4142135623730951}},"df":2}}}}},"d":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951}},"df":1,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.0},"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":2}}}}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}},"o":{"docs":{"https://gradecoin.xyz/block-docs/":{"tf":1.0},"https://gradecoin.xyz/transaction-docs/":{"tf":1.0}},"df":2},"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/block-docs/":{"tf":1.0},"https://gradecoin.xyz/transaction-docs/":{"tf":1.0}},"df":2}}},"s":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/block-docs/":{"tf":1.0},"https://gradecoin.xyz/transaction-docs/":{"tf":1.0}},"df":2}},"t":{"docs":{"https://gradecoin.xyz/block-docs/":{"tf":2.0},"https://gradecoin.xyz/transaction-docs/":{"tf":2.0}},"df":2},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}},"x":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}},"p":{"docs":{"https://gradecoin.xyz/jwt/":{"tf":1.4142135623730951}},"df":1,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951}},"df":1}}},"i":{"docs":{},"df":0,"r":{"docs":{"https://gradecoin.xyz/jwt/":{"tf":1.4142135623730951}},"df":1}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":1}}}}}}},"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"u":{"docs":{},"df":0,"x":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}},"v":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}}}},"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951}},"df":1}}}},"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"https://gradecoin.xyz/":{"tf":1.0},"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":2}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":1}},"d":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1},"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":1}}}}}}}}},"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.0},"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":2}}},"t":{"docs":{"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/jwt/":{"tf":1.0},"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":2}}}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}}},"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.4142135623730951}},"df":1}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1},"d":{"docs":{},"df":0,"e":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951}},"df":1,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://gradecoin.xyz/":{"tf":3.605551275463989},"https://gradecoin.xyz/jwt/":{"tf":1.0},"https://gradecoin.xyz/register-docs/":{"tf":1.4142135623730951}},"df":3,"'":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951},"https://gradecoin.xyz/register-docs/":{"tf":1.4142135623730951}},"df":2},"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}},"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"_":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}},"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"d":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"h":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951},"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":2,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":1}}}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951},"https://gradecoin.xyz/jwt/":{"tf":1.4142135623730951}},"df":2}}}},"l":{"docs":{},"df":0,"p":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"e":{"docs":{"https://gradecoin.xyz/jwt/":{"tf":1.0},"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":2}},"x":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951}},"df":1}}}}}}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"https://gradecoin.xyz/":{"tf":1.0},"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":2}}},"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"p":{"docs":{"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"'":{"docs":{},"df":0,"v":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}},"a":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/jwt/":{"tf":1.4142135623730951}},"df":1}},"d":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1},"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951}},"df":1}}}}}}}},"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":1}}},"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1},"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}}},"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/block-docs/":{"tf":1.0},"https://gradecoin.xyz/transaction-docs/":{"tf":1.0}},"df":2}}}}}}},"p":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{"https://gradecoin.xyz/block-docs/":{"tf":1.4142135623730951},"https://gradecoin.xyz/transaction-docs/":{"tf":1.4142135623730951}},"df":2}}}},"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"'":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951}},"df":1}}},"j":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://gradecoin.xyz/":{"tf":1.0},"https://gradecoin.xyz/jwt/":{"tf":1.4142135623730951},"https://gradecoin.xyz/register-docs/":{"tf":1.7320508075688772}},"df":3}}},"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{"https://gradecoin.xyz/block-docs/":{"tf":1.0},"https://gradecoin.xyz/transaction-docs/":{"tf":1.0}},"df":2}}}},"w":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951},"https://gradecoin.xyz/jwt/":{"tf":2.6457513110645907}},"df":2,"'":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1},".":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}}}}}},"k":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.7320508075688772}},"df":1}}}}},"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"d":{"docs":{"https://gradecoin.xyz/block-docs/":{"tf":1.0},"https://gradecoin.xyz/transaction-docs/":{"tf":1.0}},"df":2}}},"e":{"docs":{},"df":0,"y":{"docs":{"https://gradecoin.xyz/":{"tf":3.0},"https://gradecoin.xyz/jwt/":{"tf":1.4142135623730951},"https://gradecoin.xyz/register-docs/":{"tf":3.3166247903554}},"df":3,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951}},"df":1}}}},"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}}}},"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://gradecoin.xyz/":{"tf":2.0}},"df":1}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://gradecoin.xyz/block-docs/":{"tf":1.0},"https://gradecoin.xyz/transaction-docs/":{"tf":1.0}},"df":2}}},"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.0},"https://gradecoin.xyz/register-docs/":{"tf":1.4142135623730951}},"df":2}},"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{"https://gradecoin.xyz/block-docs/":{"tf":1.4142135623730951},"https://gradecoin.xyz/transaction-docs/":{"tf":1.4142135623730951}},"df":2}}}},"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":1},"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{"https://gradecoin.xyz/block-docs/":{"tf":1.0},"https://gradecoin.xyz/transaction-docs/":{"tf":1.0}},"df":2}}},"l":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":1}}}}}},"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":1}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951}},"df":1},"u":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"s":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{"https://gradecoin.xyz/":{"tf":1.0},"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":2}}}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}},"w":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{"https://gradecoin.xyz/block-docs/":{"tf":1.0},"https://gradecoin.xyz/transaction-docs/":{"tf":1.0}},"df":2}}}},"w":{"docs":{"https://gradecoin.xyz/":{"tf":1.0},"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":2}}},"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.4142135623730951}},"df":1}}},"b":{"docs":{},"df":0,"j":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.7320508075688772}},"df":1}}}}},"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://gradecoin.xyz/":{"tf":1.7320508075688772}},"df":1}}}},"n":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951}},"df":1},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://gradecoin.xyz/":{"tf":1.0},"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":2}}},"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"1":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951}},"df":1},"d":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.7320508075688772}},"df":1},"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"w":{"docs":{},"df":0,"d":{"docs":{"https://gradecoin.xyz/":{"tf":1.0},"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":2},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}},"y":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://gradecoin.xyz/jwt/":{"tf":1.0},"https://gradecoin.xyz/register-docs/":{"tf":1.7320508075688772}},"df":2}}}}}},"e":{"docs":{},"df":0,"m":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":1},"r":{"docs":{},"df":0,"l":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.4142135623730951}},"df":1}}},"k":{"docs":{},"df":0,"c":{"docs":{},"df":0,"s":{"docs":{},"df":0,"1":{"docs":{"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":1},"7":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.4142135623730951}},"df":1}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}},"y":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{"https://gradecoin.xyz/":{"tf":1.7320508075688772}},"df":1}}}},"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951},"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":2}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}},"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/jwt/":{"tf":1.0},"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":2}}}},"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://gradecoin.xyz/jwt/":{"tf":1.0},"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":2}}}},"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}},"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://gradecoin.xyz/":{"tf":2.0}},"df":1}}}},"o":{"docs":{},"df":0,"f":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951},"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":2}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"s":{"docs":{"https://gradecoin.xyz/":{"tf":1.7320508075688772},"https://gradecoin.xyz/jwt/":{"tf":1.4142135623730951}},"df":2}}}}},"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://gradecoin.xyz/":{"tf":3.0},"https://gradecoin.xyz/jwt/":{"tf":1.0},"https://gradecoin.xyz/register-docs/":{"tf":1.7320508075688772}},"df":3,"_":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":1}}}}}}}},"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}},"y":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}}},"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951}},"df":1}}}}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{"https://gradecoin.xyz/block-docs/":{"tf":1.0},"https://gradecoin.xyz/transaction-docs/":{"tf":1.0}},"df":2}}},"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{"https://gradecoin.xyz/":{"tf":1.0},"https://gradecoin.xyz/register-docs/":{"tf":1.4142135623730951}},"df":2}}}},"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://gradecoin.xyz/jwt/":{"tf":1.7320508075688772}},"df":1}}},"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951},"https://gradecoin.xyz/register-docs/":{"tf":1.4142135623730951}},"df":2}}}},"j":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/jwt/":{"tf":1.0},"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":2}}}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"b":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}},"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":1}}}}}}},"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":3.3166247903554},"https://gradecoin.xyz/jwt/":{"tf":1.4142135623730951},"https://gradecoin.xyz/register-docs/":{"tf":1.7320508075688772}},"df":3}}},"i":{"docs":{},"df":0,"r":{"docs":{"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951}},"df":1},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":1}}}}},"f":{"docs":{},"df":0,"c":{"docs":{"https://gradecoin.xyz/":{"tf":1.0},"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":2}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"2":{"docs":{},"df":0,"5":{"docs":{},"df":0,"6":{"docs":{"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":1}}},"a":{"docs":{"https://gradecoin.xyz/":{"tf":1.7320508075688772},"https://gradecoin.xyz/jwt/":{"tf":1.0},"https://gradecoin.xyz/register-docs/":{"tf":1.4142135623730951}},"df":3,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":1}}}}},"u":{"docs":{},"df":0,"n":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1},"s":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951}},"df":1}}}},"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"k":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":1}}},"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{"https://gradecoin.xyz/block-docs/":{"tf":1.0},"https://gradecoin.xyz/transaction-docs/":{"tf":1.0}},"df":2}}}},"l":{"docs":{},"df":0,"i":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}},"m":{"docs":{},"df":0,"e":{"docs":{"https://gradecoin.xyz/":{"tf":1.0},"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":2}},"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{"https://gradecoin.xyz/block-docs/":{"tf":1.0},"https://gradecoin.xyz/transaction-docs/":{"tf":1.0}},"df":2}}},"d":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"x":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}}},"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951}},"df":1,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}},"d":{"docs":{},"df":0,"b":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.4142135623730951}},"df":1}}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{},"df":0,"a":{"docs":{"https://gradecoin.xyz/block-docs/":{"tf":1.0},"https://gradecoin.xyz/transaction-docs/":{"tf":1.0}},"df":2},"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":1}}}},"d":{"docs":{"https://gradecoin.xyz/block-docs/":{"tf":1.4142135623730951},"https://gradecoin.xyz/transaction-docs/":{"tf":1.4142135623730951}},"df":2},"e":{"docs":{"https://gradecoin.xyz/":{"tf":1.0},"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":2},"n":{"docs":{},"df":0,"d":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951},"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":2}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.4142135623730951}},"df":1}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://gradecoin.xyz/":{"tf":1.7320508075688772}},"df":1}},"i":{"docs":{},"df":0,"c":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}},"h":{"docs":{},"df":0,"a":{"docs":{"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":1,"2":{"docs":{},"df":0,"5":{"docs":{},"df":0,"6":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.4142135623730951}},"df":1}}}},"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"f":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":1}},"g":{"docs":{},"df":0,"n":{"docs":{"https://gradecoin.xyz/":{"tf":1.7320508075688772}},"df":1,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}}},"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951}},"df":1,"i":{"docs":{},"df":0,"c":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"l":{"docs":{"https://gradecoin.xyz/":{"tf":1.7320508075688772}},"df":1}}},"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"l":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}},"t":{"docs":{"https://gradecoin.xyz/block-docs/":{"tf":1.4142135623730951},"https://gradecoin.xyz/transaction-docs/":{"tf":1.4142135623730951}},"df":2}},"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"v":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951}},"df":1}}},"e":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/block-docs/":{"tf":1.0},"https://gradecoin.xyz/transaction-docs/":{"tf":1.0}},"df":2}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.4142135623730951}},"df":1}}}},"u":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":1,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.7320508075688772},"https://gradecoin.xyz/register-docs/":{"tf":1.7320508075688772}},"df":2,"'":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1},"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":1}}}}}}}}},"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}},"m":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}},"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}},"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{"https://gradecoin.xyz/":{"tf":1.7320508075688772},"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":2}}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1},"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{"https://gradecoin.xyz/block-docs/":{"tf":1.0},"https://gradecoin.xyz/transaction-docs/":{"tf":1.0}},"df":2}}}}}},"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"_":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.4142135623730951}},"df":1}}}},"o":{"docs":{},"df":0,"r":{"docs":{"https://gradecoin.xyz/block-docs/":{"tf":1.0},"https://gradecoin.xyz/transaction-docs/":{"tf":1.0}},"df":2,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":2.0}},"df":1}}}}}}},"s":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}},"h":{"docs":{},"df":0,"a":{"docs":{"https://gradecoin.xyz/jwt/":{"tf":1.4142135623730951}},"df":1,"n":{"docs":{},"df":0,"k":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"v":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":1}}}}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951},"https://gradecoin.xyz/jwt/":{"tf":2.0}},"df":2}}},"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.4142135623730951}},"df":1}},"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"l":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":3.4641016151377544},"https://gradecoin.xyz/jwt/":{"tf":1.4142135623730951},"https://gradecoin.xyz/transaction-docs/":{"tf":1.0}},"df":3}}}}}}}},"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://gradecoin.xyz/block-docs/":{"tf":1.0},"https://gradecoin.xyz/transaction-docs/":{"tf":1.0}},"df":2}}}}}}},"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}},"x":{"docs":{"https://gradecoin.xyz/jwt/":{"tf":1.7320508075688772}},"df":1}}},"p":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"n":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":1}}},"s":{"docs":{"https://gradecoin.xyz/":{"tf":3.4641016151377544},"https://gradecoin.xyz/jwt/":{"tf":2.23606797749979},"https://gradecoin.xyz/register-docs/":{"tf":2.0}},"df":3,"e":{"docs":{},"df":0,"r":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":2.23606797749979}},"df":1,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{"https://gradecoin.xyz/block-docs/":{"tf":1.0},"https://gradecoin.xyz/transaction-docs/":{"tf":1.0}},"df":2}},"v":{"docs":{},"df":0,"1":{"docs":{},"df":0,"_":{"docs":{},"df":0,"5":{"docs":{"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1,"f":{"docs":{},"df":0,"i":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":1}}},"o":{"docs":{"https://gradecoin.xyz/block-docs/":{"tf":1.0},"https://gradecoin.xyz/transaction-docs/":{"tf":1.0}},"df":2}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"a":{"docs":{"https://gradecoin.xyz/block-docs/":{"tf":1.0},"https://gradecoin.xyz/transaction-docs/":{"tf":1.0}},"df":2}}}}}}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}}},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"p":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}},"y":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}},"e":{"docs":{},"df":0,"'":{"docs":{},"df":0,"r":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}},"b":{"docs":{"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":1,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}},"l":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}},"l":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{"https://gradecoin.xyz/":{"tf":2.0},"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":2}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}},"y":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"f":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}},"title":{"root":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://gradecoin.xyz/block-docs/":{"tf":1.0}},"df":1}}}}},"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}}}}}},"j":{"docs":{},"df":0,"w":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/transaction-docs/":{"tf":1.0}},"df":1}}}}}}}}}}},"documentStore":{"save":true,"docs":{"https://gradecoin.xyz/":{"body":"Welcome to Gradecoin!\nBlockchains are incredibly simple yet can appear very complicated, we will see how they work and practice programming production cryptography code.\nThis 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.\nA quick summary: authenticate yourself to the system using public key encryption.\nCraft Transaction proposals and tag them using JWTs.\nWhen there are enough transactions then you can propose Blocks in the same way.\nBlocks need to be mined beforehand using Proof-of-work, or brute force.\nGradecoin offers 3 endpoints at /register, /block and /transaction. You can only send GET requests to /block and /transaction without authorization.\nThe server is programmed in RESTful architecture, there are no DELETE, PUT or UPDATE operations, though.\nGradecoin uses a Proof-of-work block accepting mechanism. It uses single round Blake2s hashing which produces 256-bit (64 hexadecimal characters) output. The target hash is 24 bits or 6 hexadecimal characters of 0. During testing, I could mine a block on average around 2-7 minutes.\n\nWe're expecting you to use existing tools and implementations. Standards are hard. Don't roll your own crypto. Feel free to ask questions. Collaborate.\n\nYou might ask,\n\nBut if nobody has any Gradecoin then how do we have transactions?\n\nThere is a bank! Their public key is 31415926535897932384626433832795028841971693993751058209749445923 and they have some amount of Gradecoin preloaded. It's also the only account that you can send transactions requests to yourself.\nCoinbase\nThe first transactions of a block is called the coinbase. They are the author of the block proposal and if the block is accepted then they get compensated for their efforts with some Gradecoin.\nPublic Key Signatures\nGradecoin uses 2048 bit RSA keyspairs.\nServices\n/register\n\nStudent creates their own 2048 bit RSA keypair\nDownloads Gradecoin's Public Key from Moodle\nEncrypts their JSON wrapped Public Key, Student ID and one time passwd using Gradecoin's Public Key\nTheir public key is now in our database and can be used to sign their JWT's during requests\n\n/transaction\n\nYou can offer a Transaction - POST request\n\nThe request should have Authorization\nThe request header should be signed by the Public Key of the by field in the transaction\n\n\nfetch the list of Transactions - GET request\n\n/block\n\noffer a [schema::Block] - POST request\n\nThe request should have Authorization\nThe [schema::Block::transaction_list] of the block should be a subset of [schema::Db::pending_transactions]\n\n\nfetch the last accepted [schema::Block] - GET request\n\nAuthorization: The request header should have Bearer JWT.Token signed with Student Public Key\nQuestions\nThis all sound complicated!\n\nI've drawn inspiration from actual Bitcoin transactions and warp. The simplicity of the system is how little interfaces it has.\nDon't know where to start? Gradecoin uses RESTful API; simple curl commands or even your browser will work! This website can help as well.\nJWT Debugger and the corresponding RFC\nRemember 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?\n\nI found a bug!\nThank you! Please let me know so we can solve it.\nI hacked the server!\nThat 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.\nSubmission?\nAt the end of the simulation, your Gradecoin balance will be your grade. I will also expect a unique client programmed in either;\n\nc\nc++\nperl\nrust\npython\nrandom assortment of bash scripts\n\nIf your favourite programming language is missing please let me know 🤷?\nCan my friends play?\nSadly, no. Student's who are enrolled to the class will receive one-time-passwords for authentication.\nHow and or Why?\n\nBuilt, with Rust\n\n","id":"https://gradecoin.xyz/","title":"Gradecoin"},"https://gradecoin.xyz/block-docs/":{"body":"Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod\ntempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At\nvero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd\nubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.\n","id":"https://gradecoin.xyz/block-docs/","title":"Blocks"},"https://gradecoin.xyz/jwt/":{"body":"\nJSON Web Tokens are representations of claims, or authorization proofs that fit into the Header of HTTP requests.\n\nHow?\nJWTs are used as the MAC of operations that require authorization:\n\nblock proposal\ntransaction proposal.\n\nThey are send alongside the JSON request body in the Header;\nAuthorization: Bearer aaaaaa.bbbbbb.ccccc\n\nGradecoin uses 3 fields for the JWTs;\n{\n\"tha\": \"Hash of the payload, check invididual references\",\n\"iat\": \"Issued At, Unix Time\",\n\"exp\": \"Expiration Time, epoch\"\n}\n\n\ntha is explained in blocks and transactions documentations.\niat when the JWT was created in Unix Time format\nexp when the JWT will expire &amp; be rejected in Unix Time\n\nAlgorithm\nWe are using RS256, RSASSA-PKCS1-v1_5 using SHA-256. The JWTs you encode with your private RSA key will be decoded using the public key you have authenticated with. You can see how the process works here.\nReferences\n\nRFC, the ultimate reference\nJWT Debugger\n\n","id":"https://gradecoin.xyz/jwt/","title":"JWT"},"https://gradecoin.xyz/register-docs/":{"body":"POST request to /register endpoint\nLets a [User] (=student) to authenticate themselves to the system\nThis request can be rejected if the payload is malformed (=not authenticated properly) or if\nthe [AuthRequest.user_id] of the request is not in the list of users that can hold a Gradecoin account\nAuthentication Process\n\n\nGradecoin's Public Key (gradecoin_public_key) is listed on moodle.\n\n\nGradecoin's Private Key (gradecoin_private_key) is loaded here\n\n\nStudent picks a short temporary key (k_temp)\n\n\nCreates a JSON object (auth_plaintext) with their metu_id and public key in base64 (PEM) format (S_PK):\n{\nstudent_id: \"e12345\",\npasswd: \"15 char secret\"\npublic_key: \"---BEGIN PUBLIC KEY...\"\n}\n\n\nEncrypts the serialized string of auth_plaintext with 128 bit block AES in CBC mode with Pkcs7 padding using the temporary key (k_temp), the result is auth_ciphertext TODO should this be base64'd?\n\n\nThe temporary key student has picked k_temp is encrypted using RSA with OAEP padding scheme\nusing sha256 with gradecoin_public_key (TODO base64? same as above), giving us key_ciphertext\n\n\nThe payload JSON object (auth_request) can be JSON serialized now:\n{\nc: \"auth_ciphertext\"\nkey: \"key_ciphertext\"\n}\n\n\nGradecoin Side\n\nUpon receiving, we first RSA decrypt with OAEP padding scheme using SHA256 with gradecoin_private_key as the key and auth_request.key key as the ciphertext, receiving temp_key (this is the temporary key chosen by stu\nWith temp_key, we can AES 128 Cbc Pkcs7 decrypt the auth_request.c, giving us\nauth_plaintext\nThe auth_plaintext String can be deserialized to [AuthRequest]\nWe then verify the payload and calculate the User fingerprint\nFinally, create the new [User] object, insert to users HashMap &lt;fingerprint, User&gt;\n\n","id":"https://gradecoin.xyz/register-docs/","title":"Register"},"https://gradecoin.xyz/transaction-docs/":{"body":"Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod\ntempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At\nvero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd\nubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.\n","id":"https://gradecoin.xyz/transaction-docs/","title":"Transactions"}},"docInfo":{"https://gradecoin.xyz/":{"body":371,"title":1},"https://gradecoin.xyz/block-docs/":{"body":48,"title":1},"https://gradecoin.xyz/jwt/":{"body":96,"title":1},"https://gradecoin.xyz/register-docs/":{"body":166,"title":1},"https://gradecoin.xyz/transaction-docs/":{"body":48,"title":1}},"length":5},"lang":"English"}; \ No newline at end of file window.searchIndex = {"fields":["title","body"],"pipeline":["trimmer","stopWordFilter","stemmer"],"ref":"id","version":"0.9.5","index":{"body":{"root":{"docs":{},"df":0,"0":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1},"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"8":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":1}},"5":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":1},"6":{"docs":{"https://gradecoin.xyz/transaction-docs/":{"tf":1.0}},"df":1}},"2":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1,"0":{"docs":{},"df":0,"4":{"docs":{},"df":0,"8":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951}},"df":1}},"x":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"^":{"docs":{},"df":0,"3":{"docs":{"https://gradecoin.xyz/block-docs/":{"tf":1.0}},"df":1}}}}}},"4":{"docs":{"https://gradecoin.xyz/":{"tf":1.0},"https://gradecoin.xyz/block-docs/":{"tf":1.0}},"df":2},"5":{"docs":{},"df":0,"6":{"docs":{"https://gradecoin.xyz/":{"tf":1.0},"https://gradecoin.xyz/block-docs/":{"tf":1.0},"https://gradecoin.xyz/jwt/":{"tf":1.0},"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":4}}},"3":{"docs":{"https://gradecoin.xyz/":{"tf":1.0},"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":2,"1":{"docs":{},"df":0,"4":{"docs":{},"df":0,"1":{"docs":{},"df":0,"5":{"docs":{},"df":0,"9":{"docs":{},"df":0,"2":{"docs":{},"df":0,"6":{"docs":{},"df":0,"5":{"docs":{},"df":0,"3":{"docs":{},"df":0,"5":{"docs":{},"df":0,"8":{"docs":{},"df":0,"9":{"docs":{},"df":0,"7":{"docs":{},"df":0,"9":{"docs":{},"df":0,"3":{"docs":{},"df":0,"2":{"docs":{},"df":0,"3":{"docs":{},"df":0,"8":{"docs":{},"df":0,"4":{"docs":{},"df":0,"6":{"docs":{},"df":0,"2":{"docs":{},"df":0,"6":{"docs":{},"df":0,"4":{"docs":{},"df":0,"3":{"docs":{},"df":0,"3":{"docs":{},"df":0,"8":{"docs":{},"df":0,"3":{"docs":{},"df":0,"2":{"docs":{},"df":0,"7":{"docs":{},"df":0,"9":{"docs":{},"df":0,"5":{"docs":{},"df":0,"0":{"docs":{},"df":0,"2":{"docs":{},"df":0,"8":{"docs":{},"df":0,"8":{"docs":{},"df":0,"4":{"docs":{},"df":0,"1":{"docs":{},"df":0,"9":{"docs":{},"df":0,"7":{"docs":{},"df":0,"1":{"docs":{},"df":0,"6":{"docs":{},"df":0,"9":{"docs":{},"df":0,"3":{"docs":{},"df":0,"9":{"docs":{},"df":0,"9":{"docs":{},"df":0,"3":{"docs":{},"df":0,"7":{"docs":{},"df":0,"5":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"5":{"docs":{},"df":0,"8":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"9":{"docs":{},"df":0,"7":{"docs":{},"df":0,"4":{"docs":{},"df":0,"9":{"docs":{},"df":0,"4":{"docs":{},"df":0,"4":{"docs":{},"df":0,"5":{"docs":{},"df":0,"9":{"docs":{},"df":0,"2":{"docs":{},"df":0,"3":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"2":{"docs":{"https://gradecoin.xyz/block-docs/":{"tf":1.0}},"df":1}},"4":{"docs":{"https://gradecoin.xyz/block-docs/":{"tf":1.0}},"df":1},"6":{"docs":{"https://gradecoin.xyz/":{"tf":1.0},"https://gradecoin.xyz/block-docs/":{"tf":1.4142135623730951}},"df":2,"4":{"docs":{"https://gradecoin.xyz/":{"tf":1.0},"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":2}},"7":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1},"8":{"docs":{},"df":0,"6":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{"https://gradecoin.xyz/block-docs/":{"tf":1.4142135623730951},"https://gradecoin.xyz/transaction-docs/":{"tf":1.0}},"df":2}}}},"a":{"docs":{},"df":0,"a":{"docs":{},"df":0,"a":{"docs":{},"df":0,"a":{"docs":{},"df":0,"a":{"docs":{},"df":0,"a":{"docs":{},"df":0,".":{"docs":{},"df":0,"b":{"docs":{},"df":0,"b":{"docs":{},"df":0,"b":{"docs":{},"df":0,"b":{"docs":{},"df":0,"b":{"docs":{},"df":0,"b":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"c":{"docs":{},"df":0,"c":{"docs":{},"df":0,"c":{"docs":{},"df":0,"c":{"docs":{"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"b":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}},"u":{"docs":{},"df":0,"s":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}},"c":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.7320508075688772}},"df":1}},"s":{"docs":{},"df":0,"s":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.0},"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":2}}}}},"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}},"d":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":1}}}}}},"e":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":1},"l":{"docs":{},"df":0,"g":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"m":{"docs":{"https://gradecoin.xyz/block-docs/":{"tf":1.0},"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":2}}}}}}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://gradecoin.xyz/block-docs/":{"tf":1.0},"https://gradecoin.xyz/transaction-docs/":{"tf":1.0}},"df":2}}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":1}}}}}}},"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951},"https://gradecoin.xyz/transaction-docs/":{"tf":1.4142135623730951}},"df":2}}}},"p":{"docs":{"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":1}},"p":{"docs":{},"df":0,"i":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}}}}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://gradecoin.xyz/":{"tf":1.0},"https://gradecoin.xyz/block-docs/":{"tf":1.0}},"df":2}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://gradecoin.xyz/block-docs/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"k":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951}},"df":1},"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}},"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}},"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.4142135623730951}},"df":1}}}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":1}}}}}}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951},"https://gradecoin.xyz/jwt/":{"tf":1.0},"https://gradecoin.xyz/register-docs/":{"tf":1.7320508075688772}},"df":3}}},"o":{"docs":{},"df":0,"r":{"docs":{"https://gradecoin.xyz/":{"tf":2.23606797749979},"https://gradecoin.xyz/block-docs/":{"tf":1.0},"https://gradecoin.xyz/jwt/":{"tf":1.7320508075688772},"https://gradecoin.xyz/transaction-docs/":{"tf":1.0}},"df":4}}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}}},"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"k":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"e":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":1,"6":{"docs":{},"df":0,"4":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.4142135623730951}},"df":1}}},"h":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://gradecoin.xyz/":{"tf":1.0},"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":2}}}},"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}}}}},"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"w":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://gradecoin.xyz/transaction-docs/":{"tf":1.0}},"df":1}}}}}},"i":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":2.0},"https://gradecoin.xyz/block-docs/":{"tf":1.4142135623730951},"https://gradecoin.xyz/register-docs/":{"tf":1.0},"https://gradecoin.xyz/transaction-docs/":{"tf":1.0}},"df":4,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"2":{"docs":{"https://gradecoin.xyz/":{"tf":1.0},"https://gradecoin.xyz/block-docs/":{"tf":1.0}},"df":2}}}},"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://gradecoin.xyz/":{"tf":3.3166247903554},"https://gradecoin.xyz/block-docs/":{"tf":2.449489742783178},"https://gradecoin.xyz/jwt/":{"tf":1.4142135623730951},"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":4,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951}},"df":1}}}}}}}}},"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}},"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"g":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1},"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}},"y":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{"https://gradecoin.xyz/block-docs/":{"tf":1.0}},"df":1}}}},"c":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951},"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":2,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}},"b":{"docs":{},"df":0,"c":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":1}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951}},"df":1}}}}},"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":1}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"s":{"docs":{"https://gradecoin.xyz/":{"tf":1.0},"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":2}}},"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951}},"df":1}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951}},"df":1}}}}},"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}}},"m":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/block-docs/":{"tf":1.0}},"df":1}}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951}},"df":1}}}}},"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}}}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}},"f":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.0},"https://gradecoin.xyz/jwt/":{"tf":1.0},"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":3}}},"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"l":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1},"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.0},"https://gradecoin.xyz/transaction-docs/":{"tf":1.0}},"df":2}}}}}}},"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}}},"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"g":{"docs":{"https://gradecoin.xyz/":{"tf":1.0},"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":2}}}},"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":1}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":1}}}}}},"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.7320508075688772}},"df":1}}},"w":{"docs":{},"df":0,"n":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"w":{"docs":{},"df":0,"n":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951}},"df":1}}}},"e":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"3":{"docs":{},"df":0,"4":{"docs":{},"df":0,"5":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":1}}}}},"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}},"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{"https://gradecoin.xyz/jwt/":{"tf":1.0},"https://gradecoin.xyz/register-docs/":{"tf":1.4142135623730951}},"df":2},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951},"https://gradecoin.xyz/register-docs/":{"tf":1.4142135623730951}},"df":2}}}}},"d":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951}},"df":1,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.0},"https://gradecoin.xyz/block-docs/":{"tf":1.0},"https://gradecoin.xyz/register-docs/":{"tf":1.0},"https://gradecoin.xyz/transaction-docs/":{"tf":1.0}},"df":4}}}}}},"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{"https://gradecoin.xyz/":{"tf":1.0},"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":2}}}},"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":1}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}},"x":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}},"p":{"docs":{"https://gradecoin.xyz/jwt/":{"tf":1.4142135623730951}},"df":1,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951}},"df":1}}},"i":{"docs":{},"df":0,"r":{"docs":{"https://gradecoin.xyz/jwt/":{"tf":1.4142135623730951}},"df":1}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":1}}}}}}},"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"u":{"docs":{},"df":0,"x":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}},"v":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}}}},"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951}},"df":1}}}},"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"https://gradecoin.xyz/":{"tf":1.0},"https://gradecoin.xyz/block-docs/":{"tf":1.0},"https://gradecoin.xyz/jwt/":{"tf":1.0},"https://gradecoin.xyz/transaction-docs/":{"tf":1.0}},"df":4}}},"n":{"docs":{},"df":0,"d":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1},"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/block-docs/":{"tf":1.0},"https://gradecoin.xyz/register-docs/":{"tf":1.0},"https://gradecoin.xyz/transaction-docs/":{"tf":1.7320508075688772}},"df":3}}}}}}}}},"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}},"t":{"docs":{"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/jwt/":{"tf":1.0},"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":2}}}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}}},"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":1,"n":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1},"d":{"docs":{},"df":0,"e":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951}},"df":1,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://gradecoin.xyz/":{"tf":3.605551275463989},"https://gradecoin.xyz/jwt/":{"tf":1.0},"https://gradecoin.xyz/register-docs/":{"tf":1.0},"https://gradecoin.xyz/transaction-docs/":{"tf":1.0}},"df":4,"'":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951},"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":2},"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"_":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}},"n":{"docs":{},"df":0,"d":{"docs":{"https://gradecoin.xyz/block-docs/":{"tf":1.0}},"df":1}},"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"d":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"h":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951},"https://gradecoin.xyz/block-docs/":{"tf":2.0},"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":3,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://gradecoin.xyz/block-docs/":{"tf":1.0}},"df":1}}}}}}}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951},"https://gradecoin.xyz/jwt/":{"tf":1.4142135623730951}},"df":2}}}},"l":{"docs":{},"df":0,"p":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"e":{"docs":{"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":1}},"x":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951},"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":2}}}}}}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"p":{"docs":{"https://gradecoin.xyz/block-docs/":{"tf":1.4142135623730951},"https://gradecoin.xyz/jwt/":{"tf":1.0},"https://gradecoin.xyz/transaction-docs/":{"tf":1.4142135623730951}},"df":3}}}},"i":{"docs":{},"df":0,"'":{"docs":{},"df":0,"v":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}},"a":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/jwt/":{"tf":1.4142135623730951}},"df":1}},"d":{"docs":{"https://gradecoin.xyz/":{"tf":1.0},"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":2},"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951}},"df":1}}}}}}}},"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{"https://gradecoin.xyz/block-docs/":{"tf":1.0},"https://gradecoin.xyz/transaction-docs/":{"tf":1.0}},"df":2},"n":{"docs":{},"df":0,"d":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1},"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}}},"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":1}}}}}}},"s":{"docs":{},"df":0,"o":{"docs":{"https://gradecoin.xyz/block-docs/":{"tf":1.4142135623730951},"https://gradecoin.xyz/transaction-docs/":{"tf":1.0}},"df":2},"s":{"docs":{},"df":0,"u":{"docs":{"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"'":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951}},"df":1}},"v":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.4142135623730951}},"df":1}},"j":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://gradecoin.xyz/":{"tf":1.0},"https://gradecoin.xyz/jwt/":{"tf":1.4142135623730951},"https://gradecoin.xyz/register-docs/":{"tf":1.4142135623730951}},"df":3}}},"w":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951},"https://gradecoin.xyz/block-docs/":{"tf":1.0},"https://gradecoin.xyz/jwt/":{"tf":2.6457513110645907},"https://gradecoin.xyz/transaction-docs/":{"tf":1.0}},"df":4,"'":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1},".":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}}}}}},"k":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.7320508075688772}},"df":1}}}}},"e":{"docs":{},"df":0,"y":{"docs":{"https://gradecoin.xyz/":{"tf":3.0},"https://gradecoin.xyz/jwt/":{"tf":1.4142135623730951},"https://gradecoin.xyz/register-docs/":{"tf":2.8284271247461903}},"df":3,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951}},"df":1}}}},"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}}}},"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://gradecoin.xyz/":{"tf":2.0}},"df":1}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/block-docs/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://gradecoin.xyz/block-docs/":{"tf":1.0}},"df":1}}}},"f":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/block-docs/":{"tf":1.0}},"df":1}},"t":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.0},"https://gradecoin.xyz/register-docs/":{"tf":1.0},"https://gradecoin.xyz/transaction-docs/":{"tf":1.0}},"df":3}},"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"t":{"docs":{},"df":0,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/block-docs/":{"tf":1.0},"https://gradecoin.xyz/transaction-docs/":{"tf":1.0}},"df":2}}}}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":1,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://gradecoin.xyz/block-docs/":{"tf":1.0}},"df":1}}}},"d":{"docs":{},"df":0,"e":{"docs":{"https://gradecoin.xyz/block-docs/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":1}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951},"https://gradecoin.xyz/block-docs/":{"tf":1.7320508075688772}},"df":2},"u":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.0},"https://gradecoin.xyz/block-docs/":{"tf":1.0}},"df":2}}},"s":{"docs":{},"df":0,"s":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{"https://gradecoin.xyz/":{"tf":1.0},"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":2}}},"v":{"docs":{},"df":0,"e":{"docs":{"https://gradecoin.xyz/transaction-docs/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}},"w":{"docs":{"https://gradecoin.xyz/block-docs/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"c":{"docs":{"https://gradecoin.xyz/block-docs/":{"tf":1.4142135623730951}},"df":1}},"w":{"docs":{"https://gradecoin.xyz/":{"tf":1.0},"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":2}}},"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":1}}},"b":{"docs":{},"df":0,"j":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.4142135623730951}},"df":1}}}}},"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://gradecoin.xyz/":{"tf":1.7320508075688772}},"df":1}}}},"n":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951},"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":2},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":1},"r":{"docs":{"https://gradecoin.xyz/":{"tf":1.0},"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":2}}},"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"1":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951}},"df":1},"d":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.4142135623730951}},"df":1},"g":{"docs":{},"df":0,"e":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"w":{"docs":{},"df":0,"d":{"docs":{"https://gradecoin.xyz/":{"tf":1.0},"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":2},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://gradecoin.xyz/":{"tf":1.0},"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":2}}}}}},"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}},"y":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://gradecoin.xyz/jwt/":{"tf":1.0},"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":2}}}}}},"e":{"docs":{},"df":0,"m":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":1},"n":{"docs":{},"df":0,"d":{"docs":{"https://gradecoin.xyz/transaction-docs/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"l":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.7320508075688772}},"df":1}}},"k":{"docs":{},"df":0,"c":{"docs":{},"df":0,"s":{"docs":{},"df":0,"1":{"docs":{"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":1},"7":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":1}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}},"y":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{"https://gradecoin.xyz/":{"tf":1.7320508075688772}},"df":1}}}},"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951},"https://gradecoin.xyz/block-docs/":{"tf":1.4142135623730951},"https://gradecoin.xyz/register-docs/":{"tf":1.0},"https://gradecoin.xyz/transaction-docs/":{"tf":1.4142135623730951}},"df":4}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}},"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://gradecoin.xyz/jwt/":{"tf":1.0},"https://gradecoin.xyz/register-docs/":{"tf":1.4142135623730951}},"df":2}}}},"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{"https://gradecoin.xyz/":{"tf":1.0},"https://gradecoin.xyz/block-docs/":{"tf":1.0}},"df":2,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}},"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://gradecoin.xyz/":{"tf":2.0}},"df":1}}}},"o":{"docs":{},"df":0,"f":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951},"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":2}},"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{"https://gradecoin.xyz/":{"tf":1.7320508075688772},"https://gradecoin.xyz/block-docs/":{"tf":1.4142135623730951},"https://gradecoin.xyz/jwt/":{"tf":1.4142135623730951},"https://gradecoin.xyz/transaction-docs/":{"tf":1.0}},"df":4}}}}},"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://gradecoin.xyz/":{"tf":3.0},"https://gradecoin.xyz/jwt/":{"tf":1.0},"https://gradecoin.xyz/register-docs/":{"tf":2.0}},"df":3,"_":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":1}}}}}}}},"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}},"y":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}}},"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951}},"df":1}}}}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://gradecoin.xyz/":{"tf":1.0},"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":2}}}}},"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{"https://gradecoin.xyz/":{"tf":1.0},"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":2}}}},"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://gradecoin.xyz/block-docs/":{"tf":1.0},"https://gradecoin.xyz/jwt/":{"tf":1.7320508075688772},"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":3}}},"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951},"https://gradecoin.xyz/register-docs/":{"tf":1.4142135623730951}},"df":2}}}},"j":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":1}}}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"b":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}},"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":1}}}}}}},"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":3.3166247903554},"https://gradecoin.xyz/block-docs/":{"tf":1.7320508075688772},"https://gradecoin.xyz/jwt/":{"tf":1.4142135623730951},"https://gradecoin.xyz/register-docs/":{"tf":1.0},"https://gradecoin.xyz/transaction-docs/":{"tf":2.0}},"df":5}}},"i":{"docs":{},"df":0,"r":{"docs":{"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951}},"df":1},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"n":{"docs":{"https://gradecoin.xyz/block-docs/":{"tf":1.0},"https://gradecoin.xyz/transaction-docs/":{"tf":1.0}},"df":2}}}}},"f":{"docs":{},"df":0,"c":{"docs":{"https://gradecoin.xyz/":{"tf":1.0},"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":2}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://gradecoin.xyz/block-docs/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"d":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"2":{"docs":{},"df":0,"5":{"docs":{},"df":0,"6":{"docs":{"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":1}}},"a":{"docs":{"https://gradecoin.xyz/":{"tf":1.7320508075688772},"https://gradecoin.xyz/jwt/":{"tf":1.0},"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":3,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":1}}}}},"u":{"docs":{},"df":0,"n":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1},"s":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951}},"df":1}}}},"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"k":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":1}}},"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}},"m":{"docs":{},"df":0,"e":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}},"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"x":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}}},"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951}},"df":1,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}},"d":{"docs":{},"df":0,"b":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":1}}}},"e":{"docs":{"https://gradecoin.xyz/":{"tf":1.0},"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":2},"n":{"docs":{},"df":0,"d":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951},"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":2}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.4142135623730951}},"df":1}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://gradecoin.xyz/":{"tf":1.7320508075688772}},"df":1}},"i":{"docs":{},"df":0,"c":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}},"h":{"docs":{},"df":0,"a":{"docs":{"https://gradecoin.xyz/jwt/":{"tf":1.0},"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":2},"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"f":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{"https://gradecoin.xyz/block-docs/":{"tf":1.0}},"df":1}},"g":{"docs":{},"df":0,"n":{"docs":{"https://gradecoin.xyz/":{"tf":1.7320508075688772}},"df":1,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}}},"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951}},"df":1,"i":{"docs":{},"df":0,"c":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"l":{"docs":{"https://gradecoin.xyz/":{"tf":1.7320508075688772}},"df":1}}},"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"l":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"v":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"c":{"docs":{"https://gradecoin.xyz/transaction-docs/":{"tf":1.4142135623730951}},"df":1}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951}},"df":1}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{"https://gradecoin.xyz/block-docs/":{"tf":1.0},"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":2}}}},"u":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.7320508075688772},"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":2,"'":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1},"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":1}}}}}}}}},"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}},"m":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}},"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}},"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{"https://gradecoin.xyz/":{"tf":1.7320508075688772},"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":2}}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1},"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.0},"https://gradecoin.xyz/transaction-docs/":{"tf":1.4142135623730951}},"df":2}}}}},"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.7320508075688772}},"df":1}}}}}}},"s":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}},"h":{"docs":{},"df":0,"a":{"docs":{"https://gradecoin.xyz/jwt/":{"tf":1.4142135623730951}},"df":1,"n":{"docs":{},"df":0,"k":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"v":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":1}}}}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951},"https://gradecoin.xyz/jwt/":{"tf":2.0},"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":3,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{"https://gradecoin.xyz/block-docs/":{"tf":1.0},"https://gradecoin.xyz/transaction-docs/":{"tf":1.0}},"df":2}}}}}}}},"o":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"l":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":3.4641016151377544},"https://gradecoin.xyz/block-docs/":{"tf":1.0},"https://gradecoin.xyz/jwt/":{"tf":1.4142135623730951},"https://gradecoin.xyz/transaction-docs/":{"tf":2.449489742783178}},"df":4,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/block-docs/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}},"x":{"docs":{"https://gradecoin.xyz/jwt/":{"tf":1.7320508075688772}},"df":1}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{"https://gradecoin.xyz/block-docs/":{"tf":1.0},"https://gradecoin.xyz/transaction-docs/":{"tf":1.0}},"df":2}}}}},"p":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}},"s":{"docs":{"https://gradecoin.xyz/":{"tf":3.4641016151377544},"https://gradecoin.xyz/block-docs/":{"tf":1.4142135623730951},"https://gradecoin.xyz/jwt/":{"tf":2.23606797749979},"https://gradecoin.xyz/register-docs/":{"tf":1.7320508075688772},"https://gradecoin.xyz/transaction-docs/":{"tf":1.0}},"df":5,"e":{"docs":{},"df":0,"r":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":1}}}},"v":{"docs":{},"df":0,"1":{"docs":{},"df":0,"_":{"docs":{},"df":0,"5":{"docs":{"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":1}}},"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://gradecoin.xyz/block-docs/":{"tf":1.0},"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":2}}}},"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}}},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"p":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}},"y":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}},"e":{"docs":{},"df":0,"'":{"docs":{},"df":0,"r":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}},"b":{"docs":{"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":1,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}},"l":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}},"l":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{"https://gradecoin.xyz/":{"tf":2.0},"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":2}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}},"y":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"f":{"docs":{"https://gradecoin.xyz/":{"tf":1.4142135623730951}},"df":1}}}}}}}},"z":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{"https://gradecoin.xyz/block-docs/":{"tf":1.0}},"df":1}}}}}},"title":{"root":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://gradecoin.xyz/block-docs/":{"tf":1.0}},"df":1}}}}},"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://gradecoin.xyz/":{"tf":1.0}},"df":1}}}}}}}}},"j":{"docs":{},"df":0,"w":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/jwt/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/register-docs/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://gradecoin.xyz/transaction-docs/":{"tf":1.0}},"df":1}}}}}}}}}}},"documentStore":{"save":true,"docs":{"https://gradecoin.xyz/":{"body":"Welcome to Gradecoin!\nBlockchains are incredibly simple yet can appear very complicated, we will see how they work and practice programming production cryptography code.\nThis 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.\nA quick summary: authenticate yourself to the system using public key encryption.\nCraft Transaction proposals and tag them using JWTs.\nWhen there are enough transactions then you can propose Blocks in the same way.\nBlocks need to be mined beforehand using Proof-of-work, or brute force.\nGradecoin offers 3 endpoints at /register, /block and /transaction. You can only send GET requests to /block and /transaction without authorization.\nThe server is programmed in RESTful architecture, there are no DELETE, PUT or UPDATE operations, though.\nGradecoin uses a Proof-of-work block accepting mechanism. It uses single round Blake2s hashing which produces 256-bit (64 hexadecimal characters) output. The target hash is 24 bits or 6 hexadecimal characters of 0. During testing, I could mine a block on average around 2-7 minutes.\n\nWe're expecting you to use existing tools and implementations. Standards are hard. Don't roll your own crypto. Feel free to ask questions. Collaborate.\n\nYou might ask,\n\nBut if nobody has any Gradecoin then how do we have transactions?\n\nThere is a bank! Their public key is 31415926535897932384626433832795028841971693993751058209749445923 and they have some amount of Gradecoin preloaded. It's also the only account that you can send transactions requests to yourself.\nCoinbase\nThe first transactions of a block is called the coinbase. They are the author of the block proposal and if the block is accepted then they get compensated for their efforts with some Gradecoin.\nPublic Key Signatures\nGradecoin uses 2048 bit RSA keyspairs.\nServices\n/register\n\nStudent creates their own 2048 bit RSA keypair\nDownloads Gradecoin's Public Key from Moodle\nEncrypts their JSON wrapped Public Key, Student ID and one time passwd using Gradecoin's Public Key\nTheir public key is now in our database and can be used to sign their JWT's during requests\n\n/transaction\n\nYou can offer a Transaction - POST request\n\nThe request should have Authorization\nThe request header should be signed by the Public Key of the by field in the transaction\n\n\nfetch the list of Transactions - GET request\n\n/block\n\noffer a [schema::Block] - POST request\n\nThe request should have Authorization\nThe [schema::Block::transaction_list] of the block should be a subset of [schema::Db::pending_transactions]\n\n\nfetch the last accepted [schema::Block] - GET request\n\nAuthorization: The request header should have Bearer JWT.Token signed with Student Public Key\nQuestions\nThis all sound complicated!\n\nI've drawn inspiration from actual Bitcoin transactions and warp. The simplicity of the system is how little interfaces it has.\nDon't know where to start? Gradecoin uses RESTful API; simple curl commands or even your browser will work! This website can help as well.\nJWT Debugger and the corresponding RFC\nRemember 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?\n\nI found a bug!\nThank you! Please let me know so we can solve it.\nI hacked the server!\nThat 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.\nSubmission?\nAt the end of the simulation, your Gradecoin balance will be your grade. I will also expect a unique client programmed in either;\n\nc\nc++\nperl\nrust\npython\nrandom assortment of bash scripts\n\nIf your favourite programming language is missing please let me know 🤷?\nCan my friends play?\nSadly, no. Student's who are enrolled to the class will receive one-time-passwords for authentication.\nHow and or Why?\n\nBuilt, with Rust\n\n","id":"https://gradecoin.xyz/","title":"Gradecoin"},"https://gradecoin.xyz/block-docs/":{"body":"A block that was proposed to commit Transactions in transaction_list to the\nledger with a nonce that made hash valid; 6 zeroes at the left hand side of the\nhash (24 bytes).\nWe are mining using blake2s algorithm, which produces 256 bit hashes. Hash/second is roughly 20x10^3 on my machine, a new block can be mined in around 4-6 minutes.\nRequests\nGET\nA HTTP GET request to /block endpoint will return the latest mined block.\nPOST\nA HTTP POST request with Authorization using JWT will allow you to propose your own blocks.\nFields\ntransaction_list: [array of Fingerprints]\nnonce: unsigned 32-bit integer\ntimestamp: ISO 8601 &lt;date&gt;T&lt;time&gt;\nhash: String\n\nISO 8601 Reference\n","id":"https://gradecoin.xyz/block-docs/","title":"Blocks"},"https://gradecoin.xyz/jwt/":{"body":"\nJSON Web Tokens are representations of claims, or authorization proofs that fit into the Header of HTTP requests.\n\nHow?\nJWTs are used as the MAC of operations that require authorization:\n\nblock proposal\ntransaction proposal.\n\nThey are send alongside the JSON request body in the Header;\nAuthorization: Bearer aaaaaa.bbbbbb.ccccc\n\nGradecoin uses 3 fields for the JWTs;\n{\n\"tha\": \"Hash of the payload, check invididual references\",\n\"iat\": \"Issued At, Unix Time\",\n\"exp\": \"Expiration Time, epoch\"\n}\n\n\ntha is explained in blocks and transactions documentations.\niat when the JWT was created in Unix Time format\nexp when the JWT will expire &amp; be rejected in Unix Time\n\nAlgorithm\nWe are using RS256, RSASSA-PKCS1-v1_5 using SHA-256. The JWTs you encode with your private RSA key will be decoded using the public key you have authenticated with. You can see how the process works here.\nReferences\n\nRFC, the ultimate reference\nJWT Debugger\n\n","id":"https://gradecoin.xyz/jwt/","title":"JWT"},"https://gradecoin.xyz/register-docs/":{"body":"POST request to /register endpoint\nLets a user to authenticate themselves to the system.\nOnly people who are enrolled to the class can open Gradecoin accounts.\nThis is enforced with your Student ID and a one time password you will receive.\nAuthentication Process\n\nGradecoin's Public Key (gradecoin_public_key) is listed on our Moodle page.\nYou pick a short temporary key (k_temp)\nCreate a JSON object (auth_plaintext) with your metu_id and public key in base64 (PEM) format (S_PK) reference\n\n{\n \"student_id\": \"e12345\",\n \"passwd\": \"15 char secret\",\n \"public_key\": \"---BEGIN PUBLIC KEY...\"\n}\n\n\nPick a random IV.\nEncrypt the serialized string of auth_plaintext with 128 bit block AES in CBC mode with Pkcs7 padding using the temporary key (k_temp), the result is auth_ciphertext. Encode this with base64.\nThe temporary key you have picked k_temp is encrypted using RSA with OAEP padding scheme\nusing SHA-256 with gradecoin_public_key, giving us key_ciphertext. Encode this with base 64.\nThe payload JSON object (auth_request) can be serialized now:\n\n{\n \"c\": \"auth_ciphertext\",\n \"iv\": \"hexadecimal\",\n \"key\": \"key_ciphertext\"\n}\n\nIf your authentication process was valid, you will be given access and your public key fingerprint that is your address.\n","id":"https://gradecoin.xyz/register-docs/","title":"Register"},"https://gradecoin.xyz/transaction-docs/":{"body":"A transaction request between source and target to move amount Gradecoin.\nRequests\nGET\nA HTTP GET request to /transaction endpoint will return the current list of pending transactions.\nPOST\nA HTTP POST request with Authorization using JWT to /transaction will allow you to propose your own transactions.\nFields\nby: Fingerprint\nsource: Fingerprint\ntarget: Fingerprint\namount: unsigned 16 bit integer\ntimestamp: ISO 8601 &lt;date&gt;T&lt;time&gt;\n","id":"https://gradecoin.xyz/transaction-docs/","title":"Transactions"}},"docInfo":{"https://gradecoin.xyz/":{"body":371,"title":1},"https://gradecoin.xyz/block-docs/":{"body":74,"title":1},"https://gradecoin.xyz/jwt/":{"body":96,"title":1},"https://gradecoin.xyz/register-docs/":{"body":121,"title":1},"https://gradecoin.xyz/transaction-docs/":{"body":44,"title":1}},"length":5},"lang":"English"}; \ No newline at end of file
diff --git a/site/public/transaction-docs/index.html b/site/public/transaction-docs/index.html
index 1b85931..6550a96 100644
--- a/site/public/transaction-docs/index.html
+++ b/site/public/transaction-docs/index.html
@@ -66,15 +66,52 @@
66 66
67 67
68 68
69
70 <div class="toc">
71 <div class="toc-sticky">
72
73 <div class="toc-item">
74 <a class="subtext" href="https://gradecoin.xyz/transaction-docs/#requests">Requests</a>
75 </div>
76
77
78 <div class="toc-item-child">
79 <a class="subtext" href="https://gradecoin.xyz/transaction-docs/#get"><small>- GET</small></a>
80 </div>
81
82 <div class="toc-item-child">
83 <a class="subtext" href="https://gradecoin.xyz/transaction-docs/#post"><small>- POST</small></a>
84 </div>
85
86
87
88 <div class="toc-item">
89 <a class="subtext" href="https://gradecoin.xyz/transaction-docs/#fields">Fields</a>
90 </div>
91
92
93 </div>
94 </div>
95
96
69 97
70 <div class="content text"> 98 <div class="content text">
71 99
72<div class="heading-text">Transaction documentation</div> 100<div class="heading-text">Transaction documentation</div>
73<p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod 101<p>A transaction request between <code>source</code> and <code>target</code> to move <code>amount</code> Gradecoin.</p>
74tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At 102<h1 id="requests">Requests</h1>
75vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd 103<h2 id="get">GET</h2>
76ubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.</p> 104<p>A HTTP <code>GET</code> request to <a href="/transaction">/transaction</a> endpoint will return the current list of pending transactions.</p>
77 105<h2 id="post">POST</h2>
106<p>A HTTP <code>POST</code> request with Authorization using JWT to <a href="/transactions">/transaction</a> will allow you to propose your own transactions.</p>
107<h1 id="fields">Fields</h1>
108<pre style="background-color:#ffffff;">
109<code><span style="color:#545052;">by: Fingerprint
110source: Fingerprint
111target: Fingerprint
112amount: unsigned 16 bit integer
113timestamp: ISO 8601 &lt;date&gt;T&lt;time&gt;
114</span></code></pre>
78 115
79 </div> 116 </div>
80 117
diff --git a/src/handlers.rs b/src/handlers.rs
index 7135190..5110bd5 100644
--- a/src/handlers.rs
+++ b/src/handlers.rs
@@ -110,7 +110,7 @@ pub async fn authenticate_user(
110 .expect("failed to decrypt"); 110 .expect("failed to decrypt");
111 111
112 // decrypt c using key dec_key 112 // decrypt c using key dec_key
113 let cipher = Aes128Cbc::new_var(&temp_key, &request.iv).unwrap(); 113 let cipher = Aes128Cbc::new_var(&temp_key, &request.iv.as_bytes()).unwrap();
114 let auth_plaintext = cipher 114 let auth_plaintext = cipher
115 .decrypt_vec(&base64::decode(request.c).unwrap()) 115 .decrypt_vec(&base64::decode(request.c).unwrap())
116 .unwrap(); 116 .unwrap();
diff --git a/src/schema.rs b/src/schema.rs
index af10b4d..33dc301 100644
--- a/src/schema.rs
+++ b/src/schema.rs
@@ -195,7 +195,7 @@ pub struct AuthRequest {
195#[derive(Serialize, Deserialize, Debug)] 195#[derive(Serialize, Deserialize, Debug)]
196pub struct InitialAuthRequest { 196pub struct InitialAuthRequest {
197 pub c: String, 197 pub c: String,
198 pub iv: [u8; 32], 198 pub iv: String,
199 pub key: String, 199 pub key: String,
200} 200}
201 201