├── .env.template
├── .eslintrc.json
├── .github
└── DISCUSSION_TEMPLATE
│ ├── challenge-ideas.yml
│ ├── content-ideas.yml
│ └── solidity-module-ideas.yml
├── .gitignore
├── .prettierrc
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── next.config.mjs
├── package-lock.json
├── package.json
├── postcss.config.js
├── public
├── data
│ └── vyper
│ │ ├── arrays.mdx
│ │ ├── assertions-and-exceptions.mdx
│ │ ├── conditional-statements.mdx
│ │ ├── constants.mdx
│ │ ├── data-types.mdx
│ │ ├── events.mdx
│ │ ├── functions.mdx
│ │ ├── immutable.mdx
│ │ ├── imports.mdx
│ │ ├── interface.mdx
│ │ ├── loops.mdx
│ │ ├── mapping.mdx
│ │ ├── mutability.mdx
│ │ ├── operator.mdx
│ │ ├── re-entrancy-locks.mdx
│ │ ├── reentrancy-locks.mdx
│ │ ├── structs.mdx
│ │ ├── transacting-ether.mdx
│ │ ├── variables.mdx
│ │ └── visibility.mdx
├── favicon.ico
├── heros
│ └── test.jpg
├── images
│ ├── LevelUp.png
│ ├── banner.jpg
│ ├── banner.png
│ ├── challenges
│ │ └── order-route.png
│ ├── coming-soon.png
│ ├── comming_soon.png
│ ├── comming_soon.svg
│ ├── complete-lesson.png
│ ├── content-banner.png
│ ├── content-banner.svg
│ ├── content.json
│ ├── contents
│ │ ├── how-to-fetch-scroll-canvas-badges
│ │ │ ├── diagram.png
│ │ │ └── final-result.png
│ │ ├── matcha.png
│ │ ├── order-route.png
│ │ ├── stablecoins-module0
│ │ │ ├── openzeppelin_wizard.png
│ │ │ ├── scroll_testnet_metamask.png
│ │ │ └── token_hashmap.png
│ │ ├── stablecoins-module1
│ │ │ ├── price_stability.png
│ │ │ └── stablecoin_marketcap.png
│ │ ├── stablecoins-module2
│ │ │ ├── gho_buckets.png
│ │ │ ├── stablecoin_scenario.png
│ │ │ └── stablecoin_users.png
│ │ └── staticcall.png
│ ├── contributing-banner.jpg
│ ├── events.svg
│ ├── events
│ │ ├── alchemy-mini-hack.svg
│ │ ├── eth-argentina.svg
│ │ ├── eth-bkk.svg
│ │ ├── eth-kl.svg
│ │ ├── eth-tokyo.svg
│ │ ├── ethcon.svg
│ │ ├── icon
│ │ │ ├── calendar.svg
│ │ │ └── location.svg
│ │ ├── scroll-open.svg
│ │ └── writers-competition-2024q4.svg
│ ├── funding-banner.png
│ ├── how-it-works
│ │ └── cozy.png
│ ├── landing.png
│ ├── landing.svg
│ ├── landing
│ │ ├── banner.svg
│ │ ├── bg-mobile.png
│ │ ├── bg.png
│ │ ├── hero-mobile.svg
│ │ ├── hero.svg
│ │ ├── landing.png
│ │ └── landing.svg
│ ├── level-up-metadata.png
│ ├── level-up-preview.png
│ ├── podcast-banner.png
│ ├── podcast-banner.svg
│ ├── readme-banner.jpg
│ ├── socials
│ │ ├── telegram.svg
│ │ ├── x.svg
│ │ └── youtube.svg
│ ├── solidity-banner.png
│ ├── solidity-banner.svg
│ ├── solidity
│ │ ├── constants.png
│ │ ├── data-types.png
│ │ ├── operator.png
│ │ └── transacting_ether.png
│ └── warpcast.svg
├── opengraph-image.png
└── twitter-image.png
├── scripts
├── processChallengeMarkdown.js
├── processContentMarkdown.js
├── processEventsMarkdown.js
├── processSolidityMarkdown.js
├── processVyperMarkdown.js
└── turbo-ignore.sh
├── src
├── app
│ ├── _grants
│ │ └── page.tsx
│ ├── _podcast
│ │ ├── List
│ │ │ ├── Category.tsx
│ │ │ └── index.tsx
│ │ └── page.tsx
│ ├── api
│ │ ├── challenge
│ │ │ └── status
│ │ │ │ └── route.ts
│ │ ├── lesson
│ │ │ └── progress
│ │ │ │ └── route.ts
│ │ ├── user
│ │ │ └── profile
│ │ │ │ └── route.ts
│ │ └── utils
│ │ │ └── auth.ts
│ ├── challenges
│ │ ├── List
│ │ │ └── index.tsx
│ │ ├── [slug]
│ │ │ ├── ChallengeHeader.tsx
│ │ │ ├── ChallengeNavigation.tsx
│ │ │ ├── ChallengeStatus.tsx
│ │ │ ├── ChallengeSubmit
│ │ │ │ ├── CodeChallengeSubmit.tsx
│ │ │ │ ├── CodeEditor.tsx
│ │ │ │ ├── PureChallengeSubmit.tsx
│ │ │ │ ├── SuccessAlert.tsx
│ │ │ │ └── index.tsx
│ │ │ ├── ChallengeViewer.tsx
│ │ │ ├── MoreContent.tsx
│ │ │ ├── SubmitAction.tsx
│ │ │ └── page.tsx
│ │ ├── layout.tsx
│ │ ├── page.tsx
│ │ └── submission
│ │ │ └── page.tsx
│ ├── content
│ │ ├── List
│ │ │ ├── CategorySelect.tsx
│ │ │ ├── LevelSelect.tsx
│ │ │ └── index.tsx
│ │ ├── [slug]
│ │ │ ├── Attribution.tsx
│ │ │ ├── ContentViewer
│ │ │ │ └── index.tsx
│ │ │ ├── MoreContent
│ │ │ │ └── index.tsx
│ │ │ └── page.tsx
│ │ ├── content.json
│ │ ├── layout.tsx
│ │ └── page.tsx
│ ├── events
│ │ ├── List
│ │ │ ├── HackathonItem.tsx
│ │ │ └── index.tsx
│ │ ├── [slug]
│ │ │ ├── EventHeader.tsx
│ │ │ ├── EventNavigation.tsx
│ │ │ ├── EventOverview.tsx
│ │ │ ├── EventSection.tsx
│ │ │ ├── EventSubmit.tsx
│ │ │ ├── EventViewer
│ │ │ │ └── index.tsx
│ │ │ ├── page.tsx
│ │ │ ├── register
│ │ │ │ └── page.tsx
│ │ │ └── submit
│ │ │ │ └── page.tsx
│ │ ├── ethcon-korea
│ │ │ ├── [challengeId]
│ │ │ │ ├── ethcon-banner-base64.ts
│ │ │ │ ├── layout.tsx
│ │ │ │ └── page.tsx
│ │ │ ├── actions
│ │ │ │ ├── fetchBase.ts
│ │ │ │ ├── fetchChallengeData.ts
│ │ │ │ ├── fetchFlag.ts
│ │ │ │ ├── fetchScoreboardData.ts
│ │ │ │ ├── fetchUserData.ts
│ │ │ │ ├── fetchUserSolvesData.ts
│ │ │ │ └── index.ts
│ │ │ ├── components
│ │ │ │ ├── AuthWrapper.tsx
│ │ │ │ ├── ErrorMsg.tsx
│ │ │ │ ├── ErrorToastMsg.tsx
│ │ │ │ ├── EthconPageLayout.tsx
│ │ │ │ ├── EthconSectionHeader.tsx
│ │ │ │ ├── JoinButton.tsx
│ │ │ │ ├── LoadingMsg.tsx
│ │ │ │ ├── Score.tsx
│ │ │ │ └── index.tsx
│ │ │ ├── config
│ │ │ │ └── index.js
│ │ │ ├── layout.tsx
│ │ │ ├── page.tsx
│ │ │ └── scoreboard
│ │ │ │ └── page.tsx
│ │ ├── eventsList.json
│ │ ├── layout.tsx
│ │ └── page.tsx
│ ├── global-error.tsx
│ ├── global.ts
│ ├── globals.css
│ ├── layout.tsx
│ ├── loading.tsx
│ ├── not-found.tsx
│ ├── page.tsx
│ ├── profile
│ │ ├── InfoCard
│ │ │ └── index.tsx
│ │ ├── components
│ │ │ ├── AvatarWithOverlay.tsx
│ │ │ └── ProfileModal.tsx
│ │ ├── layout.tsx
│ │ ├── linkedList
│ │ │ ├── LinkedSocialItem.tsx
│ │ │ └── index.tsx
│ │ ├── page.tsx
│ │ └── poapsList
│ │ │ └── index.tsx
│ ├── sitemap.ts
│ ├── solidity
│ │ ├── LessonList
│ │ │ ├── LessonCard.tsx
│ │ │ └── index.tsx
│ │ ├── [slug]
│ │ │ ├── EditorPanel
│ │ │ │ ├── CodeEditor.tsx
│ │ │ │ ├── CongratulationModal.tsx
│ │ │ │ ├── DiffEditor.tsx
│ │ │ │ ├── Editor.tsx
│ │ │ │ ├── ExerciseTabs.tsx
│ │ │ │ ├── SubmitButton.tsx
│ │ │ │ └── index.tsx
│ │ │ ├── LessonNavigation
│ │ │ │ └── index.tsx
│ │ │ ├── LessonProgress
│ │ │ │ └── index.tsx
│ │ │ ├── Teaching
│ │ │ │ └── index.tsx
│ │ │ └── page.tsx
│ │ ├── layout.tsx
│ │ └── page.tsx
│ ├── template.tsx
│ └── vyper
│ │ ├── LessonList
│ │ ├── LessonCard.tsx
│ │ └── index.tsx
│ │ ├── [slug]
│ │ ├── EditorPanel
│ │ │ ├── CodeEditor.tsx
│ │ │ ├── CongratulationModal.tsx
│ │ │ ├── DiffEditor.tsx
│ │ │ ├── Editor.tsx
│ │ │ ├── ExerciseTabs.tsx
│ │ │ ├── SubmitButton.tsx
│ │ │ └── index.tsx
│ │ ├── LessonNavigation
│ │ │ └── index.tsx
│ │ ├── LessonProgress
│ │ │ └── index.tsx
│ │ ├── Teaching
│ │ │ └── index.tsx
│ │ └── page.tsx
│ │ ├── layout.tsx
│ │ ├── markdownData.json
│ │ └── page.tsx
├── assets
│ ├── abis
│ │ ├── L1ETHGateway.json
│ │ ├── L1GasPriceOracle.json
│ │ ├── L1ScrollMessenger.json
│ │ ├── L1StandardERC20Gateway.json
│ │ ├── L1_GATEWAY_ROUTER_PROXY_ADDR.json
│ │ ├── L1_MESSAGE_QUEUE_WITH_GAS_PRICE_ORACLE.json
│ │ ├── L1_erc20ABI.json
│ │ ├── L2ERC20Gateway.json
│ │ ├── L2ETHGateway.json
│ │ ├── L2ScrollMessenger.json
│ │ ├── L2StandardERC20Gateway.json
│ │ ├── L2WETHGateway.json
│ │ ├── L2_GATEWAY_ROUTER_PROXY_ADDR.json
│ │ ├── L2_erc20ABI.json
│ │ ├── ScrollChain.json
│ │ ├── ScrollOriginsNFT.json
│ │ └── ScrollOriginsNFTV2.json
│ ├── blog
│ │ └── contribute-to-scroll.md
│ ├── css
│ │ ├── custom.css
│ │ ├── markdown-level-up-light.css
│ │ └── markdown-level-up.css
│ ├── fonts
│ │ ├── NeueHelvetica-Bold.woff
│ │ ├── NeueHelvetica-Bold.woff2
│ │ ├── NeueHelvetica-Light.woff
│ │ ├── NeueHelvetica-Light.woff2
│ │ ├── NeueHelvetica-Medium.woff
│ │ ├── NeueHelvetica-Medium.woff2
│ │ ├── NeueHelvetica-Regular.woff
│ │ └── NeueHelvetica-Regular.woff2
│ └── svgs
│ │ ├── bridge
│ │ ├── alert-error.svg
│ │ ├── alert-success.svg
│ │ ├── approve-token-selected.svg
│ │ ├── arrow-down.svg
│ │ ├── close.svg
│ │ ├── copy-success.svg
│ │ ├── copy.svg
│ │ ├── disconnect.svg
│ │ ├── edit.svg
│ │ ├── empty.svg
│ │ ├── etherscan.svg
│ │ ├── external-link.svg
│ │ ├── history-disconnected.svg
│ │ ├── history.svg
│ │ ├── info.svg
│ │ ├── network-mainnet.svg
│ │ ├── network-scroll.svg
│ │ ├── praise.svg
│ │ ├── remove.svg
│ │ ├── token-list-close.svg
│ │ ├── token-list-search.svg
│ │ └── warning.svg
│ │ ├── challenge
│ │ ├── completed.svg
│ │ └── success.svg
│ │ ├── common
│ │ ├── arrow-right.svg
│ │ ├── back.svg
│ │ ├── banner.svg
│ │ ├── close-modal.svg
│ │ ├── comming-soon.svg
│ │ ├── external-link.svg
│ │ ├── header-triangle-down.svg
│ │ ├── landing.svg
│ │ ├── no-data.svg
│ │ ├── scroll-logo-icon.svg
│ │ ├── scroll-logo-light.svg
│ │ ├── scroll-logo-m.svg
│ │ ├── scroll-logo.svg
│ │ ├── three-dots.svg
│ │ ├── triangle-down.svg
│ │ ├── triangle-left.svg
│ │ └── widgets.svg
│ │ ├── content
│ │ ├── copy.svg
│ │ ├── link.svg
│ │ ├── mobile-copy.svg
│ │ └── slide.svg
│ │ ├── ecosystem
│ │ ├── arrow.svg
│ │ ├── double-eyes.svg
│ │ ├── empty.svg
│ │ ├── error.svg
│ │ ├── heart.svg
│ │ ├── search.svg
│ │ ├── settings.svg
│ │ └── twitter.svg
│ │ ├── events
│ │ └── star.svg
│ │ ├── header
│ │ ├── arrow.svg
│ │ └── menu.svg
│ │ ├── profile
│ │ ├── email.svg
│ │ ├── github.svg
│ │ ├── google.svg
│ │ ├── link.svg
│ │ ├── telegram.svg
│ │ ├── twitter.svg
│ │ ├── unlink.svg
│ │ ├── upload.svg
│ │ └── wallet.svg
│ │ ├── socials
│ │ ├── telegram.svg
│ │ ├── x.svg
│ │ └── youtube.svg
│ │ ├── solidity
│ │ ├── close.svg
│ │ ├── error.svg
│ │ ├── finish.svg
│ │ ├── left-arrow-mobile.svg
│ │ ├── left-arrow.svg
│ │ ├── right-arrow-mobile.svg
│ │ ├── right-arrow.svg
│ │ ├── success.svg
│ │ ├── twitter.svg
│ │ ├── up.svg
│ │ └── warpcast.svg
│ │ └── wallet-connector
│ │ ├── block.svg
│ │ ├── copy.svg
│ │ ├── disconnect.svg
│ │ ├── down-triangle.svg
│ │ └── wrong-network.svg
├── challenges
│ ├── defi-challenges
│ │ ├── 0x-challenge.mdx
│ │ ├── ERC20.mdx
│ │ ├── simple-lending.mdx
│ │ └── simple-token-swap.mdx
│ ├── solidity
│ │ ├── arrays.mdx
│ │ ├── conditional-statements.mdx
│ │ ├── constants.mdx
│ │ ├── constructor.mdx
│ │ ├── data-location.mdx
│ │ ├── data-types.mdx
│ │ ├── enumerables.mdx
│ │ ├── errors.mdx
│ │ ├── ether-units.mdx
│ │ ├── events.mdx
│ │ ├── fallback.mdx
│ │ ├── function-modifier.mdx
│ │ ├── functions.mdx
│ │ ├── getter-functions.mdx
│ │ ├── immutable.mdx
│ │ ├── loops.mdx
│ │ ├── mapping.mdx
│ │ ├── operator.mdx
│ │ ├── payable.mdx
│ │ ├── struct.mdx
│ │ ├── transacting-ether.mdx
│ │ ├── try-catch.mdx
│ │ ├── validations-and-assertions.mdx
│ │ ├── variables.mdx
│ │ └── visibility.mdx
│ └── vyper
│ │ ├── arrays.mdx
│ │ ├── assertions-and-exceptions.mdx
│ │ ├── conditional-statements.mdx
│ │ ├── constants.mdx
│ │ ├── data-types.mdx
│ │ ├── events.mdx
│ │ ├── functions.mdx
│ │ ├── immutable.mdx
│ │ ├── imports.mdx
│ │ ├── interface.mdx
│ │ ├── loops.mdx
│ │ ├── mapping.mdx
│ │ ├── mutability.mdx
│ │ ├── operator.mdx
│ │ ├── reentrancy-locks.mdx
│ │ ├── structs.mdx
│ │ ├── transacting-ether.mdx
│ │ ├── variables.mdx
│ │ └── visibility.mdx
├── components
│ ├── AnnouncementBar
│ │ └── index.tsx
│ ├── Back
│ │ └── index.tsx
│ ├── Button
│ │ └── index.tsx
│ ├── Card
│ │ └── index.tsx
│ ├── ChallengeButton
│ │ └── index.tsx
│ ├── ComingSoon
│ │ └── index.js
│ ├── CrossDetection
│ │ └── index.tsx
│ ├── EditorTooltip
│ │ └── index.tsx
│ ├── EventsHeader
│ │ └── index.tsx
│ ├── Footer
│ │ └── index.tsx
│ ├── Header
│ │ ├── DesktopHeader.tsx
│ │ ├── MenuTrigger
│ │ │ └── index.tsx
│ │ ├── MobileHeader.tsx
│ │ ├── constants.ts
│ │ ├── index.tsx
│ │ ├── useCheckCustomNavBarBg.tsx
│ │ └── useCheckTheme.tsx
│ ├── HelpAlert
│ │ └── index.tsx
│ ├── MDXCodeHighlighter
│ │ ├── CopyButton.tsx
│ │ └── index.tsx
│ ├── MDXHeaders
│ │ └── index.tsx
│ ├── MDXLayout
│ │ └── index.tsx
│ ├── MarkdownViewer
│ │ ├── MarkdownLoading.tsx
│ │ └── index.tsx
│ ├── MoreContentSlide
│ │ └── index.tsx
│ ├── Navigation
│ │ ├── NavigationWrapper.tsx
│ │ └── index.tsx
│ ├── NoData
│ │ └── index.tsx
│ ├── PageHeaderWrapper
│ │ └── index.tsx
│ ├── PlainSelect
│ │ └── index.tsx
│ ├── ScrollLogo
│ │ └── index.tsx
│ ├── ScrollToTop
│ │ └── index.tsx
│ ├── SectionHeader
│ │ └── index.tsx
│ ├── Select
│ │ └── index.tsx
│ ├── SiteTab
│ │ └── index.tsx
│ ├── TallyForm
│ │ └── index.tsx
│ ├── WalletToolkit
│ │ ├── WalletDropdown.tsx
│ │ └── index.tsx
│ ├── Wrapper
│ │ └── index.tsx
│ └── YoutubeEmbed
│ │ └── index.tsx
├── constants
│ ├── common.ts
│ ├── index.ts
│ ├── layout.ts
│ ├── networks.ts
│ ├── route.ts
│ ├── solidity
│ │ ├── code-exercises.ts
│ │ └── code-solutions.ts
│ └── vyper
│ │ ├── code-exercises.ts
│ │ └── code-solutions.ts
├── contents
│ ├── 0x-on-scroll.mdx
│ ├── build-chance-based-dapp.mdx
│ ├── exploring-solidity-objects-address-part-1.mdx
│ ├── exploring-solidity-objects-address-part-2.mdx
│ ├── guardrail-ai-agents.mdx
│ ├── how-to-fetch-scroll-canvas-badges.mdx
│ ├── huracan.mdx
│ ├── l1sload-guide-read-arrays-mappings-structs.mdx
│ ├── l1sload-guide-read-the-l1-state-from-l2.mdx
│ ├── level-up-foundry.mdx
│ ├── privacy-interfaces-on-soldity-zk-wasm.mdx
│ ├── private-smart-contracts-with-solidity-and-circom.mdx
│ ├── stablecoins-module0.mdx
│ ├── stablecoins-module1.mdx
│ └── stablecoins-module2.mdx
├── contexts
│ ├── MessageProvider.tsx
│ └── providers.tsx
├── events
│ ├── alchemy-mini-hack
│ │ ├── overview.mdx
│ │ └── prizes.mdx
│ └── writers-competition-2024q4
│ │ └── overview.mdx
├── hooks
│ ├── index.ts
│ ├── useAsyncMemo.tsx
│ ├── useCheckViewport.ts
│ ├── useMainBgColor.ts
│ ├── useScrollToTop.ts
│ └── useShowWalletToolkit.tsx
├── middleware.ts
├── stores
│ ├── processStore.ts
│ └── profileStore.ts
├── styles
│ ├── globals.less
│ ├── index.less
│ ├── overrides.less
│ └── variable.less
├── theme
│ ├── dark.tsx
│ ├── editorTheme.ts
│ ├── index.tsx
│ ├── light.tsx
│ ├── markdownCodeViewer.ts
│ └── options.ts
├── types
│ ├── index.d.ts
│ ├── network.d.ts
│ ├── svg.d.ts
│ └── token.d.ts
└── utils
│ ├── common.ts
│ ├── dom.ts
│ ├── format.ts
│ ├── fs.ts
│ ├── index.ts
│ ├── localStorage.ts
│ ├── logger.ts
│ └── route.ts
├── tailwind.config.ts
├── tsconfig.json
├── turbo.json
└── yarn.lock
/.env.template:
--------------------------------------------------------------------------------
1 | NEXT_PUBLIC_PRIVY_APP_ID=""
2 | NEXT_PUBLIC_PRIVY_APP_SECRET=""
3 |
4 |
--------------------------------------------------------------------------------
/.eslintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": ["next/core-web-vitals", "prettier"],
3 | "plugins": ["prettier"],
4 | "rules": {
5 | "prettier/prettier": "error",
6 | "no-template-curly-in-string": "off",
7 | "no-useless-escape": "off",
8 | "no-unused-vars": "warn",
9 | "jsx-a11y/anchor-is-valid": "off",
10 | "no-extend-native": "off",
11 | "no-sequences": "off",
12 | "react-hooks/exhaustive-deps": "off",
13 | "react/jsx-pascal-case": "off"
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/.github/DISCUSSION_TEMPLATE/content-ideas.yml:
--------------------------------------------------------------------------------
1 | title: "🌟 List title of content idea here"
2 | body:
3 | - type: markdown
4 | attributes:
5 | value: |
6 | Example of title: Introduce new category, Combine content ...
7 | - type: textarea
8 | attributes:
9 | label: 🧠 Description
10 | description: Describe your content idea. Include as much details as needed to convey your point. You may include resources, references or examples.
11 | validations:
12 | required: true
13 |
--------------------------------------------------------------------------------
/.github/DISCUSSION_TEMPLATE/solidity-module-ideas.yml:
--------------------------------------------------------------------------------
1 | title: "🌟 List title of Solidity module idea here"
2 | body:
3 | - type: markdown
4 | attributes:
5 | value: |
6 | Example of Solidity module title: Data Types
7 | - type: textarea
8 | attributes:
9 | label: 🧠 Module Overview
10 | description: Briefly describe key topics or concepts that the module will cover. How does this module complement or enhance current offerings? Are there any overlaps with existing modules?
11 | validations:
12 | required: true
13 | - type: textarea
14 | attributes:
15 | label: 📖 Learning Objectives
16 | description: List the specific outcomes for this module. What should participants ideally be able to do upon successful completion?
17 | validations:
18 | required: true
19 | - type: textarea
20 | attributes:
21 | label: 💭 Prerequisite
22 | description: High-level description of the 5 levels of exercises which will be created. (Aim of exercises are to help devs level up their concept/coding proficiency via repetition in progressive difficulty.)
23 | - type: textarea
24 | attributes:
25 | label: 🌐 Resources
26 | description: Are there any resources that you would like to add to support the development of this challenge?
27 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 | .yarn/install-state.gz
8 |
9 | # testing
10 | /coverage
11 |
12 | # next.js
13 | /.next/
14 | /out/
15 |
16 | # production
17 | /build
18 |
19 | # misc
20 | .DS_Store
21 | *.pem
22 |
23 | # debug
24 | npm-debug.log*
25 | yarn-debug.log*
26 | yarn-error.log*
27 |
28 | # local env files
29 | .env
30 | .env*.local
31 | .vscode
32 |
33 | # vercel
34 | .vercel
35 |
36 | # typescript
37 | *.tsbuildinfo
38 | next-env.d.ts
39 |
40 | # data files, generated at `next` dev/build time
41 | /public/data/challenges/
42 | /public/data/solidity/
43 | /public/data/contents/
44 | /public/data/events/
45 | /src/app/content/markdownData.json
46 | /src/app/challenges/markdownData.json
47 | /src/app/events/markdownData.json
48 | /src/app/solidity/markdownData.json
49 |
--------------------------------------------------------------------------------
/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "plugins": ["prettier-plugin-tailwindcss"]
3 | }
4 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2024 Scroll
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | 
2 |
3 | [](https://x.com/levelupweb3)
4 | [](https://t.me/+jbhmyDZ63Vw0ZGYy)
5 |
6 | ## About Level Up
7 |
8 | At the core, Level Up is a one-stop platform to access any online or physical resources (i.e. Level Up Hub) that a developer could want or need in order to succeed in this ecosystem.
9 |
10 | We believe that community-oriented learning aligns with Ethereum ecosystem, and would open more doors for developers to get onboarded into the ecosystem.
11 |
12 | Level Up's North Star is to provide you with the best access to resources and support for beginner to expert Web3 builders around the world to skill up, find jobs, and launch their best ideas.
13 |
14 | ## Getting Started
15 |
16 | The Level Up community believes that the most effective way to learn is through practical experience. So, what are you waiting for? Join us today and begin your journey at [levelup.xyz](https://levelup.xyz)
17 |
--------------------------------------------------------------------------------
/postcss.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | plugins: {
3 | tailwindcss: {},
4 | autoprefixer: {},
5 | },
6 | }
7 |
--------------------------------------------------------------------------------
/public/data/vyper/conditional-statements.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | name: Conditional Statements
3 | index: 13
4 | lesson: 13
5 | summary: Introduction to Vyper conditional statements
6 | labels: ["vyper"]
7 | ---
8 |
9 | # Conditional Statements
10 |
11 | Vyper uses the `if` , `elif`, and `else` statements to control flow for conditional logic.
12 |
13 | Conditions are evaluated from left-to-right, an expression at a time, until the logic is found to be `true` or `false`.
14 |
15 | ```python
16 | # pragma version 0.4.0
17 |
18 | # Notice that the syntax for defining `bool` output must have the words "True" or "False" start with first letter capitalised
19 | @external
20 | @pure
21 | def check_less_than_ten(x: uint256) -> bool:
22 | if (x < 10):
23 | return True
24 | else:
25 | return False
26 |
27 | @external
28 | @pure
29 | def check_multiple_conditions(y: uint256) -> uint256:
30 | if (y < 5):
31 | return 1
32 | elif (y == 5):
33 | return 2
34 | else:
35 | return 3
36 |
37 | @external
38 | @pure
39 | def ternary_syntax(z: uint256) -> bool:
40 | return True if z < 5 else False
41 | ```
42 |
43 |
45 | Vyper Differentiators
46 |
47 |
48 |
54 |
27 | Vyper Differentiators
28 |
29 |
30 |
36 |
42 | Vyper Differentiators
43 |
44 |
45 |
47 |
34 | Vyper Differentiators
35 |
36 |
37 |
39 |
44 | Vyper Differentiators
45 |
46 |
47 |
51 |