├── .editorconfig ├── .gitignore ├── .prettierignore ├── .prettierrc ├── LICENSE ├── README.md ├── buildspec.yaml ├── makefile ├── package.json ├── public ├── favicon.png ├── index.html ├── manifest.json ├── robots.txt └── vs │ ├── base │ └── worker │ │ └── workerMain.js │ └── loader.js ├── src ├── assets │ ├── fonts │ │ └── NotoSans-Regular.ttf │ └── images │ │ ├── asset_a.png │ │ ├── asset_b.png │ │ ├── asset_c.png │ │ ├── asset_d.png │ │ ├── asset_e.png │ │ ├── asset_f.png │ │ └── zilliqa.png ├── components │ ├── chapter-complete-card │ │ ├── __snapshots__ │ │ │ └── index.test.tsx.snap │ │ ├── index.test.tsx │ │ ├── index.tsx │ │ └── style.css │ ├── chapter-list │ │ ├── index.tsx │ │ └── style.css │ ├── cheat-sheet-modal │ │ ├── __snapshots__ │ │ │ └── index.test.tsx.snap │ │ ├── index.test.tsx │ │ ├── index.tsx │ │ └── style.css │ ├── editor-control-panel │ │ └── index.tsx │ ├── editor-diff-viewer │ │ ├── index.tsx │ │ └── style.css │ ├── editor-input │ │ ├── index.tsx │ │ └── style.css │ ├── editor │ │ └── index.tsx │ ├── footer │ │ ├── __snapshots__ │ │ │ └── index.test.tsx.snap │ │ ├── index.test.tsx │ │ ├── index.tsx │ │ └── style.module.css │ ├── header │ │ └── index.tsx │ ├── instruction-viewer │ │ ├── index.tsx │ │ └── style.css │ ├── lesson-navigator │ │ ├── __snapshots__ │ │ │ └── index.test.tsx.snap │ │ ├── index.test.tsx │ │ └── index.tsx │ └── lesson-progressbar │ │ ├── __snapshots__ │ │ └── index.test.tsx.snap │ │ ├── index.test.tsx │ │ ├── index.tsx │ │ └── style.css ├── containers │ ├── chapter-list-container │ │ ├── index.tsx │ │ └── style.css │ ├── home-container │ │ └── index.tsx │ └── lesson-container │ │ └── index.tsx ├── course-codes │ ├── chapter1 │ │ └── index.ts │ ├── chapter2 │ │ └── index.ts │ ├── chapter3 │ │ └── index.ts │ └── index.ts ├── fn-components │ ├── button │ │ ├── __snapshots__ │ │ │ └── index.test.tsx.snap │ │ ├── index.test.tsx │ │ └── index.tsx │ ├── colors.ts │ ├── index.ts │ ├── modal │ │ ├── __snapshots__ │ │ │ └── index.test.tsx.snap │ │ ├── index.test.tsx │ │ └── index.tsx │ └── spinner │ │ ├── __snapshots__ │ │ └── index.test.tsx.snap │ │ ├── index.test.tsx │ │ └── index.tsx ├── index.css ├── index.tsx ├── locales │ └── instructions │ │ ├── en │ │ ├── chapter1 │ │ │ └── index.ts │ │ ├── chapter2 │ │ │ └── index.ts │ │ ├── chapter3 │ │ │ └── index.ts │ │ └── index.ts │ │ └── index.ts ├── react-app-env.d.ts ├── routes.tsx ├── scilla.ts ├── serviceWorker.ts ├── setupTests.ts └── typings.d.ts ├── template.yaml ├── tsconfig.json └── yarn.lock /.editorconfig: -------------------------------------------------------------------------------- 1 | # editorconfig.org 2 | 3 | root = true 4 | 5 | [*] 6 | charset = utf-8 7 | end_of_line = lf 8 | indent_size = 2 9 | indent_style = space 10 | insert_final_newline = true 11 | trim_trailing_whitespace = true 12 | 13 | [*.md] 14 | trim_trailing_whitespace = false 15 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | functions/node_modules 6 | 7 | /.pnp 8 | .pnp.js 9 | 10 | # testing 11 | /coverage 12 | 13 | # production 14 | /build 15 | 16 | # misc 17 | .DS_Store 18 | .env.local 19 | .env.development.local 20 | .env.test.local 21 | .env.production.local 22 | 23 | yarn-debug.log* 24 | yarn-error.log* 25 | 26 | # firebase 27 | .firebase 28 | firebase-debug.log* 29 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | # Build folder and files # 2 | ########################## 3 | build/ 4 | 5 | # Development folders and files # 6 | ################################# 7 | .tmp/ 8 | dist/ 9 | node_modules/ 10 | *.compiled.* 11 | coverage 12 | public 13 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "parser": "typescript", 3 | "printWidth": 100, 4 | "singleQuote": true, 5 | "arrowParens": "always", 6 | "overrides": [ 7 | { 8 | "files": "*.css", 9 | "options": { 10 | "parser": "css" 11 | } 12 | } 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![License][license-svg]][license-url] [![Discord chat][discord-svg]][discord-url] 2 | 3 | # learn-scilla 4 | 5 | An interactive tutorial for people to learn Scilla, Zilliqa’s smart contract language, through a gamification process. 6 | 7 | ## About Scilla 8 | 9 |
76 | You have completed this chapter. 77 |
78 |{`You have completed this chapter.`}
25 |Step by step Interactive Tutorial
40 |70 | A blockchain is a specific type of database that’s not maintained by any one 71 | particular entity, where you can’t change the previously stored data and all new 72 | data is updated one block of entries or transactions at a time under public view and 73 | consensus. In a public blockchain, anybody can choose to maintain the database 74 | correctly as it grows, and are often rewarded to do so by the internal mechanisms of 75 | the established blockchain protocol. This reward is usually in the form of the 76 | digital currency whose balance is maintained in the blockchain database. 77 |
78 |79 | The first digital currency that used blockchain technology to maintain a correct 80 | database of ownership is bitcoin. 81 |
82 |103 | After the advent of the digital currency ‘bitcoin’, the next step was to have a 104 | programmable asset which could be transferred based on predetermined conditions, 105 | rather than human intervention. 106 |
107 |108 | The set of those predetermined conditions and the way to interact with those set of 109 | conditions come together in the form of smart contract. 110 |
111 |112 | More succinctly, in the words of Nick Szabo - who coined the term smart contract - a 113 | smart contract is a set of promises, specified in digital form, including protocols 114 | within which the parties perform on these promises. 115 |
116 |117 | Smart contracts can help mitigate the counterparty risk i.e. helps us transact with 118 | each other without needing to rely on mutual trust or any arbitration parties such 119 | as courts if that trust is perceived to be breached. 120 |
121 |Scilla is a language for writing smart contracts that are safe by design.
133 |134 | Since smart contracts have to deal with digital assets, they are often targeted by 135 | hackers for any flaws in the programming which might allow the hackers to exploit 136 | them. 137 |
138 |139 | Scilla is based on functional programming languages such as OCaml which makes it 140 | more friendly towards static checks and formal verification which can help 141 | programmers make their smart contracts much more secure. 142 |
143 |
165 | We’ll be there with you helping you through a friendly interactive tutorial and a
166 | link to our chat where you can always discuss your doubts.
167 |
168 | Additionally, building with Scilla language can also help you be eligible for a
169 | grant from Scilla.
170 |
171 |
172 | Learn more about it here.
173 |
174 |
175 | Take the first step to become a programmer on blockchain.
176 |