Skip to content
Open
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
27 changes: 27 additions & 0 deletions .env.linuz
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
=
AelinFeeEscrow_address=
MerkleTree_address=
AelinAllowList_address=
AelinNftGating_address=
NftCheck_address=
AelinDeal_address=
AelinUpFrontDeal_address=
AelinUpFrontDealFactory_address=
AelinPoolFactory_address=
UNI_address=
USDC_address=
WETH_address=
=
AelinFeeEscrow_address=
MerkleTree_address=
AelinAllowList_address=
AelinNftGating_address=
NftCheck_address=
AelinDeal_address=
=
AelinFeeEscrow_address=
MerkleTree_address=
AelinAllowList_address=
AelinNftGating_address=
NftCheck_address=
AelinDeal_address=
37 changes: 37 additions & 0 deletions .github/workflows/docker_build_push.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
name: Docker Build and Push

on:
push:
pull_request:
branches: [main]

jobs:
docker:
name: Docker Contracts Deployer Build
runs-on: ubuntu-latest
steps:
- name: Private Actions Checkout
uses: actions/checkout@v3

- name: Docker Setup QEMU
uses: docker/setup-qemu-action@v2

- name: Docker Setup Buildx
uses: docker/setup-buildx-action@v2

- name: Docker Login
uses: docker/login-action@v2
with:
username: linuzeth
password: ${{ secrets.DOCKERHUB_PASSWORD }}

- name: Build and push
uses: docker/build-push-action@v3
with:
context: .
file: ci/Dockerfile
platforms: linux/amd64,linux/arm64
push: true
tags: linuzeth/aelin-contracts-deployer:latest
cache-from: type=registry,ref=linuzeth/aelin-contracts-deployer:latest
cache-to: type=inline,ref=linuzeth/aelin-contracts-deployer:latest
54 changes: 54 additions & 0 deletions ci/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
FROM node:14-alpine as installer

# Create app directory
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

# Clone the repository
RUN apk update && apk add git python3 g++ make
RUN git clone https://github.com/AelinXYZ/aelin.git .
RUN git checkout e2e-devops

RUN npm i

#only keep repmappings
RUN mkdir -p ./remappings
RUN mv ./node_modules/@ensdomains ./remappings/@ensdomains
RUN mv ./node_modules/@eth-optimism ./remappings/@eth-optimism
RUN mv ./node_modules/@openzeppelin ./remappings/@openzeppelin
RUN mv ./node_modules/eth-gas-reporter ./remappings/eth-gas-reporter
RUN mv ./node_modules/hardhat ./remappings/hardhat
RUN mv ./node_modules/openzeppelin-solidity-2.3.0 ./remappings/openzeppelin-solidity-2.3.0/

# no need to keep this
RUN rm -rf ./node_modules

FROM linuzeth/aelin-anvil as builder

RUN apk update && apk add bash

RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

COPY --from=installer /usr/src/app/ ./

# Create custom config file with remappings path
RUN printf "\
[profile.default]\n\
src = 'contracts'\n\
out = 'artifacts'\n\
libs = ['lib']\n\
remappings = [\n\
'@ensdomains/=remappings/@ensdomains/',\n\
'@eth-optimism/=remappings/@eth-optimism/',\n\
'@openzeppelin/=remappings/@openzeppelin/',\n\
'eth-gas-reporter/=remappings/eth-gas-reporter/',\n\
'hardhat/=remappings/hardhat/',\n\
'openzeppelin-solidity-2.3.0/=remappings/openzeppelin-solidity-2.3.0/',\n\
'ds-test/=lib/forge-std/lib/ds-test/src/',\n\
'forge-std/=lib/forge-std/src/',\n\
]" > foundry.toml

RUN forge build

ENTRYPOINT ["/bin/bash", "-c"]
81 changes: 81 additions & 0 deletions ci/deploy-ci.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
#!/bin/bash

contract_files=(
"contracts/AelinFeeEscrow.sol:AelinFeeEscrow"
"contracts/libraries/MerkleTree.sol:MerkleTree"
"contracts/libraries/AelinAllowList.sol:AelinAllowList"
"contracts/libraries/AelinNftGating.sol:AelinNftGating"
"contracts/libraries/NftCheck.sol:NftCheck"
"contracts/AelinDeal.sol:AelinDeal"
"contracts/AelinPool.sol:AelinPool"
)

envs_names=(
"AelinFeeEscrow_address"
"MerkleTree_address"
"AelinAllowList_address"
"AelinNftGating_address"
"NftCheck_address"
"AelinDeal_address"
"AelinPool_address"
)

tresury="0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266"
private_key="0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80"
addresses=()

echo "******* DEPLOYING ALL CONTRACTS TO ANVIL ********"

