Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[website/docs]: + intro & contributing pages #924

Merged
merged 2 commits into from
Sep 20, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/src/SUMMARY.md
Original file line number Diff line number Diff line change
Expand Up @@ -78,5 +78,6 @@
* [Sequence types in memory](spec/data_layout/memory/sequence_types_in_memory.md)
* [Function calls](spec/function_calls.md)

* [Contributing](contributing.md)
* [Release Notes](release_notes.md)
* [Code of Conduct](code_of_conduct.md)
61 changes: 61 additions & 0 deletions docs/src/contributing.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
# Contributing

You *can* contribute to Fe!


## Ways to contribute:

### 1. Reporting or fixing issues.

If you find problems with Fe you can report them to the development team on the project [Github](https://github.com/ethereum/fe).
You are also welcome to work on existing issues, especially any tagged `good first issue` on the project issue board.

### 2. Improving the docs.

We always appreciate improvements to the project documentation. This could be fixing any bugs you find, adding some detail to a description or explanation or developing a new user guide.

To add to the docs you can fork the Fe Github repository and make updates in the `/docs` directory. You can build and serve locally using `mdbook build && mdbook serve`. Then, when you are happy with your changes you can raise a pull request to the main repository.

### 3. Developing Fe

You are also welcome to work on Fe itself. There are many opportunities to help build the language, for example working on the compiler or the language specification, adding tests or developing tooling.

It is a good idea to connect with the existing Fe community to find out what are the priority areas that need attention and to discuss your idea in context before putting time into it. You can find Fe developers on the [Discord](https://discord.gg/yCT6NYBb) or you can use the [Github issue board](https://github.com/ethereum/fe/issues).

> **Please note** that there has been a substantial amount of work done on the `fe-v2` branch of the repository that includes breaking changes. When merged `fe-v2` will revert new contributions based on `master`.
>
> To make your work v2 ready you can build off the `fe-v2` branch. It is recommended to seek out issues tagged `v2` in the Github Issue board.

### 4. Community engagement

We appreciate help answering questions on the Discord and other platforms such as Stack Exchange or Twitter.

> Please note that this project has a [Code of Conduct](code_of_conduct.md). By participating in this project — in the issues, pull requests, or Discord channel — you agree to abide by its terms.

## Processes

### Reporting issues

To report an issue, please use the [Github issue board](https://github.com/ethereum/fe/issues). When reporting issues, please mention the following details:

- Fe version.
- your operating system.
- the steps required to reproduce the issue
- actual vs expected behaviour
- any error messages or relevant logs
- the specific source code where the issue originates

The appropriate place for technical discussions about the language itself is the Fe [Discord](https://discord.gg/yCT6NYBb).

### Rasing Pull Requests

Please [fork the Fe repository](https://docs.github.com/en/get-started/quickstart/fork-a-repo) and raise [pull requests](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request) against the `master` branch.

Your commit messages should be concise and explain the changes made. Your pull request description should explain why the changes were made and list the specific changes. If you have to pull in changes from `master` to your fork (e.g. to resolve merge conflicts), please use `git rebase` rather than `git merge`.

New features should be accompanied by appropriate tests.

Finally, please make sure you respect the coding style for this project.


Thank you for contributing to Fe!
63 changes: 61 additions & 2 deletions docs/src/index.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,62 @@
# The Fe Guide

<img alt="Fe logo" src="images/fe.png" height="300">
<br /><br />
<center><img alt="Fe logo" src="images/fe.png" height="300" ></center>

## What is Fe?

Fe is the *next generation smart contract language for Ethereum*.

Fe is a [smart contract](https://ethereum.org/en/smart-contracts/#introduction-to-smart-contracts) language that strives to make developing Ethereum smart contract development *safer, simpler and more fun*.

Smart contracts are programs executed by a computer embedded into Ethereum clients known as the [Ethereum Virtual Machine (EVM)](https://ethereum.org/en/developers/docs/evm/). The EVM executes bytecode instructions that are not human readable. Therefore, developers use higher-level languages that compiles to EVM bytecode.

Fe is one of these languages.

## Why Fe?

Fe aims to make writing secure smart contract code a great experience. With Fe, writing safe code feels natural and fun.

Fe shares similar syntax with the popular languages [Rust](https://doc.rust-lang.org/book/) and [Python](https://www.python.org/), easing the learning curve for new users. It also implements the best features from Rust to limit dynamic behaviour while also maximizing expressiveness, meaning you can write clean, readable code without sacrificing compile time guarantees.

Fe is:
- statically typed
- expressive
- compiled using Yul
- built to a detailed language specification
- able to limit dynamic behaviour
- rapidly evolving!


## Who is Fe for?

Fe is for *anyone that develops using the EVM*!

Fe compiles to EVM bytecode that can be deployed directly onto Ethereum and EVM-equivalent blockchains.

Fe's syntax will feel familiar to Rust and Python developers.

Here's what a minimal contract looks like in Fe:

```fe
contract GuestBook {
messages: Map<address, String<100>>

pub fn sign(mut self, ctx: Context, book_msg: String<100>) {
self.messages[ctx.msg_sender()] = book_msg
}
}
```


## What problems does Fe solve?

One of the pain points with smart contract languages is that there can be ambiguities in how the compiler translates the human readable code into EVM bytecode. This can lead to security flaws and unexpected behaviours.

The details of the EVM can also cause the higher level languages to be less intuitive and harder to master than some other languages. These are some of the pain points Fe aims to solve. By striving to *maximize both human readability and bytecode predictability*, Fe will provide an enhanced developer experience for everyone working with the EVM.


## Get Started

You can read much more information about Fe in these docs. If you want to get building, you can begin with our [Quickstart guide](quickstart/index.md).

You can also get involved in the Fe community by contributing code or documentation to the project Github or joining the conversation on [Discord](https://discord.gg/yCT6NYBb). Learn more on our [Contributing](contributing.md) page.