├── README.md ├── frontend ├── day17 │ ├── .env │ ├── .npmrc │ ├── .eslintrc.json │ ├── next-env.d.ts │ ├── next.config.js │ ├── styles │ │ ├── globals.css │ │ └── Home.module.css │ ├── tsconfig.json │ ├── .gitignore │ ├── package.json │ ├── README.md │ └── pages │ │ └── _app.tsx ├── day4 │ ├── .env │ ├── .eslintrc.json │ ├── next.config.js │ ├── postcss.config.js │ ├── src │ │ └── app │ │ │ ├── favicon.ico │ │ │ ├── layout.tsx │ │ │ ├── globals.css │ │ │ └── page.tsx │ ├── README.md │ ├── .gitignore │ ├── tailwind.config.ts │ ├── public │ │ ├── vercel.svg │ │ └── next.svg │ ├── package.json │ └── tsconfig.json ├── day5 │ ├── .env │ ├── .eslintrc.json │ ├── next.config.js │ ├── postcss.config.js │ ├── src │ │ └── app │ │ │ ├── favicon.ico │ │ │ ├── layout.tsx │ │ │ └── globals.css │ ├── README.md │ ├── .gitignore │ ├── tailwind.config.ts │ ├── public │ │ ├── vercel.svg │ │ └── next.svg │ ├── package.json │ └── tsconfig.json ├── day6 │ ├── .env │ ├── .npmrc │ ├── .eslintrc.json │ ├── next-env.d.ts │ ├── next.config.js │ ├── styles │ │ ├── globals.css │ │ └── Home.module.css │ ├── tsconfig.json │ ├── .gitignore │ ├── package.json │ ├── README.md │ └── pages │ │ └── _app.tsx └── day7 │ ├── .env │ ├── .npmrc │ ├── .eslintrc.json │ ├── next-env.d.ts │ ├── next.config.js │ ├── styles │ ├── globals.css │ └── Home.module.css │ ├── tsconfig.json │ ├── .gitignore │ ├── package.json │ ├── README.md │ └── pages │ ├── _app.tsx │ └── signin.tsx ├── mobile ├── day12 │ ├── ios │ │ ├── Flutter │ │ │ ├── Debug.xcconfig │ │ │ ├── Release.xcconfig │ │ │ └── AppFrameworkInfo.plist │ │ ├── Runner │ │ │ ├── Runner-Bridging-Header.h │ │ │ ├── Assets.xcassets │ │ │ │ ├── LaunchImage.imageset │ │ │ │ │ ├── LaunchImage.png │ │ │ │ │ ├── LaunchImage@2x.png │ │ │ │ │ ├── LaunchImage@3x.png │ │ │ │ │ ├── README.md │ │ │ │ │ └── Contents.json │ │ │ │ └── AppIcon.appiconset │ │ │ │ │ ├── Icon-App-20x20@1x.png │ │ │ │ │ ├── Icon-App-20x20@2x.png │ │ │ │ │ ├── Icon-App-20x20@3x.png │ │ │ │ │ ├── Icon-App-29x29@1x.png │ │ │ │ │ ├── Icon-App-29x29@2x.png │ │ │ │ │ ├── Icon-App-29x29@3x.png │ │ │ │ │ ├── Icon-App-40x40@1x.png │ │ │ │ │ ├── Icon-App-40x40@2x.png │ │ │ │ │ ├── Icon-App-40x40@3x.png │ │ │ │ │ ├── Icon-App-60x60@2x.png │ │ │ │ │ ├── Icon-App-60x60@3x.png │ │ │ │ │ ├── Icon-App-76x76@1x.png │ │ │ │ │ ├── Icon-App-76x76@2x.png │ │ │ │ │ ├── Icon-App-1024x1024@1x.png │ │ │ │ │ ├── Icon-App-83.5x83.5@2x.png │ │ │ │ │ └── Contents.json │ │ │ ├── AppDelegate.swift │ │ │ ├── Base.lproj │ │ │ │ ├── Main.storyboard │ │ │ │ └── LaunchScreen.storyboard │ │ │ └── Info.plist │ │ ├── Runner.xcodeproj │ │ │ └── project.xcworkspace │ │ │ │ ├── contents.xcworkspacedata │ │ │ │ └── xcshareddata │ │ │ │ ├── WorkspaceSettings.xcsettings │ │ │ │ └── IDEWorkspaceChecks.plist │ │ ├── Runner.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata │ │ │ │ ├── WorkspaceSettings.xcsettings │ │ │ │ └── IDEWorkspaceChecks.plist │ │ ├── RunnerTests │ │ │ └── RunnerTests.swift │ │ └── .gitignore │ ├── android │ │ ├── gradle.properties │ │ ├── app │ │ │ ├── src │ │ │ │ ├── main │ │ │ │ │ ├── res │ │ │ │ │ │ ├── mipmap-hdpi │ │ │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ │ ├── mipmap-mdpi │ │ │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ │ ├── mipmap-xhdpi │ │ │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ │ ├── mipmap-xxhdpi │ │ │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ │ ├── mipmap-xxxhdpi │ │ │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ │ ├── drawable │ │ │ │ │ │ │ └── launch_background.xml │ │ │ │ │ │ ├── drawable-v21 │ │ │ │ │ │ │ └── launch_background.xml │ │ │ │ │ │ ├── values │ │ │ │ │ │ │ └── styles.xml │ │ │ │ │ │ └── values-night │ │ │ │ │ │ │ └── styles.xml │ │ │ │ │ ├── kotlin │ │ │ │ │ │ └── com │ │ │ │ │ │ │ └── example │ │ │ │ │ │ │ └── wallet │ │ │ │ │ │ │ └── awesome_wallet │ │ │ │ │ │ │ └── MainActivity.kt │ │ │ │ │ └── AndroidManifest.xml │ │ │ │ ├── debug │ │ │ │ │ └── AndroidManifest.xml │ │ │ │ └── profile │ │ │ │ │ └── AndroidManifest.xml │ │ │ └── build.gradle │ │ ├── gradle │ │ │ └── wrapper │ │ │ │ └── gradle-wrapper.properties │ │ ├── .gitignore │ │ ├── settings.gradle │ │ └── build.gradle │ ├── README.md │ ├── pubspec.yaml │ ├── .gitignore │ ├── test │ │ └── widget_test.dart │ ├── cmd │ │ └── test.dart │ ├── analysis_options.yaml │ ├── .metadata │ └── lib │ │ └── tx.dart ├── day13 │ ├── ios │ │ ├── Flutter │ │ │ ├── Debug.xcconfig │ │ │ ├── Release.xcconfig │ │ │ └── AppFrameworkInfo.plist │ │ ├── Runner │ │ │ ├── Runner-Bridging-Header.h │ │ │ ├── Assets.xcassets │ │ │ │ ├── LaunchImage.imageset │ │ │ │ │ ├── LaunchImage.png │ │ │ │ │ ├── LaunchImage@2x.png │ │ │ │ │ ├── LaunchImage@3x.png │ │ │ │ │ ├── README.md │ │ │ │ │ └── Contents.json │ │ │ │ └── AppIcon.appiconset │ │ │ │ │ ├── Icon-App-20x20@1x.png │ │ │ │ │ ├── Icon-App-20x20@2x.png │ │ │ │ │ ├── Icon-App-20x20@3x.png │ │ │ │ │ ├── Icon-App-29x29@1x.png │ │ │ │ │ ├── Icon-App-29x29@2x.png │ │ │ │ │ ├── Icon-App-29x29@3x.png │ │ │ │ │ ├── Icon-App-40x40@1x.png │ │ │ │ │ ├── Icon-App-40x40@2x.png │ │ │ │ │ ├── Icon-App-40x40@3x.png │ │ │ │ │ ├── Icon-App-60x60@2x.png │ │ │ │ │ ├── Icon-App-60x60@3x.png │ │ │ │ │ ├── Icon-App-76x76@1x.png │ │ │ │ │ ├── Icon-App-76x76@2x.png │ │ │ │ │ ├── Icon-App-1024x1024@1x.png │ │ │ │ │ ├── Icon-App-83.5x83.5@2x.png │ │ │ │ │ └── Contents.json │ │ │ ├── AppDelegate.swift │ │ │ ├── Base.lproj │ │ │ │ ├── Main.storyboard │ │ │ │ └── LaunchScreen.storyboard │ │ │ └── Info.plist │ │ ├── Runner.xcodeproj │ │ │ └── project.xcworkspace │ │ │ │ ├── contents.xcworkspacedata │ │ │ │ └── xcshareddata │ │ │ │ ├── WorkspaceSettings.xcsettings │ │ │ │ └── IDEWorkspaceChecks.plist │ │ ├── Runner.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata │ │ │ │ ├── WorkspaceSettings.xcsettings │ │ │ │ └── IDEWorkspaceChecks.plist │ │ ├── RunnerTests │ │ │ └── RunnerTests.swift │ │ └── .gitignore │ ├── android │ │ ├── gradle.properties │ │ ├── app │ │ │ ├── src │ │ │ │ ├── main │ │ │ │ │ ├── res │ │ │ │ │ │ ├── mipmap-hdpi │ │ │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ │ ├── mipmap-mdpi │ │ │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ │ ├── mipmap-xhdpi │ │ │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ │ ├── mipmap-xxhdpi │ │ │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ │ ├── mipmap-xxxhdpi │ │ │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ │ ├── drawable │ │ │ │ │ │ │ └── launch_background.xml │ │ │ │ │ │ ├── drawable-v21 │ │ │ │ │ │ │ └── launch_background.xml │ │ │ │ │ │ ├── values │ │ │ │ │ │ │ └── styles.xml │ │ │ │ │ │ └── values-night │ │ │ │ │ │ │ └── styles.xml │ │ │ │ │ ├── kotlin │ │ │ │ │ │ └── com │ │ │ │ │ │ │ └── example │ │ │ │ │ │ │ └── wallet │ │ │ │ │ │ │ └── awesome_wallet │ │ │ │ │ │ │ └── MainActivity.kt │ │ │ │ │ └── AndroidManifest.xml │ │ │ │ ├── debug │ │ │ │ │ └── AndroidManifest.xml │ │ │ │ └── profile │ │ │ │ │ └── AndroidManifest.xml │ │ │ └── build.gradle │ │ ├── gradle │ │ │ └── wrapper │ │ │ │ └── gradle-wrapper.properties │ │ ├── .gitignore │ │ ├── settings.gradle │ │ └── build.gradle │ ├── README.md │ ├── pubspec.yaml │ ├── .gitignore │ ├── test │ │ └── widget_test.dart │ ├── analysis_options.yaml │ └── .metadata ├── day22 │ ├── ios │ │ ├── Flutter │ │ │ ├── Debug.xcconfig │ │ │ ├── Release.xcconfig │ │ │ └── AppFrameworkInfo.plist │ │ ├── Runner │ │ │ ├── Runner-Bridging-Header.h │ │ │ ├── Assets.xcassets │ │ │ │ ├── LaunchImage.imageset │ │ │ │ │ ├── LaunchImage.png │ │ │ │ │ ├── LaunchImage@2x.png │ │ │ │ │ ├── LaunchImage@3x.png │ │ │ │ │ ├── README.md │ │ │ │ │ └── Contents.json │ │ │ │ └── AppIcon.appiconset │ │ │ │ │ ├── Icon-App-20x20@1x.png │ │ │ │ │ ├── Icon-App-20x20@2x.png │ │ │ │ │ ├── Icon-App-20x20@3x.png │ │ │ │ │ ├── Icon-App-29x29@1x.png │ │ │ │ │ ├── Icon-App-29x29@2x.png │ │ │ │ │ ├── Icon-App-29x29@3x.png │ │ │ │ │ ├── Icon-App-40x40@1x.png │ │ │ │ │ ├── Icon-App-40x40@2x.png │ │ │ │ │ ├── Icon-App-40x40@3x.png │ │ │ │ │ ├── Icon-App-60x60@2x.png │ │ │ │ │ ├── Icon-App-60x60@3x.png │ │ │ │ │ ├── Icon-App-76x76@1x.png │ │ │ │ │ ├── Icon-App-76x76@2x.png │ │ │ │ │ ├── Icon-App-1024x1024@1x.png │ │ │ │ │ ├── Icon-App-83.5x83.5@2x.png │ │ │ │ │ └── Contents.json │ │ │ ├── AppDelegate.swift │ │ │ ├── Base.lproj │ │ │ │ ├── Main.storyboard │ │ │ │ └── LaunchScreen.storyboard │ │ │ └── Info.plist │ │ ├── Runner.xcodeproj │ │ │ └── project.xcworkspace │ │ │ │ ├── contents.xcworkspacedata │ │ │ │ └── xcshareddata │ │ │ │ ├── WorkspaceSettings.xcsettings │ │ │ │ └── IDEWorkspaceChecks.plist │ │ ├── Runner.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata │ │ │ │ ├── WorkspaceSettings.xcsettings │ │ │ │ └── IDEWorkspaceChecks.plist │ │ ├── RunnerTests │ │ │ └── RunnerTests.swift │ │ └── .gitignore │ ├── android │ │ ├── gradle.properties │ │ ├── app │ │ │ ├── src │ │ │ │ ├── main │ │ │ │ │ ├── res │ │ │ │ │ │ ├── mipmap-hdpi │ │ │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ │ ├── mipmap-mdpi │ │ │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ │ ├── mipmap-xhdpi │ │ │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ │ ├── mipmap-xxhdpi │ │ │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ │ ├── mipmap-xxxhdpi │ │ │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ │ ├── drawable │ │ │ │ │ │ │ └── launch_background.xml │ │ │ │ │ │ ├── drawable-v21 │ │ │ │ │ │ │ └── launch_background.xml │ │ │ │ │ │ ├── values │ │ │ │ │ │ │ └── styles.xml │ │ │ │ │ │ └── values-night │ │ │ │ │ │ │ └── styles.xml │ │ │ │ │ ├── kotlin │ │ │ │ │ │ └── com │ │ │ │ │ │ │ └── example │ │ │ │ │ │ │ └── wallet │ │ │ │ │ │ │ └── awesome_wallet │ │ │ │ │ │ │ └── MainActivity.kt │ │ │ │ │ └── AndroidManifest.xml │ │ │ │ ├── debug │ │ │ │ │ └── AndroidManifest.xml │ │ │ │ └── profile │ │ │ │ │ └── AndroidManifest.xml │ │ │ └── build.gradle │ │ ├── gradle │ │ │ └── wrapper │ │ │ │ └── gradle-wrapper.properties │ │ ├── .gitignore │ │ ├── settings.gradle │ │ └── build.gradle │ ├── README.md │ ├── pubspec.yaml │ ├── .gitignore │ ├── test │ │ └── widget_test.dart │ ├── analysis_options.yaml │ └── .metadata ├── day14 │ ├── pubspec.yaml │ ├── .gitignore │ └── ens.dart └── day25 │ ├── lib │ ├── one_inch_tx.dart │ ├── one_inch_quote_response.dart │ ├── one_inch_token.dart │ ├── one_inch_tx.g.dart │ ├── one_inch_quote_response.g.dart │ ├── one_inch_token.g.dart │ └── main.dart │ ├── pubspec.yaml │ └── .gitignore ├── backend ├── day21 │ ├── go.mod │ └── go.sum ├── day10 │ ├── balance_test.go │ ├── go.mod │ ├── balance.go │ └── hd_wallet.go ├── day19 │ ├── solution2 │ │ ├── nonce_pool_test.go │ │ └── nonce_pool.go │ └── go.mod ├── day9 │ ├── go.mod │ ├── verify_test.go │ └── verify.go ├── day20 │ └── go.mod ├── day11 │ └── go.mod └── day18 │ └── go.mod └── go.work /README.md: -------------------------------------------------------------------------------- 1 | # ironman-2023-web3-fullstack 2 | -------------------------------------------------------------------------------- /frontend/day17/.env: -------------------------------------------------------------------------------- 1 | NEXT_PUBLIC_ALCHEMY_KEY=yourKey -------------------------------------------------------------------------------- /frontend/day4/.env: -------------------------------------------------------------------------------- 1 | NEXT_PUBLIC_ALCHEMY_KEY=yourKey -------------------------------------------------------------------------------- /frontend/day5/.env: -------------------------------------------------------------------------------- 1 | NEXT_PUBLIC_ALCHEMY_KEY=yourKey -------------------------------------------------------------------------------- /frontend/day6/.env: -------------------------------------------------------------------------------- 1 | NEXT_PUBLIC_ALCHEMY_KEY=yourKey -------------------------------------------------------------------------------- /frontend/day7/.env: -------------------------------------------------------------------------------- 1 | NEXT_PUBLIC_ALCHEMY_KEY=yourKey -------------------------------------------------------------------------------- /frontend/day17/.npmrc: -------------------------------------------------------------------------------- 1 | strict-peer-dependencies = false 2 | -------------------------------------------------------------------------------- /frontend/day6/.npmrc: -------------------------------------------------------------------------------- 1 | strict-peer-dependencies = false 2 | -------------------------------------------------------------------------------- /frontend/day7/.npmrc: -------------------------------------------------------------------------------- 1 | strict-peer-dependencies = false 2 | -------------------------------------------------------------------------------- /mobile/day12/ios/Flutter/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Generated.xcconfig" 2 | -------------------------------------------------------------------------------- /mobile/day13/ios/Flutter/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Generated.xcconfig" 2 | -------------------------------------------------------------------------------- /mobile/day22/ios/Flutter/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Generated.xcconfig" 2 | -------------------------------------------------------------------------------- /mobile/day12/ios/Flutter/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Generated.xcconfig" 2 | -------------------------------------------------------------------------------- /mobile/day13/ios/Flutter/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Generated.xcconfig" 2 | -------------------------------------------------------------------------------- /mobile/day22/ios/Flutter/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Generated.xcconfig" 2 | -------------------------------------------------------------------------------- /frontend/day17/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "next/core-web-vitals" 3 | } 4 | -------------------------------------------------------------------------------- /frontend/day4/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "next/core-web-vitals" 3 | } 4 | -------------------------------------------------------------------------------- /frontend/day5/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "next/core-web-vitals" 3 | } 4 | -------------------------------------------------------------------------------- /frontend/day6/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "next/core-web-vitals" 3 | } 4 | -------------------------------------------------------------------------------- /frontend/day7/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "next/core-web-vitals" 3 | } 4 | -------------------------------------------------------------------------------- /mobile/day12/ios/Runner/Runner-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | #import "GeneratedPluginRegistrant.h" 2 | -------------------------------------------------------------------------------- /mobile/day13/ios/Runner/Runner-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | #import "GeneratedPluginRegistrant.h" 2 | -------------------------------------------------------------------------------- /mobile/day22/ios/Runner/Runner-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | #import "GeneratedPluginRegistrant.h" 2 | -------------------------------------------------------------------------------- /mobile/day12/android/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx1536M 2 | android.useAndroidX=true 3 | android.enableJetifier=true 4 | -------------------------------------------------------------------------------- /mobile/day13/android/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx1536M 2 | android.useAndroidX=true 3 | android.enableJetifier=true 4 | -------------------------------------------------------------------------------- /mobile/day22/android/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx1536M 2 | android.useAndroidX=true 3 | android.enableJetifier=true 4 | -------------------------------------------------------------------------------- /frontend/day4/next.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('next').NextConfig} */ 2 | const nextConfig = {} 3 | 4 | module.exports = nextConfig 5 | -------------------------------------------------------------------------------- /frontend/day4/postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | } 7 | -------------------------------------------------------------------------------- /frontend/day5/next.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('next').NextConfig} */ 2 | const nextConfig = {} 3 | 4 | module.exports = nextConfig 5 | -------------------------------------------------------------------------------- /frontend/day5/postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | } 7 | -------------------------------------------------------------------------------- /frontend/day4/src/app/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a00012025/ironman-2023-web3-fullstack/HEAD/frontend/day4/src/app/favicon.ico -------------------------------------------------------------------------------- /frontend/day5/src/app/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a00012025/ironman-2023-web3-fullstack/HEAD/frontend/day5/src/app/favicon.ico -------------------------------------------------------------------------------- /backend/day21/go.mod: -------------------------------------------------------------------------------- 1 | module github.com/a00012025/ironman-2023-web3-fullstack/backend/day21 2 | 3 | go 1.19 4 | 5 | require github.com/nanmu42/etherscan-api v1.10.0 6 | -------------------------------------------------------------------------------- /go.work: -------------------------------------------------------------------------------- 1 | go 1.19 2 | 3 | use ( 4 | ./backend/day9 5 | ./backend/day10 6 | ./backend/day11 7 | ./backend/day18 8 | ./backend/day19 9 | ./backend/day20 10 | ./backend/day21 11 | ) 12 | -------------------------------------------------------------------------------- /mobile/day12/android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a00012025/ironman-2023-web3-fullstack/HEAD/mobile/day12/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /mobile/day12/android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a00012025/ironman-2023-web3-fullstack/HEAD/mobile/day12/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /mobile/day13/android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a00012025/ironman-2023-web3-fullstack/HEAD/mobile/day13/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /mobile/day13/android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a00012025/ironman-2023-web3-fullstack/HEAD/mobile/day13/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /mobile/day22/android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a00012025/ironman-2023-web3-fullstack/HEAD/mobile/day22/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /mobile/day22/android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a00012025/ironman-2023-web3-fullstack/HEAD/mobile/day22/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /mobile/day12/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a00012025/ironman-2023-web3-fullstack/HEAD/mobile/day12/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /mobile/day12/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a00012025/ironman-2023-web3-fullstack/HEAD/mobile/day12/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /mobile/day13/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a00012025/ironman-2023-web3-fullstack/HEAD/mobile/day13/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /mobile/day13/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a00012025/ironman-2023-web3-fullstack/HEAD/mobile/day13/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /mobile/day22/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a00012025/ironman-2023-web3-fullstack/HEAD/mobile/day22/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /mobile/day22/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a00012025/ironman-2023-web3-fullstack/HEAD/mobile/day22/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /mobile/day12/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a00012025/ironman-2023-web3-fullstack/HEAD/mobile/day12/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /mobile/day13/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a00012025/ironman-2023-web3-fullstack/HEAD/mobile/day13/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /mobile/day22/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a00012025/ironman-2023-web3-fullstack/HEAD/mobile/day22/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /mobile/day12/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a00012025/ironman-2023-web3-fullstack/HEAD/mobile/day12/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png -------------------------------------------------------------------------------- /mobile/day13/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a00012025/ironman-2023-web3-fullstack/HEAD/mobile/day13/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png -------------------------------------------------------------------------------- /mobile/day22/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a00012025/ironman-2023-web3-fullstack/HEAD/mobile/day22/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png -------------------------------------------------------------------------------- /mobile/day12/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a00012025/ironman-2023-web3-fullstack/HEAD/mobile/day12/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png -------------------------------------------------------------------------------- /mobile/day12/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a00012025/ironman-2023-web3-fullstack/HEAD/mobile/day12/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png -------------------------------------------------------------------------------- /mobile/day12/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a00012025/ironman-2023-web3-fullstack/HEAD/mobile/day12/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png -------------------------------------------------------------------------------- /mobile/day12/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a00012025/ironman-2023-web3-fullstack/HEAD/mobile/day12/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png -------------------------------------------------------------------------------- /mobile/day12/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a00012025/ironman-2023-web3-fullstack/HEAD/mobile/day12/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png -------------------------------------------------------------------------------- /mobile/day12/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a00012025/ironman-2023-web3-fullstack/HEAD/mobile/day12/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png -------------------------------------------------------------------------------- /mobile/day12/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a00012025/ironman-2023-web3-fullstack/HEAD/mobile/day12/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png -------------------------------------------------------------------------------- /mobile/day12/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a00012025/ironman-2023-web3-fullstack/HEAD/mobile/day12/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png -------------------------------------------------------------------------------- /mobile/day12/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a00012025/ironman-2023-web3-fullstack/HEAD/mobile/day12/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png -------------------------------------------------------------------------------- /mobile/day12/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a00012025/ironman-2023-web3-fullstack/HEAD/mobile/day12/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png -------------------------------------------------------------------------------- /mobile/day12/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a00012025/ironman-2023-web3-fullstack/HEAD/mobile/day12/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png -------------------------------------------------------------------------------- /mobile/day12/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a00012025/ironman-2023-web3-fullstack/HEAD/mobile/day12/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png -------------------------------------------------------------------------------- /mobile/day12/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a00012025/ironman-2023-web3-fullstack/HEAD/mobile/day12/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png -------------------------------------------------------------------------------- /mobile/day12/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a00012025/ironman-2023-web3-fullstack/HEAD/mobile/day12/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png -------------------------------------------------------------------------------- /mobile/day12/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a00012025/ironman-2023-web3-fullstack/HEAD/mobile/day12/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png -------------------------------------------------------------------------------- /mobile/day13/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a00012025/ironman-2023-web3-fullstack/HEAD/mobile/day13/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png -------------------------------------------------------------------------------- /mobile/day13/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a00012025/ironman-2023-web3-fullstack/HEAD/mobile/day13/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png -------------------------------------------------------------------------------- /mobile/day13/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a00012025/ironman-2023-web3-fullstack/HEAD/mobile/day13/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png -------------------------------------------------------------------------------- /mobile/day13/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a00012025/ironman-2023-web3-fullstack/HEAD/mobile/day13/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png -------------------------------------------------------------------------------- /mobile/day13/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a00012025/ironman-2023-web3-fullstack/HEAD/mobile/day13/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png -------------------------------------------------------------------------------- /mobile/day13/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a00012025/ironman-2023-web3-fullstack/HEAD/mobile/day13/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png -------------------------------------------------------------------------------- /mobile/day13/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a00012025/ironman-2023-web3-fullstack/HEAD/mobile/day13/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png -------------------------------------------------------------------------------- /mobile/day13/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a00012025/ironman-2023-web3-fullstack/HEAD/mobile/day13/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png -------------------------------------------------------------------------------- /mobile/day13/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a00012025/ironman-2023-web3-fullstack/HEAD/mobile/day13/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png -------------------------------------------------------------------------------- /mobile/day13/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a00012025/ironman-2023-web3-fullstack/HEAD/mobile/day13/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png -------------------------------------------------------------------------------- /mobile/day13/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a00012025/ironman-2023-web3-fullstack/HEAD/mobile/day13/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png -------------------------------------------------------------------------------- /mobile/day13/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a00012025/ironman-2023-web3-fullstack/HEAD/mobile/day13/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png -------------------------------------------------------------------------------- /mobile/day13/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a00012025/ironman-2023-web3-fullstack/HEAD/mobile/day13/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png -------------------------------------------------------------------------------- /mobile/day13/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a00012025/ironman-2023-web3-fullstack/HEAD/mobile/day13/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png -------------------------------------------------------------------------------- /mobile/day13/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a00012025/ironman-2023-web3-fullstack/HEAD/mobile/day13/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png -------------------------------------------------------------------------------- /mobile/day22/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a00012025/ironman-2023-web3-fullstack/HEAD/mobile/day22/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png -------------------------------------------------------------------------------- /mobile/day22/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a00012025/ironman-2023-web3-fullstack/HEAD/mobile/day22/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png -------------------------------------------------------------------------------- /mobile/day22/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a00012025/ironman-2023-web3-fullstack/HEAD/mobile/day22/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png -------------------------------------------------------------------------------- /mobile/day22/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a00012025/ironman-2023-web3-fullstack/HEAD/mobile/day22/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png -------------------------------------------------------------------------------- /mobile/day22/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a00012025/ironman-2023-web3-fullstack/HEAD/mobile/day22/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png -------------------------------------------------------------------------------- /mobile/day22/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a00012025/ironman-2023-web3-fullstack/HEAD/mobile/day22/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png -------------------------------------------------------------------------------- /mobile/day22/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a00012025/ironman-2023-web3-fullstack/HEAD/mobile/day22/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png -------------------------------------------------------------------------------- /mobile/day22/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a00012025/ironman-2023-web3-fullstack/HEAD/mobile/day22/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png -------------------------------------------------------------------------------- /mobile/day22/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a00012025/ironman-2023-web3-fullstack/HEAD/mobile/day22/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png -------------------------------------------------------------------------------- /mobile/day22/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a00012025/ironman-2023-web3-fullstack/HEAD/mobile/day22/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png -------------------------------------------------------------------------------- /mobile/day22/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a00012025/ironman-2023-web3-fullstack/HEAD/mobile/day22/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png -------------------------------------------------------------------------------- /mobile/day22/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a00012025/ironman-2023-web3-fullstack/HEAD/mobile/day22/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png -------------------------------------------------------------------------------- /mobile/day22/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a00012025/ironman-2023-web3-fullstack/HEAD/mobile/day22/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png -------------------------------------------------------------------------------- /mobile/day22/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a00012025/ironman-2023-web3-fullstack/HEAD/mobile/day22/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png -------------------------------------------------------------------------------- /mobile/day22/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a00012025/ironman-2023-web3-fullstack/HEAD/mobile/day22/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png -------------------------------------------------------------------------------- /mobile/day12/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /mobile/day12/ios/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /mobile/day12/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a00012025/ironman-2023-web3-fullstack/HEAD/mobile/day12/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png -------------------------------------------------------------------------------- /mobile/day12/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a00012025/ironman-2023-web3-fullstack/HEAD/mobile/day12/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png -------------------------------------------------------------------------------- /mobile/day13/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /mobile/day13/ios/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /mobile/day13/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a00012025/ironman-2023-web3-fullstack/HEAD/mobile/day13/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png -------------------------------------------------------------------------------- /mobile/day13/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a00012025/ironman-2023-web3-fullstack/HEAD/mobile/day13/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png -------------------------------------------------------------------------------- /mobile/day22/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /mobile/day22/ios/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /mobile/day22/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a00012025/ironman-2023-web3-fullstack/HEAD/mobile/day22/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png -------------------------------------------------------------------------------- /mobile/day22/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/a00012025/ironman-2023-web3-fullstack/HEAD/mobile/day22/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png -------------------------------------------------------------------------------- /frontend/day6/next-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | 4 | // NOTE: This file should not be edited 5 | // see https://nextjs.org/docs/basic-features/typescript for more information. 6 | -------------------------------------------------------------------------------- /frontend/day7/next-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | 4 | // NOTE: This file should not be edited 5 | // see https://nextjs.org/docs/basic-features/typescript for more information. 6 | -------------------------------------------------------------------------------- /frontend/day17/next-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | 4 | // NOTE: This file should not be edited 5 | // see https://nextjs.org/docs/basic-features/typescript for more information. 6 | -------------------------------------------------------------------------------- /mobile/day12/android/app/src/main/kotlin/com/example/wallet/awesome_wallet/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package com.example.wallet.awesome_wallet 2 | 3 | import io.flutter.embedding.android.FlutterActivity 4 | 5 | class MainActivity: FlutterActivity() { 6 | } 7 | -------------------------------------------------------------------------------- /mobile/day13/android/app/src/main/kotlin/com/example/wallet/awesome_wallet/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package com.example.wallet.awesome_wallet 2 | 3 | import io.flutter.embedding.android.FlutterActivity 4 | 5 | class MainActivity: FlutterActivity() { 6 | } 7 | -------------------------------------------------------------------------------- /mobile/day22/android/app/src/main/kotlin/com/example/wallet/awesome_wallet/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package com.example.wallet.awesome_wallet 2 | 3 | import io.flutter.embedding.android.FlutterActivity 4 | 5 | class MainActivity: FlutterActivity() { 6 | } 7 | -------------------------------------------------------------------------------- /mobile/day12/android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | zipStoreBase=GRADLE_USER_HOME 4 | zipStorePath=wrapper/dists 5 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip 6 | -------------------------------------------------------------------------------- /mobile/day13/android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | zipStoreBase=GRADLE_USER_HOME 4 | zipStorePath=wrapper/dists 5 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip 6 | -------------------------------------------------------------------------------- /mobile/day22/android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | zipStoreBase=GRADLE_USER_HOME 4 | zipStorePath=wrapper/dists 5 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip 6 | -------------------------------------------------------------------------------- /backend/day10/balance_test.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "testing" 5 | 6 | "github.com/stretchr/testify/assert" 7 | ) 8 | 9 | func TestGetWalletBalance(t *testing.T) { 10 | GetWalletBalance("0x4Ed97d6470f5121a8E02498eA37A50987DA0eEC0") 11 | assert.True(t, true) 12 | } 13 | -------------------------------------------------------------------------------- /frontend/day17/next.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('next').NextConfig} */ 2 | const nextConfig = { 3 | reactStrictMode: true, 4 | webpack: config => { 5 | config.resolve.fallback = { fs: false, net: false, tls: false }; 6 | return config; 7 | }, 8 | }; 9 | 10 | module.exports = nextConfig; 11 | -------------------------------------------------------------------------------- /frontend/day6/next.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('next').NextConfig} */ 2 | const nextConfig = { 3 | reactStrictMode: true, 4 | webpack: config => { 5 | config.resolve.fallback = { fs: false, net: false, tls: false }; 6 | return config; 7 | }, 8 | }; 9 | 10 | module.exports = nextConfig; 11 | -------------------------------------------------------------------------------- /frontend/day7/next.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('next').NextConfig} */ 2 | const nextConfig = { 3 | reactStrictMode: true, 4 | webpack: config => { 5 | config.resolve.fallback = { fs: false, net: false, tls: false }; 6 | return config; 7 | }, 8 | }; 9 | 10 | module.exports = nextConfig; 11 | -------------------------------------------------------------------------------- /mobile/day12/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /mobile/day13/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /mobile/day22/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /mobile/day12/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /mobile/day13/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /mobile/day22/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /mobile/day12/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /mobile/day13/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /mobile/day22/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /frontend/day4/README.md: -------------------------------------------------------------------------------- 1 | This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app). 2 | 3 | ## Getting Started 4 | 5 | First, run the development server: 6 | 7 | ```bash 8 | npm run dev 9 | # or 10 | yarn dev 11 | # or 12 | pnpm dev 13 | ``` 14 | -------------------------------------------------------------------------------- /frontend/day5/README.md: -------------------------------------------------------------------------------- 1 | This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app). 2 | 3 | ## Getting Started 4 | 5 | First, run the development server: 6 | 7 | ```bash 8 | npm run dev 9 | # or 10 | yarn dev 11 | # or 12 | pnpm dev 13 | ``` 14 | -------------------------------------------------------------------------------- /mobile/day12/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /mobile/day13/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /mobile/day22/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /mobile/day12/android/.gitignore: -------------------------------------------------------------------------------- 1 | gradle-wrapper.jar 2 | /.gradle 3 | /captures/ 4 | /gradlew 5 | /gradlew.bat 6 | /local.properties 7 | GeneratedPluginRegistrant.java 8 | 9 | # Remember to never publicly share your keystore. 10 | # See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app 11 | key.properties 12 | **/*.keystore 13 | **/*.jks 14 | -------------------------------------------------------------------------------- /mobile/day13/android/.gitignore: -------------------------------------------------------------------------------- 1 | gradle-wrapper.jar 2 | /.gradle 3 | /captures/ 4 | /gradlew 5 | /gradlew.bat 6 | /local.properties 7 | GeneratedPluginRegistrant.java 8 | 9 | # Remember to never publicly share your keystore. 10 | # See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app 11 | key.properties 12 | **/*.keystore 13 | **/*.jks 14 | -------------------------------------------------------------------------------- /mobile/day22/android/.gitignore: -------------------------------------------------------------------------------- 1 | gradle-wrapper.jar 2 | /.gradle 3 | /captures/ 4 | /gradlew 5 | /gradlew.bat 6 | /local.properties 7 | GeneratedPluginRegistrant.java 8 | 9 | # Remember to never publicly share your keystore. 10 | # See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app 11 | key.properties 12 | **/*.keystore 13 | **/*.jks 14 | -------------------------------------------------------------------------------- /frontend/day6/styles/globals.css: -------------------------------------------------------------------------------- 1 | html, 2 | body { 3 | padding: 0; 4 | margin: 0; 5 | font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, 6 | Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; 7 | } 8 | 9 | a { 10 | color: inherit; 11 | text-decoration: none; 12 | } 13 | 14 | * { 15 | box-sizing: border-box; 16 | } 17 | -------------------------------------------------------------------------------- /frontend/day7/styles/globals.css: -------------------------------------------------------------------------------- 1 | html, 2 | body { 3 | padding: 0; 4 | margin: 0; 5 | font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, 6 | Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; 7 | } 8 | 9 | a { 10 | color: inherit; 11 | text-decoration: none; 12 | } 13 | 14 | * { 15 | box-sizing: border-box; 16 | } 17 | -------------------------------------------------------------------------------- /frontend/day17/styles/globals.css: -------------------------------------------------------------------------------- 1 | html, 2 | body { 3 | padding: 0; 4 | margin: 0; 5 | font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, 6 | Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; 7 | } 8 | 9 | a { 10 | color: inherit; 11 | text-decoration: none; 12 | } 13 | 14 | * { 15 | box-sizing: border-box; 16 | } 17 | -------------------------------------------------------------------------------- /mobile/day12/ios/RunnerTests/RunnerTests.swift: -------------------------------------------------------------------------------- 1 | import Flutter 2 | import UIKit 3 | import XCTest 4 | 5 | class RunnerTests: XCTestCase { 6 | 7 | func testExample() { 8 | // If you add code to the Runner application, consider adding tests here. 9 | // See https://developer.apple.com/documentation/xctest for more information about using XCTest. 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /mobile/day13/ios/RunnerTests/RunnerTests.swift: -------------------------------------------------------------------------------- 1 | import Flutter 2 | import UIKit 3 | import XCTest 4 | 5 | class RunnerTests: XCTestCase { 6 | 7 | func testExample() { 8 | // If you add code to the Runner application, consider adding tests here. 9 | // See https://developer.apple.com/documentation/xctest for more information about using XCTest. 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /mobile/day22/ios/RunnerTests/RunnerTests.swift: -------------------------------------------------------------------------------- 1 | import Flutter 2 | import UIKit 3 | import XCTest 4 | 5 | class RunnerTests: XCTestCase { 6 | 7 | func testExample() { 8 | // If you add code to the Runner application, consider adding tests here. 9 | // See https://developer.apple.com/documentation/xctest for more information about using XCTest. 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /mobile/day12/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md: -------------------------------------------------------------------------------- 1 | # Launch Screen Assets 2 | 3 | You can customize the launch screen with your own desired assets by replacing the image files in this directory. 4 | 5 | You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. -------------------------------------------------------------------------------- /mobile/day13/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md: -------------------------------------------------------------------------------- 1 | # Launch Screen Assets 2 | 3 | You can customize the launch screen with your own desired assets by replacing the image files in this directory. 4 | 5 | You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. -------------------------------------------------------------------------------- /mobile/day22/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md: -------------------------------------------------------------------------------- 1 | # Launch Screen Assets 2 | 3 | You can customize the launch screen with your own desired assets by replacing the image files in this directory. 4 | 5 | You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. -------------------------------------------------------------------------------- /mobile/day12/android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /mobile/day12/android/app/src/profile/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /mobile/day13/android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /mobile/day13/android/app/src/profile/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /mobile/day22/android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /mobile/day22/android/app/src/profile/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /backend/day21/go.sum: -------------------------------------------------------------------------------- 1 | github.com/google/go-cmp v0.5.7 h1:81/ik6ipDQS2aGcBfIN5dHDB36BwrStyeAQquSYCV4o= 2 | github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= 3 | github.com/nanmu42/etherscan-api v1.10.0 h1:8lAwKbaHEVzXK+cbLaApxbmp4Kai12WKEcY9CxqxKbY= 4 | github.com/nanmu42/etherscan-api v1.10.0/go.mod h1:P8oAUxbYfsdfGXQnHCgjTDs4YbmasUVCtYAYc4rrZ5w= 5 | golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 6 | -------------------------------------------------------------------------------- /mobile/day12/ios/Runner/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | import Flutter 3 | 4 | @UIApplicationMain 5 | @objc class AppDelegate: FlutterAppDelegate { 6 | override func application( 7 | _ application: UIApplication, 8 | didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? 9 | ) -> Bool { 10 | GeneratedPluginRegistrant.register(with: self) 11 | return super.application(application, didFinishLaunchingWithOptions: launchOptions) 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /mobile/day13/ios/Runner/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | import Flutter 3 | 4 | @UIApplicationMain 5 | @objc class AppDelegate: FlutterAppDelegate { 6 | override func application( 7 | _ application: UIApplication, 8 | didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? 9 | ) -> Bool { 10 | GeneratedPluginRegistrant.register(with: self) 11 | return super.application(application, didFinishLaunchingWithOptions: launchOptions) 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /mobile/day22/ios/Runner/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | import Flutter 3 | 4 | @UIApplicationMain 5 | @objc class AppDelegate: FlutterAppDelegate { 6 | override func application( 7 | _ application: UIApplication, 8 | didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? 9 | ) -> Bool { 10 | GeneratedPluginRegistrant.register(with: self) 11 | return super.application(application, didFinishLaunchingWithOptions: launchOptions) 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /mobile/day14/pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: awesome_wallet 2 | description: A new Flutter project. 3 | publish_to: "none" # Remove this line if you wish to publish to pub.dev 4 | version: 1.0.0+1 5 | environment: 6 | sdk: ">=3.0.5 <4.0.0" 7 | 8 | dependencies: 9 | bip39: ^1.0.6 10 | hex: ^0.2.0 11 | http: ^0.13.6 12 | web3dart: 13 | git: 14 | url: https://github.com/kryptogo/web3dart.git 15 | ref: main 16 | ens_dart: 17 | git: 18 | url: https://github.com/kryptogo/ens_dart.git 19 | ref: master 20 | -------------------------------------------------------------------------------- /mobile/day12/android/settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' 2 | 3 | def localPropertiesFile = new File(rootProject.projectDir, "local.properties") 4 | def properties = new Properties() 5 | 6 | assert localPropertiesFile.exists() 7 | localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } 8 | 9 | def flutterSdkPath = properties.getProperty("flutter.sdk") 10 | assert flutterSdkPath != null, "flutter.sdk not set in local.properties" 11 | apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" 12 | -------------------------------------------------------------------------------- /mobile/day13/android/settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' 2 | 3 | def localPropertiesFile = new File(rootProject.projectDir, "local.properties") 4 | def properties = new Properties() 5 | 6 | assert localPropertiesFile.exists() 7 | localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } 8 | 9 | def flutterSdkPath = properties.getProperty("flutter.sdk") 10 | assert flutterSdkPath != null, "flutter.sdk not set in local.properties" 11 | apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" 12 | -------------------------------------------------------------------------------- /mobile/day22/android/settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' 2 | 3 | def localPropertiesFile = new File(rootProject.projectDir, "local.properties") 4 | def properties = new Properties() 5 | 6 | assert localPropertiesFile.exists() 7 | localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } 8 | 9 | def flutterSdkPath = properties.getProperty("flutter.sdk") 10 | assert flutterSdkPath != null, "flutter.sdk not set in local.properties" 11 | apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" 12 | -------------------------------------------------------------------------------- /mobile/day12/android/app/src/main/res/drawable/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /mobile/day13/android/app/src/main/res/drawable/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /mobile/day22/android/app/src/main/res/drawable/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /frontend/day4/.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 | 8 | # testing 9 | /coverage 10 | 11 | # next.js 12 | /.next/ 13 | /out/ 14 | 15 | # production 16 | /build 17 | 18 | # misc 19 | .DS_Store 20 | *.pem 21 | 22 | # debug 23 | npm-debug.log* 24 | yarn-debug.log* 25 | yarn-error.log* 26 | 27 | # local env files 28 | .env*.local 29 | 30 | # vercel 31 | .vercel 32 | 33 | # typescript 34 | *.tsbuildinfo 35 | next-env.d.ts 36 | -------------------------------------------------------------------------------- /frontend/day5/.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 | 8 | # testing 9 | /coverage 10 | 11 | # next.js 12 | /.next/ 13 | /out/ 14 | 15 | # production 16 | /build 17 | 18 | # misc 19 | .DS_Store 20 | *.pem 21 | 22 | # debug 23 | npm-debug.log* 24 | yarn-debug.log* 25 | yarn-error.log* 26 | 27 | # local env files 28 | .env*.local 29 | 30 | # vercel 31 | .vercel 32 | 33 | # typescript 34 | *.tsbuildinfo 35 | next-env.d.ts 36 | -------------------------------------------------------------------------------- /mobile/day12/android/app/src/main/res/drawable-v21/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /mobile/day13/android/app/src/main/res/drawable-v21/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /mobile/day22/android/app/src/main/res/drawable-v21/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /mobile/day12/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "LaunchImage.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "LaunchImage@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "LaunchImage@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /mobile/day13/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "LaunchImage.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "LaunchImage@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "LaunchImage@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /mobile/day22/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "LaunchImage.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "LaunchImage@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "LaunchImage@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /mobile/day25/lib/one_inch_tx.dart: -------------------------------------------------------------------------------- 1 | import 'package:freezed_annotation/freezed_annotation.dart'; 2 | 3 | part 'one_inch_tx.freezed.dart'; 4 | part 'one_inch_tx.g.dart'; 5 | 6 | @freezed 7 | class OneInchTx with _$OneInchTx { 8 | factory OneInchTx({ 9 | required String from, 10 | required String to, 11 | required String data, 12 | required String value, 13 | required int gas, 14 | required String gasPrice, 15 | }) = _OneInchTx; 16 | 17 | factory OneInchTx.fromJson(Map json) => 18 | _$OneInchTxFromJson(json); 19 | } 20 | -------------------------------------------------------------------------------- /frontend/day4/src/app/layout.tsx: -------------------------------------------------------------------------------- 1 | import './globals.css' 2 | import type { Metadata } from 'next' 3 | import { Inter } from 'next/font/google' 4 | 5 | const inter = Inter({ subsets: ['latin'] }) 6 | 7 | export const metadata: Metadata = { 8 | title: 'Create Next App', 9 | description: 'Generated by create next app', 10 | } 11 | 12 | export default function RootLayout({ 13 | children, 14 | }: { 15 | children: React.ReactNode 16 | }) { 17 | return ( 18 | 19 | {children} 20 | 21 | ) 22 | } 23 | -------------------------------------------------------------------------------- /frontend/day5/src/app/layout.tsx: -------------------------------------------------------------------------------- 1 | import './globals.css' 2 | import type { Metadata } from 'next' 3 | import { Inter } from 'next/font/google' 4 | 5 | const inter = Inter({ subsets: ['latin'] }) 6 | 7 | export const metadata: Metadata = { 8 | title: 'Create Next App', 9 | description: 'Generated by create next app', 10 | } 11 | 12 | export default function RootLayout({ 13 | children, 14 | }: { 15 | children: React.ReactNode 16 | }) { 17 | return ( 18 | 19 | {children} 20 | 21 | ) 22 | } 23 | -------------------------------------------------------------------------------- /mobile/day25/pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: awesome_wallet 2 | description: A new Flutter project. 3 | publish_to: "none" # Remove this line if you wish to publish to pub.dev 4 | version: 1.0.0+1 5 | environment: 6 | sdk: ">=3.0.5 <4.0.0" 7 | 8 | dependencies: 9 | bip39: ^1.0.6 10 | dio: ^5.3.3 11 | hex: ^0.2.0 12 | http: ^0.13.6 13 | web3dart: 14 | git: 15 | url: https://github.com/kryptogo/web3dart.git 16 | ref: main 17 | freezed_annotation: ^2.4.1 18 | json_annotation: ^4.8.1 19 | 20 | dev_dependencies: 21 | build_runner: ^2.4.6 22 | freezed: ^2.4.3 23 | json_serializable: ^6.7.1 24 | -------------------------------------------------------------------------------- /frontend/day17/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es2020", 4 | "lib": ["dom", "dom.iterable", "esnext"], 5 | "allowJs": true, 6 | "skipLibCheck": true, 7 | "strict": true, 8 | "forceConsistentCasingInFileNames": true, 9 | "noEmit": true, 10 | "esModuleInterop": true, 11 | "module": "esnext", 12 | "moduleResolution": "node", 13 | "resolveJsonModule": true, 14 | "isolatedModules": true, 15 | "jsx": "preserve", 16 | "incremental": true 17 | }, 18 | "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"], 19 | "exclude": ["node_modules"] 20 | } 21 | -------------------------------------------------------------------------------- /frontend/day4/tailwind.config.ts: -------------------------------------------------------------------------------- 1 | import type { Config } from 'tailwindcss' 2 | 3 | const config: Config = { 4 | content: [ 5 | './src/pages/**/*.{js,ts,jsx,tsx,mdx}', 6 | './src/components/**/*.{js,ts,jsx,tsx,mdx}', 7 | './src/app/**/*.{js,ts,jsx,tsx,mdx}', 8 | ], 9 | theme: { 10 | extend: { 11 | backgroundImage: { 12 | 'gradient-radial': 'radial-gradient(var(--tw-gradient-stops))', 13 | 'gradient-conic': 14 | 'conic-gradient(from 180deg at 50% 50%, var(--tw-gradient-stops))', 15 | }, 16 | }, 17 | }, 18 | plugins: [], 19 | } 20 | export default config 21 | -------------------------------------------------------------------------------- /frontend/day5/tailwind.config.ts: -------------------------------------------------------------------------------- 1 | import type { Config } from 'tailwindcss' 2 | 3 | const config: Config = { 4 | content: [ 5 | './src/pages/**/*.{js,ts,jsx,tsx,mdx}', 6 | './src/components/**/*.{js,ts,jsx,tsx,mdx}', 7 | './src/app/**/*.{js,ts,jsx,tsx,mdx}', 8 | ], 9 | theme: { 10 | extend: { 11 | backgroundImage: { 12 | 'gradient-radial': 'radial-gradient(var(--tw-gradient-stops))', 13 | 'gradient-conic': 14 | 'conic-gradient(from 180deg at 50% 50%, var(--tw-gradient-stops))', 15 | }, 16 | }, 17 | }, 18 | plugins: [], 19 | } 20 | export default config 21 | -------------------------------------------------------------------------------- /frontend/day6/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es2020", 4 | "lib": ["dom", "dom.iterable", "esnext"], 5 | "allowJs": true, 6 | "skipLibCheck": true, 7 | "strict": true, 8 | "forceConsistentCasingInFileNames": true, 9 | "noEmit": true, 10 | "esModuleInterop": true, 11 | "module": "esnext", 12 | "moduleResolution": "node", 13 | "resolveJsonModule": true, 14 | "isolatedModules": true, 15 | "jsx": "preserve", 16 | "incremental": true 17 | }, 18 | "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"], 19 | "exclude": ["node_modules"] 20 | } 21 | -------------------------------------------------------------------------------- /frontend/day7/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es2020", 4 | "lib": ["dom", "dom.iterable", "esnext"], 5 | "allowJs": true, 6 | "skipLibCheck": true, 7 | "strict": true, 8 | "forceConsistentCasingInFileNames": true, 9 | "noEmit": true, 10 | "esModuleInterop": true, 11 | "module": "esnext", 12 | "moduleResolution": "node", 13 | "resolveJsonModule": true, 14 | "isolatedModules": true, 15 | "jsx": "preserve", 16 | "incremental": true 17 | }, 18 | "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"], 19 | "exclude": ["node_modules"] 20 | } 21 | -------------------------------------------------------------------------------- /frontend/day17/.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 | 8 | # testing 9 | /coverage 10 | 11 | # next.js 12 | /.next/ 13 | /out/ 14 | 15 | # production 16 | /build 17 | 18 | # misc 19 | .DS_Store 20 | *.pem 21 | 22 | # debug 23 | npm-debug.log* 24 | yarn-debug.log* 25 | yarn-error.log* 26 | .pnpm-debug.log* 27 | 28 | # local env files 29 | .env.local 30 | .env.development.local 31 | .env.test.local 32 | .env.production.local 33 | 34 | # vercel 35 | .vercel 36 | 37 | # typescript 38 | *.tsbuildinfo 39 | -------------------------------------------------------------------------------- /frontend/day6/.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 | 8 | # testing 9 | /coverage 10 | 11 | # next.js 12 | /.next/ 13 | /out/ 14 | 15 | # production 16 | /build 17 | 18 | # misc 19 | .DS_Store 20 | *.pem 21 | 22 | # debug 23 | npm-debug.log* 24 | yarn-debug.log* 25 | yarn-error.log* 26 | .pnpm-debug.log* 27 | 28 | # local env files 29 | .env.local 30 | .env.development.local 31 | .env.test.local 32 | .env.production.local 33 | 34 | # vercel 35 | .vercel 36 | 37 | # typescript 38 | *.tsbuildinfo 39 | -------------------------------------------------------------------------------- /frontend/day7/.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 | 8 | # testing 9 | /coverage 10 | 11 | # next.js 12 | /.next/ 13 | /out/ 14 | 15 | # production 16 | /build 17 | 18 | # misc 19 | .DS_Store 20 | *.pem 21 | 22 | # debug 23 | npm-debug.log* 24 | yarn-debug.log* 25 | yarn-error.log* 26 | .pnpm-debug.log* 27 | 28 | # local env files 29 | .env.local 30 | .env.development.local 31 | .env.test.local 32 | .env.production.local 33 | 34 | # vercel 35 | .vercel 36 | 37 | # typescript 38 | *.tsbuildinfo 39 | -------------------------------------------------------------------------------- /frontend/day4/public/vercel.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /frontend/day5/public/vercel.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /mobile/day12/README.md: -------------------------------------------------------------------------------- 1 | # awesome_wallet 2 | 3 | A new Flutter project. 4 | 5 | ## Getting Started 6 | 7 | This project is a starting point for a Flutter application. 8 | 9 | A few resources to get you started if this is your first Flutter project: 10 | 11 | - [Lab: Write your first Flutter app](https://docs.flutter.dev/get-started/codelab) 12 | - [Cookbook: Useful Flutter samples](https://docs.flutter.dev/cookbook) 13 | 14 | For help getting started with Flutter development, view the 15 | [online documentation](https://docs.flutter.dev/), which offers tutorials, 16 | samples, guidance on mobile development, and a full API reference. 17 | -------------------------------------------------------------------------------- /mobile/day13/README.md: -------------------------------------------------------------------------------- 1 | # awesome_wallet 2 | 3 | A new Flutter project. 4 | 5 | ## Getting Started 6 | 7 | This project is a starting point for a Flutter application. 8 | 9 | A few resources to get you started if this is your first Flutter project: 10 | 11 | - [Lab: Write your first Flutter app](https://docs.flutter.dev/get-started/codelab) 12 | - [Cookbook: Useful Flutter samples](https://docs.flutter.dev/cookbook) 13 | 14 | For help getting started with Flutter development, view the 15 | [online documentation](https://docs.flutter.dev/), which offers tutorials, 16 | samples, guidance on mobile development, and a full API reference. 17 | -------------------------------------------------------------------------------- /mobile/day22/README.md: -------------------------------------------------------------------------------- 1 | # awesome_wallet 2 | 3 | A new Flutter project. 4 | 5 | ## Getting Started 6 | 7 | This project is a starting point for a Flutter application. 8 | 9 | A few resources to get you started if this is your first Flutter project: 10 | 11 | - [Lab: Write your first Flutter app](https://docs.flutter.dev/get-started/codelab) 12 | - [Cookbook: Useful Flutter samples](https://docs.flutter.dev/cookbook) 13 | 14 | For help getting started with Flutter development, view the 15 | [online documentation](https://docs.flutter.dev/), which offers tutorials, 16 | samples, guidance on mobile development, and a full API reference. 17 | -------------------------------------------------------------------------------- /mobile/day13/pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: awesome_wallet 2 | description: A new Flutter project. 3 | publish_to: "none" # Remove this line if you wish to publish to pub.dev 4 | version: 1.0.0+1 5 | environment: 6 | sdk: ">=3.0.5 <4.0.0" 7 | 8 | dependencies: 9 | flutter: 10 | sdk: flutter 11 | cupertino_icons: ^1.0.2 12 | bip39: ^1.0.6 13 | web3dart: ^2.7.1 14 | hex: ^0.2.0 15 | flutter_bitcoin: ^1.0.1 16 | base58check: ^2.0.0 17 | http: ^1.1.0 18 | flutter_dotenv: ^5.1.0 19 | dev_dependencies: 20 | flutter_test: 21 | sdk: flutter 22 | flutter_lints: ^2.0.0 23 | flutter: 24 | uses-material-design: true 25 | assets: 26 | - .env 27 | -------------------------------------------------------------------------------- /mobile/day22/pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: awesome_wallet 2 | description: A new Flutter project. 3 | publish_to: "none" # Remove this line if you wish to publish to pub.dev 4 | version: 1.0.0+1 5 | environment: 6 | sdk: ">=3.0.5 <4.0.0" 7 | 8 | dependencies: 9 | flutter: 10 | sdk: flutter 11 | cupertino_icons: ^1.0.2 12 | bip39: ^1.0.6 13 | web3dart: ^2.7.1 14 | hex: ^0.2.0 15 | flutter_bitcoin: ^1.0.1 16 | base58check: ^2.0.0 17 | http: ^1.1.0 18 | flutter_dotenv: ^5.1.0 19 | dev_dependencies: 20 | flutter_test: 21 | sdk: flutter 22 | flutter_lints: ^2.0.0 23 | flutter: 24 | uses-material-design: true 25 | assets: 26 | - .env 27 | -------------------------------------------------------------------------------- /frontend/day6/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "day6", 3 | "private": true, 4 | "version": "0.1.0", 5 | "scripts": { 6 | "dev": "next dev", 7 | "build": "next build", 8 | "start": "next start", 9 | "lint": "next lint" 10 | }, 11 | "dependencies": { 12 | "@rainbow-me/rainbowkit": "^1.0.10", 13 | "next": "^13.4.19", 14 | "react": "^18.2.0", 15 | "react-dom": "^18.2.0", 16 | "viem": "~1.6.7", 17 | "wagmi": "~1.3.10" 18 | }, 19 | "devDependencies": { 20 | "@types/node": "^18.16.12", 21 | "@types/react": "^18.2.20", 22 | "eslint": "^8.15.0", 23 | "eslint-config-next": "^13.4.19", 24 | "typescript": "^5.0.4" 25 | } 26 | } -------------------------------------------------------------------------------- /frontend/day4/src/app/globals.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | 5 | :root { 6 | --foreground-rgb: 0, 0, 0; 7 | --background-start-rgb: 214, 219, 220; 8 | --background-end-rgb: 255, 255, 255; 9 | } 10 | 11 | @media (prefers-color-scheme: dark) { 12 | :root { 13 | --foreground-rgb: 255, 255, 255; 14 | --background-start-rgb: 0, 0, 0; 15 | --background-end-rgb: 0, 0, 0; 16 | } 17 | } 18 | 19 | body { 20 | color: rgb(var(--foreground-rgb)); 21 | background: linear-gradient( 22 | to bottom, 23 | transparent, 24 | rgb(var(--background-end-rgb)) 25 | ) 26 | rgb(var(--background-start-rgb)); 27 | } 28 | -------------------------------------------------------------------------------- /frontend/day5/src/app/globals.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | 5 | :root { 6 | --foreground-rgb: 0, 0, 0; 7 | --background-start-rgb: 214, 219, 220; 8 | --background-end-rgb: 255, 255, 255; 9 | } 10 | 11 | @media (prefers-color-scheme: dark) { 12 | :root { 13 | --foreground-rgb: 255, 255, 255; 14 | --background-start-rgb: 0, 0, 0; 15 | --background-end-rgb: 0, 0, 0; 16 | } 17 | } 18 | 19 | body { 20 | color: rgb(var(--foreground-rgb)); 21 | background: linear-gradient( 22 | to bottom, 23 | transparent, 24 | rgb(var(--background-end-rgb)) 25 | ) 26 | rgb(var(--background-start-rgb)); 27 | } 28 | -------------------------------------------------------------------------------- /mobile/day12/pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: awesome_wallet 2 | description: A new Flutter project. 3 | publish_to: "none" # Remove this line if you wish to publish to pub.dev 4 | version: 1.0.0+1 5 | environment: 6 | sdk: ">=3.0.5 <4.0.0" 7 | 8 | dependencies: 9 | flutter: 10 | sdk: flutter 11 | cupertino_icons: ^1.0.2 12 | bip39: ^1.0.6 13 | web3dart: ^2.7.1 14 | hex: ^0.2.0 15 | flutter_bitcoin: ^1.0.1 16 | base58check: ^2.0.0 17 | wallet: ^0.0.12+1 18 | http: ^1.1.0 19 | flutter_dotenv: ^5.1.0 20 | dev_dependencies: 21 | flutter_test: 22 | sdk: flutter 23 | flutter_lints: ^2.0.0 24 | flutter: 25 | uses-material-design: true 26 | assets: 27 | - .env 28 | -------------------------------------------------------------------------------- /mobile/day25/lib/one_inch_quote_response.dart: -------------------------------------------------------------------------------- 1 | import 'package:freezed_annotation/freezed_annotation.dart'; 2 | 3 | import 'one_inch_token.dart'; 4 | 5 | part 'one_inch_quote_response.freezed.dart'; 6 | part 'one_inch_quote_response.g.dart'; 7 | 8 | @freezed 9 | class OneInchQuoteResponse with _$OneInchQuoteResponse { 10 | OneInchQuoteResponse._(); 11 | factory OneInchQuoteResponse({ 12 | required OneInchToken fromToken, 13 | required OneInchToken toToken, 14 | required String toAmount, 15 | required int gas, 16 | }) = _OneInchQuoteResponse; 17 | 18 | factory OneInchQuoteResponse.fromJson(Map json) => 19 | _$OneInchQuoteResponseFromJson(json); 20 | } 21 | -------------------------------------------------------------------------------- /frontend/day17/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "day6", 3 | "private": true, 4 | "version": "0.1.0", 5 | "scripts": { 6 | "dev": "next dev", 7 | "build": "next build", 8 | "start": "next start", 9 | "lint": "next lint" 10 | }, 11 | "dependencies": { 12 | "@rainbow-me/rainbowkit": "^1.0.10", 13 | "next": "^13.4.19", 14 | "react": "^18.2.0", 15 | "react-dom": "^18.2.0", 16 | "siwe": "^2.1.4", 17 | "viem": "~1.6.7", 18 | "wagmi": "~1.3.10" 19 | }, 20 | "devDependencies": { 21 | "@types/node": "^18.16.12", 22 | "@types/react": "^18.2.20", 23 | "eslint": "^8.15.0", 24 | "eslint-config-next": "^13.4.19", 25 | "typescript": "^5.0.4" 26 | } 27 | } -------------------------------------------------------------------------------- /frontend/day7/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "day6", 3 | "private": true, 4 | "version": "0.1.0", 5 | "scripts": { 6 | "dev": "next dev", 7 | "build": "next build", 8 | "start": "next start", 9 | "lint": "next lint" 10 | }, 11 | "dependencies": { 12 | "@rainbow-me/rainbowkit": "^1.0.10", 13 | "next": "^13.4.19", 14 | "react": "^18.2.0", 15 | "react-dom": "^18.2.0", 16 | "siwe": "^2.1.4", 17 | "viem": "~1.6.7", 18 | "wagmi": "~1.3.10" 19 | }, 20 | "devDependencies": { 21 | "@types/node": "^18.16.12", 22 | "@types/react": "^18.2.20", 23 | "eslint": "^8.15.0", 24 | "eslint-config-next": "^13.4.19", 25 | "typescript": "^5.0.4" 26 | } 27 | } -------------------------------------------------------------------------------- /mobile/day25/lib/one_inch_token.dart: -------------------------------------------------------------------------------- 1 | import 'package:freezed_annotation/freezed_annotation.dart'; 2 | 3 | part 'one_inch_token.freezed.dart'; 4 | part 'one_inch_token.g.dart'; 5 | 6 | @freezed 7 | class OneInchToken with _$OneInchToken { 8 | const OneInchToken._(); 9 | 10 | factory OneInchToken({ 11 | @Default('') String symbol, 12 | @Default('') String name, 13 | @Default('') String address, 14 | required int decimals, 15 | @Default('') String logoURI, 16 | @Default(false) bool eip2612, 17 | @Default(false) bool wrappedNative, 18 | }) = _OneInchToken; 19 | 20 | factory OneInchToken.fromJson(Map json) => 21 | _$OneInchTokenFromJson(json); 22 | } 23 | -------------------------------------------------------------------------------- /backend/day19/solution2/nonce_pool_test.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "testing" 5 | 6 | "github.com/stretchr/testify/assert" 7 | ) 8 | 9 | func TestNoncePool(t *testing.T) { 10 | pool := NewNoncePool(0) 11 | assert.Equal(t, int64(0), pool.GetNonce()) 12 | assert.Equal(t, int64(1), pool.GetNonce()) 13 | assert.Equal(t, int64(2), pool.GetNonce()) 14 | pool.ReturnNonce(0) 15 | assert.Equal(t, int64(0), pool.GetNonce()) 16 | assert.Equal(t, int64(3), pool.GetNonce()) 17 | assert.Equal(t, int64(4), pool.GetNonce()) 18 | pool.ReturnNonce(3) 19 | pool.ReturnNonce(1) 20 | assert.Equal(t, int64(1), pool.GetNonce()) 21 | assert.Equal(t, int64(3), pool.GetNonce()) 22 | assert.Equal(t, int64(5), pool.GetNonce()) 23 | } 24 | -------------------------------------------------------------------------------- /frontend/day4/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "day4", 3 | "version": "0.1.0", 4 | "private": true, 5 | "scripts": { 6 | "dev": "next dev", 7 | "build": "next build", 8 | "start": "next start", 9 | "lint": "next lint" 10 | }, 11 | "dependencies": { 12 | "@types/node": "20.5.7", 13 | "@types/react": "18.2.21", 14 | "@types/react-dom": "18.2.7", 15 | "autoprefixer": "10.4.15", 16 | "eslint": "8.48.0", 17 | "eslint-config-next": "13.4.19", 18 | "next": "13.4.19", 19 | "postcss": "8.4.28", 20 | "react": "18.2.0", 21 | "react-dom": "18.2.0", 22 | "tailwindcss": "3.3.3", 23 | "typescript": "5.2.2", 24 | "viem": "^1.9.0", 25 | "wagmi": "^1.3.10" 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /frontend/day5/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "day4", 3 | "version": "0.1.0", 4 | "private": true, 5 | "scripts": { 6 | "dev": "next dev", 7 | "build": "next build", 8 | "start": "next start", 9 | "lint": "next lint" 10 | }, 11 | "dependencies": { 12 | "@types/node": "20.5.7", 13 | "@types/react": "18.2.21", 14 | "@types/react-dom": "18.2.7", 15 | "autoprefixer": "10.4.15", 16 | "eslint": "8.48.0", 17 | "eslint-config-next": "13.4.19", 18 | "next": "13.4.19", 19 | "postcss": "8.4.28", 20 | "react": "18.2.0", 21 | "react-dom": "18.2.0", 22 | "tailwindcss": "3.3.3", 23 | "typescript": "5.2.2", 24 | "viem": "^1.9.0", 25 | "wagmi": "^1.3.10" 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /frontend/day4/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es2020", 4 | "lib": ["dom", "dom.iterable", "esnext"], 5 | "allowJs": true, 6 | "skipLibCheck": true, 7 | "strict": true, 8 | "noEmit": true, 9 | "esModuleInterop": true, 10 | "module": "esnext", 11 | "moduleResolution": "bundler", 12 | "resolveJsonModule": true, 13 | "isolatedModules": true, 14 | "jsx": "preserve", 15 | "incremental": true, 16 | "plugins": [ 17 | { 18 | "name": "next" 19 | } 20 | ], 21 | "paths": { 22 | "@/*": ["./src/*"] 23 | } 24 | }, 25 | "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], 26 | "exclude": ["node_modules"] 27 | } 28 | -------------------------------------------------------------------------------- /frontend/day5/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es2020", 4 | "lib": ["dom", "dom.iterable", "esnext"], 5 | "allowJs": true, 6 | "skipLibCheck": true, 7 | "strict": true, 8 | "noEmit": true, 9 | "esModuleInterop": true, 10 | "module": "esnext", 11 | "moduleResolution": "bundler", 12 | "resolveJsonModule": true, 13 | "isolatedModules": true, 14 | "jsx": "preserve", 15 | "incremental": true, 16 | "plugins": [ 17 | { 18 | "name": "next" 19 | } 20 | ], 21 | "paths": { 22 | "@/*": ["./src/*"] 23 | } 24 | }, 25 | "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], 26 | "exclude": ["node_modules"] 27 | } 28 | -------------------------------------------------------------------------------- /mobile/day12/ios/.gitignore: -------------------------------------------------------------------------------- 1 | **/dgph 2 | *.mode1v3 3 | *.mode2v3 4 | *.moved-aside 5 | *.pbxuser 6 | *.perspectivev3 7 | **/*sync/ 8 | .sconsign.dblite 9 | .tags* 10 | **/.vagrant/ 11 | **/DerivedData/ 12 | Icon? 13 | **/Pods/ 14 | **/.symlinks/ 15 | profile 16 | xcuserdata 17 | **/.generated/ 18 | Flutter/App.framework 19 | Flutter/Flutter.framework 20 | Flutter/Flutter.podspec 21 | Flutter/Generated.xcconfig 22 | Flutter/ephemeral/ 23 | Flutter/app.flx 24 | Flutter/app.zip 25 | Flutter/flutter_assets/ 26 | Flutter/flutter_export_environment.sh 27 | ServiceDefinitions.json 28 | Runner/GeneratedPluginRegistrant.* 29 | 30 | # Exceptions to above rules. 31 | !default.mode1v3 32 | !default.mode2v3 33 | !default.pbxuser 34 | !default.perspectivev3 35 | -------------------------------------------------------------------------------- /mobile/day13/ios/.gitignore: -------------------------------------------------------------------------------- 1 | **/dgph 2 | *.mode1v3 3 | *.mode2v3 4 | *.moved-aside 5 | *.pbxuser 6 | *.perspectivev3 7 | **/*sync/ 8 | .sconsign.dblite 9 | .tags* 10 | **/.vagrant/ 11 | **/DerivedData/ 12 | Icon? 13 | **/Pods/ 14 | **/.symlinks/ 15 | profile 16 | xcuserdata 17 | **/.generated/ 18 | Flutter/App.framework 19 | Flutter/Flutter.framework 20 | Flutter/Flutter.podspec 21 | Flutter/Generated.xcconfig 22 | Flutter/ephemeral/ 23 | Flutter/app.flx 24 | Flutter/app.zip 25 | Flutter/flutter_assets/ 26 | Flutter/flutter_export_environment.sh 27 | ServiceDefinitions.json 28 | Runner/GeneratedPluginRegistrant.* 29 | 30 | # Exceptions to above rules. 31 | !default.mode1v3 32 | !default.mode2v3 33 | !default.pbxuser 34 | !default.perspectivev3 35 | -------------------------------------------------------------------------------- /mobile/day22/ios/.gitignore: -------------------------------------------------------------------------------- 1 | **/dgph 2 | *.mode1v3 3 | *.mode2v3 4 | *.moved-aside 5 | *.pbxuser 6 | *.perspectivev3 7 | **/*sync/ 8 | .sconsign.dblite 9 | .tags* 10 | **/.vagrant/ 11 | **/DerivedData/ 12 | Icon? 13 | **/Pods/ 14 | **/.symlinks/ 15 | profile 16 | xcuserdata 17 | **/.generated/ 18 | Flutter/App.framework 19 | Flutter/Flutter.framework 20 | Flutter/Flutter.podspec 21 | Flutter/Generated.xcconfig 22 | Flutter/ephemeral/ 23 | Flutter/app.flx 24 | Flutter/app.zip 25 | Flutter/flutter_assets/ 26 | Flutter/flutter_export_environment.sh 27 | ServiceDefinitions.json 28 | Runner/GeneratedPluginRegistrant.* 29 | 30 | # Exceptions to above rules. 31 | !default.mode1v3 32 | !default.mode2v3 33 | !default.pbxuser 34 | !default.perspectivev3 35 | -------------------------------------------------------------------------------- /mobile/day12/android/build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | ext.kotlin_version = '1.7.10' 3 | repositories { 4 | google() 5 | mavenCentral() 6 | } 7 | 8 | dependencies { 9 | classpath 'com.android.tools.build:gradle:7.3.0' 10 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" 11 | } 12 | } 13 | 14 | allprojects { 15 | repositories { 16 | google() 17 | mavenCentral() 18 | } 19 | } 20 | 21 | rootProject.buildDir = '../build' 22 | subprojects { 23 | project.buildDir = "${rootProject.buildDir}/${project.name}" 24 | } 25 | subprojects { 26 | project.evaluationDependsOn(':app') 27 | } 28 | 29 | tasks.register("clean", Delete) { 30 | delete rootProject.buildDir 31 | } 32 | -------------------------------------------------------------------------------- /mobile/day13/android/build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | ext.kotlin_version = '1.7.10' 3 | repositories { 4 | google() 5 | mavenCentral() 6 | } 7 | 8 | dependencies { 9 | classpath 'com.android.tools.build:gradle:7.3.0' 10 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" 11 | } 12 | } 13 | 14 | allprojects { 15 | repositories { 16 | google() 17 | mavenCentral() 18 | } 19 | } 20 | 21 | rootProject.buildDir = '../build' 22 | subprojects { 23 | project.buildDir = "${rootProject.buildDir}/${project.name}" 24 | } 25 | subprojects { 26 | project.evaluationDependsOn(':app') 27 | } 28 | 29 | tasks.register("clean", Delete) { 30 | delete rootProject.buildDir 31 | } 32 | -------------------------------------------------------------------------------- /mobile/day22/android/build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | ext.kotlin_version = '1.7.10' 3 | repositories { 4 | google() 5 | mavenCentral() 6 | } 7 | 8 | dependencies { 9 | classpath 'com.android.tools.build:gradle:7.3.0' 10 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" 11 | } 12 | } 13 | 14 | allprojects { 15 | repositories { 16 | google() 17 | mavenCentral() 18 | } 19 | } 20 | 21 | rootProject.buildDir = '../build' 22 | subprojects { 23 | project.buildDir = "${rootProject.buildDir}/${project.name}" 24 | } 25 | subprojects { 26 | project.evaluationDependsOn(':app') 27 | } 28 | 29 | tasks.register("clean", Delete) { 30 | delete rootProject.buildDir 31 | } 32 | -------------------------------------------------------------------------------- /backend/day9/go.mod: -------------------------------------------------------------------------------- 1 | module github.com/a00012025/ironman-2023-web3-fullstack/backend/day9 2 | 3 | go 1.19 4 | 5 | require ( 6 | github.com/ethereum/go-ethereum v1.12.2 7 | github.com/spruceid/siwe-go v0.2.0 8 | github.com/stretchr/testify v1.8.1 9 | ) 10 | 11 | require ( 12 | github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect 13 | github.com/davecgh/go-spew v1.1.1 // indirect 14 | github.com/dchest/uniuri v1.2.0 // indirect 15 | github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 // indirect 16 | github.com/go-stack/stack v1.8.1 // indirect 17 | github.com/holiman/uint256 v1.2.3 // indirect 18 | github.com/pmezard/go-difflib v1.0.0 // indirect 19 | github.com/relvacode/iso8601 v1.3.0 // indirect 20 | golang.org/x/crypto v0.12.0 // indirect 21 | golang.org/x/sys v0.12.0 // indirect 22 | gopkg.in/yaml.v3 v3.0.1 // indirect 23 | ) 24 | -------------------------------------------------------------------------------- /backend/day10/go.mod: -------------------------------------------------------------------------------- 1 | module github.com/a00012025/ironman-2023-web3-fullstack/backend/day10 2 | 3 | go 1.19 4 | 5 | require ( 6 | github.com/ethereum/go-ethereum v1.10.17 7 | github.com/miguelmota/go-ethereum-hdwallet v0.1.1 8 | github.com/tyler-smith/go-bip39 v1.1.0 9 | ) 10 | 11 | require golang.org/x/net v0.10.0 // indirect 12 | 13 | require ( 14 | github.com/btcsuite/btcd v0.22.1 // indirect 15 | github.com/btcsuite/btcd/btcec/v2 v2.2.0 // indirect 16 | github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 // indirect 17 | github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce // indirect 18 | github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 // indirect 19 | github.com/go-resty/resty/v2 v2.7.0 20 | github.com/go-stack/stack v1.8.1 // indirect 21 | golang.org/x/crypto v0.12.0 // indirect 22 | golang.org/x/sys v0.11.0 // indirect 23 | ) 24 | -------------------------------------------------------------------------------- /mobile/day12/ios/Flutter/AppFrameworkInfo.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | App 9 | CFBundleIdentifier 10 | io.flutter.flutter.app 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | App 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1.0 23 | MinimumOSVersion 24 | 11.0 25 | 26 | 27 | -------------------------------------------------------------------------------- /mobile/day13/ios/Flutter/AppFrameworkInfo.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | App 9 | CFBundleIdentifier 10 | io.flutter.flutter.app 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | App 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1.0 23 | MinimumOSVersion 24 | 11.0 25 | 26 | 27 | -------------------------------------------------------------------------------- /mobile/day22/ios/Flutter/AppFrameworkInfo.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | App 9 | CFBundleIdentifier 10 | io.flutter.flutter.app 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | App 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1.0 23 | MinimumOSVersion 24 | 11.0 25 | 26 | 27 | -------------------------------------------------------------------------------- /mobile/day12/.gitignore: -------------------------------------------------------------------------------- 1 | # Miscellaneous 2 | *.class 3 | *.log 4 | *.pyc 5 | *.swp 6 | .DS_Store 7 | .atom/ 8 | .buildlog/ 9 | .history 10 | .svn/ 11 | migrate_working_dir/ 12 | 13 | # IntelliJ related 14 | *.iml 15 | *.ipr 16 | *.iws 17 | .idea/ 18 | 19 | # The .vscode folder contains launch configuration and tasks you configure in 20 | # VS Code which you may wish to be included in version control, so this line 21 | # is commented out by default. 22 | #.vscode/ 23 | 24 | # Flutter/Dart/Pub related 25 | **/doc/api/ 26 | **/ios/Flutter/.last_build_id 27 | .dart_tool/ 28 | .flutter-plugins 29 | .flutter-plugins-dependencies 30 | .packages 31 | .pub-cache/ 32 | .pub/ 33 | /build/ 34 | 35 | # Symbolication related 36 | app.*.symbols 37 | 38 | # Obfuscation related 39 | app.*.map.json 40 | 41 | # Android Studio will place build artifacts here 42 | /android/app/debug 43 | /android/app/profile 44 | /android/app/release 45 | 46 | .env -------------------------------------------------------------------------------- /mobile/day13/.gitignore: -------------------------------------------------------------------------------- 1 | # Miscellaneous 2 | *.class 3 | *.log 4 | *.pyc 5 | *.swp 6 | .DS_Store 7 | .atom/ 8 | .buildlog/ 9 | .history 10 | .svn/ 11 | migrate_working_dir/ 12 | 13 | # IntelliJ related 14 | *.iml 15 | *.ipr 16 | *.iws 17 | .idea/ 18 | 19 | # The .vscode folder contains launch configuration and tasks you configure in 20 | # VS Code which you may wish to be included in version control, so this line 21 | # is commented out by default. 22 | #.vscode/ 23 | 24 | # Flutter/Dart/Pub related 25 | **/doc/api/ 26 | **/ios/Flutter/.last_build_id 27 | .dart_tool/ 28 | .flutter-plugins 29 | .flutter-plugins-dependencies 30 | .packages 31 | .pub-cache/ 32 | .pub/ 33 | /build/ 34 | 35 | # Symbolication related 36 | app.*.symbols 37 | 38 | # Obfuscation related 39 | app.*.map.json 40 | 41 | # Android Studio will place build artifacts here 42 | /android/app/debug 43 | /android/app/profile 44 | /android/app/release 45 | 46 | .env -------------------------------------------------------------------------------- /mobile/day14/.gitignore: -------------------------------------------------------------------------------- 1 | # Miscellaneous 2 | *.class 3 | *.log 4 | *.pyc 5 | *.swp 6 | .DS_Store 7 | .atom/ 8 | .buildlog/ 9 | .history 10 | .svn/ 11 | migrate_working_dir/ 12 | 13 | # IntelliJ related 14 | *.iml 15 | *.ipr 16 | *.iws 17 | .idea/ 18 | 19 | # The .vscode folder contains launch configuration and tasks you configure in 20 | # VS Code which you may wish to be included in version control, so this line 21 | # is commented out by default. 22 | #.vscode/ 23 | 24 | # Flutter/Dart/Pub related 25 | **/doc/api/ 26 | **/ios/Flutter/.last_build_id 27 | .dart_tool/ 28 | .flutter-plugins 29 | .flutter-plugins-dependencies 30 | .packages 31 | .pub-cache/ 32 | .pub/ 33 | /build/ 34 | 35 | # Symbolication related 36 | app.*.symbols 37 | 38 | # Obfuscation related 39 | app.*.map.json 40 | 41 | # Android Studio will place build artifacts here 42 | /android/app/debug 43 | /android/app/profile 44 | /android/app/release 45 | 46 | .env -------------------------------------------------------------------------------- /mobile/day22/.gitignore: -------------------------------------------------------------------------------- 1 | # Miscellaneous 2 | *.class 3 | *.log 4 | *.pyc 5 | *.swp 6 | .DS_Store 7 | .atom/ 8 | .buildlog/ 9 | .history 10 | .svn/ 11 | migrate_working_dir/ 12 | 13 | # IntelliJ related 14 | *.iml 15 | *.ipr 16 | *.iws 17 | .idea/ 18 | 19 | # The .vscode folder contains launch configuration and tasks you configure in 20 | # VS Code which you may wish to be included in version control, so this line 21 | # is commented out by default. 22 | #.vscode/ 23 | 24 | # Flutter/Dart/Pub related 25 | **/doc/api/ 26 | **/ios/Flutter/.last_build_id 27 | .dart_tool/ 28 | .flutter-plugins 29 | .flutter-plugins-dependencies 30 | .packages 31 | .pub-cache/ 32 | .pub/ 33 | /build/ 34 | 35 | # Symbolication related 36 | app.*.symbols 37 | 38 | # Obfuscation related 39 | app.*.map.json 40 | 41 | # Android Studio will place build artifacts here 42 | /android/app/debug 43 | /android/app/profile 44 | /android/app/release 45 | 46 | .env -------------------------------------------------------------------------------- /mobile/day25/.gitignore: -------------------------------------------------------------------------------- 1 | # Miscellaneous 2 | *.class 3 | *.log 4 | *.pyc 5 | *.swp 6 | .DS_Store 7 | .atom/ 8 | .buildlog/ 9 | .history 10 | .svn/ 11 | migrate_working_dir/ 12 | 13 | # IntelliJ related 14 | *.iml 15 | *.ipr 16 | *.iws 17 | .idea/ 18 | 19 | # The .vscode folder contains launch configuration and tasks you configure in 20 | # VS Code which you may wish to be included in version control, so this line 21 | # is commented out by default. 22 | #.vscode/ 23 | 24 | # Flutter/Dart/Pub related 25 | **/doc/api/ 26 | **/ios/Flutter/.last_build_id 27 | .dart_tool/ 28 | .flutter-plugins 29 | .flutter-plugins-dependencies 30 | .packages 31 | .pub-cache/ 32 | .pub/ 33 | /build/ 34 | 35 | # Symbolication related 36 | app.*.symbols 37 | 38 | # Obfuscation related 39 | app.*.map.json 40 | 41 | # Android Studio will place build artifacts here 42 | /android/app/debug 43 | /android/app/profile 44 | /android/app/release 45 | 46 | .env -------------------------------------------------------------------------------- /mobile/day25/lib/one_inch_tx.g.dart: -------------------------------------------------------------------------------- 1 | // GENERATED CODE - DO NOT MODIFY BY HAND 2 | 3 | part of 'one_inch_tx.dart'; 4 | 5 | // ************************************************************************** 6 | // JsonSerializableGenerator 7 | // ************************************************************************** 8 | 9 | _$_OneInchTx _$$_OneInchTxFromJson(Map json) => _$_OneInchTx( 10 | from: json['from'] as String, 11 | to: json['to'] as String, 12 | data: json['data'] as String, 13 | value: json['value'] as String, 14 | gas: json['gas'] as int, 15 | gasPrice: json['gasPrice'] as String, 16 | ); 17 | 18 | Map _$$_OneInchTxToJson(_$_OneInchTx instance) => 19 | { 20 | 'from': instance.from, 21 | 'to': instance.to, 22 | 'data': instance.data, 23 | 'value': instance.value, 24 | 'gas': instance.gas, 25 | 'gasPrice': instance.gasPrice, 26 | }; 27 | -------------------------------------------------------------------------------- /mobile/day25/lib/one_inch_quote_response.g.dart: -------------------------------------------------------------------------------- 1 | // GENERATED CODE - DO NOT MODIFY BY HAND 2 | 3 | part of 'one_inch_quote_response.dart'; 4 | 5 | // ************************************************************************** 6 | // JsonSerializableGenerator 7 | // ************************************************************************** 8 | 9 | _$OneInchQuoteResponseImpl _$$OneInchQuoteResponseImplFromJson( 10 | Map json) => 11 | _$OneInchQuoteResponseImpl( 12 | fromToken: 13 | OneInchToken.fromJson(json['fromToken'] as Map), 14 | toToken: OneInchToken.fromJson(json['toToken'] as Map), 15 | toAmount: json['toAmount'] as String, 16 | gas: json['gas'] as int, 17 | ); 18 | 19 | Map _$$OneInchQuoteResponseImplToJson( 20 | _$OneInchQuoteResponseImpl instance) => 21 | { 22 | 'fromToken': instance.fromToken, 23 | 'toToken': instance.toToken, 24 | 'toAmount': instance.toAmount, 25 | 'gas': instance.gas, 26 | }; 27 | -------------------------------------------------------------------------------- /mobile/day12/android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /mobile/day13/android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /mobile/day22/android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /mobile/day12/android/app/src/main/res/values-night/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /mobile/day13/android/app/src/main/res/values-night/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /mobile/day22/android/app/src/main/res/values-night/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /mobile/day12/test/widget_test.dart: -------------------------------------------------------------------------------- 1 | // This is a basic Flutter widget test. 2 | // 3 | // To perform an interaction with a widget in your test, use the WidgetTester 4 | // utility in the flutter_test package. For example, you can send tap and scroll 5 | // gestures. You can also use WidgetTester to find child widgets in the widget 6 | // tree, read text, and verify that the values of widget properties are correct. 7 | 8 | import 'package:flutter/material.dart'; 9 | import 'package:flutter_test/flutter_test.dart'; 10 | 11 | import 'package:awesome_wallet/main.dart'; 12 | 13 | void main() { 14 | testWidgets('Counter increments smoke test', (WidgetTester tester) async { 15 | // Build our app and trigger a frame. 16 | await tester.pumpWidget(const MyApp()); 17 | 18 | // Verify that our counter starts at 0. 19 | expect(find.text('0'), findsOneWidget); 20 | expect(find.text('1'), findsNothing); 21 | 22 | // Tap the '+' icon and trigger a frame. 23 | await tester.tap(find.byIcon(Icons.add)); 24 | await tester.pump(); 25 | 26 | // Verify that our counter has incremented. 27 | expect(find.text('0'), findsNothing); 28 | expect(find.text('1'), findsOneWidget); 29 | }); 30 | } 31 | -------------------------------------------------------------------------------- /mobile/day13/test/widget_test.dart: -------------------------------------------------------------------------------- 1 | // This is a basic Flutter widget test. 2 | // 3 | // To perform an interaction with a widget in your test, use the WidgetTester 4 | // utility in the flutter_test package. For example, you can send tap and scroll 5 | // gestures. You can also use WidgetTester to find child widgets in the widget 6 | // tree, read text, and verify that the values of widget properties are correct. 7 | 8 | import 'package:flutter/material.dart'; 9 | import 'package:flutter_test/flutter_test.dart'; 10 | 11 | import 'package:awesome_wallet/main.dart'; 12 | 13 | void main() { 14 | testWidgets('Counter increments smoke test', (WidgetTester tester) async { 15 | // Build our app and trigger a frame. 16 | await tester.pumpWidget(const MyApp()); 17 | 18 | // Verify that our counter starts at 0. 19 | expect(find.text('0'), findsOneWidget); 20 | expect(find.text('1'), findsNothing); 21 | 22 | // Tap the '+' icon and trigger a frame. 23 | await tester.tap(find.byIcon(Icons.add)); 24 | await tester.pump(); 25 | 26 | // Verify that our counter has incremented. 27 | expect(find.text('0'), findsNothing); 28 | expect(find.text('1'), findsOneWidget); 29 | }); 30 | } 31 | -------------------------------------------------------------------------------- /mobile/day22/test/widget_test.dart: -------------------------------------------------------------------------------- 1 | // This is a basic Flutter widget test. 2 | // 3 | // To perform an interaction with a widget in your test, use the WidgetTester 4 | // utility in the flutter_test package. For example, you can send tap and scroll 5 | // gestures. You can also use WidgetTester to find child widgets in the widget 6 | // tree, read text, and verify that the values of widget properties are correct. 7 | 8 | import 'package:flutter/material.dart'; 9 | import 'package:flutter_test/flutter_test.dart'; 10 | 11 | import 'package:awesome_wallet/main.dart'; 12 | 13 | void main() { 14 | testWidgets('Counter increments smoke test', (WidgetTester tester) async { 15 | // Build our app and trigger a frame. 16 | await tester.pumpWidget(const MyApp()); 17 | 18 | // Verify that our counter starts at 0. 19 | expect(find.text('0'), findsOneWidget); 20 | expect(find.text('1'), findsNothing); 21 | 22 | // Tap the '+' icon and trigger a frame. 23 | await tester.tap(find.byIcon(Icons.add)); 24 | await tester.pump(); 25 | 26 | // Verify that our counter has incremented. 27 | expect(find.text('0'), findsNothing); 28 | expect(find.text('1'), findsOneWidget); 29 | }); 30 | } 31 | -------------------------------------------------------------------------------- /mobile/day25/lib/one_inch_token.g.dart: -------------------------------------------------------------------------------- 1 | // GENERATED CODE - DO NOT MODIFY BY HAND 2 | 3 | part of 'one_inch_token.dart'; 4 | 5 | // ************************************************************************** 6 | // JsonSerializableGenerator 7 | // ************************************************************************** 8 | 9 | _$OneInchTokenImpl _$$OneInchTokenImplFromJson(Map json) => 10 | _$OneInchTokenImpl( 11 | symbol: json['symbol'] as String? ?? '', 12 | name: json['name'] as String? ?? '', 13 | address: json['address'] as String? ?? '', 14 | decimals: json['decimals'] as int, 15 | logoURI: json['logoURI'] as String? ?? '', 16 | eip2612: json['eip2612'] as bool? ?? false, 17 | wrappedNative: json['wrappedNative'] as bool? ?? false, 18 | ); 19 | 20 | Map _$$OneInchTokenImplToJson(_$OneInchTokenImpl instance) => 21 | { 22 | 'symbol': instance.symbol, 23 | 'name': instance.name, 24 | 'address': instance.address, 25 | 'decimals': instance.decimals, 26 | 'logoURI': instance.logoURI, 27 | 'eip2612': instance.eip2612, 28 | 'wrappedNative': instance.wrappedNative, 29 | }; 30 | -------------------------------------------------------------------------------- /backend/day20/go.mod: -------------------------------------------------------------------------------- 1 | module github.com/a00012025/ironman-2023-web3-fullstack/backend/day20 2 | 3 | go 1.19 4 | 5 | require ( 6 | github.com/ethereum/go-ethereum v1.10.17 7 | github.com/metachris/eth-go-bindings v0.5.0 8 | github.com/shopspring/decimal v1.3.1 9 | ) 10 | 11 | require ( 12 | github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6 // indirect 13 | github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect 14 | github.com/btcsuite/btcd/chaincfg/chainhash v1.0.2 // indirect 15 | github.com/deckarep/golang-set v1.8.0 // indirect 16 | github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 // indirect 17 | github.com/go-ole/go-ole v1.2.1 // indirect 18 | github.com/go-stack/stack v1.8.1 // indirect 19 | github.com/google/uuid v1.2.0 // indirect 20 | github.com/gorilla/websocket v1.4.2 // indirect 21 | github.com/rjeczalik/notify v0.9.1 // indirect 22 | github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible // indirect 23 | github.com/tklauser/go-sysconf v0.3.5 // indirect 24 | github.com/tklauser/numcpus v0.2.2 // indirect 25 | github.com/tyler-smith/go-bip39 v1.1.0 // indirect 26 | golang.org/x/crypto v0.12.0 // indirect 27 | golang.org/x/sys v0.11.0 // indirect 28 | gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce // indirect 29 | ) 30 | -------------------------------------------------------------------------------- /backend/day19/solution2/nonce_pool.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "container/heap" 5 | "sync" 6 | ) 7 | 8 | type IntHeap []int64 9 | 10 | func (h IntHeap) Len() int { return len(h) } 11 | func (h IntHeap) Less(i, j int) bool { return h[i] < h[j] } 12 | func (h IntHeap) Swap(i, j int) { h[i], h[j] = h[j], h[i] } 13 | func (h *IntHeap) Push(x interface{}) { 14 | *h = append(*h, x.(int64)) 15 | } 16 | func (h *IntHeap) Pop() interface{} { 17 | old := *h 18 | n := len(old) 19 | x := old[n-1] 20 | *h = old[0 : n-1] 21 | return x 22 | } 23 | 24 | type NoncePool struct { 25 | nonces IntHeap 26 | lock sync.Mutex 27 | } 28 | 29 | func NewNoncePool(initialNonce int64) *NoncePool { 30 | pool := &NoncePool{} 31 | heap.Init(&pool.nonces) 32 | heap.Push(&pool.nonces, initialNonce) 33 | return pool 34 | } 35 | 36 | func (n *NoncePool) GetNonce() int64 { 37 | n.lock.Lock() 38 | defer n.lock.Unlock() 39 | 40 | // Get min nonce 41 | nonce := heap.Pop(&n.nonces).(int64) 42 | if n.nonces.Len() == 0 { 43 | // Add next nonce if nonce pool is empty 44 | heap.Push(&n.nonces, nonce+1) 45 | } 46 | return nonce 47 | } 48 | 49 | func (n *NoncePool) ReturnNonce(returnedNonce int64) { 50 | n.lock.Lock() 51 | defer n.lock.Unlock() 52 | 53 | heap.Push(&n.nonces, returnedNonce) 54 | } 55 | -------------------------------------------------------------------------------- /mobile/day12/cmd/test.dart: -------------------------------------------------------------------------------- 1 | // import 'package:bitcoin_flutter/bitcoin_flutter.dart'; 2 | // ignore_for_file: avoid_print 3 | 4 | import 'package:bip39/bip39.dart' as bip39; 5 | import 'package:flutter_bitcoin/flutter_bitcoin.dart' hide Transaction; 6 | import 'package:web3dart/web3dart.dart'; 7 | import 'package:wallet/wallet.dart' as wallet; 8 | 9 | main() { 10 | final mnemonic = bip39.generateMnemonic(strength: 128); 11 | print('mnemonic: $mnemonic'); 12 | 13 | final seed = bip39.mnemonicToSeed(mnemonic); 14 | final hdWallet = HDWallet.fromSeed(seed); 15 | 16 | // derive bitcoin 17 | final btcWallet = hdWallet.derivePath("m/44'/0'/0'/0/0"); 18 | print('bitcoin address: ${btcWallet.address}'); 19 | 20 | // derive ethereum 21 | final ethWallet = hdWallet.derivePath("m/44'/60'/0'/0/0"); 22 | final ethPriKey = EthPrivateKey.fromHex(ethWallet.privKey!); 23 | print('ethereum address: ${ethPriKey.address}'); 24 | 25 | // derive tron 26 | final tronWallet = hdWallet.derivePath("m/44'/195'/0'/0/0"); 27 | final tronPrivateKey = 28 | wallet.PrivateKey(BigInt.parse(tronWallet.privKey!, radix: 16)); 29 | final tronPubKey = wallet.tron.createPublicKey(tronPrivateKey); 30 | final tronAddress = wallet.tron.createAddress(tronPubKey); 31 | print('tron address: $tronAddress'); 32 | } 33 | -------------------------------------------------------------------------------- /backend/day11/go.mod: -------------------------------------------------------------------------------- 1 | module github.com/a00012025/ironman-2023-web3-fullstack/backend/day11 2 | 3 | go 1.19 4 | 5 | require ( 6 | github.com/ethereum/go-ethereum v1.10.17 7 | github.com/miguelmota/go-ethereum-hdwallet v0.1.1 8 | ) 9 | 10 | require ( 11 | github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6 // indirect 12 | github.com/btcsuite/btcd v0.22.1 // indirect 13 | github.com/btcsuite/btcd/btcec/v2 v2.2.0 // indirect 14 | github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 // indirect 15 | github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce // indirect 16 | github.com/deckarep/golang-set v1.8.0 // indirect 17 | github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 // indirect 18 | github.com/go-ole/go-ole v1.2.1 // indirect 19 | github.com/go-stack/stack v1.8.1 // indirect 20 | github.com/gorilla/websocket v1.4.2 // indirect 21 | github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible // indirect 22 | github.com/tklauser/go-sysconf v0.3.5 // indirect 23 | github.com/tklauser/numcpus v0.2.2 // indirect 24 | github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef // indirect 25 | golang.org/x/crypto v0.12.0 // indirect 26 | golang.org/x/sys v0.11.0 // indirect 27 | gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce // indirect 28 | ) 29 | -------------------------------------------------------------------------------- /frontend/day4/public/next.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /frontend/day5/public/next.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /backend/day18/go.mod: -------------------------------------------------------------------------------- 1 | module github.com/a00012025/ironman-2023-web3-fullstack/backend/day18 2 | 3 | go 1.19 4 | 5 | require ( 6 | github.com/ethereum/go-ethereum v1.10.17 7 | github.com/metachris/eth-go-bindings v0.5.0 8 | github.com/miguelmota/go-ethereum-hdwallet v0.1.1 9 | ) 10 | 11 | require ( 12 | github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6 // indirect 13 | github.com/btcsuite/btcd v0.22.1 // indirect 14 | github.com/btcsuite/btcd/btcec/v2 v2.2.0 // indirect 15 | github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 // indirect 16 | github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce // indirect 17 | github.com/deckarep/golang-set v1.8.0 // indirect 18 | github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 // indirect 19 | github.com/go-ole/go-ole v1.2.1 // indirect 20 | github.com/go-stack/stack v1.8.1 // indirect 21 | github.com/google/uuid v1.2.0 // indirect 22 | github.com/gorilla/websocket v1.4.2 // indirect 23 | github.com/rjeczalik/notify v0.9.1 // indirect 24 | github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible // indirect 25 | github.com/tklauser/go-sysconf v0.3.5 // indirect 26 | github.com/tklauser/numcpus v0.2.2 // indirect 27 | github.com/tyler-smith/go-bip39 v1.1.0 // indirect 28 | golang.org/x/crypto v0.12.0 // indirect 29 | golang.org/x/sys v0.11.0 // indirect 30 | gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce // indirect 31 | ) 32 | -------------------------------------------------------------------------------- /backend/day19/go.mod: -------------------------------------------------------------------------------- 1 | module github.com/a00012025/ironman-2023-web3-fullstack/backend/day19 2 | 3 | go 1.19 4 | 5 | require ( 6 | github.com/ethereum/go-ethereum v1.10.17 7 | github.com/metachris/eth-go-bindings v0.5.0 8 | github.com/miguelmota/go-ethereum-hdwallet v0.1.1 9 | ) 10 | 11 | require ( 12 | github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6 // indirect 13 | github.com/btcsuite/btcd v0.22.1 // indirect 14 | github.com/btcsuite/btcd/btcec/v2 v2.2.0 // indirect 15 | github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 // indirect 16 | github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce // indirect 17 | github.com/deckarep/golang-set v1.8.0 // indirect 18 | github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 // indirect 19 | github.com/go-ole/go-ole v1.2.1 // indirect 20 | github.com/go-stack/stack v1.8.1 // indirect 21 | github.com/google/uuid v1.2.0 // indirect 22 | github.com/gorilla/websocket v1.4.2 // indirect 23 | github.com/rjeczalik/notify v0.9.1 // indirect 24 | github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible // indirect 25 | github.com/tklauser/go-sysconf v0.3.5 // indirect 26 | github.com/tklauser/numcpus v0.2.2 // indirect 27 | github.com/tyler-smith/go-bip39 v1.1.0 // indirect 28 | golang.org/x/crypto v0.12.0 // indirect 29 | golang.org/x/sys v0.11.0 // indirect 30 | gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce // indirect 31 | ) 32 | -------------------------------------------------------------------------------- /frontend/day17/README.md: -------------------------------------------------------------------------------- 1 | This is a [RainbowKit](https://rainbowkit.com) + [wagmi](https://wagmi.sh) + [Next.js](https://nextjs.org/) project bootstrapped with [`create-rainbowkit`](https://github.com/rainbow-me/rainbowkit/tree/main/packages/create-rainbowkit). 2 | 3 | ## Getting Started 4 | 5 | First, run the development server: 6 | 7 | ```bash 8 | npm run dev 9 | ``` 10 | 11 | Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. 12 | 13 | You can start editing the page by modifying `pages/index.tsx`. The page auto-updates as you edit the file. 14 | 15 | ## Learn More 16 | 17 | To learn more about this stack, take a look at the following resources: 18 | 19 | - [RainbowKit Documentation](https://rainbowkit.com) - Learn how to customize your wallet connection flow. 20 | - [wagmi Documentation](https://wagmi.sh) - Learn how to interact with Ethereum. 21 | - [Next.js Documentation](https://nextjs.org/docs) - Learn how to build a Next.js application. 22 | 23 | You can check out [the RainbowKit GitHub repository](https://github.com/rainbow-me/rainbowkit) - your feedback and contributions are welcome! 24 | 25 | ## Deploy on Vercel 26 | 27 | The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. 28 | 29 | Check out the [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details. 30 | -------------------------------------------------------------------------------- /frontend/day6/README.md: -------------------------------------------------------------------------------- 1 | This is a [RainbowKit](https://rainbowkit.com) + [wagmi](https://wagmi.sh) + [Next.js](https://nextjs.org/) project bootstrapped with [`create-rainbowkit`](https://github.com/rainbow-me/rainbowkit/tree/main/packages/create-rainbowkit). 2 | 3 | ## Getting Started 4 | 5 | First, run the development server: 6 | 7 | ```bash 8 | npm run dev 9 | ``` 10 | 11 | Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. 12 | 13 | You can start editing the page by modifying `pages/index.tsx`. The page auto-updates as you edit the file. 14 | 15 | ## Learn More 16 | 17 | To learn more about this stack, take a look at the following resources: 18 | 19 | - [RainbowKit Documentation](https://rainbowkit.com) - Learn how to customize your wallet connection flow. 20 | - [wagmi Documentation](https://wagmi.sh) - Learn how to interact with Ethereum. 21 | - [Next.js Documentation](https://nextjs.org/docs) - Learn how to build a Next.js application. 22 | 23 | You can check out [the RainbowKit GitHub repository](https://github.com/rainbow-me/rainbowkit) - your feedback and contributions are welcome! 24 | 25 | ## Deploy on Vercel 26 | 27 | The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. 28 | 29 | Check out the [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details. 30 | -------------------------------------------------------------------------------- /frontend/day7/README.md: -------------------------------------------------------------------------------- 1 | This is a [RainbowKit](https://rainbowkit.com) + [wagmi](https://wagmi.sh) + [Next.js](https://nextjs.org/) project bootstrapped with [`create-rainbowkit`](https://github.com/rainbow-me/rainbowkit/tree/main/packages/create-rainbowkit). 2 | 3 | ## Getting Started 4 | 5 | First, run the development server: 6 | 7 | ```bash 8 | npm run dev 9 | ``` 10 | 11 | Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. 12 | 13 | You can start editing the page by modifying `pages/index.tsx`. The page auto-updates as you edit the file. 14 | 15 | ## Learn More 16 | 17 | To learn more about this stack, take a look at the following resources: 18 | 19 | - [RainbowKit Documentation](https://rainbowkit.com) - Learn how to customize your wallet connection flow. 20 | - [wagmi Documentation](https://wagmi.sh) - Learn how to interact with Ethereum. 21 | - [Next.js Documentation](https://nextjs.org/docs) - Learn how to build a Next.js application. 22 | 23 | You can check out [the RainbowKit GitHub repository](https://github.com/rainbow-me/rainbowkit) - your feedback and contributions are welcome! 24 | 25 | ## Deploy on Vercel 26 | 27 | The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. 28 | 29 | Check out the [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details. 30 | -------------------------------------------------------------------------------- /mobile/day12/analysis_options.yaml: -------------------------------------------------------------------------------- 1 | # This file configures the analyzer, which statically analyzes Dart code to 2 | # check for errors, warnings, and lints. 3 | # 4 | # The issues identified by the analyzer are surfaced in the UI of Dart-enabled 5 | # IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be 6 | # invoked from the command line by running `flutter analyze`. 7 | 8 | # The following line activates a set of recommended lints for Flutter apps, 9 | # packages, and plugins designed to encourage good coding practices. 10 | include: package:flutter_lints/flutter.yaml 11 | 12 | linter: 13 | # The lint rules applied to this project can be customized in the 14 | # section below to disable rules from the `package:flutter_lints/flutter.yaml` 15 | # included above or to enable additional rules. A list of all available lints 16 | # and their documentation is published at 17 | # https://dart-lang.github.io/linter/lints/index.html. 18 | # 19 | # Instead of disabling a lint rule for the entire project in the 20 | # section below, it can also be suppressed for a single line of code 21 | # or a specific dart file by using the `// ignore: name_of_lint` and 22 | # `// ignore_for_file: name_of_lint` syntax on the line or in the file 23 | # producing the lint. 24 | rules: 25 | # avoid_print: false # Uncomment to disable the `avoid_print` rule 26 | # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule 27 | 28 | # Additional information about this file can be found at 29 | # https://dart.dev/guides/language/analysis-options 30 | -------------------------------------------------------------------------------- /mobile/day13/analysis_options.yaml: -------------------------------------------------------------------------------- 1 | # This file configures the analyzer, which statically analyzes Dart code to 2 | # check for errors, warnings, and lints. 3 | # 4 | # The issues identified by the analyzer are surfaced in the UI of Dart-enabled 5 | # IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be 6 | # invoked from the command line by running `flutter analyze`. 7 | 8 | # The following line activates a set of recommended lints for Flutter apps, 9 | # packages, and plugins designed to encourage good coding practices. 10 | include: package:flutter_lints/flutter.yaml 11 | 12 | linter: 13 | # The lint rules applied to this project can be customized in the 14 | # section below to disable rules from the `package:flutter_lints/flutter.yaml` 15 | # included above or to enable additional rules. A list of all available lints 16 | # and their documentation is published at 17 | # https://dart-lang.github.io/linter/lints/index.html. 18 | # 19 | # Instead of disabling a lint rule for the entire project in the 20 | # section below, it can also be suppressed for a single line of code 21 | # or a specific dart file by using the `// ignore: name_of_lint` and 22 | # `// ignore_for_file: name_of_lint` syntax on the line or in the file 23 | # producing the lint. 24 | rules: 25 | # avoid_print: false # Uncomment to disable the `avoid_print` rule 26 | # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule 27 | 28 | # Additional information about this file can be found at 29 | # https://dart.dev/guides/language/analysis-options 30 | -------------------------------------------------------------------------------- /mobile/day22/analysis_options.yaml: -------------------------------------------------------------------------------- 1 | # This file configures the analyzer, which statically analyzes Dart code to 2 | # check for errors, warnings, and lints. 3 | # 4 | # The issues identified by the analyzer are surfaced in the UI of Dart-enabled 5 | # IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be 6 | # invoked from the command line by running `flutter analyze`. 7 | 8 | # The following line activates a set of recommended lints for Flutter apps, 9 | # packages, and plugins designed to encourage good coding practices. 10 | include: package:flutter_lints/flutter.yaml 11 | 12 | linter: 13 | # The lint rules applied to this project can be customized in the 14 | # section below to disable rules from the `package:flutter_lints/flutter.yaml` 15 | # included above or to enable additional rules. A list of all available lints 16 | # and their documentation is published at 17 | # https://dart-lang.github.io/linter/lints/index.html. 18 | # 19 | # Instead of disabling a lint rule for the entire project in the 20 | # section below, it can also be suppressed for a single line of code 21 | # or a specific dart file by using the `// ignore: name_of_lint` and 22 | # `// ignore_for_file: name_of_lint` syntax on the line or in the file 23 | # producing the lint. 24 | rules: 25 | # avoid_print: false # Uncomment to disable the `avoid_print` rule 26 | # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule 27 | 28 | # Additional information about this file can be found at 29 | # https://dart.dev/guides/language/analysis-options 30 | -------------------------------------------------------------------------------- /backend/day9/verify_test.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "testing" 5 | 6 | "github.com/stretchr/testify/assert" 7 | ) 8 | 9 | const address = "0x32e0556aeC41a34C3002a264f4694193EBCf44F7" 10 | const msg = "Welcome to myawesomedapp.com. Please login to continue. Challenge: 0x32e0556aec41a34c3002a264f4694193ebcf44f7:1693724609" 11 | const msgSignature = "0x53dd5375da3fb1cadb5b5bd27c6ee7a23c715ff6be1c8001a52b4d1e2bb206e078f337645e223899b38a908a68d19c71850e4a48dc8753de1c3c8cd401c72bbf1b" 12 | 13 | const siweMessage = `localhost:3000 wants you to sign in with your Ethereum account: 14 | 0x32e0556aeC41a34C3002a264f4694193EBCf44F7 15 | 16 | Welcome to myawesomedapp. Please login to continue. 17 | 18 | URI: http://localhost:3000/signin 19 | Version: 1 20 | Chain ID: 1 21 | Nonce: 07EwlNV39F7FRRqpu 22 | Issued At: 2023-09-03T06:41:21.941Z` 23 | 24 | const siweSignature = "0xf90048971fd8e50e1768386ea28139d9cc708d60b2b475407f6c1fb9bcad34df48f0d310d5eaf7a99b30f518ade8d712637f73681a372b461519c38ef3ab9f8e1b" 25 | 26 | func TestVerifySignature(t *testing.T) { 27 | err := VerifySignature(address, msgSignature, msg) 28 | assert.Nil(t, err) 29 | 30 | err = VerifySignature(address, siweSignature, siweMessage) 31 | assert.Nil(t, err) 32 | } 33 | 34 | func TestVerifySiweSignature(t *testing.T) { 35 | nonce, err := VerifySiweSignature(address, siweSignature, siweMessage, "localhost:3000") 36 | assert.Nil(t, err) 37 | assert.Equal(t, "07EwlNV39F7FRRqpu", nonce) 38 | 39 | _, err = VerifySiweSignature(address, siweSignature, siweMessage, "localhost:3001") 40 | assert.NotNil(t, err) 41 | assert.Contains(t, err.Error(), "Message domain doesn't match") 42 | } 43 | -------------------------------------------------------------------------------- /mobile/day12/ios/Runner/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /mobile/day13/ios/Runner/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /mobile/day22/ios/Runner/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /mobile/day12/android/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 14 | 18 | 22 | 23 | 24 | 25 | 26 | 27 | 29 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /mobile/day13/android/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 14 | 18 | 22 | 23 | 24 | 25 | 26 | 27 | 29 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /mobile/day22/android/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 14 | 18 | 22 | 23 | 24 | 25 | 26 | 27 | 29 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /backend/day10/balance.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "fmt" 5 | "log" 6 | 7 | "github.com/go-resty/resty/v2" 8 | ) 9 | 10 | type AccountPortfolioResp struct { 11 | AccountAddress string `json:"accountAddress"` 12 | ChainID int `json:"chainId"` 13 | NativeBalance TokenBalance `json:"nativeBalance"` 14 | TokenBalances []TokenBalance `json:"tokenBalances"` 15 | Value struct { 16 | Currency string `json:"currency"` 17 | MarketValue float64 `json:"marketValue"` 18 | } 19 | } 20 | 21 | type TokenBalance struct { 22 | Address string `json:"address"` 23 | Name string `json:"name"` 24 | Symbol string `json:"symbol"` 25 | IconURL string `json:"iconUrl"` 26 | CoingeckoID string `json:"coingeckoId"` 27 | Balance float64 `json:"balance"` 28 | } 29 | 30 | func AccountPortfolio(address string) (*AccountPortfolioResp, error) { 31 | respData := AccountPortfolioResp{} 32 | _, err := resty.New(). 33 | SetBaseURL("https://account.metafi.codefi.network").R(). 34 | SetPathParam("address", address). 35 | SetQueryParam("chainId", "1"). 36 | SetQueryParam("includePrices", "true"). 37 | SetHeader("Referer", "https://portfolio.metamask.io/"). 38 | SetResult(&respData). 39 | Get("/accounts/{address}") 40 | 41 | if err != nil { 42 | return nil, err 43 | } 44 | 45 | return &respData, nil 46 | } 47 | 48 | func GetWalletBalance(address string) { 49 | resp, err := AccountPortfolio(address) 50 | if err != nil { 51 | log.Fatal(err) 52 | } 53 | fmt.Printf("Account address: %s\n", resp.AccountAddress) 54 | fmt.Printf("Chain ID: %d\n", resp.ChainID) 55 | fmt.Printf("ETH balance: %f\n", resp.NativeBalance.Balance) 56 | for _, token := range resp.TokenBalances { 57 | fmt.Printf("Token balance of %s: %f\n", token.Name, token.Balance) 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /mobile/day12/.metadata: -------------------------------------------------------------------------------- 1 | # This file tracks properties of this Flutter project. 2 | # Used by Flutter tool to assess capabilities and perform upgrades etc. 3 | # 4 | # This file should be version controlled. 5 | 6 | version: 7 | revision: 796c8ef79279f9c774545b3771238c3098dbefab 8 | channel: stable 9 | 10 | project_type: app 11 | 12 | # Tracks metadata for the flutter migrate command 13 | migration: 14 | platforms: 15 | - platform: root 16 | create_revision: 796c8ef79279f9c774545b3771238c3098dbefab 17 | base_revision: 796c8ef79279f9c774545b3771238c3098dbefab 18 | - platform: android 19 | create_revision: 796c8ef79279f9c774545b3771238c3098dbefab 20 | base_revision: 796c8ef79279f9c774545b3771238c3098dbefab 21 | - platform: ios 22 | create_revision: 796c8ef79279f9c774545b3771238c3098dbefab 23 | base_revision: 796c8ef79279f9c774545b3771238c3098dbefab 24 | - platform: linux 25 | create_revision: 796c8ef79279f9c774545b3771238c3098dbefab 26 | base_revision: 796c8ef79279f9c774545b3771238c3098dbefab 27 | - platform: macos 28 | create_revision: 796c8ef79279f9c774545b3771238c3098dbefab 29 | base_revision: 796c8ef79279f9c774545b3771238c3098dbefab 30 | - platform: web 31 | create_revision: 796c8ef79279f9c774545b3771238c3098dbefab 32 | base_revision: 796c8ef79279f9c774545b3771238c3098dbefab 33 | - platform: windows 34 | create_revision: 796c8ef79279f9c774545b3771238c3098dbefab 35 | base_revision: 796c8ef79279f9c774545b3771238c3098dbefab 36 | 37 | # User provided section 38 | 39 | # List of Local paths (relative to this file) that should be 40 | # ignored by the migrate tool. 41 | # 42 | # Files that are not part of the templates will be ignored by default. 43 | unmanaged_files: 44 | - 'lib/main.dart' 45 | - 'ios/Runner.xcodeproj/project.pbxproj' 46 | -------------------------------------------------------------------------------- /mobile/day13/.metadata: -------------------------------------------------------------------------------- 1 | # This file tracks properties of this Flutter project. 2 | # Used by Flutter tool to assess capabilities and perform upgrades etc. 3 | # 4 | # This file should be version controlled. 5 | 6 | version: 7 | revision: 796c8ef79279f9c774545b3771238c3098dbefab 8 | channel: stable 9 | 10 | project_type: app 11 | 12 | # Tracks metadata for the flutter migrate command 13 | migration: 14 | platforms: 15 | - platform: root 16 | create_revision: 796c8ef79279f9c774545b3771238c3098dbefab 17 | base_revision: 796c8ef79279f9c774545b3771238c3098dbefab 18 | - platform: android 19 | create_revision: 796c8ef79279f9c774545b3771238c3098dbefab 20 | base_revision: 796c8ef79279f9c774545b3771238c3098dbefab 21 | - platform: ios 22 | create_revision: 796c8ef79279f9c774545b3771238c3098dbefab 23 | base_revision: 796c8ef79279f9c774545b3771238c3098dbefab 24 | - platform: linux 25 | create_revision: 796c8ef79279f9c774545b3771238c3098dbefab 26 | base_revision: 796c8ef79279f9c774545b3771238c3098dbefab 27 | - platform: macos 28 | create_revision: 796c8ef79279f9c774545b3771238c3098dbefab 29 | base_revision: 796c8ef79279f9c774545b3771238c3098dbefab 30 | - platform: web 31 | create_revision: 796c8ef79279f9c774545b3771238c3098dbefab 32 | base_revision: 796c8ef79279f9c774545b3771238c3098dbefab 33 | - platform: windows 34 | create_revision: 796c8ef79279f9c774545b3771238c3098dbefab 35 | base_revision: 796c8ef79279f9c774545b3771238c3098dbefab 36 | 37 | # User provided section 38 | 39 | # List of Local paths (relative to this file) that should be 40 | # ignored by the migrate tool. 41 | # 42 | # Files that are not part of the templates will be ignored by default. 43 | unmanaged_files: 44 | - 'lib/main.dart' 45 | - 'ios/Runner.xcodeproj/project.pbxproj' 46 | -------------------------------------------------------------------------------- /mobile/day22/.metadata: -------------------------------------------------------------------------------- 1 | # This file tracks properties of this Flutter project. 2 | # Used by Flutter tool to assess capabilities and perform upgrades etc. 3 | # 4 | # This file should be version controlled. 5 | 6 | version: 7 | revision: 796c8ef79279f9c774545b3771238c3098dbefab 8 | channel: stable 9 | 10 | project_type: app 11 | 12 | # Tracks metadata for the flutter migrate command 13 | migration: 14 | platforms: 15 | - platform: root 16 | create_revision: 796c8ef79279f9c774545b3771238c3098dbefab 17 | base_revision: 796c8ef79279f9c774545b3771238c3098dbefab 18 | - platform: android 19 | create_revision: 796c8ef79279f9c774545b3771238c3098dbefab 20 | base_revision: 796c8ef79279f9c774545b3771238c3098dbefab 21 | - platform: ios 22 | create_revision: 796c8ef79279f9c774545b3771238c3098dbefab 23 | base_revision: 796c8ef79279f9c774545b3771238c3098dbefab 24 | - platform: linux 25 | create_revision: 796c8ef79279f9c774545b3771238c3098dbefab 26 | base_revision: 796c8ef79279f9c774545b3771238c3098dbefab 27 | - platform: macos 28 | create_revision: 796c8ef79279f9c774545b3771238c3098dbefab 29 | base_revision: 796c8ef79279f9c774545b3771238c3098dbefab 30 | - platform: web 31 | create_revision: 796c8ef79279f9c774545b3771238c3098dbefab 32 | base_revision: 796c8ef79279f9c774545b3771238c3098dbefab 33 | - platform: windows 34 | create_revision: 796c8ef79279f9c774545b3771238c3098dbefab 35 | base_revision: 796c8ef79279f9c774545b3771238c3098dbefab 36 | 37 | # User provided section 38 | 39 | # List of Local paths (relative to this file) that should be 40 | # ignored by the migrate tool. 41 | # 42 | # Files that are not part of the templates will be ignored by default. 43 | unmanaged_files: 44 | - 'lib/main.dart' 45 | - 'ios/Runner.xcodeproj/project.pbxproj' 46 | -------------------------------------------------------------------------------- /mobile/day12/ios/Runner/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleDisplayName 8 | Awesome Wallet 9 | CFBundleExecutable 10 | $(EXECUTABLE_NAME) 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | awesome_wallet 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | $(FLUTTER_BUILD_NAME) 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | $(FLUTTER_BUILD_NUMBER) 25 | LSRequiresIPhoneOS 26 | 27 | UILaunchStoryboardName 28 | LaunchScreen 29 | UIMainStoryboardFile 30 | Main 31 | UISupportedInterfaceOrientations 32 | 33 | UIInterfaceOrientationPortrait 34 | UIInterfaceOrientationLandscapeLeft 35 | UIInterfaceOrientationLandscapeRight 36 | 37 | UISupportedInterfaceOrientations~ipad 38 | 39 | UIInterfaceOrientationPortrait 40 | UIInterfaceOrientationPortraitUpsideDown 41 | UIInterfaceOrientationLandscapeLeft 42 | UIInterfaceOrientationLandscapeRight 43 | 44 | UIViewControllerBasedStatusBarAppearance 45 | 46 | CADisableMinimumFrameDurationOnPhone 47 | 48 | UIApplicationSupportsIndirectInputEvents 49 | 50 | 51 | 52 | -------------------------------------------------------------------------------- /mobile/day13/ios/Runner/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleDisplayName 8 | Awesome Wallet 9 | CFBundleExecutable 10 | $(EXECUTABLE_NAME) 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | awesome_wallet 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | $(FLUTTER_BUILD_NAME) 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | $(FLUTTER_BUILD_NUMBER) 25 | LSRequiresIPhoneOS 26 | 27 | UILaunchStoryboardName 28 | LaunchScreen 29 | UIMainStoryboardFile 30 | Main 31 | UISupportedInterfaceOrientations 32 | 33 | UIInterfaceOrientationPortrait 34 | UIInterfaceOrientationLandscapeLeft 35 | UIInterfaceOrientationLandscapeRight 36 | 37 | UISupportedInterfaceOrientations~ipad 38 | 39 | UIInterfaceOrientationPortrait 40 | UIInterfaceOrientationPortraitUpsideDown 41 | UIInterfaceOrientationLandscapeLeft 42 | UIInterfaceOrientationLandscapeRight 43 | 44 | UIViewControllerBasedStatusBarAppearance 45 | 46 | CADisableMinimumFrameDurationOnPhone 47 | 48 | UIApplicationSupportsIndirectInputEvents 49 | 50 | 51 | 52 | -------------------------------------------------------------------------------- /mobile/day22/ios/Runner/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleDisplayName 8 | Awesome Wallet 9 | CFBundleExecutable 10 | $(EXECUTABLE_NAME) 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | awesome_wallet 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | $(FLUTTER_BUILD_NAME) 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | $(FLUTTER_BUILD_NUMBER) 25 | LSRequiresIPhoneOS 26 | 27 | UILaunchStoryboardName 28 | LaunchScreen 29 | UIMainStoryboardFile 30 | Main 31 | UISupportedInterfaceOrientations 32 | 33 | UIInterfaceOrientationPortrait 34 | UIInterfaceOrientationLandscapeLeft 35 | UIInterfaceOrientationLandscapeRight 36 | 37 | UISupportedInterfaceOrientations~ipad 38 | 39 | UIInterfaceOrientationPortrait 40 | UIInterfaceOrientationPortraitUpsideDown 41 | UIInterfaceOrientationLandscapeLeft 42 | UIInterfaceOrientationLandscapeRight 43 | 44 | UIViewControllerBasedStatusBarAppearance 45 | 46 | CADisableMinimumFrameDurationOnPhone 47 | 48 | UIApplicationSupportsIndirectInputEvents 49 | 50 | 51 | 52 | -------------------------------------------------------------------------------- /frontend/day17/styles/Home.module.css: -------------------------------------------------------------------------------- 1 | .container { 2 | padding: 0 2rem; 3 | } 4 | 5 | .main { 6 | min-height: 100vh; 7 | padding: 4rem 0; 8 | flex: 1; 9 | display: flex; 10 | flex-direction: column; 11 | justify-content: center; 12 | align-items: center; 13 | } 14 | 15 | .footer { 16 | display: flex; 17 | flex: 1; 18 | padding: 2rem 0; 19 | border-top: 1px solid #eaeaea; 20 | justify-content: center; 21 | align-items: center; 22 | } 23 | 24 | .footer a { 25 | display: flex; 26 | justify-content: center; 27 | align-items: center; 28 | flex-grow: 1; 29 | } 30 | 31 | .title a { 32 | color: #0d76fc; 33 | text-decoration: none; 34 | } 35 | 36 | .title a:hover, 37 | .title a:focus, 38 | .title a:active { 39 | text-decoration: underline; 40 | } 41 | 42 | .title { 43 | margin: 3rem 0; 44 | line-height: 1; 45 | font-size: 2.5rem; 46 | } 47 | 48 | .title, 49 | .description { 50 | text-align: center; 51 | } 52 | 53 | .description { 54 | margin: 0 0 2rem; 55 | line-height: 1.5; 56 | font-size: 1.5rem; 57 | } 58 | 59 | .grid { 60 | display: flex; 61 | align-items: center; 62 | justify-content: center; 63 | flex-wrap: wrap; 64 | max-width: 800px; 65 | } 66 | 67 | .card { 68 | margin: 1rem; 69 | padding: 1.5rem; 70 | text-align: left; 71 | color: inherit; 72 | text-decoration: none; 73 | border: 1px solid #eaeaea; 74 | border-radius: 10px; 75 | transition: color 0.15s ease, border-color 0.15s ease; 76 | max-width: 350px; 77 | } 78 | 79 | .card:hover, 80 | .card:focus, 81 | .card:active { 82 | color: #0d76fc; 83 | border-color: #0d76fc; 84 | } 85 | 86 | .card h2 { 87 | margin: 0 0 1rem 0; 88 | font-size: 1.2rem; 89 | } 90 | 91 | .card p { 92 | margin: 0; 93 | font-size: 1.2rem; 94 | line-height: 1.5; 95 | } 96 | 97 | @media (max-width: 600px) { 98 | .grid { 99 | width: 100%; 100 | flex-direction: column; 101 | } 102 | } 103 | -------------------------------------------------------------------------------- /frontend/day6/styles/Home.module.css: -------------------------------------------------------------------------------- 1 | .container { 2 | padding: 0 2rem; 3 | } 4 | 5 | .main { 6 | min-height: 100vh; 7 | padding: 4rem 0; 8 | flex: 1; 9 | display: flex; 10 | flex-direction: column; 11 | justify-content: center; 12 | align-items: center; 13 | } 14 | 15 | .footer { 16 | display: flex; 17 | flex: 1; 18 | padding: 2rem 0; 19 | border-top: 1px solid #eaeaea; 20 | justify-content: center; 21 | align-items: center; 22 | } 23 | 24 | .footer a { 25 | display: flex; 26 | justify-content: center; 27 | align-items: center; 28 | flex-grow: 1; 29 | } 30 | 31 | .title a { 32 | color: #0d76fc; 33 | text-decoration: none; 34 | } 35 | 36 | .title a:hover, 37 | .title a:focus, 38 | .title a:active { 39 | text-decoration: underline; 40 | } 41 | 42 | .title { 43 | margin: 3rem 0; 44 | line-height: 1; 45 | font-size: 2.5rem; 46 | } 47 | 48 | .title, 49 | .description { 50 | text-align: center; 51 | } 52 | 53 | .description { 54 | margin: 0 0 2rem; 55 | line-height: 1.5; 56 | font-size: 1.5rem; 57 | } 58 | 59 | .grid { 60 | display: flex; 61 | align-items: center; 62 | justify-content: center; 63 | flex-wrap: wrap; 64 | max-width: 800px; 65 | } 66 | 67 | .card { 68 | margin: 1rem; 69 | padding: 1.5rem; 70 | text-align: left; 71 | color: inherit; 72 | text-decoration: none; 73 | border: 1px solid #eaeaea; 74 | border-radius: 10px; 75 | transition: color 0.15s ease, border-color 0.15s ease; 76 | max-width: 350px; 77 | } 78 | 79 | .card:hover, 80 | .card:focus, 81 | .card:active { 82 | color: #0d76fc; 83 | border-color: #0d76fc; 84 | } 85 | 86 | .card h2 { 87 | margin: 0 0 1rem 0; 88 | font-size: 1.2rem; 89 | } 90 | 91 | .card p { 92 | margin: 0; 93 | font-size: 1.2rem; 94 | line-height: 1.5; 95 | } 96 | 97 | @media (max-width: 600px) { 98 | .grid { 99 | width: 100%; 100 | flex-direction: column; 101 | } 102 | } 103 | -------------------------------------------------------------------------------- /frontend/day7/styles/Home.module.css: -------------------------------------------------------------------------------- 1 | .container { 2 | padding: 0 2rem; 3 | } 4 | 5 | .main { 6 | min-height: 100vh; 7 | padding: 4rem 0; 8 | flex: 1; 9 | display: flex; 10 | flex-direction: column; 11 | justify-content: center; 12 | align-items: center; 13 | } 14 | 15 | .footer { 16 | display: flex; 17 | flex: 1; 18 | padding: 2rem 0; 19 | border-top: 1px solid #eaeaea; 20 | justify-content: center; 21 | align-items: center; 22 | } 23 | 24 | .footer a { 25 | display: flex; 26 | justify-content: center; 27 | align-items: center; 28 | flex-grow: 1; 29 | } 30 | 31 | .title a { 32 | color: #0d76fc; 33 | text-decoration: none; 34 | } 35 | 36 | .title a:hover, 37 | .title a:focus, 38 | .title a:active { 39 | text-decoration: underline; 40 | } 41 | 42 | .title { 43 | margin: 3rem 0; 44 | line-height: 1; 45 | font-size: 2.5rem; 46 | } 47 | 48 | .title, 49 | .description { 50 | text-align: center; 51 | } 52 | 53 | .description { 54 | margin: 0 0 2rem; 55 | line-height: 1.5; 56 | font-size: 1.5rem; 57 | } 58 | 59 | .grid { 60 | display: flex; 61 | align-items: center; 62 | justify-content: center; 63 | flex-wrap: wrap; 64 | max-width: 800px; 65 | } 66 | 67 | .card { 68 | margin: 1rem; 69 | padding: 1.5rem; 70 | text-align: left; 71 | color: inherit; 72 | text-decoration: none; 73 | border: 1px solid #eaeaea; 74 | border-radius: 10px; 75 | transition: color 0.15s ease, border-color 0.15s ease; 76 | max-width: 350px; 77 | } 78 | 79 | .card:hover, 80 | .card:focus, 81 | .card:active { 82 | color: #0d76fc; 83 | border-color: #0d76fc; 84 | } 85 | 86 | .card h2 { 87 | margin: 0 0 1rem 0; 88 | font-size: 1.2rem; 89 | } 90 | 91 | .card p { 92 | margin: 0; 93 | font-size: 1.2rem; 94 | line-height: 1.5; 95 | } 96 | 97 | @media (max-width: 600px) { 98 | .grid { 99 | width: 100%; 100 | flex-direction: column; 101 | } 102 | } 103 | -------------------------------------------------------------------------------- /backend/day10/hd_wallet.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "fmt" 5 | "log" 6 | 7 | "github.com/ethereum/go-ethereum/accounts" 8 | "github.com/ethereum/go-ethereum/common/hexutil" 9 | "github.com/ethereum/go-ethereum/crypto" 10 | hdwallet "github.com/miguelmota/go-ethereum-hdwallet" 11 | "github.com/tyler-smith/go-bip39" 12 | ) 13 | 14 | // GenerateMnemonic generate mnemonic 15 | func GenerateMnemonic() string { 16 | entropy, err := bip39.NewEntropy(128) 17 | if err != nil { 18 | log.Fatal(err) 19 | } 20 | mnemonic, err := bip39.NewMnemonic(entropy) 21 | if err != nil { 22 | log.Fatal(err) 23 | } 24 | return mnemonic 25 | } 26 | 27 | // DeriveWallet derive wallet from mnemonic and path. It returns the account and private key. 28 | func DeriveWallet(mnemonic string, path accounts.DerivationPath) (*accounts.Account, string, error) { 29 | wallet, err := hdwallet.NewFromMnemonic(mnemonic) 30 | if err != nil { 31 | return nil, "", err 32 | } 33 | account, err := wallet.Derive(path, false) 34 | if err != nil { 35 | return nil, "", err 36 | } 37 | privateKey, err := wallet.PrivateKey(account) 38 | if err != nil { 39 | return nil, "", err 40 | } 41 | privateKeyBytes := crypto.FromECDSA(privateKey) 42 | return &account, hexutil.Encode(privateKeyBytes), nil 43 | } 44 | 45 | func main() { 46 | mnemonic := GenerateMnemonic() 47 | fmt.Printf("mnemonic: %s\n", mnemonic) 48 | 49 | path := hdwallet.MustParseDerivationPath("m/44'/60'/0'/0/0") 50 | account, privateKeyHex, err := DeriveWallet(mnemonic, path) 51 | if err != nil { 52 | log.Fatal(err) 53 | } 54 | fmt.Printf("1st account: %s\n", account.Address.Hex()) 55 | fmt.Printf("1st account private key: %s\n", privateKeyHex) 56 | 57 | path = hdwallet.MustParseDerivationPath("m/44'/60'/0'/0/1") 58 | account, privateKeyHex, err = DeriveWallet(mnemonic, path) 59 | if err != nil { 60 | log.Fatal(err) 61 | } 62 | fmt.Printf("2nd account: %s\n", account.Address.Hex()) 63 | fmt.Printf("2nd account private key: %s\n", privateKeyHex) 64 | } 65 | -------------------------------------------------------------------------------- /mobile/day14/ens.dart: -------------------------------------------------------------------------------- 1 | import 'dart:convert'; 2 | import 'dart:io'; 3 | import 'package:http/http.dart'; 4 | import 'package:ens_dart/ens_dart.dart'; 5 | import 'package:web3dart/web3dart.dart'; 6 | 7 | Future> getENSNames(String wallet) async { 8 | final query = ''' 9 | query { 10 | domains(where: {owner_in: ["${wallet.toLowerCase()}"]}) { 11 | name 12 | } 13 | } 14 | '''; 15 | 16 | final response = await Client().post( 17 | Uri.parse('https://api.thegraph.com/subgraphs/name/ensdomains/ens'), 18 | headers: {'Content-Type': 'application/json'}, 19 | body: jsonEncode({ 20 | "query": query, 21 | }), 22 | ); 23 | 24 | if (response.statusCode >= 400) { 25 | throw Exception(response.body); 26 | } 27 | final parsedData = jsonDecode(response.body); 28 | final responseData = parsedData['data']; 29 | 30 | var ensNames = []; 31 | if (responseData['domains'] != null) { 32 | for (final v in responseData['domains']) { 33 | ensNames.add(v['name']); 34 | } 35 | } 36 | return ensNames; 37 | } 38 | 39 | void main() async { 40 | final alchemyApiKey = Platform.environment['ALCHEMY_API_KEY']; 41 | if (alchemyApiKey == null) { 42 | print('ALCHEMY_API_KEY is not set'); 43 | exit(1); 44 | } 45 | final rpcUrl = 'https://eth-mainnet.g.alchemy.com/v2/$alchemyApiKey'; 46 | final web3Client = Web3Client(rpcUrl, Client()); 47 | final ens = Ens(client: web3Client); 48 | 49 | final resolvedAddress = await ens.withName("vitalik.eth").getAddress(); 50 | print('resolvedAddress: $resolvedAddress'); 51 | final textRecord = await ens.withName("vitalik.eth").getTextRecord(); 52 | print('textRecord: $textRecord'); 53 | 54 | final reverseEnsName = await ens 55 | .withAddress("0xd8da6bf26964af9d7eed9e03e53415d37aa96045") 56 | .getName(); 57 | print('reverseEnsName: $reverseEnsName'); 58 | 59 | final allEnsNames = 60 | await getENSNames("0xd8da6bf26964af9d7eed9e03e53415d37aa96045"); 61 | print('allEnsNames: $allEnsNames'); 62 | } 63 | 64 | 65 | -------------------------------------------------------------------------------- /mobile/day12/lib/tx.dart: -------------------------------------------------------------------------------- 1 | import 'dart:typed_data'; 2 | 3 | import 'package:flutter_bitcoin/flutter_bitcoin.dart' hide Transaction; 4 | import 'package:hex/hex.dart'; 5 | import 'package:web3dart/web3dart.dart'; 6 | import 'package:http/http.dart'; 7 | import 'package:flutter_dotenv/flutter_dotenv.dart'; 8 | 9 | final alchemyApiKey = dotenv.get('ALCHEMY_API_KEY'); 10 | final web3Client = 11 | Web3Client('https://eth-sepolia.g.alchemy.com/v2/$alchemyApiKey', Client()); 12 | 13 | Future signTransaction({ 14 | required EthPrivateKey privateKey, 15 | required Transaction transaction, 16 | }) async { 17 | try { 18 | final result = await web3Client.signTransaction( 19 | privateKey, 20 | transaction, 21 | chainId: 11155111, 22 | ); 23 | return HEX.encode(result); 24 | } catch (e) { 25 | rethrow; 26 | } 27 | } 28 | 29 | Future sendRawTransaction(String tx) async { 30 | try { 31 | final txHash = 32 | await web3Client.sendRawTransaction(Uint8List.fromList(HEX.decode(tx))); 33 | return txHash; 34 | } catch (e) { 35 | rethrow; 36 | } 37 | } 38 | 39 | String sampleBitcoinTx(HDWallet btcWallet) { 40 | final txb = TransactionBuilder(); 41 | txb.setVersion(1); 42 | // previous transaction output, has 15000 satoshis 43 | txb.addInput( 44 | '61d520ccb74288c96bc1a2b20ea1c0d5a704776dd0164a396efec3ea7040349d', 0); 45 | // (in)15000 - (out)12000 = (fee)3000, this is the miner fee 46 | txb.addOutput('1cMh228HTCiwS8ZsaakH8A8wze1JR5ZsP', 12000); 47 | txb.sign(vin: 0, keyPair: ECPair.fromWIF(btcWallet.wif!)); 48 | return txb.build().toHex(); 49 | } 50 | 51 | Future sampleEthereumTx(HDWallet ethWallet) async { 52 | final ethPriKey = EthPrivateKey.fromHex(ethWallet.privKey!); 53 | return await signTransaction( 54 | privateKey: ethPriKey, 55 | transaction: Transaction( 56 | from: ethPriKey.address, 57 | to: EthereumAddress.fromHex("0xE2Dc3214f7096a94077E71A3E218243E289F1067"), 58 | value: EtherAmount.fromBase10String(EtherUnit.gwei, "10000"), 59 | ), 60 | ); 61 | } 62 | -------------------------------------------------------------------------------- /frontend/day17/pages/_app.tsx: -------------------------------------------------------------------------------- 1 | import "../styles/globals.css"; 2 | import "@rainbow-me/rainbowkit/styles.css"; 3 | import { 4 | RainbowKitProvider, 5 | darkTheme, 6 | connectorsForWallets, 7 | } from "@rainbow-me/rainbowkit"; 8 | import { 9 | injectedWallet, 10 | rainbowWallet, 11 | walletConnectWallet, 12 | trustWallet, 13 | } from "@rainbow-me/rainbowkit/wallets"; 14 | import type { AppProps } from "next/app"; 15 | import { configureChains, createConfig, WagmiConfig } from "wagmi"; 16 | import { 17 | arbitrum, 18 | mainnet, 19 | sepolia, 20 | optimism, 21 | polygon, 22 | base, 23 | zora, 24 | } from "wagmi/chains"; 25 | import { publicProvider } from "wagmi/providers/public"; 26 | import { alchemyProvider } from "wagmi/providers/alchemy"; 27 | 28 | const { chains, publicClient, webSocketPublicClient } = configureChains( 29 | [mainnet, sepolia, polygon, optimism, arbitrum, base, zora], 30 | [ 31 | alchemyProvider({ apiKey: process.env.NEXT_PUBLIC_ALCHEMY_KEY! }), 32 | publicProvider(), 33 | ] 34 | ); 35 | 36 | const projectId = "8915b4a2b51ba9c555cfd42bbf247cc9"; 37 | const connectors = connectorsForWallets([ 38 | { 39 | groupName: "Recommended", 40 | wallets: [ 41 | injectedWallet({ chains }), 42 | rainbowWallet({ projectId, chains }), 43 | walletConnectWallet({ projectId, chains }), 44 | trustWallet({ projectId, chains }), 45 | ], 46 | }, 47 | ]); 48 | 49 | const wagmiConfig = createConfig({ 50 | autoConnect: true, 51 | connectors, 52 | publicClient, 53 | webSocketPublicClient, 54 | }); 55 | 56 | function MyApp({ Component, pageProps }: AppProps) { 57 | return ( 58 | 59 | 69 | 70 | 71 | 72 | ); 73 | } 74 | 75 | export default MyApp; 76 | -------------------------------------------------------------------------------- /frontend/day6/pages/_app.tsx: -------------------------------------------------------------------------------- 1 | import "../styles/globals.css"; 2 | import "@rainbow-me/rainbowkit/styles.css"; 3 | import { 4 | RainbowKitProvider, 5 | darkTheme, 6 | connectorsForWallets, 7 | } from "@rainbow-me/rainbowkit"; 8 | import { 9 | injectedWallet, 10 | rainbowWallet, 11 | walletConnectWallet, 12 | trustWallet, 13 | } from "@rainbow-me/rainbowkit/wallets"; 14 | import type { AppProps } from "next/app"; 15 | import { configureChains, createConfig, WagmiConfig } from "wagmi"; 16 | import { 17 | arbitrum, 18 | mainnet, 19 | sepolia, 20 | optimism, 21 | polygon, 22 | base, 23 | zora, 24 | } from "wagmi/chains"; 25 | import { publicProvider } from "wagmi/providers/public"; 26 | import { alchemyProvider } from "wagmi/providers/alchemy"; 27 | 28 | const { chains, publicClient, webSocketPublicClient } = configureChains( 29 | [mainnet, sepolia, polygon, optimism, arbitrum, base, zora], 30 | [ 31 | alchemyProvider({ apiKey: process.env.NEXT_PUBLIC_ALCHEMY_KEY! }), 32 | publicProvider(), 33 | ] 34 | ); 35 | 36 | const projectId = "8915b4a2b51ba9c555cfd42bbf247cc9"; 37 | const connectors = connectorsForWallets([ 38 | { 39 | groupName: "Recommended", 40 | wallets: [ 41 | injectedWallet({ chains }), 42 | rainbowWallet({ projectId, chains }), 43 | walletConnectWallet({ projectId, chains }), 44 | trustWallet({ projectId, chains }), 45 | ], 46 | }, 47 | ]); 48 | 49 | const wagmiConfig = createConfig({ 50 | autoConnect: true, 51 | connectors, 52 | publicClient, 53 | webSocketPublicClient, 54 | }); 55 | 56 | function MyApp({ Component, pageProps }: AppProps) { 57 | return ( 58 | 59 | 69 | 70 | 71 | 72 | ); 73 | } 74 | 75 | export default MyApp; 76 | -------------------------------------------------------------------------------- /frontend/day7/pages/_app.tsx: -------------------------------------------------------------------------------- 1 | import "../styles/globals.css"; 2 | import "@rainbow-me/rainbowkit/styles.css"; 3 | import { 4 | RainbowKitProvider, 5 | darkTheme, 6 | connectorsForWallets, 7 | } from "@rainbow-me/rainbowkit"; 8 | import { 9 | injectedWallet, 10 | rainbowWallet, 11 | walletConnectWallet, 12 | trustWallet, 13 | } from "@rainbow-me/rainbowkit/wallets"; 14 | import type { AppProps } from "next/app"; 15 | import { configureChains, createConfig, WagmiConfig } from "wagmi"; 16 | import { 17 | arbitrum, 18 | mainnet, 19 | sepolia, 20 | optimism, 21 | polygon, 22 | base, 23 | zora, 24 | } from "wagmi/chains"; 25 | import { publicProvider } from "wagmi/providers/public"; 26 | import { alchemyProvider } from "wagmi/providers/alchemy"; 27 | 28 | const { chains, publicClient, webSocketPublicClient } = configureChains( 29 | [mainnet, sepolia, polygon, optimism, arbitrum, base, zora], 30 | [ 31 | alchemyProvider({ apiKey: process.env.NEXT_PUBLIC_ALCHEMY_KEY! }), 32 | publicProvider(), 33 | ] 34 | ); 35 | 36 | const projectId = "8915b4a2b51ba9c555cfd42bbf247cc9"; 37 | const connectors = connectorsForWallets([ 38 | { 39 | groupName: "Recommended", 40 | wallets: [ 41 | injectedWallet({ chains }), 42 | rainbowWallet({ projectId, chains }), 43 | walletConnectWallet({ projectId, chains }), 44 | trustWallet({ projectId, chains }), 45 | ], 46 | }, 47 | ]); 48 | 49 | const wagmiConfig = createConfig({ 50 | autoConnect: true, 51 | connectors, 52 | publicClient, 53 | webSocketPublicClient, 54 | }); 55 | 56 | function MyApp({ Component, pageProps }: AppProps) { 57 | return ( 58 | 59 | 69 | 70 | 71 | 72 | ); 73 | } 74 | 75 | export default MyApp; 76 | -------------------------------------------------------------------------------- /backend/day9/verify.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "fmt" 5 | "strings" 6 | 7 | "github.com/ethereum/go-ethereum/accounts" 8 | "github.com/ethereum/go-ethereum/common/hexutil" 9 | "github.com/ethereum/go-ethereum/crypto" 10 | "github.com/spruceid/siwe-go" 11 | ) 12 | 13 | // VerifySignature checks the signature of the given message. 14 | func VerifySignature(from, sigHex, msg string) error { 15 | // input validation 16 | sig, err := hexutil.Decode(sigHex) 17 | if err != nil { 18 | return fmt.Errorf("failed to decode signature: %v", err.Error()) 19 | } 20 | if len(sig) != 65 { 21 | return fmt.Errorf("invalid Ethereum signature length: %v", len(sig)) 22 | } 23 | if sig[64] != 27 && sig[64] != 28 { 24 | return fmt.Errorf("invalid Ethereum signature (V is not 27 or 28): %v", sig[64]) 25 | } 26 | 27 | // calculate message hash 28 | msgHash := accounts.TextHash([]byte(msg)) 29 | 30 | // recover public key from signature and verify it matches the from address 31 | sig[crypto.RecoveryIDOffset] -= 27 // Transform yellow paper V from 27/28 to 0/1 32 | recovered, err := crypto.SigToPub(msgHash, sig) 33 | if err != nil { 34 | return fmt.Errorf("failed to recover public key: %v", err.Error()) 35 | } 36 | recoveredAddr := crypto.PubkeyToAddress(*recovered) 37 | if strings.EqualFold(from, recoveredAddr.Hex()) { 38 | return nil 39 | } 40 | return fmt.Errorf("invalid Ethereum signature (addresses don't match)") 41 | } 42 | 43 | // VerifySiweSignature checks the signature of the given SIWE message. It returns the nonce of the message if it's valid 44 | func VerifySiweSignature(from, sigHex, msg, domain string) (string, error) { 45 | message, err := siwe.ParseMessage(msg) 46 | if err != nil { 47 | return "", fmt.Errorf("failed to parse SIWE message: %v", err.Error()) 48 | } 49 | 50 | publicKey, err := message.Verify(sigHex, &domain, nil, nil) 51 | if err != nil { 52 | return "", fmt.Errorf("failed to verify signature: %v", err.Error()) 53 | } 54 | 55 | recoveredAddr := crypto.PubkeyToAddress(*publicKey) 56 | if strings.EqualFold(from, recoveredAddr.Hex()) { 57 | return message.GetNonce(), nil 58 | } 59 | return "", fmt.Errorf("invalid Ethereum signature (addresses don't match)") 60 | } 61 | -------------------------------------------------------------------------------- /frontend/day4/src/app/page.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | 3 | import { 4 | WagmiConfig, 5 | createConfig, 6 | useAccount, 7 | useConnect, 8 | useDisconnect, 9 | configureChains, 10 | mainnet, 11 | sepolia, 12 | useBalance, 13 | useSwitchNetwork, 14 | useNetwork, 15 | } from "wagmi"; 16 | import { InjectedConnector } from "wagmi/connectors/injected"; 17 | import { alchemyProvider } from "wagmi/providers/alchemy"; 18 | import { publicProvider } from "wagmi/providers/public"; 19 | 20 | const { chains, publicClient, webSocketPublicClient } = configureChains( 21 | [mainnet, sepolia], 22 | [ 23 | alchemyProvider({ apiKey: process.env.NEXT_PUBLIC_ALCHEMY_KEY! }), 24 | publicProvider(), 25 | ] 26 | ); 27 | 28 | const config = createConfig({ 29 | autoConnect: true, 30 | publicClient: publicClient, 31 | }); 32 | 33 | function Profile() { 34 | const { address, isConnected } = useAccount(); 35 | const { connect } = useConnect({ 36 | connector: new InjectedConnector(), 37 | }); 38 | const { disconnect } = useDisconnect(); 39 | const balance = useBalance({ address }); 40 | 41 | const { chain } = useNetwork(); 42 | const { error, switchNetwork } = useSwitchNetwork(); 43 | 44 | if (isConnected) 45 | return ( 46 |
47 |
Connected to {address}
48 |
Balance: {balance.data?.formatted}
49 | 50 | 51 |
Chains:
52 | {chain &&
Connected to {chain.name}
} 53 | {chains.map((x) => ( 54 |
55 | 61 |
62 | ))} 63 |
64 | ); 65 | return ; 66 | } 67 | 68 | export default function App() { 69 | return ( 70 | 71 |
72 | 73 |
74 |
75 | ); 76 | } 77 | -------------------------------------------------------------------------------- /frontend/day7/pages/signin.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | 3 | import { useAccount, useSignMessage } from "wagmi"; 4 | import { ConnectButton } from "@rainbow-me/rainbowkit"; 5 | import { useEffect, useState } from "react"; 6 | import * as siwe from "siwe"; 7 | 8 | function createSiweMessage(address: string): string { 9 | const siweMessage = new siwe.SiweMessage({ 10 | domain: "localhost:3000", 11 | address, 12 | statement: "Welcome to myawesomedapp. Please login to continue.", 13 | uri: "http://localhost:3000/signin", 14 | version: "1", 15 | chainId: 1, 16 | }); 17 | return siweMessage.prepareMessage(); 18 | } 19 | 20 | function SignIn() { 21 | const { address } = useAccount(); 22 | const [message, setMessage] = useState(""); 23 | useEffect(() => { 24 | if (address) { 25 | const timestamp = Math.floor(new Date().getTime() / 1000); 26 | // set msg based on current wallet address and timestamp, with unique application string 27 | setMessage( 28 | `Welcome to myawesomedapp.com. Please login to continue. Challenge: ${address?.toLowerCase()}:${timestamp}` 29 | ); 30 | } 31 | }, [address]); 32 | 33 | const { 34 | data: signature, 35 | isError, 36 | error, 37 | signMessage, 38 | } = useSignMessage({ message }); 39 | 40 | const [siweMessage, setSiweMessage] = useState(""); 41 | useEffect(() => { 42 | if (address) { 43 | setSiweMessage(createSiweMessage(address)); 44 | } 45 | }, [address]); 46 | const { data: siweSignature, signMessage: signSiweMessage } = useSignMessage({ 47 | message: siweMessage, 48 | }); 49 | 50 | return ( 51 |
61 | 62 | 63 | 64 |
Message: {message}
65 |
Signature: {signature}
66 | {isError &&
Error: {error?.message}
} 67 |
SIWE Message: {siweMessage}
68 |
SIWE Signature: {siweSignature}
69 |
70 | ); 71 | } 72 | 73 | export default function App() { 74 | return ( 75 |
76 | 77 |
78 | ); 79 | } 80 | -------------------------------------------------------------------------------- /mobile/day12/ios/Runner/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /mobile/day13/ios/Runner/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /mobile/day22/ios/Runner/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /mobile/day12/android/app/build.gradle: -------------------------------------------------------------------------------- 1 | def localProperties = new Properties() 2 | def localPropertiesFile = rootProject.file('local.properties') 3 | if (localPropertiesFile.exists()) { 4 | localPropertiesFile.withReader('UTF-8') { reader -> 5 | localProperties.load(reader) 6 | } 7 | } 8 | 9 | def flutterRoot = localProperties.getProperty('flutter.sdk') 10 | if (flutterRoot == null) { 11 | throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") 12 | } 13 | 14 | def flutterVersionCode = localProperties.getProperty('flutter.versionCode') 15 | if (flutterVersionCode == null) { 16 | flutterVersionCode = '1' 17 | } 18 | 19 | def flutterVersionName = localProperties.getProperty('flutter.versionName') 20 | if (flutterVersionName == null) { 21 | flutterVersionName = '1.0' 22 | } 23 | 24 | apply plugin: 'com.android.application' 25 | apply plugin: 'kotlin-android' 26 | apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" 27 | 28 | android { 29 | namespace "com.example.wallet.awesome_wallet" 30 | compileSdkVersion flutter.compileSdkVersion 31 | ndkVersion flutter.ndkVersion 32 | 33 | compileOptions { 34 | sourceCompatibility JavaVersion.VERSION_1_8 35 | targetCompatibility JavaVersion.VERSION_1_8 36 | } 37 | 38 | kotlinOptions { 39 | jvmTarget = '1.8' 40 | } 41 | 42 | sourceSets { 43 | main.java.srcDirs += 'src/main/kotlin' 44 | } 45 | 46 | defaultConfig { 47 | // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). 48 | applicationId "com.example.wallet.awesome_wallet" 49 | // You can update the following values to match your application needs. 50 | // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. 51 | minSdkVersion flutter.minSdkVersion 52 | targetSdkVersion flutter.targetSdkVersion 53 | versionCode flutterVersionCode.toInteger() 54 | versionName flutterVersionName 55 | } 56 | 57 | buildTypes { 58 | release { 59 | // TODO: Add your own signing config for the release build. 60 | // Signing with the debug keys for now, so `flutter run --release` works. 61 | signingConfig signingConfigs.debug 62 | } 63 | } 64 | } 65 | 66 | flutter { 67 | source '../..' 68 | } 69 | 70 | dependencies { 71 | implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" 72 | } 73 | -------------------------------------------------------------------------------- /mobile/day13/android/app/build.gradle: -------------------------------------------------------------------------------- 1 | def localProperties = new Properties() 2 | def localPropertiesFile = rootProject.file('local.properties') 3 | if (localPropertiesFile.exists()) { 4 | localPropertiesFile.withReader('UTF-8') { reader -> 5 | localProperties.load(reader) 6 | } 7 | } 8 | 9 | def flutterRoot = localProperties.getProperty('flutter.sdk') 10 | if (flutterRoot == null) { 11 | throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") 12 | } 13 | 14 | def flutterVersionCode = localProperties.getProperty('flutter.versionCode') 15 | if (flutterVersionCode == null) { 16 | flutterVersionCode = '1' 17 | } 18 | 19 | def flutterVersionName = localProperties.getProperty('flutter.versionName') 20 | if (flutterVersionName == null) { 21 | flutterVersionName = '1.0' 22 | } 23 | 24 | apply plugin: 'com.android.application' 25 | apply plugin: 'kotlin-android' 26 | apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" 27 | 28 | android { 29 | namespace "com.example.wallet.awesome_wallet" 30 | compileSdkVersion flutter.compileSdkVersion 31 | ndkVersion flutter.ndkVersion 32 | 33 | compileOptions { 34 | sourceCompatibility JavaVersion.VERSION_1_8 35 | targetCompatibility JavaVersion.VERSION_1_8 36 | } 37 | 38 | kotlinOptions { 39 | jvmTarget = '1.8' 40 | } 41 | 42 | sourceSets { 43 | main.java.srcDirs += 'src/main/kotlin' 44 | } 45 | 46 | defaultConfig { 47 | // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). 48 | applicationId "com.example.wallet.awesome_wallet" 49 | // You can update the following values to match your application needs. 50 | // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. 51 | minSdkVersion flutter.minSdkVersion 52 | targetSdkVersion flutter.targetSdkVersion 53 | versionCode flutterVersionCode.toInteger() 54 | versionName flutterVersionName 55 | } 56 | 57 | buildTypes { 58 | release { 59 | // TODO: Add your own signing config for the release build. 60 | // Signing with the debug keys for now, so `flutter run --release` works. 61 | signingConfig signingConfigs.debug 62 | } 63 | } 64 | } 65 | 66 | flutter { 67 | source '../..' 68 | } 69 | 70 | dependencies { 71 | implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" 72 | } 73 | -------------------------------------------------------------------------------- /mobile/day22/android/app/build.gradle: -------------------------------------------------------------------------------- 1 | def localProperties = new Properties() 2 | def localPropertiesFile = rootProject.file('local.properties') 3 | if (localPropertiesFile.exists()) { 4 | localPropertiesFile.withReader('UTF-8') { reader -> 5 | localProperties.load(reader) 6 | } 7 | } 8 | 9 | def flutterRoot = localProperties.getProperty('flutter.sdk') 10 | if (flutterRoot == null) { 11 | throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") 12 | } 13 | 14 | def flutterVersionCode = localProperties.getProperty('flutter.versionCode') 15 | if (flutterVersionCode == null) { 16 | flutterVersionCode = '1' 17 | } 18 | 19 | def flutterVersionName = localProperties.getProperty('flutter.versionName') 20 | if (flutterVersionName == null) { 21 | flutterVersionName = '1.0' 22 | } 23 | 24 | apply plugin: 'com.android.application' 25 | apply plugin: 'kotlin-android' 26 | apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" 27 | 28 | android { 29 | namespace "com.example.wallet.awesome_wallet" 30 | compileSdkVersion flutter.compileSdkVersion 31 | ndkVersion flutter.ndkVersion 32 | 33 | compileOptions { 34 | sourceCompatibility JavaVersion.VERSION_1_8 35 | targetCompatibility JavaVersion.VERSION_1_8 36 | } 37 | 38 | kotlinOptions { 39 | jvmTarget = '1.8' 40 | } 41 | 42 | sourceSets { 43 | main.java.srcDirs += 'src/main/kotlin' 44 | } 45 | 46 | defaultConfig { 47 | // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). 48 | applicationId "com.example.wallet.awesome_wallet" 49 | // You can update the following values to match your application needs. 50 | // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. 51 | minSdkVersion flutter.minSdkVersion 52 | targetSdkVersion flutter.targetSdkVersion 53 | versionCode flutterVersionCode.toInteger() 54 | versionName flutterVersionName 55 | } 56 | 57 | buildTypes { 58 | release { 59 | // TODO: Add your own signing config for the release build. 60 | // Signing with the debug keys for now, so `flutter run --release` works. 61 | signingConfig signingConfigs.debug 62 | } 63 | } 64 | } 65 | 66 | flutter { 67 | source '../..' 68 | } 69 | 70 | dependencies { 71 | implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" 72 | } 73 | -------------------------------------------------------------------------------- /mobile/day25/lib/main.dart: -------------------------------------------------------------------------------- 1 | import 'dart:convert'; 2 | import 'dart:io'; 3 | import 'package:dio/dio.dart'; 4 | 5 | import 'one_inch_quote_response.dart'; 6 | import 'one_inch_tx.dart'; 7 | 8 | final Dio dio = Dio(); 9 | 10 | Future main(List args) async { 11 | final oneinchApiKey = Platform.environment['ONEINCH_API_KEY']; 12 | if (oneinchApiKey == null) { 13 | print('ONEINCH_API_KEY is not set'); 14 | exit(1); 15 | } 16 | 17 | dio.options.baseUrl = 'https://api.1inch.dev/swap'; 18 | dio.options.headers = { 19 | 'Accept': 'application/json', 20 | 'Authorization': 'Bearer ${oneinchApiKey}', 21 | }; 22 | 23 | final quote = await getQuote(1, 24 | fromToken: '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee', 25 | toToken: '0xdAC17F958D2ee523a2206206994597C13D831ec7', 26 | amount: BigInt.from(1000000000000000)); 27 | print(JsonEncoder.withIndent(' ').convert(quote)); 28 | 29 | final swapData = await getSwapData(1, 30 | fromTokenAddress: '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee', 31 | toTokenAddress: '0xdAC17F958D2ee523a2206206994597C13D831ec7', 32 | amount: BigInt.from(1000000000000000), 33 | fromAddress: '0x2089035369B33403DdcaBa6258c34e0B3FfbbBd9'); 34 | print(JsonEncoder.withIndent(' ').convert(swapData)); 35 | } 36 | 37 | @override 38 | Future getQuote( 39 | int chainId, { 40 | required String fromToken, 41 | required String toToken, 42 | required BigInt amount, 43 | }) async { 44 | final params = { 45 | 'src': fromToken, 46 | 'dst': toToken, 47 | 'amount': amount.toString(), 48 | 'includeTokensInfo': true, 49 | 'includeProtocols': true, 50 | 'includeGas': true, 51 | }; 52 | final response = 53 | await dio.get('/v5.2/$chainId/quote', queryParameters: params); 54 | final quote = OneInchQuoteResponse.fromJson(response.data); 55 | return quote; 56 | } 57 | 58 | @override 59 | Future getSwapData( 60 | int chainId, { 61 | required String fromTokenAddress, 62 | required String toTokenAddress, 63 | required BigInt amount, 64 | required String fromAddress, 65 | int slippage = 1, 66 | String? permit, 67 | }) async { 68 | final queryData = { 69 | 'fromTokenAddress': fromTokenAddress, 70 | 'toTokenAddress': toTokenAddress, 71 | 'amount': amount.toString(), 72 | 'fromAddress': fromAddress, 73 | 'slippage': slippage, 74 | 'fee': "0", 75 | }; 76 | if (permit != null) { 77 | queryData['permit'] = permit; 78 | } 79 | final response = await dio.get( 80 | '/v5.2/$chainId/swap', 81 | queryParameters: queryData, 82 | ); 83 | final swapResponse = OneInchTx.fromJson(response.data['tx']); 84 | return swapResponse; 85 | } 86 | -------------------------------------------------------------------------------- /mobile/day12/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "20x20", 5 | "idiom" : "iphone", 6 | "filename" : "Icon-App-20x20@2x.png", 7 | "scale" : "2x" 8 | }, 9 | { 10 | "size" : "20x20", 11 | "idiom" : "iphone", 12 | "filename" : "Icon-App-20x20@3x.png", 13 | "scale" : "3x" 14 | }, 15 | { 16 | "size" : "29x29", 17 | "idiom" : "iphone", 18 | "filename" : "Icon-App-29x29@1x.png", 19 | "scale" : "1x" 20 | }, 21 | { 22 | "size" : "29x29", 23 | "idiom" : "iphone", 24 | "filename" : "Icon-App-29x29@2x.png", 25 | "scale" : "2x" 26 | }, 27 | { 28 | "size" : "29x29", 29 | "idiom" : "iphone", 30 | "filename" : "Icon-App-29x29@3x.png", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "size" : "40x40", 35 | "idiom" : "iphone", 36 | "filename" : "Icon-App-40x40@2x.png", 37 | "scale" : "2x" 38 | }, 39 | { 40 | "size" : "40x40", 41 | "idiom" : "iphone", 42 | "filename" : "Icon-App-40x40@3x.png", 43 | "scale" : "3x" 44 | }, 45 | { 46 | "size" : "60x60", 47 | "idiom" : "iphone", 48 | "filename" : "Icon-App-60x60@2x.png", 49 | "scale" : "2x" 50 | }, 51 | { 52 | "size" : "60x60", 53 | "idiom" : "iphone", 54 | "filename" : "Icon-App-60x60@3x.png", 55 | "scale" : "3x" 56 | }, 57 | { 58 | "size" : "20x20", 59 | "idiom" : "ipad", 60 | "filename" : "Icon-App-20x20@1x.png", 61 | "scale" : "1x" 62 | }, 63 | { 64 | "size" : "20x20", 65 | "idiom" : "ipad", 66 | "filename" : "Icon-App-20x20@2x.png", 67 | "scale" : "2x" 68 | }, 69 | { 70 | "size" : "29x29", 71 | "idiom" : "ipad", 72 | "filename" : "Icon-App-29x29@1x.png", 73 | "scale" : "1x" 74 | }, 75 | { 76 | "size" : "29x29", 77 | "idiom" : "ipad", 78 | "filename" : "Icon-App-29x29@2x.png", 79 | "scale" : "2x" 80 | }, 81 | { 82 | "size" : "40x40", 83 | "idiom" : "ipad", 84 | "filename" : "Icon-App-40x40@1x.png", 85 | "scale" : "1x" 86 | }, 87 | { 88 | "size" : "40x40", 89 | "idiom" : "ipad", 90 | "filename" : "Icon-App-40x40@2x.png", 91 | "scale" : "2x" 92 | }, 93 | { 94 | "size" : "76x76", 95 | "idiom" : "ipad", 96 | "filename" : "Icon-App-76x76@1x.png", 97 | "scale" : "1x" 98 | }, 99 | { 100 | "size" : "76x76", 101 | "idiom" : "ipad", 102 | "filename" : "Icon-App-76x76@2x.png", 103 | "scale" : "2x" 104 | }, 105 | { 106 | "size" : "83.5x83.5", 107 | "idiom" : "ipad", 108 | "filename" : "Icon-App-83.5x83.5@2x.png", 109 | "scale" : "2x" 110 | }, 111 | { 112 | "size" : "1024x1024", 113 | "idiom" : "ios-marketing", 114 | "filename" : "Icon-App-1024x1024@1x.png", 115 | "scale" : "1x" 116 | } 117 | ], 118 | "info" : { 119 | "version" : 1, 120 | "author" : "xcode" 121 | } 122 | } 123 | -------------------------------------------------------------------------------- /mobile/day13/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "20x20", 5 | "idiom" : "iphone", 6 | "filename" : "Icon-App-20x20@2x.png", 7 | "scale" : "2x" 8 | }, 9 | { 10 | "size" : "20x20", 11 | "idiom" : "iphone", 12 | "filename" : "Icon-App-20x20@3x.png", 13 | "scale" : "3x" 14 | }, 15 | { 16 | "size" : "29x29", 17 | "idiom" : "iphone", 18 | "filename" : "Icon-App-29x29@1x.png", 19 | "scale" : "1x" 20 | }, 21 | { 22 | "size" : "29x29", 23 | "idiom" : "iphone", 24 | "filename" : "Icon-App-29x29@2x.png", 25 | "scale" : "2x" 26 | }, 27 | { 28 | "size" : "29x29", 29 | "idiom" : "iphone", 30 | "filename" : "Icon-App-29x29@3x.png", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "size" : "40x40", 35 | "idiom" : "iphone", 36 | "filename" : "Icon-App-40x40@2x.png", 37 | "scale" : "2x" 38 | }, 39 | { 40 | "size" : "40x40", 41 | "idiom" : "iphone", 42 | "filename" : "Icon-App-40x40@3x.png", 43 | "scale" : "3x" 44 | }, 45 | { 46 | "size" : "60x60", 47 | "idiom" : "iphone", 48 | "filename" : "Icon-App-60x60@2x.png", 49 | "scale" : "2x" 50 | }, 51 | { 52 | "size" : "60x60", 53 | "idiom" : "iphone", 54 | "filename" : "Icon-App-60x60@3x.png", 55 | "scale" : "3x" 56 | }, 57 | { 58 | "size" : "20x20", 59 | "idiom" : "ipad", 60 | "filename" : "Icon-App-20x20@1x.png", 61 | "scale" : "1x" 62 | }, 63 | { 64 | "size" : "20x20", 65 | "idiom" : "ipad", 66 | "filename" : "Icon-App-20x20@2x.png", 67 | "scale" : "2x" 68 | }, 69 | { 70 | "size" : "29x29", 71 | "idiom" : "ipad", 72 | "filename" : "Icon-App-29x29@1x.png", 73 | "scale" : "1x" 74 | }, 75 | { 76 | "size" : "29x29", 77 | "idiom" : "ipad", 78 | "filename" : "Icon-App-29x29@2x.png", 79 | "scale" : "2x" 80 | }, 81 | { 82 | "size" : "40x40", 83 | "idiom" : "ipad", 84 | "filename" : "Icon-App-40x40@1x.png", 85 | "scale" : "1x" 86 | }, 87 | { 88 | "size" : "40x40", 89 | "idiom" : "ipad", 90 | "filename" : "Icon-App-40x40@2x.png", 91 | "scale" : "2x" 92 | }, 93 | { 94 | "size" : "76x76", 95 | "idiom" : "ipad", 96 | "filename" : "Icon-App-76x76@1x.png", 97 | "scale" : "1x" 98 | }, 99 | { 100 | "size" : "76x76", 101 | "idiom" : "ipad", 102 | "filename" : "Icon-App-76x76@2x.png", 103 | "scale" : "2x" 104 | }, 105 | { 106 | "size" : "83.5x83.5", 107 | "idiom" : "ipad", 108 | "filename" : "Icon-App-83.5x83.5@2x.png", 109 | "scale" : "2x" 110 | }, 111 | { 112 | "size" : "1024x1024", 113 | "idiom" : "ios-marketing", 114 | "filename" : "Icon-App-1024x1024@1x.png", 115 | "scale" : "1x" 116 | } 117 | ], 118 | "info" : { 119 | "version" : 1, 120 | "author" : "xcode" 121 | } 122 | } 123 | -------------------------------------------------------------------------------- /mobile/day22/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "20x20", 5 | "idiom" : "iphone", 6 | "filename" : "Icon-App-20x20@2x.png", 7 | "scale" : "2x" 8 | }, 9 | { 10 | "size" : "20x20", 11 | "idiom" : "iphone", 12 | "filename" : "Icon-App-20x20@3x.png", 13 | "scale" : "3x" 14 | }, 15 | { 16 | "size" : "29x29", 17 | "idiom" : "iphone", 18 | "filename" : "Icon-App-29x29@1x.png", 19 | "scale" : "1x" 20 | }, 21 | { 22 | "size" : "29x29", 23 | "idiom" : "iphone", 24 | "filename" : "Icon-App-29x29@2x.png", 25 | "scale" : "2x" 26 | }, 27 | { 28 | "size" : "29x29", 29 | "idiom" : "iphone", 30 | "filename" : "Icon-App-29x29@3x.png", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "size" : "40x40", 35 | "idiom" : "iphone", 36 | "filename" : "Icon-App-40x40@2x.png", 37 | "scale" : "2x" 38 | }, 39 | { 40 | "size" : "40x40", 41 | "idiom" : "iphone", 42 | "filename" : "Icon-App-40x40@3x.png", 43 | "scale" : "3x" 44 | }, 45 | { 46 | "size" : "60x60", 47 | "idiom" : "iphone", 48 | "filename" : "Icon-App-60x60@2x.png", 49 | "scale" : "2x" 50 | }, 51 | { 52 | "size" : "60x60", 53 | "idiom" : "iphone", 54 | "filename" : "Icon-App-60x60@3x.png", 55 | "scale" : "3x" 56 | }, 57 | { 58 | "size" : "20x20", 59 | "idiom" : "ipad", 60 | "filename" : "Icon-App-20x20@1x.png", 61 | "scale" : "1x" 62 | }, 63 | { 64 | "size" : "20x20", 65 | "idiom" : "ipad", 66 | "filename" : "Icon-App-20x20@2x.png", 67 | "scale" : "2x" 68 | }, 69 | { 70 | "size" : "29x29", 71 | "idiom" : "ipad", 72 | "filename" : "Icon-App-29x29@1x.png", 73 | "scale" : "1x" 74 | }, 75 | { 76 | "size" : "29x29", 77 | "idiom" : "ipad", 78 | "filename" : "Icon-App-29x29@2x.png", 79 | "scale" : "2x" 80 | }, 81 | { 82 | "size" : "40x40", 83 | "idiom" : "ipad", 84 | "filename" : "Icon-App-40x40@1x.png", 85 | "scale" : "1x" 86 | }, 87 | { 88 | "size" : "40x40", 89 | "idiom" : "ipad", 90 | "filename" : "Icon-App-40x40@2x.png", 91 | "scale" : "2x" 92 | }, 93 | { 94 | "size" : "76x76", 95 | "idiom" : "ipad", 96 | "filename" : "Icon-App-76x76@1x.png", 97 | "scale" : "1x" 98 | }, 99 | { 100 | "size" : "76x76", 101 | "idiom" : "ipad", 102 | "filename" : "Icon-App-76x76@2x.png", 103 | "scale" : "2x" 104 | }, 105 | { 106 | "size" : "83.5x83.5", 107 | "idiom" : "ipad", 108 | "filename" : "Icon-App-83.5x83.5@2x.png", 109 | "scale" : "2x" 110 | }, 111 | { 112 | "size" : "1024x1024", 113 | "idiom" : "ios-marketing", 114 | "filename" : "Icon-App-1024x1024@1x.png", 115 | "scale" : "1x" 116 | } 117 | ], 118 | "info" : { 119 | "version" : 1, 120 | "author" : "xcode" 121 | } 122 | } 123 | --------------------------------------------------------------------------------