mirror of
https://github.com/scroll-tech/scroll.git
synced 2026-01-14 08:28:02 -05:00
79 lines
4.0 KiB
Markdown
79 lines
4.0 KiB
Markdown
# Scroll Contracts
|
|
|
|
This directory contains the solidity code for Scroll L1 bridge and rollup contracts and L2 bridge and pre-deployed contracts. You can also find contract APIs and more details in the [`docs`](./docs) folder.
|
|
|
|
## Directory Structure
|
|
|
|
<pre>
|
|
├── <a href="./docs/">docs</a>: Documentation for the contracts
|
|
├── <a href="./integration-test/">integration-test</a>: Hardhat integration tests
|
|
├── <a href="./lib/">lib</a>: External libraries and testing tools
|
|
├── <a href="./scripts">scripts</a>: Deployment scripts
|
|
├── <a href="./src">src</a>
|
|
│ ├── <a href="./src/gas-swap/">gas-swap</a>: Utility contract that allows gas payment in other tokens
|
|
│ ├── <a href="./src/interfaces/">interfaces</a>: Common contract interfaces
|
|
│ ├── <a href="./src/L1/">L1</a>: Contracts deployed on the L1 (Ethereum)
|
|
│ │ ├── <a href="./src/L1/gateways/">gateways</a>: Gateway router and token gateway contracts
|
|
│ │ ├── <a href="./src/L1/rollup/">rollup</a>: Rollup contracts for data availability and finalization
|
|
│ │ ├── <a href="./src/L1/IL1ScrollMessenger.sol">IL1ScrollMessenger.sol</a>: L1 Scroll messenger interface
|
|
│ │ └── <a href="./src/L1/L1ScrollMessenger.sol">L1ScrollMessenger.sol</a>: L1 Scroll messenger contract
|
|
│ ├── <a href="./src/L2/">L2</a>: Contracts deployed on the L2 (Scroll)
|
|
│ │ ├── <a href="./src/L2/gateways/">gateways</a>: Gateway router and token gateway contracts
|
|
│ │ ├── <a href="./src/L2/predeploys/">predeploys</a>: Pre-deployed contracts on L2
|
|
│ │ ├── <a href="./src/L2/IL2ScrollMessenger.sol">IL2ScrollMessenger.sol</a>: L2 Scroll messenger interface
|
|
│ │ └── <a href="./src/L2/L2ScrollMessenger.sol">L2ScrollMessenger.sol</a>: L2 Scroll messenger contract
|
|
│ ├── <a href="./src/libraries/">libraries</a>: Shared contract libraries
|
|
│ ├── <a href="./src/misc/">misc</a>: Miscellaneous contracts
|
|
│ ├── <a href="./src/mocks/">mocks</a>: Mock contracts used in the testing
|
|
│ ├── <a href="./src/rate-limiter/">rate-limiter</a>: Rater limiter contract
|
|
│ └── <a href="./src/test/">test</a>: Unit tests in solidity
|
|
├── <a href="./foundry.toml">foundry.toml</a>: Foundry configuration
|
|
├── <a href="./hardhat.config.ts">hardhat.config.ts</a>: Hardhat configuration
|
|
├── <a href="./remappings.txt">remappings.txt</a>: Foundry dependency mappings
|
|
...
|
|
</pre>
|
|
|
|
## Dependencies
|
|
|
|
### Node.js
|
|
|
|
First install [`Node.js`](https://nodejs.org/en) and [`npm`](https://www.npmjs.com/).
|
|
Run the following command to install [`yarn`](https://classic.yarnpkg.com/en/):
|
|
|
|
```bash
|
|
npm install --global yarn
|
|
```
|
|
|
|
### Foundry
|
|
|
|
Install `foundryup`, the Foundry toolchain installer:
|
|
|
|
```bash
|
|
curl -L https://foundry.paradigm.xyz | bash
|
|
```
|
|
|
|
If you do not want to use the redirect, feel free to manually download the `foundryup` installation script from [here](https://raw.githubusercontent.com/foundry-rs/foundry/master/foundryup/foundryup).
|
|
|
|
Then, run `foundryup` in a new terminal session or after reloading `PATH`.
|
|
|
|
Other ways to install Foundry can be found [here](https://github.com/foundry-rs/foundry#installation).
|
|
|
|
### Hardhat
|
|
|
|
Run the following command to install [Hardhat](https://hardhat.org/) and other dependencies.
|
|
|
|
```
|
|
yarn install
|
|
```
|
|
|
|
## Build
|
|
|
|
- Run `git submodule update --init --recursive` to initialize git submodules.
|
|
- Run `yarn prettier:solidity` to run linting in fix mode, will auto-format all solidity codes.
|
|
- Run `yarn prettier` to run linting in fix mode, will auto-format all typescript codes.
|
|
- Run `yarn prepare` to install the precommit linting hook.
|
|
- Run `forge build` to compile contracts with foundry.
|
|
- Run `npx hardhat compile` to compile with hardhat.
|
|
- Run `forge test -vvv` to run foundry units tests. It will compile all contracts before running the unit tests.
|
|
- Run `npx hardhat test` to run integration tests. It may not compile all contracts before running, it's better to run `npx hardhat compile` first.
|