diff --git a/README.md b/README.md index a07d33e..4c5b7c6 100644 --- a/README.md +++ b/README.md @@ -1,259 +1,108 @@ -# Hardhat Template [![Open in Gitpod][gitpod-badge]][gitpod] [![Github Actions][gha-badge]][gha] [![Hardhat][hardhat-badge]][hardhat] [![License: MIT][license-badge]][license] +# fhEVM Contracts -[gitpod]: https://gitpod.io/#https://github.com/zama-ai/fhevm-hardhat-template -[gitpod-badge]: https://img.shields.io/badge/Gitpod-Open%20in%20Gitpod-FFB45B?logo=gitpod -[gha]: https://github.com/zama-ai/fhevm-hardhat-template/actions -[gha-badge]: https://github.com/zama-ai/fhevm-hardhat-template/actions/workflows/ci.yml/badge.svg -[hardhat]: https://hardhat.org/ -[hardhat-badge]: https://img.shields.io/badge/Built%20with-Hardhat-FFDB1C.svg -[license]: https://opensource.org/licenses/MIT -[license-badge]: https://img.shields.io/badge/License-MIT-blue.svg +

+ πŸ“ƒ Read white paper | πŸ“’ Documentation | πŸ’› Community support | πŸ“š FHE resources by Zama +

-A Hardhat-based template for developing Solidity smart contracts, with sensible defaults. +

+ + + +

