Try โ€‚โ€‰HackMD

ICP Typescript 101 JSON - EN

Course

{
  "name": "TypeScript Smart Contract 101",
  "slug": "typescript-smart-contract-101",
  "community": "icp",
  "summary": "This course provides an introduction to developing on the Internet Computer Protocol (ICP) platform using TypeScript. You will learn the basics of building and interacting with smart contracts on the ICP.",
  "description": "This course provides an introduction to developing on the Internet Computer Protocol (ICP) platform using TypeScript. You will learn the basics of building and interacting with smart contracts on the ICP.",
  "duration": 6000000,
  "introduction": {
      "text": "Welcome to this ICP Azle Development 101 course! We will cover an introduction to the Internet Computer Protocol (ICP) platform and Azle, a JavaScript framework for building decentralized applications. You will learn how to set up your development environment and build a simple messaging canister performing CRUD operations."
  },
  "objectives": [
      "Understand the unique features of the ICP platform and how it differs from other blockchain platforms.",
      "Be able to set up your development environment for building decentralized applications on the ICP platform.",
      "Build a messaging smart contract (canister) in TypeScript that performs CRUD operations and be able to interact with it."
  ],
  "prerequisite": {
      "items": [
          "Have knowledge of TypeScript and Node.js.",
          "Have a text editor, preferably Visual Studio Code, due to its excellent support for TypeScript and Node.js development.",
          "Be familiar with the terminal and command line interfaces."
      ]
  },
  "level": 0,
  "locale": "en"
}

Learning module 1

{
  "community": "icp",
  "course": "typescript-smart-contract-101",
  "title": "Introduction to the Internet Computer",
  "description": "In this very short learning module, we will provide you with the essential resources that you need to understand the ICP platform.",
  "duration": 1494000,
  "objectives": [
    "Learn about the Internet Computer's mission and vision.",
    "Get to know the Internet Computer's most important technical concepts.",
    "Get an introduction to the Internet Computer's canister smart contracts."
  ],
  "materials": [
    {
      "link": "https://www.youtube.com/embed/2jKSpqvECds",
      "duration": 304800,
      "type": "EMBEDDED-VIDEO",
      "description": "This video gives a quick introduction to the Internet Computer: Its history, mission and unique functionality.",
      "title": "What is the Internet Computer?",
      "subtitle": "Youtube video by Dfinity ICP"
    },
    {
        "link": "https://internetcomputer.org/how-it-works",
        "duration": 1080000,
        "type": "ARTICLE",
        "description": "This article gives a detailed overview of the Internet Computer's architecture and functionality.",
        "title": "How does ICP work?",
        "subtitle": "Article by ICP"
    },
    {
        "link": "https://www.youtube.com/watch?v=c5nv6vIG3OQ",
        "duration": 1221000,
        "type": "EMBEDDED-VIDEO",
        "description": "This video gives an introduction to the ICP Canister smart contracts and their unique functionality.",
        "title": "How do Canisters work?",
        "subtitle": "Youtube video by Dfinity ICP"
    }
  ],
  "order": 0
}

Learning module 2

{
  "community": "icp",
  "course": "typescript-smart-contract-101",
  "title": "Setting Up, Building, and Interacting with Smart Contracts on the Internet Computer",
  "description": "This module teaches you how to set up your development environment, understand the boilerplate code for a TypeScript (Azle) project on the ICP platform, as well as build and interact with a simple messaging smart contract (canister) that performs CRUD operations.",
  "duration": 6000000,
  "objectives": [
    "Set up your development environment with Node.js, Node Version Manager (nvm), and DFX.",
    "Understand the essential files and configurations needed to start a TypeScript (Azle) project.",
    "Learn how to build and interact with a messaging smart contract (canister) that performs CRUD operations."
  ],
  "materials": [
    {
      "link": "https://raw.githubusercontent.com/dacadeorg/tutorials/main/ICP/typescript-smart-contract-101/content/typescript-smart-contract-101.md",
      "duration": 6000000,
      "type": "MARKDOWN"
    }
  ],
  "order": 1
}

Challenge

{
  "community": "icp",
  "name": "TypeScript Smart Contract 101",
  "courses": ["typescript-smart-contract-101"],
  "format": {
      "githubLink": true,
      "text": true
  },
  "threshold": 70,
  "reviewTime": 10080,
  "hint": "If you need an idea for a different use case, ask on our <a href='https://discord.com/invite/Y7mKPujuck'>Discord server</a>.",
  "ratingCriteria": [
      {
          "name": "Originality",
          "rubric": [
              {
                  "points": 0,
                  "text": "Your canister lacks originality; you used the same canister code as in the example or only changed names and variables."
              },
              {
                  "points": 20,
                  "text": "You have made some modifications to existing ideas or concepts, but there is limited originality in your code."
              },
              {
                  "points": 40,
                  "text": "You have added a unique functionality into your canister code that is very different from the ones in the learning materials but necessary for your needs."
              },
              {
                  "points": 60,
                  "text": "You created multiple new functions very different from the ones presented in the learning modules or by your peers."
              }
          ]
      },
      {
          "name": "Quality",
          "rubric": [
              {
                  "points": 0,
                  "text": "Your canister code contains critical bugs or does not function properly."
              },
              {
                  "points": 10,
                  "text": "Your canister code has some minor bugs or functional issues that need to be addressed for better performance or usability."
              },
              {
                  "points": 30,
                  "text": "Your canister code is well-structured, follows best practices, and demonstrates good coding practices with minimal issues."
              },
              {
                  "points": 40,
                  "text": "Your canister code is exceptional, showcasing excellent organization, efficiency, best practices, and thorough documentation, with no bugs or issues."
              }
          ]
      }
  ],
  "feedbackInfo": [
      {
          "name": "do",
          "positive": true,
          "criteria": [
              "Explain how the canister could be improved. If possible, create a GitHub pull request for it. (Most important)",
              "State technical problems of code or explanations, explain how they could be fixed. If possible, create a GitHub pull request for it. (Important)",
              "If relevant, explain how the content could be improved. (Not important)"
          ]
      },
      {
          "name": "dont",
          "positive": false,
          "criteria": [
              "Don't rate the quality of the submission.",
              "Don't argue if this is a good topic for a canister."
          ]
      }
  ],
  "description": "Create your own canister with unique code or a totally different use case. Only the canister code is required, not a whole application or project.",
  "objectives": [
      "Develop a unique canister. The canister should not be a replication of existing concepts or ideas.",
      "Ensure that your canister code is of high quality. It should be well-structured, efficient, follow best practices, and thoroughly documented, with no bugs or issues.",
      "Please publish your canister code on GitHub and submit the link to your GitHub repository, such as https://github.com/your-username/unique-icp-canister. Please also include any necessary instructions for deploying and testing your canister."
    ],
    "rewards": [
        {
            "amount": 2,
            "token": "ICP",
            "type": "SUBMISSION",
            "stable": true
        },
        {
            "amount": 1,
            "token": "ICP",
            "type": "FEEDBACK",
            "stable": true
        }
    ],
    "certificateData": {
        "icon": "https://dacade.org/img/certificates/icp-canister-development-101.svg",
        "narrative": "Receivers of this achievement have demonstrated exceptional skills in creating a unique and well-coded canister for the Internet Computer Protocol."
    }
}