Skip to content

Commit

Permalink
init 🥬.
Browse files Browse the repository at this point in the history
  • Loading branch information
6boris committed Oct 16, 2023
0 parents commit 2d20a9d
Show file tree
Hide file tree
Showing 93 changed files with 6,027 additions and 0 deletions.
19 changes: 19 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# EditorConfig http://EditorConfig.org

# top-most EditorConfig file
root = true

# All files
[*]
charset = utf-8
end_of_line = lf
indent_size = 2
indent_style = space
insert_final_newline = true
trim_trailing_whitespace = true

[*.sol]
indent_size = 4

[*.tree]
indent_size = 1
11 changes: 11 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
export API_KEY_ALCHEMY="YOUR_API_KEY_ALCHEMY"
export API_KEY_ARBISCAN="YOUR_API_KEY_ARBISCAN"
export API_KEY_BSCSCAN="YOUR_API_KEY_BSCSCAN"
export API_KEY_ETHERSCAN="YOUR_API_KEY_ETHERSCAN"
export API_KEY_GNOSISSCAN="YOUR_API_KEY_GNOSISSCAN"
export API_KEY_INFURA="YOUR_API_KEY_INFURA"
export API_KEY_OPTIMISTIC_ETHERSCAN="YOUR_API_KEY_OPTIMISTIC_ETHERSCAN"
export API_KEY_POLYGONSCAN="YOUR_API_KEY_POLYGONSCAN"
export API_KEY_SNOWTRACE="YOUR_API_KEY_SNOWTRACE"
export MNEMONIC="YOUR_MNEMONIC"
export FOUNDRY_PROFILE="default"
1 change: 1 addition & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
foundry/lib/** linguist-vendored
1 change: 1 addition & 0 deletions .github/FUNDING.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
github: "6boris"
38 changes: 38 additions & 0 deletions .github/scripts/rename.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
#!/usr/bin/env bash

# https://gist.github.com/vncsna/64825d5609c146e80de8b1fd623011ca
set -euo pipefail

# Define the input vars
GITHUB_REPOSITORY=${1?Error: Please pass username/repo, e.g. prb/foundry-template}
GITHUB_REPOSITORY_OWNER=${2?Error: Please pass username, e.g. prb}
GITHUB_REPOSITORY_DESCRIPTION=${3:-""} # If null then replace with empty string

echo "GITHUB_REPOSITORY: $GITHUB_REPOSITORY"
echo "GITHUB_REPOSITORY_OWNER: $GITHUB_REPOSITORY_OWNER"
echo "GITHUB_REPOSITORY_DESCRIPTION: $GITHUB_REPOSITORY_DESCRIPTION"

# jq is like sed for JSON data
JQ_OUTPUT=`jq \
--arg NAME "@$GITHUB_REPOSITORY" \
--arg AUTHOR_NAME "$GITHUB_REPOSITORY_OWNER" \
--arg URL "https://github.com/$GITHUB_REPOSITORY_OWNER" \
--arg DESCRIPTION "$GITHUB_REPOSITORY_DESCRIPTION" \
'.name = $NAME | .description = $DESCRIPTION | .author |= ( .name = $AUTHOR_NAME | .url = $URL )' \
package.json
`

# Overwrite package.json
echo "$JQ_OUTPUT" > package.json

# Make sed command compatible in both Mac and Linux environments
# Reference: https://stackoverflow.com/a/38595160/8696958
sedi () {
sed --version >/dev/null 2>&1 && sed -i -- "$@" || sed -i "" "$@"
}

# Rename instances of "PaulRBerg/foundry-template" to the new repo name in README.md for badges only
sedi "/gitpod/ s|PaulRBerg/foundry-template|"${GITHUB_REPOSITORY}"|;" "README.md"
sedi "/gitpod-badge/ s|PaulRBerg/foundry-template|"${GITHUB_REPOSITORY}"|;" "README.md"
sedi "/gha/ s|PaulRBerg/foundry-template|"${GITHUB_REPOSITORY}"|;" "README.md"
sedi "/gha-badge/ s|PaulRBerg/foundry-template|"${GITHUB_REPOSITORY}"|;" "README.md"
94 changes: 94 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
name: "CI"

env:
API_KEY_ALCHEMY: ${{ secrets.API_KEY_ALCHEMY }}
FOUNDRY_PROFILE: "ci"

on:
workflow_dispatch:
pull_request:
push:
branches:
- "main"

jobs:
lint:
runs-on: "ubuntu-latest"
steps:
- name: "Check out the repo"
uses: "actions/checkout@v3"
with:
submodules: "recursive"

- name: "Install Foundry"
uses: "foundry-rs/foundry-toolchain@v1"

- name: "Install Pnpm"
uses: "pnpm/action-setup@v2"
with:
version: "8"

- name: "Install Node.js"
uses: "actions/setup-node@v3"
with:
cache: "pnpm"
node-version: "lts/*"

- name: "Install the Node.js dependencies"
run: "pnpm install"

- name: "Lint the contracts"
run: "pnpm lint"

- name: "Add lint summary"
run: |
echo "## Lint result" >> $GITHUB_STEP_SUMMARY
echo "✅ Passed" >> $GITHUB_STEP_SUMMARY
build:
runs-on: "ubuntu-latest"
steps:
- name: "Check out the repo"
uses: "actions/checkout@v3"
with:
submodules: "recursive"

- name: "Install Foundry"
uses: "foundry-rs/foundry-toolchain@v1"

- name: "Build the contracts and print their size"
run: "forge build --sizes"

- name: "Add build summary"
run: |
echo "## Build result" >> $GITHUB_STEP_SUMMARY
echo "✅ Passed" >> $GITHUB_STEP_SUMMARY
test:
needs: ["lint", "build"]
runs-on: "ubuntu-latest"
steps:
- name: "Check out the repo"
uses: "actions/checkout@v3"
with:
submodules: "recursive"

- name: "Install Foundry"
uses: "foundry-rs/foundry-toolchain@v1"

- name: "Show the Foundry config"
run: "forge config"

- name: "Generate a fuzz seed that changes weekly to avoid burning through RPC allowance"
run: >
echo "FOUNDRY_FUZZ_SEED=$(
echo $(($EPOCHSECONDS - $EPOCHSECONDS % 604800))
)" >> $GITHUB_ENV
- name: "Run the tests"
run: "forge test"

- name: "Add test summary"
run: |
echo "## Tests result" >> $GITHUB_STEP_SUMMARY
echo "✅ Passed" >> $GITHUB_STEP_SUMMARY
52 changes: 52 additions & 0 deletions .github/workflows/create.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
name: "Create"

# The workflow will run only when the "Use this template" button is used
on:
create:

jobs:
create:
# We only run this action when the repository isn't the template repository. References:
# - https://docs.github.com/en/actions/learn-github-actions/contexts
# - https://docs.github.com/en/actions/learn-github-actions/expressions
if: ${{ !github.event.repository.is_template }}
permissions: "write-all"
runs-on: "ubuntu-latest"
steps:
- name: "Check out the repo"
uses: "actions/checkout@v3"

- name: "Update package.json"
env:
GITHUB_REPOSITORY_DESCRIPTION: ${{ github.event.repository.description }}
run:
./.github/scripts/rename.sh "$GITHUB_REPOSITORY" "$GITHUB_REPOSITORY_OWNER" "$GITHUB_REPOSITORY_DESCRIPTION"

- name: "Add rename summary"
run: |
echo "## Commit result" >> $GITHUB_STEP_SUMMARY
echo "✅ Passed" >> $GITHUB_STEP_SUMMARY
- name: "Remove files not needed in the user's copy of the template"
run: |
rm -f "./.github/FUNDING.yml"
rm -f "./.github/scripts/rename.sh"
rm -f "./.github/workflows/create.yml"
- name: "Add remove summary"
run: |
echo "## Remove result" >> $GITHUB_STEP_SUMMARY
echo "✅ Passed" >> $GITHUB_STEP_SUMMARY
- name: "Update commit"
uses: "stefanzweifel/git-auto-commit-action@v4"
with:
commit_message: "feat: initial commit"
commit_options: "--amend"
push_options: "--force"
skip_fetch: true

- name: "Add commit summary"
run: |
echo "## Commit result" >> $GITHUB_STEP_SUMMARY
echo "✅ Passed" >> $GITHUB_STEP_SUMMARY
17 changes: 17 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# directories
node_modules

foundry/out
foundry/coverage
foundry/cache
foundry/broadcast

# files
*.env
*.log
.DS_Store
.pnp.*
lcov.info
yarn.lock


102 changes: 102 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
[submodule "foundry/lib/openzeppelin-contracts-v4"]
path = foundry/lib/openzeppelin-contracts-v4
url = https://github.com/OpenZeppelin/openzeppelin-contracts
[submodule "foundry/lib/openzeppelin-contracts"]
path = foundry/lib/openzeppelin-contracts
url = https://github.com/OpenZeppelin/openzeppelin-contracts
[submodule "foundry/lib/forge-std"]
path = foundry/lib/forge-std
url = https://github.com/foundry-rs/forge-std
[submodule "foundry/lib/prb-test"]
path = foundry/lib/prb-test
url = https://github.com/PaulRBerg/prb-test
[submodule "foundry/lib/v2-periphery"]
path = foundry/lib/v2-periphery
url = https://github.com/Uniswap/v2-periphery
[submodule "foundry/lib/v2-core"]
path = foundry/lib/v2-core
url = https://github.com/Uniswap/v2-core
[submodule "foundry/lib/v3-periphery"]
path = foundry/lib/v3-periphery
url = https://github.com/Uniswap/v3-periphery
[submodule "foundry/lib/v3-core"]
path = foundry/lib/v3-core
url = https://github.com/Uniswap/v3-core
[submodule "foundry/lib/v4-periphery"]
path = foundry/lib/v4-periphery
url = https://github.com/Uniswap/v4-periphery
[submodule "foundry/lib/v4-core"]
path = foundry/lib/v4-core
url = https://github.com/Uniswap/v4-core
[submodule "foundry/lib/solmate"]
path = foundry/lib/solmate
url = https://github.com/transmissions11/solmate
[submodule "foundry/lib/solady"]
path = foundry/lib/solady
url = https://github.com/vectorized/solady
[submodule "foundry/lib/safe-contracts"]
path = foundry/lib/safe-contracts
url = https://github.com/safe-global/safe-contracts
[submodule "foundry/lib/openzeppelin-contracts-upgradeable"]
path = foundry/lib/openzeppelin-contracts-upgradeable
url = https://github.com/OpenZeppelin/openzeppelin-contracts-upgradeable
[submodule "foundry/lib/openzeppelin-contracts-upgradeable-v4.7.1"]
path = foundry/lib/openzeppelin-contracts-upgradeable-v4.7.1
url = https://github.com/OpenZeppelin/openzeppelin-contracts-upgradeable
[submodule "foundry/lib/openzeppelin-contracts-v4.7.1"]
path = foundry/lib/openzeppelin-contracts-v4.7.1
url = https://github.com/OpenZeppelin/openzeppelin-contracts
[submodule "foundry/lib/safe-contracts-v1.3.0"]
path = foundry/lib/safe-contracts-v1.3.0
url = https://github.com/safe-global/safe-contracts
[submodule "foundry/lib/@uniswap/v2-periphery"]
path = foundry/lib/@uniswap/v2-periphery
url = https://github.com/Uniswap/v2-periphery
[submodule "foundry/lib/@uniswap/v2-core"]
path = foundry/lib/@uniswap/v2-core
url = https://github.com/Uniswap/v2-core
[submodule "foundry/lib/@uniswap/v3-core"]
path = foundry/lib/@uniswap/v3-core
url = https://github.com/Uniswap/v3-core
[submodule "foundry/lib/@uniswap/v3-periphery"]
path = foundry/lib/@uniswap/v3-periphery
url = https://github.com/Uniswap/v3-periphery
[submodule "foundry/lib/@uniswap/v4-core"]
path = foundry/lib/@uniswap/v4-core
url = https://github.com/Uniswap/v4-core
[submodule "foundry/lib/@uniswap/v4-periphery"]
path = foundry/lib/@uniswap/v4-periphery
url = https://github.com/Uniswap/v4-periphery
[submodule "foundry/lib/@gnosis.pm/safe-contracts"]
path = foundry/lib/@gnosis.pm/safe-contracts
url = https://github.com/safe-global/safe-contracts
[submodule "foundry/foundry/lib/@gnosis.pm/safe-contracts-v1.3.0"]
path = foundry/foundry/lib/@gnosis.pm/safe-contracts-v1.3.0
url = https://github.com/safe-global/safe-contracts
[submodule "foundry/lib/@gnosis.pm/safe-contracts-v1.3.0"]
path = foundry/lib/@gnosis.pm/safe-contracts-v1.3.0
url = https://github.com/safe-global/safe-contracts
[submodule "foundry/lib/@openzeppelin/contracts"]
path = foundry/lib/@openzeppelin/contracts
url = https://github.com/OpenZeppelin/openzeppelin-contracts
[submodule "foundry/lib/@openzeppelin/contracts-v4.7.1"]
path = foundry/lib/@openzeppelin/contracts-v4.7.1
url = https://github.com/OpenZeppelin/openzeppelin-contracts
[submodule "foundry/lib/@openzeppelin/contracts-upgradeable"]
path = foundry/lib/@openzeppelin/contracts-upgradeable
url = https://github.com/OpenZeppelin/openzeppelin-contracts-upgradeable
[submodule "foundry/lib/@openzeppelin/contracts-upgradeable-v4.7.1"]
path = foundry/lib/@openzeppelin/contracts-upgradeable-v4.7.1
url = https://github.com/OpenZeppelin/openzeppelin-contracts-upgradeable
[submodule "foundry/lib/@dev/forge-std"]
path = foundry/lib/@dev/forge-std
url = https://github.com/foundry-rs/forge-std
[submodule "foundry/lib/@dev/prb-test"]
path = foundry/lib/@dev/prb-test
url = https://github.com/PaulRBerg/prb-test
[submodule "foundry/lib/@dev/ds-test"]
path = foundry/lib/@dev/ds-test
url = https://github.com/dapphub/ds-test
[submodule "foundry/lib/@openzeppelin/contracts-v4.7.3"]
path = foundry/lib/@openzeppelin/contracts-v4.7.3
url = https://github.com/OpenZeppelin/openzeppelin-contracts
18 changes: 18 additions & 0 deletions .prettierignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# directories
broadcast
cache
coverage
lib
node_modules
out

# files
*.env
*.log
.DS_Store
.pnp.*
lcov.info
package-lock.json
pnpm-lock.yaml
yarn.lock
foundry/lib
7 changes: 7 additions & 0 deletions .prettierrc.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
bracketSpacing: true
printWidth: 120
proseWrap: "always"
singleQuote: false
tabWidth: 2
trailingComma: "all"
useTabs: false
20 changes: 20 additions & 0 deletions .solhint.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
"extends": "solhint:recommended",
"rules": {
"code-complexity": ["warn", 10],
"compiler-version": ["error", ">=0.8.0"],
"func-name-mixedcase": "off",
"func-visibility": ["error", { "ignoreConstructors": true }],
"max-line-length": ["error", 130],
"named-parameters-mapping": "off",
"no-console": "off",
"not-rely-on-time": "off",
"one-contract-per-file": "off",
"custom-errors": "off",
"no-empty-blocks": "off",
"contract-name-camelcase": "off",
"const-name-snakecase": "off",
"no-inline-assembly": "off",
"var-name-mixedcase": "off"
}
}
1 change: 1 addition & 0 deletions .solhintignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
foundry/lib
3 changes: 3 additions & 0 deletions .vscode/extensions.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"recommendations": ["esbenp.prettier-vscode", "NomicFoundation.hardhat-solidity"]
}
Loading

0 comments on commit 2d20a9d

Please sign in to comment.