.gitpod.yml
README.md
contract
    Cargo.toml
    README.md
    build.sh
    deploy.sh
    src
        lib.rs
frontend
    App.css
    App.js
    assets
        global.css
        logo-black.svg
        logo-white.svg
    index.css
    index.html
    index.js
    near-interface.js
    near-wallet.js
    netlify.toml
    package.json
    queries.ts
    start.sh
    store
        authentication
            authentication.actions.js
            authentication.reducer.js
        categories
            categories.actions.js
            categories.reducer.js
        course
            course.actions.js
            course.reducer.js
        courses
            courses.actions.js
            courses.reducer.js
        curriculum
            curriculum.actions.js
            curriculum.reducer.js
        formation
            formation.actions.js
            formation.reducer.js
        formations
            formations.actions.js
            formations.reducer.js
        forum
            forum.actions.js
            forum.reducer.js
        index.js
        reviews
            reviews.actions.js
            reviews.reducer.js
        rootReducer.js
        user
            user.actions.js
            user.reducer.js
        users
            users.actions.js
            users.reducer.js
    ui-components.js
    utils
        convertFile.js
        currentUser.js
        helpers.js
        history.js
instructor
    App.css
    App.js
    assets
        global.css
        img
            achievement.svg
            graduation-cap.svg
            knowledge.svg
            logo.svg
            online-course.svg
            promotion.svg
            sign.svg
        logo-black.svg
        logo-white.svg
    hooks
        useModal.js
    index.css
    index.html
    index.js
    near-interface.js
    near-wallet.js
    netlify.toml
    package.json
    queries.ts
    start.sh
    store
        applications
            applications.actions.js
            applications.reducer.js
        authentication
            authentication.actions.js
            authentication.reducer.js
        categories
            categories.actions.js
            categories.reducer.js
            categories.selectors.js
        course
            course.actions.js
            course.reducer.js
            course.selectors.js
        courses
            courses.actions.js
            courses.reducer.js
            courses.selectors.js
        dashboard
            dashboard.actions.js
            dashboard.reducer.js
        index.js
        reviews
            reviews.actions.js
            reviews.reducer.js
            reviews.selectors.js
        rootReducer.js
        settings
            settings.actions.js
        user
            user.actions.js
            user.reducer.js
        users
            users.actions.js
            users.reducer.js
            users.selectors.js
    ui-components.js
    utils
        api.js
        convertFile.js
        currentUser.js
        helpers.js
        history.js
        url.js
Signup Signin Page
All Reviews
integration-tests
    package-lock.json
    package.json
    src
        main.ava.ts
package-lock.json
package.json
subgraph
    mapping.ts
    package-lock.json
    package.json

# Hello NEAR Contract

The smart contract exposes two methods to enable storing and retrieving a greeting in the NEAR network.

```rust
const DEFAULT_GREETING: &str = "Hello";

#[near_bindgen]
#[derive(BorshDeserialize, BorshSerialize)]
pub struct Contract {
    greeting: String,
}

impl Default for Contract {
    fn default() -> Self {
        Self{greeting: DEFAULT_GREETING.to_string()}
    }
}

#[near_bindgen]
impl Contract {
    // Public: Returns the stored greeting, defaulting to 'Hello'
    pub fn get_greeting(&self) -> String {
        return self.greeting.clone();
    }

    // Public: Takes a greeting, such as 'howdy', and records it
    pub fn set_greeting(&mut self, greeting: String) {
        // Record a log permanently to the blockchain!
        log!("Saving greeting {}", greeting);
        self.greeting = greeting;
    }
}
```

<br />

# Quickstart