-- [Hardhat](https://github.com/nomiclabs/hardhat): compile, run and test smart contracts -- [TypeChain](https://github.com/ethereum-ts/TypeChain): generate TypeScript bindings for smart contracts -- [Ethers](https://github.com/ethers-io/ethers.js/): renowned Ethereum library and wallet implementation -- [Solhint](https://github.com/protofire/solhint): code linter -- [Solcover](https://github.com/sc-forks/solidity-coverage): code coverage -- [Prettier Plugin Solidity](https://github.com/prettier-solidity/prettier-plugin-solidity): code formatter +fhEVM contracts is a library for encrypted smart contract development on fhEVM. ## Getting Started -Click the [`Use this template`](https://github.com/zama-ai/fhevm-hardhat-template/generate) button at the top of the -page to create a new repository with this repo as the initial state. - -## Features - -This template builds upon the frameworks and libraries mentioned above, so for details about their specific features, -please consult their respective documentations. - -For example, for Hardhat, you can refer to the [Hardhat Tutorial](https://hardhat.org/tutorial) and the -[Hardhat Docs](https://hardhat.org/docs). You might be in particular interested in reading the -[Testing Contracts](https://hardhat.org/tutorial/testing-contracts) section. - -### Sensible Defaults - -This template comes with sensible default configurations in the following files: - -```text -β”œβ”€β”€ .editorconfig -β”œβ”€β”€ .eslintignore -β”œβ”€β”€ .eslintrc.yml -β”œβ”€β”€ .gitignore -β”œβ”€β”€ .prettierignore -β”œβ”€β”€ .prettierrc.yml -β”œβ”€β”€ .solcover.js -β”œβ”€β”€ .solhint.json -└── hardhat.config.ts -``` - -### VSCode Integration - -This template is IDE agnostic, but for the best user experience, you may want to use it in VSCode alongside Nomic -Foundation's [Solidity extension](https://marketplace.visualstudio.com/items?itemName=NomicFoundation.hardhat-solidity). - -### GitHub Actions - -This template comes with GitHub Actions pre-configured. Your contracts will be linted and tested on every push and pull -request made to the `main` branch. - -Note though that to make this work, you must use your `INFURA_API_KEY` and your `MNEMONIC` as GitHub secrets. - -You can edit the CI script in [.github/workflows/ci.yml](./.github/workflows/ci.yml). - -## Usage - -### Pre Requisites - -Install [docker](https://docs.docker.com/engine/install/) - -Install [pnpm](https://pnpm.io/installation) - -Before being able to run any command, you need to create a `.env` file and set a BIP-39 compatible mnemonic as an -environment variable. You can follow the example in `.env.example`. If you don't already have a mnemonic, you can use -this [website](https://iancoleman.io/bip39/) to generate one. - -Then, proceed with installing dependencies: - -```sh -pnpm install -``` - -### Start fhevm - -Start a local fhevm docker container that inlcudes everything needed to deploy FHE encrypted smart contracts - -```sh -# In one terminal, keep it opened -# The node logs are printed -pnpm fhevm:start -``` - -To stop: - -```sh -pnpm fhevm:stop -``` - -### Compile - -Compile the smart contracts with Hardhat: - -```sh -pnpm compile -``` - -### TypeChain - -Compile the smart contracts and generate TypeChain bindings: - -```sh -pnpm typechain -``` - -### List accounts - -From the mnemonic in .env file, list all the derived Ethereum adresses: - -```sh -pnpm task:accounts -``` - -### Get some native coins - -In order to interact with the blockchain, one need some coins. This command will give coins to the first address derived -from the mnemonic in .env file. - -```sh -pnpm fhevm:faucet -``` - -
-
- To get the first derived address from mnemonic -
- -```sh -pnpm task:getEthereumAddress -``` - -
-
- -### Deploy - -Deploy the ERC20 to local network: - -```sh -pnpm deploy:contracts -``` - -Notes:
- -
-Error: cannot get the transaction for EncryptedERC20's previous deployment - -One can delete the local folder in deployments: +### Installation ```bash -rm -r deployments/local/ -``` - -
+# Using npm +npm install fhevm-contracts -
-Info: by default, the local network is used +# Using Yarn +yarn add fhevm-contracts -One can change the network, check [hardhat config file](./hardhat.config.ts). - -
-
- -#### Mint - -Run the `mint` task on the local network: - -```sh -pnpm task:mint --network local --mint 1000 --account alice +# Using pnpm +pnpm add fhevm-contracts ``` -### Test - -Run the tests with Hardhat: +### A Simple Example -```sh -pnpm test -``` +```solidity +// SPDX-License-Identifier: BSD-3-Clause-Clear -### Lint Solidity +pragma solidity ^0.8.20; -Lint the Solidity code: +import "fhevm/lib/TFHE.sol"; +import "fhevm-contracts/contracts/token/ERC20/EncryptedERC20.sol"; -```sh -pnpm lint:sol +contract MyERC20 is EncryptedERC20 { + constructor() EncryptedERC20("MyToken", "MYTOKEN") { + _mint(1000000, msg.sender); + } +} ``` -### Lint TypeScript - -Lint the TypeScript code: +## Resources -```sh -pnpm lint:ts -``` +### Documentation -### Coverage +Full, comprehensive documentation is available here: [https://docs.zama.ai/fhevm](https://docs.zama.ai/fhevm). -Generate the code coverage report: - -```sh -pnpm coverage -``` +### Citations -### Report Gas +To cite fhEVM or the whitepaper in academic papers, please use the following entries: -See the gas usage per unit test and average gas per method call: - -```sh -REPORT_GAS=true pnpm test +```text +@Misc{fhEVM, +title={{Private smart contracts on the EVM using homomorphic encryption}}, +author={Zama}, +year={2023}, +note={\url{https://github.com/zama-ai/fhevm}}, +} ``` -### Clean - -Delete the smart contract artifacts, the coverage reports and the Hardhat cache: - -```sh -pnpm clean +```text +@techreport{fhEVM, +author = "Morten Dahl, ClΓ©ment Danjou, Daniel Demmler, Tore Frederiksen, Petar Ivanov, +Marc Joye, Dragos Rotaru, Nigel Smart, Louis Tremblay Thibault +", +title = "Confidential EVM Smart Contracts using Fully Homomorphic Encryption", +institution = "Zama", +year = "2023" +} ``` -### Tasks - -#### Deploy EncryptedERC20 - -Deploy a new instance of the EncryptedERC20 contract via a task: - -```sh -pnpm task:deployERC20 -``` +### Contributing -## Tips +There are two ways to contribute to the Zama fhEVM contracts: -### Syntax Highlighting +- [Open issues](https://github.com/zama-ai/fhevm-contracts/issues/new/choose) to report bugs and typos, or to suggest + new ideas +- Request to become an official contributor by emailing hello@zama.ai. -If you use VSCode, you can get Solidity syntax highlighting with the -[hardhat-solidity](https://marketplace.visualstudio.com/items?itemName=NomicFoundation.hardhat-solidity) extension. +Becoming an approved contributor involves signing our Contributor License Agreement (CLA)). Only approved contributors +can send pull requests, so please make sure to get in touch before you do!

-## Using GitPod +### License -[GitPod](https://www.gitpod.io/) is an open-source developer platform for remote development. +This software is distributed under the **BSD-3-Clause-Clear** license. If you have any questions, please contact us at +hello@zama.ai. -To view the coverage report generated by `pnpm coverage`, just click `Go Live` from the status bar to turn the server -on/off. +

+ ↑ Back to top +

-## Local development with Docker +## Support -Please check Evmos repository to be able to build FhEVM from sources. + + + -## License +🌟 If you find this project helpful or interesting, please consider giving it a star on GitHub! Your support helps to +grow the community and motivates further development. -This project is licensed under MIT. +

+ ↑ Back to top +