Challenge Overview
Welcome to TopCoder - POC Quorum Challenge Review Process with Blockchain - Challenge Submission challenge. This is one of the Blockchain challenge of a series of challenges to build this POC Quorum application.
In this challenge we want to:
1) Platform Setup:
The README.md file should cover:
Challenge Objectives
Create challenge submission and get submission from the challenge for TopCoder - POC Quorum Challenge Review Process, which will be used for showcasing the Blockchain capabilities in TopCoder platform.Project Background
- TopCoder is trying to determine if Blockchain can be used to control the review process of challenges.
- To build the Blockchain network Quorum v2.0.2 will be used.
- To store the submission files IPFS (Inter-Planetary File System) will be used.
- The idea is to have the Quorum as distributed ledger & smart contract platform for all business logic and the challenge data related to review process (review, appeal, appeals response and manager response) will be stored into the Blockchain ledger.
- This is one of the Blockchain challenge of a series of challenges to build this POC Quorum application.
Technology Stack
- Quorum v2.0.2
- IPFS (Inter-Planetary File System)
- Node.js
- Solidity
- Docker
Challenge Requirements
The new review process flow using Blockchain, swagger file, sample json files and platform setup source code can be found in forum. Please register to get access on attached files and ask questions in forum for any clarifications on requirements.In this challenge we want to:
1) Platform Setup:
- Use the source code from previous challenge provided in forum and follow the instructions to setup the platform.
- Create new Node.js API Service using Quorum and add below API Endpoints.
- The swagger file provided in forum with required endpoints. Both REST API models and Blockchain models have been provided. Blockchain models are the ones starting with "Chaincode" prefix.
- We need the project and challenges information should be stored in json format, please refer sample project json file provided in forum.
- Use secret mysecret to generate the tokens for different roles (make it configurable). Please refer sample JWT payload json file provided in forum.
- We need following endpoints to be implemented from swagger file and tested as part of this challenge.
- Challenge:
- Register to a challenge
- Un-register to a challenge
- Challenge Submission:
- Create a challenge submission
- Get a single challenge submission
- Only Members can register for the challenge (Use "Modifier" of the solidity).
- Submission must be accessed only by copilot and manager (User Private Contract / "Modifier" of the solidity).
- Submission must NOT be accessed by other members except owner (User "Modifier" of the solidity).
- POST:
- API will be used to save the file to IPFS and store the information into submissions property in challenge object and should be saved the file name, IPFS hash and memberId. Please refer sample json file.
- Joi should be used to validate data and any error should be returned in JSON format.
- API Payload (multi-form):
- file (the file to be uploaded)
- fileName (the original file name)
- memberId (the member id who is uploading)
- Blockchain will check if member is registered to challenge.
- Add prefix to file name like submission_{challengeId}.
- It will store file to IPFS and retrieve HASH. And also it should save the data to Blockchain ledger, example: refer provided sample project json data.
- GET:
- API will be used to retrieve the file from IPFS.
- Joi should be used to validate data and any error should be returned in JSON format.
- Blockchain should fetch the IPFS hash for submissionId and send the file from IPFS to rest API.
- Only user with copilot role for that project, manager can view all submissions, but member registered to challenge and who uploaded the submission file can view own submission details.
- Only user with copilot role for that project, manager or member registered to challenge and who uploaded the submission file can download the submission.
- All IDs can be either positive Long values or UUID strings. They must be unique in the whole system.
Deployment Guide and Validation Document
You need to provide a deployment guide (README.md) and a validation document (Validation.md).The README.md file should cover:
- All steps necessary to configure the application
- All tests to verify the application
Final Submission Guidelines
- Zip file with submission files
- Detailed documentation for configuring and deploying