1. Make sure you have installed [rust](https://rust.org/).
2. Install the [`NEAR CLI`](https://github.com/near/near-cli#setup)

<br />

## 1. Build and Deploy the Contract
You can automatically compile and deploy the contract in the NEAR testnet by running:

```bash
./deploy.sh
```

Once finished, check the `neardev/dev-account` file to find the address in which the contract was deployed:

```bash
cat ./neardev/dev-account
# e.g. dev-1659899566943-21539992274727
```

<br />

## 2. Retrieve the Greeting

`get_greeting` is a read-only method (aka `view` method).

`View` methods can be called for **free** by anyone, even people **without a NEAR account**!

```bash
# Use near-cli to get the greeting
near view <dev-account> get_greeting
```

<br />

## 3. Store a New Greeting
`set_greeting` changes the contract's state, for which it is a `change` method.

`Change` methods can only be invoked using a NEAR account, since the account needs to pay GAS for the transaction.

```bash
# Use near-cli to set a new greeting
near call <dev-account> set_greeting '{"greeting":"howdy"}' --accountId <dev-account>
```

**Tip:** If you would like to call `set_greeting` using your own account, first login into NEAR using:

```bash
# Use near-cli to login your NEAR account
near login
```

and then use the logged account to sign the transaction: `--accountId <your-account>`.
Quark Protocol
===============

Decentralized EdTech Platform benefitting creators and learners

near-blank-project
==================

This app was initialized with [create-near-app]

Quick Start
===========

If you haven't installed dependencies during setup:

    npm install

Build and deploy your contract to TestNet with a temporary dev account:

    npm run deploy

Test your contract:

    npm test

If you have a frontend, run `npm start`. This will run a dev server.

Exploring The Code
==================

1. The smart-contract code lives in the `/contract` folder. See the README there for
   more info. In blockchain apps the smart contract is the "backend" of your app.
2. The frontend code lives in the `/frontend` folder. `/frontend/index.html` is a great
   place to start exploring. Note that it loads in `/frontend/index.js`,
   this is your entrypoint to learn how the frontend connects to the NEAR blockchain.
3. Test your contract: `npm test`, this will run the tests in `integration-tests` directory.

Deploy
======

Every smart contract in NEAR has its [own associated account][NEAR accounts]. 
When you run `npm run deploy`, your smart contract gets deployed to the live NEAR TestNet with a temporary dev account.
When you're ready to make it permanent, here's how:

Step 0: Install near-cli (optional)
-------------------------------------

[near-cli] is a command line interface (CLI) for interacting with the NEAR blockchain. It was installed to the local `node_modules` folder when you ran `npm install`, but for best ergonomics you may want to install it globally:

    npm install --global near-cli

Or, if you'd rather use the locally-installed version, you can prefix all `near` commands with `npx`

Ensure that it's installed with `near --version` (or `npx near --version`)

Step 1: Create an account for the contract
------------------------------------------

Each account on NEAR can have at most one contract deployed to it. If you've already created an account such as `your-name.testnet`, you can deploy your contract to `near-blank-project.your-name.testnet`. Assuming you've already created an account on [NEAR Wallet], here's how to create `near-blank-project.your-name.testnet`:

1. Authorize NEAR CLI, following the commands it gives you:

      near login

2. Create a subaccount (replace `YOUR-NAME` below with your actual account name):

      near create-account near-blank-project.YOUR-NAME.testnet --masterAccount YOUR-NAME.testnet

Step 2: deploy the contract
---------------------------

Use the CLI to deploy the contract to TestNet with your account ID.
Replace `PATH_TO_WASM_FILE` with the `wasm` that was generated in `contract` build directory.

    near deploy --accountId near-blank-project.YOUR-NAME.testnet --wasmFile PATH_TO_WASM_FILE

Step 3: set contract name in your frontend code
-----------------------------------------------

Modify the line in `src/config.js` that sets the account name of the contract. Set it to the account id you used above.

    const CONTRACT_NAME = process.env.CONTRACT_NAME || 'near-blank-project.YOUR-NAME.testnet'

Troubleshooting
===============

On Windows, if you're seeing an error containing `EPERM` it may be related to spaces in your path. Please see [this issue](https://github.com/zkat/npx/issues/209) for more details.

  [create-near-app]: https://github.com/near/create-near-app
  [Node.js]: https://nodejs.org/en/download/package-manager/
  [jest]: https://jestjs.io/
  [NEAR accounts]: https://docs.near.org/concepts/basics/account
  [NEAR Wallet]: https://wallet.testnet.near.org/
  [near-cli]: https://github.com/near/near-cli
  [gh-pages]: https://github.com/tschaub/gh-pages