# 1. Deploying contracts
for i in {0..6}
do
contract_file=${contract_files[i]}
env_name=${envs_names[i]}
output=$(forge create --rpc-url http://anvil:8545 --private-key $private_key $contract_file)
address=$(echo "$output" | grep "Deployed to: " | awk '{print $3}')
addresses+=("$address")
echo "$env_name=$address" >> .env.linuz
echo "$env_name=${addresses[i]}"
done

# 2. Updating libraries in foundry.toml
echo "
libraries = [
\"contracts/libraries/AelinAllowList.sol:AelinAllowList:${addresses[2]}\",
\"contracts/libraries/MerkleTree.sol:MerkleTree:${addresses[1]}\",
\"contracts/libraries/AelinNftGating.sol:AelinNftGating:${addresses[3]}\"
]" >> ../foundry.toml

# 3. Deploying AelinUpFrontDeal
output_aelinUpFrontDeal=$(forge create --rpc-url http://anvil:8545 --private-key $private_key contracts/AelinUpFrontDeal.sol:AelinUpFrontDeal)
address_aelinUpFrontDeal=$(echo "$output_aelinUpFrontDeal" | grep "Deployed to: " | awk '{print $3}')
echo "AelinUpFrontDeal_address=$address_aelinUpFrontDeal" >> .env.linuz
echo "AelinUpFrontDeal_address=$address_aelinUpFrontDeal"

# 4. Deploying AelinUpFrontDealFactory
output_aelinUpFrontDealFactory=$(forge create --rpc-url http://anvil:8545 --private-key $private_key contracts/AelinUpFrontDealFactory.sol:AelinUpFrontDealFactory --constructor-args $address_aelinUpFrontDeal ${addresses[0]} $tresury)
address_aelinUpFrontDealFactory=$(echo "$output_aelinUpFrontDealFactory" | grep "Deployed to: " | awk '{print $3}')
echo "AelinUpFrontDealFactory_address=$address_aelinUpFrontDealFactory" >> .env.linuz
echo "AelinUpFrontDealFactory_address=$address_aelinUpFrontDealFactory"

# 5. Deploying AelinPoolFactory
output_aelinFactory=$(forge create --rpc-url http://anvil:8545 --private-key $private_key contracts/AelinPoolFactory.sol:AelinPoolFactory --constructor-args ${addresses[6]} ${addresses[5]} $tresury ${addresses[0]})
address_aelinFactory=$(echo "$output_aelinFactory" | grep "Deployed to: " | awk '{print $3}')
echo "AelinPoolFactory_address=$address_aelinFactory" >> .env.linuz
echo "AelinPoolFactory_address=$address_aelinFactory"

# 6. Deploying dummy tokens
output_uniToken=$(forge create --rpc-url http://anvil:8545 --private-key $private_key contracts/UNI.sol:UNI)
address_uniToken=$(echo "$output_uniToken" | grep "Deployed to: " | awk '{print $3}')
echo "UNI_address=$address_uniToken" >> .env.linuz
echo "UNI_address=$address_uniToken"
output_usdcToken=$(forge create --rpc-url http://anvil:8545 --private-key $private_key contracts/USDC.sol:USDC)
address_usdcToken=$(echo "$output_usdcToken" | grep "Deployed to: " | awk '{print $3}')
echo "USDC_address=$address_usdcToken" >> .env.linuz
echo "USDC_address=$address_usdcToken"
output_wethToken=$(forge create --rpc-url http://anvil:8545 --private-key $private_key contracts/WETH.sol:WETH)
address_wethToken=$(echo "$output_wethToken" | grep "Deployed to: " | awk '{print $3}')
echo "WETH_address=$address_wethToken" >> .env.linuz
echo "WETH_address=$address_wethToken"

echo "******* DONE! *******"
10 changes: 10 additions & 0 deletions contracts/UNI.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.6;

import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";

contract UNI is ERC20 {
constructor() ERC20("UNI", "UNI") {
_mint(msg.sender, 100_000 ether);
}
}
14 changes: 14 additions & 0 deletions contracts/USDC.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.6;

import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";

contract USDC is ERC20 {
constructor() ERC20("USDC", "USDC") {
_mint(msg.sender, 100_000 ether);
}

function decimals() public view virtual override returns (uint8) {
return 6;
}
}
10 changes: 10 additions & 0 deletions contracts/WETH.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.6;

import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";

contract WETH is ERC20 {
constructor() ERC20("WETH", "WETH") {
_mint(msg.sender, 100_000 ether);
}
}
17 changes: 9 additions & 8 deletions foundry.toml
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
[default]

[profile.default]
src = 'contracts'
out = 'artifacts'
libs = ['lib']
Expand All @@ -12,11 +13,11 @@ remappings = [
'ds-test/=lib/forge-std/lib/ds-test/src/',
'forge-std/=lib/forge-std/src/',
]
# libraries = [
# "contracts/libraries/MerkleTree.sol:MerkleTree:0x70B0D8c1a00B937Cbb08DcA33812670D235157Bc",
# "contracts/libraries/AelinAllowList.sol:AelinAllowList:0xAA837deD11f623F6F56d03A5496FA6af71E6c9F5",
# "contracts/libraries/AelinNftGating.sol:AelinNftGating:0x103Dc458C4CEb1B47A4CF031919e426218a34048"
# ]
fuzz_max_global_rejects = 50000000

# See more config options https://github.com/foundry-rs/foundry/tree/master/config
fuzz_max_global_rejects = 50000000

#libraries = [
# "contracts/libraries/AelinAllowList.sol:AelinAllowList:0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0",
# "contracts/libraries/MerkleTree.sol:MerkleTree:0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512",
# "contracts/libraries/AelinNftGating.sol:AelinNftGating:0xCf7Ed3AccA5a467e9e704C703E8D87F634fB0Fc9"
#]
Loading