# Apply Self-Problems

> <mark style="background-color:yellow;">**Please Read the Agreement First**</mark>, then submit your application to our [email](mailto:swflab.taiwan@gmail.com) with the requirements in [*What you need to do if you want to upload the problems*](#what-you-need-to-do-if-you-want-to-upload-the-problems).
>
> Receiving the reply mail means your submission is accepted. We will arrange a meeting in a period depends on the volume and priority.

### Agreement

1. Applying to put your problems on the DappChef means you want to become our **Education Collaborator.** Hence, you should be education institution / teacher / professor / instructor / teaching staff, and you(or your org.) will appear in the bottom of DappChef Website.
2. If your coding problems are used for <mark style="background-color:yellow;">**Free Camping / Workshop, NPO or University Program**</mark>, you could upload the problems in **FREE**. In other words, if you are <mark style="background-color:yellow;">**Profit-oriented Education Institution**</mark>, applying to upload your problems will **COST** little.
3. Putting problems on the DappChef means you agree that <mark style="background-color:yellow;">**EVERYONE**</mark> on the planet could write these problems in any time.
4. Placement Marketing or showing your Logo or statements of brands in the problem is allowed. But the context **MUST NOT** include any illegal behavior or infringe the intellectual property.
5. <mark style="background-color:yellow;">**DappChef and SWF Lab have the final say about the problem setting.**</mark> If the context negotiation doesn't have the consensus, the problem will be taken off the shelves.
6. Final Revised in GMT+8 (Taipei) 2023-03-06 10:59.

### What you need to do if you want to upload the problems

> You have to prepare the below information carefully, or it will be too long to process.

1. Prepare your(or your org's) Information:
   1. Name
   2. Usage Attribute(e.g. Personal, Camping, Workshop, NPO, University Program, Education Institution)
   3. Profit-oriented or not(attach your pricing table will help the negotiate process)
   4. Contact Persion's information(name, e-mail, position, time-zone, location, )
2. Prepare your(or your org's) Logo which will show in the bottom of website.
3. Prepare your problems, <mark style="background-color:yellow;">**EACH problem should has**</mark>:
   1. Problems' statement: what is your problem target.
   2. Problems' Answer Code in Solidity
   3. Problems' Body: please empty some code or function body of target points, and add enough <mark style="background-color:yellow;">**TODO comments**</mark> let the user know how to solve the problems.
   4. Problems' constructorCallData: if none, empty.
   5. Series of Problems' Testdata: called which function with what input parameters should get what expected return.
   6. Problems' RewardNFT Image: <mark style="background-color:yellow;">**you should design a unique RewardNFT for each problem.**</mark>
   7. Problems' Reference or Resource: where does this problem come from. (e.g. from Myself, from \<Book\_Name>, from \<Article\_or\_Turtorial\_URL>, from \<Github\_Repo\_URL>)

> If you want to test some special cases, but don't know how to present, you can also contact DappChef with mail. We will arrage meeting with you to help design and complete your problem!
>
> Besides basic write-function and read-function judging, what special operations we are supporting now:
>
> * ✅ **Constructor**: Deploy the contract with constructor call data
> * ✅ **Event**: Expect the specific events to be emitted
> * ✅ **EXPECT\_ERROR**: Expect the `require`, `revert`, `assert` to be triggered.
> * ✅ **WITH\_ETHER**: Send Ether (or call function with ether) to the Contract
> * ✅ **MSG\_SENDER**: Use User's Address to be expectReturn or callData
> * ❌ **WAIT**: Wait for few blocks
> * ❌ **GAS\_USED\_LESS**: Expect the total gas used less than specific amount.

### How to know the grade of my students?

1. You should collect the addresses from your students. And they **MUST** use the address which they submitted to solve the problem.
2. We will supply you a Educational Answering Status Dashboard and a Key-Pair.&#x20;
3. You could log-in the dashboard with the key-pair and search the user answering status with address.
4. You could download the target users' grade of relative problems in CSV.

> Theoretically, you could search the user's answering status with the Blockchain Explorer or Reward NFT Contract too.
